譯文出自:登鏈翻譯計劃
譯者:翻譯小組
校對: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;}}
OpenAI面臨最嚴監管威脅:FTC要求提供有關消費者數據安全的記錄:金色財經報道,美國聯邦貿易委員會(FTC)已對OpenAI就是否違反消費者保護法展開廣泛調查。據該報獲得的一份文件顯示,FTC本周向OpenAI發出了一份長達20頁的文件,要求公司詳細描述其收到的有關其產品對人們做出“虛假、誤導、貶低或有害”陳述的所有投訴。該文件稱,FTC正在調查該公司是否從事了不公平或欺詐行為,從而對消費者造成了“聲譽損害”。這是迄今為止OpenAI在美國業務面臨的最有力的監管威脅。該公司正在進行一場全球攻勢,以塑造人工智能政策的未來。但目前其在華盛頓面臨著新的考驗,FTC多次發出警告,稱現有的消費者保護法適用于人工智能,盡管政府和國會正在努力制定新的監管規定。FTC對OpenAI的上述要求是其打算如何執行這些警告的首個跡象。(華盛頓郵報)[2023/7/13 10:53:06]
我們可以看到,與DAI不同,當出錯時0x不會回退交易,而是返回false,但是我們在代碼中不管這個返回值。本質上,任何人都可以與我們合約的interactWithToken交易,合約會認為成功交易了一個token,但實際上什么也沒有做。很糟糕!
美國特勤局將在Reddit上主持舉辦關于加密和金融安全的社區活動:金色財經報道,美國特勤局舊金山外勤辦公室和灣區執法聯合計算機小組 (REACT)將在社交媒體平臺Reddit舉辦AMA社區活動,美國特勤局舊金山外勤辦公室表示,他們的任務是保持加密貨幣領域的安全,因為該機構認為加密貨幣作為貨幣未來和全球金融基礎設施中的一環具有重要性,他們也被授權以確保加密和金融安全。灣區執法聯合計算機小組則將分享其工作職責,同時為加密貨幣社區提供資源和信息,以確保他們的資金安全,目前該小組已開始調查加密殺豬盤案件。(crypto.news)[2023/5/15 15:03:10]
ZRX仍然符合ERC-20標準,因為沒有任何地方規定ERC-20合約必須在發生失敗時回退交易。這兩種方法都有優點和缺點。在上面的例子中,很明顯我們只需要檢查返回值就知道是否成功,一段簡單的代碼require(token
catchError(stringmemory/*reason*/){success=false;//specialhandlingdependingonerrormessagepossible}catch(bytesmemory/*lowLevelData*/){success=false;}if(success){//handlesuccesscase}else{//handlefailurecasewithoutreverting}}
Wirex報告:86%的受訪者認為使用加密貨幣付款是安全的:加密支付平臺Wirex 發布了一份與Stellar Development Foundation合作編寫的專題報告,報告顯示,近60%的年齡在45歲以上的人群正在嘗試使用以區塊鏈驅動的支付方式。年齡在45至54歲之間的受訪者中,有30%以上使用加密貨幣。年齡在55至64歲之間的女性中有26%投資于加密貨幣,而在同一年齡段的男性中投資于加密貨幣的只有14%。此外,調查發現86%的受訪者感到使用加密貨幣是安全的。(Cointelegraph)[2021/1/21 16:43:36]
這樣你就可以為兩個版本的ERC-20合約做錯誤處理。
怎樣支持所有token
現在你已經支持了ERC-20標準的token,然而有相當多的token看起來像ERC-20,但是它的有些行為卻不像,有些出現缺少返回值的錯誤。
有一段時間,OpenZeppelin有一個bug,他們在失敗的時候回退交易,但沒有在成功時返回true。這個bug讓很多token都受到了影響,包括USDT、OmiseGo和BNB。你期望返回一個布爾值,卻沒有任何值返回,這種情況,如果用Solidity0
報告:多數去中心化交易所是不安全的:金色財經報道,根據第三方安全機構CER的一份報告,在25個去中心化交易所(DEX)中,有14個在網絡安全方面得分很低。CER的標準包括幾個因素,如DEX是否經過安全審計,漏洞賞金的可用性,以及適當的SSL/TLS證書。CER認為任何低于6的分數都屬于“低分”,是“不安全”的。其中只有Uniswap和Syntetyx獲得了“高分”,而有6個交易所(占24%)未通過安全審計或未公開宣布已接受審計。報告稱,應當指出,未經審計的交易所不能被認為是安全的。[2020/10/29]
其先檢查返回數據的大小,如果是0,我們就假定它是行為不正常的token。如果調用沒有回退交易,那就意味著交易成功了,應該返回true。
隨著Solidity的版本更新,我們可以簡化這段代碼,像Uniswap是這樣做的:
functionsafeTransfer(addresstoken,addressto,uintvalue)internal{//bytes4(keccak256(bytes('transfer(address,uint256)')));(boolsuccess,bytesmemorydata)=token
網絡安全公司Sikur推出可以保護數字貨幣安全的手機:周二,德國網絡安全公司Sikur在西班牙巴塞羅那的移動世界大會上推出了售價799美元的SIKURPhone。它有一個內置的數字貨幣錢包,旨在保護比特幣等數字貨幣的安全。該公司聲稱,該公司對無法穿透該設備的黑客進行了測試。Sikur的首席執行官克里斯蒂亞諾?洛普(Cristiano Lop)通過電子郵件向CNBC表示:“在2018年第二季度末,我們將在我們的平臺上交付一個加密錢包,將錢包的使用范圍擴大到SIKURPhone之外,這意味著我們的客戶應該能夠通過一個實體設備安全地存儲他們的數字貨幣”。[2018/2/27]
這種實現方法只是稍有不同而已,因為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:TOKEKENTOKENTOKNewb TokenLifeLine TokenimToken安卓版下載NASDEX Token
據MarketWatch9月22日報道,安永全球區塊鏈負責人PaulBrody預測,一些主要銀行將在未來三個月內開始提供“精選DeFi服務”.
1900/1/1 0:00:00據Globenewswire9月22日報道,比特幣礦企GenesisDigitalAssets宣布完成4.31億美元戰略融資,Paradigm領投.
1900/1/1 0:00:00為幫助用戶更輕松實現數字資產量化交易,Gate.io量化交易中心全面升級,改名“量化跟單”全新上線,功能及頁面全面升級.
1900/1/1 0:00:00尊敬的用戶: 為響應當地政府監管政策要求,Huobi?Global將在保證中國大陸用戶資產安全的前提下完成有序的清退。請廣大用戶放心,您在Huobi?Global的資產將100%兌付與提現.
1900/1/1 0:00:00喜迎祖國誕辰,舉國歡慶,為感恩回饋支持平臺的新老用戶,慶祝國慶的到來,Orangex將開啟“國慶狂歡月,嗨翻一整周,注冊交易即可領5000U&7日百萬紅包雨”活動,國慶豪禮不斷.
1900/1/1 0:00:00鏈聞消息,元宇宙項目Computecoin宣布將于紐約時間9月27日推出測試網Dome-A1.0,此外還將發布瀏覽器插件錢包ALE,并將空投3萬枚測試網代幣.
1900/1/1 0:00:00