资讯详情

solidity部署和验证代理合约

相关合约

使用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?

https://web03-1252477692.cos.ap-guangzhou.myqcloud.com/blog/images/QQ截图20220624110056.png

他会自动找到你的逻辑合同,点击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 数据一直保存着

标签: 二极管pk25f

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台