Creé un script web3js en un sitio web de wordpress, pero al ejecutar el siguiente código, obtengo una respuesta JSON RPC no válida.
var Web3 = require("web3");
var web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider("https://ropsten.infura.io/xxxxxxxxxxx"));
var accounts = web3.eth.accounts;
var abi=[{"constant":false,"inputs":[{"name":"document","type":"string"},{"name":"timestamp","type":"uint256"}],"name":"notarize2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"document","type":"string"}],"name":"checkDocument","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"proof","type":"bytes32"},{"name":"timestamp","type":"uint256"}],"name":"storeProof","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"source","type":"string"}],"name":"stringToBytes32","outputs":[{"name":"result","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"proof","type":"bytes32"}],"name":"hasProof","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}];
web3.eth.defaultAccount="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var poe = web3.eth.contract(abi).at("YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY");
console.log(poe.address);
result="test";
var today = new Date();
var todayI = today.getFullYear()*10000+ (today.getMonth()+1)*100+today.getDate();
console.log(todayI);
poe.notarize2(result,todayI,{gas:2000000});
La configuración funciona perfectamente a través de testrpc (localhost) y a través de Remix / Metamask pude verificar que el contrato se implementa correctamente en Ropsten y funciona bien.
¿Algunas ideas? esta es la primera vez que intento esto.
Intente configurar la cuenta en una dirección de cadena en su lugar. Como Smarx, el nodo público como infura no maneja métodos privados como cuentas. Además, al usar metamask, esta cuenta se configura también como web.accounts[0]
No estoy seguro de que este sea su único problema, pero no ha especificado una cuenta desde la cual realizar esta transacción. Infura, como nodo público, no puede retener las claves privadas de nadie, por lo que no conoce cuentas.
Si desea que el espectador de la página realice la transacción, deberá usar algo como MetaMask en lugar de conectarse directamente a un nodo.
Si desea realizar la transacción de alguna manera con su propia cuenta, eso tendría que ocurrir en el lado del servidor, ya que no puede dar acceso a su clave privada a los visitantes de su sitio web.
https://programtheblockchain.com/posts/2017/12/13/building-decentralized-apps-with-ethereum-and-javascript/ podría ayudar, particularmente la sección "Conectarse a un nodo", que explica el rol de MetaMask.
johan de coster
usuario19510
johan de coster
usuario19510