以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > SHIB > Info

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

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

Phantom:某些NFT圖像由于Meson Network的臨時問題未能加載,但仍是安全的:金色財經消息,Solana生態錢包Phantom發推稱,由于Web3帶寬交易市場Meson Network的臨時問題,某些NFT圖像可能未加載到收藏品選項卡中,所有的NFT都是安全的,并且仍然可以在DApps和市場上運行。團對正在制定解決方案,并將跟進更新。[2022/8/13 12:22:12]

我們可以看到,與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}}

新品發布會 | OKEx徐坤:在疫情危機之下,資金、資源都會流向最安全的地方:4月2日18:00,金色財經舉辦以“?-ing”為主題的新產品發布會,在圓桌討論環節中針對“區塊鏈市場的競爭態勢將如何演變以及資源將向哪些領域傾斜”的問題,OKEx首席戰略官徐坤表示,整個市場的頭部效應會更加明顯,尤其在疫情危機之下,資金、資源都會流向最安全的地方,大公司有更強的資金儲備、組織管理能力,從而更能抵抗風險。從交易所而言,頭部交易所安全性更好,不會像小交易所出現倒閉、暴雷等風險,而且系統流暢性、交易深度、產品種類也更有競爭力。而從OKEx來說,無論技術、人才還是資金,都有非常強的儲備,我們也在大力進行全球化的布局。公鏈生態中也是如此,大量山寨幣落下帷幕,開發者、資金、流量都會更加集中在頭部項目,比如比特幣和以太坊。最后提一下,不要為了區塊鏈而區塊鏈,要做真正的應用或者區塊鏈技術相關才是有價值的。[2020/4/2]

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

怎樣支持所有token

動態 | 德國財政部:門羅幣對金融安全的威脅要大于比特幣:據Decrypt報道,德國財政部最近發表的一份關于金融安全風險評估的報告表明,門羅幣等隱私加密貨幣實際上對金融安全的威脅要大于比特幣。這主要是由于使用門羅幣進行交易具有匿名性質,被犯罪分子在暗網上利用。根據該報告,無法跟蹤門羅幣交易的功能使其適合犯罪分子使用,比特幣被懷疑是犯罪暗網活動的一種貨幣,被發現與匿名活動相距甚遠,并且對犯罪活動的吸引力較小。德國財政部表示,德國政府將修改法律,以規范加密貨幣交易所,錢包提供商和其他從事洗錢的保管服務提供商。[2019/10/23]

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

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

分析 | 攻擊者控制了 GateHub 數據庫里的部分賬號 API 權限,不過用戶私鑰是安全的:慢霧安全團隊通過鏈上行為分析可以得知:攻擊者最早于 05/29/2019 12:14 UTC 時間通過 CoinPayments 創建并激活了攻擊者的第一個“攻擊者賬號”(rN5Gm1FijbTVeYFfpTRfGKfNZQY7hc9TbN),攻擊者在 05/30/2019 12:23 UTC 時間攻擊 GateHub 第一個賬號(控制了這個賬號的有關權限),并通過這個被攻擊的賬號創建并激活了第二個“攻擊者賬號”(r9do2Ar8k64NxgLD6oJoywaxQhUS57Ck8k),之后第二個“攻擊者賬號”還創建并激活了第三個“攻擊者賬號”(rpBDxqWArAQTEfPeWwkUvBh1cbc885nirX),之后攻擊者攻擊了 GateHub 至少 103 個賬號,最后一次攻擊時間是 06/01/2019 18:40 UTC 時間,并通過這三個“攻擊者賬號”完成洗幣操作。慢霧安全團隊通過相關分析推測攻擊者至少是控制了 GateHub 數據庫里的部分賬號 API 權限,不過用戶私鑰是安全的。攻擊持續三天多的時間才被阻止,該平臺的用戶應立即轉移資產并更新賬號相關權限。[2019/6/8]

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

動態 | Bithumb已聘請第三方審計其資金儲備,并重申客戶資金存放在冷錢包中是安全的:據cointelegraph報道,韓國加密貨幣交易所Bithumb在4月11日的一份聲明中證實,該公司在上月遭遇重大黑客攻擊后,對其資金進行了專業的外部審計。Bithumb已聘請第三方評估其儲備,重申了其此前的保證,即客戶資金存放在冷錢包中是安全的。[2019/4/11]

隨著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:TOKENKENTOKTOKEbttokenKENNEL幣SportyCo TokenBaked Token

SHIB
DeversiFi 稱巨額 Gas 費用由 EthereumJS 庫潛在問題導致,礦工已歸還 7626ETH_DEV

鏈聞消息,非托管交易所DeversiFi針對此前包含7676.62ETH的Gas費用的交易發布事后分析報告稱.

1900/1/1 0:00:00
dYdX 成為 DeFi 浪潮的新贏家,一文了解 dYdX 的核心競爭力_DYDX

去中心化金融是一片充滿著未知寶藏的生態系統。從借貸到收益耕作,從高APY質押協議到保證金交易,DeFi正在逐漸轉變為私人投資者、機構、加密貨幣風險投資公司和零售商最理想的首選解決方案之一.

1900/1/1 0:00:00
Footprint 8月月報 DeFi市場多點開花,9月是否會迎來下一個爆發點_ANC

撰文:Vincy@FootprintAnalytics日期:2021/09/09隨著7月月報July2021Report數據分析,7月的市場逐步恢復.

1900/1/1 0:00:00
XT關于暫停CC充提的公告_COM

尊敬的XT用戶: 因CC錢包維護,XT.COM現已暫停CC充提業務。給您帶來的不便,請您諒解!感謝您對XT.COM的支持與信任.

1900/1/1 0:00:00
美國CFTC破獲了一起大規模的外匯和比特幣交易騙局_CFT

據Coinnounce10月2日報道,美國商品期貨交易委員會(CFTC)破獲了一起大規模的外匯和比特幣交易騙局,并對八名實施該計劃的個人提起民事執法指控.

1900/1/1 0:00:00
信通院、螞蟻鏈共同啟動區塊鏈一體機國際標準_區塊鏈

9月29日消息,螞蟻集團聯合中國信息通信研究院正式啟動區塊鏈一體機國際標準,圍繞一體機硬件以及軟件技術、架構層次、安全要求等作出規范,填補了區塊鏈一體機國際標準的空白.

1900/1/1 0:00:00
ads