比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads

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

Author:

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

鏈聞ChainNews:

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

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

函數修改器

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

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

contractowned{functionowned(){owner=msg

第116次以太坊核心開發者共識會議:下一次ACD電話會議將確定Devnet #9等升級的時間:8月25日消息,Galaxy研究副總裁Christine Kim發文總結第116次以太坊核心開發者共識會議(ACDC),討論了8月16日推出的Dencun測試網Devnet #8、Dencun升級各個部分的全面測試概述、轉向Devnet #9的計劃以及啟動Holesky測試網的一些未解決的問題等。

首先,開發者表示所有EL與CL客戶端均已加入Devnet #8,尚未在測試網上運行驗證器的兩個EL客戶端是Besu和Erigon。其次,Jayanthi提交了Dencun測試概述文檔,詳細介紹了將在未來幾周內開發的Dencun升級的特定測試領域,包括針對影響EVM的Dencun EIP的EVM相關測試、在EL與CL客戶端之間同步測試區塊與blob、用戶評估不同混沌狀況的混沌測試、對更多Devnets與影子分叉等公開測試、MEV相關測試、回歸測試、壞區塊與blob測試、blob特定測試。其三,開發者介紹了Devnet#9的啟動計劃,Devnet #8與Devnet #9之間代碼規范的唯一重大變化是EIP-4788的部署策略。開發者將在下一次ACD電話會議就Devnet #9與其他即將進行的測試網升級的大致時間達成一致。最后,開發者梳理了Holesky測試網啟動過程中三個未解決的問題,包括開發者同意將Holesky傷的Shapella升級的Epoch時間從10調整為256,以更準確地反映以太坊主網的環境等。[2023/8/25 10:02:12]

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

InfStones推出以太坊驗證者服務:4月19日消息,Web3基礎設施提供商InfStones宣布推出以太坊驗證者服務,旨在滿足以太坊上海升級后的市場需求,支持用戶一鍵設置自己的驗證節點,機構實體可以一次單擊批量處理多達1000個驗證者。此外,InfStones還將與其他流動性質押協議合作以降低32ETH質押門檻。(prnewswire)[2023/4/19 14:12:57]

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

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

以太坊開發人員將注意力轉向隱私、可擴展性和用戶友好性:金色財經消息,在ETHSeoul 2022區塊鏈的技術會議上,以太坊開發人員將注意力轉向隱私解決方案、可擴展性和增強用戶的友好性。[2022/8/10 12:15:36]

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

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

數據:昨日以太坊單筆交易手續費均值超過50美元:據歐科云鏈鏈上大師數據顯示,9月8日以太坊交易手續費均值達到0.017 ETH,約合56美元,為5月12日以來新高。[2021/9/9 23:12:59]

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

動態 | Nimbus在智能手機上運行其以太坊2.0測試網:金色財經報道,以太坊基礎設施團隊Nimbus的成員正試驗在智能手機上運行其以太坊2.0測試網。Nimbus客戶端團隊已更新了Beacon鏈的最新規范,現在正準備交付并參與多客戶端網絡。[2020/2/6]

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

幣安app下載
THE:火星一線 | 穩定幣USDT發行方Tether承認曾使用部分儲備資金投資比特幣_Not Another Shit Altcoin

火星財經APP一線報道,據TheBlock獲得的訴訟記錄,Tether承認曾使用部分儲備資金投資比特幣.

1900/1/1 0:00:00
加密貨幣:芬蘭批準《虛擬貨幣提供商法案》,5月1日生效_加密貨幣和數字貨幣的區別和聯系

芬蘭總統已經批準了一項監管加密貨幣服務提供商的新法律,監管范圍將覆蓋到加密貨幣交易所、托管錢包服務提供商、以及加密貨幣發行方.

1900/1/1 0:00:00
KEN:TokenInsight:Drep項目評級為B ,展望穩定_imtoken轉賬賺錢騙局

Drep計劃打造一條高性能的公有鏈,構建出一個完整、開放、開發者以及用戶體驗友好生態系統,提供一套兼具靈活性、易用性和用戶無感化的解決方案.

1900/1/1 0:00:00
比特幣:華爾街開始坐莊,比特幣不到兩月暴跌 60%,你敢抄底嗎?_比特幣交易

在這個世界上,如果聰明也分等級,那么最最聰明的人,一定是在玩金融。華爾街聚集了全世界最聰明的人,在這里,有數學天才、有心理學大師、有經濟學家……他們每幾秒鐘就能設計出一款風靡全球的金融產品,可以.

1900/1/1 0:00:00
區塊鏈:谷歌將于 6 月份禁止發布數字貨幣廣告_非小號幣價

搜索巨頭谷歌表示,將在今年6月改變其金融產品政策,此舉將導致與數字貨幣相關的廣告被有效禁止。在周二發布的一篇博客文章中,該公司表示,將在今年6月修改現有的金融產品限制清單,將一些廣告內容列入黑名.

1900/1/1 0:00:00
Maker:MakerDAO治理合約升級背后的安全風波_mkr幣最新價格

北京時間2019年05月07日,區塊鏈安全公司Zeppelin對以太坊上的DeFi明星項目MakerDAO發出安全預警,宣稱其治理合約存在安全漏洞,希望已鎖倉參與投票的用戶盡快解鎖MKR提并出.

1900/1/1 0:00:00
ads