Ethereum Solidity/Truffle-无法在Truffle控制台内调用函数(但我可以在混音中调用)

Ethereum Solidity/Truffle-无法在Truffle控制台内调用函数(但我可以在混音中调用),ethereum,solidity,smartcontracts,truffle,ganache,Ethereum,Solidity,Smartcontracts,Truffle,Ganache,我正在做一个关于坚固性的“打赌Dapp”合同。我有一个名为addContractFunds的函数,它允许我将以太坊发送到合同余额。但是,当我在Ropsten测试网络上的truffle控制台中调用此函数时,我得到以下错误: TypeError:无法读取未定义的属性“address” 内部块菌控制台: 有趣的是,当我运行这个契约并在Remix(在ropsten上)或本地使用ganache进行测试时,一切都很好。有人知道发生了什么吗 这是我合同的密码 import "./provableA

我正在做一个关于坚固性的“打赌Dapp”合同。我有一个名为
addContractFunds
的函数,它允许我将以太坊发送到合同余额。但是,当我在Ropsten测试网络上的truffle控制台中调用此函数时,我得到以下错误:

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

内部块菌控制台:

有趣的是,当我运行这个契约并在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;
    }  
}

你能在初始化之后在truffle控制台中调用你的实例,看看它不是未定义的吗?问题已经解决了。结果我不得不将我的节点版本降级到11.12.0。以前使用的是12.8。不知道为什么,但更新版本的node似乎在使用truffleCan时出错。在初始化之后,您可以在truffle控制台中调用您的实例,以查看它是否未定义?问题已经解决。结果我不得不将我的节点版本降级到11.12.0。以前使用的是12.8。不知道为什么,但较新版本的node似乎用truffle解决了问题