Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ethereum 以太坊,web3,错误:参数0无效:调用协定时无法将非字符串解组为十六进制数据_Ethereum - Fatal编程技术网

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

Ethereum 以太坊,web3,错误:参数0无效:调用协定时无法将非字符串解组为十六进制数据,ethereum,Ethereum,当我试图在本地以太坊与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(contr

当我试图在本地以太坊与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();
    }
});
我的ABI:

[{"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:\Utilisateurs\Documents\Git\poc-blockch
ain-server\myapp\node_modules\web3\lib\web3\errors.js:35:16)
at RequestManager.send (C:\Utilisateurs\Documents\Git\poc-blockchain
-server\myapp\node_modules\web3\lib\web3\requestmanager.js:61:22)
at Eth.send (C:\Utilisateurs\Documents\Git\poc-blockchain-server\mya
pp\node_modules\web3\lib\web3\method.js:145:58)
at SolidityFunction.call (C:\Utilisateurs\Documents\Git\poc-blockcha
in-server\myapp\node_modules\web3\lib\web3\function.js:113:32)
at AnonymousObservable.__subscribe (C:/Utilisateurs//Documents/Git/po
c-blockchain-server/myapp/controller/web3Functions.js:25:40)
at AnonymousObservable.tryCatcher (C:\Utilisateurs\Documents\Git\poc
-blockchain-server\myapp\node_modules\rx\dist\rx.js:63:31)
at Rx.internals.ScheduledItem.setDisposable [as action] (C:\Utilisateurs\Documents\Git\poc-blockchain-server\myapp\node_modules\rx\dist\rx.js:5845:4
4)
at Rx.internals.ScheduledItem.ScheduledItem.invokeCore (C:\Utilisateurs\Documents\Git\poc-blockchain-server\myapp\node_modules\rx\dist\rx.js:896:33)at Rx.internals.ScheduledItem.ScheduledItem.invoke (C:\Utilisateurs\\
Documents\Git\poc-blockchain-server\myapp\node_modules\rx\dist\rx.js:884:40)
at runTrampoline (C:\Utilisateurs\Documents\Git\poc-blockchain-serve
r\myapp\node_modules\rx\dist\rx.js:1125:37)

我也有同样的问题。但对于较新的版本0.18.4 问题在于转换的json rcp调用。它仅将方法名转换为数据属性。缺少64个零:

{"jsonrpc":"2.0",
 "id":6,
 "method":"eth_call",
 "params":[{"to":["0xb8a8b5161dfb893f903b003358579d4d6db35b77"],
            "data":"0xcfae3217"},
            "latest"]}
“数据”:“0xcfae3217”后面应该跟64个零

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

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

我也有同样的问题。但对于较新的版本0.18.4 问题在于转换的json rcp调用。它仅将方法名转换为数据属性。缺少64个零:

{"jsonrpc":"2.0",
 "id":6,
 "method":"eth_call",
 "params":[{"to":["0xb8a8b5161dfb893f903b003358579d4d6db35b77"],
            "data":"0xcfae3217"},
            "latest"]}
“数据”:“0xcfae3217”后面应该跟64个零

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

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