Почему я получаю исключение виртуальной машины при обработке транзакции: возврат?

Я пытаюсь вызвать функцию из контракта, который я создал на ganache-cli, через javascript на веб-сайте.


Вот код java-скрипта:

web3.eth.defaultAccount=web3.eth.accounts[0];
var poe = web3.eth.contract(abi).at('0xc678e3c394db9408503195e506088803eef583b6');
console.log(poe.address);
poe.notarize2(result);  

Это приводит к возврату. Однако, когда я выполняю ту же функцию непосредственно в трюфеле с теми же значениями, никаких проблем не возникает.


Вот код контракта:

contract ProofOfExistence1 {

  mapping (bytes32 => bool) private proofs;
  // store a proof of existence in the contract state
  function storeProof(bytes32 proof) {
    proofs[proof] = true;
  }

  // calculate and store the proof for a document
  function notarize(string document) {
    var proof = proofFor(document);
    storeProof(proof);
  }

  function notarize2(string document) {
    bytes32 doc= stringToBytes32(document);
    storeProof(doc);
  }

  // helper function to get a document's sha256
  function proofFor(string document) constant returns (bytes32) {
    return sha256(document);
  }

  // check if a document has been notarized
  function checkDocument(string document) constant returns (bool) {
    var proof = stringToBytes32(document);
    return hasProof(proof);
  }

  // returns true if proof is stored
  function hasProof(bytes32 proof) constant returns(bool) {
    return proofs[proof];
  }

  function stringToBytes32(string memory source) constant returns (bytes32 result) {
    bytes memory tempEmptyStringTest = bytes(source);
    if (tempEmptyStringTest.length == 0) {
        return 0x0;
    }

    assembly {
        result := mload(add(source, 32))
    }
}
}            
Проверьте, работает ли добавление большего количества газа: poe.notarize2(result, { gas: 2000000 });.
Привет, спасибо за предложение, но, к сожалению, это дает мне тот же результат.
Ваш код кажется в порядке. Вы используете трюфель? Иногда трюфель путают с поврежденным артефактом, удаляя build/папку, и повторное развертывание truffle migrate --resetможет заставить его снова работать. Кроме того, работа с струной стоит дорого, попробуйте с гораздо большим значением газа 4M, 6M. Что говорит квитанция об операции?

Ответы (1)

Вы добавили миграцию?

Я получил то же сообщение об ошибке, и вот как я наткнулся на ваш вопрос. Затем я понял, что забыл добавить миграцию, и когда я это сделал, проблема была решена. Надеюсь, это поможет.

Привет, спасибо за ответ, а можно поподробнее? Боюсь, я не знаю, что означает добавление миграции.
Привет, если вы имеете в виду truff migrate-reset, да, это сработало!
Извините, я имел в виду добавить соответствующий файл js (например, 2_deploy_Contract.js) в папку миграции. Если вы уже это сделали, то --reset был бы моим следующим предложением, но @Ismael понял это первым. :)