比特派下载|波场钱包多重签名

作者: 比特派下载
2024-03-16 03:41:22

波场助手用一文告诉你波宝钱包如何让多人使用多签功能管理一个钱包

波场助手用一文告诉你波宝钱包如何让多人使用多签功能管理一个钱包

资讯快讯专题NFT活动 免责声明: 内容不构成买卖依据,投资有风险,入市需谨慎!

波场助手用一文告诉你波宝钱包如何让多人使用多签功能管理一个钱包

Tronassistant

个人专栏

刚刚

关注

区块链时代,数字货币越来越被大众熟知,管理数字货币的钱包就显得犹为重要了。其功能的多样性和安全性也是用户最关注的。今天给大介绍 一下波宝钱包的多签功能,多签功能是什么?如何多人使用多签功能?

什么是多签功能?

在了解多签之前,先来看一下单签功能。

在加密数字货币领域,一般的交易,比如转账、授权、买卖等行为都需签名,这种理解为单签。因为只需要使用者一个人签名授权即可完成交易。

这就不难理解多签功能了,是指在交易的过程中需要多人完成签名后,该笔交易才能执行成功,否则就会失败。比如张三、李四、王麻子三个人共同管理了一个多签钱包A,张三想从A钱包转1000TRX到B钱包,此时如果李四或王麻子不同意,那张三就无法转走这笔资产。只有在李四、王麻子都同意并签名的情况下,该笔资产才能顺利转出。

也就是说,多重签名机制可以实现多人以不同的权重共同管理数字资产,这给我们带来了更安全的保障方式。

多重签名的3个权限: owner、witness、active

1、owner权限具有执行所有操作的权限

2、witness权限用于超级代表出块

3、active是自定义权限(可以组合权限集合)

每个地址都只能拥有一个owner权限组,最多拥有8个active权限组。witness权限仅超级代表可以使用,一般用户用不到witness。

如何使用多重签名功能?

进入TronLink钱包App,点击底部菜单栏「我的」,再点击「公开账户管理」,进入“钱包详情”页面。或点击TronLink钱包App首页的钱包卡片,也可进入“钱包详情”页面。在“钱包详情”页面,点击「权限管理」。点击右上角「添加」。(最多可添加8个权限组)分别设置此权限组的名称、权限、阈值、地址及权重后,点击「确定」。需注意:1)不同地址的权重之和须大于等于阈值2)添加的地址可以包含本账户地址也可不包含 在确认交易弹层点击「确认」,然后输入钱包密码后再次点击「确认」。当界面出现“提交成功”时,即权限组设置成功。举例:主账户地址设置为A,第二个添加地址设置为B。我们以权限组“test”内已添加的地址B的转账为例,为大家演示。1.点击「转账」按钮,再点击右上角「多重签名转账」,打开B地址的多签转账功能。2.输入控制账户地址,即A钱包地址,点击「下一步」。3.输入接收地址,点击「下一步」。4.选择转账币种并输入转账数量,点击「转账」。5.点击「确认」,并在确认交易弹窗中点击「确认」,输入B地址密码,进入“多重签名设置”页面。6. 在“多重签名设置”页面点击「确认」,即完成了A地址转账行为的签名。7.您可在多签交易记录里查看详情。 收到别人的签名邀请:1.由以上操作可以看出,B地址已完成它的签名操作,接下来需要A地址也进行签名,以最终完成这笔交易的确认。我们需要进入A地址的钱包页面,可以看到提示:“有1笔交易等待您的签名”,点击「立即前往」。2.如下图所示,点击「签名」。3.点击「确认」,并输入A的钱包密码然后再次点击「确认」。4.这笔需要由A和B共同签名确认的转账交易就完成啦,您可在多签交易记录中查看详情。关于手续费:1、目前设置或更改多签功能,需支付大约100trx和500带宽。2、每次签名按正常调用合约地址带宽和能量收费。 5 好文章,需要你的鼓励

了解更多区块链一线报道,与作者、读者更深入探讨、交流,欢迎添加小助手QQ:

3150128700,

进入[金色财经读者交流群]。

声明:本文系金色财经原创稿件,版权属金色财经所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:金色财经",违者将依法追究责任。

本文作者: Tronassistant

打开金色财经App 阅读全文

打开金色财经,阅读体验更佳

金色财经 > Tronassistant > 波场助手用一文告诉你波宝钱包如何让多人使用多签功能管理一个钱包

免责声明: 金色财经作为开放的资讯分享平台,所提供的所有资讯仅代表作者个人观点,与金色财经平台立场无关,且不构成任何投资理财建议。

桌面站点 APP下载 风险 提示

防范以“虚拟货币”“区块链”名义进行非法集资的风险

— 银保监会等五部门 粤ICP备2022148396号-1 Copyright © 金色财经 版权所有 点击右上角选择在浏览器打开~

波场多重签名的实现 - 知乎

波场多重签名的实现 - 知乎切换模式写文章登录/注册波场多重签名的实现波场核心开发团队波场核心开发者团队加密货币网络上的标准交易可称之为单签名交易,因为交易执行只需要一个数字签名。多重签名机制中的交易需要多个签名,给每个签名分配一个权重,交易的签名总权重必须达到预先确定的权重阈值该交易才可执行。通过多重签名,一个账户可以被多几个私钥管理,这个账户创建的交易需要被几个私钥签名后才可执行。本文档讨论多重签名操作权限的细节,以及如何在多重签名中执行用户自定义的操作权限。背景介绍多重签名包括3种权限:owner-permission、witness-permission和active-permission。owner-permission可以执行所有的交易或合约,witness-permission用于产块,active-permission是定制化的权限,是合约权限集的组合。来看以下几种场景:Alice 开了一家公司,创建了一个公司资金账户,然后把她自己和账户维护者Bob、首席财务官Carlo添加到该账户的owner-permission中。Bob的签名权重是2,Carlo的签名权重是2,Alice是5,owner-permission签名的权重是3。对于某个交易,由于Alice的签名权重比阈值3要大,所以她的单个签名就可以让交易执行。Bob的签名权重比阈值要小,他需要Carol或者Alice的签名才能实现交易;如果Carol同意,总的签名权重就是2+2>3,交易就可以执行。Alice有很多TRX资产,她是唯一持有账户私钥的人。某一天,Alice由于交通事故不幸去世了;她的所有资产永远冻结在账户里,任何人都无法得到它。假设现在账户支持多重签名,Alice预先给她的账户创建了active-permission,把她的丈夫、儿子的地址加入到active-permission中,给予active-permission操作账户的权限。就算Alice某一天去世了,她的家人也可以操作她的账户。Alice 开了一家公司,给自己创建了一个商业账户,然后把她自己和账户维护者Bob、首席财务官Carlo添加到该账户的active-permission中。Alice授权active-permission操作该商业账户。某一天,Bob辞职了。为了维护账户安全,Alice可以把Bob从active-permission中移除,那么Bob再也不能操作她的账户了。Alice有一个witness账户,如果她想把程序部署到一个node上,但是不知道如何部署,以前她不得不把账户的私钥提供给程序管理员。假设现在账户支持多重签名,她可以witness权限授权给管理员。由于这个管理员只有产块权限,没有TRX转账权限,所以即使该管理员在服务器上的私钥被丢失,账户里的TRX也不会丢失。多重签名机制可以避免以上的缺陷,目标在于: 支持账户访问权限控制 一个账户可以被多个私钥控制,即使某个私钥丢失也不会账户资产损失协议细节首先看下多重签名的协议设计。protocol中相关的结构体包括: Account Permission Key TransactionAccountmessage Account {

...

Permission owner_permission = 31;

Permission witness_permission = 32;

repeated Permission active_permission = 33;

}账户权限包括三种角色:owner、witness和active。Owner permission可以执行所有的合约,witness permission用于超级代表(SR),active permission包含一组选择执行权限的集合。Account中相关的属性字段分别是owner_permission、witness_permission和active_permission。active_permission是一个数组,长度必须小于等于8。Permissionmessage Permission {

enum PermissionType {

Owner = 0;

Witness = 1;

Active = 2;

}

PermissionType type = 1;

int32 id = 2;

string permission_name = 3;

int64 threshold = 4;

int32 parent_id = 5;

bytes operations = 6;

repeated Key keys = 7;

}成员变量operations的每个比特,1表示true,0表示false,最多支持256种不同的交易或合约。索引序号对应Transaction.ContractType中的定义(下文稍后提到)。例如,operations=0x0100...00(16进制) or 100...0(二进制),仅首位为1,而AccountCreateContract在Transaction.ContractType中的id为0,意味着这个permisson只有执行AccountCreateContract合约的权限。假如operations=0x7f ff 1f c0 03 3e 03 ...(16进制) or 11111110 11111111 11111000 00000011 11000000 01111100 11000000 ...(二进制),第47个比特是0,意味着这个permission不允许执行AccountPermissionUpdateContract类型的合约。因为如下文所示,AccountPermissionUpdateContract的ContractType是46(从0开始计算)。operations的16进制序列是小端编码的,但是对于每个字节,是二进制比特的大端编码。比如这个例子,首个字节是7f,对应二进制编码的1111,1110;第三个字节是1f,对应二进制编码是1111,1000。Keymessage Key {

bytes address = 1;

int64 weight = 2;

}address: 账户地址 weight: 签名权重ContractTypemessage Transaction {

message Contract {

enum ContractType {

AccountCreateContract = 0;

...

AccountPermissionUpdateContract = 46;

...

}

}

ContractType type = 1;

...

int32 Permission_id = 5;

}Transaction结构体中的Permission_id字段对应Permission结构体中的id字段。Owner PermissionOwner permission是一个账户的最高级权限,用于控制账户的归属、调整权限结构。Owner permission有权执行所有的合约。Owner permission的特征包括:拥有owner permission的账户可以修改owner permission当owner permission为null时,账户的默认owner拥有owner permission当你创建一个新账户,地址会被自动插入到owner permission中,默认权重是1;字段keys仅包含这个地址,并且字段weight权重的值也是1。当合约被执行时而Permission_id没有指定,默认使用owner permissionWitness Permission超级代表(SR)利用这个权限来管理产块。当且仅当witness账户拥有这个权限。 看看以下这个场景: 一个超级代表在一个云服务器上部署了一个witness节点,为了保持云服务器上的账号的安全,你可以仅仅给与云上服务器账号一个产块权限。由于这个账户仅仅有产块权限,没有TRX转账权限,所以,即使云上服务器上的账号的密钥被泄露,TRX资产也不会丢失。 Witness节点配置: 如果不使用witness权限,没必要配置这一项 如果使用了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.

//localWitnessAccountAddress =

localwitness = [

f4df789d3210ac881cb900464dd30409453044d2777060a0c391cbdf4c6a4f57

]Active PermissionActive permission 由一系列合约执行权限组成,比如创建账户、转账函数,等等。Active permission 特征:拥有owner permission的账户可以修改active permission 拥有AccountPermissionUpdateContract合约执行权限的账户也可以修改active permission - actives最多包含8个active permission permission_id自动从2开始递增 当一个账户被创建后,一个active permission自动被创建,账户地址被插入进去,默认权重是1;字段keys仅包含这个地址,并且weight是1。FeeAccountPermissionUpdateContract消耗100个TRX。如果一个交易包含2个或以上的签名,那么交易费消耗一个额外的TRX。费用可以通过议案来修改。修改权限如果一个账户拥有AccountPermissionUpdateContract权限,那么可以通过以下步骤来修改权限: 调用getaccount 接口来查询原始的permission。通过AccountPermissionUpdateContract交易来修改权限。例如:http://{host}:{port}/wallet/accountpermissionupdate

{

"owner_address": "41ffa9466d5bf6bb6b7e4ab6ef2b1cb9f1f41f9700",

"owner": {

"type": 0,

"id": 0,

"permission_name": "owner",

"threshold": 2,

"keys": [

{

"address": "41ffa9466d5bf6bb6b7e4ab6ef2b1cb9f1f41f9700",

"weight": 1

},

{

"address": "{account_1}",

"weight": 1

},

{

"address": "{account_2}",

"weight": 1

}

]

},

"witness": {

"type": 1,

"id": 1,

"permission_name": "witness",

"threshold": 1,

"keys": [

{

"address": "41F08012B4881C320EB40B80F1228731898824E09D",

"weight": 1

}

]

},

"actives": [

{

"type": 2,

"id": 2,

"permission_name": "active0",

"threshold": 2,

"operations": "7fff1fc0037e0000000000000000000000000000000000000000000000000000",

"keys": [

{

"address": "{account_3}",

"weight": 1

},

{

"address": "{account_4}",

"weight": 1

},

{

"address": "{account_5}",

"weight": 1

}

]

},

{

"type": 2,

"id": 3,

"permission_name": "active1",

"threshold": 3,

"operations": "7fff1fc0037e0000000000000000000000000000000000000000000000000000",

"keys": [

{

"address": "{account_6}",

"weight": 1

},

{

"address": "{account_7}",

"weight": 1

},

{

"address": "{account_8}",

"weight": 1

}

]

}

]

}账户41ffa9466d5bf6bb6b7e4ab6ef2b1cb9f1f41f9700 把owner权限授予自己和account_1、account_2,使用id=0; 给 41F08012B4881C320EB40B80F1228731898824E09D 授予witness权限,使用id=1; 授予active权限给account_3、account_4、account_5,使用id=2,名字是active0;授予active权限给account_6、account_7、account_8,使用id=3,名字是active1; active0权限至少需要来自2个账户的签名使之生效,active1权限至少需要来自3个账户的签名使之生效。3. 创建此AccountPermissionUpdateContract交易并签名。 4. 广播此交易。如何使用API来使用多重签名假设有5个账户owner、active1、active2、active3、receiver。第一个账户owner有5000个trx,给第五个账户receiver发1000个TRX,该交易需要第2、3、4个人中的至少2人签名才能成交。2. owner创建更新账户权限类型的交易。47.252.84.158:8090是某个测试节点fullnode的ip及http服务端口# curl -X POST http://47.252.84.158:8090/wallet/accountpermissionupdate

{

"owner_address" : "41AF498B43EE098B26926798CFEAE1AB1154EF4430",

"owner": {

"type": 0,

"id": 0,

"permission_name": "owner",

"threshold": 1,

"keys": [

{

"address": "41AF498B43EE098B26926798CFEAE1AB1154EF4430",

"weight": 1

}

]

},

"actives": [

{

"type": 2,

"id": 2,

"permission_name": "active1",

"threshold": 2,

"operations": "7fff1fc0033e0000000000000000000000000000000000000000000000000000",

"keys": [

{

"address": "41A6D58DCB0E0FC0C3FE23CC405D5BD7979E9016FB",

"weight": 1

},

{

"address": "41F04DC975557388CD5D5FBCAAA706D76AAD415E59",

"weight": 1

},

{

"address": "41CC187927EB7D648D779FE363F7915DDCFBF2212B",

"weight": 1

}

]

}

]

}得到json类型的response,称之为${result_2}。3. owner利用自己的私钥对交易签名# curl -X POST http://47.252.84.158:8090/wallet/gettransactionsign

{

"transaction" :${result_2} ,

"privateKey": "1bb32958909299db452d3c9bbfd15fd745160d63e4985357874ee57708435a00"

}得到json类型的response,称之为${result_3}。4. owner广播该交易# curl -X POST http://47.252.84.158:8090/wallet/broadcasttransaction

${result_3}.5. 任何人创建从owner到receiver的转账交易,指定Permission_id为2;# curl -X POST http://47.252.84.158:8090/wallet/createtransaction

{

"owner_address": "41AF498B43EE098B26926798CFEAE1AB1154EF4430",

"to_address": "41CA6E0F4BC55CFEC286B3E2F3CB45CBAC87792B78",

"amount": 1000,

"Permission_id" : 2

}得到json类型的response,称之为${result_5},把结果${result_5}作为字符串发送给用户active1;6. 用户active1用自己的私钥对接收到的交易进行签名;# curl -X POST http://47.252.84.158:8090/wallet/gettransactionsign

{

"transaction" : ${result_5},

"privateKey": "1bb32958909299db452d3c9bbfd15fd745160d63e4985357874ee57708435a11"

}得到json类型的response,称之为${result_6},把结果${result_6}作为字符串发送给用户active2;7. 用户active2用自己的私钥对接收到的交易签名;curl -X POST http://47.252.84.158:8090/wallet/gettransactionsign

{

"transaction" : ${result_6},

"privateKey": "1bb32958909299db452d3c9bbfd15fd745160d63e4985357874ee57708435a22"

}得到json类型的response,称之为${result_7}。8. 用户active2广播交易# curl -X POST http://47.252.84.158:8090/wallet/broadcasttransaction

${result_7}.9. 任何人都可以查询接收者(reveiver)账户的余额,来验证交易是否成功执行:# curl -X POST http://47.252.84.158:8090/wallet/getaccount

{

"address": "41CA6E0F4BC55CFEC286B3E2F3CB45CBAC87792B78"

}结论通过多重签名操作权限,我们可以更灵活地加强账户的权限控制,满足账户管理的不同需求。参考资料https://github.com/tronprotocol/tips/issues/105https://github.com/tronprotocol/tips/blob/master/tip-16.mdhttps://github.com/tronprotocol/wallet-cli#How-to-use-the-multi-signature-feature-of-wallet-cli关于我们我们是波场公链核心开发者团队,致力于依托区块链技术打造下一代分布式计算平台,如果您想持续了解我们并获取技术支持,请关注我们的公众号:波场核心开发团队关于波场公链波场公链代码仓库: https://github.com/tronprotocol/java-tron波场开发者电报群: https://t.me/troncoredevscommunity编辑于 2021-10-13 10:42区块链(Blockchain)波场(TRON)密码学​赞同 2​​2 条评论​分享​喜欢​收藏​申请

波场“多签”骗局科普、防骗指南 - 知乎

波场“多签”骗局科普、防骗指南 - 知乎切换模式写文章登录/注册波场“多签”骗局科普、防骗指南链侦科技近期链侦科技收到了很多用户钱包里的数字资产无法转账的现象,经我们团队调查后,这些用户钱包是被“多签”了,基本都发生在波场链上,甚至不少用户损失了十几万美金的数字资产。针对“多签”问题有必要做一期相关科普,让大家知道“多签”到底是什么?大家的钱包账户是如何被“多签”的,以及最重要的钱包防护策略。一、什么是“多签”相关多签案件基本都是集中在波场区块链上,我们就以波场多签为例。波场(TRON)的多重签名机制是一种安全措施,通过设置阈值和权重来限制特定的操作,只能在多个签名方的共同确认下才能执行。在波场多签机制中,阈值是指多少个签名方需要确认才能执行特定的操作。例如阈值为 2,那么在执行特定操作时至少需要签名方权重大于等于阈值才进行确认。阈值可以在多签合约中进行设置,根据具体需求进行调整。权重是指每个签名方的权重大小,它可以决定每个签名方在多签操作中所占比例。例如,如果设置了阈值为2,两个签名方权重为 1,那么在执行特定操作时,需要两个拥有权重为 1 的签名方的确认才可以生效。权重的设置需要在合约中进行设置,并且必须满足所有签名方权重之和大于等于总权重的要求。通过设置阈值和权重,波场多签机制可以提高合约的安全性,防止合约被未经授权的操作所篡改或者被攻击者利用进行恶意操作。通俗易懂的讲,本来钱包账户由一个私钥来控制,但单一私钥控制又会带来一些安全风险,比如A用户的钱包私钥被盗,那么钱包所有的资产都将被盗走,而多签就是引入多个私钥来控制。比如引入2个私钥共同控制A钱包账户,只有2组私钥全部同意才能从A钱包账户中提取资产,如此就大大增强了数字资产安全性,你可以引入3组私钥来共同控制,到达了阈值才能提取资产,这就是多签的原理多签本来是为了增强钱包安全性,但对于刚踏入加密世界的新人们而言,多签反而成了一个极易上当的陷阱,被骗子精心利用后会成为其盗取资产的工具。二、被“多签”的主要被骗场景1、恶心的第三方链接用户有时候会被第三方链接所吸引,比如低价购买某些服务,当用户使用他们的链接进行充值时,就会调用恶意更改权限的代码,当用户确认并输入密码签名后,地址的权限便发生了变更。现在市场上大部分钱包都会提示相关风险,阻止你最后一步,但总有一些大意的用户还是完成了最后一步确认,最终失去了钱包中数字资产的控制权2、冒牌网站的假钱包假钱包导致被“多签”的案例最多,比如链侦科技最近收到一些用户案例,都是因为下载了假钱包导致了被多签。很多新人用户在下载钱包的渠道上会使用百度搜索,而百度上排名靠前的相关钱包很多并不是官方钱包,但名称、Logo,甚至网址都高度相似。用户下载这些钱包后,并不会发现异常,操作使用的时候完全跟正常钱包一模一样,直到自己向该钱包地址充币后在转账才发现数字资产根本无法转移。因为用户下载的钱包根本不是官方钱包,骗子直接可以获取用户的私钥信息,强行添加骗子的多签地址,从而彻底控制用户钱包资产。3、钓鱼泄露私钥套路有些骗子故意到处泄露自己的钱包私钥,然后用户一查链上资产,发现该地址有大量的数字资产,却没有相关区块链的Gas代币,比如波场区块链的TRX,而转账却需要TRX来作为手续费。很多用户以为自己捡到宝了,飞来一笔横财,一旦用户向该地址充入TRX作为手续费后,兴高采烈准备的提币走人时才发现根本转不出去,白白损失了手续费。其实骗子故意泄露给你的钱包私钥,早就被骗子多签了,控制权始终在骗子手中。三、如何有效防止被“多签”1、不要被一些第三方链接所吸引,即使你被成功勾引了,大部分钱包在最后一步“权限升级”时会跳出风险提示,这个时候就必须及时收手,万不可大意,抱有侥幸心理。2、一定不要使用百度去搜索数字资产钱包,这里是踩坑最多的地方,我们建议新人用户去询问相关老用户,经过多方确认这是官方钱包后才能下载,不然骗子们早就在互联网中编织好一张网等着你。3、不要相信任何天上掉馅饼的事,天上只会掉下来一个个骗局,少一点贪心,就足以免疫大部分骗局最后如果你已经被“多签”骗局所害,可以及时联系我们链侦科技,我们有丰富的链上资产追查业务经验和区块链安全技术人员,以及整套的法律、执法协作。发布于 2023-09-18 14:56・IP 属地湖北防骗防诈骗指南防骗指南​赞同 1​​6 条评论​分享​喜欢​收藏​申请

Just a moment...

a moment...Enable JavaScript and cookies to conti

Just a moment...

a moment...Enable JavaScript and cookies to contiyload":{"allShortcutsEnabled":false,"fileTree":{"中文文档/波场协议":{"items":[{"name":"交易操作类型说明.md","path":"中文文档/波场协议/交易操作类型说明.md","contentType":"file"},{"name":"交易明细.md","path":"中文文档/波场协议/交易明细.md","contentType":"file"},{"name":"交易简介.md","path":"中文文档/波场协议/交易简介.md","contentType":"file"},{"name":"冻结与投票.md","path":"中文文档/波场协议/冻结与投票.md","contentType":"file"},{"name":"创建账户.md","path":"中文文档/波场协议/创建账户.md","contentType":"file"},{"name":"多重签名.md","path":"中文文档/波场协议/多重签名.md","contentType":"file"},{"name":"波场去中心化交易所.md","path":"中文文档/波场协议/波场去中心化交易所.md","contentType":"file"},{"name":"波场费用模型.md","path":"中文文档/波场协议/波场费用模型.md","contentType":"file"},{"name":"波场通证.md","path":"中文文档/波场协议/波场通证.md","contentType":"file"},{"name":"波场钱包RPC-API.md","path":"中文文档/波场协议/波场钱包RPC-API.md","contentType":"file"},{"name":"超级代表与委员会.md","path":"中文文档/波场协议/超级代表与委员会.md","contentType":"file"},{"name":"转让波场币及TRC10接口说明.md","path":"中文文档/波场协议/转让波场币及TRC10接口说明.md","contentType":"file"}],"totalCount":12},"中文文档":{"items":[{"name":"Android钱包","path":"中文文档/Android钱包","contentType":"directory"},{"name":"常见问题解答","path":"中文文档/常见问题解答","contentType":"directory"},{"name":"波场介绍","path":"中文文档/波场介绍","contentType":"directory"},{"name":"波场区块链浏览器介绍","path":"中文文档/波场区块链浏览器介绍","contentType":"directory"},{"name":"波场协议","path":"中文文档/波场协议","contentType":"directory"},{"name":"波场编程大赛","path":"中文文档/波场编程大赛","contentType":"directory"},{"name":"测试环境搭建","path":"中文文档/测试环境搭建","contentType":"directory"},{"name":"虚拟机","path":"中文文档/虚拟机","contentType":"directory"},{"name":"交易签名流程.md","path":"中文文档/交易签名流程.md","contentType":"file"},{"name":"术语表.md","path":"中文文档/术语表.md","contentType":"file"},{"name":"波场创业者基金.md","path":"中文文档/波场创业者基金.md","contentType":"file"},{"name":"钱包测试用例.numbers","path":"中文文档/钱包测试用例.numbers","contentType":"file"}],"totalCount":12},"":{"items":[{"name":"English_Documentation","path":"English_Documentation","contentType":"directory"},{"name":"TRX","path":"TRX","contentType":"directory"},{"name":"TRX_CN","path":"TRX_CN","contentType":"directory"},{"name":"images","path":"images","contentType":"directory"},{"name":"中文文档","path":"中文文档","contentType":"directory"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"viltis","path":"viltis","contentType":"file"}],"totalCount":9}},"fileTreeProcessingTime":9.807355,"foldersToFetch":[],"repo":{"id":126433683,"defaultBranch":"master","name":"documentation","ownerLogin":"tronprotocol","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2018-03-23T04:38:06.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/34857411?v=4","public":true,"private":false,"isOrgOwned":true},"symbolsExpanded":false,"treeExpanded":true,"refInfo":{"name":"master","listCacheKey":"v0:1584434331.0","canEdit":false,"refType":"branch","currentOid":"6968927f096a3e4c8a97ad5fe4497e2b511c5361"},"path":"中文文档/波场协议/多重签名.md","currentUser":null,"blob":{"rawLines":null,"stylingDirectives":null,"colorizedLines":null,"csv":null,"csvError":null,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/tronprotocol/documentation/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"多重签名.md","displayUrl":"https://github.com/tronprotocol/Documentation/blob/master/%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3/%E6%B3%A2%E5%9C%BA%E5%8D%8F%E8%AE%AE/%E5%A4%9A%E9%87%8D%E7%AD%BE%E5%90%8D.md?raw=true","headerInfo":{"blobSize":"11.2 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"9fdda9d","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Ftronprotocol%2FDocumentation%2Fblob%2Fmaster%2F%25E4%25B8%25AD%25E6%2596%2587%25E6%2596%2587%25E6%25A1%25A3%2F%25E6%25B3%25A2%25E5%259C%25BA%25E5%258D%258F%25E8%25AE%25AE%2F%25E5%25A4%259A%25E9%2587%258D%25E7%25AD%25BE%25E5%2590%258D.md","isCSV":false,"isRichtext":true,"toc":[{"level":1,"text":"多重签名","anchor":"多重签名","htmlText":"多重签名"},{"level":2,"text":"1.背景","anchor":"1背景","htmlText":"1.背景"},{"level":2,"text":"2.概念说明","anchor":"2概念说明","htmlText":"2.概念说明"},{"level":2,"text":"2.1 结构说明","anchor":"21-结构说明","htmlText":"2.1 结构说明"},{"level":2,"text":"2.2 Owner权限","anchor":"22-owner权限","htmlText":"2.2 Owner权限"},{"level":2,"text":"2.3 Witness权限","anchor":"23-witness权限","htmlText":"2.3 Witness权限"},{"level":2,"text":"2.4 Active权限","anchor":"24-active权限","htmlText":"2.4 Active权限"},{"level":2,"text":"2.5 费用","anchor":"25-费用","htmlText":"2.5 费用"},{"level":2,"text":"3.API","anchor":"3api","htmlText":"3.API"},{"level":2,"text":"3.1 修改权限","anchor":"31-修改权限","htmlText":"3.1 修改权限"},{"level":2,"text":"3.2 执行合约","anchor":"32-执行合约","htmlText":"3.2 执行合约"},{"level":2,"text":"3.3 其他新增接口","anchor":"33-其他新增接口","htmlText":"3.3 其他新增接口"},{"level":2,"text":"4.其他","anchor":"4其他","htmlText":"4.其他"}],"lineInfo":{"truncatedLoc":"325","truncatedSloc":"243"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"issueTemplate":null,"discussionTemplate":null,"language":"Markdown","languageID":222,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/tronprotocol/Documentation/blob/master/%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3/%E6%B3%A2%E5%9C%BA%E5%8D%8F%E8%AE%AE/%E5%A4%9A%E9%87%8D%E7%AD%BE%E5%90%8D.md","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/tronprotocol/documentation/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/tronprotocol/Documentation/raw/master/%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3/%E6%B3%A2%E5%9C%BA%E5%8D%8F%E8%AE%AE/%E5%A4%9A%E9%87%8D%E7%AD%BE%E5%90%8D.md","renderImageOrRaw":false,"richText":"多重签名\n1.背景 \n2.概念说明 \n2.1 结构说明 \n2.2 Owner权限\n2.3 Witness权限\n2.4 Active权限\n2.5 费用\n3.API \n3.1 修改权限\n3.2 执行合约\n4.其他\n1.背景\n注意:V3.5版本后支持\n目前TRON的所有交易签名,都是用的同一个私钥完成。没有权限分级,也不能实现多人共同控制账户。因此,设计并实现多重签名功能,每个权限可以对应多个私钥。\ntronprotocol/tips#16\n2.概念说明\n该方案共包含三种权限级别,owner、witness以及active权限,其中owner权限具有执行所有合约的权限,witness权限用于超级代表出块,active是自定义权限(可以组合权限集合),以下将详细说明。\n2.1 结构说明\n1. Account修改\n message Account { \n ... \n Permission owner_permission = 31;\n Permission witness_permission = 32;\n repeated Permission active_permission = 33;\n }\n\n在账户结构中新增三个权限属性,分别是 owner_permission、witness_permission 和 active_permission,其中 active_permission 是个列表,可以指定最多8个。\n2. ContractType修改\n message Transaction {\n message Contract {\n enum ContractType { \n AccountCreateContract = 0; \n ... \n AccountPermissionUpdateContract = 46; \n }\n } \n }\n }\n\n新增一种交易类型 AccountPermissionUpdateContract,用于更新账户权限。\n3. AccountPermissionUpdateContract\n message AccountPermissionUpdateContract {\n bytes owner_address = 1;\n Permission owner = 2; \n Permission witness = 3; \n repeated Permission actives = 4; \n }\n\nAccountPermissionUpdateContract\nowner_address:待修改权限的账户的地址\nowner:修改后的 owner 权限\nwitness:修改后的 witness 权限(如果是 witness )\nactives:修改后的 actives 权限\n该接口是覆盖原账户权限,因此,如果只想修改owner权限,witness(如果是witnss账户)及actives的也需要设置。\n4. Permission\n message Permission {\n enum PermissionType {\n Owner = 0;\n Witness = 1;\n Active = 2;\n }\n PermissionType type = 1; \n int32 id = 2; \n string permission_name = 3;\n int64 threshold = 4;\n int32 parent_id = 5; \n bytes operations = 6; \n repeated Key keys = 7;// \n }\n\nPermissionType: 权限类型,目前仅支持三种权限\nid: 值由系统自动设置,Owner id=0, Witness id=1, Active id 从2开始递增分配。在执行合约时,\n通过该id来指定使用哪个权限,如使用owner权限,即将id设置为0。\npermission_name: 权限名称,由用户设定,长度限制为32字节\nthreshold: 阈值,只有当参与签名的权重之和超过域值才允许做相应的操作。要求小于Long类型的最大值\nparent_id:目前只能为0 \noperations:共32字节(256位),每位代表一个合约的权限,为1时表示拥有该合约的权限。\n如operations=0x0100...00(十六进制),即100...0(二进制)时,查看proto中Transaction.ContractType定义,合约AccountCreateContract的id为0,\n即表示该permission只拥有执行AccountCreateContract的权限,可以使用\"active权限中operations的计算示例\"计算获得。\nkeys:共同拥有该权限的地址及权重,最多允许5个key。\n5. Key\n message Key {\n bytes address = 1;\n int64 weight = 2;\n }\n\naddress:拥有该权限的地址\nweight:该地址对该权限拥有权重\n6. Transaction修改\n message Transaction {\n ...\n int32 Permission_id = 5;\n }\n\n在交易中增加 Permission_id字段,与Permission.id相对应,用于指定使用哪个权限。默认为0,即owner权限。\n不允许为1,因为witness权限仅用于出块,不用于对交易进行签名。\n2.2 Owner权限\nOwnerPermission是账户的最高权限,用于控制用户的所有权、调整权限结构,Owner权限也可以执行所有合约。\nOwner权限具有以下特性:\n1、拥有OwnerPermission的地址可以修改OwnerPermission。\n2、当OwnerPermission为空时,默认采用该账户的地址具有owner权限。\n3、账户新建时,自动将该账户的地址填充到OwnerPermission中,并默认域值为1,keys中仅包含该账户地址且权重为1。\n4、当执行合约时未指定permissionId时, 默认采用OwnerPermission。\n2.3 Witness权限\n超级代表可使用该权限,管理出块节点。非witness账户无该权限。\n使用场景示例:一个超级代表在云服务器上部署出块程序,为了账户安全,此时可以将出块权限赋予另一个地址。由于该地址仅具有出块权限,无TRX转出权限,即使该服务器上私钥被泄密,也不会出现TRX丢失。\nWitness出块节点的配置:\n1、未修改witness权限时,无需特殊配置。\n2、修改witness权限后的出块节点,需要在重新配置,配置项如下:\n#config.conf\n\n// Optional.The default is empty.\n// It is used when the witness account has set the witnessPermission.\n// When it is not empty, the localWitnessAccountAddress represents the address of the witness account,\n// and the localwitness is configured with the private key of the witnessPermissionAddress in the witness account.\n// When it is empty,the localwitness is configured with the private key of the witness account.\n//可选项,默认为空。\n//用于当witness账户设置了witnessPermission。\n//当该值不为空时,localWitnessAccountAddress代表witness账户的地址,localwitness是witnessPermission中的地址的私钥。\n//当该值为空时,localwitness配置为witness账户的私钥。\n\n//localWitnessAccountAddress =\n\nlocalwitness = [\n f4df789d3210ac881cb900464dd30409453044d2777060a0c391cbdf4c6a4f57\n]\n\n\n2.4 Active权限\nActive权限,用于提供一个权限的组合,比如提供一个只能执行创建账户、转账功能的权限。\nActive权限有以下特性:\n1、拥有OwnerPermission的地址可以修改Active权限\n2、拥有执行AccountPermissionUpdateContract权限的地址也能够修改Active权限\n3、最多支持8个组合。\n4、permission的id从2开始自动递增。\n5、账户新建时,自动创建一个Active权限,并将该账户的地址填充到其中,默认域值为1,keys中仅包含该账户地址且权重为1。\n2.5 费用\n1、使用更新账户权限时,即 AccountPermissionUpdate 合约,收取100TRX。\n2、使用多重签名的交易时,即交易中包括两个及两个以上签名的交易,除交易费用外,另收取1TRX。\n3、可通过提议,修改以上费用。\n3.API\n3.1 修改权限\nAccountPermissionUpdateContract,修改权限步骤如下:\n1、使用接口getaccount查询账户,并获取原权限\n2、修改permission\n3、创建合约,签名\n4、发送交易\nhttp-demo\nhttp://{{host}}:{{port}}/wallet/accountpermissionupdate\n\n\n{\n \"owner_address\": \"41ffa9466d5bf6bb6b7e4ab6ef2b1cb9f1f41f9700\",\n \"owner\": {\n \"type\": 0,\n \"permission_name\": \"owner\",\n \"threshold\": 2,\n \"keys\": [{\n \"address\": \"41F08012B4881C320EB40B80F1228731898824E09D\",\n \"weight\": 1\n },\n {\n \"address\": \"41DF309FEF25B311E7895562BD9E11AAB2A58816D2\",\n \"weight\": 1\n },\n {\n \"address\": \"41BB7322198D273E39B940A5A4C955CB7199A0CDEE\",\n \"weight\": 1\n }\n ]\n },\n \"witness\": {\n \"type\": 1,\n \"permission_name\": \"witness\",\n \"threshold\": 1,\n \"keys\": [{\n \"address\": \"41F08012B4881C320EB40B80F1228731898824E09D\",\n \"weight\": 1\n } \n ]\n },\n \"actives\": [{\n \"type\": 2,\n \"permission_name\": \"active0\",\n \"threshold\": 3,\n \"operations\": \"7fff1fc0037e0000000000000000000000000000000000000000000000000000\",\n \"keys\": [{\n \"address\": \"41F08012B4881C320EB40B80F1228731898824E09D\",\n \"weight\": 1\n },\n {\n \"address\": \"41DF309FEF25B311E7895562BD9E11AAB2A58816D2\",\n \"weight\": 1\n },\n {\n \"address\": \"41BB7322198D273E39B940A5A4C955CB7199A0CDEE\",\n \"weight\": 1\n }\n ]\n }]\n}\n\n参数字段的定义及限制,请查看\"2.1 结构说明\"。\n\n\nactive权限中operations的计算示例\npublic static void main(String[] args) {\n\n //指定需要支持的合约id(查看proto中Transaction.ContractType定义),这里包含除AccountPermissionUpdateContract(id=46)以外的所有合约 \n Integer[] contractId = {0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 30, 31,\n 32, 33, 41, 42, 43, 44, 45};\n List list = new ArrayList<>(Arrays.asList(contractId)); \n byte[] operations = new byte[32];\n list.forEach(e -> {\n operations[e / 8] |= (1 << e % 8);\n });\n \n //7fff1fc0037e0000000000000000000000000000000000000000000000000000\n System.out.println(ByteArray.toHexString(operations));\n}\n3.2 执行合约\n1、创建交易,与非多重签名交易的构建过程相同\n2、指定Permission_id,默认为0,表示owner-permission, demo见https://github.com/tronprotocol/wallet-cli/commit/ff9122f2236f1ce19cbb9ba9f0494c8923a3d10c#diff-a63fa7484f62fe1d8fb27276c991a4e3R211 \n3、用户A签名,将签名后交易通过其他方式发送给B。\n4、用户B签名,将签名后交易通过其他方式发送给C。\n…\nn、最后一个完成签名的用户,将交易广播到节点。\nn+1、验证多重签名的权重之和大于域值则接受交易,否则拒绝交易\n代码示例:\nhttps://github.com/tronprotocol/wallet-cli/blob/multi_sign_V2/src/main/java/org/tron/demo/MultiSignDemo.java\n3.3 其他新增接口\n接口详细说明,请查看Tron-http.md与波场钱包RPC-API.md \n1、增加签名\ncurl -X POST http://127.0.0.1:8090/wallet/addtransactionsign -d '{\"transaction\": \"TransferContract\", \"privateKey\": \"permissionkey1\"}'\n \nrpc AddSign (TransactionSign) returns (TransactionExtention) {}\n\n2、查询已签名地址\ncurl -X POST http://127.0.0.1:8090/wallet/getapprovedlist -d '{\"transaction\"}'\n \nrpc GetTransactionApprovedList(Transaction) returns (TransactionApprovedList) { }\n\n3、查询交易签名权重\ncurl -X POST http://127.0.0.1:8090/wallet/getsignweight -d '{\"transaction\"}'\n \nrpc GetTransactionSignWeight (Transaction) returns (TransactionSignWeight) {}\n\n4.其他\n1、支持多重签名后,创建账户时有什么变化?\n在升级到V3.5版本后,并且多重签名提议生效后,创建账户时将自动生成owner-permission以及一个active-permission,\n其中owner-permission中仅包含一个key,权限及阈值都为1。active-permission中也包含一个key,权限及阈值都为1,并且\noperations为\"7fff1fc0037e0000000000000000000000000000000000000000000000000000\",表示支持除\nAccountPermissionUpdateContract以外的所有操作。\n","renderedFileInfo":null,"shortPath":null,"symbolsEnabled":true,"tabSize":8,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"多重签名","kind":"section_1","ident_start":0,"ident_end":12,"extent_start":0,"extent_end":17,"fully_qualified_name":"多重签名","ident_utf16":{"start":{"line_number":0,"utf16_col":0},"end":{"line_number":0,"utf16_col":4}},"extent_utf16":{"start":{"line_number":0,"utf16_col":0},"end":{"line_number":2,"utf16_col":0}}},{"name":"1.背景","kind":"section_2","ident_start":269,"ident_end":293,"extent_start":266,"extent_end":600,"fully_qualified_name":"1.背景","ident_utf16":{"start":{"line_number":15,"utf16_col":3},"end":{"line_number":15,"utf16_col":23}},"extent_utf16":{"start":{"line_number":15,"utf16_col":0},"end":{"line_number":23,"utf16_col":0}}},{"name":"2.概念说明","kind":"section_2","ident_start":603,"ident_end":633,"extent_start":600,"extent_end":7102,"fully_qualified_name":"2.概念说明","ident_utf16":{"start":{"line_number":23,"utf16_col":3},"end":{"line_number":23,"utf16_col":25}},"extent_utf16":{"start":{"line_number":23,"utf16_col":0},"end":{"line_number":179,"utf16_col":0}}},{"name":"2.1 结构说明","kind":"section_3","ident_start":889,"ident_end":923,"extent_start":885,"extent_end":4179,"fully_qualified_name":"2.1 结构说明","ident_utf16":{"start":{"line_number":27,"utf16_col":4},"end":{"line_number":27,"utf16_col":30}},"extent_utf16":{"start":{"line_number":27,"utf16_col":0},"end":{"line_number":121,"utf16_col":0}}},{"name":"2.2 Owner权限","kind":"section_3","ident_start":4183,"ident_end":4216,"extent_start":4179,"extent_end":4775,"fully_qualified_name":"2.2 Owner权限","ident_utf16":{"start":{"line_number":121,"utf16_col":4},"end":{"line_number":121,"utf16_col":33}},"extent_utf16":{"start":{"line_number":121,"utf16_col":0},"end":{"line_number":131,"utf16_col":0}}},{"name":"2.3 Witness权限","kind":"section_3","ident_start":4779,"ident_end":4814,"extent_start":4775,"extent_end":6212,"fully_qualified_name":"2.3 Witness权限","ident_utf16":{"start":{"line_number":131,"utf16_col":4},"end":{"line_number":131,"utf16_col":35}},"extent_utf16":{"start":{"line_number":131,"utf16_col":0},"end":{"line_number":162,"utf16_col":0}}},{"name":"2.4 Active权限","kind":"section_3","ident_start":6216,"ident_end":6250,"extent_start":6212,"extent_end":6802,"fully_qualified_name":"2.4 Active权限","ident_utf16":{"start":{"line_number":162,"utf16_col":4},"end":{"line_number":162,"utf16_col":34}},"extent_utf16":{"start":{"line_number":162,"utf16_col":0},"end":{"line_number":173,"utf16_col":0}}},{"name":"2.5 费用","kind":"section_3","ident_start":6806,"ident_end":6834,"extent_start":6802,"extent_end":7102,"fully_qualified_name":"2.5 费用","ident_utf16":{"start":{"line_number":173,"utf16_col":4},"end":{"line_number":173,"utf16_col":28}},"extent_utf16":{"start":{"line_number":173,"utf16_col":0},"end":{"line_number":179,"utf16_col":0}}},{"name":"3.API","kind":"section_2","ident_start":7105,"ident_end":7126,"extent_start":7102,"extent_end":10894,"fully_qualified_name":"3.API","ident_utf16":{"start":{"line_number":179,"utf16_col":3},"end":{"line_number":179,"utf16_col":24}},"extent_utf16":{"start":{"line_number":179,"utf16_col":0},"end":{"line_number":306,"utf16_col":0}}},{"name":"3.1 修改权限","kind":"section_3","ident_start":7134,"ident_end":7168,"extent_start":7130,"extent_end":9408,"fully_qualified_name":"3.1 修改权限","ident_utf16":{"start":{"line_number":181,"utf16_col":4},"end":{"line_number":181,"utf16_col":30}},"extent_utf16":{"start":{"line_number":181,"utf16_col":0},"end":{"line_number":269,"utf16_col":0}}},{"name":"3.2 执行合约","kind":"section_3","ident_start":9412,"ident_end":9446,"extent_start":9408,"extent_end":10155,"fully_qualified_name":"3.2 执行合约","ident_utf16":{"start":{"line_number":269,"utf16_col":4},"end":{"line_number":269,"utf16_col":30}},"extent_utf16":{"start":{"line_number":269,"utf16_col":0},"end":{"line_number":284,"utf16_col":0}}},{"name":"3.3 其他新增接口","kind":"section_3","ident_start":10159,"ident_end":10199,"extent_start":10155,"extent_end":10894,"fully_qualified_name":"3.3 其他新增接口","ident_utf16":{"start":{"line_number":284,"utf16_col":4},"end":{"line_number":284,"utf16_col":32}},"extent_utf16":{"start":{"line_number":284,"utf16_col":0},"end":{"line_number":306,"utf16_col":0}}},{"name":"4.其他","kind":"section_2","ident_start":10897,"ident_end":10921,"extent_start":10894,"extent_end":11441,"fully_qualified_name":"4.其他","ident_utf16":{"start":{"line_number":306,"utf16_col":3},"end":{"line_number":306,"utf16_col":23}},"extent_utf16":{"start":{"line_number":306,"utf16_col":0},"end":{"line_number":325,"utf16_col":0}}}]}},"copilotInfo":null,"copilotAccessAllowed":false,"csrf_tokens":{"/tronprotocol/Documentation/branches":{"post":"fIAi1UM7LGYWfh14DUtxtTLJdtH6VhQpF9IPXmRHlEVBb56sK3su4W4hJDrSFll-a2gLja_xUyhuAUjHblkAGw"},"/repos/preferences":{"post":"FElwF7T2Ekw9_Edtp3ngsgfNzKz7s7Sbz5ATb3hlzFsphDQcCpb_NOOf7v0tCNoX5Yyiwg_bHstP7SwAu0hbHg"}}},"title":"documentation/中文文档/波场协议/多重签名.md at master · tronprotocol/documentatio

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. Permission5. Key6. 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 = [ f4df789d3210ac881cb900464dd30409453044d2777060a0c391cbdf4c6a4f57Active权限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. 修改permission3. 创建合约,签名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-permission3、用户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.md1.增加签名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之外的所有操作。发布于 2019-06-11 16:21波场(TRON)开发者教程​赞同​​2 条评论​分享​喜欢​收藏​申请

如何创建波场多签钱包 | TokenPocket(中文)

波场多签钱包 | TokenPocket(中文)TokenPocket(中文)SearchCtrl + KTokenPocket简介基础知识什么是区块链?什么是去中心化钱包?什么是私钥、助记词和密码?什么是矿工费?什么是DeFi?什么是DEX?什么是keystore什么是硬件钱包什么是冷钱包什么是热钱包什么是观察钱包什么是多签钱包什么是插件钱包什么是Passphrase安全知识常见诈骗案例警惕“零金额”转账骗局警惕精准伪装地址警惕接码类诈骗警惕新型空投诈骗警惕助记词分享诈骗BSC链恶意授权诈骗假空投诈骗假二维码诈骗假链接/App诈骗钓鱼网站诈骗假代币诈骗假客服诈骗Dapp授权诈骗安全措施安全的使用环境使用Passphrase功能创建“隐藏钱包”安全操作指引设置隐藏小额交易记录TokenPocket授权管理工具使用教程revoke.cash授权管理工具使用使用第三方DApp注意事项代币合约安全检测工具使用指引请保管好您的私钥/助记词!请小心被标记为风险的代币或网站链接一文学会分辨TP钱包是否正版官网正版钱包验证方法如何验证你的Google Play版TP钱包是否正版如何验证App Store版TP钱包(TP Wallet)是否正版在Telegram上如何辨别真假群管理员以及群组?授权(Approve)一文详解!如何查看/取消恶意Approve(授权)?三步辨别真假官网 手把手教你下载TokenPocket APP资产防丢资产防盗钱包常见问题BTC钱包什么是比特币ETF?快速了解:比特币、闪电网络、Nostr、 Nostr Assets协议以及Taproot Assets协议如何使用BTC加速功能在钱包中查看和发送Ordinals铭文什么是部分签名的比特币交易(PSBT)什么是比特币Ordinals什么是BTC网络拥堵,如何解决。什么是观察钱包什么是找零地址什么是UTXO什么是OP_RETURN?什么是路径什么是Taproot?什么是隔离见证ETH钱包如何购买ETH代币ETH节点质押节点质押教程关于以太坊POS以太坊质押的常见问题自托管质押,常见问题Eth 2.0质押宝规则Eth2.0 质押宝节点列表Eth 2.0服务协议什么是EIP-1559?Eth 2.0质押宝规则Eth2.0 质押宝节点列表如何管理未打包交易?代币授权是什么?如何使用代币授权?什么是以太坊交易加速什么是Permit2什么是PermitBSC 钱包如何批量创建BSC钱包TRON钱包使用USDT作为“网络费”,无需TRX如何节约波场转账矿工费?如何创建波场多签钱包如何创建波场钱包TokenPocket能量租赁服务如何批量创建波场钱包如何使用波场能量租赁如何购买波场TRX代币什么是超级代表什么是质押2.0投票注意事项如何参与投票如何领取投票奖励关于波场权限波卡钱包什么是转账的小费?SUI钱包Scallop(sui)使用教程Solana钱包关于Solana“关联账号”OKX钱包OKExChain钱包升级Aptos钱包什么是权限变更多链钱包如何设置助记词导入路径如何重置密码如何使用离线冷钱包什么是助记词什么是资产归集什么是身份钱包(HD)?关于子钱包什么是私钥多签钱包什么是多签什么是多签管理员什么是多签nonce多签钱包创建教程多签钱包导入教程多签钱包转账教程AA智能钱包什么是AA智能钱包AA智能钱包创建和导入AA智能钱包如何使用AA智能钱包科普杀毒软件误报钱包操作关于下载TokenPocket APP苹果手机如何做数据迁移如何注册Apple ID如何下载TokenPocket APP?安卓客户端32位和64位的区别Testflight Pro版本TP钱包过期无法打开解决方案苹果手机如何通过App Store下载TokenPocket App?如何在DEX上交易?Orbiter Finance使用教程EOS主网资产兑换EOS-EVM资产Birdeye使用教程使用Transit Swap兑换SOL资产Orca使用教程Jito使用教程Marginfi使用教程Raydium使用教程EOS-EVM公链代币兑换FEVM-FIL代币的购买和提现Base Goerli公链和Goerli公链资产互通跨链聚合闪兑平台Transit Swap 使用教程Uniswap 使用教程PancakeSwap(BSC)使用教程MDEX(HECO)使用教程JustSwap(TRON)使用教程PuddingSwap(HSC)使用教程SushiSwap(OKEX)使用教程创建钱包教程如何批量创建子钱包TokenPocket带您一文玩转BlastTokenPocket带您一文玩转MerlinTokenPocket带您一文玩转KromaTokenPocket带您一文玩转ZetaChainTokenPocket带您一文玩转 Taiko测试网TokenPocket带您一文玩转Blast测试网TokenPocket带您一文玩转MetisTokenPocket带您一文玩转MantaTokenPocket带您一文玩转BEVMTokenPocket带您一文玩转IOST(激活码创建)TokenPocket带您一文玩转IOST(好友创建)TokenPocket带您一文玩转ZKFairTokenPocket带您一文玩转ScrollTokenPocket带您一文玩转HAQQTokenPocket带您一文玩转CoreTokenPocket带你一文玩转ZetaChain测试网TokenPocket带您一文玩转Polygon zkEVMTokenPocket带您一文玩转opBNBTokenPocket带您一文玩转BaseTokenPocket带您一文玩转LineaTokenPocket带您一文玩转MantleTokenPocket带您一文玩转SuiTokenPocket带您一文玩转PulseChainTokenPocket带您一文玩转EOS EVMTokenPocket带您一文玩转zkSync Era∎TokenPocket带您一文玩转Filecoin (FVM)TokenPocket带您一文玩转狗狗链(Dogecoin)TokenPocket带您一文玩转 Base GoerliTokenPocket带您一文玩转 GoerliTokenPocket带您一文玩转CORETokenPocket带您一文玩转AptosTokenPocket带您一文玩转 FON Smart Chain(FSC)TokenPocket带您一文玩转EthereumPoW(ETHW)TokenPocket带您一文玩转EthereumFair(ETHF)TokenPocket带您一文玩转Arbitrum Nova!TokenPocket带您一文玩转ETC!TokenPocket带您一文玩转HALO!TokenPocket带您一文玩转GateChain(GT)!TokenPocket带您一文玩转BitTorrent!TokenPocket带您一文玩转Conflux eSpace!TokenPocket带你一文玩转KCC!TokenPocket带您一文玩转HarmonyTokenPocket带您一文玩转Moonbeam!TokenPocket带你一文玩转WAX!TokenPocket一文带你玩转Solana!TokenPocket一文带你玩转Avalanche!TokenPocket一文带你玩转Fantom!TokenPocket一文带你玩转Arbitrum!如何在TokenPocket玩转Polygon(Matic)?TokenPocket一文带你玩转Klaytn如何在TokenPocket使用Klaytn?如何创建波场钱包TokenPocket带您一文玩转 Moonriver关于自定义网络什么是自定义网络自定义网络推广链接如何添加自定义网络如何编辑自定义网络关于DApp使用如何创建DApp List如何收藏DAPP和TIP-001协议关于NFT使用NFT皮肤赛使用教程NFT认证规范NFT应用功能说明如何在TokenPocket设置NFT资产首页顶部背景、收款页面背景、头像?工具铭文助手使用教程Magic Eden使用教程(铭文)在App Store给TP Wallet鼓励和反馈协议层新功能操作指引关于NostrNostrAssets使用教程️钱包管理代币管理如何使用Transit Buy交易(WEB端)如何使用Transit Buy交易如何添加代币?如何搜索代币?如何删除代币?如何管理NFT资产?关于自定义代币钱包管理如何使用隐私钱包如何使用Widget(小部件)如何隐藏钱包?如何创建钱包?如何导入钱包?如何管理钱包?如何切换钱包?如何同步钱包?如何一键迁移钱包数据?如何使用观察钱包以及冷钱包?什么是nonce?区块浏览器使用教程什么是区块浏览器?什么是哈希值(交易哈希)?BSC浏览器使用教程如何在BSC区块浏览器查询交易记录?如何在BSC区块浏览器查询资产?如何在BSC区块浏览器查询代币信息?TRON浏览器使用教程如何查看地址多签状态如何在TRON区块浏览器查询交易记录?如何在TRON区块浏览器查询资产?如何在TRON区块浏览器查询代币信息?ETH浏览器使用教程如何在ETH区块浏览器查询交易记录?如何在ETH区块浏览器查询资产?如何在ETH区块浏览器查询代币信息?钱包转账如何收款?如何转账到钱包/交易所?如何取消转账交易?如何加速转账交易?如何在发起转账时添加memo?关于转账的安全事项关于不同公链的代币转账不同公链间不能直接转账钱包转账常见问题为什么不能直接往合约地址转账?我往合约转账了怎么办?交易所【提现资产】到钱包未到账钱包【充值资产】到交易所未到账为什么转账一直在打包,怎么办?我转账失败了,为什么不给我退币?多链批量转账工具‍开发者模块如何自主更新代币图标?如何自主更新NFT图标?如何提交代币?如何提交DApp?如何提交NFT?如何提交公链?插件钱包基本功能介绍插件钱包使用教程通过自定义Nonce发送数据TokenPocket插件钱包安装教程使用教程如何导入/创建钱包?如何在插件钱包创建/导入多签钱包?如何连接TokenPocket插件钱包?如何在TokenPocket插件钱包中使用兑换功能?如何连接KeyPal硬件钱包?如何连接Ledger硬件钱包?如何连接Trezor硬件钱包?插件钱包更新版本更新日志(01/09/2024)版本更新日志(12/27/2023)版本更新日志(11/25/2023)版本更新日志(08/09/2023)版本更新日志(06/22/2023)版本更新日志(06/05/2023)版本更新日志(06/02/2023)版本更新日志(05/19/2023)版本更新日志(03/05/2023)版本更新日志(03/01/2023)版本更新日志(11/04/2022)版本更新日志(08/26/2022)版本更新日志(07/13/2022)版本更新日志(06/08/2022)版本更新日志(05/05/2022)TokenPocket品牌升级(04/24/2022)隐私政策使用协议产品公告公告专区2023/10/16 关于BTC Ordinals数据维护公告2022/10/11 关于TokenPocket官网维护的公告2022/10/07 关于BNB链维护升级完成的公告2022/10/07 关于BNB链维护的公告2022/09/15 关于以太坊合并已完成的公告2022/09/12 关于TokenPocket支持以太坊合并的公告2022/08/31 关于Arbitrum进行Nitro技术升级的通知2022/08/29 关于TokenPocket钱包维护升级的通知2022/08/04 关于Matic(马蹄)链维护升级的通知2022/07/20 关于BSC链,IOST链维护升级的通知2022/07/12 关于波场链维护升级的通知!2022/07/11 关于Klaytn维护升级的通知2022/06/05 钱包安全提醒!2022/06/01 关于OP节点维护升级的通知2022/06/01 关于Heco链升级的通知2022/05/20 关于Polygon(Matic)链升级的通知2022/05/18 关于TokenPocket技术服务升级的通知2022/01/27 关于TRON服务升级的通知2022/01/25 关于Klayten维护升级的通知2021/12/02 关于EOS节点维护升级的通知APP更新版本更新日志查看入口版本更新日志(7/6/2023)版本更新日志(7/2/2023)版本更新日志(6/16/2023)版本更新日志(6/09/2023)版本更新日志(6/07/2023)版本更新日志(6/03/2023)版本更新日志(5/25/2023)版本更新日志(5/23/2023)版本更新日志(05/05/2023)版本更新日志(4/27/2023)版本更新日志(4/14/2023)版本更新日志(4/11/2023)版本更新日志(4/06/2023)版本更新日志(4/04/2023)版本更新日志(3/18/2023)版本更新日志(3/11/2023)版本更新日志(3/7/2023)版本更新日志(3/3/2023)版本更新日志(2/19/2023)版本更新日志(2/18/2023)版本更新日志(2/17/2023)版本更新日志(1/18/2023)版本更新日志(1/12/2023)版本更新日志 (1/9/2023)版本更新日志 (12/15/2022)版本更新日志 (12/07/2022)版本更新日志 (12/05/2022)版本更新日志 (10/29/2022)版本更新日志 (10/28/2022)版本更新日志 (10/14/2022)版本更新日志 (09/09/2022)版本更新日志 (08/29/2022)版本更新日志(08/18/2022)版本更新日志(08/01/2022)版本更新日志(07/28/2022)版本更新日志(07/11/2022)版本更新日志(07/02/2022)版本更新日志(06/30/2022)版本更新日志(06/28/2022)版本更新日志(06/13/2022)版本更新日志(06/08/2022)版本更新日志(05/29/2022)版本更新日志(05/25/2022)版本更新日志(04/29/2022)版本更新日志(04/13/2022)版本更新日志(03/31/2022)版本更新日志(03/11/2022)版本更新日志(02/25/2022)版本更新日志(02/11/2022)版本更新日志(01/27/2022)版本更新日志(01/17/2022)版本更新日志(12/31/2021)版本更新日志(11/26/2021)版本更新日志(11/5/2021)版本更新日志(10/14/2021)版本更新日志(09/29/2021)版本更新日志(09/18/2021)版本更新日志(09/03/2021)版本更新日志(08/05/2021)版本更新日志(07/28/2021)版本更新日志(07/07/2021)版本更新日志(11/06/2021)版本更新日志(31/03/2021)版本更新日志(18/03/2021)版本更新日志(29/01/2021)版本更新日志(22/01/2021)版本更新日志(25/12/2020)版本更新日志(21/12/2020)版本更新日志(30/10/2020)致中国境内用户:TokenPocket 产品政策调整说明关于腾讯管家误报TokenPocket的安全声明联系我们加入我们联系方式司法协助政策相关协议Eth 2.0服务协议Powered by GitBook如何创建波场多签钱包一些建议:阈值、管理地址、权重要认真检查合理设置,一旦完成上链后是不可逆的操作;新手稳妥起见权限变更按照先active后owner的顺序,当然这会消耗两次的trx;熟悉操作后,在权限设置中将owner和active甚至新增的权限等功能一并执行,这样更加节约trx。波场钱包权限设置教程1、打开TokenPocket,点击蓝色区域右上角【详情】,打开【权限管理】菜单。2、权限管理的界面主要分为三个大类,一类是owner权限管理,包含了权限替换和设置多签, 二类是active 权限管理,包含了权限替换和设置多签, 三类是增加一个active权限,例如能量租赁的自动转出能量的功能就是新增一个active并只授予关于能量的权限来实现的。2.1、点击owner的权限设置可以看到【权限名称】是可以修改的,不过考虑到单独的修改权限名称也需要花费100trx,所以这个极少有人会这么设置。owner的权限是完整权限,具体的可以通过编辑权限的【权限】列表中查看。2.2、阈值(最少签名权重和),就是管理地址的权重相加大于或等于阈值时才可以进行上链操作,其中阈值可设置的最大值是100;设置管理钱包这里默认是当前的地址,后面的1代表了当前的权重参数,后面的垃圾桶标志表示可以删除这个管理地址;添加管理钱包,可以通过自定义填入、钱包导入、扫码导入的方式增加管理地址,增加后默认权重是1,根据实际的情况来进行设置。owner权限可以进行替换(单签名)或者是设置多个管理地址(多签名),如果设置多签,建议合理的进行设置,例如2/3的设置方式,只需要2个管理地址进行签名即可执行,即便是丢失一个管理地址,依然可以正常的使用。设置好owner权限后点击【保存】就可以保存设置的参数并返回到【编辑权限】的初始界面。2.3、active的权限设置是同样的操作,唯一不同之处是active可以灵活的设置【权限】,只需要点击【编辑】功能,即可对执行的权限进行设置,建议不熟悉的用户不要贸然的删减,不然会影响一些链上操作的执行。同样的active也可以直接替换权限地址(单签)也可以设置多个管理钱包(多签名),设置合理的阈值和管理地址及权重能更安全更灵活的管理资产。设置好active的参数后即可点击底部的【确认】保存参数。2.4、增加权限功能只适用于active,其操作和上面的内容相同,这种功能使用的比较少,例如在TokenPocket的【能量租赁】服务中,可以增加active的自动执行能量出租的操作。3、确认好owner和active等参数都设置完毕后,点击底部的【确定升级权限】会弹出安全要点提示,重点要检查自己设置的阈值、权重、管理地址是否正确和合理,点击【了解并继续】后来到了最后的交易详情的执行界面,在这里依然可以在【升级详情】中确认执行的内容是否完整和正确,核对后点击【确定更改】并支付Gas(网络费)后就可以完成波场地址的权限变更操作。Previous如何节约波场转账矿工费?Next如何创建波场钱包Last updated 7 months agoOn this page一些建议:波场钱包权限设

多重签名 - Java Tron

多重签名 - Java Tron

Java Tron

入门

Java-tron入门

使用Java-tron

部署Java-tron

备份和恢复

轻节点

私链网络

事件订阅

数据库配置

网络配置

节点监控

节点维护工具

API 接口

HTTP 接口

gRPC 接口

核心协议

波场共识

超级代表

账户模型

资源模型

智能合约

系统合约

去中心化交易所

多重签名

背景

概念说明

结构说明

Account修改

ContractType修改

AccountPermissionUpdateContract

Permission

Key

Transaction修改

Owner权限

Witness权限

Active权限

费用

API

修改权限

http-demo

active权限中operations的计算示例

执行合约

其他新增接口

查询已签名地址

查询交易签名权重

其他

支持多重签名后,创建账户时有什么变化?

Java-tron开发

开发者指南

TIPs工作流程

Issue工作流程

治理流程

配置IDE开发环境

开发示例

核心模块

Dapp开发

Dapp开发工具

Wallet-cli

什么是Wallet-Cli

Wallet命令

版本发布

新版本部署手册

一致性检验

历史版本

术语表

Java Tron

»

核心协议 »多重签名

Edit on GitHub

多重签名¶

背景¶

注意:V3.5版本后支持

目前TRON的所有交易签名,都是用的同一个私钥完成。没有权限分级,也不能实现多人共同控制账户。因此,设计并实现多重签名功能,每个权限可以对应多个私钥。

Tron multi-signatures TIP

概念说明¶

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

结构说明¶

Account修改¶

message Account {

...

Permission owner_permission = 31;

Permission witness_permission = 32;

repeated Permission active_permission = 33;

}

在账户结构中新增三个权限属性,分别是 owner_permission、witness_permission 和 active_permission,其中 active_permission 是个列表,可以指定最多8个。

ContractType修改¶

message Transaction {

message Contract {

enum ContractType {

AccountCreateContract = 0;

...

AccountPermissionUpdateContract = 46;

}

}

}

新增一种交易类型 AccountPermissionUpdateContract,用于更新账户权限。

AccountPermissionUpdateContract¶

message AccountPermissionUpdateContract {

bytes owner_address = 1;

Permission owner = 2;

Permission witness = 3;

repeated Permission actives = 4;

}

owner_address:待修改权限的账户的地址

owner:修改后的 owner 权限

witness:修改后的 witness 权限(如果是 witness )

actives:修改后的 actives 权限

该接口是覆盖原账户权限,因此,如果只想修改owner权限,witness(如果是witnss账户)及actives的也需要设置。

Permission¶

message Permission {

enum PermissionType {

Owner = 0;

Witness = 1;

Active = 2;

}

PermissionType type = 1;

int32 id = 2;

string permission_name = 3;

int64 threshold = 4;

int32 parent_id = 5;

bytes operations = 6;

repeated Key keys = 7;

}

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时表示拥有该合约的权限。

如operations=0x0100...00(十六进制),即100...0(二进制)时,查看proto中Transaction.ContractType定义,合约AccountCreateContract的id为0,

即表示该permission只拥有执行AccountCreateContract的权限,可以使用"active权限中operations的计算示例"计算获得。

keys:共同拥有该权限的地址及权重,最多允许5个key。

Key¶

message Key {

bytes address = 1;

int64 weight = 2;

}

address:拥有该权限的地址

weight:该地址对该权限拥有权重

Transaction修改¶

message Transaction {

...

int32 Permission_id = 5;

}

在交易中增加 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。

费用¶

使用更新账户权限时,即 AccountPermissionUpdate 合约,收取100TRX。

使用多重签名的交易时,即交易中包括两个及两个以上签名的交易,除交易费用外,另收取1TRX。

可通过提议,修改以上费用。

API¶

修改权限¶

AccountPermissionUpdateContract,修改权限步骤如下:

1、使用接口getaccount查询账户,并获取原权限

2、修改permission

3、创建合约,签名

4、发送交易

http-demo¶

http://{{host}}:{{port}}/wallet/accountpermissionupdate

{

"owner_address": "41ffa9466d5bf6bb6b7e4ab6ef2b1cb9f1f41f9700",

"owner": {

"type": 0,

"id": 0,

"permission_name": "owner",

"threshold": 2,

"keys": [{

"address": "41F08012B4881C320EB40B80F1228731898824E09D",

"weight": 1

},

{

"address": "41DF309FEF25B311E7895562BD9E11AAB2A58816D2",

"weight": 1

},

{

"address": "41BB7322198D273E39B940A5A4C955CB7199A0CDEE",

"weight": 1

}

]

},

"witness": {

"type": 1,

"id": 1,

"permission_name": "witness",

"threshold": 1,

"keys": [{

"address": "41F08012B4881C320EB40B80F1228731898824E09D",

"weight": 1

}

]

},

"actives": [{

"type": 2,

"id": 2,

"permission_name": "active0",

"threshold": 3,

"operations": "7fff1fc0037e0000000000000000000000000000000000000000000000000000",

"keys": [{

"address": "41F08012B4881C320EB40B80F1228731898824E09D",

"weight": 1

},

{

"address": "41DF309FEF25B311E7895562BD9E11AAB2A58816D2",

"weight": 1

},

{

"address": "41BB7322198D273E39B940A5A4C955CB7199A0CDEE",

"weight": 1

}

]

}]

}

参数字段的定义及限制,请查看"2.1 结构说明"。

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);

});

//7fff1fc0033e0000000000000000000000000000000000000000000000000000

System.out.println(ByteArray.toHexString(operations));

}

执行合约¶

1、创建交易,与非多重签名交易的构建过程相同

2、指定Permission_id,默认为0,表示owner-permission, demo

3、用户A签名,将签名后交易通过其他方式发送给B。

4、用户B签名,将签名后交易通过其他方式发送给C。

n、最后一个完成签名的用户,将交易广播到节点。

n+1、验证多重签名的权重之和大于域值则接受交易,否则拒绝交易

代码示例:

多重签名示例

其他新增接口¶

接口详细说明,请查看Tron-http.md与波场钱包RPC-API.md

查询已签名地址¶

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

rpc GetTransactionApprovedList(Transaction) returns (TransactionApprovedList) { }

查询交易签名权重¶

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

rpc GetTransactionSignWeight (Transaction) returns (TransactionSignWeight) {}

其他¶

支持多重签名后,创建账户时有什么变化?¶

在升级到V3.5版本后,并且多重签名提议生效后,创建账户时将自动生成owner-permission以及一个active-permission,

其中owner-permission中仅包含一个key,权限及阈值都为1。active-permission中也包含一个key,权限及阈值都为1,并且

operations为"7fff1fc0033e0000000000000000000000000000000000000000000000000000",表示支持除

AccountPermissionUpdateContract以外的所有操作。

在V3.5版本以后,如果有新增系统合约,新创建的账户的默认operations值会发生变化。已经创建的账户的operations不会发生变化。

Previous

Next

Built with MkDocs using a theme provided by Read the Docs.

GitHub

« Previous

Next »

TRONSCAN多重签名功能使用教程(一). ​ | by 孙宇晨 | Medium

SCAN多重签名功能使用教程(一). ​ | by 孙宇晨 | MediumOpen in appSign upSign inWriteSign upSign inTRONSCAN多重签名功能使用教程(一)孙宇晨·Follow3 min read·Feb 4, 2020--4Share​近日,TRONSCAN在用户个人中心新增多重签名功能,支持用户自主设置账户权限,满足多人联合控制账户的需求。多重签名指多人联合控制一个账户的功能,拥有某一账户权限的用户发起多重签名操作时,在权限列表内的所有或部分人签名权重之和达到阈值及以上时方可执行。为了指导用户使用TRONSCAN全新推出的多重签名功能,我们特推出系列教程。本期为系列教程一 — — 如何编辑多重签名的权限。注意:每次编辑权限都将消耗100TRX步骤一:登录TRONSCAN波场区块浏览器(https://tronscan.io)步骤二:进入账户页面,下划到多重签名模块注:TRONSCAN一共提供三类权限,分别为拥有者权限、活跃权限和超级代表权限。拥有者权限是账户的最高权限,具有账户的拥有者权限的地址可发起针对该账户的所有操作;活跃权限提供某些操作的组合,比如您可设置一个活跃权限仅能执行TRX转账、冻结资产的操作,具有账户的活跃权限的地址仅可发起该地址所在的活跃权限中包含的操作;超级代表权限用来设定出块节点,只有超级代表的账户才可以设置。下面将以活跃权限为例进行说明,其他权限的编辑方式与活跃权限类同。步骤三:点击编辑权限按钮,在活跃权限的权限名称栏里为该权限命名步骤四:点击操作字段下的添加按钮,在弹出窗口中通过勾选或取消勾选来添加或删除相应操作权限,选择完成后点击保存。步骤五:在阈值栏里设置执行操作的阈值,阈值为执行操作所需的最小权重总和,可设置大于或等于1的任意整数。步骤六:在Keys字段添加您想赋予该活跃权限控制权的地址并设置相应权重(最多可添加5个地址),每个地址的权重不得大于阈值,且所有地址的权重之和必须大于或等于阈值。当需要多重签名的交易被发起后,若进行签名的地址的权重之和大于或等于阈值时即确认交易,交易信息将记录到区块链上。若您还需要添加新的活跃权限,点击添加新权限按钮即可,一共可添加8个活跃权限步骤七:编辑完成后点击保存按钮来保存更改----4FollowWritten by 孙宇晨439 Followers波场@Tronfoundation创始人|@BitTorrent CEO|马云湖畔大学首批学员FollowHelpStatusAboutCareersBlogPrivacyTermsText to speechTeams

TronLink波宝钱包移动端多重签名添加权限简介. ​​ | by 孙宇晨 | Medium

Link波宝钱包移动端多重签名添加权限简介. ​​ | by 孙宇晨 | MediumOpen in appSign upSign inWriteSign upSign inTronLink波宝钱包移动端多重签名添加权限简介孙宇晨·Follow6 min read·Mar 4, 2020--Share​​TronLink波宝钱包多重签名功能允许权限分级,每个权限可以对应多个私钥。这使得实现账户的多人联合控制成为可能。多重签名共包含三种权限级别,分别是“owner”、“witness”以及“active”权限。其中Owner权限是账户的最高权限,用于控制用户的所有权、调整权限结构,Owner权限也可执行所有合约;Witness权限仅超级代表可使用,用于管理出块节点;Active权限用于提供一个权限的组合,一个地址可以添加8个Active权限组。以下是Active权限中可添加的权限列表,共分为资产、账户、TRC10通证、智能合约、超级代表和Bancor六类,未来将随TRON网络更新。1、资产包括TRX的转账、冻结和解冻,详情如下:1.1 TRX转账 (TransferContract)转出账户下的TRX。1.2 冻结资产 (FreezeBalanceContract)冻结账户下的TRX以获取带宽、能量或投票权。1.3 解冻资产 (UnfreezeBalanceContract)解冻账户已冻结的TRX。2、账户包括账户激活、修改名称和更新权限,详情如下:2.1 激活账户 (AccountCreateContract)使用TRON网络中已存在的帐户激活另一个账户,与通过转账TRX激活账户效果相同。2.2 修改账户名称 (AccountUpdateContract)修改记录在TRON网络的账户名称。2.3 更新账户权限 (AccountPermissionUpdateContract)包括添加、修改、删除在内的账户权限更新(多重签名设置),可以更新账户的Owner、Witness和Active权限。3、TRC10通证包括TRC10通证的转账和发行等,详情如下:3.1 TRC10转账 (TransferAssetContract)转出账户下的TRC10通证。3.2 购买TRC10通证 (ParticipateAssetIssueContract)参与TRC10通证的发行。3.3 发行TRC10通证 (AssetIssueContract)在TRON网络发行TRC10通证。3.4 TRC10锁仓提取 (UnfreezeAssetContract)根据锁仓计划操作提取锁定中的TRC10通证。3.5 更新TRC10通证参数 (UpdateAssetContract)更新包括通证描述、网址、能量消耗在内的TRC10通证参数。4、智能合约包括智能合约的创建和触发等,详情如下:4.1 触发智能合约 (TriggerSmartContract)触发智能合约主要包括TRC20通证转账,使用Dapp等需要与合约交互的操作。4.2 创建智能合约 (CreateSmartContract)创建一个智能合约,也可以使用此权限发行TRC20通证。4.3 更新合约参数 (UpdateSettingContract)更新智能合约调用时用户账户消耗资源的百分比。4.4 更新合约能量限制 (UpdateEnergyLimitContract)更新智能合约部署者提供的能量上限值。4.5 清除合约ABI (ClearABIContract)清除合约ABI,使其不对其他使用TRON网络的用户暴露。5、超级代表包括超级代表相关的投票、提议和候选人申请等,详情如下:5.1 投票 (VoteWitnessContract)使用投票权为超级代表投票。5.2 提取奖励 (WithdrawBalanceContract)提取投票奖励或出块奖励。5.3 创建提议 (ProposalCreateContract)超级代表、超级代表合伙人或超级代表候选人可以创建一个针对TRON网络的提议。提议是指对TRON网络参数进行修改,每个超级代表都具有提议权和对提议的投票权。当提议在有效期内获得19个及以上超级代表的赞成票时,该提议获得通过,并在下个维护期内进行网络参数修改。5.4 赞成提议 (ProposalApproveContract)在有效时间内投票赞成某个提议。5.5 撤销提议 (ProposalDeleteContract)撤销某个由该账户创建的提议。5.6 创建超级代表候选人 (WitnessCreateContract)申请成为TRON网络超级代表候选人。5.7 更新超级代表候选人信息 (WitnessUpdateContract)更新超级代表候选人的网址。5.8 更新超级代表佣金比例 (UpdateBrokerageContract)更新超级代表的佣金比例,部分奖励将分配给选民。6、Bancor包括Bancor交易相关,详情如下:6.1 执行Bancor交易 (ExchangeTransactionContract)执行Bancor交易,不需通过撮合即可完成交易。6.2 创建Bancor交易 (ExchangeCreateContract)创建Bancor交易对。6.3 Bancor交易注资 (ExchangeInjectContract)向Bancor交易对的资金池中注资。6.4 Bancor交易撤资 (ExchangeWithdrawContract)从Bancor交易对的资金池中撤资。关于TronLinkTronLink波宝钱包是一款安全、全面、专业的波场钱包,致力于为用户提供最安全的资金选择、最全面的波场功能、最便捷的使用体验、以及最丰富的应用选择。波宝钱包是目前波场TRON生态中用户量最大的去中心化钱包,同时也是唯一一个PC端及移动端均支持的钱包,其产品已经累计为超过30万的波场用户提供服务。钱包下载:https://www.tronlink.org/微信公众号:波宝APP客服微信:TronLinkTwitter:https://twitter.com/TronLinkWalletTelegram:https://t.me/TronLink----FollowWritten by 孙宇晨439 Followers波场@Tronfoundation创始人|@BitTorrent CEO|马云湖畔大学首批学员FollowHelpStatusAboutCareersBlogPrivacyTermsText to speechTeams