ENS 团队最初是用一套自己编写的 MultiSig 多重签名合约作为 ENS 根域合约 Root 的控制者,但后来 ENS 团队采用了 Gnosis Safe 服务提供的多重签名合约,也就是将 Root 合约的控制权通过一笔交易转让给了一个 Gnosis Safe 代理合约。在那之后,控制根域的 7 个密钥管理者的就一直使用新的代理合约来签署交易。
尽管如此,ENS 根域最初的管理活动都是通过团队自己编写的那套 MultiSig 多重签名合约来完成的,所以对于 ENS 研究者来说,是有必要了解这个合约的。
介绍
关于 MultiSig-0x91114 合约的几个说明:
- 它是一个多重签名账户合约,并设置了 7 个控制账户;
- 这 7 个账户中的任一账户均可从该合约发起交易,发起合约交易的账户会同时第 1 个为该交易签名;
- 合约交易在 4 个控制账户完成签名后才能生效,也就是除了发起交易的账户之外还需要有 3 个账户签名;
- 第 4 个账户完成签名之后,交易确认完毕,该账户就会自动执行这笔合约交易;
- 合约交易执行后,如果其他账户再次为该合约交易进行签名,就会签名失败。
Multisig 合约的部分关键交易
No. | 合约名称 | 相关交易 | 发送方 | 调用函数 | 备注 |
---|---|---|---|---|---|
1 | MultiSig-0x91114 | 0xe1224 | 0x8472d | 无 | Multisig 合约创建 |
2 | MultiSig-0x91114 | 0x04ee3 | 0xfdb33 | ENS:setSubnodeOwner | 0#:设置 .eth 的所有者为 TempRegistrar-0x18c6c |
3 | MultiSig-0x91114 | 0x6294f | 0xfdb33 | ENS:setSubnodeOwner | 1#:设置 .eth 所有者为 0x00000 |
4 | MultiSig-0x91114 | 0x158de | 0xfdb33 | ENS:setSubnodeOwner | 2#:设置 .eth 所有者为 TempRegistrar-0x6090a |
5 | MultiSig-0x91114 | 0x51589 | 0xfdb33 | ENS:setSubnodeOwner | 3#:设置 .reverse 所有者为 MultiSig-0x91114 |
6 | MultiSig-0x91114 | 0xb0ec5 | 0xfdb33 | ENS:setSubnodeOwner | 4#:设置 .addr.reverse 所有者为 ReverseRegistrar-0x9062c |
7 | MultiSig-0x91114 | 0xc2c1e | 0xfdb33 | MultiSig:replaceOwner | 5#:将多重账户中 0x5c359 替换为 0x3ac6c |
8 | MultiSig-0x91114 | 0x5a467 | 0xfdb33 | ENS:setSubnodeOwner | 6#:设置 .xyz 所有者为 DNSRegistrar-0xf7004 |
9 | MultiSig-0x91114 | 0xdad5d | 0xfdb33 | ENS:setSubnodeOwner | 7#:设置 .luxe 所有者为 0x765b1 |
10 | MultiSig-0x91114 | 0x71e94 | 0xfdb33 | ENS:setSubnodeOwner | 8#:设置 .kred 所有者为 0x56ca9 |
11 | MultiSig-0x91114 | 0xe4a5b | 0xfdb33 | ENS:setSubnodeOwner | 9#:设置 .club 所有者为 0x1eb4b |
12 | MultiSig-0x91114 | 0x9f790 | 0xec186 | ENS:setSubnodeOwner | a#:设置 .eth 所有者为 BaseRegImp-0xfac7b |
13 | MultiSig-0x91114 | 0x092ba | 0xec186 | BaseRegImp:setResolver | b#:设置 .eth 的解析器为 OwnedResolver-0x97683 |
14 | MultiSig-0x91114 | 0x4ee5d | 0xfdb33 | ENS:setOwner | c#:设置根域的所有者为 Root-0x28508 |
15 | MultiSig-0x91114 | 0xe30c2 | 0xfdb33 | Root:setController | d#:设置 NameBazaarRescue-0x2a2a1 为 Root 管理员 |
16 | MultiSig-0x91114 | 0xb407a | 0xfdb33 | BaseRegImp:addController | e#:添加 ShortNameClaims-0xf7c83 为 BaseRegImp-0xfac7b 管理员 |
17 | MultiSig-0x91114 | 0xd7d13 | 0xfdb33 | MultiSig:replaceOwner | f# (!):将多重账户中 0xfdb33 替换为 0xb8c2c |
18 | MultiSig-0x91114 | 0x57d9f | 0xfdb33 | MultiSig:replaceOwner | 10# (!):将多重账户中 0xfdb33 替换为 0xb8c2c |
19 | MultiSig-0x91114 | 0x5e372 | 0xfdb33 | Root:setSubnodeOwner | 11#:设置 .art 所有者为 0xbaf54 |
20 | MultiSig-0x91114 | 0xbcb42 | 0xfdb33 | BaseRegImp:addController | 12#:添加 ShortNameAuctionController 为 BaseRegImp-0xfac7b 管理员 |
21 | MultiSig-0x91114 | 0x00acd | 0xfdb33 | BaseRegImp:addController | 13#:添加 ETHRegistrarController-0xb22c1 为 BaseRegImp-0xfac7b 管理员 |
22 | MultiSig-0x91114 | 0xe2957 | 0xfdb33 | BaseRegImp:addController | 14# (?):添加 ETHRegistrarController-0xd931ab 为 BaseRegImp 管理员 |
MultiSig 合约交易解析
账户 0xfdb33 在 May-29-2017 02:06:25 PM 发起了一笔交易: 0x51589 ,交易的数据输入如下:
Function: submitTransaction(address destination, uint256 value, bytes data) |
[0] 提供 destination
参数,即该交易的目标地址是 0x31415 ,这是 ENS 合约的地址 ;
[1] 提供 value
参数,即该交易发送的 ETH 数量为 0 ;
[3] 十六进制 64 转换为十进制为 100,表示负载数据为 100 字节,包括函数 ID(分配 4 字节)及其 3 个参数(每个参数分配 32 字节);
[4] - [7] 提供 data
参数,包含的信息如下:
- 调用目标合约中 ID 为 06ab5923 的函数,即 set-subnode-owner 函数
- 该函数需要接收 3 个参数
node
label
new-owner
node
参数的值为:00000...0000
label
参数的值为:dec08...f7b3
,这是reverse
的哈希new-owner
参数的值为:91114...d667
从以上信息中,可以判断出来,该交易执行的是将顶级名称 .reverse
的所有者设置为 0x91114...d667
(即 Multisig 多签合约)。
MultiSig 合约的 7 个密钥管理者账户
通过这个页面上的 getOwners
选项卡可以查看当前 7 个管理者的以太坊地址。
下表中是 ENS 根域最初的 7 个管理员地址。以下介绍的合约及相关内容已经过时,该内容只作为学习研究 ENS 及其发展过程使用。
No. | 初始账户 | 当前账户 | 备注 |
---|---|---|---|
1 | 0xfdb33 | 0xfdb33 | |
2 | 0x55e27 | 0x55e27 | |
3 | 0x24b13 | 0x24b13 | |
4 | 0x98287 | 0x98287 | |
5 | 0xc1eaf | 0xc1eaf | |
6 | 0xec186 | 0xec186 | |
7 | 0x5c359 | 0x3ac6c | 变更于 MultiSig 合约的 5# 交易 |