¿Cómo puede un contrato obtener el estado de matriz del otro contrato?

Tengo dos contratos, Token y Votante. Me gustaría iniciar un DAO, de modo que primero alguien inicialice un token y distribuya algunas acciones a quien quiera.

En el contrato de votación, solo los poseedores de fichas pueden votar por algo (por ejemplo, cierto proyecto debe recibir algún financiamiento).

Estoy usando remix IDE para compilar mis contratos, pero no sé cómo se supone que Vote contract se llama Vote contract. Por lo tanto, he puesto ambos en el mismo lugar.

El contrato de token almacena una serie de direcciones que pertenecen a quien recibe los tokens. Ahora, el contrato de votación debería poder obtener la matriz y verificar si la persona que vota y llama al contrato de votación está en la matriz (mantenida por Token).

contract Token {
address [] publick voters;
//... some functions that assings values to the array...
}

contract Vote{
 // people first vote... Assume they've already done that.
 //Below we want to check which of them have tokens.

Token token= new Token();
address valid_voters = token.voters();// Here an error shows up

// then check
}

Pregunta 1: ¿Cómo puede acceder el otro a una variable de matriz en un contrato? (por ejemplo, votantes en el ejemplo anterior)

Pregunta 2: En remix, ¿cómo un contrato puede llamar al otro? y donde poner el primero? (por ejemplo, ¿dónde poner el contrato Token y cómo Voto puede llamarlo)?

Respuestas (1)

El error de compilación da la primera pista:

Recuento de argumentos incorrecto para llamada de función: 0 argumentos dados pero esperados 1

La razón por la que la llamada espera un argumento es que voterses una matriz y debe proporcionar el índice del elemento que desea buscar. No puede copiar la matriz completa.

Aquí hay un ejemplo práctico de buscar el primer elemento en la votersmatriz:

pragma solidity ^0.4.15;

contract Token {
    address [] public voters;

    function Token(address first_voter) {
        voters.push(first_voter);
    }
}

contract Vote{
     // people first vote... Assume they've already done that.
     //Below we want to check which of them have tokens.

    function check_first_voter() returns (address) {
        Token token = new Token(0x123);
        address valid_voter = token.voters(0);  // Retrieve first voter

        // then check
        assert(valid_voter == 0x123);
        // Success!
        return valid_voter;
    }
}
gracias por la respuesta. Además, ¿podría darme alguna pista sobre la segunda pregunta?
Una opción es ponerlos todos en el mismo archivo (como arriba). Alternativamente, puede poner Token en un archivo separado llamado "Token.sol" y luego agregar esta línea en la parte superior del archivo "Vote.sol":import "./Token.sol";