预设 - OpenZeppelin 文档

本文档介绍了OpenZeppelin Contracts库中的预设合约,这些合约集成了不同的以太坊标准,包括ERC20PresetMinterPauser、ERC721PresetMinterPauserAutoId、ERC1155PresetMinterPauser、ERC20PresetFixedSupply 和ERC777PresetFixedSupply等,并具有自定义扩展和模块,展示了常见的可直接部署的配置,适用于快速原型设计、测试和生产环境。

你当前阅读的不是此文档的最新版本。5.x 是当前版本。

预设

https://docs.openzeppelin.com/contracts/api/presets 查看此文档效果更佳

这些合约集成了不同的以太坊标准 (ERC),并带有自定义扩展和模块,展示了常见的配置,无需编写任何 Solidity 代码即可部署。

它们可以按原样用于快速原型设计和测试,但也适用于生产环境

中级和高级用户可以将这些作为编写自己的合约的起点,并根据需要使用自定义功能对其进行扩展。

Tokens

ERC20PresetMinterPauser

ERC20 token,包括:

  • 持有者销毁其 token 的能力

  • 一个允许 token 铸造(创建)的 矿工(minter) 角色

  • 一个允许停止所有 token 转移的 暂停者(pauser) 角色

此合约使用 AccessControl 通过使用不同的角色来锁定许可功能 - 有关详细信息,请查阅其文档。

部署合约的帐户将被授予 矿工暂停者 角色,以及默认的 管理员 角色,这将使其能够将 矿工暂停者 角色授予其他帐户。

函数

可暂停

ERC20Burnable

ERC20

AccessControl

事件

Pausable

IERC20

AccessControl

constructor(string name, string symbol) public

授予部署合约的帐户 DEFAULT_ADMIN_ROLEMINTER_ROLEPAUSER_ROLE

参考 ERC20.constructor

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 转移。

参考 ERC20PausablePausable._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 转移。

参考 ERC721PausablePausable._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) internal

ERC1155PresetMinterPauser

ERC1155 token,包括:

  • 持有者销毁其 token 的能力

  • 一个允许 token 铸造(创建)的 矿工(minter) 角色

  • 一个允许停止所有 token 转移的 暂停者(pauser) 角色

此合约使用 AccessControl 通过使用不同的角色来锁定许可功能 - 有关详细信息,请查阅其文档。

部署合约的帐户将被授予 矿工暂停者 角色,以及默认的 管理员 角色,这将使其能够将 矿工暂停者 角色授予其他帐户。

函数

可暂停

ERC1155Burnable

ERC1155

ERC165

AccessControl

事件

Pausable

IERC1155

AccessControl

事件

IERC20

constructor(string name, string symbol, uint256 initialSupply, address owner) public

铸造 initialSupply 数量的 token 并将其转移给 owner

参见 ERC20.constructor

ERC777PresetFixedSupply

ERC777 token, 包括:

  • 预铸造的初始供给

  • 没有访问控制机制(用于铸造/暂停),因此没有治理

自 v3.4 版本可用。

函数

ERC777

事件

IERC20

IERC777

constructor(string name, string symbol, address[] defaultOperators, uint256 initialSupply, address owner) public

铸造 initialSupply 数量的 token 并将其转移给 owner

参见 ERC777.constructor

← Payment

Proxy →

  • 原文链接: docs.openzeppelin.com/co...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
OpenZeppelin
OpenZeppelin
江湖只有他的大名,没有他的介绍。