Solidity
創建自定義 ERC20 代幣的最佳實踐
我想根據使用者輸入自定義 ERC20 令牌。
我可以通過兩種方式實現這一點
- 創建智能合約,該合約將使用客戶端提供的詳細資訊創建代幣合約的新實例。
這樣做,合約的創建者被標記為父合約,我必須將自定義令牌從父合約轉移到
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 合約的建構子中,呼叫註冊智能合約來註冊令牌。