背景 多重签名功能允许权限分级,每个权限可以对应多个私钥。这使得实现账户的多人联合控制成为可能。本指南引导用户完成TRON的多签名实现和设计。 https://github.com/tronprotocol/TIPs/issues/16 概念说明 该方案共包含三种权限级别,owner、witness以及active权限,其中owner权限具有执行所有合约的权限,witness权限用于超级代表出块,active是自定义权限(可以组合权限集合),以下将详细说明。 结构说明 Account修改 在账户结构中新增三个权限属性,分别是 owner_permission、witness_permission 和 active_permission,其中 active_permission 是个列表,可以指定最多8个。 2. ContractType修改 新增一种交易类型 AccountPermissionUpdateContract,用于更新账户权限。 3. AccountPermissionUpdateContract 该接口是覆盖原账户权限,因此,如果只想修改owner权限,witness(如果是witnss账户)及actives的也需要设置。 4. Permission 5. Key 6. Transaction修改 在交易中增加 Permission_id字段,与Permission.id相对应,用于指定使用哪个权限。默认为0,即owner权限。不允许为1,因为witness权限仅用于出块,不用于对交易进行签名。 Owner权限 OwnerPermission是账户的最高权限,用于控制用户的所有权、调整权限结构,Owner权限也可以执行所有合约。 Owner权限具有以下特性: 1. 拥有OwnerPermission的地址可以修改OwnerPermission。 2. 当OwnerPermission为空时,默认采用该账户的地址具有owner权限。 3. 账户新建时,自动将该账户的地址填充到OwnerPermission中,并默认域值为1,keys中仅包含该账户地址且权重为1。 4. 当执行合约时未指定permissionId时, 默认采用OwnerPermission。 Witness权限 超级代表可使用该权限,管理出块节点。非witness账户无该权限。 使用场景示例:一个超级代表在云服务器上部署出块程序,为了账户安全,此时可以将出块权限赋予另一个地址。由于该地址仅具有出块权限,无TRX转出权限,即使该服务器上私钥被泄密,也不会出现TRX丢失。 Witness出块节点的配置: 1. 未修改witness权限时,无需特殊配置。 2. 修改witness权限后的出块节点,需要在重新配置,配置项如下: #config.conf // Optional.The default is empty. // It is used when the witness account has set the witnessPermission. // When it is not empty, the localWitnessAccountAddress represents the address of the witness account, // and the localwitness is configured with the private key of the witnessPermissionAddress in the witness account. // When it is empty,the localwitness is configured with the private key of the witness account. //可选项,默认为空。 //用于当witness账户设置了witnessPermission。 //当该值不为空时,localWitnessAccountAddress代表witness账户的地址,localwitness是witnessPermission中的地址的私钥。 //当该值为空时,localwitness配置为witness账户的私钥。 //localWitnessAccountAddress = localwitness = [ f4df789d3210ac881cb900464dd30409453044d2777060a0c391cbdf4c6a4f57 Active权限 Active权限,用于提供一个权限的组合,比如提供一个只能执行创建账户、转账功能的权限。 Active权限有以下特性: 1.?拥有OwnerPermission的地址可以修改Active权限 2.?拥有执行AccountPermissionUpdateContract权限的地址也能够修改Active权限 3. 最多支持8个组合。 4. permission的id从2开始自动递增。 5. 账户新建时,自动创建一个Active权限,并将该账户的地址填充到其中,默认域值为1,keys中仅包含该账户地址且权重为1。 费用 1. 使用更新账户权限时,即 AccountPermissionUpdate 合约,收取100TRX。 2. 使用多重签名的交易时,即交易中包括两个及两个以上签名的交易,除交易费用外,另收取1TRX。 3. 可通过提议,修改以上费用。 API 修改权限 AccountPermissionUpdateContract,修改权限步骤如下: 1.?使用接口getaccount查询账户,并获取原权限 2.?修改permission 3.?创建合约,签名 4.?发送交易 active权限中operations的计算示例: public static void main(String[] args) { //指定需要支持的合约id(查看proto中Transaction.ContractType定义),这里包含除AccountPermissionUpdateContract(id=46)以外的所有合约 Integer[] contractId = {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}; List<Integer> list = new ArrayList<>(Arrays.asList(contractId)); byte[] operations = new byte[32]; list.forEach(e -> { operations[e / 8] |= (1 << e % 8); }); //7fff1fc0037e0000000000000000000000000000000000000000000000000000 System.out.println(ByteArray.toHexString(operations)); } 执行合约 1、创建交易,与非多重签名交易的构建过程相同 2、指定Permission_id,默认为0,表示owner-permission 3、用户A签名,将签名后交易通过其他方式发送给B。 4、用户B签名,将签名后交易通过其他方式发送给C。 … n、最后一个完成签名的用户,将交易广播到节点。 n+1、验证多重签名的权重之和大于域值则接受交易,否则拒绝交易 代码示例: https://github.com/tronprotocol/wallet-cli/blob/multi_sign_V2/src/main/java/org/tron/demo/MultiSignDemo.java 其他新增接口 接口详细说明,请查看Tron-http.md与波场钱包RPC-API.md 1.增加签名 curl -X POST ?http://127.0.0.1:8090/wallet/addtransactionsign -d '{"transaction": "TransferContract", "privateKey": "permissionkey1"}' rpc AddSign (TransactionSign) returns (TransactionExtention) {} 2.查询已签名地址 curl -X POST ?http://127.0.0.1:8090/wallet/getapprovedlist -d '{"transaction"}' rpc GetTransactionApprovedList(Transaction) returns (TransactionApprovedList) { } 3.查询交易签名权重 curl -X POST ?http://127.0.0.1:8090/wallet/getsignweight -d '{"transaction"}' rpc GetTransactionSignWeight (Transaction) returns (TransactionSignWeight) {} 在创建帐户期间会自动生成所有者权限和活动权限。owner-permission包含一个密钥,权限和阈值均设置为1. active-permission还包含权限和阈值设置为1的密钥。 操作是 “7fff1fc0037e0000000000000000000000000000000000000000000000000000”,这意味着支持除AccountPermissionUpdateContract之外的所有操作。 —- 编译者/作者:波场TRON 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
TRON开发者指南|第五十四期:关于TRON协议—多重签名
2020-03-10 波场TRON 来源:区块链网络
LOADING...
相关阅读:
- 和东北大哥聊密码学终于懂了2020-07-31
- 最早启动、最先回调、又再次爆发领涨的以太坊能否带起第二波行情?2020-07-31
- 58COIN改变背后:为什么是LINK、ADA、ZEC2020-07-31
- defibox你玩了吗?收益率如何?| defi到底有多不安全?| 以eos谈左、右侧2020-07-31
- 我们依然在保持心态冷静的同时,始终认为一切涨跌皆为考验。2020-07-31