Estoy trabajando en el uso de un contrato de muestra con NodeJS, Web3 y Solc, pero encontré un error que indica que la dirección dada en el contrato que he creado no se pudo decodificar. ¿Estoy haciendo algo mal? Aquí está el código JS en el que estoy trabajando.
const Web3 = require('web3');
const fs = require('fs');
const solc = require('solc');
let web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'));
const source = fs.readFileSync(__dirname + '/solidity/Token.sol');
const output = solc.compile(source.toString(), 1);
const bytecode = output.contracts[':Token'].bytecode;
const abi = JSON.parse(output.contracts[':Token'].interface);
const contract = new web3.eth.Contract(abi, '0x5bbf74f1e804bfe671d55cd6b9f3ada66568d5dd', {
from: web3.eth.coinbase,
gasPrice: 90000*2
});
contract.methods.totalSupply().call().then(function (err, result) {
console.log('error', err);
console.log('result', result);
});
Aquí está el código de solidez que estoy usando.
pragma solidity ^0.4.4;
contract Token {
// stores the balances of the addresses
mapping(address => uint) balances;
mapping(address => mapping(address => uint)) approved;
// number of tokens in circulation
uint supply;
event Transfer(address indexed _from, address indexed _to, uint256 _value);
function Token() {
// constructor
// balances[tx.origin] = 10000;
}
function totalSupply() constant returns (uint) {
return supply;
}
function balanceOf(address _owner) constant returns (uint balance) {
return balances[_owner];
}
function transfer(address _to, uint _value) returns (bool success) {
if (balances[msg.sender] >= _value
&& _value > 0
) {
balances[msg.sender] -= _value;
balances[_to] += _value;
// trigger an event
Transfer(msg.sender, _to, _value);
return true;
}
return false;
}
// sets how many can a spender spend from a certain address
function approve(address _spender, uint _value) returns (bool success) {
if (balances[msg.sender] > _value) {
approved[msg.sender][_spender] = _value;
return true;
}
return false;
}
// check the value of the spender can spend
function allowance(address _owner, address _spender) constant returns (uint remaining) {
return approved[_owner][_spender];
}
// transfer the approved value to spend
function transferFrom(address _from, address _to, uint _value) constant returns (bool success) {
if (balances[_from] >= _value
&& approved[_from][msg.sender] >= _value
&& _value > 0
) {
balances[_from] -= _value;
approved[_from][msg.sender] -= _value;
balances[_to] += _value;
return true;
}
return false;
}
}
PD: Estoy usando testrpc
como mi proveedor de ethereum.
Yo mismo estaba totalmente atascado en este problema hasta que me di cuenta de que tenía metamask configurada en la red incorrecta (mainnet en lugar de rinkeby). Vale la pena verificar esa configuración... Definitivamente me sentí tonto una vez que me di cuenta después de perder un poco de tiempo tratando de encontrar el problema.
No estoy seguro de que esta sea la solución a su problema debido a su comentario sobre la web3
versión.
Está compilando una nueva versión de su contrato inteligente solc
pero nunca la implementa y actualiza la dirección del contrato, ese puede ser el problema si tiene un ABI desactualizado
comeback4you
Rico Maglayón
Dmitro Zarezenko
web3js
lib?Rico Maglayón
web3js
biblioteca. lo lamento.Badr Bellaj
comeback4you
Rico Maglayón
comeback4you
Rico Maglayón
Rico Maglayón
natewelch_