2017-03-23 4 views
1

web3을 사용하여 로컬 ethereum에서 계약서에 문의하려고 할 때 문제가 있습니다. 나는 많은 것을 시도했지만 붙어 있어요 ... 도와 줘서 고마워요!Ethereum, web3, 오류 : 잘못된 인수 0 : 계약서에 전화 할 때 비 문자열을 16 진수 데이터로 비 정렬 할 수 없습니다.

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

동일한 문제가 있습니다. 그러나 최신 버전 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" 
     });