譯文出自:登鏈翻譯計劃
譯者:翻譯小組
校對: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;}}
Flashbots核心貢獻者等人發表新論文,研究DeFi智能合約經濟安全的形式化驗證框架CFF:9月18日消息,Flashbots核心貢獻者PhilipDaian、康奈爾大學計算機安全博士生KushalBabel和MahimnaKelkar以及康奈爾理工學院教授AriJuels共同發布關于ClockworkFinanceFramework(CFF)的新論文,這是一種DeFi智能合約經濟安全的形式化驗證框架。論文中表示,CFF具有三個關鍵特性,合約完備、以漸近最優的模型大小實現、在構造上窮舉攻擊。CFF可以支持多個目標,開發者對合約的經濟安全性分析、用戶對DeFi交易風險的分析、機器人或礦工對套利機會的優化。此外,CFF框架引入了一個新的DeFi合約經濟安全概念,可提取價值(EV)。[2021/9/18 23:35:18]
我們可以看到,與DAI不同,當出錯時0x不會回退交易,而是返回false,但是我們在代碼中不管這個返回值。本質上,任何人都可以與我們合約的interactWithToken交易,合約會認為成功交易了一個token,但實際上什么也沒有做。很糟糕!
PlatON2.0白皮書披露隱私計算網絡Metis,創造安全的隱私計算范式:9月18日消息,近日,隱私AI計算網絡PlatON在其社交平臺發布了PlatON 2.0 白皮書第三部分的詳細內容,進一步披露PlatON2.0的整體技術架構.
據了解,PlatON 2.0的隱私AI計算網絡是以人工智能與隱私計算技術為核心的隱私保護解決方案,本次披露了其分三層的技術架構方案,分別是Layer1共識層、Layer2隱私計算網絡Metis、Layer3 AI代理自治網絡Horae 。三層架構的設計,旨在以去中心化方式聚集隱私AI計算所需的數據、算法和算力,創造安全的隱私AI計算范式。[2021/9/18 23:35:08]
ZRX仍然符合ERC-20標準,因為沒有任何地方規定ERC-20合約必須在發生失敗時回退交易。這兩種方法都有優點和缺點。在上面的例子中,很明顯我們只需要檢查返回值就知道是否成功,一段簡單的代碼require(token
catchError(stringmemory/*reason*/){success=false;//specialhandlingdependingonerrormessagepossible}catch(bytesmemory/*lowLevelData*/){success=false;}if(success){//handlesuccesscase}else{//handlefailurecasewithoutreverting}}
聲音 | 美國財政部長:非常擔心Facebook的硬幣和其他虛擬貨幣對國家安全的影響:據fortune消息,美國財政部長史蒂文?努欽(Steven Mnuchin)也加入了抨擊其加密貨幣提議的政策制定者和政界人士的行列。姆欽在白宮發表講話時表示,他非常擔心Facebook的硬幣和其他虛擬貨幣對國家安全的影響。他說,洗錢和其他非法活動的可能性很高,并誓言一旦發現不法分子,財政部將予以打擊。同時,他還表示,“我們不會允許數字資產服務提供商在陰影下運作。”[2019/7/16]
這樣你就可以為兩個版本的ERC-20合約做錯誤處理。
怎樣支持所有token
現在你已經支持了ERC-20標準的token,然而有相當多的token看起來像ERC-20,但是它的有些行為卻不像,有些出現缺少返回值的錯誤。
有一段時間,OpenZeppelin有一個bug,他們在失敗的時候回退交易,但沒有在成功時返回true。這個bug讓很多token都受到了影響,包括USDT、OmiseGo和BNB。你期望返回一個布爾值,卻沒有任何值返回,這種情況,如果用Solidity0
聲音 | 陽光七星主席吳征:利用區塊鏈來做數字資產需要有完善的監管以及安全的防護:陽光七星投資集團主席兼首席執行官吳征在接受中國經營報的采訪時表示,數字資產化是取決于人工智能和區塊鏈這兩大引擎,以這兩大引擎為基礎的大數據技術,給人類帶來的革命比起以往的互聯網時代技術還多一些新的裂變。區塊鏈和人工智能,也就是數字資產化的技術帶來更多的是賦能,而不是顛覆。所以數字資產化的特別重要的一個標志就是它能夠幫助巨大的存量傳統經濟,向數字化轉型。吳征認為,沒有數字貨幣作為記賬單位,就不是區塊鏈。目前大部分發幣項目從本質上并沒有真正利用區塊鏈技術,只是打著區塊鏈的旗號,獲得了與實際價值完全不相符的估值。有的項目的所謂創新根本不去與實體經濟融合,脫離了實體經濟的需求,完全是投機甚至是欺詐的行為。利用區塊鏈來做數字資產是行得通的,但要有完善的監管以及安全的防護。對于數字資產的監管,需要形成評級、風控、質押等機制。[2018/7/21]
其先檢查返回數據的大小,如果是0,我們就假定它是行為不正常的token。如果調用沒有回退交易,那就意味著交易成功了,應該返回true。
日本加密貨幣交易所BITPOINT發布關于為強化安全的臨時系統維修的通知:據日本加密貨幣交易所BITPOINT官網,為加強系統安全,BITPOINT將于日本時間4月21日(星期六)凌晨2點~6點進行臨時維護,維護期間,WEB交易網站、交易API服務、店鋪結算服務,BITPointWallet應用程序、BITPoint Lite應用程序均不能登錄,但BITPOINT FX交易可像往常一樣登錄和使用[2018/4/20]
隨著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
Tags:TOKTOKENKENTOKESwiftlance tokenTHTH tokenrenshentokenimToken手機app
據Cryptonews報道,德國財政部長兼副總理奧拉夫·舒爾茨最近發表的聲明證明,數字歐元確實是一個可靠的想法。與推出數字人民幣相比,推出數字歐元要困難得多.
1900/1/1 0:00:00據彭博社9月30日報道,捷克共和國一個有600年歷史的波西米亞貴族家族Lobkowicz將于下月在布拉格的Lobkowicz宮拍賣一系列NFT,以籌集其藝術品收藏和祖傳城堡的修復費用.
1900/1/1 0:00:00據官方消息,SokeNetwork生態旗下錢包即將上線,自SokeNetworkDappV2.0上線以來用戶激增.
1900/1/1 0:00:00親愛的用戶:幣安將支持IoTeX的網絡升級和硬分叉,具體安排如下: 幣安 預計將于東八區時間2021年10月12日05:00暫停IOTX代幣的充值、提現業務.
1900/1/1 0:00:00Gate.io現已上線借貸挖礦功能,用戶存入代幣提供流動性即可賺取收益。Gate.io借貸挖礦支持隨存隨取,交易更便捷。后續將陸續上線單幣種借貸流動性礦池,敬請期待.
1900/1/1 0:00:00親愛的用戶: 幣安NFT市場現在支持來自幣安智能鏈和以太坊網絡的NFT存款!為慶祝新功能的推出,幣安NFT市場特別為您策劃了兩項獨家促銷活動.
1900/1/1 0:00:00