Ich möchte eine Methode eines Vertrags aus einem anderen Vertrag aufrufen. Ich habe diesen Beitrag bereits gelesen: Aufruf eines Vertrags zu einer anderen Vertragsmethode , aber es funktioniert bei mir nicht.
Wenn ich den Aufrufer erstelle und versuche, die Set()-Methode auszuführen, funktioniert es perfekt, aber wenn ich Get() aufrufe, gibt es immer '0' zurück.
Kann mir jemand helfen?
Dies sind meine einfachen Codes:
pragma solidity ^0.4.0;
contract callee{
uint public x;
constructor() public
{
x = 1;
}
function set (uint k) public
{
x = k;
}
function get () public view returns (uint)
{
return x;
}
}
contract caller{
callee c;
constructor() public
{
c = new callee();
}
function get() public view returns (uint k)
{
return c.get();
}
function set(uint k) public
{
c.set(k);
}
function get_calle() public view returns (callee)
{
return c;
}
}
Ich verwende Web3 Provider und Remix zum Testen.
Ich habe versucht, get() vom Angerufenen aufzurufen, nachdem ich seinen Standort erhalten hatte, und es gibt den richtigen Wert zurück, sodass die set()-Methoden funktionieren. Warum kann ich get() nicht vom Aufrufer verwenden?
Danke schön!
Das, callee
was Sie erstellt haben, ist nicht dasjenige, caller
mit dem es interagiert. Es schafft ein neues.
Ersetzen
c = new callee();
mit
c = callee(0xabcdef);
Aber anstatt 0xabcdef
die Adresse des eingesetzten callee
Vertrages einzugeben.
Pierz___
AnAllergyToAnalogy
set
voncaller
, erhielt aber nur genaueget
Ergebnisse voncallee
. Aber als ich die Adresse von kopiertecaller
, entferntecaller
und eine Instanz unter dieser Adresse wieder öffnete,get
scheint es zu funktionieren. Bekommst du das gleiche Ergebnis?Pierz___
AnAllergyToAnalogy
Pierz___
AnAllergyToAnalogy
Pierz___