月亮链 月亮链
Ctrl+D收藏月亮链

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

作者:

时间: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;}}

Binance:对SVB银行没有风险敞口,资金是安全的:金色财经报道,加密货币交易所Binance表示,对SVB银行没有风险敞口,资金是安全的。[2023/3/11 12:55:35]

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

美国立法者认为SEC的会计政策会破坏安全的加密货币托管方式:金色财经报道,美国众议院金融服务委员会主席Patrick McHenry和起草了加密货币立法的参议员Cynthia Lummis周四致信多家银行机构,询问他们如何处理美国证券交易委员会(SEC)一份有争议的公告,该公告建议金融机构应在自己的资产负债表上计入客户的加密货币资产。

这封致美联储和其他美国银行机构的信批评了美国证券交易委员会去年的举动,即被称为《员工会计公报121》(Staff Accounting Bulletin 121),称此举可能“剥夺数百万美国人获得安全可靠的数字资产托管方式的机会”,因为这将迫使受监管的银行拒绝接受加密资产托管,因为这是一项需要大量资本的要求。

此前消息,SEC主席Gary Gensler表示,加密货币交易所可能不是“合格的托管人”。[2023/3/3 12:40:25]

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

怎样支持所有token

Ripple已与Lunu建立合作关系,为欧洲奢侈品零售店提供更快和更安全的数字资产支付选项:6月7日消息,Ripple已与加密初创公司Lunu建立合作关系,为欧洲各地的奢侈品零售店提供更快和更安全的数字资产支付选项。Lunu将利用Ripple的流动性中心,使顾客在零售店进行加密货币与法币支付时能够获得最佳价格。

据悉,Ripple已经在中东地区开展业务,其2021年网络支付量达150亿美元。此外,Ripple还计划通过此举推动全球加密货币的采用。[2022/6/8 4:09:30]

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

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

新品发布会 | OKEx徐坤:在疫情危机之下,资金、资源都会流向最安全的地方:4月2日18:00,金色财经举办以“?-ing”为主题的新产品发布会,在圆桌讨论环节中针对“区块链市场的竞争态势将如何演变以及资源将向哪些领域倾斜”的问题,OKEx首席战略官徐坤表示,整个市场的头部效应会更加明显,尤其在疫情危机之下,资金、资源都会流向最安全的地方,大公司有更强的资金储备、组织管理能力,从而更能抵抗风险。从交易所而言,头部交易所安全性更好,不会像小交易所出现倒闭、暴雷等风险,而且系统流畅性、交易深度、产品种类也更有竞争力。而从OKEx来说,无论技术、人才还是资金,都有非常强的储备,我们也在大力进行全球化的布局。公链生态中也是如此,大量山寨币落下帷幕,开发者、资金、流量都会更加集中在头部项目,比如比特币和以太坊。最后提一下,不要为了区块链而区块链,要做真正的应用或者区块链技术相关才是有价值的。[2020/4/2]

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

声音 | 律师Preston Byrne:以太坊2.0过渡意味着ETH将被更安全的新系统“降级”:ampStorm律师事务所高级合伙人Preston Byrne对以太坊(ETH)主网向2.0过渡提出了质疑。他表示,如果由发行者(以太坊基金会)做出转让的决定,整个系统就变成了一个清晰的中心化系统。这与Ethereum (ETH)的座右铭背道而驰。这种矛盾让Preston Byrne感到困惑,即一个规则适用于以太坊,另一个规则适用于其他所有人。Preston Byrne还对人们期待已久的过渡的意识形态方面表示关切。他表示,这个过程意味着以太坊(ETH)将被某种更快、更便宜、更安全的新系统“降级”。(U.today)[2020/1/8]

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

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

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

标签:TOKTOKENTOKEKENPrideTokenSwash TokenPuppy TokenCYBR Token

以太坊最新价格热门资讯
数字资产:ZT创新板即将上线SPHYNX_SPH

亲爱的ZT用户:ZT创新板即将上线SPHYNX,并开启SPHYNX/USDT交易对。具体上线时间如下:充值:已开启;交易:2021年9月29日16:30?;SPHYNX项目简介:Sphynx是一.

1900/1/1 0:00:00
DAO:一文解析 DAO 投资:DAOs 是对人类组织方式的未来的一种押注_mdao币违法吗

撰文:AndrewThurman编辑:南风DAOs的去中心化属性及其对对充满活力的、忠诚的社区的依赖,可能会让那些只为利益而来的投资者失望.

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

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

1900/1/1 0:00:00
PIVX:币安宝上线 PIVX 理财活动,年化35%_https://etherscan.io

亲爱的用户:“币安宝”现已上线PIVX定期理财活动,为用户提供闲置数字资产增值服务。定期理财活动:申购模式:先到先得申购时间:东八区时间2021年09月29日20:00至2021年09月30日2.

1900/1/1 0:00:00
BIT:HashKey Capital:全面解析 DeFi 永续衍生品发展脉络与定价方式_HASH

撰文:郑嘉梁,HashKeyCapital研究总监永续衍生品发展脉络永续衍生品发展的第一阶段是反向永续合约,即Bitmex在2016年发展出来的比特币反向永续合约.

1900/1/1 0:00:00
区块链:開啟SavePlanetEarth (SPE)交易 / 2021.10.1_Argentine Football Association Fan Token

親愛的BitGlobal用戶:BitGlobal將在GEM上線SPE數位資產服務,?詳情如下充提安排:10月1日11:00(UTC8)開放立即充值>>交易時間:10月4日17:00(.

1900/1/1 0:00:00