128

关于智能合约的相互调用问题

xieding001 · 于 发布 · 最后由 xyc回复 · 1229 次阅读

大家好,小弟初次接触智能合约的开发,有个问题请教:

之前看到一篇关于可升级的智能合约的时候,说是把合约分成数据合约和控制合约
代码大概如下

pragma solidity ^0.4.18;

contract DataContract {
    mapping (address => uint256) public balanceOf;

    function setBlance(address _address,uint256 v) public {
        balanceOf[_address] = v;
    }
}

contract ControlContract {

    DataContract dataContract;

    function ControlContract(address _dataContractAddr) public {
        dataContract = DataContract(_dataContractAddr);
    }

    function addTen(address addr) public returns (uint){
        return dataContract.balanceOf(addr) + 11;
    }
}

升级合约的时候 DataContract不变,更改ControlContract,这里我的问题是:
在ControlContract中定义了一个DataContract,如果更改了ContralContract 那新的ContralContract中定义的DataContract不是相当于产生了一个新的实例吗,那数据不还是丢失了?

我这样讲可能不太明白,我的问题很难描述清楚。举个传统java的编程为例子,

Class A{
int i;
setI(int i){
this.i = i;
}
}

Class B{
A ba = new A();
}

Class C{
A ca = new A();
}

B里面创建的ba和C里面创建的ca应该是没任何关系的

  • 128
    xyc

    不会

  • 128
  • 128
    xyc

    @xieding001 不好意思,很少上这个论坛,所以过了这么久才看到,因为你使用的是同一个合约地址,所以其实并没有产生实例,那只是在你操作之前就已经存在了,只不过是一个引用而已,类似于指针,并不是一个copy