ERC230 VS ERC223

news/2024/7/7 14:32:31 标签: 区块链

ERC223对ERC220的改进

ERC223是以太坊上最新的代币(token)接口标准,主要是为了解决ERC220代币转账丢失问题,那么怎么解决的呢,一起来看看.

1. ERC220 存在问题

ERC220接口中存在诸多转账接口,以transfer为例.
/// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) public returns (bool success);
这个接口意思就是我给一个指定地址转多少token,功能非常简单,但是当初设计的时候没有考虑到的一个问题就是如果接收者是一个智能合约,那么合约是没法感知自己收到了多少token的.

当然ERC220只是一个接口标准(类似于dll接口),具体实现者完全可以考虑_to是智能合约时,采取一些特殊动作.

2. ERC223 标准化_to是合约地址时如何响应

上文提到具体实现者可以自己采取特殊动作,但是这缺乏规范,无法推广.

2.1 合约规范化的响应动作

  function transfer(address to, uint value) public returns (bool ok);
  function transfer(address to, uint value, bytes data) public returns (bool ok);

第一个接口兼容ERC220,第二个则是扩展ERC220,可以传递给合约一些数据(参数data).
具体实现就是,如果to是合约,那么会尝试调用该合约的tokenFallback函数,如果成功,则token转移成功,否则失败.
这个思路实际上就是以太坊上智能合约接收以太币时有一个fallback函数.

2.2 更灵活的响应机制

transfer(address _to, uint _value, bytes _data, string _custom_fallback)

如果接收方合约没有提供tokenFallback函数,则可以通过合约的fallback函数来传递信息,让合约知道有人给他转token了.
具体就是在这里

  assert(_to.call.value(0)(bytes4(keccak256(_custom_fallback)), msg.sender, _value, _data));

这里的_to.call.value(0)(...) 就是直接调用合约fallback函数,但是我没给你转以太币,只是给你捎了个信儿,可以包含更多的自定义信息.当然gas也不便宜啊..


http://www.niftyadmin.cn/n/977128.html

相关文章

MQTT协议笔记之连接和心跳

前言 本篇会把连接(CONNECT)、心跳(PINGREQ/PINGRESP)、确认(CONNACK)、断开连接(DISCONNECT)和在一起。 CONNECT 像前面所说,MQTT有关字符串部分采用的修改版的UTF-8编码,CONNECT可变头部中协议名称、消息体都是采用修改版的UTF-8编码。前面基本上可变头…

性能测试中应该关注的参数

系统级事务响应时间、每秒事物数、每秒事物总数、每秒点击数、每秒错误数、错误类型、错误描述、吞吐量、实时访问日志记录。应用系统响应时间、吞吐量、性能指数、异常(Java 异常、HTTP 无响应、Web 无响应)、代码执行时间。数据库SQL 语句执行计划、SQ…

学习机器学习过程中都走过哪些弯路,怎样避免走弯路?

这是我在知乎上的一个回答,整理以后发布掘金上,分享给大家,也和大家说说自己所遭遇的一些坑,一些过程,未来我会在掘金持续更新我的NLP学习之路,还请大家多多指教!要说弯路,其实自己遇到了不少:1:不要迷信最新的算法和论文:一定要从最基础的知识学起(当时去听马毅的报告,马老师说…

HDU 1151 Air Raid(最小路径覆盖)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid1151 题目大意:在一个城镇,有m个路口,和n条路,这些路都是单向的,而且路不会形成环,现在要弄一些伞兵去巡查这个城镇, 伞兵只能…

编程语言的进化

早上读到了一篇文章《Lisp的永恒之道》 这一篇文章解决了我一直以来对Lisp编程语言的疑惑,加深了对DSL(领域编程语言),同时对编程语言的理解也越来越深入。写一篇文章的目的就是从主要编程语言的进化来看看编程语言发展的过程以及…

RichTextBox指定全部文字显示不同颜色及部分文字高亮颜色显示

指定全部显示不同颜色: public void SetTextContent(string text, ColorEnum color){Font font new Font("微软雅黑", 14, FontStyle.Bold);richTextBox1.Font font;richTextBox1.Text text;richTextBox1.ReadOnly true;layoutControlItem2.Selected …

Java RESTful Web Service实战

编者按: InfoQ开设栏目“品味书香”,精选技术书籍的精彩章节,以及分享看完书留下的思考和收获,欢迎大家关注。本文节选自韩陆著《Java RESTful Web Service实战》中的章节“REST API 设计”,介绍REST请求流程等内容。\…

Android报unable to instantiate application怎么解决?

引自&#xff1a;http://my.oschina.net/u/1244156/blog/219430Android应用程序启动的时候&#xff0c;后台可能会报unable to instantiate application异常以下是原因分析和解决方法&#xff1a;可能原因1&#xff1a; <application android:name"com.ershou…