Некоторые транзакции работают, а некоторые нет.UnhandledPromiseRejectionWarning и исключение виртуальной машины при обработке транзакции - PullRequest
0 голосов
/ 25 мая 2019

Я хочу вызвать определенный метод контракта Solidity через node.js и web3.js, но он не работает, и я хочу знать, почему.

Я следую этим двум учебникам: https://cryptozombies.io/en/lesson/6/chapter/9 и http://demystifyblockchain.com/2018/06/29/getting-started-with-ethereum-blockchain-development/

Я использую трюфель, ganache-cli, node.js, web3.js и солидность в моем проекте.

Метод работал некоторое время, но не большепо какой-то неизвестной причине.

Я использую нод для вызова этого метода JavaScript:

   async function main() {
    let mainAccount = await getMainAccount();
    const counter = new web3.eth.Contract(abi, contractAddress);
    counter.methods.setCooldownTime(mainAccount).send({from: mainAccount})
    .on('receipt', function (receipt) {
        if (receipt.status) {
            let events = Object.keys(receipt.events);
            if (events.length > 0) {
            let event = receipt.events[events[0]];
            console.log("event Name  ", event.event);
            let returnValues = event.returnValues;
            let returnedCount = returnValues.count;
            console.log("count ", returnedCount);
        }
        }
    })
    .on('error', console.error);
}

Это должно вызвать этот фрагмент кода в Солидность:

uint cooldownTime = 36 hours;
function setCooldownTime() public{
    cooldownTime = 1 hours;
}

Это имеетдал мне ошибку, которую я не уверен, как исправить:

Error: Node error: {"message":"VM Exception while processing transaction: revert","code":-32000,"data":{"0xbf9f7df4bb490662840d3f5f3294cf96a00ba22ec3271c0eb1145989589f70c0":{"error":"revert","program_counter":278,"return":"0x"},"stack":"o: VM Exception while processing transaction: revert\n    at Function.o.fromResults (/home/user/.nvm/versions/node/v12.3.0/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:10:81931)\n    at /home/user/.nvm/versions/node/v12.3.0/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:47:121973\n    at /home/user/.nvm/versions/node/v12.3.0/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:47:102384\n    at p (/home/user/.nvm/versions/node/v12.3.0/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:47:102041)\n    at /home/user/.nvm/versions/node/v12.3.0/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:47:102094\n    at t.default (/home/user/.nvm/versions/node/v12.3.0/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:52:497368)\n    at /home/user/.nvm/versions/node/v12.3.0/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:47:103008\n    at w.n.emit (/home/user/.nvm/versions/node/v12.3.0/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:61:1211583)\n    at /home/user/.nvm/versions/node/v12.3.0/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:61:1850382\n    at /home/user/.nvm/versions/node/v12.3.0/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:61:1850405\n    at /home/user/.nvm/versions/node/v12.3.0/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:61:500011\n    at /home/user/.nvm/versions/node/v12.3.0/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:2:26124\n    at i (/home/user/.nvm/versions/node/v12.3.0/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:2:41179)\n    at /home/user/.nvm/versions/node/v12.3.0/lib/node_modules/ganache-cli/build/ganache-core.node.cli.js:2:21647\n    at processTicksAndRejections (internal/process/task_queues.js:82:9)","name":"o"}}
    at Function.validate (/mnt/c/Users/Sloth/Solidity/firstBlockchainApp/node_modules/web3-providers/dist/web3-providers.cjs.js:114:18)
    at HttpProvider._callee$ (/mnt/c/Users/Sloth/Solidity/firstBlockchainApp/node_modules/web3-providers/dist/web3-providers.cjs.js:710:61)
    at tryCatch (/mnt/c/Users/Sloth/Solidity/firstBlockchainApp/node_modules/regenerator-runtime/runtime.js:45:40)
    at Generator.invoke [as _invoke] (/mnt/c/Users/Sloth/Solidity/firstBlockchainApp/node_modules/regenerator-runtime/runtime.js:271:22)
    at Generator.prototype.<computed> [as next] (/mnt/c/Users/Sloth/Solidity/firstBlockchainApp/node_modules/regenerator-runtime/runtime.js:97:21)
    at asyncGeneratorStep (/mnt/c/Users/Sloth/Solidity/firstBlockchainApp/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:24)
    at _next (/mnt/c/Users/Sloth/Solidity/firstBlockchainApp/node_modules/@babel/runtime/helpers/asyncToGenerator.js:25:9)
    at processTicksAndRejections (internal/process/task_queues.js:89:5) false 0

Когда я пишу как вышеупомянутые учебники, предлагает:

counter.methods.setCooldownTime()... 

вместо:

counter.methods.setCooldownTime(mainAccount)...

Это также даст мне ошибку:

(node:5006) UnhandledPromiseRejectionWarning: Error: types/values length mismatch (count={"types":1,"values":0}, value={"types":[{"name":"newOwner","type":"address"}],"values":[]}, version=4.0.28)
    at Object.throwError (/mnt/c/Users/Sloth/Solidity/firstBlockchainApp/node_modules/ethers/errors.js:76:17)
    at AbiCoder.encode (/mnt/c/Users/Sloth/Solidity/firstBlockchainApp/node_modules/ethers/utils/abi-coder.js:922:20)
    at AbiCoder.encodeParameters (/mnt/c/Users/Sloth/Solidity/firstBlockchainApp/node_modules/web3-eth-abi/dist/web3-eth-abi.cjs.js:45:34)
    at MethodEncoder.encode (/mnt/c/Users/Sloth/Solidity/firstBlockchainApp/node_modules/web3-eth-contract/dist/web3-eth-contract.cjs.js:143:45)
    at MethodsProxy.createMethod (/mnt/c/Users/Sloth/Solidity/firstBlockchainApp/node_modules/web3-eth-contract/dist/web3-eth-contract.cjs.js:556:57)
    at MethodsProxy.executeMethod (/mnt/c/Users/Sloth/Solidity/firstBlockchainApp/node_modules/web3-eth-contract/dist/web3-eth-contract.cjs.js:534:23)
    at Function.ContractMethod.send (/mnt/c/Users/Sloth/Solidity/firstBlockchainApp/node_modules/web3-eth-contract/dist/web3-eth-contract.cjs.js:507:27)
    at main (/mnt/c/Users/Sloth/Solidity/firstBlockchainApp/interaction/interaction.js:20:39)
    at processTicksAndRejections (internal/process/task_queues.js:89:5)

1 Ответ

0 голосов
/ 02 июня 2019

Проблема была в первых 4 строках моего кода JavaScript. По неизвестной причине данные в abi были испорчены. Проблема может быть решена путем написания данных abi вручную.

const Web3 = require('web3');
const web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
const metadata = require('../tokens/slavetoken.sol');
const abi = metadata.abi;
...