2017-09-22 4 views
0

Ceci est mon package.json:Bonjour rejet retourne appel de la méthode du contrat mondial Unhandled Erreur

{ 
    "dependencies": { 
    "solc": "^0.4.16", 
    "web3": "^1.0.0-beta.20" 
    } 
} 

Ceci est mon code contrat intelligent:

contract HelloWorld { 
    function displayMessage() constant returns (string) { 
     return "Hello from a smart contract"; 
    } 
} 

J'ai compilé ce contrat sur le nœud rempl avec testprc en cours d'exécution, et j'essaie d'appeler la méthode displayMessage comme ça:

myContract.methods.displayMessage().call() 

ou

myContract.methods.displayMessage.call() 

mais je suis juste cette erreur:

> Unhandled rejection Error: ERROR: The returned value is not a convertible string: 
at SolidityTypeString.formatOutputString [as _outputFormatter] (/Users/alberthu/Documents/solidity-intro/node_modules/web3-eth-abi/src/formatters.js:245:15) 
at /Users/alberthu/Documents/solidity-intro/node_modules/web3-eth-abi/src/type.js:246:25 
at SolidityTypeString.SolidityType.decode (/Users/alberthu/Documents/solidity-intro/node_modules/web3-eth-abi/src/type.js:247:11) 
at /Users/alberthu/Documents/solidity-intro/node_modules/web3-eth-abi/src/index.js:327:49 
at Array.forEach (<anonymous>) 
at ABICoder.decodeParameters (/Users/alberthu/Documents/solidity-intro/node_modules/web3-eth-abi/src/index.js:326:13) 
at Contract._decodeMethodReturn (/Users/alberthu/Documents/solidity-intro/node_modules/web3-eth-contract/src/index.js:490:22) 
at Method._parent._ethereumCall.call.method.outputFormatter (/Users/alberthu/Documents/solidity-intro/node_modules/web3-eth-contract/src/index.js:820:42) 
at Method.formatOutput (/Users/alberthu/Documents/solidity-intro/node_modules/web3-core-method/src/index.js:179:54) 
at sendTxCallback (/Users/alberthu/Documents/solidity-intro/node_modules/web3-core-method/src/index.js:446:33) 
at /Users/alberthu/Documents/solidity-intro/node_modules/web3-core-requestmanager/src/index.js:144:9 
at XMLHttpRequest.request.onreadystatechange (/Users/alberthu/Documents/solidity-intro/node_modules/web3-providers-http/src/index.js:64:13) 
at XMLHttpRequestEventTarget.dispatchEvent (/Users/alberthu/Documents/solidity-intro/node_modules/xhr2/lib/xhr2.js:64:18) 
at XMLHttpRequest._setReadyState (/Users/alberthu/Documents/solidity-intro/node_modules/xhr2/lib/xhr2.js:354:12) 
at XMLHttpRequest._onHttpResponseEnd (/Users/alberthu/Documents/solidity-intro/node_modules/xhr2/lib/xhr2.js:509:12) 
at IncomingMessage.<anonymous> (/Users/alberthu/Documents/solidity-intro/node_modules/xhr2/lib/xhr2.js:469:24) 
at emitNone (events.js:110:20) 
at IncomingMessage.emit (events.js:207:7) 
at endReadableNT (_stream_readable.js:1059:12) 
at _combinedTickCallback (internal/process/next_tick.js:138:11) 
at process._tickDomainCallback (internal/process/next_tick.js:218:9) 

J'ai essayé de lire à travers les api web3 docs mais je suis nouveau à cela et ne l'ai pas trouvé quelque chose d'utile. Quelqu'un sait comment je peux obtenir "Bonjour d'un contrat intelligent" pour montrer sur le serveur?

Merci!

Répondre

0

J'ai le même problème. Et insérez l'adresse de contrat correcte. Mon contrat (exemple de documentation web3js) J'utilise web3.1.0.0-beta.23.

pragma solidity ^0.4.18; 

contract MyContract { 
function myFunction() returns(uint256 myNumber, string myString) { 
    return (23456, "Hello!%"); 
    } 
} 

Code

const contract = new web3.eth.Contract(abi, contractAddress); 
contract.methods.myFunction().call() 
    .then(res => console.log(res)) 
    .catch(e => console.log(e.message)) 
contrat

création et envoyer du bon test net. Mais si j'ai essayé les méthodes d'appel - ont la même erreur:

ERROR: The returned value is not a convertible string: 
+0

cela fonctionne, merci! –

+0

J'ai la même erreur. Si les méthodes de contrat de test dans testrpc - toutes les méthodes fonctionnent bien, mais si je cours le même code sur le serveur geth - erreur de capture. Utilisez la commande pour obtenir 'geth --rpcapi" db, eth, net, web3, personnel "--ws --wsaddr" localhost "--portail" 8545 "--wsorigins" * "--identité" MyTestNode "--datadir "./data" --rinkeby --fast' –

0

J'apprends aussi à coder des contrats intelligents et j'ai rencontré cette erreur plus tôt aujourd'hui. J'ai trouvé ce qui causait c'était que j'avais la mauvaise adresse liée à mon contrat intelligent.

Les objets de contrat dans web3 ont une propriété d'adresse qui représente l'adresse utilisée pour cette instance de contrat. Dans mon cas, cette adresse était incorrecte et me causait la même erreur. L'adresse du contrat devrait vous avoir été retournée après votre déploiement.

L'adresse de contrat correcte devrait vous avoir été renvoyée dans une fonction de rappel après son déploiement.

Vous pouvez définir et vérifier votre adresse contrat comme suit:

myContract.options.address // returns the current address you have set for this contract instance 
myContract.options.address = "the correct contract address" 

j'aurais laissâmes, comme un commentaire, mais malheureusement, je n'ai pas assez réputation. Faites-moi savoir si vous avez besoin de plus d'aide ou si vous voulez vous réunir pour apprendre.

Voici la documentation web3js sur la propriété d'adresse du marché: https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#options-address