преобразование твердости в Java с проблемой ABIV2 - PullRequest
0 голосов
/ 27 октября 2019

Я сделал свой код солидности и хочу преобразовать его в Java, поэтому я использую команду solc

solc ERC721.sol --bin --abi --optimize -o C:\Users\user\Desktop

, но я получил это предупреждение Experimental features are turned on. Do not use experimental features on live deployments.

, и когда яиспользуйте команду web3

web3j solidity generate -b C:\Users\user\Desktop\ERC721.bin -a C:\Users\user\Desktop\ERC721.abi -o C:\Users\user\Desktop -p com.contract

Я получил это сообщение об ошибке Generating com.contract.Land ... Unsupported type encountered: tuple

Я использую ABIEncoderV2 в своем коде, и это мой код:

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

    address public owner;

    constructor() public{
        owner = msg.sender;
    }

    struct Landpaper{
        string number;
        string landaddress;
        string landnumber;
        string landarea;
        string holdpoints;
    }

    mapping(string => Landpaper) lp;

    modifier Permission(){
        require(msg.sender == owner);
        _;
    }

    function set(string memory rfidnumber, Landpaper memory _landpaperRecord) public Permission{
        lp[rfidnumber]=_landpaperRecord;
    }

    function get(string memory rfidnumber) view public returns(Landpaper memory){
        return lp[rfidnumber];
    }

}

ИтакКак я могу сделать, чтобы решить эту проблему? Только не используйте ABIv2?

это мой новый код:

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

    address public owner;

    constructor() public{
        owner = msg.sender;
    }

    struct Landpaper{
        string number; 
        string landaddress; 
        string landnumber; 
        string landarea;
        string holdpoints;
    }

    mapping(string => Landpaper) lp;

    modifier Permission(){
        require(msg.sender == owner);
        _;
    }

    function set(string memory rfidnumber, string memory _number, string memory _landaddress, string memory _landnumber, string memory _landarea, string memory _holdpoints) public Permission{
        lp[rfidnumber] = Landpaper({
            number : _number,
            landaddress : _landaddress,
            landnumber : _landnumber,
            landarea : _landarea,
            holdpoints : _holdpoints
        });
    }

    function get(string memory rfidnumber)
        public
        view returns (string memory number, string memory landaddress, string memory landnumber, string memory landarea, string memory holdpoints)
    {
        Landpaper memory p = lp[rfidnumber];

        return (p.number, p.landaddress, p.landnumber, p.landarea, p.holdpoints);
    }

}

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

...