pragma solidity ^0.4.24;


contract StructDefineSample {
    struct Validator {
        // Used to determine the amount of wei the validator holds. To get the actual
        // amount of wei, multiply this by the deposit_scale_factor.
        uint168 deposit; // : decimal(wei/m),
        int128 start_dynasty;
        int128 end_dynasty;
        bool is_slashed;
        uint total_deposits_at_logout; //: wei_value,
        // The address which the validator's signatures must verify against
        address addr;
        address withdrawal_addr;
    }   

    Validator[] _validators;


    // To avoid tuple, and it produce same code of vyper compiler.
    function validators__deposit(int128 arg0) public view returns (uint) {
        return _validators[uint256(arg0)].deposit;
    }

    function validators__start_dynasty(int128 arg0) public view returns (int128) {
        return _validators[uint256(arg0)].start_dynasty;
    }

    function validators__end_dynasty(int128 arg0) public view returns (int128) {
        return _validators[uint256(arg0)].end_dynasty;
    }

    function validators__is_slashed(int128 arg0) public view returns (bool) {
        return _validators[uint256(arg0)].is_slashed;
    }

    function validators__total_deposits_at_logout(int128 arg0) public view returns (uint) {
        return _validators[uint256(arg0)].total_deposits_at_logout;
    }

    function validators__addr(int128 arg0) public view returns (address) {
        return _validators[uint256(arg0)].addr;
    }

    function validators__withdrawal_addr(int128 arg0) public view returns (address) {
        return _validators[uint256(arg0)].withdrawal_addr;
    }

}