比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > AVAX > Info

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

Author:

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

鏈聞ChainNews:

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

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

函數修改器

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

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

contractowned{functionowned(){owner=msg

以太坊在新的加密貨幣ESG排名中位居第一:金色財經報道,據加密數據公司CCData與加密貨幣碳評級研究所 (CCRI?)聯合創建的首個ESG基準于周四發布。它評估了40種最大、流動性最強的數字資產,評估了去中心化、安全性和氣候影響等參數。其中,以太坊在第一個機構級加密ESG排名中位居第一,其次是Solana和Cardano,而比特幣則由于其大量能源消耗而落后。

環境、社會和治理 (?ESG?) 要求在投資中的作用變得越來越普遍,特別是在機構投資者和大型資產管理公司中。[2023/7/13 10:53:12]

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

以太坊開發者:Shapella提款測試出現問題,但不會影響Shapella升級時間:金色財經報道,以太坊核心開發者Tim Beiko發推稱,開發者Marius Van Der Wijden發現了一個公共測試網Shapellabug,該bug在空塊(沒有交易或取款)的完全同步期間出現,其他幾個客戶端也遇到了這個問題,不過,這個問題很容易測試,可以快速修補。團隊認為這不會影響Sepolia升級的時間表,仍計劃在2月28日12:00點進行。另外,Barnabas Busa更新了最新的對Shapella進行壓力測試的提款Devnet。該Devnet有60萬驗證者,其中36萬驗證者在分叉時執行取款憑證更新。客戶端看到RAM+CPU使用率激增的情況,devops團隊將在未來幾天監控開發網絡,以查看有多少憑證更新消息被包含和丟失。該測試還揭示了Prysm<>Besu問題,其中Besu限制了它通過RPC發送的響應數量以防止DoS,但Prysm預期的響應數量高于Besu的當前限制。Besu團隊目前正在調查此事。此外,開發者還計劃進行另一次主網影子分叉,將在上面做一些Mev-Boost測試。2月10日以太坊基金會表示,Shanghai+Capella(Shapella)主網升級正在進入最后的預發布序列——公共測試網。Shapella包含許多功能,但對質押者和共識層來說最重要的是支持提款。退出的驗證者可以全額取款,而活躍驗證者余額超過32ETH的可以部分取款。另外,第一個長期存在的公共測試網Sepolia計劃于2月28日進行升級。[2023/2/17 12:12:44]

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

以太坊未確認交易為130,867筆:金色財經消息,據OKLink數據顯示,以太坊未確認交易130,867筆,當前全網算力為277.41TH/s,全網難度為3.67P,當前持幣地址為52,118,510個,同比增加127,220個,24h鏈上交易量為4,292,374.85ETH,當前平均出塊時間為13s。[2020/12/28 15:55:48]

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

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

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

數據:以太坊上的比特幣數量為閃電網絡上所有BTC的77倍:網友Josh Stark發推稱,數據顯示,以太坊上的比特幣達到了82793枚,這一數字大約是:

- 目前BTC總供應量的0.45%;

- Blockstream的Liquid上所有BTC的32倍;

- 閃電網絡上所有BTC的77倍。[2020/9/13]

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

動態 | Circle向以太坊網絡新增發1,200萬枚USDC:據DAppTotal.com穩定幣專題頁面數據顯示:11月28日06時00分 ,USDC發行方Circle向以太坊網絡新增發1筆價值1,200萬美元的USDC, 塊高度為:9012094,交易哈希值為:0x19b1b5b2cb18b30461b202f26c5737d69e1f80662f84c6a845a8123467154d22 。截至目前,Circle在以太坊網絡上的ERC20 USDC總發行量已達466,737,223枚。[2019/11/28]

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

AVAX
牛市“重啟”?大佬回歸 礦機脫銷 資金盤蠢蠢欲動_VDS

文|棘輪比薩 在比特幣重回8000美元后,“牛市是否來了”,成為了幣圈最熱的話題。李笑來起草的一封“致用戶信”,讓外界驚呼“幣圈大佬”已經殺回戰場。幣價的走高,推動了二手礦機價格飛漲.

1900/1/1 0:00:00
兩年洗錢 80 億,交易所是黑客洗錢幕后推手還是受害者?_區塊鏈

近日,美國一家專門研究區塊鏈反洗錢的公司CipherTrace發布了一份數字加密貨幣反洗錢報告,數據顯示在過去兩年里.

1900/1/1 0:00:00
公鏈生態周報:BI指數周漲幅超20% IOST主網賬戶突破30萬 | 鏈塔智庫_EOS

01市場行情 鏈塔BI指數,由80個具有代表性的加密貨幣組成,用以反映加密貨幣市場整體表現。5月19日,BI指數報收1206點,周內上漲212點,漲幅為21.3%.

1900/1/1 0:00:00
想保護自己的數字資產安全?形式化驗證給你答案_API

導讀 繼上篇對當前數字資產領域的安全形勢進行了深度分析后,本文將介紹區塊鏈數字資產領域的安全措施與相關的解決方案。區塊鏈技術是數字資產的新興載體.

1900/1/1 0:00:00
直擊 BCH 硬分叉:采用「錢包分離法」徹底根除重放攻擊風險_區塊鏈

北京時間10月16日,自02:16塊高度556767起,以比特大陸和螞蟻礦池為首的BCHABC陣營和以CoinGeek及nChain為首的BCHSV陣營(代表人物CraigSteveWright.

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

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

1900/1/1 0:00:00
ads