譯文出自:登鏈翻譯計劃
譯者:翻譯小組
校對: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;}}
英國未來將投入1億英鎊支持“安全的人工智能”開發:金色財經報道,英國首相兼技術大臣發表聲明,宣布將提供1億英鎊的資金支持一個工作組以開發“安全的人工智能”。該工作組旨在開發安全可靠的人工智能,即在不限制創新的情況下,對技術進行監管,以“保證人們的安全”。[2023/4/26 14:28:25]
我們可以看到,與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}}
Chia創始人:Hpool 正使用不安全的協議,但Chia區塊鏈本身仍是安全的:Chia創始人Bram Cohen在推特表示,顯然,中國用戶現在對 Chia 產生了某種恐慌。雖然現在甚至不清楚什么主張正在被提出,但這里有一些要重申的要點:網絡不是僅僅信任用戶聲稱其本地機器擁有多少空間。愚弄農民使其認為還有很多空間并不重要,重要的是這并不意味著其會對網絡產生欺騙;新的、更快的plotter不會對網絡安全構成威脅,它只是讓plotting更快、更方便,這是一件好事。網絡受空間保護,而不是plotting速度;Hpool 正在使用一種根本不安全的協議;Chia 中出塊的速度是完全正常的,并且它們中的空間證明可以被檢查出來,區塊鏈本身仍然是安全的;最近的Chia價格下跌似乎是因為加密市場價格整體下跌和中國內部對“安全”的不合理恐慌。我不知道這種恐慌是由某人故意欺詐還是只是愚蠢引起的;我們不會幫助 Hpool 改進他們的協議。我們完全專注于構建一個真正安全的協議,一旦完成,Hpool將能夠像其他協議一樣使用它。[2021/6/13 23:33:44]
這樣你就可以為兩個版本的ERC-20合約做錯誤處理。
潘志彪:礦工對于安全的結構化產品有很高要求,不信任市場中現有的交易所:在Crypto Tonight的世礦會活動中,關于比特幣減半與礦工風險對沖的問題,幣印礦池創始人兼CEO潘志彪表示,在2019年,很多有金融背景的大型新礦場進入這一領域,他們采用不同的對沖和借貸策略。比如,他們現在可以出售未來挖出的比特幣,或者將現有的比特幣在未來出售,通過這樣來調節挖掘時間價值,但中國的多數礦工在金融產品這一塊還需要補很多課。他還補充道:我認為他們對于安全賺利息的結構化產品也有很高的需求,他們不信任市場中現有的這些交易所。[2020/4/17]
怎樣支持所有token
現在你已經支持了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。
勞埃德注冊基金會宣布一項利用區塊鏈技術提高公海安全的新舉措:英國非營利組織勞埃德注冊基金會今日宣布了一項旨在利用區塊鏈技術提高公海安全性的新舉措。這個項目名為Maritime Blockchain Labs(MBL)。英國非營利組織勞埃德注冊基金會今日宣布了一項旨在利用區塊鏈技術提高公海安全性的新舉措。這個項目名為Maritime Blockchain Labs(MBL),是與丹麥區塊鏈開放合作實驗室(BLOC)合作建立的。該項目將著眼于使用工程系統和區塊鏈技術支持的供應鏈來解決全球海事行業關鍵基礎設施和人員的安全問題。[2018/3/23]
隨著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:TOKETOKKENTOKENPoodl TokenBalto TokenMeta Rewards TokenPenny Token
9月24日,央行等多部門發布了《關于進一步防范和處置虛擬貨幣交易炒作風險的通知》。韓國要求加密貨幣交易所在9月24日之前獲得信息安全管理系統(ISMS)認證,并向金融服務委員會(FSC)的一個部.
1900/1/1 0:00:00原文標題|《區塊鏈應用:參數保險》 原文作者|AnhLe 編譯出品|白澤研究院 參數保險的市場規模潛力巨大,因為疫情的快速傳播幾乎傷害了世界上所有國家.
1900/1/1 0:00:00親愛的大幣網用戶: 為打造更加健康、穩定的加密資產生態系統,大幣網將對平臺上線項目進行持續監控,并對不符合要求的幣對予以下架處理。據此,大幣網將對以下流動性低的12個項目進行下架處理.
1900/1/1 0:00:00尊敬的用戶: AOFEX將於2021年10月2日上線OHM,具體時間安排如下:充提業務已開啟交易時間:10月2日19:00提示:以下內容來源于公告發布時的網絡現有資料,AOFEX已盡力核對.
1900/1/1 0:00:00作者|Hebao出品|白話區塊鏈9月23日,推特宣布已在iOS版本的App中上線支持比特幣支付的小費打賞功能,并將在未來幾周內向Android用戶推出.
1900/1/1 0:00:00鏈聞消息,據LedgerInsights報道,企業區塊鏈軟件公司R3在CordaCon2021大會上宣布,公司正在開發新的DeFi協議Obscuro.
1900/1/1 0:00:00