Estoy tratando de crear un contract
objeto con web3.
var contract_abi = result['contracts']['Test']["interface"];
//[{"constant":false,"inputs":[],"name":"inc","outputs":[],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"odd","type":"bool"},{"indexed":false,"name":"x","type":"uint256"}],"name":"Incremented","type":"event"}];
var contract = new web3.eth.Contract(contract_abi);
Sin embargo, sigo recibiendo el error:
Uncaught Error: You must provide the json interface of the contract when instantiating a contract object.
Sin embargo, si copio la salida de mi consola contract_abi y creo directamente una variable como esta:
var contract_abi =
[{"constant":false,"inputs":[],"name":"inc","outputs":[],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"odd","type":"bool"},{"indexed":false,"name":"x","type":"uint256"}],"name":"Incremented","type":"event"}];
Funciona. ¿Que esta pasando? Gracias
No estoy seguro de si su abi es correcto. Pero estoy escribiendo la forma de interactuar con el contrato inteligente y generar abi a partir del código fuente.
Generando abi desde el código fuente:
Details
la pestaña en la esquina superior derechaAccediendo al contrato usando web3:
Inicializar instancia web3
Use el siguiente código para obtener una instancia de contrato.
//For web3 versions 0.20.x
var contract = web3.eth.contract(contractAbi).at(contractAddress);
//For web3 1.0.x
var contract = new web3.eth.Contract(contractAbi,contractAddress);
¡Espero que esto ayude!
Acabo de encontrarme con este problema y pude resolverlo ejecutando JSON.parse() en el resultado de la interfaz, por lo que en su caso sería algo como:
var contract_abi = JSON.parse(result['contracts']['Test']["interface"])
la razón por la que está funcionando copiar el resultado de su línea de comando y configurarlo en la variable es porque cuando lo copia, técnicamente lo cambia de una cadena a un objeto, que es lo que haría JSON.parse :)
Para mí, no estaba recuperando el objeto abi del archivo json compilado.
esto funcionó:
var erc20ABI = JSON.parse(fs.readFileSync(file+"DummyERC20.json"));
var abi = erc20ABI.abi #essential
ERC20DummyContract = new web3.eth.Contract(erc20ABI, erc20Address);
1.0.0-beta.37
He tenido el mismo problema. Si está utilizando web3@1.0 y JavaScript, probablemente necesite ejecutar su ABI con JSON.parse().
Consulta este enlace
mateus pires
contract
no existe al menos en la última versión, no aparece en la documentación de la API . Solo existe la clase Contrato, por lo quenew
se necesita la palabra clave, tal como se usó @user339946 en la descripción de la pregunta.