以太坊,web3,错误:无效参数 0:当我调用合约时,无法将非字符串解组为十六进制数据



当我尝试使用 web3 调用本地以太坊中的合约时,我遇到了问题。我已经尝试了很多东西,但我被卡住了...感谢您的帮助!

Web3 版本:0.18.2

我的智能合约

pragma solidity ^0.4.2;
contract Test{
    function greet() constant returns(string) {
        return "HELLO WORLD!";
    }
}

我的代码 :

var myContract = web3.eth.contract(contract.abi)
var instance = myContract.at([contract.contractAddress]);
exports.unlockAccount(account.address, account.password);
instance.greet.call({from:account.address}, function(err, receipt) {
    if (!err) {
        console.log("Receipt: " + receipt);`enter code here`
        observer.onNext(web3.toDecimal(receipt));
        observer.onCompleted();
    } else {
        console.log(err);
        observer.onCompleted();
    }
});

我的阿比:

[{"constant":true,"inputs":[],"name":"greet","outputs:[{"name":"","type":"string"}],"payable":false,"type":"function"}]

我的真棒错误:

Error: invalid argument 0: cannot unmarshal non-string as hex data
at Object.InvalidResponse (C:UtilisateursDocumentsGitpoc-blockch
ain-servermyappnode_modulesweb3libweb3errors.js:35:16)
at RequestManager.send (C:UtilisateursDocumentsGitpoc-blockchain
-servermyappnode_modulesweb3libweb3requestmanager.js:61:22)
at Eth.send (C:UtilisateursDocumentsGitpoc-blockchain-servermya
ppnode_modulesweb3libweb3method.js:145:58)
at SolidityFunction.call (C:UtilisateursDocumentsGitpoc-blockcha
in-servermyappnode_modulesweb3libweb3function.js:113:32)
at AnonymousObservable.__subscribe (C:/Utilisateurs//Documents/Git/po
c-blockchain-server/myapp/controller/web3Functions.js:25:40)
at AnonymousObservable.tryCatcher (C:UtilisateursDocumentsGitpoc
-blockchain-servermyappnode_modulesrxdistrx.js:63:31)
at Rx.internals.ScheduledItem.setDisposable [as action] (C:UtilisateursDocumentsGitpoc-blockchain-servermyappnode_modulesrxdistrx.js:5845:4
4)
at Rx.internals.ScheduledItem.ScheduledItem.invokeCore (C:UtilisateursDocumentsGitpoc-blockchain-servermyappnode_modulesrxdistrx.js:896:33)at Rx.internals.ScheduledItem.ScheduledItem.invoke (C:Utilisateurs\
DocumentsGitpoc-blockchain-servermyappnode_modulesrxdistrx.js:884:40)
at runTrampoline (C:UtilisateursDocumentsGitpoc-blockchain-serve
rmyappnode_modulesrxdistrx.js:1125:37)

我有同样的问题。但是使用较新的版本 0.18.4问题是转换后的 JSON-RCP 调用。它仅将方法名称转换为数据属性。缺少 64 个零:

{"jsonrpc":"2.0",
 "id":6,
 "method":"eth_call",
 "params":[{"to":["0xb8a8b5161dfb893f903b003358579d4d6db35b77"],
            "data":"0xcfae3217"},
            "latest"]}

"data":"0xcfae3217"后面应跟 64 个零。

如果我直接通过 web3.eth.call 方法调用合约,则对合约的调用有效:

var result = this.getWeb3().eth.call({
            to: "0xb8a8b5161dfb893f903b003358579d4d6db35b77",
            data: "0xcfae32170000000000000000000000000000000000000000000000000000000000000000"
        });

最新更新