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)?
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 voters
es 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 voters
matriz:
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;
}
}
usuario153465
tallista
import "./Token.sol";