ERC230 VS ERC223

简介: ERC223对ERC220的改进ERC223是以太坊上最新的代币(token)接口标准,主要是为了解决ERC220代币转账丢失问题,那么怎么解决的呢,一起来看看.1. ERC220 存在问题ERC220接口中存在诸多转账接口,以transfer为例.

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也不便宜啊..

目录
相关文章
|
搜索推荐
windows11任务栏靠左
windows11任务栏靠左
137 2
|
Python
一个羊了个羊的游戏脚本
一个羊了个羊的游戏脚本
282 3
|
6月前
|
弹性计算 运维 监控
【阿里云】操作系统控制台——体验与测评
阿里云操作系统控制台是一款强大的综合管理平台,集健康评估、智能诊断与性能优化于一体。通过可视化界面,用户可便捷高效地管理操作系统,降低运维复杂度。它支持弹性云服务器(ECS)的监控与调优,提供进程热点追踪、系统诊断等功能,帮助用户快速定位问题并给出优化建议。此外,控制台还具备地域限制和组件安装要求,需确保配置一致性。对于中小企业和技术新手,这款工具极大简化了运维流程,提升了资源利用率和系统稳定性。建议增加报告导出功能及内嵌智能助手,进一步优化用户体验。总结来说,该控制台如同“云服务器管家”,让运维更简单、业务更稳定。
|
JavaScript 开发者 索引
搞懂 TypeScript 中的映射类型(Mapped Types)
搞懂 TypeScript 中的映射类型(Mapped Types)
818 0
|
11月前
|
人工智能 文字识别 测试技术
苹果多模态模型大升级!文本密集、多图理解,全能小钢炮
苹果公司近日发布了其最新版本的多模态模型MM1.5,该模型在文本密集图像理解、视觉引用和定位以及多图推理等方面进行了显著升级。MM1.5基于MM1模型,具备更强的文本处理、视觉理解和多图推理能力,适用于多种下游任务。此外,还推出了专门用于视频理解和移动UI理解的变体。
189 3
|
12月前
|
Python
Matplotlib 教程 之 Matplotlib 中文显示 1
Matplotlib 中文显示教程:介绍如何在 Matplotlib 中正确显示中文,包括设置 Matplotlib 字体参数和下载支持中文的字体库。通过获取系统字体库列表,选择合适的中文字体进行配置。
238 0
|
消息中间件 数据采集 Serverless
云消息队列 RocketMQ 版-消息集成-概述
消息集成是助力企业数字化转型的全栈式消息与数据集成平台,简化流程,支持云上云下、跨区域集成。它提供低代码的事件流服务,具备数据源集成、数据清洗、Serverless自定义处理等功能,支持丰富的数据源和跨端连接。然而,使用时存在如单个任务数据限制、任务名称长度等约束。消息流入(Source)负责从各种数据源获取数据,消息流出(Sink)将数据分发到目标,数据处理(Transform)允许数据转换和分析,而任务(Task)则结合这些组件执行实际的集成操作。
380 3
|
SQL 存储 关系型数据库
SQL 优化经历:从 30248.271s 到 0.001s
SQL 优化经历:从 30248.271s 到 0.001s
63 1
|
关系型数据库 MySQL Linux
centos7.6安装MySQL5.7采坑指南
centos7.6安装MySQL5.7采坑指南
334 0
|
存储 编译器 C语言
聊一聊C语言位域/位段
这样定义结构体变量是什么意思呢? 主要原因是:有些信息在存储时,只需占几个或一个二进制位(bit),并不需要占用一个完整的字节。例如,在存放一个开关量时,只有0和1两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言提供了一种数据结构,称为“位域”或“位段”。