Ich habe zwei Verträge, Token und Voter. Ich möchte ein DAO initiieren, so dass zuerst jemand ein Token initialisiert und einige Anteile an wen er will verteilt.
Im Abstimmungsvertrag dürfen nur die Token-Inhaber für etwas stimmen (z. B. soll ein bestimmtes Projekt eine gewisse Finanzierung erhalten).
Ich verwende Remix IDE, um meine Verträge zu kompilieren, aber ich weiß nicht, wie der Vote-Vertrag den Vote-Vertrag aufrufen soll. Daher habe ich beide an der gleichen Stelle platziert.
Der Token-Vertrag speichert eine Reihe von Adressen, die demjenigen gehören, der die Token erhält. Jetzt sollte der Vote-Vertrag in der Lage sein, das Array abzurufen und zu prüfen, ob die Person, die abstimmt und den Vote-Vertrag aufruft, im Array ist (von Token gespeichert).
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
}
Frage 1: Wie kann auf eine Array-Variable in einem Vertrag von dem anderen zugegriffen werden? (z. B. Wähler im obigen Beispiel)
Frage 2: Wie kann im Remix ein Vertrag den anderen aufrufen? und wohin mit dem ersten? (z. B. wo soll der Token-Vertrag platziert werden und wie kann Vote ihn aufrufen)?
Der Kompilierungsfehler gibt den ersten Hinweis:
Falsche Argumentanzahl für Funktionsaufruf: 0 Argumente angegeben, aber 1 erwartet
Der Grund, warum der Aufruf ein Argument erwartet, ist, dass voters
es sich um ein Array handelt, und Sie müssen den Index des Elements angeben, das Sie nachschlagen möchten. Sie können nicht das vollständige Array kopieren.
Hier ist ein funktionierendes Beispiel für die Suche nach dem ersten Element im voters
Array:
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;
}
}
Benutzer153465
Schnitzer
import "./Token.sol";