【发布时间】:2022-01-07 09:33:53
【问题描述】:
如您所知,ERC-20 网络有许多代币,例如 USDT、SHIB、LINK、。 . .
我想创建一个网站,当用户需要购买USDT 代币时,我应该将USDT 代币发送到他的钱包or 使用需要发送USDT 到区块链上的另一个钱包,我想做所有这些东西都进入了区块链,用户可以看到他的USDT交易的细节:
现在我有一个关于在 ERC-20 网络中转移代币的大问题。
我用 remix 和solidity 编写这些代码:
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
import 'https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol';
contract DEX {
struct Token {
string token;
address contractAddress;
}
mapping(string => Token) public tokens;
string[] public tokenLis;
address public admin;
constructor() {
admin = msg.sender;
}
function addToken(string memory token, address contractAddress) external {
tokens[token] = Token(ticker,contractAddress);
tokenLis.push(ticker);
}
function getTokenAddress(string memory token) external view returns(address moemory) {
return tokens[token].contractAddress;
}
function sendToken(string memory token, address from , uint256 amount)
external
{
IERC20(tokens[token].contractAddress).transferFrom(
from,
address(this),
amount
);
}
}
我想将动态令牌添加到我的website 和smart contract,为此编写以下代码:
struct Token {
string token;
address contractAddress;
}
mapping(string => Token) public tokens;
function addToken(string memory token, address contractAddress) external {
tokens[token] = Token(ticker,contractAddress);
tokenLis.push(ticker);
}
我用这个信息打电话给addToken:
Token:USDT
contractAddress: 0xdac17f958d2ee523a2206206994597c13d831ec7(USDT主网合约地址)
它的工作并在令牌中添加成功USDT。
现在我想用这个功能(imported the openzepelin IERC20)向用户发送一些USDT:
function sendToken(string memory ticker , address from , uint256 amount)
external
{
IERC20(tokens[ticker].contractAddress).transferFrom(
from,
address(this),
amount
);
}
现在,当我想将金额从 remix 地址一转移到 remixaddress 到 USDT 合约地址时,它会显示这个错误:
问题 B:有什么问题?我该如何解决这个错误?
问题 A:最适合我的方案的方法是什么?使用智能合约还是用户 web3.js?
【问题讨论】:
标签: solidity smartcontracts web3 remix