твердость развивается со слишком большой ценностью, необходимо сохранить - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть вопрос о надежности, я хочу создать базу данных с надежностью в блокчейне, и мне нужно сохранить много значений в моем коде, но я не знаю, как это сделать?

Iпросто получите это «InternalCompilerError: стек слишком глубокий, попробуйте удалить локальные переменные».в моем коде.

pragma solidity >=0.4.22 <0.6.0;
contract land{

    struct landpaper{
        string holdname;
        uint number;
        string landaddress;
        string landnumber;
        string landpurpose;
        uint landgrades;
        uint256 landarea;
        string holdpoints;
        uint values;
        uint changefrequency;
    }

    mapping(uint256 => landpaper) public id;

    function set(uint rfidnumber, string memory _holdname, uint _number, string memory _landaddress, string memory _landnumber, string memory _landpurpose, uint _landgrades, uint256 _landarea, string memory _holdpoints, uint _values, uint _changefrequency) public {
        id[rfidnumber]=landpaper({
            holdname : _holdname,
            number : _number,
            landaddress : _landaddress,
            landnumber : _landnumber,
            landpurpose : _landpurpose,
            landgrades : _landgrades,
            landarea : _landarea,
            holdpoints : _holdpoints,
            values : _values,
            changefrequency : _changefrequency
        });
    }

}

И я не знаю, как получить это значение в структуре, я хочу получить все значения в структуре, но Solidity не может вернуть тип структуры.


    // function get(uint rfidnumber) public returns (landpaper){
    //     
    // }

1 Ответ

0 голосов
/ 20 сентября 2019

Прежде всего, это не очень хорошая идея для реализации базы данных в блокчейне.

Но для решения текущей проблемы вы можете использовать ABIEncoderV2 и обернуть входные данные в struct.В функции солидности не должно быть более 16 локальных переменных стека, поэтому ваш код выдает ошибку.

Вот отредактированный код:

pragma solidity >=0.4.22 <0.6.0;
pragma experimental ABIEncoderV2;
contract land{

    struct Landpaper{
        string holdname;
        uint number;
        string landaddress;
        string landnumber;
        string landpurpose;
        uint landgrades;
        uint256 landarea;
        string holdpoints;
        uint values;
        uint changefrequency;
    }

    mapping(uint256 => Landpaper) public id;

    function set(uint rfidnumber, Landpaper _landpaperRecord) public {
        id[rfidnumber]=_landpaperRecord;
    }

    function get(uint rfidnumber) view public returns(Landpaper){
        return id[rfidnumber];
    }

}

Найдите документацию по документации ABIEncoder здесь и пример использования web3 здесь .

...