Solidity

從合約 A 創建合約 B,但合約 B 的地址在 Remix 上顯示類型為 A 的合約

  • March 13, 2018
function _createB() public {
   address newB = new B();
   newB(newB); //Event logs the address of contract B
}

當我將從 newB 事件記錄的地址複製並粘貼到 Remix 上的“在地址載入契約”中時,我得到了另一個 A 類型的契約。

我如何能夠創建單獨的 B 類契約?

在嘗試通過“地址”獲取特定類型的契約時,應從下拉菜單中選擇該契約。

在您的情況下發生的情況是您獲得了“A”類型的契約,但它仍將表現為“B”類型的契約。

“地址”的作用:

它只是為選擇的合約提供了一個介面,該介面預計將部署在給定的地址。

  • 它找到選擇哪個合約進行“地址”操作
  • 然後它從目前文件中編寫的程式碼中找到該合約的介面(ABI)。
  • 生成函式的雜湊。
  • 顯示每個函式名稱。
  • 每當呼叫函式時,都會根據函式的雜湊準備交易數據並發送到合約。

現在,如果合約有能力響應該數據,即執行該功能,您將根據地址的合約獲得正確的輸出。

注意:這應該謹慎使用,因為如果使用不當,您最終可能會與另一個合約進行互動。

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