Unbehandelter Ablehnungsfehler: Konnte uint256 nicht von ABI entschlüsseln

Ich arbeite daran, einen Beispielvertrag mit NodeJS, Web3 und Solc zu verwenden, aber ich bin auf einen Fehler gestoßen, dass die angegebene Adresse in dem von mir erstellten Vertrag nicht entschlüsselt werden konnte. Mache ich etwas falsch? Hier ist der JS-Code, an dem ich arbeite

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);
});

Hier ist der Solidity-Code, den ich verwende.

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;
    }
}

PS: Ich verwende testrpcals meinen Ethereum-Anbieter.

Ich stehe auch vor demselben Problem. Hast du irgendeine Lösung bekommen?
@comeback4you nein, was ich getan habe, ist, dass ich meine Webjs von 1.0.0 Beta 20-ish-Version auf 0.20 heruntergestuft habe, dann hat es gut funktioniert.
@RicoMaglayon Haben Sie eine Lösung für dieses Problem gefunden, ohne die web3jslib herunterzustufen?
Hey @DmytroZarezenko, ich habe nie zurückgeschaut, als ich die web3jsBibliothek heruntergestuft habe. Das tut mir leid.
Für mich bestand die Lösung darin, web3js auf ^ 1.0.0-beta.22 zu aktualisieren. npm update --save web3 oder npm install web3@1.0.0-beta.22
Hat jemand eine Lösung bekommen? Ich habe nach dem Update immer noch das gleiche Problem.
@comeback4you hast du die Lösung von Badr Bellaj ausprobiert? Verwenden Sie die Version 1.0.0-beta.22?
versuchte, diese Funktionalität erneut mit 1.0.0-beta.24 zu verwenden und stattdessen den Solidity-Code on-the-fly zu kompilieren, ich kompilierte ihn mit remix.ethereum.org , holte den Bytecode und das abi speicherte ihn in einer JSON-Datei und es funktioniert gut.
Hier ist eine Zusammenfassung dessen, was ich getan habe: https://gist.github.com/ricomonster/88baecd59858690a1d79d5ab8a6e0c72
@RicoMaglayon Da dies ein ziemlich häufiges Problem zu sein scheint, macht es Ihnen etwas aus, eine Antwort auf Ihre eigene Frage zu posten? Siehe stackoverflow.com/help/self-answer

Antworten (2)

Ich war selbst total an diesem Problem hängen geblieben, bis mir klar wurde, dass ich die Metamaske auf das falsche Netzwerk eingestellt hatte (Mainnet statt Rinkeby). Es lohnt sich, diese Einstellung zu überprüfen ... Ich fühlte mich definitiv albern, als ich merkte, dass ich ziemlich viel Zeit damit verbracht hatte, das Problem zu finden.

Ich bin mir nicht sicher, ob dies die Lösung Ihres Problems ist, da Sie die web3Version kommentiert haben.

Sie kompilieren eine neue Version Ihres Smart Contracts, setzen solcihn aber nie ein und aktualisieren die Vertragsadresse, das kann das Problem sein, wenn Sie eine veraltete ABI haben