Wrapped-Tokens

如何將一個代幣與另一個代幣掛鉤

  • April 18, 2022

我想創建一個代表另一個代幣的代幣,掛鉤不是 1:1 而是例如 10:1,所以如果一個人存入 1 個 TokenX 將獲得我的 10 個代幣。該人還應該能夠提取他的代幣,並且我不能控制存款。

更準確的範例,如果有人存入 1 USDC 將獲得 10 個代幣,這始終是固定的

我不知道這是否可能,我想複製 WETH 合約並對其進行一些更改,但我覺得存款功能僅適用於 ETH,不適用於代幣

您應該使用approve+transferFrom組合。所以它會像這樣工作:

  1. 使用者添加您的合約限額以提取他的tokenA 10(帶有approve功能)
  2. 使用者呼叫你的合約的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和地址。

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