数据存储模块
AccountStorage合约中有4个多层mapping,用来存储数据。
数据 | 定义 | 含义 | 备注 |
一组公钥 | mapping (address => mapping(uint256 => KeyItem)) keyData; struct KeyItem { address pubKey; uint256 status; } | MYKEY账户地址=>序号index=>公钥结构体(包含公钥和状态) | 第0位是admin key,第1位往后是operation key。 默认状态为0;状态为1是冻结状态。 |
紧急联系人 | mapping (address => mapping(uint256 => BackupAccount)) backupData; struct BackupAccount { address backup; uint256 effectiveDate; uint256 expiryDate; } | MYKEY账户地址=>序号index=>紧急联系人结构体(包含紧急联系人账户地址,生效时间,失效时间) | index为0~5,最多6个紧急联系人。 添加紧急联系人(addBackup)和删除紧急联系人(removeBackup)都有21天的延时,因此 addBackup操作会设置生效时间; removeBackup操作会设置失效时间; |
延时动作 | mapping (address => mapping(bytes4 => DelayItem)) delayData; struct DelayItem { bytes32 hash; uint256 dueTime; } | MYKEY账户地址=>动作ID=>延时结构体(包含动作哈希,到期时间) | 动作ID是动作方法的唯一标志,与动作方法一一对应,长度4字节。 如bytes4(keccak256("changeAdminKey(address,address)")) |
多签提案 | mapping (address => mapping(address => mapping(bytes4 => Proposal))) proposalData; struct Proposal { bytes32 hash; address[] approval; } | client:多签提案当事人; backup:当事人的紧急联系人; proposer:多签提案发起人; client账户地址=>proposer账户地址=>动作ID=>提案结构体(包含动作哈希,已赞成的紧急联系人的数组) | 动作哈希是提案通过后将要调用的函数及其参数的哈希,如keccak256(abi.encodePacked('changeAdminKey', account, pkNew))。 提案分两种:
|
Last updated