Interaktionsanalyse von einem Vertrag zum anderen

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:

  1. Ich habe gerade die "Call"-Funktion von C1 aufgerufen, ohne sendTransaction(). Also, wie die Zeile C2 c2 = new C2();ausgeführt wird.
  2. Vertrag C2 wird abgebaut oder nicht. Wenn ja, wer hat ihn dann bereitgestellt, als ich die Funktion aufgerufen habe, .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.

Antworten (1)

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.

Ich verwende GETH. Ich habe den Rückgabetyp als "Adresse" geändert und ihn im Online-Solidity-Browser überprüft, es gab keinen Kompilierungsfehler.
Ich habe den Screenshot in der Frage angehängt. @Sebi
Siehe Bearbeiten. Die zurückgegebene Adresse gehört zu keinem Vertrag, sondern ist eine Folge von Bytes der Vertragsinstanz c2.
Vertrag C2 ist geschürft oder nicht? wenn nicht, wie sind seine Funktionen verfügbar, wenn ja, wie lautet seine Vertragsadresse?
Beide Verträge sind abgebaut. Sie können ihre Adresse im unteren rechten Bereich im Solidity-Browser sehen (z. B.: C1 bei 0x692a70d2e424a56d2c6c27aa97d1a86395877b3a (Speicher))
Sie liefern keinen Vertragsgegenstand c2 zurück, sondern ein paar Rohbytes daraus.
Ich habe gerade C1 erstellt. Es gibt keine Adresse bezüglich C2. Und auch, wie kann ich es auf Geth sehen. Ich wiederhole, wer hat C2 abgebaut und wie lautet seine Adresse? @Sebi Ich habe den restlichen Bildschirm hinzugefügt.