如何訪問來自不同合約的對象
目標:我想創建一個包含 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 來展示它的工作原理。
- 部署 B
prove()
該答案解決了更多問題,例如跟踪“工廠”生成的契約。有簡單的合約工廠模式嗎?
希望能幫助到你。
上面你可以看到我的程式碼。它使用您已經向我展示過的模式並且工作正常!所有合約都可以互動。現在我想清理一下。我用黃色突出顯示了我想要更改的內容。
對我來說,將契約“ObjA”中的所有“黃色內容”提取到“masterObj”契約中會很酷。所以我喜歡創建一個數組/映射之類的東西,我在其中放入所有合約(假設“a”指的是具體的 ObjA 合約),然後如果我與某個合約互動,我只需傳遞這個數組/映射,然後它可以從此數組/映射中讀取所有其他合約的合約地址。
所以基本上我只想在契約 A 到 Z 中進行“計算”,以及在 masterObj 契約中管理的所有其他內容。你知道如何實現這一點嗎?我希望我的問題現在變得更清楚了:)順便說一句,非常感謝您的寶貴時間!