Я получаю эту ошибку «Ошибка: неверный адрес ….» при запуске моего приложения dapp

#javascript #blockchain #smartcontracts #quorum

#javascript #блокчейн #smartcontracts #quorum

Вопрос:

Я разрабатываю простое приложение dapp для моего частного кворума блокчейна. Я написал свой смарт-контракт на Solidity и скрипт на JavaScript.

После запуска моей цепочки блоков и моей консоли JavaScript я сделал это:

введите описание изображения здесь

и я получаю сообщение об ошибке:

Ошибка: неверный адрес

в web3.js:3930:15

в web3.js:3756:20

в web3.js: 5025:28

на карте ( < собственный код> )

в web3.js:5024:12

в web3.js: 5050:18

в web3.js:5075:23

в web3.js: 4137:16

Мой смарт-контракт — это:

 pragma solidity >=0.4.0 <0.7.5;

contract MyContract {
    int value;
    
    constructor() public{
        value=10;
    }
      
    function get() public view returns(int) {
        return value;
    }
    
    function set(int value2) public {
        value=value2;
    } 
}
  

И мой скрипт на javascript такой:

 a = eth.accounts[0]
web3.eth.defaultAccount = a;


// Risultato del comando > solcjs --bin --abi MyContract.sol
var abi = [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"get","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"value2","type":"int256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"}];

var bytecode = "0x60806040523480156100115760006000fd5b505b600a60006000508190909055505b610026565b60db806100346000396000f3fe608060405234801560105760006000fd5b506004361060365760003560e01c80636d4ce63c14603c578063e5c19b2d146058576036565b60006000fd5b60426084565b6040518082815260200191505060405180910390f35b608260048036036020811015606d5760006000fd5b81019080803590602001909291905050506095565b005b600060006000505490506092565b90565b8060006000508190909055505b5056fea264697066735822122032710d493b7bc22bd80599320435533d8a94bf485e2b4c09f9ba2b0dd44acb4964736f6c63430007040033";



// Creazione del nuovo contratto con nome MyContract

var simpleContract = web3.eth.contract(abi);

var simple = simpleContract.new({from:web3.eth.accounts[0], data: bytecode, gas: 0x47b760, privateFor: ["QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc="]}, function(e, contract) {
  if (e) {
    console.log("Error creating contract", e);
  } else {
    if (!contract.address) {
      console.log("Contract transaction send: TransactionHash: "   contract.transactionHash   " waiting to be mined...");
    } else {
      console.log("Contract mined! Address: "   contract.address);
      console.log(contract);
    }
  }
});
  

Что я могу попытаться решить эту проблему?

Комментарии:

1. Если вы вставляете смарт-контракт и скрипт в виде текста вместо изображения, тогда любому будет намного проще попробовать его, чтобы найти проблему.

2. Да, это правда!

Ответ №1:

Я думаю, проблема в том, что у вас небольшая ошибка в ABI — get() функция должна быть "constant":true в abi из-за того, что функция помечена как view .

Без этого get() функция требует from определения адреса для транзакции (т. Е. Вы должны использовать private.get({"from": fromAddress}) или устанавливать учетную запись по умолчанию web3.eth.defaultAccount = accountAddress ).

Если вы исправите ABI, он должен работать.

Комментарии:

1. Я вычисляю свой abi с помощью этой команды: solcjs —bin —abi MyContract.sol Это правильно?

2. Хорошо, это выглядит как несовместимость между используемой вами версией компилятора solidity и geth. Я использую solcjs версии 0.5.0 и вижу constant ключевое слово в abi. Здесь есть дополнительная информация: github.com/ethereum/solidity/issues/8690 Я подозреваю, что вы используете версию 0.6 * или выше. Вы можете либо понизить версию solcj до 0.5. * или при компиляции указать целевой EVM, например: ‘solcjs —evm-version istanbul —bin —abi MyContract.sol’

3. Я попытался с помощью команды «solcjs —evm-version istanbul —bin —abi MyContract.sol», но результат тот же! : разочарован: та же ошибка

4. Просто добавляю результаты из диалога Slack здесь: решение состоит в том, чтобы установить evm-версию constantinople при компиляции контракта. Итак, следующая команда исправляет это: solcjs --evm-version constantinople --bin --abi MyContract.sol"