solidity部署和验证代理合约

这篇具有很好参考价值的文章主要介绍了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?

solidity 统计部署的合约数量,以太坊,solidity,区块链,以太坊

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

solidity 统计部署的合约数量,以太坊,solidity,区块链,以太坊

升级合约

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

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

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

solidity 统计部署的合约数量,以太坊,solidity,区块链,以太坊

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

solidity 统计部署的合约数量,以太坊,solidity,区块链,以太坊

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

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

solidity 统计部署的合约数量,以太坊,solidity,区块链,以太坊

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

查询names[0]=零三

升级前的数据依旧保留,说明代理成功文章来源地址https://www.toymoban.com/news/detail-788949.html

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

到了这里,关于solidity部署和验证代理合约的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 以太坊智能合约开发(五):Solidity成绩录入智能合约实验

    每个学生分别部署合约Student.sol ,保证只有自己可以修改姓名。老师部署合约StudentScore.sol,用于录入学生成绩,查询学生信息。查询学生信息时,需要调用学生部署的合约Student.sol。 student.sol合约,用于学生对自己信息进行管理。 学生的基本信息作为状态变量: 声明构造函

    2024年02月07日
    浏览(49)
  • 以太坊智能合约语言Solidity - 3 数组

    1字节(Byte) = 8位 (bit), bytes32 = 256位,bytes1 实质上就等于 int8 固定长度的数组一旦被定义就无法再更改,并且长度在一开始就会被显式定义 我们再来创建一个新的文件用来编写代码 字节数组无法进行基本运算,但是可以比较 字节数组还支持其他一些逻辑运算,具体计算结果

    2023年04月08日
    浏览(62)
  • 区块链研究(一):Windows下搭建以太坊私有链,部署智能合约实现数据上链功能(完整跑通版!好累!)

    先说一下,之前学习部署以太坊私有链,看了好多博文,发现节点之前总是无法连接识别,踩了好多坑,,,今天我把自己完整跑通的实验流程给大家展示出来,希望有所帮助! 摘要:本文主要介绍区块链网络构建的方式,区块链网络仅用于实验,主要搭建以太坊私有链,在

    2024年04月08日
    浏览(52)
  • 第四章 以太坊智能合约solidity介绍

    Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言,设计的目的是能在以太坊虚拟机上运行。 本章大概介绍合约的基本信息,合约的组成,语法方面不做过多的介绍,个人建议多阅读官方文档效果更佳,后续的章节会开发ERC20代币合约案例以便于更好的学习智

    2024年02月06日
    浏览(52)
  • 以太坊智能合约开发:Solidity 语言快速入门

    在本文中,我们从一个简单的智能合约样例出发,通过对智能合约源文件结构的剖析与介绍,使大家对Solidity语言有一个初步的认识。最后,我们将该智能合约样例在 Remix 合约编译器中编译、部署,观察其执行结果。 在开始之前,我们先对Solidity有个初步的了解,即Solidity是

    2023年04月09日
    浏览(51)
  • 基于以太坊的智能合约开发Solidity(基础篇)

    参考教程:基于以太坊的智能合约开发教程【Solidity】_哔哩哔哩_bilibili (1)程序编译完成后,需要在虚拟机上运行,将合约部署好后便可执行刚刚编写的函数。(注意, 合约一旦部署,就会永久存在于区块链上,且不可篡改 ,不过可以销毁) (2)执行完成后,可以得到以

    2024年02月04日
    浏览(58)
  • 以太坊智能合约开发:Solidity语言中的映射

    本文我们介绍Solidity语言中的映射,包括映射的基本定义、语法、映射的变量声明和基本读写操作。并且通过两个智能合约例子演示了映射的定义与基本操作。 Solidity中关于映射的一些定义: 映射以键-值对(key = value)的形式存储数据; 键可以是任何内置数据类型,包括字节

    2024年02月05日
    浏览(56)
  • 以太坊智能合约开发:Solidity 语言中的数据类型

    本文我们介绍Solidity语言的数据类型,重点是值类型,包括布尔类型、整型、地址类型、字节类型、字符串类型和枚举类型。并且通过两个智能合约例子,用于演示这些数据类型的声明与使用方法。 访问 Github 仓库 获取更多资料。 Solidity中关于数据类型的定义如下: Solidity是

    2024年02月02日
    浏览(69)
  • 基于以太坊的智能合约开发Solidity(事件&日志篇)

    (1)事件用于记录在区块链上的特定活动,“emit ValueChanged(newValue);”语句的作用是触发ValueChanged事件(首先需要声明事件)。 ①触发事件后会生成相应日志,上图黄框就是“emit ValueChanged(newValue);”语句产生的日志,其中“form”指的是触发事件的合约账户。 ②事件主要是供

    2024年02月04日
    浏览(44)
  • 以太坊智能合约开发:Solidity语言中的构造函数

    Solidity语言中关于构造函数的定义: 构造函数是使用 constructor 声明的一个可选函数; 构造函数只在合约部署时调用一次,并用于初始化合约的状态变量; 如果没有显式定义的构造函数,则由编译器创建默认构造函数。 构造函数声明语法如下: 其中: ** constructor :

    2024年02月01日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包