mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2025-01-11 05:04:35 +00:00
Merge branch 'add-xtz' of https://github.com/cypherstack/stack_wallet into add-xtz
This commit is contained in:
commit
be0d820822
3 changed files with 54 additions and 52 deletions
|
@ -292,8 +292,8 @@ class TezosWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
|||
}
|
||||
|
||||
Future<void> updateBalance() async {
|
||||
var api = "https://api.mainnet.tzkt.io/v1/accounts/${await currentReceivingAddress}/balance"; // TODO: Can we use current node instead of this?
|
||||
var theBalance = await get(Uri.parse(api)).then((value) => value.body);
|
||||
var api = "${getCurrentNode().host}:${getCurrentNode().port}/chains/main/blocks/head/context/contracts/${await currentReceivingAddress}/balance";
|
||||
var theBalance = (await get(Uri.parse(api)).then((value) => value.body)).substring(1, (await get(Uri.parse(api)).then((value) => value.body)).length - 2);
|
||||
Logging.instance.log("Balance for ${await currentReceivingAddress}: $theBalance", level: LogLevel.Info);
|
||||
var balanceInAmount = Amount(rawValue: BigInt.parse(theBalance.toString()), fractionDigits: 6);
|
||||
_balance = Balance(
|
||||
|
@ -306,58 +306,60 @@ class TezosWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
|||
}
|
||||
|
||||
Future<void> updateTransactions() async {
|
||||
var api = "https://api.mainnet.tzkt.io/v1/accounts/${await currentReceivingAddress}/balance_history"; // TODO: Can we use current node instead of this?
|
||||
var returnedTxs = await get(Uri.parse(api)).then((value) => value.body);
|
||||
Logging.instance.log(
|
||||
"Transactions for ${await currentReceivingAddress}: $returnedTxs",
|
||||
level: LogLevel.Info);
|
||||
// TODO: Use node RPC instead of tzstats API
|
||||
var api = "https://api.tzstats.com/tables/op?address=${await currentReceivingAddress}";
|
||||
var jsonResponse = jsonDecode(await get(Uri.parse(api)).then((value) => value.body));
|
||||
List<Tuple2<Transaction, Address>> txs = [];
|
||||
Object? jsonTxs = jsonDecode(returnedTxs);
|
||||
if (jsonTxs == null) {
|
||||
await db.addNewTransactionData(txs, walletId);
|
||||
} else {
|
||||
for (var tx in jsonTxs as List) {
|
||||
var theTx = Transaction(
|
||||
walletId: walletId,
|
||||
txid: "",
|
||||
timestamp: DateTime.parse(tx["timestamp"].toString()).toUtc().millisecondsSinceEpoch ~/ 1000,
|
||||
type: TransactionType.unknown,
|
||||
subType: TransactionSubType.none,
|
||||
amount: int.parse(tx["balance"].toString()),
|
||||
amountString: Amount(
|
||||
rawValue: BigInt.parse(tx["balance"].toString()),
|
||||
fractionDigits: 6
|
||||
).toJsonString(),
|
||||
fee: 0,
|
||||
height: int.parse(tx["level"].toString()),
|
||||
isCancelled: false,
|
||||
isLelantus: false,
|
||||
slateId: "",
|
||||
otherData: "",
|
||||
inputs: [],
|
||||
outputs: [],
|
||||
nonce: 0,
|
||||
numberOfMessages: null,
|
||||
);
|
||||
var theAddress = Address(
|
||||
walletId: walletId,
|
||||
value: await currentReceivingAddress,
|
||||
publicKey: [], // TODO: Add public key
|
||||
derivationIndex: 0,
|
||||
derivationPath: null,
|
||||
type: AddressType.unknown,
|
||||
subType: AddressSubType.unknown,
|
||||
);
|
||||
txs.add(Tuple2(theTx, theAddress));
|
||||
for (var tx in jsonResponse as List) {
|
||||
var txApi = "https://api.tzstats.com/explorer/op/${tx["hash"]}";
|
||||
var txJsonResponse = jsonDecode(await get(Uri.parse(txApi)).then((value) => value.body))[0];
|
||||
TransactionType txType;
|
||||
if (txJsonResponse["sender"] == (await currentReceivingAddress)) {
|
||||
txType = TransactionType.outgoing;
|
||||
} else {
|
||||
txType = TransactionType.incoming;
|
||||
}
|
||||
await db.addNewTransactionData(txs, walletId);
|
||||
var theTx = Transaction(
|
||||
walletId: walletId,
|
||||
txid: txJsonResponse["hash"].toString(),
|
||||
timestamp: DateTime.parse(txJsonResponse["time"].toString()).toUtc().millisecondsSinceEpoch ~/ 1000,
|
||||
type: txType,
|
||||
subType: TransactionSubType.none,
|
||||
amount: (float.parse(txJsonResponse["volume"].toString()) * 1000000).toInt(),
|
||||
amountString: Amount(
|
||||
rawValue: BigInt.parse((float.parse(txJsonResponse["volume"].toString()) * 1000000).toString()),
|
||||
fractionDigits: 6
|
||||
).toJsonString(),
|
||||
fee: (float.parse(txJsonResponse["fee"].toString()) * 1000000).toInt(),
|
||||
height: int.parse(txJsonResponse["height"].toString()),
|
||||
isCancelled: false,
|
||||
isLelantus: false,
|
||||
slateId: "",
|
||||
otherData: "",
|
||||
inputs: [],
|
||||
outputs: [],
|
||||
nonce: 0,
|
||||
numberOfMessages: null,
|
||||
);
|
||||
var theAddress = Address(
|
||||
walletId: walletId,
|
||||
value: txJsonResponse["receiver"].toString(),
|
||||
publicKey: [], // TODO: Add public key
|
||||
derivationIndex: 0,
|
||||
derivationPath: null,
|
||||
type: AddressType.unknown,
|
||||
subType: AddressSubType.unknown,
|
||||
);
|
||||
txs.add(Tuple2(theTx, theAddress));
|
||||
}
|
||||
await db.addNewTransactionData(txs, walletId);
|
||||
}
|
||||
|
||||
Future<void> updateChainHeight() async {
|
||||
var api = "https://api.tzkt.io/v1/blocks/count"; // TODO: Can we use current node instead of this?
|
||||
var returnedHeight = await get(Uri.parse(api)).then((value) => value.body);
|
||||
final int intHeight = int.parse(returnedHeight.toString());
|
||||
var api = "${getCurrentNode().host}:${getCurrentNode().port}/chains/main/blocks/head/header/shell";
|
||||
var jsonParsedResponse = jsonDecode(await get(Uri.parse(api)).then((value) => value.body));
|
||||
final int intHeight = int.parse(jsonParsedResponse["level"].toString());
|
||||
Logging.instance.log("Chain height: $intHeight", level: LogLevel.Info);
|
||||
await updateCachedChainHeight(intHeight);
|
||||
}
|
||||
|
||||
|
@ -375,7 +377,7 @@ class TezosWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
|||
@override
|
||||
Future<bool> testNetworkConnection() async{
|
||||
try {
|
||||
await get(Uri.parse("https://api.mainnet.tzkt.io/v1/accounts/${await currentReceivingAddress}/balance"));
|
||||
await get(Uri.parse("${getCurrentNode().host}:${getCurrentNode().port}/chains/main/blocks/head/header/shell"));
|
||||
return true;
|
||||
} catch (e) {
|
||||
return false;
|
||||
|
|
|
@ -100,7 +100,7 @@ class PriceAPI {
|
|||
Uri.parse("https://api.coingecko.com/api/v3/coins/markets?vs_currency"
|
||||
"=${baseCurrency.toLowerCase()}"
|
||||
"&ids=monero,bitcoin,litecoin,ecash,epic-cash,zcoin,dogecoin,"
|
||||
"bitcoin-cash,namecoin,wownero,ethereum,particl,nano,banano"
|
||||
"bitcoin-cash,namecoin,wownero,ethereum,particl,nano,banano,tezos"
|
||||
"&order=market_cap_desc&per_page=50&page=1&sparkline=false");
|
||||
|
||||
final coinGeckoResponse = await client.get(
|
||||
|
|
|
@ -182,8 +182,8 @@ abstract class DefaultNodes {
|
|||
isDown: false
|
||||
);
|
||||
|
||||
static NodeModel get tezos => NodeModel( // TODO: Change this to original one
|
||||
host: "mainnet.api.tez.ie",
|
||||
static NodeModel get tezos => NodeModel( // TODO: Change this to stack wallet one
|
||||
host: "https://mainnet.api.tez.ie",
|
||||
port: 443,
|
||||
name: defaultName,
|
||||
id: _nodeId(Coin.tezos),
|
||||
|
|
Loading…
Reference in a new issue