智能合约是否接收、持有和发送不同种类的 ERC-20 代币

Is smart contract receive, hold and send different kinds of ERC-20 tokens

我正在使用 solidity 创建智能合约并将其发布到孟买测试网络。

现在,当我在客户端使用以太币和元掩码与合约交互时,它会自动使用 MATIC 代币。

我希望智能合约能够接收不同种类的 ERC-20 代币,然后能够转移它们。

const parsedAmount = ethers.utils.parseUnits(amount.toString(), 'ether');
const contract = await tokenContract.createTransfer({ value: parsedAmount });

比如我希望能够发送如图所示的test token

Link to the faucet

我已经在线搜索并阅读了文档,但找不到该问题的答案...

如果需要,我会添加您认为可以澄清这个问题的任何信息!

提前致谢:)

ERC-20 standard 没有定义任何方式让接收合约知道不是由接收方发起的传输。它“仅”发出一个事件,但无法从链上读取该事件。

所有 ERC-20 余额都存储在相应的代币合约中。例如,如果一个地址持有 10 个 USDC,则此信息存储在 USDC 合约中——无论持有者是最终用户地址还是合约。

将这两件事结合在一起,您可以向 USDC(或任何其他 ERC-20)代币合约发送交易,调用 transfer() 函数,接收方是您的合约。这将有效地将 USDC 从用户转移到您的合约地址。

const usdcContract = new ethers.Contract(usdcAddress, usdcAbi, metamaskSigner);
const to = "0x123..."; // your contract address
const amount = "1000000"; // 1 token with six decimals
await usdcContract.transfer(to, amount);