Wrapped-Tokens
如何將一個代幣與另一個代幣掛鉤
我想創建一個代表另一個代幣的代幣,掛鉤不是 1:1 而是例如 10:1,所以如果一個人存入 1 個 TokenX 將獲得我的 10 個代幣。該人還應該能夠提取他的代幣,並且我不能控制存款。
更準確的範例,如果有人存入 1 USDC 將獲得 10 個代幣,這始終是固定的
我不知道這是否可能,我想複製 WETH 合約並對其進行一些更改,但我覺得存款功能僅適用於 ETH,不適用於代幣
您應該使用
approve
+transferFrom
組合。所以它會像這樣工作:
- 使用者添加您的合約限額以提取他的tokenA 10(帶有
approve
功能)- 使用者呼叫你的合約的
exchange
函式(或任何它被呼叫的函式)。此功能:a) 從使用者錢包中提取 10 個 tokenA (transferFrom
) 並且 b) 將 1 個 tokenB 發送到同一使用者的錢包。反之亦然,反之亦然。
未經測試的快速範例向您展示該概念的工作原理:
import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; interface IUSDC { transferFrom(address, address, uint) } contract peggedToken is ERC20 { address usdcContract = 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48; constructor ERC20("PeggedToken", "PT") { } function getPeggedToken(uint usdcIn) { IUSDC(usdcContract).transferFrom(msg.sender, address(this), usdcIn); _mint(msg.sender, usdcIn*10); } }
這是基本思想。使用者需要
approve
直接呼叫 USDC 合約,首先,使用合約的金額usdcIn
和地址。