加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads
首頁 > 幣贏 > Info

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

Author:

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

鏈聞ChainNews:

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

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

函數修改器

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

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

contractowned{functionowned(){owner=msg

數據:前十大以太坊錢包地址持有ETH總供應量的近35%:金色財經報道,根據Santiment的數據,前十大以太坊錢包持有ETH總供應量的近35%。2018年8月這一數字為11.2%。這些以太坊地址在過去五年中累計了近2800萬枚ETH,目前擁有以太坊流通供應量的34.6%。[2023/8/10 16:18:16]

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

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

Lido Finance已支持在Loopring上質押以太坊:8月26日消息,Lido Finance已支持在Loopring上質押以太坊,用戶可在Loopring官網或錢包中進行質押以太坊的操作并獲取wstETH,Loopring還將提供流動性池以允許用戶將wstETH交易為以太坊。此外,用戶還可以將Loopring上wstETH跨鏈至以太坊主網。[2022/8/26 12:49:53]

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

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

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

2000萬枚USDC在以太坊鏈上轉移,價值2000萬美元:Whale Alert監測數據顯示,北京時間3月14日10:00,以太坊鏈上2000萬枚USDC從USDC Treasury(0x55fe002開頭地址)轉入0x28c5b0開頭地址,按當前價格計算,價值約2000萬美元,交易哈希為:0x4969f81659811e4c3b7fce7960340c1d3ad3afcd6208214fc08ae1b23d75154e。[2020/3/14]

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

動態 | 以太坊Defi鎖倉金額一年暴增6倍 PoS上線后有望繼續增加:據區塊律動BlockBeats消息,在DeFi,ENS和Edgeware中鎖定了大概320萬ETH,占所有ETH流通的3%左右。這是一年前總鎖定量的6倍。隨著6個月以后PoS抵押系統的上線,ETH熊市的說法將不攻自破。[2019/7/4]

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

動態 | 以太坊未確認交易20945筆:Etherscan.io數據顯示,當前以太坊未確認交易數為20945筆,與此前相比未確認筆數略有下降,網絡擁堵有所緩解。行情顯示,ETH現價124.47美元,跌幅5.21%。[2019/3/4]

}

一個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:以太坊PRIETHRICE以太坊幣怎么挖礦賺錢PrivateumETHF幣rice幣挖礦

幣贏
ETH 錢包 MyEtherWallet 發布緊急黑客攻擊警告,這些用戶必須立即轉移資金_ETH:eth官網中文版

很流行的以太坊錢包接口和代幣錢包MyEtherWallet——再次——處于一個重大安全漏洞的中心,該錢包已經向使用一種有名的VPN的用戶發出警告,提醒他們趕緊轉移資產.

1900/1/1 0:00:00
投資中如何把握止損時機_THOR:Thor Doge

幣價跌到你能夠承受的最低價位時,就果斷賣出,減少損失。有些人把止損也叫做“割肉”,但是止損和割肉也是有區別的,相對來說選擇止損的投資者基本上都有自己后期的操作策略,會選擇在適當的點位及時賣掉,降.

1900/1/1 0:00:00
半年花費 50 萬美元,EOS 漏洞獎勵支出令人頭大_EOS:比特幣sv是什么幣

加密貨幣漏洞獎勵方面的支出越來越高了。Coinbase、EOS、Stellar以及Augur等平臺近段時間都獎勵了發現安全漏洞的白帽黑客一大筆錢.

1900/1/1 0:00:00
挖掘我這個比特幣區塊為什么花了二十分鐘?_比特幣:PDF

一圖看懂 這聽起來耳熟嗎? 你剛做完一筆比特幣交易并且非常想看到它是否會出現在下一個區塊中。你預期比特幣的出塊時間是10分鐘。查詢比特幣節點的記錄,距離上一個區塊已經過去7分鐘.

1900/1/1 0:00:00
Zcash的“十月圍城”:從隱私幣典范到“被死亡”_ASH:BABYDOGECASH價格

人在家中坐,禍從天外來。這話用來形容Zcash的近日運勢或許正合適。在上周一個區塊鏈峰會上,德勤、安永的專家在評價Zcash時可謂不留情面.

1900/1/1 0:00:00
石油幣背后根本沒石油 只是一個政府騙局?_石油幣:petro幣價格

據俄羅斯電視頻道RT報道,委內瑞拉正在考慮使用盧布與俄羅斯達成雙邊貿易協議。委內瑞拉駐日內瓦聯合國代表JorgeValero表示,雙方還在討論使用委內瑞拉發行的國家背書的加密貨幣“石油幣”Pet.

1900/1/1 0:00:00
ads