Ich habe die Vertragsinteraktion mit folgendem Code versucht:
contract C2 {
function aFunction(uint aParameter) returns(uint) {
return (10);
}
}
contract C1 {
function call (uint aParameter) returns(uint){
C2 c2 = new C2();
return c2.aFunction(aParameter);
}
}
Es hat für mich funktioniert. Dann wechselte ich return c2.aFunction(aParameter);
zu return c2;
Es gab mir eine Adresse zurück (angenommen c2_addr). Ich habe es ausgeführt eth.getCode(c2_addr);
. Es hat nur "0x" zurückgegeben. Nun habe ich folgende Fragen:
sendTransaction()
. Also, wie die Zeile C2 c2 = new C2();
ausgeführt wird..call()
und warum gibt es in Bezug auf diesen Vertrag keinen Bytecode in der Blockchain. Und wenn C2 nicht abgebaut ist, wie ist es möglich, seine Funktion aufzurufen.Welchen Client verwendest du?
Ersetzen
return c2.aFunction(aParameter);
mit
return c2;
in Vertrag C1 wird nicht kompiliert, da es sich um einen Objekttyp handelt, der von einer Methode zurückgegeben wird, die für die Rückgabe von vorzeichenlosen Ganzzahlen ( uint ) deklariert ist.
Ab sofort können Sie Objekte nur innerhalb interner Funktionsaufrufe und nicht an einen entfernten Client zurückgeben.
Bearbeiten:
Ich habe den Code ausgeführt. Die "Adresse", die Sie erhalten, ist keine Adresse, sondern eine Konvertierung in Bytes der c2 - Vertragsinstanz.
Aniket
Aniket
Sebi
Aniket
Sebi
Sebi
Aniket
Sebi