以太坊交易所 以太坊交易所
Ctrl+D 以太坊交易所
ads

安全的處理 ERC20 轉賬(解決非標準 ERC20 問題)_TOKE:UpToken

Author:

Time: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;}}

金色相對論 | 金色財經合伙人佟揚:行情劇烈波動和穩定情況下對資產安全的重視程度都應該提到A+:在今日舉行的金色相對論中,針對“暴跌行情對區塊鏈安全產生了怎樣的影響”的問題,金色財經合伙人、CapitaIN佟揚表示,行情劇烈波動和行情穩定情況下,對資產安全的重視程度都應該提到A+,資產安全的概念,用戶主要是需要對錢包的安全隔離方式進行了解,例如錢包的安全方式是用密碼學方式實現的還是進行物理隔離了。因為我們真的看到在行情波動的時候,安全事件是最頻發的。這和選互聯網產品一樣,盡量選擇有背書、有支持、產品發展好的錢包品牌。其次就是大品牌下建立的更優惠的錢包,謹防小的中心化錢包,以及中心化理財的騙局。[2020/4/7]

我們可以看到,與DAI不同,當出錯時0x不會回退交易,而是返回false,但是我們在代碼中不管這個返回值。本質上,任何人都可以與我們合約的interactWithToken交易,合約會認為成功交易了一個token,但實際上什么也沒有做。很糟糕!

ZRX仍然符合ERC-20標準,因為沒有任何地方規定ERC-20合約必須在發生失敗時回退交易。這兩種方法都有優點和缺點。在上面的例子中,很明顯我們只需要檢查返回值就知道是否成功,一段簡單的代碼require(token

聲音 | ShapeShift首席執行官:非托管交易所為個人交易數字資產提供了更安全的方式:盡管2019年集中化加密貨幣交易所遭受了價值近3億美元的黑客攻擊,但許多數字貨幣交易員仍然在集中化的交易平臺上持有大量資金。近年來推出了許多非托管式加密服務,但很少有平臺能夠獲得可觀的流動性。非托管加密貨幣交易所ShapeShift首席執行官Erik Voorhees表示,非托管交易交易所為個人交易數字資產提供了一種從根本上更安全的方式。他補充道,傳統上交易所是托管性質的(現在幾乎所有交易所仍是托管性質),因此它們持有用戶資金。但Voorhees指出,許多非托管交易所仍存在一些局限性,例如培養“更復雜的用戶體驗”,或僅使用“以太坊和基于以太坊的代幣”。 數字貨幣衍生品平臺Phemex聯合創始人、摩根士丹利(Morgan Stanley)前高管Jack Tao則不太確定哪種選擇更安全。他表示,托管性和非托管性交易所都迎合了不同的需求。Jack Tao強調,非托管性交易所讓交易員面臨不同的安全風險,他堅持認為,“資產安全應該由交易所承擔,而不是由用戶承擔。”(Cointelegraph)[2020/2/9]

catchError(stringmemory/*reason*/){success=false;//specialhandlingdependingonerrormessagepossible}catch(bytesmemory/*lowLevelData*/){success=false;}if(success){//handlesuccesscase}else{//handlefailurecasewithoutreverting}}

現場 | 日本互聯網之父:區塊鏈是一種非常安全的科技:金色財經現場報道,10月2日,N.avenue株式會社在東京舉辦日本區塊鏈大會b.tokyo,在本次大會上,日本互聯網之父慶應大學教授村井純進行了“從互聯網信息革命到區塊鏈價值革命的新時代”的主題演講。他表示:區塊鏈是一種非常安全的科技,可以覆蓋全球網絡社會,同時經濟金融領域也可以利用這些網絡技術進行金融科技搭建。金融科技可以來連接每個國家,使行業產生新的變化。未來社會在考慮方向的時候,將區塊鏈作為基礎,是一個非常好的課題。[2019/10/2]

這樣你就可以為兩個版本的ERC-20合約做錯誤處理。

怎樣支持所有token

現在你已經支持了ERC-20標準的token,然而有相當多的token看起來像ERC-20,但是它的有些行為卻不像,有些出現缺少返回值的錯誤。

有一段時間,OpenZeppelin有一個bug,他們在失敗的時候回退交易,但沒有在成功時返回true。這個bug讓很多token都受到了影響,包括USDT、OmiseGo和BNB。你期望返回一個布爾值,卻沒有任何值返回,這種情況,如果用Solidity0

動態 | 澳本聰比特幣訴訟案:提供相關證詞 但拒絕回答涉及國家安全的問題:4月4日,比特幣訴訟案中被告澳本聰出庭并提供相關證詞,法院文件內容如下: 1.迫使澳本聰披露其在2009和2010年挖掘的BTC數量的請求被駁回。在雙方簡要說明制作賴特博士的比特幣所有權清單是否會帶來不必要的負擔之后,法庭將重新討論這個問題; 2.澳本聰被要求回答此問題:2009年和2010年,他是否告訴過Dave Kleiman他挖掘了多少BTC; 3.澳本聰拒絕回答一些其他問題 ,據稱是出于國家安全考慮的問題。法院推遲對這一問題的裁決,以便讓當事各方簡要說明這一問題,包括提供證據證明。法院已經安排在2019年4月11日下午3點(當地時間)舉行聽證會。屆時,各方應準備就上述問題提出簡報時間表。[2019/4/8]

其先檢查返回數據的大小,如果是0,我們就假定它是行為不正常的token。如果調用沒有回退交易,那就意味著交易成功了,應該返回true。

隨著Solidity的版本更新,我們可以簡化這段代碼,像Uniswap是這樣做的:

聲音 | Novogratz:數字貨幣是安全的:據CCN消息,Novogratz表示數字貨幣是安全的,預計比特幣將在2019年第一季度上漲。[2018/10/21]

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:TOKKENTOKENTOKEStonks TokenBalto TokenMars Ecosystem TokenUpToken

火幣交易所
Gate.io Startup首發項目Knight War Spirits (KWS)空投結果及上線交易公告_Gate.io:gate.io官網下載蘋果手機

1.關于首發項目KnightWarSpirits(KWS)空投結果Gate.ioStartup首發項目KnightWarSpirits代幣KWS于2021年09月25日09:00開始下單.

1900/1/1 0:00:00
第二輪幣安KOL專屬:邀請好友認證賬戶,瓜分25,000 BUSD獎金!_DOR:USD

親愛的用戶:幣安為KOL社區推出第二輪專屬KYC推薦活動,邀請好友認證賬戶,瓜分25,000BUSD的獎池.

1900/1/1 0:00:00
Gate.io 雙周報2021年9月第2期_GATE:GAT

Gate.io雙周報為您囊括平臺周期熱點,助您快速掌握平臺動態,狀態持續“在線”。本周期Gate.ioNFT魔盒官方認證「原創作品集」招募活動進行中;Gate.io“理財寶”上線多款理財產品;多.

1900/1/1 0:00:00
信通院金鍵:行業應加速對區塊鏈技術深度和專業理念的普及_區塊鏈:ICT

據人民網消息,9月27日,由工業和信息化部主辦,北京市經濟和信息化局、中國信息通信研究院(以下簡稱中國信通院)等單位承辦的ICT中國·2021高層論壇和2021年中國國際信息通信展覽會在北京舉辦.

1900/1/1 0:00:00
NFT 生態系統 DoinGud 從多家風投公司和個人投資者完成一筆融資_區塊鏈:什么叫做區塊鏈技術

鏈聞消息,NFT生態系統DoinGud宣布從多家風投公司和多位個人投資者完成一筆融資,投資方包括IOSGVentures、DAOSquare、Ellipti、AlamedaResearch、Ha.

1900/1/1 0:00:00
中幣關于上線Waves(WAVES)的公告_AVE:COM

尊敬的中幣用戶: ????中幣將于香港時間2021年9月27日上線Waves。具體安排如下:????1、2021年9月27日15:00開放WAVES充值;????2、2021年9月28日16:0.

1900/1/1 0:00:00
ads