IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> Solidity - 合约升级 -> 正文阅读

[区块链]Solidity - 合约升级

目录

合约调用

智能合约升级

1、主-从模式

2、代理模式


?

合约调用

以下是一个合约调用另一个合约示例:

pragma solidity^0.6.0;

contract C1{
    string private name;

    function getName() external view returns (string memory) {
        return name;
    }

    function setName(string calldata _name) external {
        name = _name;
    }
}

contract C2{
    C1 c;

    constructor(address addr) public {
        //部署时填写被调用合约C1的地址
        c = C1(addr);
    }

    function getName() external view returns (string memory) {
        return c.getName();
    }

    function setName(string calldata _name) external {
        c.setName(_name);
    }
}

引用被调用合约的地址:

? ? constructor(address addr) public {
? ? ? ? c = C1(addr);? //部署时填写被调用合约C1的地址
? ? }

部署如下图所示:?

智能合约升级

1、主-从模式

主合约地址永恒不变

从合约地址可以更改或设置多个?

从合约地址可以通过主合约地址获取?

合约部署后会生成一个合约地址,一个合约多次部署会生成不同的合约地址,不同的合约地址对应的是不同的实例,如果想调用一个合约,必须知道合约地址,还需要知道合约的ABI。主合约知道从合约地址与从合约ABI就可以进行调用了。如下示例:

pragma solidity^0.6.0;

//接囗IC
interface IC {
    //获取名称
    function getName() external view returns(string memory);
    //设置名称
    function setName(string calldata _name) external;

}

//合约C1实现接囗IC
contract C1 is IC {
    //状态变量
    string name;

    //获取名称
    function getName() external view override returns(string memory){
        return name;
    }
    //设置名称
    function setName(string calldata _name) external override{
        name = _name;
    }
}

//合约C2实现接囗IC
contract C2 is IC {
    //状态变量
    string name;

    //获取名称
    function getName() external view override returns(string memory){
        return name;
    }
    //设置名称
    function setName(string calldata _name) external override{
        name = _name;
    }
}

//合约C通过合约地址调用C1或C2
contract C {
    //状态变量,接囗IC
    IC c;

    //设置合约地址
    function setICAddress(address addr) public {
        c = IC(addr);
    }

    //通过接囗调用 获取名称
    function getName() public view returns (string memory) {
        return c.getName();
    }

    //通过接囗调用 设置名称
    function setName(string memory _name) public {
        c.setName(_name);
    }
}

2、代理模式

代理模式借鉴的是回调思想,只关注合约地址,并不关注合约的ABI。

合约想要收取外部账户给的以太(钱)时,要使用fallbak或receive。

未使用fallbak或receive时,合约接收钱,如下例代码所示:

pragma solidity^0.6.0;

contract C1{
    function getContractAccountBalance() public view returns (uint256) {
        return address(this).balance;
    }
}

contract C{
    function transfer(address payable _to, uint256 _value) public payable{
        require(msg.value >= _value, "转账金额要充足");
        _to.transfer(_value);
    }
}

部署后,运行结果如下图所示:?

合约C1中增加fallback或receive,表示能够接收外部账户转账的钱,代码如下:

pragma solidity^0.6.0;

contract C1{
    function getContractAccountBalance() public view returns (uint256) {
        return address(this).balance;
    }

    //fallback表示此合约能够接收外部账户转账的钱
    fallback() external payable {

    }
}

contract C{
    function transfer(address payable _to, uint256 _value) public payable{
        require(msg.value >= _value, "转账金额要充足");
        _to.transfer(_value);
    }
}

?部署后,运行结果如下图所示:?

?

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:17:03  更:2022-04-04 12:17:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:32:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码