本文档介绍了OpenZeppelin Contracts库中的预设合约,这些合约集成了不同的以太坊标准,包括ERC20PresetMinterPauser、ERC721PresetMinterPauserAutoId、ERC1155PresetMinterPauser、ERC20PresetFixedSupply 和ERC777PresetFixedSupply等,并具有自定义扩展和模块,展示了常见的可直接部署的配置,适用于快速原型设计、测试和生产环境。
你当前阅读的不是此文档的最新版本。5.x 是当前版本。
在 https://docs.openzeppelin.com/contracts/api/presets 查看此文档效果更佳 |
这些合约集成了不同的以太坊标准 (ERC),并带有自定义扩展和模块,展示了常见的配置,无需编写任何 Solidity 代码即可部署。
它们可以按原样用于快速原型设计和测试,但也适用于生产环境。
中级和高级用户可以将这些作为编写自己的合约的起点,并根据需要使用自定义功能对其进行扩展。 |
ERC20PresetMinterPauser
ERC20
token,包括:
持有者销毁其 token 的能力
一个允许 token 铸造(创建)的 矿工(minter) 角色
一个允许停止所有 token 转移的 暂停者(pauser) 角色
此合约使用 AccessControl
通过使用不同的角色来锁定许可功能 - 有关详细信息,请查阅其文档。
部署合约的帐户将被授予 矿工 和 暂停者 角色,以及默认的 管理员 角色,这将使其能够将 矿工 和 暂停者 角色授予其他帐户。
函数
可暂停
ERC20Burnable
ERC20
AccessControl
事件
Pausable
IERC20
AccessControl
constructor(string name, string symbol)
public授予部署合约的帐户 DEFAULT_ADMIN_ROLE
、MINTER_ROLE
和 PAUSER_ROLE
。
mint(address to, uint256 amount)
public为 to
创建 amount
个新 token。
参考 ERC20._mint
。
要求:
MINTER_ROLE
。
##### `pause()` public
暂停所有 token 转移。
参考 [`ERC20Pausable`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC20#ERC20Pausable) 和 [`Pausable._pause`](https://docs.openzeppelin.com/contracts/3.x/api/utils#Pausable-_pause--)。
要求:
- 调用者必须具有 `PAUSER_ROLE`。
unpause()
public取消暂停所有 token 转移。
参考 ERC20Pausable
和 Pausable._unpause
。
要求:
PAUSER_ROLE
。
##### `_beforeTokenTransfer(address from, address to, uint256 amount)` internal
#### `ERC721PresetMinterPauserAutoId`
[`ERC721`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721) token,包括:
- 持有者销毁其 token 的能力
- 一个允许 token 铸造(创建)的 **矿工(minter)** 角色
- 一个允许停止所有 token 转移的 **暂停者(pauser)** 角色
- token ID 和 URI 自动生成
此合约使用 [`AccessControl`](https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl) 通过使用不同的角色来锁定许可功能 - 有关详细信息,请查阅其文档。
部署合约的帐户将被授予 **矿工** 和 **暂停者** 角色,以及默认的 **管理员** 角色,这将使其能够将 **矿工** 和 **暂停者** 角色授予其他帐户。
函数
- [`constructor(name, symbol, baseURI)`](https://docs.openzeppelin.com/contracts/3.x/api/presets#ERC721PresetMinterPauserAutoId-constructor-string-string-string-)
- [`mint(to)`](https://docs.openzeppelin.com/contracts/3.x/api/presets#ERC721PresetMinterPauserAutoId-mint-address-)
- [`pause()`](https://docs.openzeppelin.com/contracts/3.x/api/presets#ERC721PresetMinterPauserAutoId-pause--)
- [`unpause()`](https://docs.openzeppelin.com/contracts/3.x/api/presets#ERC721PresetMinterPauserAutoId-unpause--)
- [`_beforeTokenTransfer(from, to, tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/presets#ERC721PresetMinterPauserAutoId-_beforeTokenTransfer-address-address-uint256-)
可暂停
- [`paused()`](https://docs.openzeppelin.com/contracts/3.x/api/utils#Pausable-paused--)
- [`_pause()`](https://docs.openzeppelin.com/contracts/3.x/api/utils#Pausable-_pause--)
- [`_unpause()`](https://docs.openzeppelin.com/contracts/3.x/api/utils#Pausable-_unpause--)
ERC721Burnable
- [`burn(tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721Burnable-burn-uint256-)
ERC721
- [`balanceOf(owner)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-balanceOf-address-)
- [`ownerOf(tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-ownerOf-uint256-)
- [`name()`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-name--)
- [`symbol()`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-symbol--)
- [`tokenURI(tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-tokenURI-uint256-)
- [`baseURI()`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-baseURI--)
- [`tokenOfOwnerByIndex(owner, index)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-tokenOfOwnerByIndex-address-uint256-)
- [`totalSupply()`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-totalSupply--)
- [`tokenByIndex(index)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-tokenByIndex-uint256-)
- [`approve(to, tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-approve-address-uint256-)
- [`getApproved(tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-getApproved-uint256-)
- [`setApprovalForAll(operator, approved)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-setApprovalForAll-address-bool-)
- [`isApprovedForAll(owner, operator)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-isApprovedForAll-address-address-)
- [`transferFrom(from, to, tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-transferFrom-address-address-uint256-)
- [`safeTransferFrom(from, to, tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-safeTransferFrom-address-address-uint256-)
- [`safeTransferFrom(from, to, tokenId, _data)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-safeTransferFrom-address-address-uint256-bytes-)
- [`_safeTransfer(from, to, tokenId, _data)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_safeTransfer-address-address-uint256-bytes-)
- [`_exists(tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_exists-uint256-)
- [`_isApprovedOrOwner(spender, tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_isApprovedOrOwner-address-uint256-)
- [`_safeMint(to, tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_safeMint-address-uint256-)
- [`_safeMint(to, tokenId, _data)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_safeMint-address-uint256-bytes-)
- [`_mint(to, tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_mint-address-uint256-)
- [`_burn(tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_burn-uint256-)
- [`_transfer(from, to, tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_transfer-address-address-uint256-)
- [`_setTokenURI(tokenId, _tokenURI)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_setTokenURI-uint256-string-)
- [`_setBaseURI(baseURI_)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_setBaseURI-string-)
- [`_approve(to, tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_approve-address-uint256-)
ERC165
- [`supportsInterface(interfaceId)`](https://docs.openzeppelin.com/contracts/3.x/api/introspection#ERC165-supportsInterface-bytes4-)
- [`_registerInterface(interfaceId)`](https://docs.openzeppelin.com/contracts/3.x/api/introspection#ERC165-_registerInterface-bytes4-)
AccessControl
- [`hasRole(role, account)`](https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-hasRole-bytes32-address-)
- [`getRoleMemberCount(role)`](https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-getRoleMemberCount-bytes32-)
- [`getRoleMember(role, index)`](https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-getRoleMember-bytes32-uint256-)
- [`getRoleAdmin(role)`](https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-getRoleAdmin-bytes32-)
- [`grantRole(role, account)`](https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-grantRole-bytes32-address-)
- [`revokeRole(role, account)`](https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-revokeRole-bytes32-address-)
- [`renounceRole(role, account)`](https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-renounceRole-bytes32-address-)
- [`_setupRole(role, account)`](https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-_setupRole-bytes32-address-)
- [`_setRoleAdmin(role, adminRole)`](https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-_setRoleAdmin-bytes32-bytes32-)
事件
Pausable
- [`Paused(account)`](https://docs.openzeppelin.com/contracts/3.x/api/utils#Pausable-Paused-address-)
- [`Unpaused(account)`](https://docs.openzeppelin.com/contracts/3.x/api/utils#Pausable-Unpaused-address-)
IERC721
- [`Transfer(from, to, tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#IERC721-Transfer-address-address-uint256-)
- [`Approval(owner, approved, tokenId)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#IERC721-Approval-address-address-uint256-)
- [`ApprovalForAll(owner, operator, approved)`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#IERC721-ApprovalForAll-address-address-bool-)
AccessControl
- [`RoleAdminChanged(role, previousAdminRole, newAdminRole)`](https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-RoleAdminChanged-bytes32-bytes32-bytes32-)
- [`RoleGranted(role, account, sender)`](https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-RoleGranted-bytes32-address-address-)
- [`RoleRevoked(role, account, sender)`](https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl-RoleRevoked-bytes32-address-address-)
##### `constructor(string name, string symbol, string baseURI)` public
授予部署合约的帐户 `DEFAULT_ADMIN_ROLE`、`MINTER_ROLE` 和 `PAUSER_ROLE`。
Token URI 将根据 `baseURI` 及其 token ID 自动生成。
参考 [`ERC721.tokenURI`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-tokenURI-uint256-)。
##### `mint(address to)` public
为 `to` 创建一个新 token。它的 token ID 将被自动分配(并在发出的 [`IERC721.Transfer`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#IERC721-Transfer-address-address-uint256-) 事件中可用),并且 token URI 将基于在构造时传递的 **基本 URI(base URI)** 自动生成。
参考 [`ERC721._mint`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721-_mint-address-uint256-)。
要求:
- 调用者必须具有 `MINTER_ROLE`。
pause()
public暂停所有 token 转移。
参考 ERC721Pausable
和 Pausable._pause
。
要求:
PAUSER_ROLE
。
##### `unpause()` public
取消暂停所有 token 转移。
参考 [`ERC721Pausable`](https://docs.openzeppelin.com/contracts/3.x/api/token/ERC721#ERC721Pausable) 和 [`Pausable._unpause`](https://docs.openzeppelin.com/contracts/3.x/api/utils#Pausable-_unpause--)。
要求:
- 调用者必须具有 `PAUSER_ROLE`。
_beforeTokenTransfer(address from, address to, uint256 tokenId)
internalERC1155PresetMinterPauser
ERC1155
token,包括:
持有者销毁其 token 的能力
一个允许 token 铸造(创建)的 矿工(minter) 角色
一个允许停止所有 token 转移的 暂停者(pauser) 角色
此合约使用 AccessControl
通过使用不同的角色来锁定许可功能 - 有关详细信息,请查阅其文档。
部署合约的帐户将被授予 矿工 和 暂停者 角色,以及默认的 管理员 角色,这将使其能够将 矿工 和 暂停者 角色授予其他帐户。
函数
可暂停
ERC1155Burnable
ERC1155
ERC165
AccessControl
事件
Pausable
IERC1155
AccessControl
[RoleRevoked(role, account, sender)
](https://docs.openzeppelin.com/contracts/- approve(spender, amount)
事件
IERC20
constructor(string name, string symbol, uint256 initialSupply, address owner)
public铸造 initialSupply
数量的 token 并将其转移给 owner
。
ERC777PresetFixedSupply
ERC777
token, 包括:
预铸造的初始供给
没有访问控制机制(用于铸造/暂停),因此没有治理
自 v3.4 版本可用。
函数
ERC777
事件
IERC20
IERC777
constructor(string name, string symbol, address[] defaultOperators, uint256 initialSupply, address owner)
public铸造 initialSupply
数量的 token 并将其转移给 owner
。
- 原文链接: docs.openzeppelin.com/co...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!