Contract-Development
這個片段如何連結契約?每份合約如何找到另一份合約
我試圖了解如何部署兩個契約並相互互動,因為我在部署之前沒有它們的地址。我以這個問題結束,我不明白答案。
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 中。
您將他的範例連結到編譯和導入,並且不能在測試中工作(無限循環並且沒有設置
a
和b
值)。類似的東西應該可以解決設置問題,但請注意無限循環仍然存在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); } }