譯文出自:登鏈翻譯計劃
譯者:翻譯小組
校對: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;}}
聲音 | 施奕明:在5G時代,信息安全的標準會升級,有利于區塊鏈等技術發展應用:據證券日報8月2日報道,5G商用已啟動,其帶來的變化將是顛覆性的,證券時報記者近日采訪了金融壹賬通智能風控總經理、人工智能研究院首席科學家施奕明。施奕明表示,5G技術主要特點包括信息安全標準升級。在5G時代,信息安全的標準會升級,有利于云存儲、區塊鏈等技術發展應用。[2019/8/2]
我們可以看到,與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}}
聲音 | Murray Wood:幣安需要的不是捐款而是安全的數字貨幣保險托管:英國最大保險經紀公司Aon的亞洲金融領域負責人Murray Wood在《Future X - 數字資產經濟的10大支柱》主題會議上表示:Aon將會向BC Group的數字資產托管提供保險,100%保障其冷熱錢包避免受到第三方攻擊。
BC Group (00863.HK)? 首席信息官Usman Ahmad也表示公司此前推出了亞洲首個數字資產保險托管服務,如果幣安在被盜7000個比特幣之前有可信任的數字資產保險托管服務方,那么這次盜幣事件的經濟損失將會降到最低。被盜幣的幣安,需要的不是捐款,而是安全的數字貨幣保險托管。[2019/5/8]
這樣你就可以為兩個版本的ERC-20合約做錯誤處理。
怎樣支持所有token
現在你已經支持了ERC-20標準的token,然而有相當多的token看起來像ERC-20,但是它的有些行為卻不像,有些出現缺少返回值的錯誤。
有一段時間,OpenZeppelin有一個bug,他們在失敗的時候回退交易,但沒有在成功時返回true。這個bug讓很多token都受到了影響,包括USDT、OmiseGo和BNB。你期望返回一個布爾值,卻沒有任何值返回,這種情況,如果用Solidity0
聲音 | 澳本聰:比特幣是人人可使用的既經濟又安全的全球體系:澳本聰(Craig Wright)在推特上發文表示,比特幣是錢,是現金。它是一臺服務于地球的全球分布式計算機。沒有主宰者,也沒有統治者,只是一個人人都可使用的既經濟又安全的全球體系。數據具有價值,又能化為信息。[2019/1/24]
其先檢查返回數據的大小,如果是0,我們就假定它是行為不正常的token。如果調用沒有回退交易,那就意味著交易成功了,應該返回true。
隨著Solidity的版本更新,我們可以簡化這段代碼,像Uniswap是這樣做的:
functionsafeTransfer(addresstoken,addressto,uintvalue)internal{//bytes4(keccak256(bytes('transfer(address,uint256)')));(boolsuccess,bytesmemorydata)=token
這種實現方法只是稍有不同而已,因為abi
聲音 | Fred Wilson:2019年加密貨幣將不再是安全的避風港:據cointelegraph報道,美國風險投資家和商人Fred Wilson最近在題為“2019年會發生什么”的博客文章中表示,他不認為加密貨幣在2019年還會是一個安全的避風港。根據Wilson的說法,2019年穩定幣將獲得重大進展和消費者采用。Wilson擔心誤入歧途的監管機構將采取的行動,他們或將瞄準高質量的項目并傷害他們。加密行業將繼續經歷詐騙、黑客攻擊、項目失敗以及失去投資,這些都可能會拖累這個行業。[2019/1/2]
你應該怎么做?
那么,現在最好的方法是什么呢?一個很簡單的方法就是,使用OpenZeppelinSafeERC20來實現。
這是一個圍繞ERC-20調用的包裝庫。不要感到困惑,這不是為了創建自己的token,而是為了安全地交易。SafeERC20的實現基本上就是像上面的Uniswap版本一樣,你可以像下面這樣用它:
import"https://github
聲音 | 李揮:導致當前網絡空間不安全的八個主要原因:據火訊財經報道,北大深圳研究生院未來網絡創新實驗室主任李揮在觀火號區塊鏈星際列車會議上以《區塊鏈與網絡通信安全》為主題做了演講。他表示:“網絡空間作為陸海空天之后的人類第5空間,意義重大且頻出安全問題。當前網絡空間不安全的八個主要原因為:漏洞存在的普遍性,后門的易安插性;開源和APP易傳播性,現有防御體系的被動性,病木馬的可植入性;最棘手的是如何應對3U:未知漏洞,未知后門,未知攻擊的不確定性威脅UT,以及IP中心化的問題。”[2018/12/16]
}
本翻譯由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:TOKENTOKETOKKENBafi Finance TokenDogger TokenERTH TokenAEN Smart Token
尊敬的用戶: AOFEX於2021年9月27日上線LEC,按AOFEX新項目上線計畫對OT進行銷毀。截至目前,AOFEX已累計銷毀8,916,277OT.
1900/1/1 0:00:00據ZDNet消息,從今年年初到8月底,與加密貨幣投資騙局相關的損失占向澳大利亞競爭和消費者委員會報告的騙局總數的四分之一以上.
1900/1/1 0:00:00親愛的用戶: ????十一黃金周將至,ZT將對平臺新注冊認證用戶及參與邀請認證活動用戶進行總計價值15萬U代幣大禮包空投獎勵.
1900/1/1 0:00:00總價值鎖定(TVL)是DeFi中最流行和最容易被誤解的指標。總資本分配(TCA)也許是更準確的說法。TVL暗示價值被“鎖定”在協議中,忠誠而堅定。不幸的是,對于許多項目來說,情況并非如此.
1900/1/1 0:00:00鏈聞消息,美國商品期貨交易委員會指控14家交易公司,稱其要么未注冊期貨傭金商,要么謊稱已注冊。其中12家未注冊FCM的公司包括Tradingforexpay、Cryptofxtrader、Bit.
1900/1/1 0:00:009月22日-9月26日當周,明星項目進展中值得關注的事件有:Kava推出1.85億美元生態系統基金;公鏈NEAR將于11月發布簡版夜影協議第零階段;Uniswap將L2版本從Alpha過渡至Be.
1900/1/1 0:00:00