首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >帮助应对挑战[SafeMath]

帮助应对挑战[SafeMath]
EN

Ethereum用户
提问于 2018-05-07 09:42:17
回答 3查看 104关注 0票数 0

我目前正在上一门扎实的课程,我们每周都会遇到一些我们应该努力解决的挑战。这一次的主题是SafeMath,挑战看上去如下:

代码语言:javascript
复制
contract HopAndMaltOracle{
    // Contract oracle
    address public oracle;

   modifier onlyOracle(){
        require(msg.sender == oracle);
       _;
    }
    uint public maltMarketCap;
    uint public hopMarketCap;

    // Callback function
    event MaltMarketCapChanged();
    event HopMarketCapChanged();

    constructor(uint _maltCap, uint _hopCap) public payable {
        oracle = msg.sender;
        maltMarketCap = _maltCap;
        hopMarketCap = _hopCap;
        emit MaltMarketCapChanged();
        emit HopMarketCapChanged();
    }

    function updateMaltMarketCap(uint _cap) public onlyOracle {
        maltMarketCap = _cap;
        emit MaltMarketCapChanged();
    }

    function updateHopMarketCap(uint _cap) public onlyOracle {
        hopMarketCap = _cap;
        emit HopMarketCapChanged();
    }

    function IDidIt() public{
        require(address(this).balance % 2 == 1);
        msg.sender.transfer(address(this).balance);
    }
}

目标是将契约的余额减少到0(通过某种方式调用IDidIt())。现在,在我看来,似乎没有一个方法可以被调用,因为所有这些方法要么使用onlyOracle修饰符,要么是构造函数(除了IDidIt() )。

我的想法是把以太送去合同,以便把余额增加到能满足的东西上。

代码语言:javascript
复制
require(address(this).balance % 2 == 1);

但我无法找到这样做的方法,因为回退功能不能接受我的付款(试着:

代码语言:javascript
复制
eth.sendTransaction({from:myAddress,to:contractAddress,value:1});

合同的起始余额为2以太。我并不是在要求一个解决方案,但是朝着正确的方向前进肯定会有帮助:)

EN

回答 3

Ethereum用户

回答已采纳

发布于 2018-05-07 13:31:44

事实证明,有一些方法可以迫使以太遵守合同,而不必直接通过后备或其他功能发送合同,这些方法如下:

  • 通过coinbase交易转让给指定为采矿报酬接收方的合同
  • 如果合同是自毁命令的目标,则转移到契约
  • 如果以太在部署前被送到合同的地址

第二个选项被证明是这个练习的正确选项。我用一种应付方法创建了一份合同,将1魏存入其中,然后称为自杀(ChallengeContractAddress),从而将1魏的余额转移到挑战合同中,并允许我调用IDidIt()。

感谢大家的帮助!

票数 0
EN

Ethereum用户

发布于 2018-05-07 10:04:25

构造函数是可支付的。oracle存储部署人员的地址。

票数 0
EN

Ethereum用户

发布于 2018-05-07 11:18:50

首先,为什么您的构造函数是payable?你甚至都不储存msg.value

其次,如果要发送以太值,则应该将回退函数作为应付函数。

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

https://ethereum.stackexchange.com/questions/47787

复制
相关文章

相似问题

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