2

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.

H.Mohseni
  • 21
  • 1
  • 4

1 Answers1

1

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);
alper
  • 8,395
  • 11
  • 63
  • 152