mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2025-01-11 21:24:31 +00:00
fix bitcoin cash null errors
This commit is contained in:
parent
66fe3f1fdb
commit
46d5f26054
1 changed files with 53 additions and 16 deletions
|
@ -43,7 +43,7 @@ import 'package:stackwallet/utilities/prefs.dart';
|
||||||
import 'package:tuple/tuple.dart';
|
import 'package:tuple/tuple.dart';
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
const int MINIMUM_CONFIRMATIONS = 3;
|
const int MINIMUM_CONFIRMATIONS = 1;
|
||||||
const int DUST_LIMIT = 546;
|
const int DUST_LIMIT = 546;
|
||||||
|
|
||||||
const String GENESIS_HASH_MAINNET =
|
const String GENESIS_HASH_MAINNET =
|
||||||
|
@ -265,6 +265,9 @@ class BitcoinCashWallet extends CoinServiceAPI {
|
||||||
DerivePathType addressType({required String address}) {
|
DerivePathType addressType({required String address}) {
|
||||||
Uint8List? decodeBase58;
|
Uint8List? decodeBase58;
|
||||||
Segwit? decodeBech32;
|
Segwit? decodeBech32;
|
||||||
|
if (Bitbox.Address.detectFormat(address) == 0) {
|
||||||
|
address = Bitbox.Address.toLegacyAddress(address);
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
decodeBase58 = bs58check.decode(address);
|
decodeBase58 = bs58check.decode(address);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
@ -825,9 +828,6 @@ class BitcoinCashWallet extends CoinServiceAPI {
|
||||||
/// Refreshes display data for the wallet
|
/// Refreshes display data for the wallet
|
||||||
@override
|
@override
|
||||||
Future<void> refresh() async {
|
Future<void> refresh() async {
|
||||||
final bchaddr = Bitbox.Address.toCashAddress(await currentReceivingAddress);
|
|
||||||
print("bchaddr: $bchaddr ${await currentReceivingAddress}");
|
|
||||||
|
|
||||||
if (refreshMutex) {
|
if (refreshMutex) {
|
||||||
Logging.instance.log("$walletId $walletName refreshMutex denied",
|
Logging.instance.log("$walletId $walletName refreshMutex denied",
|
||||||
level: LogLevel.Info);
|
level: LogLevel.Info);
|
||||||
|
@ -1384,7 +1384,9 @@ class BitcoinCashWallet extends CoinServiceAPI {
|
||||||
initialChangeAddressP2SH, 1, DerivePathType.bip49);
|
initialChangeAddressP2SH, 1, DerivePathType.bip49);
|
||||||
|
|
||||||
// this._currentReceivingAddress = Future(() => initialReceivingAddress);
|
// this._currentReceivingAddress = Future(() => initialReceivingAddress);
|
||||||
_currentReceivingAddressP2PKH = Future(() => initialReceivingAddressP2PKH);
|
|
||||||
|
var newaddr = await _getCurrentAddressForChain(0, DerivePathType.bip44);
|
||||||
|
_currentReceivingAddressP2PKH = Future(() => newaddr);
|
||||||
_currentReceivingAddressP2SH = Future(() => initialReceivingAddressP2SH);
|
_currentReceivingAddressP2SH = Future(() => initialReceivingAddressP2SH);
|
||||||
|
|
||||||
Logging.instance.log("_generateNewWalletFinished", level: LogLevel.Info);
|
Logging.instance.log("_generateNewWalletFinished", level: LogLevel.Info);
|
||||||
|
@ -1521,6 +1523,11 @@ class BitcoinCashWallet extends CoinServiceAPI {
|
||||||
print("Array key is ${jsonEncode(arrayKey)}");
|
print("Array key is ${jsonEncode(arrayKey)}");
|
||||||
final internalChainArray =
|
final internalChainArray =
|
||||||
DB.instance.get<dynamic>(boxName: walletId, key: arrayKey);
|
DB.instance.get<dynamic>(boxName: walletId, key: arrayKey);
|
||||||
|
if (derivePathType == DerivePathType.bip44) {
|
||||||
|
if (Bitbox.Address.detectFormat(internalChainArray.last as String) == 1) {
|
||||||
|
return Bitbox.Address.toCashAddress(internalChainArray.last as String);
|
||||||
|
}
|
||||||
|
}
|
||||||
return internalChainArray.last as String;
|
return internalChainArray.last as String;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1986,6 +1993,9 @@ class BitcoinCashWallet extends CoinServiceAPI {
|
||||||
/// Returns the scripthash or throws an exception on invalid bch address
|
/// Returns the scripthash or throws an exception on invalid bch address
|
||||||
String _convertToScriptHash(String bchAddress, NetworkType network) {
|
String _convertToScriptHash(String bchAddress, NetworkType network) {
|
||||||
try {
|
try {
|
||||||
|
if (Bitbox.Address.detectFormat(bchAddress) == 0) {
|
||||||
|
bchAddress = Bitbox.Address.toLegacyAddress(bchAddress);
|
||||||
|
}
|
||||||
final output = Address.addressToOutputScript(bchAddress, network);
|
final output = Address.addressToOutputScript(bchAddress, network);
|
||||||
final hash = sha256.convert(output.toList(growable: false)).toString();
|
final hash = sha256.convert(output.toList(growable: false)).toString();
|
||||||
|
|
||||||
|
@ -2058,11 +2068,27 @@ class BitcoinCashWallet extends CoinServiceAPI {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<TransactionData> _fetchTransactionData() async {
|
Future<TransactionData> _fetchTransactionData() async {
|
||||||
final List<String> allAddresses = await _fetchAllOwnAddresses();
|
List<String> allAddressesOld = await _fetchAllOwnAddresses();
|
||||||
|
List<String> allAddresses = [];
|
||||||
|
for (String address in allAddressesOld) {
|
||||||
|
if (Bitbox.Address.detectFormat(address) == 1) {
|
||||||
|
allAddresses.add(Bitbox.Address.toCashAddress(address));
|
||||||
|
} else {
|
||||||
|
allAddresses.add(address);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final changeAddressesP2PKH =
|
var changeAddressesP2PKHOld =
|
||||||
DB.instance.get<dynamic>(boxName: walletId, key: 'changeAddressesP2PKH')
|
DB.instance.get<dynamic>(boxName: walletId, key: 'changeAddressesP2PKH')
|
||||||
as List<dynamic>;
|
as List<dynamic>;
|
||||||
|
List<dynamic> changeAddressesP2PKH = [];
|
||||||
|
for (var address in changeAddressesP2PKHOld) {
|
||||||
|
if (Bitbox.Address.detectFormat(address as String) == 1) {
|
||||||
|
changeAddressesP2PKH.add(Bitbox.Address.toCashAddress(address));
|
||||||
|
} else {
|
||||||
|
changeAddressesP2PKH.add(address);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final List<Map<String, dynamic>> allTxHashes =
|
final List<Map<String, dynamic>> allTxHashes =
|
||||||
await _fetchHistory(allAddresses);
|
await _fetchHistory(allAddresses);
|
||||||
|
@ -2166,7 +2192,8 @@ class BitcoinCashWallet extends CoinServiceAPI {
|
||||||
.log("recipientsArray: $recipientsArray", level: LogLevel.Info);
|
.log("recipientsArray: $recipientsArray", level: LogLevel.Info);
|
||||||
|
|
||||||
final foundInSenders =
|
final foundInSenders =
|
||||||
allAddresses.any((element) => sendersArray.contains(element));
|
allAddresses.any((element) => sendersArray.contains(element)) ||
|
||||||
|
allAddressesOld.any((element) => sendersArray.contains(element));
|
||||||
Logging.instance
|
Logging.instance
|
||||||
.log("foundInSenders: $foundInSenders", level: LogLevel.Info);
|
.log("foundInSenders: $foundInSenders", level: LogLevel.Info);
|
||||||
|
|
||||||
|
@ -2228,7 +2255,8 @@ class BitcoinCashWallet extends CoinServiceAPI {
|
||||||
.toBigInt()
|
.toBigInt()
|
||||||
.toInt();
|
.toInt();
|
||||||
totalOut += value;
|
totalOut += value;
|
||||||
if (allAddresses.contains(address)) {
|
if (allAddresses.contains(address) ||
|
||||||
|
allAddressesOld.contains(address)) {
|
||||||
outputAmtAddressedToWallet += value;
|
outputAmtAddressedToWallet += value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2743,7 +2771,10 @@ class BitcoinCashWallet extends CoinServiceAPI {
|
||||||
for (final output in tx["vout"] as List) {
|
for (final output in tx["vout"] as List) {
|
||||||
final n = output["n"];
|
final n = output["n"];
|
||||||
if (n != null && n == utxosToUse[i].vout) {
|
if (n != null && n == utxosToUse[i].vout) {
|
||||||
final address = output["scriptPubKey"]["addresses"][0] as String;
|
String address = output["scriptPubKey"]["addresses"][0] as String;
|
||||||
|
if (Bitbox.Address.detectFormat(address) == 0) {
|
||||||
|
address = Bitbox.Address.toLegacyAddress(address);
|
||||||
|
}
|
||||||
if (!addressTxid.containsKey(address)) {
|
if (!addressTxid.containsKey(address)) {
|
||||||
addressTxid[address] = <String>[];
|
addressTxid[address] = <String>[];
|
||||||
}
|
}
|
||||||
|
@ -2772,8 +2803,13 @@ class BitcoinCashWallet extends CoinServiceAPI {
|
||||||
derivePathType: DerivePathType.bip44,
|
derivePathType: DerivePathType.bip44,
|
||||||
);
|
);
|
||||||
for (int i = 0; i < p2pkhLength; i++) {
|
for (int i = 0; i < p2pkhLength; i++) {
|
||||||
|
String address = addressesP2PKH[i];
|
||||||
|
if (Bitbox.Address.detectFormat(address) == 0) {
|
||||||
|
address = Bitbox.Address.toLegacyAddress(address);
|
||||||
|
}
|
||||||
|
|
||||||
// receives
|
// receives
|
||||||
final receiveDerivation = receiveDerivations[addressesP2PKH[i]];
|
final receiveDerivation = receiveDerivations[address];
|
||||||
// if a match exists it will not be null
|
// if a match exists it will not be null
|
||||||
if (receiveDerivation != null) {
|
if (receiveDerivation != null) {
|
||||||
final data = P2PKH(
|
final data = P2PKH(
|
||||||
|
@ -2783,7 +2819,7 @@ class BitcoinCashWallet extends CoinServiceAPI {
|
||||||
network: _network,
|
network: _network,
|
||||||
).data;
|
).data;
|
||||||
|
|
||||||
for (String tx in addressTxid[addressesP2PKH[i]]!) {
|
for (String tx in addressTxid[address]!) {
|
||||||
results[tx] = {
|
results[tx] = {
|
||||||
"output": data.output,
|
"output": data.output,
|
||||||
"keyPair": ECPair.fromWIF(
|
"keyPair": ECPair.fromWIF(
|
||||||
|
@ -2794,7 +2830,7 @@ class BitcoinCashWallet extends CoinServiceAPI {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// if its not a receive, check change
|
// if its not a receive, check change
|
||||||
final changeDerivation = changeDerivations[addressesP2PKH[i]];
|
final changeDerivation = changeDerivations[address];
|
||||||
// if a match exists it will not be null
|
// if a match exists it will not be null
|
||||||
if (changeDerivation != null) {
|
if (changeDerivation != null) {
|
||||||
final data = P2PKH(
|
final data = P2PKH(
|
||||||
|
@ -2804,7 +2840,7 @@ class BitcoinCashWallet extends CoinServiceAPI {
|
||||||
network: _network,
|
network: _network,
|
||||||
).data;
|
).data;
|
||||||
|
|
||||||
for (String tx in addressTxid[addressesP2PKH[i]]!) {
|
for (String tx in addressTxid[address]!) {
|
||||||
results[tx] = {
|
results[tx] = {
|
||||||
"output": data.output,
|
"output": data.output,
|
||||||
"keyPair": ECPair.fromWIF(
|
"keyPair": ECPair.fromWIF(
|
||||||
|
@ -3377,8 +3413,9 @@ class BitcoinCashWallet extends CoinServiceAPI {
|
||||||
0,
|
0,
|
||||||
DerivePathType
|
DerivePathType
|
||||||
.bip44); // Add that new receiving address to the array of receiving addresses
|
.bip44); // Add that new receiving address to the array of receiving addresses
|
||||||
_currentReceivingAddressP2PKH = Future(() =>
|
var newaddr = await _getCurrentAddressForChain(0, DerivePathType.bip44);
|
||||||
newReceivingAddress); // Set the new receiving address that the service
|
_currentReceivingAddressP2PKH = Future(
|
||||||
|
() => newaddr); // Set the new receiving address that the service
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} catch (e, s) {
|
} catch (e, s) {
|
||||||
|
|
Loading…
Reference in a new issue