多重签名功能允许权限分级,每个权限可以对应多个私钥。这就使得实现多人共同控制账户成为可能。本指南指导用户完成TRON的多重签名实现和设计。
https://github.com/tronprotocol/tips/issues/16
概念描述该方案包括三个权限级别:所有者权限、见证权限和主动权限,其中所有者权限有权执行所有合同。结构描述1。账户修改账户结构中新增三个权限属性,分别是owner_permission、witness_permission和active_permission,其中active_permission为列表,最多可以指定八个。
2。ContractType修改
添加一个新的交易类型account permission update contract,用于更新帐户权限。
3。account permission update contract这个接口覆盖了原始的帐户权限。所以如果只是想修改所有者权限,witness(如果是witnss账号)和actives也需要设置。
4。权限 5。键6。事务修改
在事务中添加Permission_id字段,对应Permission.id,默认值为0,即所有者权限。1是不允许的,因为见证权限仅用于发出块,而不用于签署事务。
Owner permission
Owner permission是一个账号的最高权限,用于控制用户的所有权,调整权限结构。所有者权限也可以执行所有合同。OwnerPermission具有以下特征:1。拥有者权限可以由拥有者权限的地址修改。2。当ownerPermission为空时,默认情况下假定该帐户的地址具有所有者权限。3。新创建帐户时,帐户的地址会自动填充到OwnerPermission中,默认的域值为1。keys仅包含权重为1的帐户地址。4。如果在执行合同时未指定permissionId,则默认采用OwnerPermission。见证权限超级代表可以使用该权限管理块节点。非见证帐户没有此权限。使用场景示例:超级代表在云服务器上部署封锁程序。为了帐户安全,此时可以将封锁权限授予另一个地址。因为这个地址只有屏蔽权,没有转出TRX的权利,所以即使这个服务器上的私钥泄露,也不会有TRX的损失。见证块外节点的配置:1。不修改见证权限时,不需要特殊配置。2。修改见证权限后,需要在中重新配置块外节点。配置项如下:#config.conf//?可选。那个?违约?是吗?空的。//?它?是吗?二手?什么时候?那个?证人?账户?有吗?设置?那个?证人许可。//?什么时候?它?是吗?不是吗?空的,那个?localWitnessAccountAddress?代表着?那个?地址?的?那个?证人?账号,//?然后呢。那个?本地证人?是吗?配置好了?用什么?那个?私人?钥匙?的?那个?witnessPermissionAddress?在?那个?证人?账户。//?什么时候?它?是吗?空的?本地证人?是吗?配置好了?用什么?那个?私人?钥匙?的?那个?证人?账户。//可选,默认为空。//在为见证帐户设置witnessPermission时使用。//当值不为空时,localwitnessAccountAddress表示见证帐户的地址,localwitness是witnessPermission中地址的私钥。//当该值为空时,localwitness被配置为见证帐户的私钥。//localwitnessaccountdress?=localwitness?=?【F4 df 789d 3210 AC 881 CB 90464d 30409453044d 277060 a 0 c 391 CBD f 4c 64 f 57
主动特权主动特权用于提供特权的组合,例如提供只能执行创建帐户和转账功能的特权。活动权限具有以下特征:1。拥有OwnerPermission的地址可以修改活动权限2。具有执行account permission update contract权限的地址也可以修改活动权限3。最多支持8种组合。4。权限id自动从2开始递增。5。当新创建一个帐户时,会自动创建一个活动权限,并在其中填入该帐户的地址。默认的域值是1,键只包含权重为1的帐户地址。 费用1。当你使用更新账户权限,也就是AccountPermissionUpdate契约时,会被收取100TRX。2。使用多签名交易时,即交易包含两个或两个以上签名,除交易成本外还将收取1TRX。3。以上费用可通过提案修改。API修改权限账户权限更新契约,修改权限的步骤如下:1 .使用接口getaccount查询账户,获取原始权限2。修改权限3。签名4。send transactionactive 尚力财经小编2022 authority中运算的计算示例:public static void main(string[]args){//指定要支持的契约id(参见Transaction的定义。proto中的ContractType),有除account permission update contract(ID=46)以外的所有合约。Integer[]?收缩?=?{0,1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,30,31,32,33,41,42,43,44,45};列表列表?=?新的?ArrayList(arrays . aslist(contract id));byte[]?运营?=?新的?字节[32];list.forEach(e?-?{操作[e?/?8]?|=?(1?e?%?8);});//7 fff 1 fc 0037 e 000000000000000000000000000000000000000000000 system . out . println(bytearray . tohexstring(operations));}
执行合同
1。创建事务,与非多重签名事务
2的构造过程相同。指定Permission_id,默认为0,表示owner-permission3。用户A签名并通过其他方式将签名后的交易发送给B。4。用户B签名并通过其他方式将签名后的交易发送给C。…n,最后一个完成签名的用户将向节点广播事务。n 1。验证多个签名的权重之和大于阈值,然后接受交易。否则拒绝交易代码尚力财经小编2022示例:https://github.com/tron协议/wallet-CLI/blob/multi _ sign _ v2/src/main/Java/org/Tron/demo/multisigndemo . Java
其他参见Tron-http.md和波场钱包RPC-API.md
1 .添加签名
卷曲?-X?post http://127 . 0 . 0 . 1:8090/wallet/addtransactionsign?-迪?'{'交易& # 039;'转让合同& # 039;'privateKey & # 039:'permissionkey1 & # 039}'rpc?AddSign?(TransactionSign)?退货?(TransactionExtention)?{}2。查询签约地址
curl?-X?post http://127 . 0 . 0 . 1:8090/wallet/getapprovedlist?-迪?'{'交易& # 039;}'rpc?GetTransactionApprovedList(事务)?退货?(TransactionApprovedList)?{?}3。查询交易签名权重
curl?-X?post http://127 . 0 . 0 . 1:8090/wallet/getsignwight?-迪?'{'交易& # 039;}'rpc?GetTransactionSignWeight?(交易)?退货?(TransactionSignWeight)?{}操作是
& quot;7 fff 1 fc 0037 e 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
标签: 2022