Solidity
從合約 A 創建合約 B,但合約 B 的地址在 Remix 上顯示類型為 A 的合約
function _createB() public { address newB = new B(); newB(newB); //Event logs the address of contract B }
當我將從 newB 事件記錄的地址複製並粘貼到 Remix 上的“在地址載入契約”中時,我得到了另一個 A 類型的契約。
我如何能夠創建單獨的 B 類契約?
在嘗試通過“地址”獲取特定類型的契約時,應從下拉菜單中選擇該契約。
在您的情況下發生的情況是您獲得了“A”類型的契約,但它仍將表現為“B”類型的契約。
“地址”的作用:
它只是為選擇的合約提供了一個介面,該介面預計將部署在給定的地址。
- 它找到選擇哪個合約進行“地址”操作
- 然後它從目前文件中編寫的程式碼中找到該合約的介面(ABI)。
- 生成函式的雜湊。
- 顯示每個函式名稱。
- 每當呼叫函式時,都會根據函式的雜湊準備交易數據並發送到合約。
現在,如果合約有能力響應該數據,即執行該功能,您將根據該地址的合約獲得正確的輸出。
注意:這應該謹慎使用,因為如果使用不當,您最終可能會與另一個合約進行互動。