账户权限管理流程示例
开发人员使用 SDK 可以轻松的实现发送账户权限管理交易,本文将以账户TUZKijZ9Esy8JEkrqMpaVgtbDKKNA5p5CZ为例,使用 TronWeb 在 Nile 测试网上构建账户权限管理的转账。
账户权限管理转账步骤(注:如果您的账户权限已经调整过,可直接从步骤 3 开始):
1) 修改账户权限
通过 Tronscan 或者使用wallet/accountpermissionupdate接口修改账户权限。本例中通过 Tronscan 为账户TUZKijZ9Esy8JEkrqMpaVgtbDKKNA5p5CZ新增了一个名为NewAddedActivePermission的 active 权限。
2. 查询账户权限
使用 wallet/getaccount 接口查询账户权限信息:
curl --location --request POST 'https://api.nileex.io/wallet/getaccount' \
--header 'Content-Type: text/plain' \
--data-raw '{
"address": "TUZKijZ9Esy8JEkrqMpaVgtbDKKNA5p5CZ",
"visible": true
}'
执行结果为:
{
"address": "TUZKijZ9Esy8JEkrqMpaVgtbDKKNA5p5CZ",
"balance": 2897800000,
......
"owner_permission": {
"permission_name": "owner",
"threshold": 1,
"keys": [
{
"address": "TUZKijZ9Esy8JEkrqMpaVgtbDKKNA5p5CZ",
"weight": 1
}
]
},
"active_permission": [
{
"type": "Active",
"id": 2,
"permission_name": "active",
"threshold": 1,
"operations": "7fff1fc0033efb0f000000000000000000000000000000000000000000000000",
"keys": [
{
"address": "TUZKijZ9Esy8JEkrqMpaVgtbDKKNA5p5CZ",
"weight": 1
}
]
},
{
"type": "Active",
"id": 3,
"permission_name": "NewAddedActivePermission",
"threshold": 2,
"operations": "77ff07c00260c30f000000000000000000000000000000000000000000000000",
"keys": [
{
"address": "TXTMqofe9nS5bN5tfhfd6ayWocJm7oxJKT",
"weight": 1
},
{
"address": "TVqTEPUPiTxhzaSnD9xXEvarUQooLibkXM",
"weight": 1
}
]
}
],
......
}
从返回结果中,我们可以看到账户TUZKijZ9Esy8JEkrqMpaVgtbDKKNA5p5CZ的 ID 为 3 的 Active 权限,其阈值为 2,授权了给两个账户,每个账户的权重均为 1。
3. 选择权限并创建交易
本例选择使用TUZKijZ9Esy8JEkrqMpaVgtbDKKNA5p5CZ的 ID 为 3 的 active 权限,通过tronWeb.transactionBuilder.sendTrx 方法构建账户权限管理签名转账交易:
var unsignedTransaction = await tronWeb.transactionBuilder.sendTrx('TVqTEPUPiTxhzaSnD9xXEvarUQooLibkXM', 10000000, 'TUZKijZ9Esy8JEkrqMpaVgtbDKKNA5p5CZ',{permissionId: 3});
- 交易中的TRX转出者:即交易中的owner_address为
TUZKijZ9Esy8JEkrqMpaVgtbDKKNA5p5CZ。在构建交易时,无需在意交易创建者,只需将交易中的TRX的发送者设置为账户权限管理地址即可。 - 账户权限管理权限:选择
TUZKijZ9Esy8JEkrqMpaVgtbDKKNA5p5CZ的 ID 为 3 的 active 权限 -{permissionId: 3}
4. 拥有权限的账户对交易进行签名
拥有TUZKijZ9Esy8JEkrqMpaVgtbDKKNA5p5CZ的 ID 为 3 的 Active 权限的账户是"TXTMqofe9nS5bN5tfhfd6ayWocJm7oxJKT" 和 "TVqTEPUPiTxhzaSnD9xXEvarUQooLibkXM",这两个账户分别使用 tronWeb.trx.multiSign 接口对交易进行签名:
var signedTransaction = await tronWeb.trx.multiSign(unsignedTransaction, 'f0bd085afbcf31374cf6ae4585faee1366f8c850c596e2649ba93015ac479f74');
signedTransaction = await tronWeb.trx.multiSign(signedTransaction, '6c72f51dc78d24ce1517912526a8a0e73379694ae7594efd3e05adb33d726edc');
签名结果:
{
visible: false,
txID: '507efa43ef267005cd384f74f8bc2b2d6e807807144144fd01f194f36ddfb93a',
raw_data: {
contract: [ [Object] ],
ref_block_bytes: 'e5b2',
ref_block_hash: 'c565570704ef1e7a',
expiration: 1700538150000,
timestamp: 1700538091138
},
raw_data_hex: '0a02e5b22208c565570704ef1e7a40f0d8e3ffbe315a6a080112640a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412330a1541cbe603e1f0ac26c50bb795d8d54a95706c64b2e2121541d9eb1101ba37f55c436cc668ed1ac18d23d6c6631880ade204280370828de0ffbe31',
signature: [
'9f51d0839b8dd10b5a6bc3b043f6246d5c8a00a79839a52b0987ee337911b3375d0376c3b1aef3a7ffa0779a2e3d0cb95380294e6b934f738964a0551675d45501',
'2bc656a647cbd9de932bf63909f73aacf2e97f0c771bd72b69654f6242a152e8ecbc8712ad59fe95a280cffbed5ef2dd28777dc27267976fe0c6374e00ba355c01'
]
}
5. 检查交易签名权重
通过 tronweb.trx.getSignWeight 方法不但可以查看该权限要求的权重,还可以查看当前有多少地址进行了签名以及权重。可以在账户权限管理签名过程中或结束后调用它。
var signWeight = await tronWeb.trx.getSignWeight(signedTransaction);
执行结果:
{
result: {},
approved_list: [
'41d9eb1101ba37f55c436cc668ed1ac18d23d6c663',
'41ebadab040181bcc649169d00c28a3ad1bb6bfeb7'
],
permission: {
operations: '77ff07c00260c30f000000000000000000000000000000000000000000000000',
keys: [ [Object], [Object] ],
threshold: 2,
id: 3,
type: 'Active',
permission_name: 'NewAddedActivePermission'
},
current_weight: 2,
transaction: {
result: { result: true },
txid: '507efa43ef267005cd384f74f8bc2b2d6e807807144144fd01f194f36ddfb93a',
transaction: {
signature: [Array],
txID: '507efa43ef267005cd384f74f8bc2b2d6e807807144144fd01f194f36ddfb93a',
raw_data: [Object],
raw_data_hex: '0a02e5b22208c565570704ef1e7a40f0d8e3ffbe315a6a080112640a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412330a1541cbe603e1f0ac26c50bb795d8d54a95706c64b2e2121541d9eb1101ba37f55c436cc668ed1ac18d23d6c6631880ade204280370828de0ffbe31'
}
}
}
6. 检查已批准该交易的账户列表
通过 tronWeb.trx.getApprovedList 也可以查看已经对交易进行了签名的账户列表。
var approvedList = await tronWeb.trx.getApprovedList(signedTransaction);
执行结果:
{
result: {},
approved_list: [
'41d9eb1101ba37f55c436cc668ed1ac18d23d6c663',
'41ebadab040181bcc649169d00c28a3ad1bb6bfeb7'
],
transaction: {
result: { result: true },
txid: '507efa43ef267005cd384f74f8bc2b2d6e807807144144fd01f194f36ddfb93a',
transaction: {
signature: [Array],
txID: '507efa43ef267005cd384f74f8bc2b2d6e807807144144fd01f194f36ddfb93a',
raw_data: [Object],
raw_data_hex: '0a02e5b22208c565570704ef1e7a40f0d8e3ffbe315a6a080112640a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412330a1541cbe603e1f0ac26c50bb795d8d54a95706c64b2e2121541d9eb1101ba37f55c436cc668ed1ac18d23d6c6631880ade204280370828de0ffbe31'
}
}
}
7. 广播交易
当账户权限管理签名结束后,用户可以把签名的交易广播出去,然后通过getTransactionById查询该交易。
var result = await tronWeb.trx.broadcast(signedTransaction);
执行结果:
{
result: true,
txid: '507efa43ef267005cd384f74f8bc2b2d6e807807144144fd01f194f36ddfb93a',
transaction: {
visible: false,
txID: '507efa43ef267005cd384f74f8bc2b2d6e807807144144fd01f194f36ddfb93a',
raw_data: {
contract: [Array],
ref_block_bytes: 'e5b2',
ref_block_hash: 'c565570704ef1e7a',
expiration: 1700538150000,
timestamp: 1700538091138
},
raw_data_hex: '0a02e5b22208c565570704ef1e7a40f0d8e3ffbe315a6a080112640a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412330a1541cbe603e1f0ac26c50bb795d8d54a95706c64b2e2121541d9eb1101ba37f55c436cc668ed1ac18d23d6c6631880ade204280370828de0ffbe31',
signature: [
'9f51d0839b8dd10b5a6bc3b043f6246d5c8a00a79839a52b0987ee337911b3375d0376c3b1aef3a7ffa0779a2e3d0cb95380294e6b934f738964a0551675d45501',
'2bc656a647cbd9de932bf63909f73aacf2e97f0c771bd72b69654f6242a152e8ecbc8712ad59fe95a280cffbed5ef2dd28777dc27267976fe0c6374e00ba355c01'
]
}
}
Updated about 2 months ago