как я могу получить данные, возвращаемые из функции солидности, из идентификатора транзакции в web3js при вызове функции солидности?

Я хочу получить возвращаемые данные, записанные в функции Solidity в web3js. Я использую web3.min.jsпакет из трюфельного зоомагазина в качестве библиотеки web3. Все работает нормально, при вызове функции она возвращает данные транзакции, из которых я использовал, web3.eth.getTransactionRecieptчтобы получить детали, и газ также используется. Теперь мне нужны данные, которые возвращают мой метод прочности

 function helloworld() public returns (string) {
        return "helloworld";
    }

JS-часть

<script>

    if (typeof web3 !== 'undefined') {
    web3 = new Web3(web3.currentProvider);
    } else {
    web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:7545"));
    }
    web3.eth.defaultAccount = web3.eth.accounts[0];
    console.log('web3.eth.accounts :', web3.eth.accounts);
    var walletContractJSONabiGlobal;
    $.getJSON('./contracts/Wallet.json',async function(walletContractJSONabi) {
        walletContractJSONabiGlobal = walletContractJSONabi;
        var walletContract = web3.eth.contract(walletContractJSONabi.abi);
        var walletInstance = walletContract.at('0xc74c8d941494495a4f65c42bebc556398e1f028d');
        walletInstance.helloworld((err,data)=>{
            if (err) {
                console.log('err :', err);
            } else {
                console.log('data :', data);
            }
        })

    })

</script>

я получаю данные в консоли

данные: 0x988d4bd3169a4d752f6e4ac230d01840f2f7b4cc8e87d768a8e41b6fe867740d

Я сделал это web3.toAscii(this transaction is), но не получил правильного результата, который ожидается, поскольку это не шестнадцатеричное значение.

При выводеweb3.eth.getTransactionReciept

blockHash : "0x552a93b0035571b93e4a1a89daa445663b0ddb29974078cdf9a250b7f873ca96" blockNumber : 10 contractAddress : null cumulativeGasUsed : 21899 gasUsed : 21899 logs : [] logsBloom : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" status : "0x01" transactionHash : "0x988d4bd3169a4d752f6e4ac230d01840f2f7b4cc8e87d768a8e41b6fe867740d"индекс транзакции: 0

Пожалуйста, помогите в этом Спасибо

Ответы (1)

Это может быть помечено как дубликат, так что просто чтобы помочь вам. Вы не можете.

Возвращаемые значения доступны только для других контрактов. Как программный клиент, подписывающий и отправляющий транзакцию, вы получаете квитанцию ​​о транзакции, а затем, дождавшись обработки транзакции, вы можете просматривать журналы проверки других функций только для чтения (либо функция контракта или view, pureлибо вы вызываете его с помощью метода JavaScript .call()), чтобы узнать, что нового в состоянии контракта. Возвращаемые значения функции изменения состояния недоступны.

Надеюсь, поможет.

Как получить добытый статус? Я сделал это, .call()но это был неопределенный метод, затем я понял, что использую старый web3, я обновил его, и теперь он .call()работает.
Это прекрасно решается с помощью Truffle, но к нему нужно привыкнуть. Помимо прочего, они оборачивают ABI контракта в абстракцию более высокого уровня, которая очищает синтаксис и обрабатывает подобные детали. Посмотрите здесь для практических идей. эфириум.stackexchange.com/questions/7709/…
В общем, это странно, потому что мой пользовательский интерфейс зависит от возвращаемых данных, и если в развернутой среде нет никого, кто мог бы майнить, то действительно сложно заставить все работать. это нормально для локальной среды разработки. Теперь все ясно для меня. Спасибо