Не удается выяснить, почему я получаю исключение VM при обработке транзакции: ошибка возврата - PullRequest
0 голосов
/ 12 апреля 2020

Я новичок в программировании на блокчейне и не могу понять, почему я получаю сообщение об ошибке при попытке использовать функцию целостности с использованием Web3 и Ganache.

const PetList = require('./build/contracts/PetList.json')
const fs = require('fs')
const Web3 = require('web3')

const abi = fs.readFileSync("build/contracts/PetList.json").toString().trim();


// Ganache Blockchain
const web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:7545"));

web3.eth.net.isListening()
    .then(() => console.log('Web3 is connected'))
    .catch(e => console.log('Wow. Something went wrong'));

var setUpContract = async function( ){
    await web3.eth.net.getId().then((networkId) => {
        const networkData = PetList.networks[networkId]
        console.log("Setting up contract...")
        if(networkData){
            return petList = new web3.eth.Contract(PetList.abi, networkData.address)
        }
    })
    acc = await web3.eth.getAccounts()
    currentAccount = acc[0]
    console.log("Account: ", acc[0])
}

async function start(){
    await setUpContract()
    await addPet()
}

var addPet = async function(){
    console.log(await getPetCount())
    return results = await petList.methods.addPet('Zippo', 'Dog').send({from: currectAccount})
}

start()
pragma solidity ^0.5.0;

contract PetList{
    uint public petCount = 0;
    mapping (uint => Pet) public pets;

    struct Pet{
        uint id;
        string name;
        string tag;
    }

    event PetAdded(
        uint id,
        string name,
        string tag
    );

    function addPet(string memory _name, string memory _tag) public {
        require(bytes(_name).length > 0, "INVALID TAG");
        require(bytes(_tag).length > 0, "INVALID NAME");
        petCount++;
        pets[petCount] = Pet(petCount, _name, _tag);
        emit PetAdded(petCount, _name, _tag);
    }
}

Я также использовал .send () без каких-либо параметров, и он дал мне ошибку, сообщив, что адрес «от» не указан ни в указанных параметрах, ни по умолчанию опции.

1 Ответ

0 голосов
/ 17 апреля 2020

Чтобы функция получала эфир, вы должны иметь запасную функцию или добавить payable модификатор

Таким образом, вы можете изменить свой код на следующий

function addPet(string memory _name, string memory _tag) public payable

...