火星链 火星链
Ctrl+D收藏火星链
首页 > PEPE币 > 正文

TOKE:安全的处理 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;}}

俄罗斯总理:加密货币是跨境支付安全的替代方案:金色财经消息,本周二,俄罗斯总理Mikhail Mishustin在关于国内金融体系发展战略会议上宣布,采用加密货币作为跨境支付的“安全替代方案”是必要的。总理补充说,加密货币提供了一个很好的机会,可以确保不间断地支付进出口费用。

Mishustin还指出了确保技术基础设施独立性和金融机构网络安全的重要性,并表示,“我们需要大力开发创新领域,包括采用数字资产,加密货币等。综合考量,这是一个安全的选择,可以保证不间断地支付来自国外的货物供应和出口。”(Cointelegraph)[2022/8/31 12:58:52]

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

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

马斯克:Signal 是最不安全的消息服务:金色财经报道,跨平台消息应用Signal创始人Moxie Marlinspike近日在社交媒体上表示Telegram并不安全,上面的消息其实并不会加密并称大多数人认为Telegram是一个加密应用程序,但现实情况恰恰相反,其默认情况下是一个云数据库,其中包含每个人曾经发送/接收的每个消息的明文副本。对此,伊隆·马斯克表示自己并不认同Moxie Marlinspike的观点并质问他“是否确认Signal是安全的”,Moxie Marlinspike回复称Signal所有通信都是 e2ee,默认群组也是加密的,但马斯克随后表示:Signal 是最不安全的消息服务。[2022/2/26 10:17:20]

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

声音 | Morgan Creek创始人:比特币是世界上最安全的计算机网络:Morgan Creek创始人Anthony Pompliano今日发推就“美国第一资本1亿客户数据遭黑客入侵”一事评价表示:第一资本(Capital One)在一次大规模的安全漏洞中泄漏了超过1亿客户数据。从来没有人黑掉过比特币。它是世界上最安全的计算机网络。据悉,美国信用卡发行商第一资本(Capital One Financial)周一表示,一名黑客盗取了包括姓名、地址、电话号码和信用分数在内的大量用户信息,影响到美国约1亿客户和加拿大600万客户,目前这名黑客已被逮捕。[2019/7/30]

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

怎样支持所有token

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

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

声音 | Murray Wood:币安需要的不是捐款而是安全的数字货币保险托管:英国最大保险经纪公司Aon的亚洲金融领域负责人Murray Wood在《Future X - 数字资产经济的10大支柱》主题会议上表示:Aon将会向BC Group的数字资产托管提供保险,100%保障其冷热钱包避免受到第三方攻击。

BC Group (00863.HK)? 首席信息官Usman Ahmad也表示公司此前推出了亚洲首个数字资产保险托管服务,如果币安在被盗7000个比特币之前有可信任的数字资产保险托管服务方,那么这次盗币事件的经济损失将会降到最低。被盗币的币安,需要的不是捐款,而是安全的数字货币保险托管。[2019/5/8]

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

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

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

声音 | 阳光七星主席吴征:利用区块链来做数字资产需要有完善的监管以及安全的防护:阳光七星投资集团主席兼首席执行官吴征在接受中国经营报的采访时表示,数字资产化是取决于人工智能和区块链这两大引擎,以这两大引擎为基础的大数据技术,给人类带来的革命比起以往的互联网时代技术还多一些新的裂变。区块链和人工智能,也就是数字资产化的技术带来更多的是赋能,而不是颠覆。所以数字资产化的特别重要的一个标志就是它能够帮助巨大的存量传统经济,向数字化转型。吴征认为,没有数字货币作为记账单位,就不是区块链。目前大部分发币项目从本质上并没有真正利用区块链技术,只是打着区块链的旗号,获得了与实际价值完全不相符的估值。有的项目的所谓创新根本不去与实体经济融合,脱离了实体经济的需求,完全是投机甚至是欺诈的行为。利用区块链来做数字资产是行得通的,但要有完善的监管以及安全的防护。对于数字资产的监管,需要形成评级、风控、质押等机制。[2018/7/21]

这种实现方法只是稍有不同而已,因为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

标签:TOKENTOKETOKKENMesse TokenStonks TokenEmpire TokenJDI Token

PEPE币热门资讯
数字资产:ZT创新板即将上线 ORCA

亲爱的ZT用户:ZT创新板即将上线ORCA,并开启ORCA/USDT交易对。具体上线时间如下:充值:已开启;交易:2021年9月30日22:00?;ORCA项目简介:Orca是Solana上最人.

1900/1/1 0:00:00
DCO:Dcoin秋季实盘大赛活动结束及奖励发放公告

亲爱的大币网(Dcoin)用户:为期三周?“Dcoin秋季合约精英赛”活动已圆满结束,感谢大家的热情参与!此次参与人数超过4872人,总奖池达到160K.

1900/1/1 0:00:00
BIT:MEXC關於更名Darwinia Crab Network (CRING) 為CRAB的公告

尊敬的用戶,應項目方要求,MEXC將支持DarwiniaCrabNetwork(CRING)代幣更名計劃,CRING將會被更名為CRAB.

1900/1/1 0:00:00
INT:寻找下一个DeFi爆发点,链上数据还能带给我们什么洞察?

不断发展的区块链行业区块链技术是当今的一个热门话题,尤其是在2017年DeFi的出现,加密货币世界迎来爆发性增长,NFT等也成为了新的潮流.

1900/1/1 0:00:00
OHM:AOFEX於10月2日上線OHM(Olympus?)

尊敬的用戶:AOFEX將於2021年10月2日上線OHM,具體時間安排如下:充提業務已開啟交易時間:10月2日19:00提示:以下内容来源于公告发布时的网络现有资料,AOFEX已尽力核对.

1900/1/1 0:00:00
DEF:DeFi游戏:将成为真正的游戏规则改变者

文:JINIASHAWDAGOR编译:Zion??????责编:karen过去几个月,随着加密市场的看涨,去中心化金融(DeFi)平台获得了狂热追捧.

1900/1/1 0:00:00