mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2024-12-24 12:29:37 +00:00
fix (xtz): add the reqs to rpc api
This commit is contained in:
parent
30dbec866c
commit
88a98953e5
4 changed files with 121 additions and 90 deletions
|
@ -11,7 +11,8 @@ class TezosAPI {
|
||||||
|
|
||||||
Future<List<TezosOperation>?> getTransactions(String address) async {
|
Future<List<TezosOperation>?> getTransactions(String address) async {
|
||||||
try {
|
try {
|
||||||
String transactionsCall = "$_baseURL/explorer/account/$address/operations";
|
String transactionsCall =
|
||||||
|
"$_baseURL/explorer/account/$address/operations";
|
||||||
var response = jsonDecode(
|
var response = jsonDecode(
|
||||||
await get(Uri.parse(transactionsCall)).then((value) => value.body));
|
await get(Uri.parse(transactionsCall)).then((value) => value.body));
|
||||||
List<TezosOperation> txs = [];
|
List<TezosOperation> txs = [];
|
||||||
|
@ -20,7 +21,9 @@ class TezosAPI {
|
||||||
int? burnedAmountInMicroTez;
|
int? burnedAmountInMicroTez;
|
||||||
int? storage_limit;
|
int? storage_limit;
|
||||||
if (tx["burned"] != null) {
|
if (tx["burned"] != null) {
|
||||||
burnedAmountInMicroTez = double.parse((tx["burned"] * pow(10, Coin.tezos.decimals)).toString()).toInt();
|
burnedAmountInMicroTez = double.parse(
|
||||||
|
(tx["burned"] * pow(10, Coin.tezos.decimals)).toString())
|
||||||
|
.toInt();
|
||||||
}
|
}
|
||||||
if (tx["storage_limit"] != null) {
|
if (tx["storage_limit"] != null) {
|
||||||
storage_limit = tx["storage_limit"] as int;
|
storage_limit = tx["storage_limit"] as int;
|
||||||
|
@ -30,7 +33,10 @@ class TezosAPI {
|
||||||
hash: tx["hash"] as String,
|
hash: tx["hash"] as String,
|
||||||
type: tx["type"] as String,
|
type: tx["type"] as String,
|
||||||
height: tx["height"] as int,
|
height: tx["height"] as int,
|
||||||
timestamp: DateTime.parse(tx["time"].toString()).toUtc().millisecondsSinceEpoch ~/ 1000,
|
timestamp: DateTime.parse(tx["time"].toString())
|
||||||
|
.toUtc()
|
||||||
|
.millisecondsSinceEpoch ~/
|
||||||
|
1000,
|
||||||
cycle: tx["cycle"] as int,
|
cycle: tx["cycle"] as int,
|
||||||
counter: tx["counter"] as int,
|
counter: tx["counter"] as int,
|
||||||
op_n: tx["op_n"] as int,
|
op_n: tx["op_n"] as int,
|
||||||
|
@ -40,8 +46,12 @@ class TezosAPI {
|
||||||
gas_limit: tx["gas_limit"] as int,
|
gas_limit: tx["gas_limit"] as int,
|
||||||
gas_used: tx["gas_used"] as int,
|
gas_used: tx["gas_used"] as int,
|
||||||
storage_limit: storage_limit,
|
storage_limit: storage_limit,
|
||||||
amountInMicroTez: double.parse((tx["volume"] * pow(10, Coin.tezos.decimals)).toString()).toInt(),
|
amountInMicroTez: double.parse(
|
||||||
feeInMicroTez: double.parse((tx["fee"] * pow(10, Coin.tezos.decimals)).toString()).toInt(),
|
(tx["volume"] * pow(10, Coin.tezos.decimals)).toString())
|
||||||
|
.toInt(),
|
||||||
|
feeInMicroTez: double.parse(
|
||||||
|
(tx["fee"] * pow(10, Coin.tezos.decimals)).toString())
|
||||||
|
.toInt(),
|
||||||
burnedAmountInMicroTez: burnedAmountInMicroTez,
|
burnedAmountInMicroTez: burnedAmountInMicroTez,
|
||||||
senderAddress: tx["sender"] as String,
|
senderAddress: tx["sender"] as String,
|
||||||
receiverAddress: tx["receiver"] as String,
|
receiverAddress: tx["receiver"] as String,
|
||||||
|
@ -67,47 +77,10 @@ class TezosAPI {
|
||||||
int totalTxs = response[0][8] as int;
|
int totalTxs = response[0][8] as int;
|
||||||
return ((totalFees / totalTxs * Coin.tezos.decimals).floor());
|
return ((totalFees / totalTxs * Coin.tezos.decimals).floor());
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Logging.instance.log("Error occured in tezos_api.dart while getting fee estimation for tezos: $e",
|
Logging.instance.log(
|
||||||
|
"Error occured in tezos_api.dart while getting fee estimation for tezos: $e",
|
||||||
level: LogLevel.Error);
|
level: LogLevel.Error);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<BigInt?> getBalance(String host, int port, String address) async {
|
|
||||||
try {
|
|
||||||
String balanceCall =
|
|
||||||
"$host:$port/chains/main/blocks/head/context/contracts/$address/balance";
|
|
||||||
var response =
|
|
||||||
await get(Uri.parse(balanceCall)).then((value) => value.body);
|
|
||||||
var balance = BigInt.parse(response.substring(1, response.length - 2));
|
|
||||||
return balance;
|
|
||||||
} catch (e) {
|
|
||||||
Logging.instance.log("Error occured in tezos_api.dart while getting balance for $address: $e",
|
|
||||||
level: LogLevel.Error);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<int?> getChainHeight(String host, int port) async {
|
|
||||||
try {
|
|
||||||
var api =
|
|
||||||
"$host:$port/chains/main/blocks/head/header/shell";
|
|
||||||
var jsonParsedResponse = jsonDecode(await get(Uri.parse(api)).then((value) => value.body));
|
|
||||||
return int.parse(jsonParsedResponse["level"].toString());
|
|
||||||
} catch (e) {
|
|
||||||
Logging.instance.log("Error occured in tezos_api.dart while getting chain height for tezos: $e",
|
|
||||||
level: LogLevel.Error);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<bool> testNetworkConnection(String host, int port) async {
|
|
||||||
try {
|
|
||||||
await get(Uri.parse(
|
|
||||||
"$host:$port/chains/main/blocks/head/header/shell"));
|
|
||||||
return true;
|
|
||||||
} catch (e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
52
lib/services/coins/tezos/api/tezos_rpc_api.dart
Normal file
52
lib/services/coins/tezos/api/tezos_rpc_api.dart
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:http/http.dart';
|
||||||
|
|
||||||
|
import 'package:stackwallet/utilities/logger.dart';
|
||||||
|
|
||||||
|
class TezosRpcAPI {
|
||||||
|
Future<BigInt?> getBalance(
|
||||||
|
{required ({String host, int port}) nodeInfo,
|
||||||
|
required String address}) async {
|
||||||
|
try {
|
||||||
|
String balanceCall =
|
||||||
|
"${nodeInfo.host}:${nodeInfo.port}/chains/main/blocks/head/context/contracts/$address/balance";
|
||||||
|
var response =
|
||||||
|
await get(Uri.parse(balanceCall)).then((value) => value.body);
|
||||||
|
var balance = BigInt.parse(response.substring(1, response.length - 2));
|
||||||
|
return balance;
|
||||||
|
} catch (e) {
|
||||||
|
Logging.instance.log(
|
||||||
|
"Error occured in tezos_rpc_api.dart while getting balance for $address: $e",
|
||||||
|
level: LogLevel.Error);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<int?> getChainHeight(
|
||||||
|
{required ({String host, int port}) nodeInfo}) async {
|
||||||
|
try {
|
||||||
|
var api =
|
||||||
|
"${nodeInfo.host}:${nodeInfo.port}/chains/main/blocks/head/header/shell";
|
||||||
|
var jsonParsedResponse =
|
||||||
|
jsonDecode(await get(Uri.parse(api)).then((value) => value.body));
|
||||||
|
return int.parse(jsonParsedResponse["level"].toString());
|
||||||
|
} catch (e) {
|
||||||
|
Logging.instance.log(
|
||||||
|
"Error occured in tezos_rpc_api.dart while getting chain height for tezos: $e",
|
||||||
|
level: LogLevel.Error);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<bool> testNetworkConnection(
|
||||||
|
{required ({String host, int port}) nodeInfo}) async {
|
||||||
|
try {
|
||||||
|
await get(Uri.parse(
|
||||||
|
"${nodeInfo.host}:${nodeInfo.port}/chains/main/blocks/head/header/shell"));
|
||||||
|
return true;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -20,8 +20,8 @@ class TezosOperation {
|
||||||
String receiverAddress;
|
String receiverAddress;
|
||||||
int? confirmations;
|
int? confirmations;
|
||||||
|
|
||||||
TezosOperation({
|
TezosOperation(
|
||||||
this.id,
|
{this.id,
|
||||||
required this.hash,
|
required this.hash,
|
||||||
this.type,
|
this.type,
|
||||||
required this.height,
|
required this.height,
|
||||||
|
@ -40,6 +40,5 @@ class TezosOperation {
|
||||||
this.burnedAmountInMicroTez,
|
this.burnedAmountInMicroTez,
|
||||||
required this.senderAddress,
|
required this.senderAddress,
|
||||||
required this.receiverAddress,
|
required this.receiverAddress,
|
||||||
this.confirmations
|
this.confirmations});
|
||||||
});
|
|
||||||
}
|
}
|
|
@ -34,6 +34,8 @@ import 'package:stackwallet/utilities/prefs.dart';
|
||||||
import 'package:tezart/tezart.dart';
|
import 'package:tezart/tezart.dart';
|
||||||
import 'package:tuple/tuple.dart';
|
import 'package:tuple/tuple.dart';
|
||||||
|
|
||||||
|
import 'api/tezos_rpc_api.dart';
|
||||||
|
|
||||||
const int MINIMUM_CONFIRMATIONS = 1;
|
const int MINIMUM_CONFIRMATIONS = 1;
|
||||||
const int _gasLimit = 10200;
|
const int _gasLimit = 10200;
|
||||||
|
|
||||||
|
@ -58,6 +60,7 @@ class TezosWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
||||||
NodeModel? _xtzNode;
|
NodeModel? _xtzNode;
|
||||||
|
|
||||||
TezosAPI tezosAPI = TezosAPI();
|
TezosAPI tezosAPI = TezosAPI();
|
||||||
|
TezosRpcAPI tezosRpcAPI = TezosRpcAPI();
|
||||||
|
|
||||||
NodeModel getCurrentNode() {
|
NodeModel getCurrentNode() {
|
||||||
return _xtzNode ??
|
return _xtzNode ??
|
||||||
|
@ -491,11 +494,15 @@ class TezosWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
||||||
Future<void> updateBalance() async {
|
Future<void> updateBalance() async {
|
||||||
try {
|
try {
|
||||||
NodeModel currentNode = getCurrentNode();
|
NodeModel currentNode = getCurrentNode();
|
||||||
BigInt? balance = await tezosAPI.getBalance(
|
BigInt? balance = await tezosRpcAPI.getBalance(
|
||||||
currentNode.host, currentNode.port, await currentReceivingAddress);
|
nodeInfo: (host: currentNode.host, port: currentNode.port),
|
||||||
|
address: await currentReceivingAddress);
|
||||||
if (balance == null) {
|
if (balance == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Logging.instance.log(
|
||||||
|
"Balance for ${await currentReceivingAddress}: $balance",
|
||||||
|
level: LogLevel.Info);
|
||||||
Amount balanceInAmount =
|
Amount balanceInAmount =
|
||||||
Amount(rawValue: balance, fractionDigits: coin.decimals);
|
Amount(rawValue: balance, fractionDigits: coin.decimals);
|
||||||
_balance = Balance(
|
_balance = Balance(
|
||||||
|
@ -585,8 +592,8 @@ class TezosWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
||||||
Future<void> updateChainHeight() async {
|
Future<void> updateChainHeight() async {
|
||||||
try {
|
try {
|
||||||
NodeModel currentNode = getCurrentNode();
|
NodeModel currentNode = getCurrentNode();
|
||||||
int? intHeight =
|
int? intHeight = await tezosRpcAPI.getChainHeight(
|
||||||
await tezosAPI.getChainHeight(currentNode.host, currentNode.port);
|
nodeInfo: (host: currentNode.host, port: currentNode.port));
|
||||||
if (intHeight == null) {
|
if (intHeight == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -670,8 +677,8 @@ class TezosWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
||||||
@override
|
@override
|
||||||
Future<bool> testNetworkConnection() async {
|
Future<bool> testNetworkConnection() async {
|
||||||
NodeModel currentNode = getCurrentNode();
|
NodeModel currentNode = getCurrentNode();
|
||||||
return await tezosAPI.testNetworkConnection(
|
return await tezosRpcAPI.testNetworkConnection(
|
||||||
currentNode.host, currentNode.port);
|
nodeInfo: (host: currentNode.host, port: currentNode.port));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
Loading…
Reference in a new issue