Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >如何使用solidity将ERC20令牌传输到另一个地址?

如何使用solidity将ERC20令牌传输到另一个地址?
EN

Stack Overflow用户
提问于 2022-04-20 06:59:44
回答 1查看 5.1K关注 0票数 1

我创建ERC20令牌,并希望将令牌传输到另一个地址。

我在元帐户中有两个帐户。(帐户A/B)

我的ERC20代码在这里(我在帐户A中部署并保存令牌)

代码语言:javascript
代码运行次数:0
复制
pragma solidity ^0.8.0;
// SPDX-License-Identifier: MIT

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol";

contract MyToken is ERC20 {
    constructor(string memory name, string memory symbol) ERC20(name,symbol) {
        // mint 1000 token
        _mint(msg.sender, 1000*10**uint(decimals()));
    }
}

问题:如何将ERC20令牌从当前地址传输到另一个地址?(A->B)

我在帐户A中使用了这段代码,但不起作用。

代码语言:javascript
代码运行次数:0
复制
pragma solidity ^0.8.7;
// SPDX-License-Identifier: MIT

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol";

contract TokenTransfer {
    IERC20 _token;

    // token = MyToken's contract address
    constructor(address token) public {
        _token = IERC20(token);
    }
    
    // to = Account B's address
    function stake(address to, uint amount) public {
        _token.approve(address(this), amount);
        
        require(_token.allowance(address(this), address(this)) >= amount);
        _token.transferFrom(msg.sender, to, amount);
    }
}

错误信息

代码语言:javascript
代码运行次数:0
复制
transact to TokenTransfer.stake errored: Internal JSON-RPC error.
{
  "code": 3,
  "message": "execution reverted: ERC20: insufficient allowance",
  "data": "0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001d45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000"
}

怎么修呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-20 08:30:13

你的逻辑是错的!如果您想在不传递智能契约的情况下将令牌从帐户A发送到帐户B,则可以使用Metamask和其他钱包中的“send”选项。如果您想要使用智能契约,那么您的逻辑就会改变。在智能合同代码中,有一些错误:

当您编写此语句时,您正在批准智能契约本身移动您的令牌,但它没有任何令牌!关于approve()函数的另一件事。这一操作必须从用户做起,在细节上,一个人必须给予智能合同许可才能访问他的钱包;

  • 的另一个错误是:智能契约不能失败,无法从帐户A调用有关存款令牌的函数。在这种情况下,当您编写此状态时,_token.transferFrom(msg.sender, to, amount);,(msg.sender是智能契约),您不能将任何金额转移到接收方地址,因为智能契约没有令牌的数量。

  • last问题是,当您从智能合同中转移令牌以解决您必须使用transfer()函数而不是transferFrom()时,因为最后一个函数需要批准+传输,而智能合同本身不能批准。而transfer()只使用转帐资金。

要解决此问题,您可以看到以下智能契约代码:

代码语言:javascript
代码运行次数:0
复制
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol";

contract TokenTransfer {
    IERC20 _token;

    // token = MyToken's contract address
    constructor(address token) {
        _token = IERC20(token);
    }

    // Modifier to check token allowance
    modifier checkAllowance(uint amount) {
        require(_token.allowance(msg.sender, address(this)) >= amount, "Error");
        _;
    }

    // In your case, Account A must to call this function and then deposit an amount of tokens 
    function depositTokens(uint _amount) public checkAllowance(_amount) {
        _token.transferFrom(msg.sender, address(this), _amount);
    }
    
    // to = Account B's address
    function stake(address to, uint amount) public {
        _token.transfer(to, amount);
    }

    // Allow you to show how many tokens owns this smart contract
    function getSmartContractBalance() external view returns(uint) {
        return _token.balanceOf(address(this));
    }
    
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71941928

复制
相关文章
.NET 5 中使用 Consul+Ocelot+Polly缓存、限流、熔断、降级
链接:cnblogs.com/wei325/archive/2021/09/27/15308498.html
郑子铭
2021/11/10
1.8K0
.NET 5 中使用 Consul+Ocelot+Polly缓存、限流、熔断、降级
聊聊Asp.net Core中如何做服务的熔断与降级
而对于微服务来说,熔断就是我们常说的“保险丝”,意为当服务出现某些状况时,切断服务,从而防止应用程序不断地尝试执行可能会失败的操作造成系统的“雪崩”;或者大量的超时等待导致系统卡死等情况,很多地方也将其成为“过载保护”。
乔达摩@嘿
2023/07/21
3720
聊聊Asp.net Core中如何做服务的熔断与降级
API网关Ocelot 使用Polly 处理部分失败问题
在实现API Gateway过程中,另外一个需要考虑的问题就是部分失败。这个问题发生在分布式系统中当一个服务调用另外一个服务超时或者不可用的情况。API Gateway不应该被阻断并处于无限期等待下游服务的状态。但是,如何处理这种失败依赖于特定的场景和具体服务。如果是产品信息服务无响应,那么API Gateway就应该给客户端返回一个错误。 Ocelot 是一个使用.NET Core平台上的一个API Gateway,最近我在参与这个项目的开发,开发完成第一个就是使用Polly 处理部分失败问题。各位同学可
张善友
2018/01/22
1.3K0
.NET 基金会项目介绍-Polly
如今的云应用程序、移动设备、流数据处理和 IoT 技术等等都非常依赖于可靠的系统连通性。不过现实是:基础系统可能出现操作失败,网络波动时有发生:或中断、或延时、或瞬时波动、或峰值负载 —— 这些都对100%的系统连通性造成挑战。
newbe36524
2020/03/16
6030
ASP.NET Core 使用HttpClientFactory Polly实现熔断降级
在NET Core2.1后也是增加更新了很多东西,当然HttpClientFactory更新中的一部分.虽然说HttpClient这个实现了disposable,但使用它的时候用using包装块的方式通常不是最好的选择。处理HttpClient,底层socket套接字不会立即释放。该HttpClient类是未多个请求重复使用而创建的。需要不同的基地址,不同的HTTP 标头和其他对请求个性化操作的场景时,需要动手管理多个HttpClient实例,为了简化HttpClient实例管理,.NET Core 2.1提供了一个新的HTTPClientFactory - 它可以创建,缓存和处理HttpClient实例。
HueiFeng
2020/03/13
1.1K0
ASP.NET Core 使用HttpClientFactory Polly实现熔断降级
图片上传图床与备份回退策略
主要完成的技术要点是对接图床,并且在本地备份(相对于服务器的本地),然后记录计入数据库。
时光潜流
2022/12/26
4080
图片上传图床与备份回退策略
.NET Core微服务之基于Polly+AspectCore实现熔断与降级机制
  在广义的解释中,熔断主要是指为控制股票、期货或其他金融衍生产品的交易风险,为其单日价格波动幅度规定区间限制,一旦成交价触及区间上下限,交易则自动中断一段时间(“熔即断”),或就此“躺平”而不得超过上限或下限(“熔而不断”)。
Edison Zhou
2018/08/07
2K0
.NET Core微服务之基于Polly+AspectCore实现熔断与降级机制
asp.net core 使用HttpClientFactory Polly实现熔断降级
在NET Core2.1后也是增加更新了很多东西,当然HttpClientFactory更新中的一部分.虽然说HttpClient这个实现了disposable,但使用它的时候用using包装块的方式通常不是最好的选择。处理HttpClient,底层socket套接字不会立即释放。该HttpClient类是未多个请求重复使用而创建的。需要不同的基地址,不同的HTTP 标头和其他对请求个性化操作的场景时,需要动手管理多个HttpClient实例,为了简化HttpClient实例管理,.NET Core 2.1提供了一个新的HTTPClientFactory - 它可以创建,缓存和处理HttpClient实例。
HueiFeng
2020/02/12
8390
asp.net core 使用HttpClientFactory Polly实现熔断降级
asp.net core 使用HttpClientFactory Polly实现熔断降级
在NET Core2.1后也是增加更新了很多东西,当然HttpClientFactory更新中的一部分.虽然说HttpClient这个实现了disposable,但使用它的时候用using包装块的方式通常不是最好的选择。
梁规晓
2019/09/24
9040
asp.net core 使用HttpClientFactory Polly实现熔断降级
项目中的异常处理策略与最佳实践
在软件开发的世界里,异常就如同人生中的意外,时常会出现,却又令人防不胜防。无论是在什么规模的项目中,异常处理都是不可或缺的一环。今天,我们将深入探讨,在项目开发中,为什么你一定会使用异常处理,以及如何巧妙地运用它,为你的代码赋予更高的稳定性和可维护性。
coderidea
2023/09/07
6080
项目中的异常处理策略与最佳实践
ASP VNext 开源服务容错处理库Polly使用文档
在进入SOA之后,我们的代码从本地方法调用变成了跨机器的通信。任何一个新技术的引入都会为我们解决特定的问题,都会带来一些新的问题。比如网络故障、依赖服务崩溃、超时、服务器内存与CPU等其它问题。正是因为这些问题无法避免,所以我们在进行系统设计、特别是进行分布式系统设计的时候以“Design For Failure”(为失败而设计)为指导原则。把一些边缘场景以及服务之间的调用发生的异常和超时当成一定会发生的情况来预先进行处理。 Design For Failure 1. 一个依赖服务的故障不会严重破坏用户
用户1153966
2018/04/11
1.4K0
.Net Core with 微服务 - Polly 服务降级熔断
在我们实施微服务之后,服务间的调用变的异常频繁。多个服务之间可能是互相依赖的关系。某个服务出现故障或者是服务间的网络出现故障都会造成服务调用的失败,进而影响到某个业务服务处理失败。某一个服务调用失败轻则造成当前相关业务无法处理;重则可能耗尽资源而拉垮整个应用。为了尽可能的保证我们生产环境的可用性,至少是部分可用性我们就需要一些策略来保护我们的服务。
MJ.Zhou
2021/07/28
6910
负载均衡策略导致后端程序访问异常
  最近新部署了openshift集群,由于使用了自签证书,浏览器访问集群的https服务会报告警(如下图),在使用浏览器(特别是IE)访问openshift master暴露的服务时,选择继续访问时,出现了尝试很多次才能登陆成功的情况。
charlieroro
2020/03/24
1K0
负载均衡策略导致后端程序访问异常
.NET 异常处理的动作策略(Action Policy)
SQL Server 2008基于策略的管理,基于策略的管理(Policy Based Management),使DBA们可以制定管理策略,并将这些策略应用到服务器、数据库以及数据环境中的其他对象上去。基于动作策略(Action Policy)的异常处理使开发人员可以为异常处理制定策略,简单的说,动作策略只是一些可重复使用的一个装饰器,可以很容易应用与方法调用。 异常处理只是一个合乎逻辑的动作策略的一部分,动作策略决定如何对异常做出处理,微软的Enterprise Library的异常处理模块试图为开发人员
张善友
2018/01/19
7530
云原生系统之弹性模式
1.云原生系统的弹性模式resiliency pattern 1.1 服务故障的雪崩效应 1.2 回应之前云原生--弹性请求的疑问?
有态度的马甲
2021/08/05
1.6K0
使用熔断器设计模式保护软件
作为软件开发人员,我们的生活是快节奏的,我们采用的是敏捷软件开发方法,迭代式的开发我们软件功能,开发完成提交测试,通过了QA的测试后被部署到生产环境,然后可怕的事情在生产环境里发生了,生产环境的压力超过了我们的设计值,也就是说过载了,这种情况经常发生在调用远程服务,因为没有做过载保护,导致请求的资源阻塞在服务器上等待从而耗尽系统或者服务器资源,很多时候刚开始的时候只是系统出现了局部的,小规模的故障,然而由于种种原因,故障的范围越来越大,最终导致了全局性的后果,墨菲定律在软件里面特别灵验。俗话说就是"任何会出
张善友
2018/01/19
1K0
使用熔断器设计模式保护软件
如何解决EnterLib异常处理框架最大的局限——基于异常"类型"的异常处理策略
个人觉得EnterLib的EHAB(Exception Handling Application Block)是一个不错的异常处理框架,借助于EHAB,我们可以配置的方式来自定义异常处理策略,从而带来最大的灵活性和可维护性。但是,在我看来,EHAB有一个最大的局限,把就是异常处理策略的粒度过大——只能提供基于异常类型级别。本篇文章通过一个自定义ExceptionHandler很好地解决了这个问题。 一、EnterLib基于异常类型的异常处理策略 EnterLib的异常处理策略基本上可以通过这样的的公式来表示
蒋金楠
2018/01/16
1.3K0
.NET Core 3.0深入源码理解HttpClientFactory之实战
前面两篇文章透过源码角度,理解了HttpClientFactory的内部实现,当我们在项目中使用时,总会涉及以下几个问题:
Edison.Ma
2019/08/06
1.2K0
「第二部:容器和微服务架构](16)微服务的回弹性和高可用性
处理意外故障是最难解决的问题之一,特别是在分布式系统中。开发人员编写的大部分代码都涉及异常处理,而这也是测试中花费最多时间的地方。这个问题比编写处理失败的代码更复杂。当运行微服务的机器出现故障时会发生什么情况?您不仅需要检测此微服务故障(这本身就是一个难题),而且还需要一些东西来重新启动您的微服务。
架构师研究会
2020/07/18
1.1K0
ASP.NET Core 6框架揭秘实例演示[17]:利用IHttpClientFactory工厂来创建HttpClient
在一个采用依赖注入框架的应用中,我们一般不太推荐利用手工创建的HttpClient对象来进行HTTP调用,使用的HttpClient对象最好利用注入的IHttpClientFactory工厂来创建。前者引起的问题,以及后者带来的好处,将通过如下这几个演示程序展现出来。IHttpClientFactory类型由“Microsoft.Extensions.Http”这个NuGet包提供,“Microsoft.NET.Sdk.Web”SDK具有该包的默认引用。如果采用“Microsoft.NET.Sdk”这个SDK,需要添加该包的引用。(本篇提供的实例已经汇总到《ASP.NET Core 6框架揭秘-实例演示版》)
蒋金楠
2022/05/09
8460
ASP.NET Core 6框架揭秘实例演示[17]:利用IHttpClientFactory工厂来创建HttpClient

相似问题

如何处理两个按钮单击事件上的相同代码

17

处理多个按钮和多个单击事件

21

如何在WPF中处理多个类似按钮上的单击事件?

30

如何设置多个按钮上的单击事件

310

单击“保存”按钮上的事件处理

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档