Skip to content

MultiSig

linj edited this page Nov 23, 2022 · 1 revision

多重签名

[TOC]

1 多重签名合约功能:

1.1 多重签名账户的创建

。需要设置默认的owner以及权重,指定资产的每日限额,请求权重的值

1.2 多重签名账户属性的修改

。owner的add/del/modify/replace 。资产每日限额的修改 。请求权重的修改

1.3 多重签名账户的转账

。转入时,to地址必须是多重签名地址,from地址必须是非多重签名地址; 。转出时,from地址必须是多重签名地址,to地址必须是非多重签名地址; 传出交易需要校验权重

2 多重签名合约命令行

2.1 多重签名合约命令行说明

account

cli multisig  account
Available Commands:
  address     get multisig account address
  assets      get assets of multisig account
  count       get multisig account count
  create      Create a multisig account transaction
  creator     get all multisig accounts created by the address
  dailylimit  Create a modify assets dailylimit transaction
  owner       get multisig accounts by the owner
  info        get multisig account info
  unspent     get assets unspent today amount
  weight      Create a modify required weight transaction

owner

cli multisig  owner
Available Commands:
  add         Create a add owner  transaction
  del         Create a del owner transaction
  modify      Create a modify owner weight transaction
  replace     Create a replace owner transaction

tx

cli multisig  tx
Available Commands:
  confirm          Create a confirm transaction
  confirmed_weight get the weight of the transaction confirmed.
  count            get multisig tx count
  info             get multisig account tx info
  transfer_in      Create a transfer to multisig account transaction
  transfer_out     Create a transfer from multisig account transaction
  txids            get multisig txids

2.2 多重签名合约命令行示例

1. 创建多重签名账户:根据txhash生成一个多重签名账户地址multisig-addr
   cli send multisig account create -d 10 -e coins -s BTY -a "owner-1 owner-2" -w "20 10" -r 15 -k private-key

2. 查看创建的账户个数:
   cli multisig account count

3. 通过账户index获取多重签名账户地址
   cli multisig account address -e 0 -s 0

4. 通过多重签名账户addr获取账户详情
   cli multisig account info -a multisig-addr

5. 向multisig合约中转账
   cli send bty transfer -a 50 -n test  -t multisig-exec-addr -k addr3

6. 在multisig合约中转账到多重签名地址
   cli send multisig tx transfer_in -a 40 -e coins -s BTY  -t multisig-addr -n test -k addr3

7. 查看多重签名地址资产
   cli multisig  account assets  -a multisig-addr

8. 在multisig合约中从多重签名地址转出
   cli send multisig  tx transfer_out  -a 11 -e coins -s BTY -f multisig-addr -t addr3 -n test -k owner-1

9. 查询交易计数
   cli multisig  tx count  -a multisig-addr

10. 查询交易txid
   cli multisig   tx txids  -a multisig-addr -s 0 -e 0

11. 查询交易信息
   cli multisig  tx info  -a multisig-addr -i 0

12. 多重签名账户add 一个新的owner-3
   cli send multisig owner add  -a multisig-addr -o owner-3 -w 5 -k  owner-1

13. 多重签名账户del已存在的owner-3
   cli send multisig  owner del  -a multisig-addr -o owner-3  -k owner-1

14. 多重签名账户replace已存在的owner-2,用owner-4
   cli send multisig  owner replace  -a multisig-addr -n owner-4 -o owner-2 -k  owner-1

15. 多重签名账户modify 已存在owner-4的权重值
   cli send multisig  owner modify  -a multisig-addr -o owner-4 -w 11 -k owner-1

16. 多重签名账户modify每日限额dailylimit
   cli send multisig  account dailylimit -a multisig-addr -e coins -s BTY -d 12 -k owner-1

17. 多重签名账户modify请求weight
   cli send multisig  account weight -a multisig-addr -w 16 -k owner-1

18. 多重签名账户撤销对某笔交易的确认
   cli send   multisig tx confirm  -a multisig-addr -i 8 -c f  -k owner-1

19. 多重签名账户确认某笔交易
   cli send multisig tx confirm  -a multisig-addr -i 8 -k owner-1

20. 获取指定地址创建的所有多重签名账户
   cli multisig account creator -a addr

21. 获取指定账户上指定资产的每日余额
   cli multisig  account unspent  -a multisig-addr -e coins -s BTY

22. 获取owner拥有的所有多重签名地址,不指定地址时返回的是本钱包拥有的所有多重签名地址
   cli  multisig account owner -a 166po3ghRbRu53hu8jBBQzddp7kUJ9Ynyf

3 多重签名合约RPC接口说明

3.1 account

3.1.1 创建多重签名账户(未签名) MultiSigAccCreateTx

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"multisig.MultiSigAccCreateTx",
    "params":[
		{
			"owners":[{"ownerAddr":"string","weight":uint64}],
			"RequiredWeight":uint64,
			"dailyLimit":{"symbol":"string","execer":"string","dailyLimit":uint64}
		}
	]
}

参数说明:

参数 类型 说明
owners []*Owner owner数组(ownerAddr:string,weight:uint64),最少2个owner
requiredWeight uint64 交易被执行的请求权重值,此值不能大于所有owner权重的总和
dailyLimit *SymbolDailyLimit 资产的每日限额值(execer:string,symbol:string,dailyLimit:uint64)

响应报文:

{
    "id":int32,
    "error":null,
    "result":"string"
}

参数说明:

参数 类型 说明
result string 返回交易十六进制编码后的字符串
3.1.2 多重签名账户修改RequiredWeight值(未签名) MultiSigAccOperateTx

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"multisig.MultiSigAccOperateTx",
    "params":[
		{
			"multiSigAccAddr":string,
			"newRequiredWeight":uint64,
			"operateFlag":bool
		}
	]
}

参数说明:

参数 类型 说明
multiSigAccAddr string 多重签名账户地址
newRequiredWeight uint64 新的请求权重值
operateFlag bool account账户操作类型:true 修改RequiredWeight值
dailyLimit *SymbolDailyLimit 资产的每日限额值(execer:string,symbol:string,dailyLimit:uint64)

响应报文:

{
    "id":int32,
    "error":null,
    "result":"string"
}

参数说明:

参数 类型 说明
result string 返回交易十六进制编码后的字符串
3.1.3 多重签名账户修改DailyLimit每日限额(未签名) MultiSigAccOperateTx

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"multisig.MultiSigAccOperateTx",
    "params":[
		{
			"multiSigAccAddr":"string",
			"dailyLimit":{"symbol":"string","execer":"string","dailyLimit":uint64},
			"operateFlag":bool
		}
	]
}

参数说明:

参数 类型 说明
multiSigAccAddr string 多重签名账户地址
dailyLimit *SymbolDailyLimit 资产的每日限额值(execer:string,symbol:string,dailyLimit:uint64)
operateFlag bool account账户操作类型:false 修改DailyLimit值
newRequiredWeight uint64 新的请求权重值

响应报文:

{
    "id":int32,
    "error":null,
    "result":"string"
}

参数说明:

参数 类型 说明
result string 返回交易十六进制编码后的字符串
3.1.4 获取已经创建的多重签名账户个数 MultiSigAccCount

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.Query",
    "params":[
		{
			"execer":"multisig",
			"funcName":"MultiSigAccCount",
			"payload":nil
		}
	]
}

参数说明:

参数 类型 说明

响应报文:

{
	"id" : int32,
	"result" : {"data" : int64},
	"error" : null
}

参数说明:

参数 类型 说明
data int64 多重签名账户个数
3.1.5 获取多重签名地址 MultiSigAccounts

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.Query",
    "params":[
		{
			"execer" : "multisig",
			"funcName" : "MultiSigAccounts",
			"payload" : {"start":int64,"end":int64}
		}
	]
}

参数说明:

参数 类型 说明
start int64 多重签名账户index索引,从0开始
end int64 多重签名账户index索引,end>=start && end< MultiSigAccCount获取的值

响应报文:

{
    "id":int32,
	"result" : {
		"address": ["string"]
	},
   "error" : null
}

参数说明:

参数 类型 说明
address []string 多重签名账户地址列表
3.1.6 获取多重签名账户信息 MultiSigAccountInfo

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.Query",
    "params":[
		{
			"execer" : "multisig",
			"funcName" : "MultiSigAccountInfo",
			"payload" : {"multiSigAccAddr":string}
		}
	]
}

参数说明:

参数 类型 说明
multiSigAccAddr string 多重签名账户地址

响应报文:

{
    "id":int32,
	"result" : {
		"createAddr": "1DkrXbz2bK6XMpY4v9z2YUnhwWTXT6V5jd",
		"multiSigAddr": "3GfnDQxxUEmVrkBCk7RfgvTkLrBLEVEzGV",
		"owners": [
			{
				"ownerAddr": "1C5xK2ytuoFqxmVGMcyz9XFKFWcDA8T3rK",
				"weight": 20
			}
		],
		"dailyLimits": [
			{
				"symbol": "BTY",
				"execer": "coins",
				"dailyLimit": uint64,
				"spentToday": uint64,
				"lastday": int64
			}
		],
		"txCount": 1,
		"requiredWeight": 15
	},
   "error" : null
}

参数说明:

参数 类型 说明
createAddr string 创建本多重签名账户的创建者地址
multiSigAddr string 本多重签名账户地址
ownerAddr string owner地址
weight uint64 owner权重
execer string 资产执行器名
symbol string 资产标识
dailyLimit uint64 本资产的每日限额值
spentToday uint64 当天已经花费的资产值
lastDay int64 当天开始时间
txCount uint64 本多重签名账户上的交易数量
requiredWeight uint64 本多重签名账户执行交易需要的权重
3.1.7 查询多重签名账户指定资产当日免密余额 MultiSigAccUnSpentToday

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.Query",
    "params":[
		{
			"execer" : "multisig",
			"funcName" : "MultiSigAccUnSpentToday",
			"payload" : {
				"multiSigAddr":string,
				"assets":{"execer":string,"symbol":string},
				"isAll":bool
			}
		}
	]
}

参数说明:

参数 类型 说明
multiSigAddr string 多重签名账户地址
assets *Assets 资产信息("execer":string,"symbol":string)
isAll bool 是否所有资产,true:所有资产,false:只查询指定资产的

响应报文:

{
    "id":int32,
	"result" : {
		"unSpentAssets":[
			{
				"assets":{"symbol": "BTY","execer": "coins"},
				"amount": uint64
			}
		]
	},
	"error" : null
}

参数说明:

参数 类型 说明
execer string 本多重签名账户资产执行器名
symbol string 本多重签名账户资产标识
amount uint64 本多重签名账户指定资产当日免密余额
3.1.8 查询多重签名账户指定资产信息 MultiSigAccAssets

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.Query",
    "params":[
		{
			"execer" : "multisig",
			"funcName" : "MultiSigAccAssets",
			"payload" : {
				"multiSigAddr":string,
				"assets":{"execer":string,"symbol":string},
				"isAll":bool
			}
		}
	]
}

参数说明:

参数 类型 说明
multiSigAddr string 多重签名账户地址
assets *Assets 资产信息("execer":string,"symbol":string)
isAll bool 是否所有资产,true:所有资产时不需要填写具体的assets信息,false:只查询指定资产的信息

响应报文:

{
    "id":int32,
	"result" : {
		"accAssets":[
			{
				"assets":{"execer":"coins","symbol":"BTY"},
				"account": {
					"frozen":int64,
					"currency":int32,
					"balance":int64,
					"addr":string
				},
				"recvAmount": uint64
			}
		]
	},
	"error" : null
}

参数说明:

参数 类型 说明
execer string 资产执行器名
symbol string 资产标识
frozen int64 冻结的资产
currency int32 coins标识,目前没有使用
balance int64 余额
addr string 查询的账户地址
recvAmount uint64 查询账户收到此资产的所有值
3.1.9 查询指定地址创建的多重签名账户列表 MultiSigAccAllAddress

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.Query",
    "params":[
		{
			"execer" : "multisig",
			"funcName" : "MultiSigAccAllAddress",
			"payload" : {"multiSigAccAddr":"string"}
		}
	]
}

参数说明:

参数 类型 说明
multiSigAccAddr string 创建者地址

响应报文:

{
    "id":int32,
    "result":{
    	"address": ["string"]
	},
    "error":null
}

参数说明:

参数 类型 说明
address string 多重签名账户地址列表
3.1.10 查询owner地址拥有的多重签名账户列表 MultiSigAddresList

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"multisig.MultiSigAddresList",
    "params":[{"data":"string"}]
}

参数说明:

参数 类型 说明
data string owner地址,不指定地址时获取本钱包所有地址拥有的多重签名账户列表:

响应报文:

{
    "id":int32,
	"result" : {
		"items": [
			{
				"multiSigAddr": "3MrcA7jcWNdLYmrbuS5eEVoPbx8BWPGB5F",
				"ownerAddr": "1C5xK2ytuoFqxmVGMcyz9XFKFWcDA8T3rK",
				"weight": 20
			}
		]
	},
	"error" : null
}

参数说明:

参数 类型 说明
multiSigAddr string 多重签名地址
ownerAddr string owner地址地址, 或者空字符串""
weight uint64 owner地址在此多重签名账户中的权重

3.2 owner

3.2.1 多重签名账户增加owner(未签名) MultiSigOwnerOperateTx

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"multisig.MultiSigOwnerOperateTx",
    "params":[
		{
			"multiSigAccAddr":"string",
			"newOwner":"string",
			"newWeight":uint64,
			"operateFlag":uint64
		}
	]
}

参数说明:

参数 类型 是否必填 说明
multiSigAccAddr string 多重签名账户地址
newOwner string 需要添加的owner地址
newWeight uint64 需要添加的owner拥有的权重
operateFlag uint64 owner操作类型:1
oldOwner string 需要删除的owner地址,在该场景中忽略不填

响应报文:

{
    "id":int32,
    "result":"string",
    "error":null
}

参数说明:

参数 类型 说明
result string 返回交易十六进制编码后的字符串
3.2.2 多重签名账户删除owner(未签名) MultiSigOwnerOperateTx

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"multisig.MultiSigOwnerOperateTx",
    "params":[
		{
			"multiSigAccAddr":"string",
			"oldOwner":"string",
			"operateFlag":uint64
		}
	]
}

参数说明:

参数 类型 是否必填 说明
multiSigAccAddr string 多重签名账户地址
newOwner string 需要添加的owner地址,在该场景中忽略不填
newWeight uint64 需要添加的owner拥有的权重,在该场景中忽略不填
operateFlag uint64 owner操作类型:1
oldOwner string 需要删除的owner地址

响应报文:

{
    "id":int32,
    "result":"string",
    "error":null
}

参数说明:

参数 类型 说明
result string 返回交易十六进制编码后的字符串
3.2.3 多重签名账户owner权重修改(未签名) MultiSigOwnerOperateTx

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"multisig.MultiSigOwnerOperateTx",
    "params":[
		{
			"multiSigAccAddr":"string",
			"oldOwner":"string",
			"newWeight":uint64,
			"operateFlag":uint64
		}
	]
}

参数说明:

参数 类型 是否必填 说明
multiSigAccAddr string 多重签名账户地址
newOwner string 需要添加的owner地址,在该场景中忽略不填
newWeight uint64 需要添加的owner拥有的权重
operateFlag uint64 owner操作类型:3
oldOwner string 需要删除的owner地址

响应报文:

{
    "id":int32,
    "result":"string",
    "error":null
}

参数说明:

参数 类型 说明
result string 返回交易十六进制编码后的字符串
3.2.4 多重签名账户owner替换(未签名) MultiSigOwnerOperateTx

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"multisig.MultiSigOwnerOperateTx",
    "params":[
		{
			"multiSigAccAddr":"string",
			"oldOwner":"string",
			"newOwner":"string",
			"operateFlag":uint64
		}
	]
}

参数说明:

参数 类型 是否必填 说明
multiSigAccAddr string 多重签名账户地址
newOwner string 新的owner地址
newWeight uint64 需要添加的owner拥有的权重,在该场景中忽略不填
operateFlag uint64 owner操作类型:4
oldOwner string 需要删除的owner地址

响应报文:

{
    "id":int32,
    "result":"string",
    "error":null
}

参数说明:

参数 类型 说明
result string 返回交易十六进制编码后的字符串

3.3 tx

3.3.1 多重签名账户资产转入(未签名) MultiSigAccTransferInTx

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"multisig.MultiSigAccTransferInTx",
    "params":[
		{
			"symbol":"string",
			"execname":"string",
			"note":"string",
			"to":"string",
			"amount":int64
		}
	]
}

参数说明:

参数 类型 说明
symbol string 资产标识,例如:BTY
execname string 资产执行器名,例如:coins
to string 收账地址,必须是多重签名地址
note string 转账说明
amount int64 转入的资产额度

响应报文:

{
    "id":int32,
    "result":"string",
    "error":null
}

参数说明:

参数 类型 说明
result string 返回交易十六进制编码后的字符串
3.3.2 多重签名账户资产转出(未签名) MultiSigAccTransferOutTx

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"multisig.MultiSigAccTransferOutTx",
    "params":[
		{
			"symbol":"string",
			"execname":"string",
			"note":"string",
			"to":"string",
			"from":"string",
			"amount":int64
		}
	]
}

参数说明:

参数 类型 说明
symbol string 资产标识,例如:BTY
execname string 资产执行器名,例如:coins
from string 出账地址,必须是多重签名地址
to string 收账地址,必须是非多重签名地址
note string 转账说明
amount int64 转入的资产额度

响应报文:

{
    "id":int32,
    "result":"string",
    "error":null
}

参数说明:

参数 类型 说明
result string 返回交易十六进制编码后的字符串
3.3.3 多重签名账户交易确认(未签名) MultiSigConfirmTx

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"multisig.MultiSigConfirmTx",
    "params":[
		{
			"multiSigAccAddr":"string",
			"txId":uint64,
			"confirmOrRevoke":bool
		}
	]
}

参数说明:

参数 类型 说明
multiSigAccAddr string 多重签名地址
txId uint64 需要确认或者撤销的交易index,从0开始
confirmOrRevoke bool 确认/撤销交易。true:确认交易

响应报文:

{
    "id":int32,
    "result":"string",
    "error":null
}

参数说明:

参数 类型 说明
result string 返回交易十六进制编码后的字符串
3.3.4 获取多重签名账户交易数 MultiSigAccTxCount

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.Query",
    "params":[
		{
			"execer" : "multisig",
			"funcName" : "MultiSigAccTxCount",
			"payload" : {"multiSigAccAddr":"string"}
		}
	]
}

参数说明:

参数 类型 说明
multiSigAccAddr string 多重签名账户地址

响应报文:

{
    "id":int32,
   "error":null,
   "result":{"data":int64}
}

参数说明:

参数 类型 说明
data int64 多重签名账户地址个数
3.3.5 获取指定区间的指定状态的多重签名交索引易 MultiSigTxids

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.Query",
    "params":[
		{
			"execer" : "multisig",
			"funcName" : "MultiSigTxids",
			"payload" :{
				"multiSigAddr":"string",
				"fromTxId":uint64,
				"toTxId":uint64,
				"pending":bool,
				"executed":bool
			}
		}
	]
}

参数说明:

参数 类型 说明
multiSigAddr string 多重签名账户地址
fromTxId uint64 多重签名账户交易索引值,fromTxId>=0
toTxId uint64 多重签名账户交易索引,toTxId< MultiSigAccTxCount 获取的交易数
pending bool 未执行的交易
executed bool 已执行的交易

响应报文:

{
    "id":int32,
	"result" :{
		"multiSigAddr": "3GfnDQxxUEmVrkBCk7RfgvTkLrBLEVEzGV",
    	"txids": [0,1]
	},
	"error" : null
}

参数说明:

参数 类型 说明
txids []uint64 多重签名账户交易索引
3.3.6 获取多重签名交信息 MultiSigTxInfo

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.Query",
    "params":[
		{
			"execer" : "multisig",
			"funcName" : "MultiSigTxInfo",
			"payload" : {"multiSigAddr":string,"txId":uint64}
		}
	]
}

参数说明:

参数 类型 说明
multiSigAddr string 多重签名账户地址
txId uint64 多重签名账户交易索引值,fromTxId>=0

响应报文:

{
    "id":int32,
	"result" {
		"txid":uint64,
		"txHash": "d952237fd9a825218b767058946a1047dbdbe166c74e274792d341e81088fbc4",
		"executed": true,
		"txType": 3,
		"multiSigAddr": "3GfnDQxxUEmVrkBCk7RfgvTkLrBLEVEzGV",
		"confirmedOwner": [
			{
				"ownerAddr": "1C5xK2ytuoFqxmVGMcyz9XFKFWcDA8T3rK",
				"weight": 20
			}
		]
	},
	"error" : null
}

参数说明:

参数 类型 说明
txId uint64 多重签名账户交易id值
txHash string 多重签名账户交易hash值
executed bool 多重签名账户交易执行状态,true:已执行,false:未执行
txType uint64 多重签名账户交易类型。1:owner属性相关的交易 2:account属性相关的交易 3:转账相关的交易
multiSigAddr string 多重签名账户地址
confirmedOwner []*Owner 确认此多重签名账户交易的owner列表
ownerAddr string 多重签名账户owner地址
weight uint64 多重签名账户owner权重
3.3.7 获取指定交易被确认的权重信息 MultiSigTxConfirmedWeight

请求报文:

{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.Query",
    "params":[
		{
			"execer" : "multisig",
			"funcName" : "MultiSigTxConfirmedWeight",
			"payload" : {"multiSigAddr":"string",txId":uint64}
		}
	]
}

参数说明:

参数 类型 说明
multiSigAddr string 多重签名账户地址
txId uint64 多重签名账户交易索引值,0 <= fromTxId < MultiSigAccTxCount 获取的交易数

响应报文:

{
    "id":int32,
	"result" :{
		"data": uint64
	},
	"error" : null
}

参数说明:

参数 类型 说明
data uint64 多重签名账户交易被确认的权重
Clone this wiki locally