本文详细介绍了ERC-7699,这一新提议扩展了广泛采用的ERC-20代币标准,允许用户在转账中附加参考信息,从而提高交易的清晰度和可追溯性。文章涵盖了ERC-7699的背景、功能、实现方式及其在去中心化金融(DeFi)等应用中的潜在好处,强调了为用户带来的更高体验和更广泛的采用可能性。
在不断发展的区块链技术领域,以太坊生态系统继续通过新的提案和标准推动创新的边界,旨在提高功能性和用户体验。其中一个提案是ERC-7699,这是对广泛采用的ERC-20代币标准的扩展。ERC-7699引入了一个新概念:在ERC-20代币转账中包含参考信息。这一看似简单的补充有可能显著提高交易的清晰度和可追溯性,使用户能够直接将上下文信息(例如支付细节或交易目的)附加到他们的转移中。随着去中心化金融(DeFi)和其他基于区块链的应用变得日益复杂,ERC-7699作为简化以太坊网络内沟通和问责的实际解决方案应运而生。本文深入探讨ERC-7699的机制、好处和潜在用例,揭示它如何塑造代币交互的未来。
ERC,即以太坊请求注释, governs和设置以太坊区块链上代币的边界/规则。ERC与以太坊的代币相关。
ERC为以太坊提供了显著的好处,特别是在标准化、开发效率和协调方面。标准化确保用户安全,通过防止与遵循不同、不统一标准的代币和DeFi协议交互所带来的风险。通过遵循已接受的ERC,用户可以更安全地参与DeFi。此外,ERC通过提供预定义框架简化了开发,降低了与区块链技术和以太坊虚拟机(EVM)相关的复杂性。这提高了开发级别的互操作性,使开发人员更容易构建和集成新功能。最后,ERC促进了以太坊生态系统内的协调,确保开发人员和DeFi产品与已接受的提案保持一致。当ERC或EIP被采纳时,项目必须实施该标准以保持兼容性并受益于新的改进,从而维护无缝和互联的DeFi环境。
ERC标准可作为可替代和不可替代的代币。主要的可替代代币标准是ERC-20,而不可替代的标准是ERC-721。
以太坊的主要可替代代币标准是ERC-20。ERC-20允许开发者与其他产品和服务构建互操作的代币应用程序。
ERC-20引入了如name
、symbol
、decimals
、totalSupply
、balanceOf
、approve
、allowance
、transfer
和transferFrom
等方法。它还提供了两个额外的事件:Transfer
和Approval
。基本上,它实现了智能合约内的代币API。
ERC-20提供了:
ERC-7699在transfer
和transferFrom
方法中改进了ERC-20,增加了一些补充内容。以下是ERC-20在ERC-7699中获得的改进概述。
在ERC-20中,
transfer
:包括代币金额的标识符、目标地址的标识符,以及一个名为Transfer
的事件。它检查标识符是否满足某些成功的标准。transferFrom
:包括代币金额和目标地址的标识符,以及一个名为Transfer
的事件。它允许合同代表你转移代币和/或收取费用。ERC-7699提出一种新的代币标准,并在ERC-20可替代代币标准的基础上引入转移参考扩展。它建议在每个ERC-20交易中包含一个唯一标识符,以将转移与ERC-7699中的订单/发票关联。通过标准化参考,ERC-7699试图实现传统金融(TradFi)转移中的用户体验。
通过标准化的以太坊改进过程是实现其最佳版本的关键。ERC标准化开启了许多使用和开发DeFi生态系统的新路径。
1- 实现更好的用户体验: 传统银行系统中的转移扩展实现了更好的用户体验。ERC-20奠定了代币转账的基础,但ERC-7699改进了处理流程并引入了用户体验的提升。这个transferReference
方法可以包含发票/采购订单的用户ID。
2- 提高大众采用率: 以太坊需要更多用户,ERC-7699提供与TradFi系统相同的用户界面和体验。ERC-7699可能提高大众采用率。
此外,ERC-7699还允许以太坊在发送ETH时提供任意消息,这是ERC-20标准所没有的功能。
ERC-7699为以太坊的新用例建立了标准,通过为ERC-20交易提供参考;支付和价值的转移将变得更加简单。
由于这一EIP是对以太坊协议升级的进一步改进和扩展,因此该ERC提案需要EIP-20和EIP-165来进行开发。
ERC-20核心包括Transfer
和Approval
事件,这些事件触发并促进代币转账。Transfer
事件记录代币流动,而Approval
事件允许第三方合约代表用户支出代币。
在ERC-7699中,我们关注transfer
和transferFrom
方法中额外标识符的变化,增强它们的功能,同时保持与ERC-20标准的兼容性。
ERC-7699仅为ERC-20的transfer
和transferFrom
方法带来基本补充。
在ERC-20中,transfer
方法是:
function transfer(address _to, uint256 _value) public returns (bool success)
这包括一个地址参数作为目标和一个值参数作为代表要发送的代币数量的代币的数量。它还公共返回该函数在调用中是否失败。
transferFrom
方法是:
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
这包括一个地址参数作为来源,另一个作为目的地。它还包括一个值参数作为代表要发送的代币数量的代币的数量。它也公共返回该函数在调用中是否失败。
ERC-7699引入了一个新参数,称为transferReference
。
在ERC-7699中,transfer
方法是:
function transfer(address to, uint256 amount, bytes calldata transferReference) external returns (bool);
这包括相同的目标地址和数量参数,但增加了transferReference
。transferReference
参数定义为calldata
,因为它可以保持一些数据。
public
到external
的更改使结构更高效。使用external
关键字的原因是:
1- external
关键字旨在从calldata
读取数据,而public
关键字旨在将数组参数复制到内存中。这种方法提高了Solidity的效率。
2- 与从calldata
读取数据相比,内存分配更为昂贵。在使用public
和external
关键字定义一些代码的例子中,使用public
关键字的Gas费用几乎是external
关键字的两倍。
transferFrom
方法类似于:
function transferFrom(address from, address to, uint256 amount, bytes calldata transferReference) external returns (bool);
这个函数与其ERC-20版本具有相同的参数,并增加了transferReference
。它使用external
关键字来提高效率并降低Gas成本。
ERC-7699还包括一个名为TransferReference
的小事件。这不是ERC-20中的附加更改,而是在此标准中新事件。
event TransferReference(bytes32 indexed loggedReference);
TransferReference
事件只有一个名为loggedReference
的参数。loggedReference
可以是transferReference
参数的确切副本,或者可以从transferReference
参数的处理过程中得到。所有loggedReference
参数和TransferReference
事件的作用是以calldata
形式记录参考。通过这样做,参考内容将被哈希到事件日志中。此外,由于bytes32类型的非哈希存在,它将是公开可读的。
通过新用户实现更好的用户体验和大众采用率对以太坊的可持续性至关重要。此外,带来更好的用户体验的改进需要与大多数或所有司法管辖区的法规相一致。
全球范围内正在实施针对加密货币、区块链,特别是稳定币的法规。例如,欧盟有MiCa,而美国证券交易委员会(SEC)负责US法规。理解并推动法规使主要金融科技公司(如Visa和Mastercard)能够参与该领域。ERC-7699引入了交易和意图的配对,这是传统金融的一个关键特征。
目前,如果用户想在其交易中包含支付参考,他们必须依赖于链下外部系统或自定义支付代理实施来存储和处理信息。然而,在传统金融系统中,支付参考自然地包括在转账中。以太坊通过ERC-7699引入了这一功能,这一功能在链上交易中一直是基本需求。
协议和产品可以在其项目中采用ERC-7699,以增强用户体验并推动区块链和加密用例的大众采用。
1- 钱包: 传统银行系统在移动银行系统和应用程序成熟时达到了最佳用户体验。通过日常设备让相关产品易于用户掌握是关键。类似地,以太坊通过增强移动开发和抽象采用而受益。钱包在这方面发挥了重要作用。网页扩展钱包很好,但移动钱包容易使用。具有抽象使用特性的移动钱包是抽象改进的成果。通过使用ERC-7699的整合,它们将实现更多用户,因为这样的举措将带来更好的用户体验。实质上,ERC-7699将ETH转移与ERC-20代币转账等同对待。
2- 协议: ERC-7699可以在DeFi协议中进行常规交易,例如交换和质押。人们可以使用文本扩展为交换发送消息。该标准在国库、DAO和有链上活动的CEX中具有相关的用例。国库可以发送带有唯一参考参数的资金。CEX在链上的常规活动成本高昂,不应如此。此类CEX可以为用户提供一个集账号,并要求转账包括唯一参考。
3- 正式机构: 像政府部门这样的正式机构可以使用ERC-7699进行链上转账或持有资金,而无需利用去中心化协议国库。例如,美国用来持有网络犯罪收益的_战略加密储备_可以利用该标准提供的文本信息,适当地标记财务。那些在链下使用传统文书和简单治理程序的政府,但利用使用区块链的银行国库的方式,也可以应用ERC-7699的创新。
4- 项目: 主流采用意味着用户在日常挑战中转向加密和区块链用例。ERC-7699是推动这种方式的理想方法,因为其关键组成部分是可以改善用户体验的扩展。例如,采用可变ERC-20项目变得有吸引力,因为它们简化了项目管理流程。像CZKC这样的项目已经采用了ERC-7699标准。
ERC-7699是ERC-20的扩展(或升级)版本,包含对ERC-20进行管理变更的接口规范。
希望与ERC-20标准相等并扩展ERC-7699的合同需要实现此接口:
interface IERC7699 {
function transfer(address to, uint256 amount, bytes calldata transferReference) external returns (bool);
function transferFrom(address from, address to, uint256 amount, bytes calldata transferReference) external returns (bool);
event TransferReference(bytes32 indexed loggedReference);
}
上面的插图表明了在ERC-20基础上,该ERC增加了transfer
和transferFrom
方法中的补充内容。
如果查看ERC-7699接口的代码段和ERC-20中的方法版本,transfer
和transferFrom
方法都有调用的事件transferReference
,其参数为loggedReference
。
Transfer
事件必须在TransferReference
事件之后发出。条件是必须寻找Transfer
事件的日志记录,才能触发TransferReference
事件。此外,所发出的loggedReference
可能是transferReference
的确切副本,也可能是transferReference
由其丰富的内容派生的数据。需要注意的是,transferReference
和loggedReference
并非总是被期望相等。
重要的是,这些方法是扩展,因此不必总是满足新的标识符。例如,transferReference
可以为空。在这种情况下,用户可以但不必发出TransferReference
事件。在这种情况下,转账在正常的ERC-20标准下进行。
此外,TransferReference
不应采用匿名说明符,以确保事件签名被记录,并且可以用作过滤器。
ERC-7699与现有的ERC-20代币标准完全兼容。这意味着,由于它只是一个扩展,与现有的transfer
和transferFrom
函数可以一起使用。这些现有的可升级ERC-20代币可以使用此标准,并可以选择通过此代币标准添加支付参考。
interface IERC7699 {
event TransferReference(bytes32 indexed loggedReference);
function transfer(address to, uint256 amount, bytes calldata transferReference) external returns (bool);
function transferFrom(address from, address to, uint256 amount, bytes calldata transferReference) external returns (bool);
}
该代码段介绍了ERC-7699代币标准的接口。使用此代币标准的代币可以通过此接口实现诸如铸造和转移等过程。此外,transfer
和transferFrom
函数都有transferReference
。同时,TransferReference
事件在接口中进行了定义以供发出。
contract ERC20TransferReference is ERC20, IERC7699 {
constructor() ERC20("ERC20 Transfer Reference Example", "TXRE") {
_mint(msg.sender, 987654321 * 1e18);
}
function _logReference(bytes calldata transferReference) internal virtual {
if (transferReference.length > 0) {
bytes32 loggedReference;
assembly {
loggedReference := calldataload(transferReference.offset)
}
emit TransferReference(loggedReference);
}
}
function transfer(address to, uint256 amount, bytes calldata transferReference) public virtual returns (bool) {
_logReference(transferReference);
return transfer(to, amount);
}
function transferFrom(address from, address to, uint256 amount, bytes calldata transferReference) public virtual returns (bool) {
_logReference(transferReference);
return transferFrom(from, to, amount);
}
}
该代码段是合约通过ERC-7699的接口铸造ERC-20代币的部分。该部分包含遵循默认ERC-20代币标准的transfer
和transferFrom
函数。_logReference
函数使我们能够将loggedReference
与TransferReference
事件的输出进行比较。
关于标准的安全性,有两个问题值得关注:
ERC-7699代表了ERC-20标准的深思熟虑和实际的演变,解决了代币转账中存在的长期空白,允许包含参考数据。允许用户将备忘录或上下文信息附加到交易中,提高了以太坊生态系统的透明度、问责制和可用性。无论是用于DeFi应用、跨境支付,还是企业用例,ERC-7699都为更清晰的沟通和更高效的交易追踪打开了新可能性。随着区块链领域的持续成熟,像ERC-7699这样的标准突显了迎合开发人员和用户不断增长的需求的渐进但影响深远的改进的重要性。凭借其简化工作流程和改善互操作性的潜力,ERC-7699有望成为去中心化技术持续演变中的一项有价值的工具。
我们由衷感谢Radek Svarz对文本的审阅,以及Daniel Ayuko对文章的编辑以及引言和结论部分的撰写。
由2077研究提供的内容仅供参考,并不构成财务、法律或税务建议。所表达的观点仅代表作者的观点,并不一定反映2077研究或其附属机构的观点。读者在解读所呈现的信息时,应进行自己的研究并运用独立判断。
- 原文链接: research.2077.xyz/erc-76...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!