- 浏览: 761446 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
a.Proxy直接把所有的请求都通过delegatecall丢给Implementation(如果是升级,Implementation的升级函数会确认一下是否为管理员)
b.需要实现_authorizeUpgrade函数以确保只有管理员账户可以进行升级
c.升级函数upgradeTo在Implementation合约中
test
b.需要实现_authorizeUpgrade函数以确保只有管理员账户可以进行升级
c.升级函数upgradeTo在Implementation合约中
// SPDX-License-Identifier: MIT pragma solidity >= 0.8.0; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "hardhat/console.sol"; contract UUPSImplement is Initializable, UUPSUpgradeable, OwnableUpgradeable { uint256 public num; function initialize() initializer public { __Ownable_init(); __UUPSUpgradeable_init(); } /// @custom:oz-upgrades-unsafe-allow constructor constructor() initializer { } function _authorizeUpgrade(address) internal override onlyOwner {} function setNum(uint256 _num) external{ num = _num; } function fun() external{ console.log("fun"); } }
// SPDX-License-Identifier: MIT pragma solidity >= 0.8.0; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "hardhat/console.sol"; contract UUPSImplementNew is Initializable, UUPSUpgradeable, OwnableUpgradeable { uint256 public num; address public addr; function initialize() initializer public { __Ownable_init(); __UUPSUpgradeable_init(); num = 3; } /// @custom:oz-upgrades-unsafe-allow constructor constructor() initializer { addr = msg.sender; } function _authorizeUpgrade(address) internal override onlyOwner { console.log("_authorizeUpgrade"); console.log(owner()); } function setAddr(address _addr) external { addr = _addr; } function fun() external{ console.log("new fun"); } }
test
const { ethers, upgrades } = require('hardhat'); contractImpl = "UUPSImplement"; contractImplNew = "UUPSImplementNew"; describe("contractProxy", function () { it("UUPS ", async function () { const ContractImpl = await ethers.getContractFactory(contractImpl); const impl = (await upgrades.deployProxy(ContractImpl, {kind: 'uups'})); await impl.fun(); await impl.setNum(8); console.log("num:",await impl.num()); const ContractImplNew = await ethers.getContractFactory(contractImplNew); implNew = (await upgrades.upgradeProxy(impl, ContractImplNew)); await implNew.fun(); await implNew.setAddr(implNew.address); console.log("num:",await implNew.num()); console.log("addr:",await implNew.addr()); }); }); 需要在hardhat.config.js最上面加上 require('@openzeppelin/hardhat-upgrades'); contractProxy fun num: BigNumber { value: "8" } new fun num: BigNumber { value: "8" } addr: 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512
发表评论
-
TypeError:ethers_1.getAddress
2024-04-29 10:45 236package.json 添加:"@nomicfou ... -
solidity
2023-02-25 14:23 12一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
solidity
2023-02-25 14:23 11一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
solidity
2023-02-25 14:23 243一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
Address
2023-02-23 10:54 5// contracts/Box.sol // SPDX ... -
Address
2023-02-23 10:50 207// contracts/Box.sol // SPDX ... -
Beacon
2023-02-20 11:45 219Beacon a.Implementation地址并不存放在P ... -
Transparent
2023-02-16 15:44 203Transparent: a.如果Proxy合约发现自己被Pr ... -
string转bytes
2023-02-16 11:04 277const data = Buffer.from(''); ... -
hardhat命令
2023-02-13 09:58 3311.前置准备,运行一个新项目 mkdir my-project ... -
multicall
2023-01-31 20:11 199multicall的solidity调用与ethers.js调 ... -
检查是否是721
2023-01-31 15:18 153// SPDX-License-Identifier: M ... -
EVM操作码
2023-01-25 10:33 2902.栈和内存操作码 2.1 POP:取出栈顶元素 2.2 PU ... -
计算合约地址
2023-01-19 11:27 242EVM会根据发送者地址和nonce经过RLP编码后再进行kec ... -
标准修饰符
2023-01-18 17:03 1541.internal:类似c++中的protected,通过J ... -
ABI编码函数
2023-01-17 10:40 3011. abi.encode()returns(bytes):对 ... -
数据位置
2023-01-17 10:24 1751.函数参数包括返回的参数默认是memory 2.局部变量默认 ... -
随机数
2023-01-17 10:06 193https://www.paradigm.xyz/2023/0 ... -
extcodesize
2023-01-16 11:16 281extcodesize取出的byte code长度,若长度大于 ... -
Elevator
2023-01-13 10:48 203Elevator.sol // SPDX-License- ...
相关推荐
这里是UUPs爬虫主项目组,任何新技术均会首先应用在B站爬虫上。我们的目标是为每位up主的创作之路助力,主要体现在: 1. 数据获取与管理:利用爬虫技术获取全B站的视频与用户数据,并用维护数据库的方法管理它们,...
你可以从UUP Dump (UUPs官网)找到这个系统镜像,这是一个非官方的微软Windows更新镜像下载站点。请确保下载的是针对树莓派的正确版本,并注意系统的兼容性,如4B型号的树莓派可能需要特定的IoT Core版本。 在下载并...
用法./convert.sh [compression] [uups_directory] [create_virtual_editions]压缩选项: wim-标准wim压缩( /Compress:max DISM中的/Compress:max )(默认) esd-固态esd压缩( /Compress:recovery DISM中的/...
Jupyter-Notebook
Jupyter-Notebook
高效甘特图模板下载-精心整理.zip
lstm Summary Framework: z = U>x, x u Uz Criteria for choosing U: • PCA: maximize projected variance • CCA: maximize projected correlation • FDA: maximize projected intraclass variance
OpenGL调试工具,适合图形开发者,包括视频开发,播放器开始以及游戏开发者。
全国行政区划shp最新图.zip
全国研究生招生与在校数据+国家线-最新.zip
Jupyter-Notebook
直播电商交流平台 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
《林黛玉进贾府》课本剧剧本
2000-2020年沪深A股上市公司融资约束程度SA指数-最新数据发布.zip
PPT模版资料,PPT模版资料
CPA注会考试最新教材资料-最新发布.zip
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
内容概要:本文提供了一个完整的职工管理系统的C++源代码。通过面向对象的编程方法,实现了包括创建新职工、查询、增加、修改、删除、排序、统计以及存储和恢复职工数据在内的多个基本操作功能。该系统支持不同的用户角色(如管理员与老板),并通过菜单驱动方式让用户方便地进行相关操作。此外,还包括了错误检测机制,确保操作过程中的异常得到及时处理。 适合人群:有一定C++语言基础,特别是面向对象编程经验的程序员;企业管理人员和技术开发人员。 使用场景及目标:适用于中小型企业内部的人力资源管理部门或IT部门,用于维护员工基本信息数据库,提高工作效率。通过本项目的学习可以加深对链表、类和对象的理解。 阅读建议:建议先熟悉C++的基本语法和面向对象概念,再深入学习代码的具体实现细节。对于关键函数,比如exchange、creatilist等,应当重点关注并动手实践以加强理解。
Jupyter-Notebook
考研公共课历年真题集-最新发布.zip