tronSignTransaction
TRON:签名交易
使用指定 BIP32 路径派生的私钥对交易进行签名。签名前,用户需要在 Ukey Wallet 上核对交易目标、金额和费用等关键信息。
const response = await HardwareSDK.tronSignTransaction(
connectId,
deviceId,
params,
);
参数
path- 必需string | Array<number>,字符串数组最小长度限制为3。更多信息transaction- 必需TronTransaction类型。
TronTransaction 类型
type TronTransaction = {
refBlockBytes: string;
refBlockHash: string;
expiration: number;
data?: string;
contract: TronTransactionContract;
timestamp: number;
feeLimit?: number;
};
type TronTransactionContract = {
transferContract?: TronTransferContract;
triggerSmartContract?: TronTriggerSmartContract;
};
type TronTransferContract = {
toAddress?: string;
amount?: UintType;
};
type TronTriggerSmartContract = {
contractAddress?: string;
callValue?: number;
data?: string;
callTokenValue?: number;
assetId?: number;
};
示例
HardwareSDK.tronSignTransaction(connectId, deviceId, {
path: "m/44'/195'/1'/0/0",
transaction: {
refBlockBytes: "c3a8",
refBlockHash: "e9124bd6a5f0873c",
timestamp: 1712203201450,
expiration: 1712203260000,
contract: {
transferContract: {
toAddress: "TGx4mK7zQhN2sP8yVdL5bR1cFwE9uJ3tXa",
amount: 250,
},
},
},
});
返回结果
{
success: true,
payload: {
signature: string; // 签名结果
serialized_tx: string; // 序列化后的交易数据
}
}
错误
{
success: false,
payload: {
error: string, // 错误消息
code: number // 错误码
}
}
交易签名和广播
// 通过 TronWeb 创建原始交易
const tronWeb = new TronWeb({
fullHost: "https://api.trongrid.io",
});
const toAddress = "TGx4mK7zQhN2sP8yVdL5bR1cFwE9uJ3tXa";
const encodedTx = await tronWeb.transactionBuilder.sendTrx(toAddress, 2500000);
// 交易ID
const txid = encodedTx.txID;
const result = await HardwareSDK.tronSignTransaction(connectId, deviceId, {
path: "m/44'/195'/1'/0/0",
transaction: {
refBlockBytes: encodedTx.raw_data.ref_block_bytes,
refBlockHash: encodedTx.raw_data.ref_block_hash,
expiration: encodedTx.raw_data.expiration,
timestamp: encodedTx.raw_data.timestamp,
feeLimit: encodedTx.raw_data.fee_limit,
contract: {
transferContract: {
toAddress: toAddress,
amount: 2500000,
},
},
},
});
// 原始交易的数据
const rawTx = JSON.stringify({
txID: txid,
raw_data: encodedTx.raw_data,
raw_data_hex: result.payload.serialized_tx,
signature: [result.payload.signature],
});