From 6738b82f3f150aa83aaf52fd2a16450b7e7630c3 Mon Sep 17 00:00:00 2001 From: yingying Date: Tue, 11 Feb 2025 12:25:11 +0800 Subject: [PATCH] account permission management --- docs/clients/wallet-cli-command.md | 6 +- docs/introduction/overview.md | 4 +- docs/mechanism-algorithm/multi-signatures.md | 83 ++++++++++---------- docs/mechanism-algorithm/system-contracts.md | 4 +- mkdocs.yml | 2 +- 5 files changed, 50 insertions(+), 49 deletions(-) diff --git a/docs/clients/wallet-cli-command.md b/docs/clients/wallet-cli-command.md index b7fa83d2..9ccbbd15 100644 --- a/docs/clients/wallet-cli-command.md +++ b/docs/clients/wallet-cli-command.md @@ -192,7 +192,7 @@ Balance = 2665198240 ``` ### UpdateAccountPermission -该命令用于为其他账户赋予当前账户的部分权限,让其他账户可以在该发起账户下完成多种操作以便实现更复杂的功能及更好的管理账户,经常用于多重签名交易等场景。 +该命令用于管理账户权限,为其他账户赋予当前账户的部分权限,让其他账户可以在该发起账户下完成多种操作以便实现更复杂的功能及更好的管理账户。 ```shell wallet>UpdateAccountPermission [ownerAddress] [permissions] ``` @@ -854,12 +854,12 @@ after sign transaction hex string is 0a85010a029ca12208432ed1fe1357ff7f40a2b3a7f txid is ece603ec8ad11578450dc8adf29dd9d9833e733c313fe16a947c8c768f1e4483 Send 10 Sun to TXBpeye7UQ4dDZEnmGDv4vX37mBYDo1tUE successful !! ``` -在转账过程中,需要输入`permission_id`,其默认值为0,此时表示该笔交易只需发起人签名即可。 在上面的例子中,我们输入了“2”,表示使用多重签名完成此笔交易,此时需要拥有`actives` 权限的两个账户都签名才能完成交易,请参照[UpdateAccountPermission](#UpdateAccountPermission) 部分的例子,首先由`TB9qhqbev6DpX8mxdf3zDdtSQ6GC6Vb6Ej` 完成签名,此时系统会询问是否继续签名,输入“y”之后,再由`TXBpeye7UQ4dDZEnmGDv4vX37mBYDo1tUE` 完成签名。 +在转账过程中,需要输入`permission_id`,其默认值为0,此时表示该笔交易只需发起人签名即可。 在上面的例子中,我们输入了“2”,表示需要具有ID为2的权限的账户来签名完成此笔交易,此时需要拥有`actives` 权限的两个账户都签名才能完成交易,请参照[UpdateAccountPermission](#UpdateAccountPermission) 部分的例子,首先由`TB9qhqbev6DpX8mxdf3zDdtSQ6GC6Vb6Ej` 完成签名,此时系统会询问是否继续签名,输入“y”之后,再由`TXBpeye7UQ4dDZEnmGDv4vX37mBYDo1tUE` 完成签名。 两个账户的权重各为1,完成多签的权重阀值为2,此时签名条件达成,交易成功。这个例子为使用同一客户端时如何完成多重签名交易。当使用多个客户端时,请参考下面这个命令。 ### AddTransactionSign -当有多个客户端时,可以使用该命令进行多重签名交易,此时需要交易本体的hex string。 +当有多个客户端时,可以使用该命令为交易添加签名,此时需要交易本体的hex string。 示例: ```shell diff --git a/docs/introduction/overview.md b/docs/introduction/overview.md index 38763f3c..e88f3f1a 100644 --- a/docs/introduction/overview.md +++ b/docs/introduction/overview.md @@ -1262,10 +1262,10 @@ buyTokenQuant = (long)balance* (Math.pow(1.0 + (double) supplyQuant / supply 相关api详情,请查询[Tron HTTP API](../api/http.md)。 -## 10. 多重签名 +## 10. 账户权限管理 详细信息请参考: -[波场多重签名](../mechanism-algorithm/multi-signatures.md) +[账户权限管理](../mechanism-algorithm/multi-signatures.md) ## 11. 匿名交易 diff --git a/docs/mechanism-algorithm/multi-signatures.md b/docs/mechanism-algorithm/multi-signatures.md index 365bd735..e84eb6e8 100644 --- a/docs/mechanism-algorithm/multi-signatures.md +++ b/docs/mechanism-algorithm/multi-signatures.md @@ -1,10 +1,8 @@ -# 多重签名 +# 账户权限管理 ## 背景 -多重签名功能允许权限分级,每个权限可以对应多个私钥。这使得实现账户的多人联合控制成为可能。 - -[Tron multi-signatures TIP](https://github.com/tronprotocol/tips/blob/master/tip-16.md) +[账户权限管理](https://github.com/tronprotocol/tips/blob/master/tip-16.md)功能允许权限分级,每个权限可以对应多个私钥。这使得实现账户的多人联合控制成为可能。 ## 概念说明 @@ -51,10 +49,10 @@ message AccountPermissionUpdateContract { } ``` -`owner_address`:待修改权限的账户的地址 -`owner`:修改后的 owner 权限 -`witness`:修改后的 witness 权限 -`actives`:修改后的 actives 权限 +* `owner_address`:待修改权限的账户的地址 +* `owner`:修改后的 owner 权限 +* `witness`:修改后的 witness 权限 +* `actives`:修改后的 actives 权限 注意:该接口是覆盖原账户权限,因此,如果只想修改owner权限,witness(如果是超级代表账户)及actives的也需要设置。 @@ -77,16 +75,16 @@ message Permission { } ``` -`PermissionType`: 权限类型,目前仅支持三种权限 -`id`: 值由系统自动设置,Owner id=0, Witness id=1, Active id 从2开始递增分配。在执行合约时, +* `PermissionType`: 权限类型,目前仅支持三种权限 +* `id`: 值由系统自动设置,Owner id=0, Witness id=1, Active id 从2开始递增分配。在执行合约时, 通过该id来指定使用哪个权限,如使用owner权限,即将id设置为0。 -`permission_name`: 权限名称,由用户设定,长度限制为32字节 -`threshold`: 阈值,只有当参与签名的权重之和超过域值才允许做相应的操作。要求小于Long类型的最大值 -`parent_id`:目前只能为0 -`operations`:共32字节(256位),每位代表一个合约的权限,为1时表示拥有该合约的权限。 +* `permission_name`: 权限名称,由用户设定,长度限制为32字节 +* `threshold`: 阈值,只有当参与签名的权重之和超过域值才允许做相应的操作。要求小于Long类型的最大值 +* `parent_id`:目前只能为0 +* `operations`:共32字节(256位),每位代表一个合约的权限,为1时表示拥有该合约的权限。 如`operations=0x0100...00(十六进制),即100...0(二进制)`时,查看proto中Transaction.ContractType定义,合约AccountCreateContract的id为0, 即表示该permission只拥有执行AccountCreateContract的权限,可以使用"active权限中operations的计算示例"计算获得。 -`keys`:共同拥有该权限的地址及权重,最多允许5个key。 +* `keys`:共同拥有该权限的地址及权重,最多允许5个key。 #### Key @@ -97,8 +95,8 @@ message Key { } ``` -`address`:拥有该权限的地址 -`weight`:该地址对该权限拥有权重 +* `address`:拥有该权限的地址 +* `weight`:该地址对该权限拥有权重 #### Transaction @@ -117,10 +115,11 @@ message Transaction { OwnerPermission是账户的最高权限,用于控制用户的所有权、调整权限结构,Owner权限也可以执行所有合约。 Owner权限具有以下特性: -1、拥有OwnerPermission的地址可以修改OwnerPermission。 -2、当OwnerPermission为空时,默认采用该账户的地址具有owner权限。 -3、账户新建时,自动将该账户的地址填充到OwnerPermission中,并默认域值为1,keys中仅包含该账户地址且权重为1。 -4、当执行合约时未指定permissionId时, 默认采用OwnerPermission。 + +1. 拥有OwnerPermission的地址可以修改OwnerPermission。 +2. 当OwnerPermission为空时,默认采用该账户的地址具有owner权限。 +3. 账户新建时,自动将该账户的地址填充到OwnerPermission中,并默认域值为1,keys中仅包含该账户地址且权重为1。 +4. 当执行合约时未指定permissionId时, 默认采用OwnerPermission。 ### Witness权限 @@ -129,8 +128,9 @@ Owner权限具有以下特性: 使用场景示例:一个超级代表在云服务器上部署出块程序,为了账户安全,此时可以将出块权限赋予另一个地址。由于该地址仅具有出块权限,无TRX转出权限,即使该服务器上私钥被泄密,也不会出现TRX丢失。 出块节点的配置: -1、未修改witness权限时,无需特殊配置。 -2、修改witness权限后的出块节点,需要在重新配置,配置项如下: + +1. 未修改witness权限时,无需特殊配置。 +2. 修改witness权限后的出块节点,需要在重新配置,配置项如下: ```conf #config.conf @@ -158,16 +158,17 @@ localwitness = [ Active权限,用于提供一个权限的组合,比如提供一个只能执行创建账户、转账功能的权限。 Active权限有以下特性: -1、拥有OwnerPermission的地址可以修改Active权限 -2、拥有执行AccountPermissionUpdateContract权限的地址也能够修改Active权限 -3、最多支持8个组合。 -4、permission的id从2开始自动递增。 -5、账户新建时,自动创建一个Active权限,并将该账户的地址填充到其中,默认域值为1,keys中仅包含该账户地址且权重为1。 + +1. 拥有OwnerPermission的地址可以修改Active权限 +2. 拥有执行AccountPermissionUpdateContract权限的地址也能够修改Active权限 +3. 最多支持8个组合。 +4. permission的id从2开始自动递增。 +5. 账户新建时,自动创建一个Active权限,并将该账户的地址填充到其中,默认域值为1,keys中仅包含该账户地址且权重为1。 ### 费用 1. 使用更新账户权限时,即 AccountPermissionUpdate 合约,收取100TRX。 -2. 使用多重签名的交易时,即交易中包括两个及两个以上签名的交易,除交易费用外,另收取1TRX。 +2. 交易中包括两个及两个以上签名时,除交易费用外,另收取1TRX。 3. 可通过提议,修改以上费用。 ## API @@ -176,10 +177,10 @@ Active权限有以下特性: `AccountPermissionUpdateContract`,修改权限步骤如下: -1、使用接口`getaccount`查询账户,并获取原权限 -2、修改permission -3、创建合约,签名 -4、发送交易 +1. 使用接口`getaccount`查询账户,并获取原权限 +2. 修改permission +3. 创建合约,签名 +4. 发送交易 ### http-demo @@ -265,17 +266,17 @@ public static void main(String[] args) { ### 执行合约 -1、创建交易,与非多重签名交易的构建过程相同 -2、指定Permission_id,默认为0,表示owner-permission, [demo](https://github.com/tronprotocol/wallet-cli/commit/ff9122f2236f1ce19cbb9ba9f0494c8923a3d10c#diff-a63fa7484f62fe1d8fb27276c991a4e3R211) -3、用户A签名,将签名后交易通过其他方式发送给B。 -4、用户B签名,将签名后交易通过其他方式发送给C。 +1. 创建交易,与非多重签名交易的构建过程相同 +2. 指定Permission_id,默认为0,表示owner-permission, [demo](https://github.com/tronprotocol/wallet-cli/commit/ff9122f2236f1ce19cbb9ba9f0494c8923a3d10c#diff-a63fa7484f62fe1d8fb27276c991a4e3R211) +3. 用户A签名,将签名后交易通过其他方式发送给B。 +4. 用户B签名,将签名后交易通过其他方式发送给C。 + … -n、最后一个完成签名的用户,将交易广播到节点。 -n+1、验证多重签名的权重之和大于域值则接受交易,否则拒绝交易 -代码示例: +n. 最后一个完成签名的用户,将交易广播到节点。 + +n+1. 节点验证所有签名的权重之和,如果大于等于域值则接受交易,否则拒绝交易 -[多重签名示例](https://github.com/tronprotocol/wallet-cli/blob/multi_sign_V2/src/main/java/org/tron/demo/MultiSignDemo.java) ### 其他相关接口 diff --git a/docs/mechanism-algorithm/system-contracts.md b/docs/mechanism-algorithm/system-contracts.md index 608aa190..34b175be 100644 --- a/docs/mechanism-algorithm/system-contracts.md +++ b/docs/mechanism-algorithm/system-contracts.md @@ -464,9 +464,9 @@ TRON网络支持多种不同类型的交易,比如TRX转账交易、TRC10转 * `zkproof`:交易接收方note存在的零知识证明。 -## 27.多重签名 +## 27.账户权限管理 - [多重签名](./multi-signatures.md) + [账户权限管理](./multi-signatures.md) ## 28. 清除ABI合约 diff --git a/mkdocs.yml b/mkdocs.yml index aafbe37d..f03208f9 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -26,7 +26,7 @@ nav: - 智能合约: contracts/contract.md - 系统合约: mechanism-algorithm/system-contracts.md - 去中心化交易所: mechanism-algorithm/dex.md - - 多重签名: mechanism-algorithm/multi-signatures.md + - 账户权限管理: mechanism-algorithm/multi-signatures.md - Java-tron开发: - 开发者指南: developers/java-tron.md - TIPs工作流程: developers/tips.md