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

目录
相关文章
|
7月前
|
JavaScript 前端开发 API
如何通过合约获取所有ERC20转账
通过使用正确的API,可以轻松获取与合约地址相关的ERC20代币的所有转账记录。通过创建账户、编写使用API的脚本并使用getTokenTransfers函数,您可以访问和分析有关ERC20代币的有价值的转账数据。
164 0
|
7月前
|
JavaScript 前端开发 IDE
如何获取某个地址拥有的所有ERC20代币
本文将介绍如何设置Chainbase帐户、编写使用Chainbase API的脚本以及获取ERC20令牌余额的过程。
165 0
|
8月前
|
测试技术 API 区块链
【Web3探索】NFT 标准的演变:ERC-721 与 ERC-1155
要了解NFT的当前情况,我们必须深入了解它们的发展历史。ERC-20标准在代币领域占据主导地位,为各种项目提供了可替代代币的创建。ERC-1155结合了可替代和不可替代代币,为开发者在代币管理方面提供了更多的灵活性和效率。
102 0
|
9月前
|
前端开发 安全 JavaScript
  ERC20 Token智能合约DApp开发
ERC20 Token智能合约DApp开发是指基于以太坊区块链平台和ERC20 Token标准开发的去中心化应用程序,用于数字货币、代币、积分等的发行、交易和管理。
|
11月前
|
区块链
ERC20代币合约开发规则详解(源码示例)
ERC20代币合约是一个遵循ERC20标准的代币合约,它实现了代币转移、代币冻结、代币解锁等功能。作为一个通用的标准,ERC20代币合约可以被广泛应用于各种去中心化交易所、钱包、ICO等场景。
|
JSON 安全 区块链
ERC1155
从外网找的博客,自己翻译了一下,记录一下
ERC20 Short Address Attack
ERC20 Short Address Attack
如何创建以太坊ERC20代币
看这篇文章需要对以太坊,智能合约,代币等概念有基本的了解。 什么是ERC20 可以把ERC20简单理解成以太坊上的一个代币协议,所有基于以太坊开发的代币合约都遵守这个协议。
2033 0
|
区块链
ERC777剖析
ERC777是一个新的高级代币标准,可以视为ERC20的升级版本,因此它解决了ERC20以及ERC223存在的一些问题,开发者可以根据自己的具体需求进行选型。 1、使用ERC820进行合约注册 有别于ERC20的自由散漫,ERC777利用了新的ERC820标准提供的集中式的智能合约注册表和合约接口实现查询功能,以实现某种程度的内省。
1239 0
|
API PHP 区块链
ERC20合约交易监听的PHP实现代码
EthMon开发包用于监听以太坊ERC20代币合约的转账交易,官方下载地址:http://sc.hubwiz.com/codebag/ethmon-php/。 1、开发包概述 EthMon代币交易监听开发包特点如下: 监听以太坊合约日志中指定地址发生的代币转入/转出交易 自定义代币交易发生时的业...
2453 0