风险提示:理性看待区块链,提高风险意识!
波场TRON协议如何设置多重签名?
首页 > 币界资讯 > 区块链知识 2019-05-16 16:57:34

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

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

blob.png

概念说明

该方案共包含三种权限级别,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};
Listlist = 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 POSThttp://127.0.0.1:8090/wallet/addtransactionsign -d 
'{"transaction": "TransferContract", "privateKey": "permissionkey1"}'
rpc AddSign (TransactionSign) returns (TransactionExtention) {}

2.查询已签名地址

curl -X POSThttp://127.0.0.1:8090/wallet/getapprovedlist -d 
'{"transaction"}'
rpc GetTransactionApprovedList(Transaction) returns (TransactionApprovedList) 
{ }

3.查询交易签名权重

curl -X POSThttp://127.0.0.1:8090/wallet/getsignweight -d 
'{"transaction"}'
rpc GetTransactionSignWeight (Transaction) returns (TransactionSignWeight) 
{}

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

操作是

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

上一篇: 波场TRON协议超级代表申请流程与重要作用
下一篇: 关于波场TRON协议账户创建与交易流程
推荐专栏
web3首席知识博主
一位相信价值投资的币圈KOL。稳定盈利的缠论野生交易员 #BTC行情分析师 #价值投资 #链上数据分析
爱Web 3,爱生活,爱科技,爱炒币的老韭菜
热门币种
更多
币种
价格
24H涨跌幅
BTC比特币
¥265,902.86
37,256.43 USDT
+0.45%
ETH以太坊
¥14,471.18
2,027.60 USDT
+0.17%
USDT泰达币
¥7.20
1.01 USDT
-0.01%
BNB币安币
¥1,630.32
228.43 USDT
+0.63%
XRP瑞波币
¥4.36
0.61070 USDT
+1.51%
USDC
¥7.14
1.00 USDT
+0.03%
SOLSolana
¥400.57
56.13 USDT
+1.81%
ADA艾达币
¥2.70
0.37780 USDT
-1.02%
OKBOK币
¥399.11
55.92 USDT
-0.14%
DOGE狗狗币
¥0.55680
0.07802 USDT
-0.83%
热搜币种
更多
币种
价格
24H涨跌幅
Terra Classic
¥0.00
9.625E-5 USDT
-19.02%
Gala
¥0.18
0.025524 USDT
-5.1%
dYdX
¥22.72
3.2118 USDT
-0.29%
比特股
¥0.05
0.006515 USDT
-3.81%
PancakeSwap
¥15.64
2.2106 USDT
-2.19%
Conflux
¥1.09
0.1537 USDT
-1.91%
Filecoin
¥31.61
4.4688 USDT
-0.15%
FTX Token
¥29.39
4.1548 USDT
+15.8%
Yield Guild Games
¥2.56
0.3619 USDT
-0.44%
Shiba Inu
¥0.00
8.16E-6 USDT
-1.81%
比特币
¥263,550.12
37256.43 USDT
+0.45%
波场
¥0.72
0.102 USDT
-2.58%
最新快讯
更多
汇款公司Kalyssi旗下钱包已集成AlchemyPay法币出入金解决方案
2023-11-28 19:26:47
汇丰、恒生、渣打、富邦华一四家外资银行入围首批“数字人民币”业务试点名单
2023-11-28 19:06:57
摩根大通和Apollo计划建立代币化“企业主网”
2023-11-28 19:03:57
Nansen2公测版本上线,新增链上数据异动、智能搜索等功能
2023-11-28 18:59:52
西班牙公民需在明年3月底前申报其海外平台上加密货币持仓
2023-11-28 18:53:43
Nansen2已公开测试
2023-11-28 18:53:38
dYdX基金会:主网启动以来超过1645万DYDX被质押
2023-11-28 18:52:07
下载币界网APP