Solidity

創建自定義 ERC20 代幣的最佳實踐

  • March 29, 2022

我想根據使用者輸入自定義 ERC20 令牌。

我可以通過兩種方式實現這一點

  1. 創建智能合約,該合約將使用客戶端提供的詳細資訊創建代幣合約的新實例。

這樣做,合約的創建者被標記為父合約,我必須將自定義令牌從父合約轉移到msg.sender令牌創建之後。我如何讓子契約知道創作者是tx.origin?我可以用它delegatecall來實現這一點嗎?如果有怎麼辦? 2. 用於ethers.js創建令牌。這將消除上述問題,1.但我需要找到一種方法來跟踪創建的令牌(進行另一個事務來儲存數據)

做這個的最好方式是什麼?

您不需要使用 tx.origin 或 delegatecall(將不起作用)。

只需通過添加一個新參數來更改子契約的建構子,例如

contract ChildContract {
   ...
   constructor(...., address ownerOfChild)...
   ...
}

並在工廠契約(父)中使用 msg.sender 例如

import `.....ChildContract.sol`

contract Factory {

  function deployChildContract(.....) external {
     ChildContract childContract = new ChildContract(......, msg.sender)
  }
}

現在您的子契約中有消息發送者,您可以隨意使用它。

tx.origin 可以做同樣的事情,但它有安全風險。因此最好將消息發送者作為參數傳遞


(2) 解決方案的好處是您可以更新和更改未來的契約。

您不需要 2 筆交易,您可以部署 1 個註冊智能合約來儲存您需要的資訊,並在您的客戶 ERC20 合約的建構子中,呼叫註冊智能合約來註冊令牌。

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