以太坊 web3js 方法调用失败

Ethereum web3js method call fail

我有一个简单的 solidity 智能合约,其方法如下:

function foo(uint a) public {
    b =  bytes32(1);
        emit Event(a, b);
        emit Event2(a, b);
    }

(完整代码在这里:https://remix.ethereum.org/#optimize=false&version=soljson-v0.4.25+commit.59dbf8f1.js

并使用 web3.js 代码调用它:

contract = testContract.at('xxxAddress')   

// contract.foo(6); // Failed, Why?

//Success
contract.foo.sendTransaction(6, {from: eth.accounts[1]},function(error, result) {
            console.log("Got err:", error, ", result: ", result) 
    }
);

但是,为什么直接 contract.foo(6) 失败了?有高手能解释一下吗?

对修改区块链的函数的调用需要作为交易发送,因为它需要 gas 到 运行。这就是为什么您需要发送交易而不仅仅是调用函数的原因。您可以找到更多相关信息 here.