買以太坊 買以太坊
Ctrl+D 買以太坊
ads
首頁 > PEPE > Info

以太坊:以太坊技術 | Solidity 函數修改器以及異常處理_PRIVI幣

Author:

Time:1900/1/1 0:00:00

鏈聞ChainNews:

Solidity是以太坊上最主流的函數修改器。本篇文章從技術角度展示了如何針對異常情況在代碼層面進行詳細分析,最后總結出異常情況最易出現的一些場景,并給出相對應的建議。

來源|矩陣數字經濟智庫作者|閆鶯等

函數修改器

Solidity提供了一個函數修改器的特性。函數修改器與Python中的裝飾器類似,可以在一定程度上改變函數的行為,比如可以自動在函數執行前檢查參數是否合法。函數修改器是可以被繼承的,同時可以被派生類覆蓋重寫。

下面代碼展示了如何聲明并使用函數修改器。

contractowned{functionowned(){owner=msg

江卓爾:以太坊主網合并在11月-12月進行的概率很大:7月17日消息,江卓爾表示,ETH開發人員計劃9月19日合并ETH 2.0,但這種大型軟件開發項目,最后延期也是常態,并且還有大量的ETH應用項目沒有開始測試,因此料敵從寬,再加2-3個月冗余(這也是難度炸彈延長區塊時間的最后可忍受時間),11-12月合并的概率很大,正好契合年底熊市下跌結束的慣例(2014、2018熊市都是到年底止跌),由ETH作為龍頭,啟動下一輪牛市。

ETH 2.0后的三大實際資金面利好:

1. ETH將減產90%,你想想一次BTC減半都會帶來一輪大牛市,而減產90% = 3次BTC減半。

2. POS鎖定幣預計從現在的10%提高到30%(按照其它POS幣慣例),更多幣被鎖定。

3. 再加上EIP-1559燒幣,實際通脹從正2.0%變負1.8%,開啟幣圈前所未有的燃燒通縮時代。[2022/7/17 2:18:56]

addressowner;//這個合約定義了一個在派生合約中使用的函數修改器//";"指代被修改函數的函數體。//當這個函數執行前,先檢查msg

Uniswap成為以太坊上首個年收入超過10億美元的DApp:1月4日消息,Uniswap成為以太坊區塊鏈上運行的首個年收入超過10億美元的DApp。數據顯示,該DeFi DApp目前每天處理12.8億美元的交易量,收入為250萬美元。從2020年10月到2021年10月,Uniswap共賺取了11億美元的費用。按目前200億美元的完全稀釋市值計算,該公司的市盈率約為20倍。

在更廣泛的科技行業,市盈率可以達到100甚至1000倍,與此不同的是,人們對Uniswap的估值更像是一家傳統的老公司,業務增長緩慢但穩定。

部分原因可能是以太坊區塊鏈在沒有L2的情況下無法處理更多的流量,因此,在Starknet、zkSync、Optimism和Arbitrum等L2興起之前,以太坊區塊鏈的使用量很難增長10倍。

然而,12月4日,Uniswap確實處理了41億美元的交易量。這意味著它的日營收約為1000萬美元,因此可推算其年內峰值收益為40億美元,或者完全稀釋后的市值為800億美元,這意味著Uniswap的最高定價區間將從目前的20美元升至80美元。(Trustnodes)[2022/1/5 8:25:16]

}contractContractisowned{//從owned合約繼承了onlyOwner函數修改器并且將其作用于close函數//確保了這個函數只有在調用者為合約創建者時才會生效functionclose()onlyOwner{selfdestruct(owner);}}

以太坊信標鏈上線一周年,驗證節點超26萬個,質押率7.24%:據歐科云鏈鏈上大師數據顯示,以太坊2.0存款合約地址已收到850.2萬ETH,占到ETH供應量的7.24%。以太坊信標鏈上線一周年,信標鏈上的驗證節點超過26.42萬個,參與ETH2.0質押的地址數量達56393個。[2021/12/3 12:48:20]

下面代碼進一步展示了函數修改器是如何接收參數的,函數修改器的參數可以是上下文中存在的任意變量組成的表達式。

contractpriced{//函數修改器可以接收參數modifiercosts(uintprice){if(msg

}}contractRegisterispriced,owned{mapping(address=>bool)registeredAddresses;uintprice;functionRegister(uintinitialPrice){price=initialPrice;}//這里需要payable修飾詞,否則無法通過該方法轉賬以太幣//函數修飾器costs接收參數price//使用costs修飾器確保registe函數在msg

Circle向以太坊網絡新增發1566萬枚USDC:據DAppTotal.com穩定幣專題頁面數據顯示:10月21日23時01分 ,USDC發行方Circle向以太坊網絡新增發1筆價值1,566萬美元的USDC, 塊高度為:11100206,交易哈希值為:0xb8fa1cc43c5d827208a45bd86a7efba70b0575a29314feebc349f0cea6530083 。截至目前,Circle在以太坊網絡上的ERC20 USDC總發行量已達2,795,864,274枚。[2020/10/22]

functionchangePrice(uint_price)onlyOwner{price=price;}}

下面的例子展示了如何使用函數修改器實現一個重入鎖機制。

動態 | 2月Github開發活動活躍的20個項目中 有16個建立在以太坊區塊鏈上:據Consensys統計,2月份Github開發活動活躍的20個項目中,有16個建立在以太坊區塊鏈上,2個是區塊鏈互操作性網絡,1個構建于Steem上,還有1個試圖構建于EOS上。[2019/3/5]

contractMutex{boollocked;modifiernoReentrancy(){require(!locked);locked=true;;locked=false;}//這個函數使用了noReentrancy修改器,這保證了在f函數內部無法再次調用f函數//在執行return7時也執行了函數修改器中的locked=false語句functionf()noReentrancyreturns(uint){require(msg

}異常處理以太坊使用狀態回退機制處理異常。如果發生了異常,當前消息調用和子消息調用產生的所有狀態變化都將被撤銷并且返回調用者一個報錯信號。Solidity語言提供了兩個方便的函數assert和require來檢查條件,并且當條件不滿足的時候拋出一個異常。assert函數通常用于檢查變量和內部錯誤,require函數用于確保程序執行的必要條件是成立的。一個正常運行的程序不應該遇到assert和require失敗,否則程序代碼中一定存在需要修復的問題。revert函數和throw關鍵詞會標識發生了錯誤并且回退當前的消息調用產生的狀態改變。當前調用收到子消息調用產生的異常時會自動拋出,所以異常會一層層上浮直到最上層的根調用,代碼會立刻終止執行并回退狀態改變。但是,

}

一個assert類型的異常會在下述場景拋出:

訪問數組越界,下標為負數或者超出長度。訪問固定長度的bytesN越界,下標為負數或者超出長度。對0做除法或者對0取模,比如5/0,5%0。移位操作使用了一個負數做操作數。轉換一個特別大的數或者負數到枚舉類型變量。使用移位操作時給一個負數值。使用枚舉時將過大值或賦值轉為枚舉類型變量。調用assert函數并且參數值為false。一個require類型的異常會在下述場景拋出:

調用throw。調用require并且參數值為false。發起一個消息調用,但是這個調用沒有正常完成,比如Gas耗盡、被調用函數不存在或者函數本身拋出一個異常。使用new創建一個合約,但是和3中提到的原因一樣構造函數沒有正常完成。調用外部函數時指向一個不包含代碼的地址。合約通過一個沒有payable修辭詞的函數接收以太幣,包括構造函數和fallback函數。合約通過一個公開的訪問函數接收以太幣。.transfer()失敗。在require類型的異常發生時會執行回退操作,對于一個assert類型的異常執行一個無效操作。在這兩種情況下,以太坊虛擬機都會撤銷所有的狀態改變。這樣做是因為發生了意料之外的情況,交易無法安全執行下去,為了保證交易的原子性,最安全的操作就是撤銷該交易對狀態造成的影響。

在編寫合約代碼時,我們需要合理使用assert和require來保證代碼能夠按我們預期的設計進行。

更多精彩內容,關注鏈聞ChainNews公眾號,或者來微博**@鏈聞ChainNews**與我們互動!轉載請注明版權和原文鏈接!

來源鏈接:mp.weixin.qq.com

本文來源于非小號媒體平臺:

鏈聞研究院

現已在非小號資訊平臺發布1篇作品,

非小號開放平臺歡迎幣圈作者入駐

入駐指南:

/apply_guide/

本文網址:

/news/3626956.html

以太坊ETH

免責聲明:

1.資訊內容不構成投資建議,投資者應獨立決策并自行承擔風險

2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場

上一篇:

文摘|Schnorr簽名:比特幣的最新升級

Tags:以太坊ICERICEPRI以太坊交易所在哪下載justice幣超話Frax Price Index SharePRIVI幣

PEPE
THE:比特幣驚現重大漏洞后,代碼審查工作將更加嚴苛_ipcchain

自從上周發現并修復了比特幣最嚴重的漏洞之一以來,社區的情緒用「震驚」這個詞來形容是最恰當不過了.

1900/1/1 0:00:00
DAO:人民創投:當談到區塊鏈安全,我們一般會談論什么?_DAOP價格

宇宙就是一座黑暗森林,每個文明都是帶槍的獵人,像幽靈般潛行于林間,輕輕撥開擋路的樹枝,竭力不讓腳步發出一點兒聲音,連呼吸都必須小心翼翼,他必須小心,因為林中到處都有與他一樣潛行的獵人.

1900/1/1 0:00:00
BTC:冷錢包 LeiterWallet 開放充幣、提幣通道_RWA

2018年1月28日,由MGCGroup區塊鏈技術團隊精心研發的冷錢包LeiterWallet上線公測。一經推出,便受到了市場的廣泛認可.

1900/1/1 0:00:00
ETF:SEC又推遲ETF申請,比特幣ETF為何總是難產?_gliesecoin

比特幣在8000美元附近盤整的第5天。到今天為止,還是按照上回的判斷走。由于這幾天震蕩區間在1000美元,屬于寬幅震蕩,振幅還沒有縮窄,也就是說還沒有到選擇方向的時候,從K線上看也不排除構建一個.

1900/1/1 0:00:00
ETH:終于認罪 Tether承認將部分儲備金投資于BTC等資產_ETHMOON

來自加密技術媒體theblockcrypto.com獲得的法庭文件顯示,穩定幣發行商Tether表示,其已將部分儲備金投資于比特幣和其他資產.

1900/1/1 0:00:00
PIN:「黑客從我的手機里偷走了 2.24 億美金!」_coinpinpin

8月15日,MichaelTerpin對美國電信巨頭AT&T正式提起訴訟,要求賠償2.24億美元.

1900/1/1 0:00:00
ads