区块见闻 区块见闻
Ctrl+D收藏区块见闻

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

作者:

时间:

译文出自:登链翻译计划

译者:翻译小组

校对: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;}}

Hiro Wallet:API错误导致钱包打开时显示错误但资产是安全的:金色财经报道,比特币钱包Hiro Wallet发文表示,“我们发现一个API错误导致Hiro钱包在打开时显示错误。请放心,您的Hiro钱包中的任何资产都是安全的。这完全是一个与UI相关的问题,我们会尽快进行修补程序。并且会尽快更新。”[2023/6/14 21:35:47]

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

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

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

声音 | 摩根溪创始人:比特币是世界上最安全的计算网络:摩根溪创始人Anthony Pompliano最近解释了他为何如此看好比特币。他称,比特币是世界上“最安全的计算网络”,它将消耗电力来增强这种安全性。我们不需要对此感到震惊,因为比特币矿工“受到了经济激励”以“寻找最便宜的电源”,因为这就是他们赚钱的方式。此外,比特币的货币政策依赖于供求经济学:人为限制供给,需求增加,以美元计算价格将上涨。在过去的十年里,它是表现最好的资产。(CryptoGlobe)[2020/2/26]

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

怎样支持所有token

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

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

动态 | 富士通开发基于区块链的新技术 旨在实现更安全的在线交易:据Financefeeds 7月4日消息,富士通实验室利用区块链开发了一项基于DID的技术,该技术可以分析在线交易中存在的伪造风险和对方个人凭证的可信度。[2019/7/4]

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

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

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

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

你应该怎么做?

声音 | 永辉刘中涛:区块链技术已成为永辉预防食品安全的重要举措:据中江网消息,近日,在以“实施食品安全战略推进健康中国建设”为主题的第十六届中国食品安全年会上,永辉云商彩食鲜联合创始人刘中涛发表了公开讲话,介绍了永辉旗下自有品牌的食品安全保障措施,他表示:“在后端,永辉积极布局区块链、物联网、AI、云计算、大数据等领域,运用前沿科学技术赋能食品安全。以永辉近期上线的区块链溯源系统为例,通过区块链溯源系统可清晰查看生鲜产品的所有信息,并通过大数据人工智能分析生鲜食品溯源信息,实现风险预警及问题追踪。区块链技术已经成为永辉预防食品安全的重要举措。”[2018/11/21]

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

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

网络安全公司Sikur推出可以保护数字货币安全的手机:周二,德国网络安全公司Sikur在西班牙巴塞罗那的移动世界大会上推出了售价799美元的SIKURPhone。它有一个内置的数字货币钱包,旨在保护比特币等数字货币的安全。该公司声称,该公司对无法穿透该设备的黑客进行了测试。Sikur的首席执行官克里斯蒂亚诺?洛普(Cristiano Lop)通过电子邮件向CNBC表示:“在2018年第二季度末,我们将在我们的平台上交付一个加密钱包,将钱包的使用范围扩大到SIKURPhone之外,这意味着我们的客户应该能够通过一个实体设备安全地存储他们的数字货币”。[2018/2/27]

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

标签:ALPPEXKENTOKENALP币PEX币Horde TokenDas Galaxy Talent Token

欧易交易所app官网下载热门资讯
加密货币:按国家/地区划分的比特币收益:2020年谁受益最大?_GDP

2020年对比特币来说是非常重要的一年,因为大量的机构资金涌入,刺激了其达到了历史上的最高点。那么谁从其中收益最大?那么下面和毛球科技一起来看看.

数字货币:央行数研所狄刚:积极在数字人民币系统中探索区块链应用_比特币

链闻消息,据中证网报道,中国人民银行数字货币研究所副所长狄刚在2021中关村论坛平行论坛之「区块链与数字经济发展论坛」上表示.

TPS:ALPEX 每周周报(9月第4周)_PEPEXAI

ALPEX每周新闻更新,数字资产交易领导者20/09/2021-24/09/2021发布:2021年09月28日欢迎来到ALPEX9月第4周周报!ALPEX作为全球数字资产交易的领航者.

TPS:XT关于暂停MANA提现的公告_tps币圈

尊敬的XT用户: XT现已暂停MANA交易跟提现业务。给您带来的不便,请您谅解!感谢您对XT.COM的支持与信任.

GHOST:DeFi 游戏化产品 GoodGhosting 将于 29 日上线开源支付网络 Celo_onekeyghost官网下载

链闻消息,DeFi游戏化产品GoodGhosting将于29日上线开源支付网络Celo,并推出首个Celo储蓄池,限定200名参与者,先到先得.

比特讯:趣链科技与中南卡通发布国内首个区块链影视版权保护平台_比特讯

巴比特讯,9月30日,在中南数字文创谷举行的第十七届中国国际动漫节“中南日”发布会现场,趣链科技与中南卡通就数字文化版权保护平台——版钉平台达成战略合作.