我想创建一个原始交易(不签名)并获取其十六进制格式的哈希值。官方 TRON API 通常会返回一个 JSON 用于创建交易。有人知道该怎么做吗?
您只需使用您的交易详细信息调用 api 即可取回交易
const data = {
to_address: toHex(to),
owner_address: toHex(from),
amount: amount,
};
let transaction = await tronWeb.fullNode.request('wallet/createtransaction', data, 'post');
如果我的理解是正确的,您需要未签名交易的原始十六进制表示。 为此,您可以使用 tronweb 库,它们具有 API 来创建 TRX、trc10 或代币传输交易并返回 JSON 和十六进制表示形式: https://developers.tron.network/v3.7/reference/sendtrx
这是上述文档中的示例:
tronWeb.transactionBuilder.sendTrx("TVDGpn4hCSzJ5nkHPLetk8KQBtwaTppnkr", 100, "TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL");
退货
{
"visible": false,
"txID": "9f62a65d0616c749643c4e2620b7877efd0f04dd5b2b4cd14004570d39858d7e",
"raw_data": {
"contract": [
{
"parameter": {
"value": {
"amount": 100,
"owner_address": "418840e6c55b9ada326d211d818c34a994aeced808",
"to_address": "41d3136787e667d1e055d2cd5db4b5f6c880563049"
},
"type_url": "type.googleapis.com/protocol.TransferContract"
},
"type": "TransferContract"
}
],
"ref_block_bytes": "0add",
"ref_block_hash": "6c2763abadf9ed29",
"expiration": 1581308685000,
"timestamp": 1581308626092
},
"raw_data_hex": "0a020add22086c2763abadf9ed2940c8d5deea822e5a65080112610a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412300a15418840e6c55b9ada326d211d818c34a994aeced808121541d3136787e667d1e055d2cd5db4b5f6c880563049186470ac89dbea822e"
}
要创建raw_data_hex,需要一个raw_data.proto协议来转换:
syntax = "proto3";
package YourPackageName;
option java_package = "wallet.core.jni.proto";
message Contract {
enum ContractType {
AccountCreateContract = 0;
TransferContract = 1;
TransferAssetContract = 2;
VoteAssetContract = 3;
VoteWitnessContract = 4;
FreezeBalanceContract = 11;
UnfreezeBalanceContract = 12;
WithdrawBalanceContract = 13;
UnfreezeAssetContract = 14;
TriggerSmartContract = 31;
FreezeBalanceV2Contract = 54;
UnfreezeBalanceV2Contract = 55;
WithdrawExpireUnfreezeContract = 56;
DelegateResourceContract = 57;
UnDelegateResourceContract = 58;
}
ContractType type = 1;
message Parameter {
message Transfer {
bytes owner_address = 1;
bytes to_address = 2;
int64 amount = 3;
}
string type_url = 1;
Transfer value = 2;
}
Parameter parameter = 2;
}
message raw_data_hex {
bytes ref_block_bytes = 1;
bytes ref_block_hash = 4;
int64 expiration = 8;
repeated Contract contract = 11;
int64 timestamp = 14;
}
message signRaw_data_hex {
raw raw_data = 1;
repeated bytes signature = 2;
}