Migration 继承中的artifact.require()语句?

Migration 继承中的artifact.require()语句?,migration,blockchain,solidity,truffle,Migration,Blockchain,Solidity,Truffle,大家好,我的问题很简单。 我有这份合同: B.sol ... contract A { ... } contract B is A { ... } 当我迁移到区块链我的B.sol时,我需要部署其中的每一个合同吗? 请选择一个答案并解释原因 你想要的答案很可能是1。当协定从其他协定继承时,在部署期间仅创建一个协定。从概念上讲,它与其他面向对象语言相同。从: 当一个合同从多个合同继承时,只有一个 合同是在区块链上创建的,代码来自所有基础 合同被复制到已创建的合同中 从技术上讲,

大家好,我的问题很简单。 我有这份合同:

B.sol

...
contract A {
    ...
}
contract B is A {
    ...
}
当我迁移到区块链我的B.sol时,我需要部署其中的每一个合同吗? 请选择一个答案并解释原因


  • 你想要的答案很可能是1。当协定从其他协定继承时,在部署期间仅创建一个协定。从概念上讲,它与其他面向对象语言相同。从:

    当一个合同从多个合同继承时,只有一个 合同是在区块链上创建的,代码来自所有基础 合同被复制到已创建的合同中

    从技术上讲,您可以拥有引用已部署父合同的子合同(请参见下文)。但是,我想不出这是一个好的设计

    pragma solidity ^0.4.18;
    
    contract A {
      uint256 public balance;
    
      function() public payable {
        balance = msg.value;
      }
    }
    
    contract B is A {
      uint256 i;
      A a;
    
      function B(address _a) public {
        a = A(_a);
      }
    
      function receiveForParent() public payable {
        a.transfer(msg.value);
      }
    
      function getParentBalance() public constant returns (uint256) {
        return a.balance();
      }
    }
    
    在这里,您可以部署A,然后在部署B时传入该地址。在这种情况下,调用
    B.balance()
    或使用回退函数是有效的,因为您继承了逻辑。但是,
    B.balance()!=A.balance()
    。(请注意,
    B.getParentBalance()==A.balance()

    var A= artifacts.require("A");
    var B= artifacts.require("B");
    
    module.exports = function(deployer) {
        deployer.deploy(A);
        deployer.deploy(B);
    };
    
    pragma solidity ^0.4.18;
    
    contract A {
      uint256 public balance;
    
      function() public payable {
        balance = msg.value;
      }
    }
    
    contract B is A {
      uint256 i;
      A a;
    
      function B(address _a) public {
        a = A(_a);
      }
    
      function receiveForParent() public payable {
        a.transfer(msg.value);
      }
    
      function getParentBalance() public constant returns (uint256) {
        return a.balance();
      }
    }