Solidity

如何訪問來自不同合約的對象

  • September 6, 2017

目標:我想創建一個包含 3 個以上合約的可靠程序。這意味著我有一份契約(我們暫時稱它為 master),旨在設置所有內容。這意味著該合約具有請求應相互互動的合約地址的功能。主節點儲存此地址資訊,稍後可以將其傳遞給其他合約。我將有 3 個以上的其他合約從主合約中獲取此“聯繫資訊”,然後這 3 個以上的合約開始相互互動(更改其他變數,呼叫其他合約的函式)

範例:合約有一個 Setup-Function 請求合約 A 和 B 的地址。他儲存這些地址並呼叫合約 A 的函式 1。現在合約 A 的函式 1 做了一些事情,然後查找合約 B 的地址(這個是我掙扎的地方)並呼叫屬於契約 B 的函式 2。

問題:有人可以幫我解決這個問題並給我一些範常式式碼嗎?我已經嘗試將帶有地址的結構從 Master 傳遞到 A 和 B,嘗試將它們儲存在映射中,並嘗試通過繼承使 A 和 B 可以訪問我的 Master 契約數據。

如果您在理解這個問題時遇到任何困難,請隨時提問;)

由於時間限制,我可以用(希望)清晰的模式間接回答。

pragma solidity ^0.4.11;

contract A {

   function talkToMe() public constant returns(bool success) {
       return true;
   }
}

contract B {

   A a; // contract "A" called "a"

   event LogResponse(bool whatItSaid);

   function B() {
       a = new A(); // deploy B and it will make it's own A and note the address
   }

   function prove() public returns(bool success) {
       bool response = a.talkToMe();
       LogResponse(response);
       return response;
   }

   function newA(address addressA) public returns(bool success) {
       a = A(addressA); // start using previously deployed A 
       return true;
   }
}

這是 Remix 來展示它的工作原理。

  1. 部署 B
  2. prove()

在此處輸入圖像描述

該答案解決了更多問題,例如跟踪“工廠”生成的契約。有簡單的合約工廠模式嗎?

希望能幫助到你。

在此處輸入圖像描述

上面你可以看到我的程式碼。它使用您已經向我展示過的模式並且工作正常!所有合約都可以互動。現在我想清理一下。我用黃色突出顯示了我想要更改的內容。

對我來說,將契約“ObjA”中的所有“黃色內容”提取到“masterObj”契約中會很酷。所以我喜歡創建一個數組/映射之類的東西,我在其中放入所有合約(假設“a”指的是具體的 ObjA 合約),然後如果我與某個合約互動,我只需傳遞這個數組/映射,然後它可以從此數組/映射中讀取所有其他合約的合約地址。

所以基本上我只想在契約 A 到 Z 中進行“計算”,以及在 masterObj 契約中管理的所有其他內容。你知道如何實現這一點嗎?我希望我的問題現在變得更清楚了:)順便說一句,非常感謝您的寶貴時間!

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