mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2024-12-23 20:09:23 +00:00
receiving address fix
This commit is contained in:
parent
6094a767d7
commit
c7446f1946
1 changed files with 42 additions and 22 deletions
|
@ -140,10 +140,9 @@ mixin PaynymWalletInterface {
|
||||||
final address = await _db
|
final address = await _db
|
||||||
.getAddresses(_walletId)
|
.getAddresses(_walletId)
|
||||||
.filter()
|
.filter()
|
||||||
.group((q) => q
|
|
||||||
.subTypeEqualTo(AddressSubType.paynymReceive)
|
.subTypeEqualTo(AddressSubType.paynymReceive)
|
||||||
.and()
|
.and()
|
||||||
.otherDataEqualTo(sender.toString()))
|
.otherDataEqualTo(sender.toString())
|
||||||
.sortByDerivationIndexDesc()
|
.sortByDerivationIndexDesc()
|
||||||
.findFirst();
|
.findFirst();
|
||||||
|
|
||||||
|
@ -160,12 +159,15 @@ mixin PaynymWalletInterface {
|
||||||
PaymentCode sender,
|
PaymentCode sender,
|
||||||
int index,
|
int index,
|
||||||
) async {
|
) async {
|
||||||
final myPrivateKey =
|
final myPrivateKey = await deriveReceivingPrivateKey(
|
||||||
await deriveNotificationPrivateKey(mnemonic: await _getMnemonic());
|
mnemonic: await _getMnemonic(),
|
||||||
|
index: index,
|
||||||
|
);
|
||||||
|
|
||||||
final paymentAddress = PaymentAddress.initWithPrivateKey(
|
final paymentAddress = PaymentAddress.initWithPrivateKey(
|
||||||
myPrivateKey,
|
myPrivateKey,
|
||||||
sender,
|
sender,
|
||||||
index,
|
0,
|
||||||
);
|
);
|
||||||
final pair = paymentAddress.getReceiveAddressKeyPair();
|
final pair = paymentAddress.getReceiveAddressKeyPair();
|
||||||
final address = await generatePaynymReceivingAddressFromKeyPair(
|
final address = await generatePaynymReceivingAddressFromKeyPair(
|
||||||
|
@ -216,6 +218,15 @@ mixin PaynymWalletInterface {
|
||||||
return node.privateKey!;
|
return node.privateKey!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<Uint8List> deriveReceivingPrivateKey({
|
||||||
|
required List<String> mnemonic,
|
||||||
|
required int index,
|
||||||
|
}) async {
|
||||||
|
final root = await getRootNode(mnemonic: mnemonic);
|
||||||
|
final node = root.derivePath(kPaynymDerivePath).derive(index);
|
||||||
|
return node.privateKey!;
|
||||||
|
}
|
||||||
|
|
||||||
/// fetch or generate this wallet's bip47 payment code
|
/// fetch or generate this wallet's bip47 payment code
|
||||||
Future<PaymentCode> getPaymentCode(
|
Future<PaymentCode> getPaymentCode(
|
||||||
DerivePathType derivePathType,
|
DerivePathType derivePathType,
|
||||||
|
@ -722,8 +733,12 @@ mixin PaynymWalletInterface {
|
||||||
const maxCount = 2147483647;
|
const maxCount = 2147483647;
|
||||||
assert(maxNumberOfIndexesToCheck < maxCount);
|
assert(maxNumberOfIndexesToCheck < maxCount);
|
||||||
|
|
||||||
final myPrivateKey =
|
final mnemonic = await _getMnemonic();
|
||||||
await deriveNotificationPrivateKey(mnemonic: await _getMnemonic());
|
|
||||||
|
final mySendPrivateKey =
|
||||||
|
await deriveNotificationPrivateKey(mnemonic: mnemonic);
|
||||||
|
final receivingNode =
|
||||||
|
(await getRootNode(mnemonic: mnemonic)).derivePath(kPaynymDerivePath);
|
||||||
|
|
||||||
List<Address> addresses = [];
|
List<Address> addresses = [];
|
||||||
int receivingGapCounter = 0;
|
int receivingGapCounter = 0;
|
||||||
|
@ -734,14 +749,13 @@ mixin PaynymWalletInterface {
|
||||||
(receivingGapCounter < maxUnusedAddressGap ||
|
(receivingGapCounter < maxUnusedAddressGap ||
|
||||||
outgoingGapCounter < maxUnusedAddressGap);
|
outgoingGapCounter < maxUnusedAddressGap);
|
||||||
i++) {
|
i++) {
|
||||||
final paymentAddress = PaymentAddress.initWithPrivateKey(
|
if (outgoingGapCounter < maxUnusedAddressGap) {
|
||||||
myPrivateKey,
|
final paymentAddressSending = PaymentAddress.initWithPrivateKey(
|
||||||
|
mySendPrivateKey,
|
||||||
other,
|
other,
|
||||||
i, // index to use
|
i, // index to use
|
||||||
);
|
);
|
||||||
|
final pair = paymentAddressSending.getSendAddressKeyPair();
|
||||||
if (outgoingGapCounter < maxUnusedAddressGap) {
|
|
||||||
final pair = paymentAddress.getSendAddressKeyPair();
|
|
||||||
final address = generatePaynymSendAddressFromKeyPair(
|
final address = generatePaynymSendAddressFromKeyPair(
|
||||||
pair: pair,
|
pair: pair,
|
||||||
derivationIndex: i,
|
derivationIndex: i,
|
||||||
|
@ -753,14 +767,20 @@ mixin PaynymWalletInterface {
|
||||||
final count = await _getTxCount(address: address.value);
|
final count = await _getTxCount(address: address.value);
|
||||||
|
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
outgoingGapCounter++;
|
|
||||||
} else {
|
|
||||||
outgoingGapCounter = 0;
|
outgoingGapCounter = 0;
|
||||||
|
} else {
|
||||||
|
outgoingGapCounter++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (receivingGapCounter < maxUnusedAddressGap) {
|
if (receivingGapCounter < maxUnusedAddressGap) {
|
||||||
final pair = paymentAddress.getReceiveAddressKeyPair();
|
final myReceivingPrivateKey = receivingNode.derive(i).privateKey!;
|
||||||
|
final paymentAddressReceiving = PaymentAddress.initWithPrivateKey(
|
||||||
|
myReceivingPrivateKey,
|
||||||
|
other,
|
||||||
|
0,
|
||||||
|
);
|
||||||
|
final pair = paymentAddressReceiving.getReceiveAddressKeyPair();
|
||||||
final address = await generatePaynymReceivingAddressFromKeyPair(
|
final address = await generatePaynymReceivingAddressFromKeyPair(
|
||||||
pair: pair,
|
pair: pair,
|
||||||
derivationIndex: i,
|
derivationIndex: i,
|
||||||
|
@ -772,13 +792,13 @@ mixin PaynymWalletInterface {
|
||||||
final count = await _getTxCount(address: address.value);
|
final count = await _getTxCount(address: address.value);
|
||||||
|
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
receivingGapCounter++;
|
|
||||||
} else {
|
|
||||||
receivingGapCounter = 0;
|
receivingGapCounter = 0;
|
||||||
|
} else {
|
||||||
|
receivingGapCounter++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await _db.putAddresses(addresses);
|
await _db.updateOrPutAddresses(addresses);
|
||||||
}
|
}
|
||||||
|
|
||||||
Address generatePaynymSendAddressFromKeyPair({
|
Address generatePaynymSendAddressFromKeyPair({
|
||||||
|
|
Loading…
Reference in a new issue