mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2024-12-23 11:59:30 +00:00
add get token balance for address function
This commit is contained in:
parent
5bf18a541a
commit
100ab39847
1 changed files with 52 additions and 6 deletions
|
@ -130,8 +130,8 @@ class EthereumResponse<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class EthereumAPI {
|
abstract class EthereumAPI {
|
||||||
static const blockExplorer = "https://blockscout.com/eth/mainnet/api";
|
static const blockScout = "https://blockscout.com/eth/mainnet/api";
|
||||||
static const abiUrl =
|
static const etherscanApi =
|
||||||
"https://api.etherscan.io/api"; //TODO - Once our server has abi functionality update
|
"https://api.etherscan.io/api"; //TODO - Once our server has abi functionality update
|
||||||
|
|
||||||
static const gasTrackerUrl =
|
static const gasTrackerUrl =
|
||||||
|
@ -141,7 +141,7 @@ abstract class EthereumAPI {
|
||||||
String address, String action) async {
|
String address, String action) async {
|
||||||
try {
|
try {
|
||||||
final response = await get(Uri.parse(
|
final response = await get(Uri.parse(
|
||||||
"$blockExplorer?module=account&action=$action&address=$address"));
|
"$blockScout?module=account&action=$action&address=$address"));
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
return AddressTransaction.fromJson(
|
return AddressTransaction.fromJson(
|
||||||
jsonDecode(response.body) as Map<String, dynamic>);
|
jsonDecode(response.body) as Map<String, dynamic>);
|
||||||
|
@ -163,7 +163,7 @@ abstract class EthereumAPI {
|
||||||
}) async {
|
}) async {
|
||||||
try {
|
try {
|
||||||
String uriString =
|
String uriString =
|
||||||
"$blockExplorer?module=account&action=tokentx&address=$address";
|
"$blockScout?module=account&action=tokentx&address=$address";
|
||||||
if (contractAddress != null) {
|
if (contractAddress != null) {
|
||||||
uriString += "&contractAddress=$contractAddress";
|
uriString += "&contractAddress=$contractAddress";
|
||||||
}
|
}
|
||||||
|
@ -283,6 +283,52 @@ abstract class EthereumAPI {
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
static Future<EthereumResponse<int>> getWalletTokenBalance({
|
||||||
|
required String address,
|
||||||
|
required String contractAddress,
|
||||||
|
}) async {
|
||||||
|
try {
|
||||||
|
final uri = Uri.parse(
|
||||||
|
"$blockScout?module=account&action=tokenbalance"
|
||||||
|
"&contractaddress=$contractAddress&address=$address",
|
||||||
|
);
|
||||||
|
final response = await get(uri);
|
||||||
|
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
final json = jsonDecode(response.body);
|
||||||
|
if (json["message"] == "OK") {
|
||||||
|
final result = json["result"] as String;
|
||||||
|
|
||||||
|
return EthereumResponse(
|
||||||
|
int.parse(result),
|
||||||
|
null,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
throw EthApiException(json["message"] as String);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw EthApiException(
|
||||||
|
"getWalletTokens($address) failed with status code: "
|
||||||
|
"${response.statusCode}",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} on EthApiException catch (e) {
|
||||||
|
return EthereumResponse(
|
||||||
|
null,
|
||||||
|
e,
|
||||||
|
);
|
||||||
|
} catch (e, s) {
|
||||||
|
Logging.instance.log(
|
||||||
|
"getWalletTokens(): $e\n$s",
|
||||||
|
level: LogLevel.Error,
|
||||||
|
);
|
||||||
|
return EthereumResponse(
|
||||||
|
null,
|
||||||
|
EthApiException(e.toString()),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static Future<GasTracker> getGasOracle() async {
|
static Future<GasTracker> getGasOracle() async {
|
||||||
final response = await get(Uri.parse(gasTrackerUrl));
|
final response = await get(Uri.parse(gasTrackerUrl));
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
|
@ -313,7 +359,7 @@ abstract class EthereumAPI {
|
||||||
String contractAddress) async {
|
String contractAddress) async {
|
||||||
try {
|
try {
|
||||||
final response = await get(Uri.parse(
|
final response = await get(Uri.parse(
|
||||||
"$blockExplorer?module=token&action=getToken&contractaddress=$contractAddress"));
|
"$blockScout?module=token&action=getToken&contractaddress=$contractAddress"));
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
final json = jsonDecode(response.body);
|
final json = jsonDecode(response.body);
|
||||||
if (json["message"] == "OK") {
|
if (json["message"] == "OK") {
|
||||||
|
@ -371,7 +417,7 @@ abstract class EthereumAPI {
|
||||||
static Future<AbiRequestResponse> fetchTokenAbi(
|
static Future<AbiRequestResponse> fetchTokenAbi(
|
||||||
String contractAddress) async {
|
String contractAddress) async {
|
||||||
final response = await get(Uri.parse(
|
final response = await get(Uri.parse(
|
||||||
"$abiUrl?module=contract&action=getabi&address=$contractAddress&apikey=EG6J7RJIQVSTP2BS59D3TY2G55YHS5F2HP"));
|
"$etherscanApi?module=contract&action=getabi&address=$contractAddress&apikey=EG6J7RJIQVSTP2BS59D3TY2G55YHS5F2HP"));
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
return AbiRequestResponse.fromJson(
|
return AbiRequestResponse.fromJson(
|
||||||
json.decode(response.body) as Map<String, dynamic>);
|
json.decode(response.body) as Map<String, dynamic>);
|
||||||
|
|
Loading…
Reference in a new issue