[Ethereum] How pass a struct as an argument in call from python code

pythonsolidityweb3.py

How call this contract functions from python code?

pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;

contract MY_PERSONS {

    struct Person{
        string name;
        uint age;
    }

    Person[] private persons;

    constructor ( Person[] _persons ) public {
    // persons = _persons; // not yet supported
    for(uint i=0; i<_persons.length; i++)
        persons.push(_persons[i]);
    }

    function add_person(Person _person) public  {
        persons.push(_person);
    }

    function get_person(uint index) public view returns(Person) {
        require(index >=0 && index < persons.length);
        return persons[index];
    }

}

I tested Contract Deployment Example
and Passing Struct as an argument in call and everything was OK, but I don't know how call the functions.

Best Answer

Following is a working code on remix. It is recommended to use memory keyword for the struct parameter.

pragma solidity ^0.5.0;  
pragma experimental ABIEncoderV2;

    contract HelloWorld {

        struct User {
            string name;
            uint age;
        }

        User[] users;


        function addUser(User memory user_) public  {
            users.push(user_);
        }

        function getUser(uint index) public view returns(User memory) {
             require(index >=0 && index < users.length);
           return users[index];
        }
    }

user = ["hello", 10];
HelloWorld.transact().addUser(user);
Related Topic