资讯动态

从EtherEx到ERC20:标准代币API(approve/transferFrom)的起源与演进完整指南

发布时间:2026/8/27 16:30:07 来源:尧图企业网站定制
从EtherEx到ERC20标准代币APIapprove/transferFrom的起源与演进完整指南【免费下载链接】etherexEtherEx is an open source, fully transparent, next generation decentralized exchange built on Ethereum.项目地址: https://gitcode.com/gh_mirrors/et/etherexEtherEx 是 2014 年上线的最早一批以太坊开源去中心化交易所之一它的合约代码第一次把approve、transferFrom、allowance、transfer、balanceOf这套接口组合固定了下来成为后来 EIP-20 草案、乃至如今 ERC20 标准代币 API 的直接前身。本文将带你从一份真实的历史源码出发拆解授权转账机制是如何诞生的以及新手如何复现整套流程。一、为什么去中心化交易所需要标准代币API传统交易所由平台统一托管用户资产而 EtherEx 完全跑在链上代币必须真实地躺在交易所合约里交易撮合只在合约内部更新账本见 contracts/etherex.se。这就引出一个经典难题代币合约属于用户私钥在用户手里但交易所合约需要能取走用户批准过的那部分代币来完成充值deposit。解法只有一个用户先授权交易所再代转。这个授权 代转两步式交互就是approve/transferFrom标准代币 API 的雏形。二、拆解 approve / transferFrom授权转账的完整链路EtherEx 附带了一个示例标准代币 ETX用 Serpent 语言实现源码仅 80 多行是理解整套 API 最好的标本contracts/etx.se2.1 approve把取币额度交给交易所def approve(_spender, _value): self.accounts[msg.sender].custodians[_spender].maxValue _value log(typeApproval, msg.sender, _spender, _value)用户调用 approve等于在链上声明我允许地址_spender交易所合约最多转走我_value个代币。这笔授权记在custodians字段里并广播Approval事件。配套只读方法 allowance 可随时查询剩余额度钱包界面正是靠它显示还可代转多少。2.2 transferFrom交易所按额度代转充值时用户调用的是交易所的deposit交易所合约再回头调用代币合约的 transferFromif balance _value and _value custodians[msg.sender].maxValue: # 扣余额、加目标余额、扣减授权额度注意两个细节msg.sender在这里是交易所合约它只能动用用户预先批准、且未用完的额度每转一次额度就自动递减。授权是消耗型的额度用完即失效这是与无限授权的关键安全差异。2.3 deposit用户视角只需一步交易所侧的充值入口在 contracts/etherex.sedef deposit(amount, market_id): if self.markets[market_id].contract.transferFrom(msg.sender, self, amount): # 更新用户在交易所的可用余额完整链路是用户 approve → 用户调用交易所 deposit → 交易所 transferFrom 取币 → 交易所账本加余额。整个过程无需用户交出私钥也没有中间托管方。部署清单 contracts/EtherEx.yaml 里就记录了这条真实调用链先approveOnce再deposit是当年链上充值的标准姿势。2.4 withdraw 与 balanceOf标准 API 的另外半边提现交易所直接调用代币合约的 transfer 把币打回用户地址对应交易所的 withdraw。因为交易所合约自己就持有代币这一步不需要任何授权。查余额前端界面显示用户持仓依赖 balanceOf前端 ABI 里也完整声明了这组接口frontend/app/js/abi/sub.js。五个方法各司其职构成了最早的标准代币接口清单README 中称其为Subcurrency APIREADME.md。三、add_market交易所如何把非标准代币挡在门外标准 API 的另一面是准入校验。交易所注册新市场时会用空参数逐个试探代币合约的五个方法# Check Standard Token support if contract.allowance(msg.sender, self) ! 0: return MARKET_NONSTANDARD_ALLOWANCE if contract.approve(self, 0) ! 1: return MARKET_NONSTANDARD_APPROVE ...见 add_market 校验逻辑 与错误码定义 MARKET_NONSTANDARD_*40~44。任何方法签名、返回值不符合约定市场注册直接失败——这是链上接口标准的第一道强制门槛测试里甚至专门构造了返回-1的非标准合约来验证拒绝逻辑tests/test_etherex.py。四、从 EIP-20 草案到 ERC20一段 API 的演进史阶段时间变化Subcurrency API2014–2015EtherEx 时代approve/transferFrom/allowance/transfer/balanceOf返回值用 0/1 表示成败EIP-20 草案2015社区标准化提案接口基本定型事件与布尔返回值开始被强调ERC20 标准2018正式编号强制Transfer/Approval事件、totalSupply规范布尔返回值README 中有一句关键旁证早期deposit曾依赖代币合约自定义方法后被弃用明确转向标准化合约 APIREADME.md。这条从各自实现到统一接口的路径正是 ERC20 诞生的缩影——你今天在 MetaMask 里点下的每一次 Approve走的都是这条 2014 年就铺好的路。五、新手实践如何本地复现 approve/transferFrom 全流程克隆仓库git clone https://gitcode.com/gh_mirrors/et/etherex安装依赖并运行测试需要 pyethereum 测试框架pip install -r dev_requirements.txt py.test -vvrs推荐阅读的测试用例它们就是标准 API 行为的活文档授权→充值→额度清零的完整断言test_deposit_to_exchange连续两次 approve 的额度覆盖行为test_approve_twice_then_transfer跑通这些测试你就亲手验证了一遍标准代币 API 的起源。六、结语五个小方法定义了一个时代的代币标准从 contracts/etx.se 的 80 行代码到今天数以万计的 ERC20 代币接口几乎没有变过approve授权、transferFrom代转、allowance查额度、transfer直转、balanceOf查余额。EtherEx 的价值正是最早用真实去中心化交易所证明一套简洁的标准代币 API足以让资产在无人托管的链上安全流转。读懂它你就读懂了 ERC20 的地基。【免费下载链接】etherexEtherEx is an open source, fully transparent, next generation decentralized exchange built on Ethereum.项目地址: https://gitcode.com/gh_mirrors/et/etherex创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价