Solidity / Truffle-无法在松露控制台中调用函数但我可以混音

问题描述

我正在努力地制定一份关于“投注Dapp”的合同。我有一个名为addContractFunds函数,该函数使我可以将以太坊发送至合约余额。但是,当我在Ropsten测试网络上的松露控制台中调用函数时,出现以下错误

TypeError:无法读取未定义的属性“地址”

内部松露控制台:

screenshot of error

有趣的是,当我运行此合同并在Remix(在ropsten上)中对其进行测试时,或者在本地使用ganache进行测试时,一切正常。任何人都知道发生了什么事吗?

这是我合同的代码

import "./provableAPI.sol"; 
import "./Ownable.sol";

contract Coinflip is usingProvable,Ownable {

    struct CoinflipSession {
        uint betAmount;
    }

    uint public balance;
    uint256 constant NUM_RANDOM_BYTES_REQUESTED = 1;
    uint256 public latestNumber;

    event LogNewProvableQuery(string description);
    event generaterandomNumber(uint256 randomNumber);
    event betTaken(uint betAmount);
    event winPayout(uint betAmount);


    constructor() public {
        update();
    }

    
    mapping (address => CoinflipSession) private session;

    modifier costs(uint cost){
        require(msg.value >= cost);
        _;
    }


    function __callback(bytes32 queryId,string memory _result,bytes memory _proof) public {
        require(msg.sender == provable_cbAddress());

        uint256 randomNumber = uint256(keccak256(abi.encodePacked(_result))) % 2;
        latestNumber = randomNumber;
        emit generaterandomNumber(randomNumber);
    }


    function update() payable public {
        uint256 QUERY_EXECUTION_DELAY = 0;
        uint256 GAS_FOR_CALLBACK = 200000;
        provable_newRandomdsQuery(
            QUERY_EXECUTION_DELAY,NUM_RANDOM_BYTES_REQUESTED,GAS_FOR_CALLBACK
        );
    }

    function addContractFunds() public payable{
        balance += msg.value;
    }

    function intaketoken() public payable costs(1 wei){
        //require(session[msg.sender] == null || session[msg.sender].betAmount == 0);
        balance += msg.value;
        CoinflipSession memory newSession;  

        newSession.betAmount = msg.value;

        address creator = msg.sender;
        session[creator] = newSession;

        emit betTaken(newSession.betAmount);
    }

    function flipCoin() public returns(uint) {
        
        if (random() == 0) {
            return 0;
        } 
        resetBalance();
        return 1;
    }

    function resetBalance() private {
        session[msg.sender].betAmount = 0;
    }

    function handleWinPayout() public payable {

        balance -= session[msg.sender].betAmount *2;
        uint toTransfer = session[msg.sender].betAmount*2;
        msg.sender.transfer(toTransfer);
        

        emit winPayout(session[msg.sender].betAmount * 2);

        resetBalance();
    }
   

    function random() public view returns (uint) {
        return Now % 2;
    }  
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...