- 浏览: 778732 次
- 性别:
- 来自: 深圳
-
文章分类
- 全部博客 (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 384package.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 336一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
Address
2023-02-23 10:54 5// contracts/Box.sol // SPDX ... -
Address
2023-02-23 10:50 287// contracts/Box.sol // SPDX ... -
Beacon
2023-02-20 11:45 294Beacon a.Implementation地址并不存放在P ... -
Transparent
2023-02-16 15:44 281Transparent: a.如果Proxy合约发现自己被Pr ... -
string转bytes
2023-02-16 11:04 356const data = Buffer.from(''); ... -
hardhat命令
2023-02-13 09:58 4161.前置准备,运行一个新项目 mkdir my-project ... -
multicall
2023-01-31 20:11 211multicall的solidity调用与ethers.js调 ... -
检查是否是721
2023-01-31 15:18 184// SPDX-License-Identifier: M ... -
EVM操作码
2023-01-25 10:33 3452.栈和内存操作码 2.1 POP:取出栈顶元素 2.2 PU ... -
计算合约地址
2023-01-19 11:27 283EVM会根据发送者地址和nonce经过RLP编码后再进行kec ... -
标准修饰符
2023-01-18 17:03 1861.internal:类似c++中的protected,通过J ... -
ABI编码函数
2023-01-17 10:40 3521. abi.encode()returns(bytes):对 ... -
数据位置
2023-01-17 10:24 2411.函数参数包括返回的参数默认是memory 2.局部变量默认 ... -
随机数
2023-01-17 10:06 251https://www.paradigm.xyz/2023/0 ... -
extcodesize
2023-01-16 11:16 335extcodesize取出的byte code长度,若长度大于 ... -
Elevator
2023-01-13 10:48 235Elevator.sol // SPDX-License- ...
相关推荐
开发bilibili网站爬虫,大数据分析研究比利蜘蛛【本项目孵化自想法#4】简介这里是UUPs爬虫主项目组,任何新的均会首先应用在B站爬虫上。我们的目标是为达到up主的创作道路助力,主要体现在数据获取与管理利用爬虫...
这里是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中的/...
rxtxParallel.dll rxtxSerial.dll 32位
华捷艾米摄像头开发SDK-V1.8.8
【毕业设计】基于Python的Django-html深度学习的web端多格式纠错系统源码(完整前后端+mysql+说明文档+LW+PPT).zip
基于OpenGL和Qt的跨平台3D地形显示Demo软件源代码展示,支持RTK-GPS数据插值与纹理添加功能,OpenGL与Qt联手打造的3D地形显示Demo软件源代码,跨平台支持Ubuntu与Windows,精准插值RTK-GPS地形数据,可视化色彩高度与纹理调整,基于OpenGL和Qt的3D地形显示demo软件源代码,2019年编写的,当时可分别在ubuntu和Windows系统下编译成功,两个平台下的版本头文件和工程文件略有不一样,均可提供源代码,详见图片。 软件对安装RTK-GPS的往复直线作业的拖拉机采集的地形数据进行插值后构建3D地形,具有颜色区分高度,插值和添加纹理等功能。 地形可用鼠标拖动,旋转和缩放。 ,OpenGL; Qt; 3D地形显示; 源代码; 跨平台编译; 安装RTK-GPS拖拉机数据; 插值构建3D地形; 颜色区分高度; 鼠标交互操作,**基于OpenGL与Qt的跨平台3D地形显示Demo源代码**
基于MATLAB的综合能源系统优化调度:结合需求响应与碳交易机制研究,综合能源系统优化调度:Matlab程序制定与碳交易机制下的综合需求响应应用,matlab程序制定,综合能源系统优化调度,综合需求响应的应用,碳交易机制。 ,matlab程序制定; 综合能源系统优化调度; 综合需求响应应用; 碳交易机制,Matlab程序助力综合能源系统优化调度:需求响应与碳交易机制应用
个人经导师指导并认可通过的设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!提供完整的部署教程和设计文档,方便使用。主要针对计算机相关专业的正在做毕业设计大作业的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 主要用到的技术: java:强制使用面向对象编程(OOP),支持封装、继承、多态和抽象。 Servlet:运行在服务端的Java程序,通过实现javax.servlet.Servlet接口处理HTTP请求和响应,作为JavaWeb的核心控制器,负责动态资源生成和请求逻辑调度 jsp:基于HTML的动态网页技术,允许嵌入Java代码片段(如<% %>),用于简化视图层开发,本质是编译为Servlet的服务器端模板 Mysql:开源关系型数据库管理系统,支持ACID事务和SQL标准,通过JDBC与Java程序连接,适用于Web应用的高并发数据存储与查询
【毕业设计】Python的Django-html知识图谱的百科知识问答平台源码(完整前后端+mysql+说明文档+LW+PPT).zip
扑克牌识别数据集,可识别A-K所有的牌字母 1850张原始图,正确识别率可达98.7%,yolo v8格式标注
双碳目标下综合能源系统低碳运行优化调度实践——涵盖光伏风电、热电联产等能源设备,借助Matlab与Yalmip求解器的联合应用,实现低成本运行与碳交易策略。,双碳目标下综合能源系统低碳运行优化调度研究:光伏风电融合、热电联产与碳捕集设备的协同优化利用Matlab程序,双碳目标下综合能源系统低碳运行优化调度Matlab程序 包含光伏、风电、热电联产、燃气锅炉、电锅炉、电储能、碳捕集设备,考虑碳交易 以系统运行成本最小为目标进行调度 没有具体参考文献,这个只是一个授之以渔的程序,方便入手 采用Yalmip+Cplex求解(需安装求解器) 注释详实,条理清晰,适合初学者学习。 ,双碳目标; 低碳运行优化调度; 能源系统; Matlab程序; 光伏; 风电; 热电联产; 燃气锅炉; 电锅炉; 电储能; 碳捕集; 碳交易; 系统运行成本; Yalmip; Cplex求解; 注释详实; 初学者学习。,基于双碳目标的综合能源系统低碳调度优化Matlab程序:光伏、风电等多源协同与碳交易策略
虚拟电厂基本概念及关键技术问题思辨
内容概要:文章详述了基于Python实现的双向长短期记忆神经网络(BiLSTM)时间序列预测项目。从项目背景介绍了为何BiLSTM比传统模型更适合复杂的非线性时间序列预测,并列出项目的各个部分包括数据预处理、特征工程、BiLSTM模型构建(输入层、BiLSTM层、全连接层和输出层)、训练和评估等。项目还包括了一个精美的GUI界面设计使模型更容易使用,以及防止过拟合的方法如正则化、早停技术和超参数调节来优化模型性能。通过案例展示了完整的代码整合封装流程,提供了可视化的预测结果与评估指标如MSE和MAE,并涉及部署与生产环境的实际运用。 适合人群:有一定深度学习、时间序列预测基础知识的研发人员,特别是那些希望了解BiLSTM及其应用场景的开发者和技术爱好者。 使用场景及目标:①适用于处理复杂非线性的、存在长时间依赖关系的时间序列数据,比如金融市场预测、气象预报、电力需求预测等领域;②目标是提高模型预测精度、有效处理长时依赖数据,为各类需要时间序列预测的行业如交通、能源等行业提供更可靠的支持;③项目成果不仅可以直接应用到具体场景,也为学术研究贡献新的见解和技术支持。 阅读建议:鉴于该项目涵盖多个层面的内容,从环境搭建到最后的GUI设计,读者应该分阶段阅读,重点关注自己感兴趣或是专业相关联的部分。比如对于初学者而言,可以从简单的数据导入导出和基本概念学起;而对于进阶者来说,可以直接跳转到模型优化章节深入探讨。整个过程中,最好边看边动手实践,并利用提供的可视化工具检验自己的理解和修改的效果。
安卓模拟器开发资源包下载10
西门子S7-200 Smart PLC与东元Teco N310变频器通讯实战指南:以太网控制+昆仑通态触摸屏实现设定频率、启停与数据传输,西门子S7-200 Smart PLC与东元Teco N310变频器通讯实战指南:以太网控制+485口连接程序详解,西门子200smart与东元Teco N310变频器通讯实战程序 器件:西门子s7 200 smart PLC,东元Teco N310变频器,昆仑通态触摸屏(带以太网),中途可以加路由器 控制方式:触摸屏与plc以太网通讯,PLC与变频器通讯485口相连 功能:触摸屏控制变频器设定频率,启停,读取输出频率,电压 说明:是程序,非硬件。 程序有注释,变频器设置,接线都有,一应俱全 ,西门子200smart PLC; 变频器通讯; 触摸屏控制; 设定频率; 启停控制; 读取输出; 程序注释; 接线说明,西门子S7 200 Smart与东元Teco N310变频器通讯控制程序实战指南
内容概要:本文详尽介绍了 Java 中继承与多态两大面向对象编程的核心概念,包括具体的实现方式、相关关键字的使用(extends、override、super、final、abstract)及其背后的逻辑。重点解释了类层次结构建立的方式和方法覆盖的实现,并讨论了抽象类和接口的作用。文章展示了继承与多态在提高代码重用性和扩展性方面的重要贡献,同时也提及了它们带来的潜在风险与挑战。通过两个实际应用案例(图形绘制系统、游戏角色系统),阐述了这两个概念在一个完整的软件项目中的运用。 适用人群:对面向对象编程有所了解但仍希望深入了解其实现机制和优化技巧的程序员或者软件工程师。 使用场景及目标:适用于想要掌握如何更好地利用 OOP 思想设计高效可靠的 Java 应用系统的个人。学习者将理解如何有效地组织代码、最大化组件复用率,并确保系统的灵活性与可维护性。 其他说明:尽管继承和多态为 Java 提供了许多好处,但也存在一些不足之处,如可能导致复杂的继承树,增加理解成本;或是因为在运行时才绑定方法而引入额外开销。因此,在实践中应当审慎选择适当的解决方案。 此外,文中还包括关于向上转型、向下转型
C#多线程工控源码替代PLC触摸屏:多级页签通信,自由设定串口以太网通信,触摸键盘模拟输入等强大功能,附赠所有控件,C#多线程工控源码替代PLC触摸屏:强大功能,自由通信,触摸键盘模拟输入,含所有控件,西门子PLC集成,C#多线程工业源码,可技术咨询 0, 纯源代码。 1, 替代传统plc搭载的触摸屏。 2, 工控屏幕一体机直接和plc通信。 3, 功能强大,多级页签。 4, 可以自由设定串口或以太网通信。 5, 主页。 6, 报警页。 7,触摸键盘模拟输入。 8, 系统设定页。 9, 历史查询页。 10,标定设定页。 11, 赠送所有控件。 12,使用的西门子Plc。 ,C#多线程; 工业源码; 纯源代码; 替代传统plc触摸屏; 通信; 功强大; 多级页签; 自由设定通信方式; 主页; 报警页; 触摸键盘模拟输入; 系统设定页; 历史查询页; 标定设定页; 赠送控件; 西门子Plc。,C#多线程工业源码:PLC通信与触摸屏一体解决方案
拼鱼鱼CMS,一款垂钓行业的平台系统源码