嗨,我已经编写了一个简单的智能合约,将erc20令牌从用户转移到智能合约,并从智能合约转移到用户。我在调用transferFrom函数之前批准了它,但事务失败。我试过只打电话给approve,而不打电话给transferFrom。它很管用。我正在林克比测试网上测试。
// SPDX-License-Identifier: MIT
pragma solidity =0.7.6;
pragma abicoder v2;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract transferToContract {
address public _WETH = 0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984;
IERC20 public WETH = IERC20(_WETH);
function transferToC (uint amount) public
{
WETH.approve(msg.sender,amount);
WETH.transferFrom(msg.sender,address(this),amount);
}
function transferFromC(uint amount) public{
WETH.approve(address(this),amount);
WETH.transferFrom(address(this),msg.sender,amount);
}
function getbal() public view returns(uint){
return WETH.balanceOf(msg.sender);
}
}
我在测试注入了web3的混音。我得到的错误是
Gas estimation errored with the following message (see below). The transaction execution will likely fail. Do you want to force sending?
execution reverted: Uni::transferFrom: transfer amount exceeds spender allowance { "originalError": { "code": 3, "data": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003c556e693a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e636500000000", "message": "execution reverted: Uni::transferFrom: transfer amount exceeds spender allowance" } }
此外,我在 rinkeby 测试网上的测试钱包中有令牌,我正在使用注入的 remix web3 进行部署。
我希望我的合同接受来自外部帐户的令牌,这些令牌很少(可以是任何令牌,但基于ERC20)。因此,要直接调用approve函数,我需要创建令牌契约的实例,那么我如何使用web3创建实例呢?
任何代码段都会有帮助,如果您可以共享指向任何文档的链接,同样也会有帮助。
WETH.approve(msg.sender,amount);
此行批准用户使用合同的令牌。反之亦然。
如果您希望批准合同以操作用户的令牌,用户需要直接在WETH合同上执行< code > approve(yourcontracaddress,amount)(不通过您的合同)。
我在另一个答案中也提到了类似的话题。TLDR部分也与您的问题相关:https://stackoverflow.com/a/67642090/1693192
我的目标是创建一个智能合约,用户可以使用该合约存入erc20并提取erc20代币。我尝试使用token transfer实现此功能,transferfrom函数尝试将令牌发送到合约地址。但它显示了一些错误。我尝试了互联网上所有可能的解决方案,但没有运气。请帮助我######################################## 在此输入图像描述 在此输入图像描述 当我试图转移使用保存
我正在尝试构建一个智能合约并继承一些功能来交换ERC20代币, 这是我的问题? 问题A:是否可以将ERC20令牌转移到智能合约余额?,请提供一个示例,即我们可以创建一个将ETH发送到智能合约的功能 问题B:如果A是可能的,如何获得合约的代币余额?即,我们可以从以下函数获得合约ETH余额: 问题 C: 如果“A”是可能的,如何使用Uniswap或Sushiswap API与BAND/ETH流动性池进
最近,我在处理具有质押功能的智能合约时遇到了一个问题。通过IERC20界面,我设法与来自另一个合约的Erc20令牌进行交互,但仍然存在一个混乱。我正在开发一个智能合约,用户可以在智能合约中抵押我的代币(代币已经部署在网络中),当质押持续时间结束时,利益相关者可以获得他们的质押金额以及奖励的代币。对于奖励代币,我想铸造新的代币,以奖励我的智能合约中的利益相关者。如何在另一个智能合约中使用薄荷功能?我
我正在尝试在Binance智能链网络上部署测试契约。我正在使用metamask和truffle来创建和测试合同。我的文件夹结构如下所示 块菌部署错误 我已经附上了所有我面临的错误代码。有人能帮我吗?我还安装了高清钱包提供商。块菌编译成功。
指导编写一个EOSIO的智能合约 模块 Account API 查询账户数据的API. Chain API 查询链内部状态的API. Database API 存储和检索EOS.IO区块链的数据API根据以下广泛结构来组织数据. Math API 定义常用的数学函数. Action API 定义用于查询操作属性的API. Memory API 定义常用的记忆功能. Console API 使应用程
编程语言 使用golang作为编程语言(对部分关键字限制,以保证处理的有序性),而不是重新创造编程语言。 golang是一个简单、易用的编程语言,它有完善的帮助文档和开发工具。 它是强类型校验,编译阶段就能够校验发现很多bug。 它是模块化的,本系统能够简单屏蔽外部功能,使智能合约处在简单可预期的环境中。 已经有大量的golang开发人员,他们如果要开发智能合约,非常容易上手。 智能合约的分类 公