Solidity智能合約應(yīng)用開發(fā)(微課版)課件 項目3、4 深入理解Solidity函數(shù)、探索合約繼承與接口的使用_第1頁
Solidity智能合約應(yīng)用開發(fā)(微課版)課件 項目3、4 深入理解Solidity函數(shù)、探索合約繼承與接口的使用_第2頁
Solidity智能合約應(yīng)用開發(fā)(微課版)課件 項目3、4 深入理解Solidity函數(shù)、探索合約繼承與接口的使用_第3頁
Solidity智能合約應(yīng)用開發(fā)(微課版)課件 項目3、4 深入理解Solidity函數(shù)、探索合約繼承與接口的使用_第4頁
Solidity智能合約應(yīng)用開發(fā)(微課版)課件 項目3、4 深入理解Solidity函數(shù)、探索合約繼承與接口的使用_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

深入理解Solidity函數(shù)/CATALOGUE目錄010203函數(shù)基礎(chǔ)概念函數(shù)修飾器特殊函數(shù)040506函數(shù)重載轉(zhuǎn)賬函數(shù)加密與編碼函數(shù)函數(shù)基礎(chǔ)概念01PART””定義語法參數(shù)與返回值函數(shù)參數(shù)聲明類似普通變量,未使用參數(shù)可省略名稱。引用類型參數(shù)需添加位置聲明。返回值可有多個,可通過returns關(guān)鍵字指定類型和變量名,也可在函數(shù)體中使用return語句返回數(shù)據(jù)。02Solidity中定義函數(shù)使用關(guān)鍵字function,需指定函數(shù)名、參數(shù)列表、函數(shù)修飾符及返回值列表。函數(shù)修飾符包括可見性與可變性等。例如functionadd(uinta,uintb)privatepurereturns(uint)定義了一個私有純函數(shù),用于計算兩個數(shù)的和。01函數(shù)定義內(nèi)部調(diào)用是在合約內(nèi)對函數(shù)調(diào)用,外部調(diào)用是在合約外調(diào)用或通過this實現(xiàn)。內(nèi)部調(diào)用直接使用函數(shù)名,外部調(diào)用需通過合約實例或this關(guān)鍵字。內(nèi)部調(diào)用與外部調(diào)用Solidity支持類json形式傳參,將參數(shù)名作為鍵,參數(shù)值作為值,參數(shù)順序可調(diào)整,但參數(shù)名不需加引號。類json形式傳參函數(shù)調(diào)用函數(shù)修飾器02PART修飾器定義函數(shù)修飾器用于聲明函數(shù)的某些特性,可減少代碼冗余。定義修飾器使用modifier關(guān)鍵字,語法為modifier修飾器名{條件體_;},其中_是占位符,用于插入函數(shù)體。修飾器分類不帶參數(shù)的修飾器如onlyOwner,用于限制函數(shù)調(diào)用者權(quán)限。帶參數(shù)的修飾器如checkValue,用于檢查函數(shù)參數(shù)是否滿足特定條件。函數(shù)修飾器概念使用修飾器時,在函數(shù)定義的參數(shù)列表后添加修飾器名稱。修飾器與函數(shù)可見性及可變性修飾符的位置無先后順序要求。使用方法例如functionchangeOwner(addressnewOwner)publiconlyOwner,只有合約的owner才能調(diào)用該函數(shù)修改owner。使用案例修飾器的使用特殊函數(shù)03PART構(gòu)造函數(shù)是合約部署時自動運行的函數(shù),用于初始化合約狀態(tài)變量。每個合約最多只能有一個構(gòu)造函數(shù),其名字為constructor,不能有function關(guān)鍵字,可見性必須是public或internal。構(gòu)造函數(shù)概念02構(gòu)造函數(shù)可以帶參數(shù)或不帶參數(shù)。帶參數(shù)的構(gòu)造函數(shù)在部署合約時,需在部署按鈕右側(cè)的輸入框中輸入?yún)?shù)值。構(gòu)造函數(shù)參數(shù)01構(gòu)造函數(shù)自毀函數(shù)概念自毀函數(shù)用于銷毀區(qū)塊鏈上部署的智能合約。執(zhí)行自毀函數(shù)后,合約賬戶中的余額會發(fā)送給指定的地址,合約中的狀態(tài)和功能訪問會失效。自毀函數(shù)使用自毀函數(shù)有固定的名稱selfdestruct和一個用于接收合約余額的賬戶地址參數(shù)。例如selfdestruct(owner)將合約余額轉(zhuǎn)賬給owner并銷毀合約。自毀函數(shù)函數(shù)重載04PARTSolidity中函數(shù)重載是指在一個合約中,允許定義多個具有相同名稱但參數(shù)列表不同的函數(shù)。參數(shù)列表包括參數(shù)類型、個數(shù)或順序必須不同。01重載定義函數(shù)重載常用于實現(xiàn)功能類似的函數(shù),使用相同的函數(shù)名,既減少了代碼的復(fù)雜性,也提高了程序的可讀性。02重載意義函數(shù)重載概念調(diào)用匹配在調(diào)用重載函數(shù)時,編譯器會把輸入的實際參數(shù)和函數(shù)參數(shù)的變量類型做匹配。如果出現(xiàn)多個匹配的重載函數(shù),則會報錯,需要明確指明是調(diào)用的哪個函數(shù)。匹配案例例如functionf(uint8a)和functionf(uinta)是重載函數(shù),調(diào)用f(10)會報錯,因為存在多個匹配函數(shù),需使用f(uint(10))顯式轉(zhuǎn)換參數(shù)類型來指明調(diào)用的函數(shù)。函數(shù)重載使用轉(zhuǎn)賬函數(shù)05PART轉(zhuǎn)賬定義轉(zhuǎn)賬是指向指定賬戶發(fā)送一定數(shù)量的以太,通過智能合約可以實現(xiàn)不同賬戶之間的轉(zhuǎn)賬操作。接收方如果是合約賬戶時,需要有payable類型的函數(shù)方可接收此轉(zhuǎn)賬。轉(zhuǎn)賬費用每筆交易都收取一定數(shù)量的Gas,目的是限制執(zhí)行交易所需要的工作量和為交易支付的手續(xù)費。轉(zhuǎn)賬概念receive()函數(shù)是合約默認用來接收轉(zhuǎn)賬的函數(shù),合約中最多只能有一個receive()函數(shù),其定義語法為receive()externalpayable{函數(shù)體},函數(shù)體中不能有修改狀態(tài)變量等消耗較多Gas的語句。receive()函數(shù)fallback()函數(shù)在receive()函數(shù)不存在時,會被調(diào)用來接收以太。其聲明語法為fallback()externalpayable{函數(shù)體},如果轉(zhuǎn)賬時msg.data不為空則調(diào)用fallback()函數(shù)。fallback()函數(shù)0201接收以太的函數(shù)send方法send方法發(fā)送以太的語法是接收地址.send(以太數(shù)),該函數(shù)返回轉(zhuǎn)賬是否成功的布爾量,轉(zhuǎn)賬出錯不會拋出異常,且費用消耗限制為不能超過2300個Gas。transfer方法transfer方法的語法是接收地址.transfer(以太數(shù)),轉(zhuǎn)賬出錯時會拋出異常,并且在本次交易中的修改都會回滾,因此transfer相比send使用起來更安全,同樣也有最多2300個Gas消耗的限制。call方法call方法的語法是接收地址.call{value:以太數(shù)}(附加數(shù)據(jù)),該函數(shù)有兩個返回值,第一個返回值為布爾類型,代表轉(zhuǎn)賬是否成功;第二個返回值為bytes類型,是接收方返回的消息數(shù)據(jù)。該方法沒有Gas限制。010203發(fā)送以太的函數(shù)加密與編碼函數(shù)06PART01Solidity中的加密函數(shù)使用了哈希算法,可以對輸入的任意長度的內(nèi)容進行加密,生成固定長度的加密數(shù)據(jù)。常用加密函數(shù)包括keccak256、sha256、ripemd160等。哈希算法02加密函數(shù)常用于數(shù)據(jù)驗證,將需要驗證的數(shù)據(jù)進行加密計算,將結(jié)果與正確數(shù)據(jù)的加密結(jié)果進行比較,從而判斷兩個數(shù)據(jù)是否一致。加密應(yīng)用加密函數(shù)在Solidity中,編碼是指將數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為字節(jié)流,以便在區(qū)塊鏈上進行存儲和傳輸。所有數(shù)據(jù)傳輸和操作都依賴于ABI編碼規(guī)則。編碼概念Solidity提供了abi.encode、abi.encodePacked、abi.encodeWithSignature、abi.encodeWithSelector等內(nèi)置函數(shù)用于處理編碼和解碼。編碼函數(shù)解碼是將字節(jié)流轉(zhuǎn)化為智能合約可以理解的原始數(shù)據(jù)類型的過程。Solidity中的解碼函數(shù)通常是abi.decode(),用于解碼abi.encode生成的二進制編碼。解碼函數(shù)編碼函數(shù)謝謝大家探索合約繼承與接口的使用抽象合約與接口02項目任務(wù)實踐04合約繼承基礎(chǔ)01Solidity庫03項目總結(jié)與展望05CATALOGUE目錄合約繼承基礎(chǔ)01PART010203繼承與派生定義繼承是子類擁有父類特性,派生是子類對父類特性的限制或擴展。Solidity中合約繼承類似Java、C++的類繼承,用于擴展合約功能。繼承的語法成員繼承規(guī)則Solidity中用is關(guān)鍵字表示繼承,支持單繼承和多繼承。單繼承是繼承單個合約,多繼承是繼承多個合約,需按先父后子順序排序。子合約自動繼承父合約的public及internal成員,包括方法和狀態(tài)變量,也繼承external函數(shù),但不繼承private成員。合約繼承的概念重寫的基本要求子合約中重寫父合約函數(shù)需與父合約函數(shù)名稱、參數(shù)列表、修飾符及返回值相同。solidity0.6.0后,父合約函數(shù)需用virtual修飾,子合約用override修飾。多繼承中的重寫多繼承時,若父合約有相同virtual函數(shù),子合約需重寫該函數(shù),調(diào)用時會調(diào)用繼承列表中最右邊父合約的函數(shù)。調(diào)用重載函數(shù)子合約中調(diào)用重載函數(shù)默認調(diào)用本合約函數(shù),調(diào)用父合約函數(shù)需用"super.函數(shù)名"或"父合約名稱.函數(shù)名"。函數(shù)重寫機制子合約實例化時,父合約構(gòu)造函數(shù)先被調(diào)用,再調(diào)用子合約構(gòu)造函數(shù)。父合約構(gòu)造函數(shù)有參數(shù)時,子合約需傳參。01構(gòu)造函數(shù)的調(diào)用順序父合約構(gòu)造函數(shù)參數(shù)可在is關(guān)鍵字時傳,也可在子合約構(gòu)造函數(shù)中傳。多繼承時,需給出所有父合約構(gòu)造函數(shù)參數(shù)。02參數(shù)傳遞方式構(gòu)造函數(shù)繼承修飾器的繼承父合約中的函數(shù)修飾器會被子合約繼承,子合約函數(shù)可使用父合約修飾器。修飾器的重寫子合約想覆蓋父合約修飾器功能,需在父合約中用virtual修飾,子合約中用override重寫。修飾器的繼承與重寫抽象合約與接口02PART抽象合約的定義抽象合約是特殊合約,含抽象函數(shù),無法被實例化或部署,通常作為父合約被繼承,需實現(xiàn)抽象函數(shù)。抽象合約定義接口規(guī)范,規(guī)定繼承合約需遵循的函數(shù)和事件,提高合約互操作性。抽象合約的作用抽象合約的語法抽象合約定義時用abstract關(guān)鍵字,抽象函數(shù)需有virtual關(guān)鍵字,派生合約實現(xiàn)時需加override關(guān)鍵字。抽象合約接口的定義接口合約類似抽象合約,但不能含已實現(xiàn)函數(shù),只能有external類型的未實現(xiàn)函數(shù),且默認是virtual類型。接口與抽象合約的區(qū)別抽象合約可含狀態(tài)變量和構(gòu)造函數(shù),接口不能;抽象合約可含已實現(xiàn)函數(shù),接口不能。接口的定義語法接口定義用interface關(guān)鍵字,可繼承其他接口,合約繼承接口需實現(xiàn)所有函數(shù),否則需聲明為抽象合約。通過接口調(diào)用合約對于已部署合約,可通過定義接口調(diào)用其外部函數(shù),即使不知道合約完整定義。01020304Solidity接口Solidity庫03PARTSolidity中的庫是特殊合約,為其他合約提供可復(fù)用代碼,促進代碼復(fù)用,減少冗余,降低Gas消耗。庫的作用01庫中不能有狀態(tài)變量,不能接收以太,不能繼承或被繼承,不能有構(gòu)造函數(shù),函數(shù)通常為internal類型。庫的限制02庫合約介紹庫的聲明與調(diào)用聲明庫用library關(guān)鍵字,調(diào)用庫函數(shù)可通過"庫名.函數(shù)名"或"using庫名for數(shù)據(jù)類型"兩種方式。庫函數(shù)的調(diào)用方式直接調(diào)用庫函數(shù)或通過數(shù)據(jù)類型調(diào)用庫函數(shù),需注意數(shù)據(jù)類型與庫函數(shù)參數(shù)匹配。庫的使用方法項目任務(wù)實踐04PART實現(xiàn)用戶管理接口合約,包含添加、刪除、獲取用戶列表等函數(shù),通過接口規(guī)范用戶管理功能。任務(wù)目的定義接口合約IUser,實現(xiàn)接口功能的IUserImpl合約,編寫測試合約UserTest,測試接口功能。任務(wù)步驟用戶管理接口任務(wù)目的編寫統(tǒng)計學生成績的庫合約,封裝數(shù)據(jù)處理和統(tǒng)計功能,提高代碼復(fù)用性。任務(wù)步驟定義庫合約ArrayLib,實現(xiàn)統(tǒng)計函數(shù)stat,編寫測試合約Test,調(diào)用庫函數(shù)進行數(shù)據(jù)統(tǒng)計。統(tǒng)計學生成績使用面向?qū)ο笏悸罚瑢钑芾硐到y(tǒng)進行封裝,提高代碼可維護性和復(fù)用性。任務(wù)目的新建庫BookLib,定義圖書管理合約BookMgr、讀者管理合約ReaderMgr,重寫借書管理合約BookManage,實現(xiàn)系統(tǒng)功能。任務(wù)步驟借書管理封裝項目總結(jié)與展望05PART項目成果學習了So

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論