Contract-Development

這個片段如何連結契約?每份合約如何找到另一份合約

  • March 31, 2021

我試圖了解如何部署兩個契約並相互互動,因為我在部署之前沒有它們的地址。我以這個問題結束,我不明白答案。

contract InterfaceOfA {
       function f(uint) returns (uint);
}

contract InterfaceOfB {
       function g(bool) returns (bool);
}

contract A is InterfaceOfA {
       InterfaceOfB b;
       function f(uint _input) returns (uint) {
               b.g(true);
               return 3;
       }
}

contract B is InterfaceOfB {
       InterfaceOfA a;
       function g(bool _input) returns (bool) {
               a.f(0);
               return false;
       }
}

我嘗試在混音中執行此操作以獲得更好的理解,但它引發了一堆我不知道如何修復的錯誤。所以我想了解g如果沒有儲存合約B的地址,合約A如何找到合約B來呼叫該方法?與合約 B 找到 A 呼叫方法相同f

它不起作用,因為正如您所說,A 和 B 地址未儲存在 B 和 A 中。

您將他的範例連結到編譯和導入,並且不能在測試中工作(無限循環並且沒有設置ab值)。類似的東西應該​​可以解決設置問題,但請注意無限循環仍然存在

contract InterfaceOfA {
       function f(uint) returns (uint);
}

contract InterfaceOfB {
       function g(bool) returns (bool);
}

contract A is InterfaceOfA {
       InterfaceOfB b;
       function f(uint _input) returns (uint) {
               b.g(true);
               return 3;
       }

       function setB(address bAddress) {
               b = InterfaceOfB(bAddress);
       }
}

contract B is InterfaceOfB {
       InterfaceOfA a;
       function g(bool _input) returns (bool) {
               a.f(0);
               return false;
       }

       function setA(address aAddress) {
               a = InterfaceOfA(aAddress);
       }
}

引用自:https://ethereum.stackexchange.com/questions/96449