多重签名流程示例
TronWeb让开发人员可以使用tronWeb.trx.multiSign方法轻松地执行多重签名。
1. 创建交易
const originalTransaction = await tronWeb.transactionBuilder.sendTrx('41e0d5217904dcb2d5453c2359b86df9673046c4ce', 100000, '4164eb61f763d3374a998989f06929c1bad87175ba');
2. 执行多重签名
let signedTransaction = await tronWeb.trx.multiSign(originalTransaction, '47e5e1a590a44e7e6f4349a4e3ea6a4f9a791e3fccb115ffbddffdbf6d0588e6', 2);
signedTransaction = await tronWeb.trx.multiSign(signedTransaction, 'd5f244307d3ab6dc5739b83ec913b662a24f87e873190e9c1a2d9709f579540c', 2);
signedTransaction = await tronWeb.trx.multiSign(signedTransaction, '9944b7010db0d44a861bca112e40365a934727c5c17f8dfd3b9cc7b31e8aeaf1', 2);
签名结果:
{
"signature": [
"2c25a81333fd83edec33ebae16cb3dfb979cfc4ce035665953c2b61179b06cb9f0625c660947404c5a1e17331cc375579bed7295ebe6635eb30ab79e73c16e6a01",
"86cfad6c7bc086c04c27267ef4a3c5ae3ea394e05e8402713b0b7e624546b76e30518ebf897c7495b29bbb372ba94d65ba927bd48a4fa9c36e439c975b7f88f500",
"4d980f85de1a1bcc0c45fa118276a3a6319a6cf404ee68f5d460fb075bd41f6a8702e0448db2eb55cd74c4dd85d53909597eb05401a48aaa44bdb3a327e47d5001"
],
"txID": "7034c0a26ffc1010c2cba113d9685cbe464793abe0a1d0d21c2e593df7990a84",
"raw_data": {
"contract": [
{
"parameter": {
"value": {
"amount": 100000,
"owner_address": "4164eb61f763d3374a998989f06929c1bad87175ba",
"to_address": "41e0d5217904dcb2d5453c2359b86df9673046c4ce"
},
"type_url": "type.googleapis.com/protocol.TransferContract"
},
"type": "TransferContract",
"Permission_id": 2
}
],
"ref_block_bytes": "02d6",
"ref_block_hash": "cf96636fd7767b20",
"expiration": 1555454166000,
"timestamp": 1555454106555
},
"raw_data_hex": "0a0202d62208cf96636fd7767b2040f087acc2a22d5a69080112630a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412320a154164eb61f763d3374a998989f06929c1bad87175ba121541e0d5217904dcb2d5453c2359b86df9673046c4ce18a08d06280270bbb7a8c2a22d"
}
这个方法需要传递原始的交易、用来签名的私钥和permission ID。permission ID是更新账户权限时生成的。用户可以通过getAccount
来查看账户权限和permission ID。
注意:如果使用active permission,交易ID将被重新计算,将和tronWeb.transactionBuilder.sendTrx
或者其他方法执行后的原始交易不同。
3. 检查交易签名权重
tronweb.trx.getSignWeight
方法可以查看当前有多少地址进行了签名以及权重。它可以在多重签名过程中或结束后进行调用。
const signWeight = await tronWeb.trx.getSignWeight(signedTransaction, 2);
结果:
{
"result": {
},
"approved_list": [
"4164eb61f763d3374a998989f06929c1bad87175ba",
"41e0d5217904dcb2d5453c2359b86df9673046c4ce",
"41e3222fff601087f76ee803c0e09596b21282f10d"
],
"permission": {
"operations": "7fff1fc0037e0000000000000000000000000000000000000000000000000000",
"keys": [
{
"address": "4164eb61f763d3374a998989f06929c1bad87175ba",
"weight": 1
},
{
"address": "41e0d5217904dcb2d5453c2359b86df9673046c4ce",
"weight": 1
},
{
"address": "41e3222fff601087f76ee803c0e09596b21282f10d",
"weight": 1
}
],
"threshold": 3,
"id": 2,
"type": "Active",
"permission_name": "active0"
},
"current_weight": 3,
"transaction": {
"result": {
"result": true
},
"txid": "7100eddcc788b0956e0224470111bffaa99b465781a2abe75cbd2a29c82ade42",
"transaction": {
"signature": [
"bfc89f7a49fa233cfb2484c5e1fdb3c687815c68f198fc81b0cccbc1ccbb09c611d0f3d90a32d7e8dc1d85fde43c10b7cb586edde1833f7974fda42e951b94ed00",
"8c167cd077d82f5b36e1d2bbc831711523dcc71494830cee6181b1435c44b22b751d6a72b425948db8aac3fb5f736bd2f9e689e18941002cafab1ff3caeb354d01",
"64921a4760fd2b2fb8f76bb7feab50d49d6298774f120164c050f4e154d624445e9a620b051116ec674f62640adb5ff2d6b0934ba9187db1197d65f368fd5ebc00"
],
"txID": "7100eddcc788b0956e0224470111bffaa99b465781a2abe75cbd2a29c82ade42",
"raw_data": {
"contract": [
{
"parameter": {
"value": {
"amount": 100000,
"owner_address": "4164eb61f763d3374a998989f06929c1bad87175ba",
"to_address": "41e0d5217904dcb2d5453c2359b86df9673046c4ce"
},
"type_url": "type.googleapis.com/protocol.TransferContract"
},
"type": "TransferContract"
}
],
"ref_block_bytes": "03a9",
"ref_block_hash": "f04705dfcc42a285",
"expiration": 1555454799000,
"timestamp": 1555454740761
},
"raw_data_hex": "0a0203a92208f04705dfcc42a2854098d9d2c2a22d5a69080112630a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412320a154164eb61f763d3374a998989f06929c1bad87175ba121541e0d5217904dcb2d5453c2359b86df9673046c4ce18a08d062802709992cfc2a22d"
}
}
}
4. 检查approve列表
tronWeb.trx.getApprovedList
可以查看有多少个地址已经对交易进行了签名。
const approvedList = await tronWeb.trx.getApprovedList(signedTransaction);
结果:
{
"result": {
},
"approved_list": [
"4164eb61f763d3374a998989f06929c1bad87175ba",
"41e0d5217904dcb2d5453c2359b86df9673046c4ce",
"41e3222fff601087f76ee803c0e09596b21282f10d"
],
"transaction": {
"result": {
"result": true
},
"txid": "479d294569f9d16bb9db643383eae40d4d6df0fa081b6918cf5d831f6fcac1bc",
"transaction": {
"signature": [
"fe5eaa06536e431143612d7b967059480ade185c70ad3c7529ed72c91b74b5c705cc231a857247e5cec31cb1aceb2d9016d2fb2bf57124ec5314b2b1688d060701",
"6951c7e651fdf79102d655acd6ed57e9c2ba8d4e9b7c1486b54c7d9912bf9e58bb5a4876593532f889858e819b41bb9ae60da7693a008fff7d335da34b9088e401",
"9960d832d5d71556124ea04e783e7e15d4437c27933b90d834670d58f590a3a255d3081d12b7ddccd8a84060ad1294b0c19f9ee63fa12fd5c602695ff32f8b6300"
],
"txID": "479d294569f9d16bb9db643383eae40d4d6df0fa081b6918cf5d831f6fcac1bc",
"raw_data": {
"contract": [
{
"parameter": {
"value": {
"amount": 100000,
"owner_address": "4164eb61f763d3374a998989f06929c1bad87175ba",
"to_address": "41e0d5217904dcb2d5453c2359b86df9673046c4ce"
},
"type_url": "type.googleapis.com/protocol.TransferContract"
},
"type": "TransferContract"
}
],
"ref_block_bytes": "03e5",
"ref_block_hash": "3dfe142fc7c242bf",
"expiration": 1555454979000,
"timestamp": 1555454919646
},
"raw_data_hex": "0a0203e522083dfe142fc7c242bf40b8d7ddc2a22d5a69080112630a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412320a154164eb61f763d3374a998989f06929c1bad87175ba121541e0d5217904dcb2d5453c2359b86df9673046c4ce18a08d06280270de87dac2a22d"
}
}
}
5. 广播交易
当多重签名结束后,用户可以把签名的交易广播出去,并通过getTransactionById
检查该交易。
const result = await tronWeb.trx.broadcast(signedTransaction);
结果:
{
"result": true,
"transaction": {
"signature": [
"9ea568d070de64ce674d9db0d1c0dddbdf83435b4e60b27860fd7a017c071f9858062671ff938600b5cbd8b3475b2ab16df4c2076654f18a928e972ce3fe5e3600",
"202db297c8b31d51e1ad9406aaad030b602af865810a58d19910858bba3825ef0143b3013b33ad15aa6680b6b735efd1b8d5a913f42ed7d04792b9200f69097401",
"5c143c98ff4f9a7837eacd8ed26320b4a5544954241ca7985d73e6d099b1f8df0667d686e9e6ab5a2ae6be62e6795523b2cf423b3fc3a88523faf2408dac753001"
],
"txID": "b25f3449384b0ea6b8c201596ed6998fb5581f4a68c5d467a268a4e60499ff1b",
"raw_data": {
"contract": [
{
"parameter": {
"value": {
"amount": 100000,
"owner_address": "4164eb61f763d3374a998989f06929c1bad87175ba",
"to_address": "41e0d5217904dcb2d5453c2359b86df9673046c4ce"
},
"type_url": "type.googleapis.com/protocol.TransferContract"
},
"type": "TransferContract",
"Permission_id": 2
}
],
"ref_block_bytes": "0412",
"ref_block_hash": "614e7424dfcf96fb",
"expiration": 1555455114000,
"timestamp": 1555455056464
},
"raw_data_hex": "0a0204122208614e7424dfcf96fb4090f6e5c2a22d5a69080112630a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412320a154164eb61f763d3374a998989f06929c1bad87175ba121541e0d5217904dcb2d5453c2359b86df9673046c4ce18a08d06280270d0b4e2c2a22d"
}
}
Updated 7 months ago