首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继承中的artifact.require()语句?

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

Stack Overflow用户
提问于 2018-01-12 12:04:57
回答 1查看 143关注 0票数 0

嗨,伙计们,我的问题很简单。我有一份合同:

B.sol

代码语言:javascript
复制
...
contract A {
    ...
}
contract B is A {
    ...
}

当我迁移到区块链我的B.sol时,我需要在里面部署每一个合同?选择一个答案,并解释为什么请。

  1. artifacts.require("B");module.exports =函数(部署者){ deployer.deploy(B);};
  2. A= artifacts.require("A");var B= artifacts.require("B");module.exports =函数(部署者){ deployer.deploy(A);deployer.deploy(B);};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-14 19:36:57

您正在寻找的答案很可能是#1,当契约从其他契约继承时,在部署期间只创建一个契约。在概念上,它和其他面向对象的语言是一样的。来自坚实的文档

当一个合同从多个合同继承时,在区块链上只创建一个合同,并且将所有基本合同的代码复制到创建的合同中。

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

代码语言:javascript
复制
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())。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48225973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档