0%

OpenZeppelin-代码库QuickView

Pre:

OpenZeppelin代码库概览,了解有什么功能的库,方便后续使用

文件夹:

folder 模块功能 简述
Access 权限控制 限制谁可以访问合约功能或何时可以访问的方法
crosschain 跨链 代币可跨链
finance 金融系统原型 支付拆分模式(单笔支付可自定义比例拆分成ether、erc20)、退休金模式(合约锁仓、按自定义时间释放给受益人)
governance 链上治理 链上投票协议
interfaces 标准接口 各类erc提案的标准接口库
metatx 元交易 ——
mocks 模拟 ——
proxy 可升级的代理合约模式 Transparent(可由管理员升级的代理)、UUPS(基于UUPS设计的可升级机制)
security 安全库 常见的安全实践:防重入、紧急响应机制
token 代币 ERC20(可替代代币)、ERC721(不可替代代币)、ERC1155(可/半可/不可替代代币)、ERC777(erc20+转账通知机制)
utils 实用工具 处理新数据类型、签名验证、安全数学计算等
vendor 第三方合约库 arbitrum、compound、optimism等

QuickView:

access (权限控制)

1
2
3
4
5
6
7
├── access (权限控制)
│   ├── AccessControl.sol (基于角色的访问控制机制)
│   ├── AccessControlCrossChain.sol (扩展:跨链)
│   ├── AccessControlEnumerable.sol (扩展:可枚举各角色的成员)
│   ├── IAccessControl.sol
│   ├── IAccessControlEnumerable.sol
│   ├── Ownable.sol (管理员访问控制机制)

crosschain (跨链)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
├── crosschain (跨链)
│   ├── CrossChainEnabled.sol (接收跨链消息时的控制执行流程)
│   │
│   ├── amb (在两个evm链之间中继任意数据)
│   │   ├── CrossChainEnabledAMB.sol (基于amb bridge)
│   │   └── LibAMB.sol
│   ├── arbitrum
│   │   ├── CrossChainEnabledArbitrumL1.sol (基于ArbitrumL1 bridge)
│   │   ├── CrossChainEnabledArbitrumL2.sol (基于ArbitrumL2 bridge)
│   │   ├── LibArbitrumL1.sol
│   │   └── LibArbitrumL2.sol
│   ├── errors.sol
│   ├── optimism
│   │   ├── CrossChainEnabledOptimism.sol (基于Optimism bridge)
│   │   └── LibOptimism.sol
│   └── polygon
│   └── CrossChainEnabledPolygonChild.sol (基于Polygon bridge)

finance (金融系统原型)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
├── finance (金融系统原型)
│   ├── PaymentSplitter.sol (支付拆分模式:单笔支付可自定义比例拆分成ether、erc20)
│   └── VestingWallet.sol (退休金模式:锁仓、按自定义时间释放给受益人)
├── governance (链上治理)
│   ├── Governor.sol (抽象合约:只包含治理系统的核心部分,需要用其他模块进行拓展)
│   ├── IGovernor.sol
│   ├── README.adoc
│   ├── TimelockController.sol (时间锁控制器)
│   ├── compatibility (兼容层)
│   │   ├── GovernorCompatibilityBravo.sol
│   │   └── IGovernorCompatibilityBravo.sol
│   ├── extensions (拓展方案)
│   │   ├── GovernorCountingSimple.sol (简单的投票机制,有3个投票选项:反对、赞成和弃权)
│   │   ├── GovernorPreventLateQuorum.sol (防止持票巨鲸最后时刻控制投票结果)
│   │   ├── GovernorProposalThreshold.sol (限制具有最低余额的代币持有者的提案)
│   │   ├── GovernorSettings.sol (可更新治理方案的设置)
│   │   ├── GovernorTimelockCompound.sol (加上复合时间锁)
│   │   ├── GovernorTimelockControl.sol (加上时间锁)
│   │   ├── GovernorVotes.sol (从代币中提取投票权重)
│   │   ├── GovernorVotesComp.sol (从多个代币中提取投票权重)
│   │   ├── GovernorVotesQuorumFraction.sol (从代币和法定人数中提取投票权重)
│   │   └── IGovernorTimelock.sol
│   └── utils
│   ├── IVotes.sol
│   └── Votes.sol (抽象合约:投票权可转移/委托,可汇集给代表代投)

interfaces (标准接口):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
├── interfaces (标准接口)
│   ├── IERC1155.sol (单合约可存多个代币)
│   ├── IERC1155MetadataURI.sol
│   ├── IERC1155Receiver.sol
│   ├── IERC1271.sol (让智能合约验证其它智能合约的签名)
│   ├── IERC1363.sol (在单个交易中,在转移/批准后允许回调)
│   ├── IERC1363Receiver.sol
│   ├── IERC1363Spender.sol
│   ├── IERC165.sol (检测合约实现了哪些接口)
│   ├── IERC1820Implementer.sol
│   ├── IERC1820Registry.sol
│   ├── IERC20.sol (可替代代币)
│   ├── IERC20Metadata.sol
│   ├── IERC2981.sol (NFT版权标准)
│   ├── IERC3156.sol (闪电贷)
│   ├── IERC3156FlashBorrower.sol
│   ├── IERC3156FlashLender.sol
│   ├── IERC4626.sol (代币化的金库)
│   ├── IERC721.sol (不可替代代币)
│   ├── IERC721Enumerable.sol
│   ├── IERC721Metadata.sol
│   ├── IERC721Receiver.sol
│   ├── IERC777.sol (erc20+转账通知机制)
│   ├── IERC777Recipient.sol
│   ├── IERC777Sender.sol
│   ├── draft-IERC1822.sol
│   └── draft-IERC2612.sol

metatx (元交易):

1
2
3
├── metatx (元交易)
│   ├── ERC2771Context.sol
│   └── MinimalForwarder.sol

mocks (模拟)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
│   
├── mocks (模拟)
│   ├── AccessControlCrossChainMock.sol
│   ├── AccessControlEnumerableMock.sol
│   ├── AccessControlMock.sol
│   ├── AddressImpl.sol
│   ├── ArraysImpl.sol
│   ├── BadBeacon.sol
│   ├── Base64Mock.sol
│   ├── BitmapMock.sol
│   ├── CallReceiverMock.sol
│   ├── CheckpointsImpl.sol
│   ├── ClashingImplementation.sol
│   ├── ClonesMock.sol
│   ├── ConditionalEscrowMock.sol
│   ├── ContextMock.sol
│   ├── CountersImpl.sol
│   ├── Create2Impl.sol
│   ├── DoubleEndedQueueMock.sol
│   ├── DummyImplementation.sol
│   ├── ECDSAMock.sol
│   ├── EIP712External.sol
│   ├── ERC1155BurnableMock.sol
│   ├── ERC1155Mock.sol
│   ├── ERC1155PausableMock.sol
│   ├── ERC1155ReceiverMock.sol
│   ├── ERC1155SupplyMock.sol
│   ├── ERC1155URIStorageMock.sol
│   ├── ERC1271WalletMock.sol
│   ├── ERC165
│   │   ├── ERC165InterfacesSupported.sol
│   │   ├── ERC165MissingData.sol
│   │   └── ERC165NotSupported.sol
│   ├── ERC165CheckerMock.sol
│   ├── ERC165Mock.sol
│   ├── ERC165StorageMock.sol
│   ├── ERC1820ImplementerMock.sol
│   ├── ERC20BurnableMock.sol
│   ├── ERC20CappedMock.sol
│   ├── ERC20DecimalsMock.sol
│   ├── ERC20FlashMintMock.sol
│   ├── ERC20Mock.sol
│   ├── ERC20PausableMock.sol
│   ├── ERC20PermitMock.sol
│   ├── ERC20SnapshotMock.sol
│   ├── ERC20TokenizedVaultMock.sol
│   ├── ERC20VotesCompMock.sol
│   ├── ERC20VotesMock.sol
│   ├── ERC20WrapperMock.sol
│   ├── ERC2771ContextMock.sol
│   ├── ERC3156FlashBorrowerMock.sol
│   ├── ERC721BurnableMock.sol
│   ├── ERC721EnumerableMock.sol
│   ├── ERC721Mock.sol
│   ├── ERC721PausableMock.sol
│   ├── ERC721ReceiverMock.sol
│   ├── ERC721RoyaltyMock.sol
│   ├── ERC721URIStorageMock.sol
│   ├── ERC721VotesMock.sol
│   ├── ERC777Mock.sol
│   ├── ERC777SenderRecipientMock.sol
│   ├── EnumerableMapMock.sol
│   ├── EnumerableSetMock.sol
│   ├── EtherReceiverMock.sol
│   ├── GovernorCompMock.sol
│   ├── GovernorCompatibilityBravoMock.sol
│   ├── GovernorMock.sol
│   ├── GovernorPreventLateQuorumMock.sol
│   ├── GovernorTimelockCompoundMock.sol
│   ├── GovernorTimelockControlMock.sol
│   ├── GovernorVoteMock.sol
│   ├── GovernorWithParamsMock.sol
│   ├── InitializableMock.sol
│   ├── MathMock.sol
│   ├── MerkleProofWrapper.sol
│   ├── MulticallTest.sol
│   ├── MulticallTokenMock.sol
│   ├── MultipleInheritanceInitializableMocks.sol
│   ├── OwnableMock.sol
│   ├── PausableMock.sol
│   ├── PullPaymentMock.sol
│   ├── ReentrancyAttack.sol
│   ├── ReentrancyMock.sol
│   ├── RegressionImplementation.sol
│   ├── SafeCastMock.sol
│   ├── SafeERC20Helper.sol
│   ├── SafeMathMock.sol
│   ├── SignatureCheckerMock.sol
│   ├── SignedMathMock.sol
│   ├── SignedSafeMathMock.sol
│   ├── SingleInheritanceInitializableMocks.sol
│   ├── StorageSlotMock.sol
│   ├── StringsMock.sol
│   ├── TimersBlockNumberImpl.sol
│   ├── TimersTimestampImpl.sol
│   ├── UUPS
│   │   ├── UUPSLegacy.sol
│   │   └── UUPSUpgradeableMock.sol
│   ├── VotesMock.sol
│   ├── compound
│   │   └── CompTimelock.sol
│   ├── crosschain
│   │   ├── bridges.sol
│   │   └── receivers.sol
│   └── wizard
│   ├── MyGovernor1.sol
│   ├── MyGovernor2.sol
│   └── MyGovernor3.sol

proxy (代理模式):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
├── proxy (代理模式)
│   ├── Clones.sol (部署最简单代理合约的标准)
│   ├── ERC1967
│   │   ├── ERC1967Proxy.sol (调用委托给可更改的执行合约,防存储冲突)
│   │   └── ERC1967Upgrade.sol
│   ├── Proxy.sol
│   ├── beacon
│   │   ├── BeaconProxy.sol (执行合约地址存储在uint256(keccak256('eip1967.proxy.beacon')) - 1中,防存储冲突)
│   │   ├── IBeacon.sol
│   │   └── UpgradeableBeacon.sol
│   ├── transparent (透明代理)
│   │   ├── ProxyAdmin.sol
│   │   └── TransparentUpgradeableProxy.sol (可由管理员升级的代理。管理员可以访问管理功能,调用不会被转发)
│   └── utils
│   ├── Initializable.sol (基础合约,用于编写可升级合约)
│   └── UUPSUpgradeable.sol (为 UUPS 代理设计的可升级机制)

security (安全机制库)

1
2
3
4
├── security (安全机制库)
│   ├── Pausable.sol (一种可用于避免重入攻击的模式)
│   ├── PullPayment.sol (在某些功能期间可以防止重入的修饰符)
│   └── ReentrancyGuard.sol (一种常见的紧急响应机制,可以在修复待处理时暂停合约)

token (代币)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
├── token (代币)
│   ├── ERC1155
│   │   ├── ERC1155.sol
│   │   ├── IERC1155.sol
│   │   ├── IERC1155Receiver.sol
│   │   ├── extensions (拓展)
│   │   │   ├── ERC1155Burnable.sol (可销毁)
│   │   │   ├── ERC1155Pausable.sol (可暂停)
│   │   │   ├── ERC1155Supply.sol (可跟踪每个id的总供应量)
│   │   │   ├── ERC1155URIStorage.sol (可管理uri的存储)
│   │   │   └── IERC1155MetadataURI.sol
│   │   ├── presets
│   │   │   ├── ERC1155PresetMinterPauser.sol
│   │   │   └── README.md
│   │   └── utils
│   │   ├── ERC1155Holder.sol
│   │   └── ERC1155Receiver.sol
│   ├── ERC20 (同质化代币)
│   │   ├── ERC20.sol
│   │   ├── IERC20.sol
│   │   ├── extensions (拓展)
│   │   │   ├── ERC20Burnable.sol (销毁自己的代币)
│   │   │   ├── ERC20Capped.sol (在铸币时对总供应量设定一个不可变的上限值)
│   │   │   ├── ERC20FlashMint.sol (支持闪电贷)
│   │   │   ├── ERC20Pausable.sol (可暂停)
│   │   │   ├── ERC20Snapshot.sol (有效存储过去的代币余额/供应量,以便以后随时查询)
│   │   │   ├── ERC20TokenizedVault.sol
│   │   │   ├── ERC20Votes.sol (支持投票和投票委托)
│   │   │   ├── ERC20VotesComp.sol (支持投票和投票委托,兼容Compound的token,有uint96限制)
│   │   │   ├── ERC20Wrapper.sol
│   │   │   ├── IERC20Metadata.sol
│   │   │   ├── draft-ERC20Permit.sol
│   │   │   └── draft-IERC20Permit.sol
│   │   ├── presets (预设、已废弃)
│   │   │   ├── ERC20PresetFixedSupply.sol (预设固定供应量)
│   │   │   ├── ERC20PresetMinterPauser.sol
│   │   │   └── README.md
│   │   └── utils
│   │   ├── SafeERC20.sol
│   │   └── TokenTimelock.sol (时间锁)
│   ├── ERC721 非同质化代币
│   │   ├── ERC721.sol
│   │   ├── IERC721.sol
│   │   ├── IERC721Receiver.sol
│   │   ├── extensions (拓展)
│   │   │   ├── ERC721Burnable.sol (可销毁)
│   │   │   ├── ERC721Enumerable.sol
│   │   │   ├── ERC721Pausable.sol (可暂停)
│   │   │   ├── ERC721Royalty.sol ()
│   │   │   ├── ERC721URIStorage.sol (可管理uri的存储)
│   │   │   ├── IERC721Enumerable.sol
│   │   │   ├── IERC721Metadata.sol
│   │   │   └── draft-ERC721Votes.sol
│   │   ├── presets
│   │   │   └── ERC721PresetMinterPauserAutoId.sol
│   │   └── utils
│   │   └── ERC721Holder.sol
│   ├── ERC777 (ERC20+转账通知机制)
│   │   ├── ERC777.sol
│   │   ├── IERC777.sol
│   │   ├── IERC777Recipient.sol
│   │   ├── IERC777Sender.sol
│   │   └── presets
│   │   └── ERC777PresetFixedSupply.sol
│   └── common
│   └── ERC2981.sol

utils (实用工具库)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

├── utils (实用工具库)
│   ├── Address.sol
│   ├── Arrays.sol
│   ├── Base64.sol
│   ├── Checkpoints.sol
│   ├── Context.sol
│   ├── Counters.sol
│   ├── Create2.sol
│   ├── Multicall.sol
│   ├── README.adoc
│   ├── StorageSlot.sol
│   ├── Strings.sol
│   ├── Timers.sol
│   ├── cryptography
│   │   ├── ECDSA.sol
│   │   ├── MerkleProof.sol
│   │   ├── SignatureChecker.sol
│   │   └── draft-EIP712.sol
│   ├── escrow
│   │   ├── ConditionalEscrow.sol
│   │   ├── Escrow.sol
│   │   └── RefundEscrow.sol
│   ├── introspection
│   │   ├── ERC165.sol
│   │   ├── ERC165Checker.sol
│   │   ├── ERC165Storage.sol
│   │   ├── ERC1820Implementer.sol
│   │   ├── IERC165.sol
│   │   ├── IERC1820Implementer.sol
│   │   └── IERC1820Registry.sol
│   ├── math
│   │   ├── Math.sol
│   │   ├── SafeCast.sol
│   │   ├── SafeMath.sol
│   │   ├── SignedMath.sol
│   │   └── SignedSafeMath.sol
│   └── structs
│   ├── BitMaps.sol
│   ├── DoubleEndedQueue.sol
│   ├── EnumerableMap.sol
│   └── EnumerableSet.sol

vendor (第三方库)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
└── vendor (第三方库)
├── amb
│   └── IAMB.sol
├── arbitrum
│   ├── IArbSys.sol
│   ├── IBridge.sol
│   ├── IInbox.sol
│   ├── IMessageProvider.sol
│   └── IOutbox.sol
├── compound
│   └── ICompoundTimelock.sol
│  
├── optimism
│   └── ICrossDomainMessenger.sol

└── polygon
└── IFxMessageProcessor.sol
  • EIP-Ethereum Improvement Proposals 以太坊改进提案

  • ERC-Ethereum Request for Comment 以太坊意见征求稿

Refs: