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

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

Author:

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

鏈聞ChainNews:

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

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

函數修改器

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

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

contractowned{functionowned(){owner=msg

以太坊正在提款的實體中Huobi暫列第一:金色財經報道,Token.Unlock數據顯示,以太坊完成上海升級后至今,已凈提款約2.5萬枚ETH。此外Nansen統計數據顯示,目前約50萬枚ETH等待提款,其中待提款的實體中Huobi占比約29.1%,位列第一。[2023/4/13 14:00:59]

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

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

以太坊合并一周后供應量已增加超5000ETH:金色財經報道,據ultrasound.money數據顯示,以太坊合并一周后供應量已增加超5000ETH。數據顯示,截至發稿,新增供應量為5027.07ETH。

EthHub聯合創始人AnthonySassano發推文稱:“自從合并以來已經過去了一個多星期,如果以太坊仍然是PoW,那么ETH的供應量將增加約10萬枚,相反,目前ETH的供應量只增加了約5000枚,這意味著ETH凈發行量減少了95%(包括目前非常少的銷毀)。大部分按PoW發行ETH的可能被礦工拋售,因為他們必須支付運營成本,由于運營成本明顯低于PoW,大部分按PoS發行的ETH(稅后)可能會被持有/重新質押,一旦市場再次升溫并且平均gas價格回到15Gwei上方,ETH發行量將是凈負數(即ETH為通縮狀態)。”[2022/9/23 7:15:53]

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

數據:近一周以太坊上NFT交易額4143萬美元:據歐科云鏈鏈上大師數據顯示,近一周以太坊上NFT交易額4143.21萬美元,環比下降22.88%;交易筆數共計20009筆,環比下降26.27%。

交易額前三的項目分別為:CryptoPunks 854.62萬美元,Bored Ape Kennel Club 831.07萬美元以及Art Blocks Curated 284.01萬美元。[2021/7/26 1:16:06]

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

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

近30天以太坊搜索指數整體同比上升122%:金色財經報道,百度指數數據顯示,近30天區塊鏈搜索指數整體日均值為5785,整體同比上升35%,移動同比上升12%;近30天比特幣搜索指數整體日均值為20867,整體同比下降24%,移動同比下降25%。近30天以太坊搜索指數整體日均值為5870,整體同比上升122%,移動同比上升131%。[2020/9/23]

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

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

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

以太坊未確認交易156657筆:金色財經報道,據btc.com數據顯示,以太坊未確認交易156657筆。當前全網難度2265.34T,平均出塊時間為13.3S,每秒交易數約為10。截至目前以太坊全球均價為198.84美元,24h漲幅為4.47%。[2020/5/14]

}異常處理以太坊使用狀態回退機制處理異常。如果發生了異常,當前消息調用和子消息調用產生的所有狀態變化都將被撤銷并且返回調用者一個報錯信號。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:以太坊ETHPRIICE以太坊幣最新價格今日行情2022.10.12etherparty幣前景EPRINTSPICE

fil幣價格今日行情
區塊鏈不能只有共識,還要有法律_區塊鏈

作者:涉江文章來源:大象區塊鏈網從周末大批區塊鏈項目方叫囂去香港找以太坊創始人V神維權,到今天,OKEX交易所用戶從全國各地打飛的聚集到上海.

1900/1/1 0:00:00
條條大路通羅馬:實現數字貨幣雙花攻擊的多種方法_EOS

2008年,中本聰提出了一種完全通過點對點技術實現的電子現金系統。該方案的核心價值在于其提出了基于工作量證明的解決方案,使現金系統在點對點環境下運行,并能夠防止雙花攻擊.

1900/1/1 0:00:00
主網上線一周年臨近,EOS還有可能重回20美元嗎?_EOS

然而一年之后,EOS價格僅為去年同時期的二分之一。是什么推高了去年的幣價?最開始大家對EOS項目的理解,大部分停留在“囤幣上漲”的期待中,隨著市場行情的波動,明星幣EOS跌到了5美元以下.

1900/1/1 0:00:00
印度:反對黨高級成員要求調查涉及金額高達 7.23 億美元的「超級比特幣騙局」_比特幣

據印度媒體7月5日報道,印度反對黨——印度國民大會黨的一名官員要求對「超級比特幣騙局」展開調查。據推測,這一騙局涉及的是大多數印度人民黨的領導人.

1900/1/1 0:00:00
你是如何落入 CoinMarketCap 設下的圈套的?_COI

在幣圈,所有人都生活在CoinMarketCap這類代幣排名網站的巨大影響之下。截至目前,CoinMarketCap網站的獨立訪問量已經超過了6000萬,它在Alexa上的全球排名占第340名,

1900/1/1 0:00:00
OKLinkCEO任煜男:穩定幣的核心競爭力在于合規和透明_區塊鏈

近日,香港主板上市公司前進控股集團通過其官方微信對外發布消息稱,已完成子公司OKLinkFintechLimited的注冊,并將于近期正式推出USDK合規穩定幣的業務.

1900/1/1 0:00:00
ads