木星链 木星链
Ctrl+D收藏木星链
首页 > ETH > 正文

TOKEN:安全的处理 ERC20 转账(解决非标准 ERC20 问题)

作者:

时间:1900/1/1 0:00:00

译文出自:登链翻译计划

译者:翻译小组

校对:Tiny熊

你可能认为在ERC-20调用几个函数非常简单,对吗?很不幸,不是的。有些事情我们必须要考虑,而且还可能出现一些很常见的问题。

我们从最简单的开始,下面我们要处理一个非常普通的token交易,下面的代码会导入并直接使用IERC20

对于像DAI这样的token来说这段代码是很完美的,调用transfer函数并在出错的时候回退调用。

但是,如果我们调用的是0x会发生什么?ZRX代码在这里。

functiontransferFrom(address_from,address_to,uint_value)returns(bool){if(balances>=_value&&allowed>=_value&&balances_value>=balances){balances=_value;balances-=_value;allowed-=_value;Transfer(_from,_to,_value);returntrue;}else{returnfalse;}}

币印潘志彪:因缺乏流动性导致提币困难,但资产是安全的,将于近期出方案:金色财经报道,近日社区消息称币印钱包提现出现困难。币印钱包发布公告表示,受近期币印钱包定期产品回款和转账集中情况影响,风控处理速度较常态稍慢,BTC等币种大额转账的处理速度较慢。

对此,币印创始人潘志彪在社交媒体回应,提现困难因缺乏流动性,但资产是安全的,且企业净资产为正,近期会出方案,方案有几个方向:1.流动性债务;2.债务换矿机;3.债务换股份等等。[2022/9/4 13:07:49]

我们可以看到,与DAI不同,当出错时0x不会回退交易,而是返回false,但是我们在代码中不管这个返回值。本质上,任何人都可以与我们合约的interactWithToken交易,合约会认为成功交易了一个token,但实际上什么也没有做。很糟糕!

ZRX仍然符合ERC-20标准,因为没有任何地方规定ERC-20合约必须在发生失败时回退交易。这两种方法都有优点和缺点。在上面的例子中,很明显我们只需要检查返回值就知道是否成功,一段简单的代码require(token

陈建彬:矿工借助金融衍生品可更安全的挖矿:金色财经现场报道,10月24日,松鼠矿机SMINER新品发布会暨2020全球显卡矿工大会在成都举行。在以《挖矿对冲金融,显卡穿越牛熊》为题的圆桌讨论中,松鼠矿机&闪挖联合创始人陈建彬表示,在2014年、2018年以及今年的312,矿圈还很稍有金融衍生品的概念,在这几个时间节点,对于矿工来说,挖出来的币贬值、矿机贬值,回本周期遥遥无期。闪挖等挖矿服务平台出来后,我们能够利用金融衍生品的杠杆和套服等服务去更安全的挖矿。[2020/10/24]

catchError(stringmemory/*reason*/){success=false;//specialhandlingdependingonerrormessagepossible}catch(bytesmemory/*lowLevelData*/){success=false;}if(success){//handlesuccesscase}else{//handlefailurecasewithoutreverting}}

声音 | 吴逸飞:Cdot跨链枢纽采用的是非共享安全的模式 可以缓解Polkadot接入成本问题:11月21日,在《金色深核》线上直播中,Cdot Network首席技术官吴逸飞表示,Cdot Network也在大力推广基于Substrate的应用链开发范式,设计上不同于Polkadot的是Cdot跨链枢纽采用的是非共享安全的模式,跨链协议采用的是IBC,这样就给基于Substrate开发应用链的团队更多的选择,降低创新成本,同时也缓解了Polkadot接入成本的问题。[2019/11/21]

这样你就可以为两个版本的ERC-20合约做错误处理。

怎样支持所有token

现在你已经支持了ERC-20标准的token,然而有相当多的token看起来像ERC-20,但是它的有些行为却不像,有些出现缺少返回值的错误。

有一段时间,OpenZeppelin有一个bug,他们在失败的时候回退交易,但没有在成功时返回true。这个bug让很多token都受到了影响,包括USDT、OmiseGo和BNB。你期望返回一个布尔值,却没有任何值返回,这种情况,如果用Solidity0

动态 | BCH开发人员:Avalanche协议可支持安全的零确认交易:据bitcoin.com报道,BCH开发人员Chris Pacia最近发布的一篇名为“使零确认交易安全”的文章,描述了Avalanche协议如何通过让一组参与节点达成共识来保护未经确认的交易。Pacia表示,在比特币现金中使用Avalanche进行矿工协调提供了一种非常优雅、分散的协调机制,可以防止矿工受到双花攻击,并且当与双花通知相结合时,使零确认交易交易非常安全。[2018/12/13]

其先检查返回数据的大小,如果是0,我们就假定它是行为不正常的token。如果调用没有回退交易,那就意味着交易成功了,应该返回true。

随着Solidity的版本更新,我们可以简化这段代码,像Uniswap是这样做的:

functionsafeTransfer(addresstoken,addressto,uintvalue)internal{//bytes4(keccak256(bytes('transfer(address,uint256)')));(boolsuccess,bytesmemorydata)=token

评级机构Weiss Ratings公布五种投资最安全的加密货币:美国评级机构Weiss Ratings最近推出了以个加密货币评级系统。Weiss并不会预测短期内哪些加密货币可能会价格会出现最大涨幅,也不应被视为绝对的金融稳定性的证明。从风险回报的角度来看,获得“A”等级的加密货币被认为是优秀的。然而目前并没有任何一个加密货币获得了“A”,甚至是“A-”级别。目前评分最高的“B-”加密货币是最安全的加密货币,包括BTC,XRP,EOS,NEO,和STEEM。BTC此前的评级为C+,最近刚刚被调整至B-。[2018/3/29]

这种实现方法只是稍有不同而已,因为abi

你应该怎么做?

那么,现在最好的方法是什么呢?一个很简单的方法就是,使用OpenZeppelinSafeERC20来实现。

这是一个围绕ERC-20调用的包装库。不要感到困惑,这不是为了创建自己的token,而是为了安全地交易。SafeERC20的实现基本上就是像上面的Uniswap版本一样,你可以像下面这样用它:

import"https://github

}

本翻译由CellNetwork赞助支持。

来源:https://soliditydeveloper.com/safe-erc20

参考资料

登链翻译计划:https://github.com/lbc-team/Pioneer

翻译小组:https://learnblockchain.cn/people/412

Tiny熊:https://learnblockchain.cn/people/15

DAI:https://etherscan.io/address/0x6b175474e89094c44da98b954eedeac495271d0f#code

这里:https://etherscan.io/address/0xe41d2489571d322189246dafa5ebde1f4699f498#code

代码:https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol

try/catch:https://solidity.readthedocs.io/en/latest/control-structures.html#try-catch

缺少返回值的错误:https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca

影响到了Uniswap:https://twitter.com/UniswapProtocol/status/1072286773554876416

Compound版本:https://github.com/compound-finance/compound-money-market/blob/241541a62d0611118fb4e7eb324ac0f84bb58c48/contracts/SafeToken.sol#L97

Uniswap是这样做的:https://github.com/Uniswap/uniswap-lib/blob/9642a0705fdaf36b477354a4167a8cd765250860/contracts/libraries/TransferHelper.sol#L13-L17

OpenZeppelinSafeERC20:https://docs.openzeppelin.com/contracts/3.x/api/token/erc20#SafeERC20

CellNetwork:https://www.cellnetwork.io/?utm_souce=learnblockchain

免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。

本文来源于非小号媒体平台:

登链社区

现已在非小号资讯平台发布105篇作品,

非小号开放平台欢迎币圈作者入驻

入驻指南:

/apply_guide/

本文网址:

/news/10381498.html

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

上一篇:

每周编辑精选WeeklyEditors'Picks

标签:TOKENTOKKENTOKESonar TokenBSS Tokenimtoken.im官网FME Token

ETH热门资讯
以太坊:以太坊基金会和 Mina 基金会将捐助 =nil; Foundation 120 万美元,以在以太坊虚拟机上验证 Mina 的 Pickles SNARK

链闻消息,以太坊基金会和Mina基金会决定向=nil;Foundation的Crypto3团队授予120万美元的合同,以在以太坊虚拟机上验证Mina的PicklesSNARK.

1900/1/1 0:00:00
以太坊:二层扩容平台 Celer 推出的跨链支付网络 cBridge 跨链资金达 2 亿美元

链闻消息,由二层扩容平台CelerNetwork推出的跨链支付网络cBridge现已帮助用户跨链资金达2亿美元,一周内跨链资金总额增长1亿美元.

1900/1/1 0:00:00
HOMI:HomiEx(红米交易所)关于停止BTC、ETH、USDT币种BEP20和HECO链充提的公告

亲爱的用户:HomiEx现已暂停BTC、ETH、USDT币种BEP20和HECO链的充提服务,并不再支持以上币种BEP20和HECO链的充提。用户可选择其他链进行充提.

1900/1/1 0:00:00
OIN:CoinW币赢新任CEO首次公开亮相 拥抱合规布局全球

他是在亚洲和中东投资市场叱咤风云的金融精英,同时也是拥有丰富的数字资产市场合规运营经验的专业人士,如今他加盟CoinW币赢并出任全球CEO一职.

1900/1/1 0:00:00
ERP:中币关于上线Perpetual Protocol(PERP)的公告

尊敬的中币用户:????中币将于香港时间2021年9月27日上线PerpetualProtocol.

1900/1/1 0:00:00
数字资产:ZT创新板即将上线 SRP

亲爱的ZT用户:ZT创新板即将上线SRP,并开启SRP/USDT交易对。具体上线时间如下:充值:已开启;交易:2021年9月30日17:00?;SRP项目简介:Starpunk是一个去中心化自治.

1900/1/1 0:00:00