1. 引言
账号为以太坊的主要元素,用于持有资金和运行交易,读或写。若将以太坊看成是状态机,则写交易会修改其状态。执行以太坊交易需要向矿工支付gas费。
以太坊有2种账号类型:
- 1)Externally Owned Accounts (EOA) 或称为钱包:以公私钥对标记。可持有资金和执行交易。如给另一钱包转ETH 或 调用某智能合约来创建NFT。MetaMask为当前最流行的以太坊钱包。
- 2)合约账号 或称为智能合约:没有私钥,但有code,可通过调用方法来执行相应的code。
若丢失了私钥,则永远丢失了该钱包的访问控制权。如何来避免呢?答案就是多签钱包。
2. 多签钱包
采用智能合约来创建一种新的账号类型——多签钱包。该钱包具有多个秘钥。典型的多签配置可为由3个owners,仅需要其中的2个秘钥就可转账。
多签钱包非常灵活,可由公司或个人用于不同场景:
- 1)可安全的持有资金:需要由大多数的owners同意才能转账,单一owner无法控制资金。
- 2)执行敏感交易:在大多数owners同意的情况下执行敏感交易。
- 3)个人可以使用multisig来设置密钥冗余。多签的一个属性是,若你丢失了一个秘钥,你仍然可以用户剩余的2个秘钥来恢复钱包。但是若丢失了2个,则没办法了。
3. Gnosis Safe
Gnosis Safe为以太坊的多签钱包,被多个公司信任。截止2021年5月,它保护了220亿美金资产的安全。
Gnosis 是第一个去中心化预测时长。Gnosis技术团队开源了Gnosis Safe工具:
- https://github.com/gnosis/safe-contracts
可将Gnosis Safe可成是创建和管理多签钱包的工具集:
- 1)Safe Contracts:为多签合约,支持持有、转移资金(如ETH,ERC20,NFT)和执行交易。可在链上和链下执行交易。
- 2)Safe UI:为简单的React UI,仅需要60秒来创建一个多签,当前已部署在主网 和 Rinkeby测试网。
- 3)Safe交易服务:为由Gnosis团队维护的API,可用于Safe UI来存储链下签名。也在主网和测试网上部署。
- 4)Safe Apps:Gnosis支持将其功能进行扩展,添加自定义功能,如治理管理、公平拍卖等等。
Gnosis Safe具有2条签名流程:【均使用EIP712——标准的签名方法,创建a struct with the transaction arguments, hashes them with keccak256 and then signs them with secp256k1。】
- 链上签名:每笔签名交易都花费gas,更昂贵。
- 链下签名
2.1 链上签名
owner对交易签名,并调用Safe.approveHash
函数。当阈值达到时,最后的签名者可调用Safe.executeTransaction
。每笔交易都花费gas。因此整个链上签名流程更昂贵。
2.2 链下签名
owners在链下对交易进行签名并存储在某处,最后的签名者可调用Safe。executeTransaction
函数,将所有的签名作为参数传入来执行交易。
链下签名需要更少的gas,但要求协调收集签名,Safe交易服务 可实现相应的协调功能。
不过,Safe交易服务 为 public API,意味着其在链上执行之前,任何人都可看到Safe中的所有交易。某人可对交易进行front-run。
参考资料
[1] 2021年5月博客 Multisig transactions with Gnosis Safe