使用OpenZeppelin升级插件部署的合约具备可升级的特性:可以升级以修改其代码,同时保留其地址,状态和余额。可以迭代地向项目中添加新功能,或修复在线上版本中可能发现的任何错误。配置开发环境创建一个新的npm项目mkdirmycontract&&cdmycontractnpminit-y安装并初始化Trufflenpmi--save-devtrufflenpxtruffleinit安装Truffle升级插件npmi--save-dev@openzeppelin/truffle-upgrades创建可升级合约注意,可升级合约使用initialize函数而不是构造函数来初始化状态。Box.so
AccessControlDefaultAdminRules合约是对AccessControl合约的增强,主要是对默认管理员身份组(默认管理员身份组id就是全0的bytes32)的相关操作进行了控制,具体体现在:1、“默认管理员”角色组(该角色组具有授权、取消授权其他角色组账户的权力,前提是其他角色组的管理员身份id是默认管理员,如果其他身分组设置了指定的管理员身份组,那就跟默认管理元没有关系了)中最多只能有一个账户;2、进行“默认管理员”角色组中账户变更时,通过两步完成,原始账户先发起账户变更,同时会设置一个时间延迟,新的账户需要在时间延迟后发起接受,才能完成管理员账户转移。在新账户发起接受
Michael.W基于Foundry精读Openzeppelin第47期——SafeERC20.sol0.版本0.1SafeERC20.sol1.目标合约2.代码精读2.1safeTransfer(IERC20token,addressto,uint256value)internal2.2safeTransferFrom(IERC20token,addressfrom,addressto,uint256value)internal2.3safeApprove(IERC20token,addressspender,uint256value)internal2.4safeIncreaseAllow
ERC721是一个代币标准,ERC721官方简要解释是Non-FungibleTokens,简写为NFT,多翻译为非同质化代币。那怎么理解非同质化代币呢?非同质化代表独一无二,以卡牌游戏为例,盲盒开出的英雄属性是随机生成,尽管职业相同,但每个英雄不一样,一个英雄对应一个TokenId,就是一个NFT,英雄之间是不能置换的,因为价值不同。这种独特性使得某些稀有英雄具有收藏价值,也因此受到追捧。ERC20代币是同质化代币,是可置换的,且可细分为N份(1=10*0.1),而ERC721的Token最小的单位为1,无法再分割。如果同一个集合的两个物品具有不同的特征,这两个物品是非同质化的,而同质化是某
用法说明ERC20Votes是基于ERC20的扩展,支持投票与委托投票,首先来看下一个具体实现,MyToken继承了ERC20Votes合约,并且为合约创建地址mint了10000代币://SPDX-License-Identifier:MITpragmasolidity^0.8.20;import{ERC20}from"@openzeppelin/contracts/token/ERC20/ERC20.sol";import{ERC20Permit}from"@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";imp
概述 现代软件的设计原则是“敏捷开发,迅速迭代”,功能升级或bug修复是所有软件系统都要面对的问题。甚至可以说软件质量在很大程度上依赖于升级和修补源代码的能力。当然Dapp(去中心化应用)也不例外,尤其Dapp一切都是透明的,这使得任何级别的bug都会被成倍的放大,因此可升级的智能合约成为所有Dapp的必然选择。 本文主要以openzeppelin为基础来阐述构建可升级智能合约的一般流程和注意事项。原理openzeppelin通过在用户与智能合约中间加入一个代理来实现合约的透明升级,用户直接与代理交互,代理将用户的请求转发到实际合约,同时将合约的执行结果响应给用户。
文章目录问题描述解决办法对插件进行设置降低solidity插件版本本文针对的调试Solidity代码的插件为问题描述最近在使用VSCode编写solidity合约的时候,引用OpenZeppelin库之后出现了如下错误:报错为:Expectedstringliteral(path),"*"oraliaslist.或者还有可能会出现这样的错误:报错为:Source"@openzeppelin/contracts/token/ERC721/ERC721.sol"notfound:Fileimportcallbacknotsupported解决办法目前有两种解决办法:对插件进行设置在VSCode中按
基于Hardhat和Openzeppelin开发可升级合约(二)在本章我将开始介绍和演示基于Openzeppelin的可升级合约解决方案简介根据设计,智能合约是不可变的。但随着新的客户需求和产品设计的升级迭代,合约也需要升级。Openzeppelin的基础可升级合约解决方案是将合约数据与逻辑分离。代理合约(Proxy)负责转发交易到逻辑合约,并保存合约数据逻辑合约(Logic)负责实现功能逻辑升级时,只需要重新部署新版本的逻辑合约,并将代理合约中的逻辑合约实例指向新版本逻辑合约实例即可可升级合约的原理-DelegateCall第三方库Hardhat关于Hardhat的安装和介绍,参考我的另一篇
ERC20这套接口、合约和应用程序都与 ERC20代币标准相关。有一些核心合约实现了EIP中指定的功能和定义:IERC20:包含所有ERC20应该实现的接口IERC20Metadata:对ERC20接口的扩展,包括Token名称,符号,和精度。ERC20:对ERC20接口的实现,将名称,符号和精度这些可选的标准扩展引入到基本接口中。另外还有一些自定义的扩展可以使用,包括以下内容:ERC20Burnable: 销毁持有的tokenERC20Capped: 发行Token时对总供应量指定上限ERC20Pausable: 能够暂停Token的交易ERC20Snapshot: 有效存储过去的Toke
•升级中有什么•使用升级插件升级•升级如何运作•初始化•升级•测试•OpenZeppelinTutorials教程•Contact联系方式•升级中有什么使用OpenZeppelin升级插件部署的智能合约可以升级以修改其代码,同时保留其地址、状态和余额。这使您可以迭代地向项目添加新功能,或修复您在生产中可能发现的任何错误。默认情况下,以太坊中的智能合约是不可变的。一旦你创建了它们,就无法改变它们,有效地充当参与者之间牢不可破的契约。但是,对于某些情况,希望能够修改它们。想想双方之间的传统合同:如果他们都同意改变它,他们就可以这样做。在以太坊上,他们可能希望更改智能合约以修复他们发现的错误(这甚至