0

My deployed contract called successfully only by "function invocation" through web3 or Remix. But it always failed when I sending funds to the contract.

I thought that only requirement that contract has payable function but maybe it is not enough?

Contract looks like:

contract GetRandom is usingOraclize {
    event newRandomNumber(bytes);

    function GetRandom() {
        oraclize_setProof(proofType_Ledger);
        update();
    }

    function __callback(bytes32 _queryId, string _result, bytes _proof) oraclize_randomDS_proofVerify(_queryId, _result, _proof) {
        // if we reach this point successfully, it means that the attached authenticity proof has passed!
        if (msg.sender != oraclize_cbAddress()) throw;

        newRandomNumber(bytes(_result));
    }

    function update() payable {
        uint N = 7; // number of random bytes we want the datasource to return
        uint delay = 0; // number of seconds to wait before the execution takes place
        uint callbackGas = 200000; // amount of gas we want Oraclize to set for the callback function

        // this function internally generates the correct oraclize_query and returns its queryId
        bytes32 queryId = oraclize_newRandomDSQuery(delay, N, callbackGas);
    }
}

2 Answers 2

2

it always failed when I sending funds to the contract

This sounds as if you attempt to send Ether to the smart contract without any further data - and hence without calling any specific function. If you "just send Ether" to the smart contract, a special function without a name called fallback function is invoked. In your case, this fallback function also needs to have a payable modifier. If you do not implement a payable fallback function yourself, it is not possible to "just send Ether" to the smart contract.

2

Throw this one in as the fallback, similar to what Sebastian said:

function() payable {}
3
  • Throw what in the fallback? Why would this help?
    – 0xcaff
    Commented Jul 16, 2017 at 2:24
  • A fallback is just a blank function that is triggered when someone interacts with the contract without one of the other specified functions. So for instance if someone just sent money to the contract address, this fallback would just receive the funds in the contract
    – thefett
    Commented Jul 16, 2017 at 16:49
  • Isn't there a gas limit on fallback function execution?
    – 0xcaff
    Commented Jul 16, 2017 at 22:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.