免责声明:凤梨财经作为开放的信息发布平台,所提供的所有内容与凤梨财经观点和立场无关,且不构成任何投资理财建议。投资有风险,入市需谨慎。

TRON开发者指南 | 第五期:关于TRON协议—多重签名

2019-05-03 阅读量 157
摘要:波场TRON团队为更好地服务社区开发者及建设者,吸引更多强大力量共同建设TRON全球网络生态社区,特制作TRON开发指南,指南将由浅入深为您介绍在波场网络上所遇到的问题和注意事项。


波场TRON|TRON开发者指南

波场TRON团队为更好地服务社区开发者及建设者,吸引更多强大力量共同建设TRON全球网络生态社区,特制作TRON开发指南,指南将由浅入深为您介绍在波场网络上所遇到的问题和注意事项。




欢迎来到

波场TRON开发者指南

 

在这里

您将找到最全面的指南与文档

助力您完美使用

【TRON Developer Hub】

 

背景


多重签名功能允许权限分级,每个权限可以对应多个私钥。这使得实现账户的多人联合控制成为可能。本指南引导用户完成TRON的多签名实现和设计。

https://github.com/tronprotocol/TIPs/issues/16


概念说明


该方案共包含三种权限级别,owner、witness以及active权限,其中owner权限具有执行所有合约的权限,witness权限用于超级代表出块,active是自定义权限(可以组合权限集合),以下将详细说明。

结构说明


1. 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 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  https://127.0.0.1:8090/wallet/addtransactionsign -d '{"transaction": "TransferContract", "privateKey": "permissionkey1"}'

 

rpc AddSign (TransactionSign) returns (TransactionExtention) {}

 

2.查询已签名地址

curl -X POST  https://127.0.0.1:8090/wallet/getapprovedlist -d '{"transaction"}'

rpc GetTransactionApprovedList(Transaction) returns (TransactionApprovedList) { }

 

3.查询交易签名权重

curl -X POST  https://127.0.0.1:8090/wallet/getsignweight -d '{"transaction"}'

rpc GetTransactionSignWeight (Transaction) returns (TransactionSignWeight) {}

 

在创建帐户期间会自动生成所有者权限和活动权限。 owner-permission包含一个密钥,权限和阈值均设置为1. active-permission还包含权限和阈值设置为1的密钥。

操作是

“7fff1fc0037e0000000000000000000000000000000000000000000000000000”,这意味着支持除AccountPermissionUpdateContract之外的所有操作。


- END-


波场TRON创始人及团队介绍

(向上滑动查看内容)



波场TRON以推动互联网去中心化为己任,致力于为去中心化互联网搭建基础设施。旗下的TRON协议是全球最大的基于区块链的去中心化应用操作系统协议之一,为协议上的去中心化应用运行提供高吞吐,高扩展,高可靠性的底层公链支持。波场TRON还通过创新的可插拔智能合约平台为以太坊智能合约提供更好的兼容性。

自2018年7月24日起,TRON收购了位于旧金山的互联网技术公司BitTorrent Inc.。 BitTorrent Inc.设计的分布式技术能够有效扩展,保持智能化,并使创作者和消费者能够控制其内容和数据。 每个月有超过1.7亿人使用BitTorrent Inc.开发的产品。 BitTorrent Inc.的协议每天可以传输全球40%的互联网流量。



孙宇晨,1990年生,美国常青藤盟校宾夕法尼亚大学硕士,北京大学学士。
前Ripple大中华区首席代表,波场TRON创始人,BitTorrent CEO,移动社交应用陪我APP创始人兼CEO。
2011年亚洲周刊封面人物,2014年达沃斯论坛全球杰出青年,2015年福布斯中国30位30岁以下创业者。
2015 CNTV中国互联网年度新锐人物,2015年成为湖畔大学首批学员中唯一90后学员 。
2018年7月24日起,TRON收购了位于旧金山的互联网技术公司BitTorrent Inc.成为BitTorrent Inc. CEO。



波场TRON创始人孙宇晨(Justin Sun)与波场TRON北京办公室平均年龄26岁的108位同事合照展示。目前波场TRON经过近一年的发展,已经快速成为全球增长最为强劲,扩张最为迅速的区块链团队之一,波场TRON团队目前仍然保持着每天发出一个新Offer的节奏,预计2019年年底将突破一千人!



了解波场TRON最新官方动态

(向上滑动查看内容)


官网:https://tron.network


您可关注微博:波场TRON官博

https://weibo.com/u/6344553397


Facebook用户可直接访问:

https://www.facebook.com/TronFoundation-144555002795817/ 


Telegram进行互动可搜索:

中文 https://t.me/tronnetworkCN03
英文 https://t.me/tronnetworkEN03


您可以前往Github了解更多:

https://github.com/tronprotocol


在Twitter上关注@tronfoundation,跟踪最新动态


https://www.reddit.com/r/Tronix/




声明:本文观点仅代表作者本人,不代表凤梨财经赞同或证实其观点描述。如若侵权,请联系我们删除文章。

凤梨小秘书(微信号:fenglicaijing)