У меня есть два контракта, Token и Voter. Я хотел бы инициировать DAO, чтобы сначала кто-то инициализировал токен и раздал некоторые доли кому угодно.
В контракте Vote только держатели токенов могут голосовать за что-либо (например, определенный проект должен получить некоторое финансирование).
Я использую remix IDE для компиляции своих контрактов, но я не знаю, как контракт Vote должен вызывать контракт Vote. Поэтому я поставил оба в одном месте.
Контракт токена хранит массив адресов, принадлежащих тому, кто получает токены. Теперь контракт Vote должен иметь возможность получить массив и проверить, находится ли человек, который голосует и вызывает контракт Vote, в массиве (хранится токеном).
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
}
Вопрос 1: Как другой контракт может получить доступ к переменной массива в одном контракте? (например, избиратели в приведенном выше примере)
Вопрос 2: Как в ремиксе один контракт может вызывать другой? а куда ставить первую? (например, куда поместить контракт Token и как Vote может его вызвать)?
Ошибка компиляции дает первую подсказку:
Неверное количество аргументов для вызова функции: передано 0 аргументов, но ожидается 1
Причина, по которой вызов ожидает аргумент, заключается в том, что voters
это массив, и вы должны указать индекс элемента, который вы хотите найти. Вы не можете скопировать весь массив.
Вот рабочий пример поиска первого элемента в voters
массиве:
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;
}
}
пользователь153465
резчик
import "./Token.sol";