鏈聞ChainNews:
Solidity是以太坊上最主流的函數修改器。本篇文章從技術角度展示了如何針對異常情況在代碼層面進行詳細分析,最后總結出異常情況最易出現的一些場景,并給出相對應的建議。
來源|矩陣數字經濟智庫作者|閆鶯等
函數修改器
Solidity提供了一個函數修改器的特性。函數修改器與Python中的裝飾器類似,可以在一定程度上改變函數的行為,比如可以自動在函數執行前檢查參數是否合法。函數修改器是可以被繼承的,同時可以被派生類覆蓋重寫。
下面代碼展示了如何聲明并使用函數修改器。
contractowned{functionowned(){owner=msg
分析師:昨天Aave v3以太坊已清算953萬美元:金色財經報道,據21co鏈上數據分析師Tom Wan披露數據顯示,昨天Aave v3以太坊已清算953萬美元,這是自2023年1月推出以來最嚴重的單日清算,主要清算包含500萬美元的wstETH;300萬美元的WETH;65.7萬美元的WBTC;地址0xb08占清算金額的40%。價值400萬美元的wstETH已在Uniswap上互換,以償還AAVE V3上的USDC債務。[2023/8/18 18:08:15]
addressowner;//這個合約定義了一個在派生合約中使用的函數修改器//";"指代被修改函數的函數體。//當這個函數執行前,先檢查msg
}contractContractisowned{//從owned合約繼承了onlyOwner函數修改器并且將其作用于close函數//確保了這個函數只有在調用者為合約創建者時才會生效functionclose()onlyOwner{selfdestruct(owner);}}
以太坊網絡當前已銷毀超215萬枚ETH:金色財經報道,據Ultrasound數據顯示,截止目前,以太坊網絡總共銷毀2154261.43枚ETH。其中,OpenSea銷毀230047.02枚ETH,ETH transfers銷毀203222.97枚ETH,Uniswap V2銷毀130783.06枚。
注:自以太坊倫敦升級引入EIP-1559后,以太坊網絡會根據交易需求和區塊大小動態調整每筆交易的BaseFee,而這部分的費用將直接燃燒銷毀。[2022/4/24 14:45:39]
下面代碼進一步展示了函數修改器是如何接收參數的,函數修改器的參數可以是上下文中存在的任意變量組成的表達式。
contractpriced{//函數修改器可以接收參數modifiercosts(uintprice){if(msg
帝國商業銀行等4家機構計劃在ConsenSys基于以太坊上開發的平臺上建立碳交易市場試點:加拿大帝國商業銀行、巴西最大的私人銀行ItauUnibancoHoldingS/A、澳大利亞國民銀行、英國銀行NatWest計劃建立碳排放交易市場項目,該項目將創建一個生態系統來支持碳中和市場,還將促進高質量碳中和項目的交付和具有價格確定性和透明度的流動性碳信用市場。該項目將于8月啟動試點,該試點將建立在ConsenSys基于以太坊上開發的平臺上。[2021/7/9 0:38:49]
}}contractRegisterispriced,owned{mapping(address=>bool)registeredAddresses;uintprice;functionRegister(uintinitialPrice){price=initialPrice;}//這里需要payable修飾詞,否則無法通過該方法轉賬以太幣//函數修飾器costs接收參數price//使用costs修飾器確保registe函數在msg
灰度申請將以太坊經典信托基金列入OTC市場:灰度投資公司的董事總經理Michael Sonnenshein在接受CNBC采訪時宣布,已經申請要求今年晚些時候將其以太坊經典信托基金(Ethereum Classic Trust)列入公開報價的場外交易(OTC)市場,投資者將可通過零售經紀賬戶購買該基金,并可將其放入國稅局的稅收優惠賬戶。據報道,此次申請是由灰度的經紀商Canaccord Genuity提交。以太坊經典信托基金或將成為自灰度投資公司的比特幣投資信托以來,第二個被列入OTC市場的產品。[2018/3/14]
functionchangePrice(uint_price)onlyOwner{price=price;}}
下面的例子展示了如何使用函數修改器實現一個重入鎖機制。
以太坊漲超1200美元:包括韓國報價在內的Livecoinwatch.com數據顯示,以太坊漲超1200美元,與上周一報價相比漲超30%。同期比特幣幾無變動。以太坊24小時交易量約45億美元,其中韓國Bithumb交易所交易量最高,占比超10%。(Bitcoinist)[2018/1/29]
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:以太坊PRIRICEICE以太坊硬幣交易所交易時間prime幣怎么樣rice幣官網Era Name Service
Rakhni是第一個勒索軟件,最近,它添加了一個加密貨幣的挖礦組件,可以在一些電腦上進行部署。這個勒索軟件領域的「老司機」試圖攻擊新受害者。卡巴斯基實驗室安全專家發現了一個新的Rakhni版本.
1900/1/1 0:00:00尊敬的BITKER用戶:BITKER將于2019年4月29日17點正式開放SINS/ETH,SINS/USDT和SINS/BTC交易對。充幣已經開啟,提幣將在4月30日開啟.
1900/1/1 0:00:00歐洲最大的交易型開放式指數基金交易商FlowTradersNV已經進入加密市場,盡管荷蘭金融市場管理局發出公開警告,要求客戶遠離加密貨幣交易.
1900/1/1 0:00:00據和訊網消息,跨境業務區塊鏈服務平臺試點在陜西落地,出口應收賬款融資業務在招商銀行西安分行辦理兩單業務.
1900/1/1 0:00:00據bitcoinmagazine9月21日報道,今年上半年,日本警察廳經確認的加密貨幣被盜事件有158筆,損失了為5.4億美元(約合605.03億日元)的加密貨幣,是去年同期的3倍.
1900/1/1 0:00:00本文來自Coingeek&CoinDesk,原文作者JohnBiggs 譯者|Moni CraigS.Wright已經完成了原始比特幣白皮書和大部分原始代碼的美國版權注冊.
1900/1/1 0:00:00