相关合约

使用openzeppelin的两个代理辅助合约

ProxyAdmin.sol

TransparentUpgradeableProxy.sol

地址

openzeppelin-contracts/contracts/proxy/transparent at master · OpenZeppelin/openzeppelin-contracts

部署逻辑合约

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract Web03{constructor() public {}string public constant url = 'web03.cn';mapping (uint => string) public names;uint public namesN;function addName(string memory _name) public {names[namesN++] = _name;}
}

交易地址:

https://rinkeby.etherscan.io/tx/0xd11215fa054742276d378917b76093b51dd74124735d8bfffe14928f25d0fc07

合约地址:0xd37C4f32816Ac29a839ca2a854726432080D14c4

部署管理合约ProxyAdmin.sol

pragma solidity ^0.8.0;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/transparent/ProxyAdmin.sol";contract Web03ProxyAdmin is ProxyAdmin{constructor() {}
}

交易地址:https://rinkeby.etherscan.io/tx/0xfabbdfb4fc9a0c0196a04d3fd1bfceafc23cc78e0351155a71415b37b91bd4b2

合约地址:0x60db1202a8c2d2b60d628a03741fed1920bf25f2

部署代理合约TransparentUpgradeableProxy.sol

pragma solidity ^0.8.0;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";contract Web03Proxy is TransparentUpgradeableProxy{constructor(address _logic,address admin_,bytes memory _data) TransparentUpgradeableProxy(_logic, admin_, _data){}
}

参数解析

  • address _logic 逻辑合约地址【0xd37C4f32816Ac29a839ca2a854726432080D14c4】
  • address admin_ 管理合约地址【0x60db1202a8c2d2b60d628a03741fed1920bf25f2】
  • bytes memory _data 发布逻辑合约时的参数字节码,0x表示无参数【0x】

交易地址:https://rinkeby.etherscan.io/tx/0xbeb7bf1cae9b8c37035fd251080baefb9fb1d9d72c5498997685c2a429af1318

合约地址:0x82f4728Aa261eBd7887367096BCA4C15356CF188

验证合约

为了看到直观效果,选择验证合约

如何验证请查看往期文章《solidity合约验证》:https://web03.cn/blog/299

验证之后区块链浏览器在代理合约看不到逻辑合约的方法?

在 代码tab 选择More Option 再选择Is this a proxy?

他会自动找到你的逻辑合约,点击Verify即可

升级合约

-调用合约存数据,预验证代理数据-

先调用代理合约方便验证代理功能

调用addName,往里面添加一组数据

此时,names方法也是可以查到

1、发布新的逻辑合约

contract Web03V2{constructor() {}string public constant url = 'web03.cn';mapping (uint => string) public names;uint public namesN;uint public constant D = 1;function addName(string memory _name) public {names[namesN++] = _name;}function addD(uint _d) public pure{D + _d;}
}

交易地址:https://rinkeby.etherscan.io/tx/0x887c2d2a5f7ebdf1c1b27902a7a03b3cb4da87102797a941909b93c595b09cbb

合约地址:0xdFEaA297C19622892a07e4Da428b377aDA10f0AD

2、调用升级方法

调用管理合约方法

  1. upgrade,需要传入(代理合约地址,新的逻辑合约地址)
  2. upgradeAndCall,需要传入(代理合约地址,新的逻辑合约地址,初始化调用数据,支付金额)

当前升级未涉及初始化数据和支付金额,所以调用upgrade即可

upgrade(0x82f4728Aa261eBd7887367096BCA4C15356CF188, 0xdFEaA297C19622892a07e4Da428b377aDA10f0AD)

升级交易地址:https://rinkeby.etherscan.io/tx/0x9de289d9a3fb021cdb04fa08301a706c3a7e1b52da5aa5c9f13cfb812c775a9f

-升级后,查看并验证数据-

可以看到,升级后的合约新加的方法D和方法addD都已经出现(addD书写错误,忽略,但是不影响)

查询names[0]=零三

升级前的数据依旧保留,说明代理成功

  • 数据是存在代理合约的,这份数据在部署代理时初始化,后面只更改了逻辑合于地址,SO 数据一直保存着

solidity部署和验证代理合约相关推荐

  1. Openstack rocky 部署四: neutron 部署与验证(控制节点)

    Openstack 云计算(二): Openstack Rocky部署四 neutron 部署与验证 (控制节点) 标签(空格分隔): openstack系列 一:Neutron概述 二:Neutro ...

  2. DO280OpenShift安装与部署--安装部署与验证

    DO280OpenShift安装与部署–安装部署与验证

  3. LEARNING_CRYPTO|搭建个人以太坊测试网络+测试Solidity部署(Ganache+truffle)

    前言: 最近在看这本书:<精通以太坊:开发智能合约和去中心化应用> 在看书和找资料的过程中发现了一个问题,我的这本书代码有点旧,C语言可能二三十年之前的书都可以看,这本书出版才没几年,So ...

  4. 腾讯消息队列CMQ部署与验证

    环境 架构图 组件介绍 组件监听端口 CMP依赖VIP: 准备工作 3台8*16服务器 安装文档: 物料包(组件物料包和python脚本) :https://cmq-1255613487.cos.ap ...

  5. keystone连接mysql_3、KeyStone服务部署与验证

    1.创建数据库 mysql -u root -p MariaDB [(none)]>create database keystone; Query OK,1 row affected (0.00 ...

  6. 一个关于SDWAN单臂部署方案验证的实验

    假设有这样一张网络,其中RTA和PCA表示某公司的A分支,通过中国电信CT路由器接入互联网ISP:RTB和PCB表示某公司的B分支,通过中国联通CU路由器接入互联网ISP.DNS(8.8.8.8)表示 ...

  7. 复杂多个合约部署验证方法

    安装: $ npm install truffle-flattener -g 使用:$ truffle-flattener <solidity-files> > output.sol ...

  8. 用Remix部署Solidity合约

        Remix是一个用于开发和部署Solidity合约的线上IDE,该IDE含有各个版本的Solidity,当一个工程有多个Solidity版本时,就需要使用Remix来进行分开编译和部署. 1. ...

  9. Kubeadm 1.9 HA 高可用集群本地离线镜像部署【已验证】

    k8s介绍 k8s 发展速度很快,目前很多大的公司容器集群都基于该项目,如京东,腾讯,滴滴,瓜子二手车,易宝支付,北森等等. kubernetes1.9版本发布2017年12月15日,每三个月一个迭代 ...

最新文章

  1. java 方法是否需要带参数的情况
  2. yolov5 代码版,去掉配置文件
  3. html input得到内容,js获得html中的input标签内容
  4. 成教计算机专业,成教计算机专业毕业.docx
  5. 【Ubuntu-screen】服务器上使用screen的常用命令
  6. 图解算法学习笔记(目录)
  7. Operations Manager 2007 监控Active Directory SCOM-Part 3
  8. 16节课搞懂大数据,视频教程限时免费领取
  9. gradle 不支持多级子模块_解决gradle多模块依赖在Idea中能运行,gradle build失败的问题。...
  10. 第 89 章 Hardware
  11. Android 仿PhotoShop调色板应用(一)概述
  12. 算法点心----求出用1,2,5这三个数不同个数组合的和为100的组合个数。
  13. 计算机办公软件基础知识题库,办公软件基础知识试题--题库.doc
  14. 用户在图片上点选并标记位置,js实现
  15. 开发电商系统用什么开发语言呢
  16. php快递地址填写,智能识别快递地址api接口实现(PHP示例)
  17. Atcoder Grand Contest 005 题解
  18. Posts Tagged 【Catalan】
  19. 微积分 = 微分 + 积分
  20. 用树莓派搭建全功能NAS服务器(05):玩转影音看片整理大法

热门文章

  1. 每天一个小技巧——网易邮箱配置阿里云企业邮箱配置信息设置
  2. 用狄克斯特拉算法计算带权最短路径
  3. 银行管理系统(使用SQL Server)-Python快速编程入门(第2版)-人民邮电出版社-阶段案例
  4. Oracle Number 精度坑
  5. hiveserver2 和beeline_Beeline连接Hiveserver2错误
  6. C语言有趣的代码大全,分享一段有趣的小代码
  7. 4 int、str类型(数据类型1)、type()
  8. python勾股定理、0-30_求助python大神,显示Process finished with exit code 0.
  9. docker创建的activemq配置nio不能映射端口61618
  10. HTML5期末大作业:英雄联盟网站设计——英雄联盟LOL(4页) HTML+CSS+JavaScript web期末网站设计大作业