mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2025-01-09 04:09:25 +00:00
various tweaks to get a btc testnet tx to send
This commit is contained in:
parent
255d9a7813
commit
baaf375942
2 changed files with 63 additions and 53 deletions
|
@ -120,7 +120,7 @@ class _ConfirmTransactionViewState
|
|||
);
|
||||
|
||||
late String txid;
|
||||
Future<TxData> txidFuture;
|
||||
Future<TxData> txDataFuture;
|
||||
|
||||
final note = noteController.text;
|
||||
|
||||
|
@ -137,7 +137,7 @@ class _ConfirmTransactionViewState
|
|||
// txidFuture = (wallet as PaynymWalletInterface)
|
||||
// .broadcastNotificationTx(preparedTx: transactionInfo);
|
||||
} else if (widget.isPaynymTransaction) {
|
||||
txidFuture = wallet.confirmSend(txData: widget.txData);
|
||||
txDataFuture = wallet.confirmSend(txData: widget.txData);
|
||||
} else {
|
||||
if ((coin == Coin.firo || coin == Coin.firoTestNet) &&
|
||||
ref.read(publicPrivateBalanceStateProvider.state).state !=
|
||||
|
@ -148,26 +148,26 @@ class _ConfirmTransactionViewState
|
|||
// .confirmSendPublic(txData: transactionInfo);
|
||||
} else {
|
||||
if (coin == Coin.epicCash) {
|
||||
txidFuture = wallet.confirmSend(
|
||||
txDataFuture = wallet.confirmSend(
|
||||
txData: widget.txData.copyWith(
|
||||
noteOnChain: onChainNoteController.text,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
txidFuture = wallet.confirmSend(txData: widget.txData);
|
||||
txDataFuture = wallet.confirmSend(txData: widget.txData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final results = await Future.wait([
|
||||
txidFuture,
|
||||
txDataFuture,
|
||||
time,
|
||||
]);
|
||||
|
||||
sendProgressController.triggerSuccess?.call();
|
||||
await Future<void>.delayed(const Duration(seconds: 5));
|
||||
|
||||
txid = results.first as String;
|
||||
txid = (results.first as TxData).txid!;
|
||||
ref.refresh(desktopUseUTXOs);
|
||||
|
||||
// save note
|
||||
|
|
|
@ -159,6 +159,11 @@ mixin ElectrumXMixin on Bip39HDWallet {
|
|||
if (isSendAll) {
|
||||
Logging.instance
|
||||
.log("Attempting to send all $cryptoCurrency", level: LogLevel.Info);
|
||||
if (txData.recipients!.length != 1) {
|
||||
throw Exception(
|
||||
"Send all to more than one recipient not yet supported",
|
||||
);
|
||||
}
|
||||
|
||||
final int vSizeForOneOutput = buildTransaction(
|
||||
utxoSigningData: utxoSigningData,
|
||||
|
@ -188,8 +193,13 @@ mixin ElectrumXMixin on Bip39HDWallet {
|
|||
}
|
||||
|
||||
final int amount = satoshiAmountToSend - feeForOneOutput;
|
||||
final data = await buildTransaction(
|
||||
txData: txData,
|
||||
final data = buildTransaction(
|
||||
txData: txData.copyWith(
|
||||
recipients: _helperRecipientsConvert(
|
||||
[recipientAddress],
|
||||
[amount],
|
||||
),
|
||||
),
|
||||
utxoSigningData: utxoSigningData,
|
||||
);
|
||||
|
||||
|
@ -479,6 +489,18 @@ mixin ElectrumXMixin on Bip39HDWallet {
|
|||
);
|
||||
}
|
||||
|
||||
final convertedNetwork = bitcoindart.NetworkType(
|
||||
messagePrefix: cryptoCurrency.networkParams.messagePrefix,
|
||||
bech32: cryptoCurrency.networkParams.bech32Hrp,
|
||||
bip32: bitcoindart.Bip32Type(
|
||||
public: cryptoCurrency.networkParams.pubHDPrefix,
|
||||
private: cryptoCurrency.networkParams.privHDPrefix,
|
||||
),
|
||||
pubKeyHash: cryptoCurrency.networkParams.p2pkhPrefix,
|
||||
scriptHash: cryptoCurrency.networkParams.p2shPrefix,
|
||||
wif: cryptoCurrency.networkParams.wifPrefix,
|
||||
);
|
||||
|
||||
final root = await getRootHDNode();
|
||||
|
||||
for (final sd in signingData) {
|
||||
|
@ -510,21 +532,26 @@ mixin ElectrumXMixin on Bip39HDWallet {
|
|||
"Failed to fetch signing data. Local db corrupt. Rescan wallet.");
|
||||
}
|
||||
|
||||
final coinlib.Input input;
|
||||
// final coinlib.Input input;
|
||||
|
||||
final pubKey = keys.publicKey.data;
|
||||
final bitcoindart.PaymentData data;
|
||||
|
||||
switch (sd.derivePathType) {
|
||||
case DerivePathType.bip44:
|
||||
input = coinlib.P2PKHInput(
|
||||
prevOut: coinlib.OutPoint.fromHex(sd.utxo.txid, sd.utxo.vout),
|
||||
publicKey: keys.publicKey,
|
||||
);
|
||||
// input = coinlib.P2PKHInput(
|
||||
// prevOut: coinlib.OutPoint.fromHex(sd.utxo.txid, sd.utxo.vout),
|
||||
// publicKey: keys.publicKey,
|
||||
// );
|
||||
|
||||
// data = P2PKH(
|
||||
// data: PaymentData(
|
||||
// pubkey: Format.stringToUint8List(pubKey),
|
||||
// ),
|
||||
// network: _network,
|
||||
// ).data;
|
||||
data = bitcoindart
|
||||
.P2PKH(
|
||||
data: bitcoindart.PaymentData(
|
||||
pubkey: pubKey,
|
||||
),
|
||||
network: convertedNetwork,
|
||||
)
|
||||
.data;
|
||||
break;
|
||||
//
|
||||
// case DerivePathType.bip49:
|
||||
|
@ -545,37 +572,30 @@ mixin ElectrumXMixin on Bip39HDWallet {
|
|||
// break;
|
||||
|
||||
case DerivePathType.bip84:
|
||||
input = coinlib.P2WPKHInput(
|
||||
prevOut: coinlib.OutPoint.fromHex(sd.utxo.txid, sd.utxo.vout),
|
||||
publicKey: keys.publicKey,
|
||||
);
|
||||
// data = P2WPKH(
|
||||
// data: PaymentData(
|
||||
// pubkey: Format.stringToUint8List(pubKey),
|
||||
// ),
|
||||
// network: _network,
|
||||
// ).data;
|
||||
// input = coinlib.P2WPKHInput(
|
||||
// prevOut: coinlib.OutPoint.fromHex(sd.utxo.txid, sd.utxo.vout),
|
||||
// publicKey: keys.publicKey,
|
||||
// );
|
||||
data = bitcoindart
|
||||
.P2WPKH(
|
||||
data: bitcoindart.PaymentData(
|
||||
pubkey: pubKey,
|
||||
),
|
||||
network: convertedNetwork,
|
||||
)
|
||||
.data;
|
||||
break;
|
||||
|
||||
default:
|
||||
throw Exception("DerivePathType unsupported");
|
||||
}
|
||||
|
||||
sd.output = input.toBytes();
|
||||
// sd.output = input.script!.compiled;
|
||||
sd.output = data.output!;
|
||||
sd.keyPair = bitcoindart.ECPair.fromPrivateKey(
|
||||
keys.privateKey.data,
|
||||
compressed: keys.privateKey.compressed,
|
||||
network: bitcoindart.NetworkType(
|
||||
messagePrefix: cryptoCurrency.networkParams.messagePrefix,
|
||||
bech32: cryptoCurrency.networkParams.bech32Hrp,
|
||||
bip32: bitcoindart.Bip32Type(
|
||||
public: cryptoCurrency.networkParams.pubHDPrefix,
|
||||
private: cryptoCurrency.networkParams.privHDPrefix,
|
||||
),
|
||||
pubKeyHash: cryptoCurrency.networkParams.p2pkhPrefix,
|
||||
scriptHash: cryptoCurrency.networkParams.p2shPrefix,
|
||||
wif: cryptoCurrency.networkParams.wifPrefix,
|
||||
),
|
||||
network: convertedNetwork,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -598,17 +618,7 @@ mixin ElectrumXMixin on Bip39HDWallet {
|
|||
// TODO: use coinlib
|
||||
|
||||
final txb = bitcoindart.TransactionBuilder(
|
||||
network: bitcoindart.NetworkType(
|
||||
messagePrefix: cryptoCurrency.networkParams.messagePrefix,
|
||||
bech32: cryptoCurrency.networkParams.bech32Hrp,
|
||||
bip32: bitcoindart.Bip32Type(
|
||||
public: cryptoCurrency.networkParams.pubHDPrefix,
|
||||
private: cryptoCurrency.networkParams.privHDPrefix,
|
||||
),
|
||||
pubKeyHash: cryptoCurrency.networkParams.p2pkhPrefix,
|
||||
scriptHash: cryptoCurrency.networkParams.p2shPrefix,
|
||||
wif: cryptoCurrency.networkParams.wifPrefix,
|
||||
),
|
||||
network: bitcoindart.testnet,
|
||||
);
|
||||
txb.setVersion(1);
|
||||
|
||||
|
@ -1681,7 +1691,7 @@ mixin ElectrumXMixin on Bip39HDWallet {
|
|||
);
|
||||
|
||||
Logging.instance.log("prepare send: $result", level: LogLevel.Info);
|
||||
if (txData.fee!.raw.toInt() < txData.vSize!) {
|
||||
if (result.fee!.raw.toInt() < result.vSize!) {
|
||||
throw Exception(
|
||||
"Error in fee calculation: Transaction fee cannot be less than vSize");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue