链资讯 链资讯
Ctrl+D收藏链资讯
首页 > USDC > 正文

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

作者:

时间:

译文出自:登链翻译计划

译者:翻译小组

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

CoinDCX联合创始人:预计印度加密货币法案将产生积极影响:11月29日消息,印度最大加密交易平台CoinDCX联合创始人表示,预计印度加密货币法案将产生积极影响。期待印度的加密货币法案能消除加密货币存在的模糊性。(金十)[2021/11/29 12:38:25]

我们可以看到,与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}}

Findora背后实体已向加州法院起诉前CEO等人:金融隐私公链Findora背后实体Temujin Labs Inc.曾于11月6日向美国加州圣克拉拉县高级法院起诉Ariel Abittan(此人在领英声称自己是Findora前创始人兼总裁,而Temujin在诉讼中称其是一家非关联公司的投资者)、前顾问Benjamin Fisch和前首席执行官Charles Lu,称被告因不满于看到Temujin公司财务和运营成功,联合起来阻挠公司的发展,同时准备启动竞争性企业。Temujin称三位被告最近几周合谋:虚假宣称对公司的所有权;盗用公司商业机密;篡夺和干扰对公司资产的控制和访问,如社交媒体账户;干扰和阻碍公司与投资者和商业伙伴的关系。Temujin表示其有权获得禁令救济以纠正这些错误,并获得金钱和惩戒性赔偿。[2020/12/20 15:53:00]

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

怎样支持所有token

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

动态 | 言论自由组织Index on Censorship开始接受数字货币捐赠:据Indexoncensorship消息,近日,世界领先的言论自由组织之一Index on Censorship宣布,将开始接受数字货币形式的捐赠。据悉,接受的加密货币捐赠将用于支持在全球范围内捍卫言论自由的项目以及言论自由奖学金。[2018/10/31]

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

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

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

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

声音 | 李挥:导致当前网络空间不安全的八个主要原因:据火讯财经报道,北大深圳研究生院未来网络创新实验室主任李挥在观火号区块链星际列车会议上以《区块链与网络通信安全》为主题做了演讲。他表示:“网络空间作为陆海空天之后的人类第5空间,意义重大且频出安全问题。当前网络空间不安全的八个主要原因为:漏洞存在的普遍性,后门的易安插性;开源和APP易传播性,现有防御体系的被动性,病木马的可植入性;最棘手的是如何应对3U:未知漏洞,未知后门,未知攻击的不确定性威胁UT,以及IP中心化的问题。”[2018/12/16]

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

你应该怎么做?

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

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

启动进行时:启动团队分歧已解决,两个启动团队共同启动一个最安全的主网:

EOS主网启动团队分歧解决,已经达成共识。全球候选BP将在每天的视频会议上进行投票决定是否启动EOS主网。此前主网启动的两大团队EOS Core(原Ghostbusters)和BIOS BOOT团队已经达成共识,EOS Core对中国安全启动团队的方案表示认同。同时,慢雾科技也对众多的中国候选节点进行安全测试。目前绝大部分测试已经通过了,还在进行安全审计。EOS全球社区合力,将会启动一个最安全的主网,最后只有一个名叫EOS的主网上线。[2018/6/7]

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

标签:KENTOKENTPSRC2Bugs Bunny Tokenimtoken钱包被盗原理https://etherscan.ioethereum和erc20的地址一样吗

USDC热门资讯
TPS:ZT创新板即将上线SHI_HTT

亲爱的ZT用户: ZT创新板即将上线SHI,并开启SHI/USDT交易对。具体上线时间如下:充值:已开启;交易:2021年9月25日17:00?; SHI Solana链上NFT项目DRiP完成.

SOKE:SOKE APP | 转账即有收益的ETH主网钱包_NET

据官方消息,SokeNetwork生态旗下钱包即将上线,自SokeNetworkDappV2.0上线以来用户激增.

KEN:Indexed Finance 用户可以锁定 NDX 获得 dNDX 代币来获得项目收入红利,最低锁定金额 100NDX_NDX

链闻消息,去中心化被动投资管理协议IndexedFinance宣布用户可以将治理代币NDX锁定90天到360天不等,以铸造dNDX代币,每个NDX铸造dNDX比例从1:1到4:1不等.

ITT:Jack Dorsey的「BTC计划」:有前途,但也有问题_WIT

本文来自decrypt,原文作者:JeffJohnRobertsOdaily星球日报译者|Moni本周,Twitter推出了一项可以改变世界的BTC功能——但前提是.

ITT:AOFEX平臺幣OT(Option Token)第15期回購銷毀明細公示_比特币

尊敬的用戶: AOFEX?交易所每月使用手續費盈利的20%,從二級市場中回購OT並銷毀。現將OT第15期回購銷毀明細公示如下:本期回購銷毀執行時間為:2021年9月30日17:00回購銷毀數量:.

GATE:大币网(Dcoin)关于永续合约系统升级维护公告(2021/9/30)已完成_bybitvip

亲爱的大币网(Dcoin)用户:大币网(Dcoin)已完成对永续合约系统功能的升级维护,现已恢复正常交易.