在以太坊中,Multisig Wallet往往是一个智能合约,而合约要实现多签管理,有两大种路径分别对应
Ownbit Multisig Wallet使用持签授权法:用你的私钥对相应的花费(金额、目标地址等等)进行签名,并给出签名结果
Gnosis Multisig Wallet使用交易授权法:用你的私钥发送一笔以太坊交易,去调用某个特定接口,并给予特定参数;
Gnosis的早期版本实现V1版
整体分成4个阶段:初始化阶段→提案阶段→投票阶段→执行阶段
初始化阶段:定义若干管理员_owners,后续的交易仅这些地址可调用
提案阶段:任意管理员之一通过submitTransaction方法提交交易,得到一个交易号transactionId,提交的交易需要携带destination,value,data这三个参数
投票阶段:其余管理员通过提交 ETH 交易来投票,调用合约的confirmTransaction方法
执行阶段:当confirm的人数达到最低要求,executeTransaction的内部逻辑将被触发,
最终合约通过call远程调用执行任意操作
2、为何可以执行任意操作?
因为其中destination是目标地址,value是金额,data是交易附带的参数
在一笔以太坊交易中,Data字段是交易的附带信息,有明确的规则控制,比如下图是最常规的ERC20转账交易,其在Etherscan解析后的展示逻辑如下,而其实交易解析前的原文是
其解析的原理是,依据前8位对应合约的ABI文件可以得知对应的函数名与参数列表,后续每64位按不同参数类型做不同转换做解析
所以,对于提案,只需要清晰的规定,目标地址、金额、交易附带参数,即可执行任意操作
3、逐步改版成类Ownbit的形式
核心的GnosisV1版本实现逻辑,其实后来他已经逐步改版成类Ownbit的形式,采用持签验签的模式了
主要原因是
用发送交易代表提案和投票,有着简单易懂规避了复杂签名计算,且全程线上实现任何时候追溯都有据可查等优势,但是缺点也很显著
一次提案需要多人交易成本高昂
最后投票者gas费更高,即成本不平衡
再交易实际逻辑在data字段中,难以阅读理解
所以用户利弊成本权衡,最终放弃了交易确认法,让他走向持签验签的模式。