Sur cette page
btcSignTransaction
Bitcoin : signer une transaction
Demande les signatures des entrées et sorties d’une transaction préparée. L’utilisateur vérifie et confirme la demande sur l’appareil.
const result = await HardwareSDK.btcSignTransaction(connectId, deviceId, params);Paramètres
Paramètres communs facultatifs
coin- obligatoirestringDétermine la définition du réseau spécifiée dans bitcoin.json . Les champsshortcut,nameoulabelde la monnaie peuvent être utilisés.inputs- obligatoireArrayde TxInputType ,outputs- obligatoireArrayde TxOutputType ,refTxs- obligatoireArrayde RefTransaction . Les refTxs Zcash et Komodo doivent également contenir les champsexpiry,version_group_idetextra_data.locktime- facultatifnumber,version- facultatifnumberversion de transaction,expiry- facultatifnumber, uniquement pour Decred et Zcash,versionGroupId- facultatifnumberuniquement pour Zcash, nVersionGroupId lorsque overwintered est défini,overwintered- facultatifbooleanuniquement pour Zcashtimestamp- facultatifnumberuniquement pour Capricoin, horodatage de transaction,branchId- facultatifnumber, uniquement pour Zcash, BRANCH_ID lorsque overwintered est défini
Construire les paramètres de transaction
Construire une entrée
const buildHardwareInput = async (
input: TxInput,
path: string,
): Promise<Messages.TxInputType> => {
const { getHDPath, getScriptType } = await CoreSDKLoader();
const addressN = getHDPath(path);
const scriptType = getScriptType(addressN);
const utxo = input.utxo as UTXO;
return {
prev_index: utxo.vout,
prev_hash: utxo.txid,
amount: utxo.value.integerValue().toString(),
address_n: addressN,
script_type: scriptType,
};
};Construire une sortie
const buildHardwareOutput = async (
output: TxOutput,
): Promise<Messages.TxOutputType> => {
const { isCharge, bip44Path } = output.payload || {};
if (isCharge && bip44Path) {
const { getHDPath, getOutputScriptType } = await CoreSDKLoader();
const addressN = getHDPath(bip44Path);
const scriptType = getOutputScriptType(addressN);
return {
script_type: scriptType,
address_n: addressN,
amount: output.value.integerValue().toString(),
};
}
return {
script_type: 'PAYTOADDRESS',
address: output.address,
amount: output.value.integerValue().toString(),
};
};Construire une transaction précédente
import * as BitcoinJS from 'bitcoinjs-lib';
const buildPrevTx = (rawTx: string): RefTransaction => {
const tx = BitcoinJS.Transaction.fromHex(rawTx);
return {
hash: tx.getId(),
version: tx.version,
inputs: tx.ins.map((i) => ({
prev_hash: Buffer.from(i.hash).reverse().toString('hex'),
prev_index: i.index,
script_sig: Buffer.from(i.script).toString('hex'),
sequence: i.sequence,
})),
bin_outputs: tx.outs.map((o) => ({
amount: o.value.toString(),
script_pubkey: Buffer.from(o.script).toString('hex'),
})),
lock_time: tx.locktime,
};
};Exemple
Les extraits ci-dessous illustrent les structures des paramètres. Utilisez des UTXO réellement dépensables, des montants correspondants et des transactions précédentes complètes ; les données statiques ne constituent pas une transaction prête à être diffusée.
PAYTOADDRESS
import type { BTCSignTransactionParams } from "@onekeyfe/hd-core";
// Load the actual previous transactions for the UTXOs below.
declare const refTxs: BTCSignTransactionParams["refTxs"];
declare const previousOutputAmount: string;
HardwareSDK.btcSignTransaction(connectId, deviceId, {
inputs: [
{
address_n: [(44 | 0x80000000) >>> 0, (0 | 0x80000000) >>> 0, (2 | 0x80000000) >>> 0, 1, 0],
prev_index: 0,
prev_hash: 'b035d89d4543ce5713c553d69431698116a822c57c03ddacf3f04b763d1999ac',
amount: previousOutputAmount,
}
],
outputs: [
{
address_n: [(44 | 0x80000000) >>> 0, (0 | 0x80000000) >>> 0, (2 | 0x80000000) >>> 0, 1, 1],
amount: '3181747',
script_type: 'PAYTOADDRESS',
}, {
address: '18WL2iZKmpDYWk1oFavJapdLALxwSjcSk2',
amount: '200000',
script_type: 'PAYTOADDRESS',
}
],
refTxs,
coin: 'btc'
});SPENDP2SHWITNESS
import type { BTCSignTransactionParams } from "@onekeyfe/hd-core";
// Load the actual previous transactions for the UTXOs below.
declare const refTxs: BTCSignTransactionParams["refTxs"];
declare const previousOutputAmount: string;
HardwareSDK.btcSignTransaction(connectId, deviceId, {
inputs: [
{
address_n: [(49 | 0x80000000) >>> 0, (0 | 0x80000000) >>> 0, (2 | 0x80000000) >>> 0, 1, 0],
prev_index: 0,
prev_hash: 'b035d89d4543ce5713c553d69431698116a822c57c03ddacf3f04b763d1999ac',
amount: '3382047',
script_type: 'SPENDP2SHWITNESS',
}
],
outputs: [
{
address_n: [(49 | 0x80000000) >>> 0, (0 | 0x80000000) >>> 0, (2 | 0x80000000) >>> 0, 1, 1],
amount: '3181747',
script_type: 'PAYTOP2SHWITNESS',
}, {
address: '18WL2iZKmpDYWk1oFavJapdLALxwSjcSk2',
amount: '200000',
script_type: 'PAYTOADDRESS',
}
],
refTxs,
coin: 'btc'
});PAYTOADDRESS avec refTxs (données de transaction fournies par un backend personnalisé)
HardwareSDK.btcSignTransaction(connectId, deviceId, {
inputs: [
{
address_n: [(44 | 0x80000000) >>> 0, (0 | 0x80000000) >>> 0, (2 | 0x80000000) >>> 0, 1, 0],
prev_index: 0,
prev_hash: 'b035d89d4543ce5713c553d69431698116a822c57c03ddacf3f04b763d1999ac',
amount: '3431747',
}
],
outputs: [
{
address_n: [(44 | 0x80000000) >>> 0, (0 | 0x80000000) >>> 0, (2 | 0x80000000) >>> 0, 1, 1],
amount: '3181747',
script_type: 'PAYTOADDRESS',
}, {
address: '18WL2iZKmpDYWk1oFavJapdLALxwSjcSk2',
amount: '200000',
script_type: 'PAYTOADDRESS',
}
],
refTxs: [
{
hash: 'b035d89d4543ce5713c553d69431698116a822c57c03ddacf3f04b763d1999ac',
inputs: [
{
prev_hash: '448946a44f1ef514601ccf9b22cc3e638c69ea3900b67b87517ea673eb0293dc',
prev_index: 0,
script_sig: '47304402202872cb8459eed053dcec0f353c7e293611fe77615862bfadb4d35a5d8807a4cf022015057aa0aaf72ab342b5f8939f86f193ad87b539931911a72e77148a1233e022012103f66bbe3c721f119bb4b8a1e6c1832b98f2cf625d9f59242008411dd92aab8d94',
sequence: 4294967295,
}
],
bin_outputs: [
{
amount: 3431747,
script_pubkey: '76a91441352a84436847a7b660d5e76518f6ebb718dedc88ac',
},
{
amount: 10000,
script_pubkey: '76a9141403b451c79d34e6a7f6e36806683308085467ac88ac',
}
],
lock_time: 0,
version: 1,
},
],
coin: 'btc'
});Résultat
{
success: true,
payload: {
signatures: Array<string>, // Array of signer signatures
serializedTx: string, // serialized transaction
txid?: string, // transaction ID, if returned; signing does not broadcast
}
}Erreur
{
success: false,
payload: {
error: string, // error message
code?: string | number // error code
}
}Dernière mise à jour le