區(qū)塊鏈原理與應(yīng)用-數(shù)字經(jīng)濟(jì)的視角 課件3-2.去中心化應(yīng)用開發(fā)_第1頁
區(qū)塊鏈原理與應(yīng)用-數(shù)字經(jīng)濟(jì)的視角 課件3-2.去中心化應(yīng)用開發(fā)_第2頁
區(qū)塊鏈原理與應(yīng)用-數(shù)字經(jīng)濟(jì)的視角 課件3-2.去中心化應(yīng)用開發(fā)_第3頁
區(qū)塊鏈原理與應(yīng)用-數(shù)字經(jīng)濟(jì)的視角 課件3-2.去中心化應(yīng)用開發(fā)_第4頁
區(qū)塊鏈原理與應(yīng)用-數(shù)字經(jīng)濟(jì)的視角 課件3-2.去中心化應(yīng)用開發(fā)_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

去中心化應(yīng)用開發(fā)以太坊簡介及web3技術(shù)架構(gòu)傳統(tǒng)的互聯(lián)網(wǎng)客戶端/服務(wù)端架構(gòu)(C/S架構(gòu))去中心化應(yīng)用(DApp)合約實(shí)例以太坊的智能合約是“圖靈完備”的,這意味著理論上我們可以使用它來編寫執(zhí)行任何任務(wù)的程序。目前,智能合約的兩個主要編程語言是Solidity和Vyper,其中Solidity更為成熟。在Solidity語言中,pragmasolidity^0.8.0;是一個指令,用來指定智能合約編譯所需的Solidity編譯器的版本。這個指令對合約的編譯和部署非常重要,因?yàn)椴煌姹镜木幾g器之間可能存在兼容性問題。pragma關(guān)鍵字用于給編譯器一些特定的編譯指令。solidity指的是這個指令是針對Solidity語言的。^0.8.0表示這個合約需要Solidity版本0.8.0或更高版本,但不能是0.9.0或更高版本。這種寫法稱為“升級運(yùn)算符(caretoperator)”,它允許編譯器使用任何0.8.x版本,其中x表示這個系列中的任何次要版本,只要這些版本沒有引入破壞性更改。contractCounter{...}這定義了一個名為Counter的新智能合約。在Solidity中,合約類似于面向?qū)ο缶幊讨械念悾藸顟B(tài)變量、函數(shù)等組件。

狀態(tài)變量uintcounter;uint是無符號整數(shù)的類型,意味著這個變量不能存儲負(fù)數(shù)。counter是一個狀態(tài)變量,存儲在合約的存儲中,代表了合約的狀態(tài)之一。在這個合約中,它用來記錄被count()函數(shù)增加的次數(shù)。構(gòu)造函數(shù)constructor(){...}constructor()是一個特殊的函數(shù),只在合約被部署到區(qū)塊鏈上時執(zhí)行一次。在這個構(gòu)造函數(shù)中,counter被初始化為0。這意味著在合約部署時,計(jì)數(shù)從0開始。函數(shù)functioncount()public{...}functioncount()定義了一個名為count的函數(shù),可以被外部調(diào)用(因?yàn)樗粯?biāo)記為public)。函數(shù)的功能是將counter狀態(tài)變量的值增加1。每次調(diào)用這個函數(shù),存儲在counter中的數(shù)就會增加。合約實(shí)例賬戶(1)外部用戶賬戶(EOAs)——該類賬戶由公鑰-私鑰對控制(由人控制)。(2)合約賬戶(CA:ContractAccount)——該類賬戶由存儲在賬戶中的代碼控制。外部用戶賬戶和合約賬戶,它們都使用相同的地址格式來表示,在EVM層面是一樣的,地址格式為:0xea674fdde714fd979de3edf0f56aa9716b898ec8,是一個20字節(jié)的16進(jìn)制數(shù)(以太坊合約的地址是根據(jù)創(chuàng)建者(sender)的地址以及創(chuàng)建者發(fā)送過的交易數(shù)量(nonce)來計(jì)算確定的。sender和nonce進(jìn)行RLP編碼,然后用Keccak-256進(jìn)行hash計(jì)算。)只有外部用戶賬戶可以發(fā)起交易(主動行為),而合約賬戶只能被動地響應(yīng)操作,并且所有的手續(xù)費(fèi)(Gas)必須由外部賬戶支付。賬戶交易左邊兩個帶有鑰匙圖標(biāo)的藍(lán)色框代表外部擁有賬戶(EOA)。這些賬戶由私鑰控制,通常代表用戶或者是以太坊網(wǎng)絡(luò)上的參與者。中間和右邊的黃色框代表合約賬戶(CA)。合約賬戶包含代碼(如圖中的<code>標(biāo)簽所示),這些代碼定義了合約的行為。上方的綠色箭頭表示外部擁有賬戶可以向合約賬戶發(fā)送交易并支付Gas費(fèi)用。Gas是以太坊網(wǎng)絡(luò)執(zhí)行交易和合約操作所需的計(jì)算資源費(fèi)用。合約賬戶不能主動發(fā)起交易,但是它們可以作為外部賬戶交易的結(jié)果而執(zhí)行其代碼。這通常發(fā)生在一個EOA發(fā)送交易到CA時,CA中的代碼會被觸發(fā)執(zhí)行。最右邊的兩個合約賬戶框顯示了合約可以互相交互。一個合約賬戶可以調(diào)用另一個合約賬戶的代碼。以太幣?以太幣是一種貨幣,不同單位的貨幣就像法幣中的不同面額,對于用戶來說,最常用的單位是ether,1個ether通常也簡稱為以太。而對于開發(fā)者來說,可能更常使用wei,它是以太幣的最小單位,其他單位包括finney和szabo,此外,wei還有幾個衍生單位,包括Kwei、Mwei和Gwei。它們之間的換算關(guān)系如下:1ether=10^3finney(即1000finney)

1ether=10^6szabo

1ether=10^18wei

1Gwei=10^9wei

1Mwei=10^6wei

以太幣的單位命名方式非常有趣,以太坊社區(qū)為了紀(jì)念密碼學(xué)家的貢獻(xiàn),使用了密碼學(xué)家的名字作為貨幣單位,類似于許多國家的貨幣上印有國家的杰出人物頭像一樣。wei的名稱來源于WeiDai(戴偉),他是一位密碼學(xué)家,提出了B-money。finney的名稱來自于HalFinney(哈爾·芬尼),他是一位密碼學(xué)家,提出了工作量證明機(jī)制(PoW)。szabo的名稱來自于NickSzabo(尼克·薩博),他是一位密碼學(xué)家,智能合約的概念提出者。以太坊虛擬機(jī)(EVM)EVM(以太坊虛擬機(jī))是一種虛擬計(jì)算機(jī),用于執(zhí)行以太坊區(qū)塊鏈上的智能合約和去中心化應(yīng)用程序。EVM是以太坊的核心組件之一,它負(fù)責(zé)處理和執(zhí)行智能合約的代碼。EVM的工作原理與傳統(tǒng)的計(jì)算機(jī)虛擬機(jī)類似,但它是專門為區(qū)塊鏈和智能合約而設(shè)計(jì)的。智能合約是以太坊上的自動化合同,其代碼在EVM上運(yùn)行,并且可以執(zhí)行各種任務(wù),例如轉(zhuǎn)移加密貨幣資金、管理數(shù)字資產(chǎn)、實(shí)施投票機(jī)制等。EVM執(zhí)行智能合約時,會將智能合約的字節(jié)碼加載到內(nèi)存中,然后按照預(yù)定的規(guī)則執(zhí)行該字節(jié)碼。EVM提供了一種安全的執(zhí)行環(huán)境,以確保合約的正確執(zhí)行,同時還實(shí)施了燃?xì)猓℅as)的概念,以防止惡意代碼無限循環(huán)或耗盡計(jì)算資源。錢包錢包是管理賬戶的重要工具,用戶可以使用錢包創(chuàng)建賬戶、進(jìn)行交易簽名,并在需要時連接到區(qū)塊鏈節(jié)點(diǎn)來執(zhí)行交易。需要注意的是,錢包本身并不存儲用戶的資產(chǎn),而是管理訪問這些資產(chǎn)的密鑰和簽名功能。常見的移動端錢包包括ImToken、TrustWallet等,它們適用于一般用戶,提供了便捷的方式來管理加密資產(chǎn)。MetaMask是一個瀏覽器插件,支持多種主流瀏覽器,如Chrome、Firefox和Opera。它不僅可以用于管理賬戶,還可以用于部署和執(zhí)行智能合約。開發(fā)者通常使用MetaMask與RemixIDE等工具結(jié)合使用,以便更輕松地開發(fā)和測試智能合約。Gas機(jī)制在以太坊上,智能合約的“圖靈完備性”允許編寫執(zhí)行各種任務(wù)的程序。然而,為了防止惡意行為,以太坊引入了Gas機(jī)制,它是一種衡量執(zhí)行操作所需工作量的單位。Gas價格(Gasprice)是Gas機(jī)制中的一個關(guān)鍵概念。每筆交易需要指定Gas預(yù)算(Gaslimit)和愿意支付的Gas價格。Gas預(yù)算乘以Gas價格等于交易費(fèi)用。如果Gas預(yù)算不足以覆蓋實(shí)際Gas消耗,交易將失敗,狀態(tài)更改會被回滾。另一個要注意的是,如果交易執(zhí)行結(jié)束后還有剩余Gas,剩余Gas會退還給發(fā)起交易的賬戶。這使得Gas機(jī)制更加靈活,用戶可以根據(jù)需求調(diào)整Gas價格和Gas預(yù)算。Gas機(jī)制是以太坊的重要特性,它確保了網(wǎng)絡(luò)的穩(wěn)定性和安全性,同時也為礦工提供了適當(dāng)?shù)募顏韴?zhí)行交易和合約。以太坊交易普通交易:用于向其他地址轉(zhuǎn)移以太幣。創(chuàng)建合約:用于在區(qū)塊鏈上創(chuàng)建智能合約。這種交易類型的to字段為空,data字段包含智能合約的字節(jié)碼。調(diào)用合約函數(shù):用于調(diào)用已部署的智能合約的函數(shù)。這種交易類型的to字段包含目標(biāo)合約地址,data字段包含函數(shù)名稱和參數(shù)。以太坊交易TheMerge階段:已經(jīng)完成。TheSurge階段:推動以Rollup為中心的擴(kuò)容,將使得rollup的開銷降低。TheVerge階段:引入Verkle樹,優(yōu)化數(shù)據(jù)存儲及驗(yàn)證。ThePurge階段:清理數(shù)據(jù)、簡化存儲,降低驗(yàn)證者硬盤空間性能要求。TheSplurge階段:進(jìn)行EVM改進(jìn)及全面引入零知識證明合約開發(fā)工具M(jìn)etaMask錢包MetaMask安裝及使用/m0_73094011/article/details/135854126MetaMask安裝推薦使用Edge瀏覽器或者Firefox瀏覽器(以Edge瀏覽器為樣說明)1、地址欄中輸入:edge://extensions/2、點(diǎn)擊左側(cè)GetextensionforMicrosoftEdge(從Edge中獲取更多擴(kuò)展)MetaMask安裝3、輸入matemask搜索4、GetMetaMaskMetaMask用戶注冊和恢復(fù)5、選擇新建錢包或恢復(fù)錢包6、選擇測試網(wǎng)絡(luò)Goerli或Sepolia7、搜集一定的測試代幣(水龍頭、開挖、找別要)RemixIDE/RemixIDERemix可幫助我們直接在瀏覽器中編寫Solidity代碼,并提供用于測試、調(diào)試和將智能合約部署到區(qū)塊鏈的工具。除此之外,Remix還提供:代碼提示補(bǔ)全,代碼高亮代碼警告、錯誤提示運(yùn)行日志輸出代碼調(diào)試Remix開箱即用,你可以打開Remix網(wǎng)站:/

,進(jìn)入到RemixIDE:Remix使用官網(wǎng):https://remix.ethereum.or最左側(cè)功能切換:不同圖標(biāo)對應(yīng)不同的功能,選中不同的功能,功能操作也會跟隨變化功能操作:各種功能展示與使用文件編輯:代碼編輯的地方控制臺/日志區(qū):顯示與合約交互的結(jié)果,也可以輸入命令。Solidity是一門編譯型高級語言,需要經(jīng)過編譯、部署才能運(yùn)行。Remix中使用solidity需求訪談編寫程序編譯程序部署程序調(diào)用程序新建合約既可以新建文件、也可以從本機(jī)或GitHub加載文件,這里我們新建一個counter.sol合約。合約代碼編寫這是一個簡單的計(jì)數(shù)器合約,這個智能合約的作用是在區(qū)塊鏈上存儲一個計(jì)數(shù)器變量counter,counter值將會被永久保存在區(qū)塊鏈上。count()函數(shù)讓計(jì)數(shù)器加1,get()函數(shù)用來獲取計(jì)數(shù)器值。智能合約不要要編寫入口方法(如main方法),每一個函數(shù)都可以被單獨(dú)調(diào)用。編譯器會幫助合約生成main入口函數(shù),EVM在入口函數(shù)里用函數(shù)選擇器去匹配調(diào)用的函數(shù)。當(dāng)處于文件編輯功能時,功能操作區(qū)域顯示的是文件瀏覽器,我們選中counter.sol文件,在右側(cè)文件編輯區(qū)域輸入在上一節(jié)認(rèn)識以太坊的Counter合約代碼合約代碼編寫合約編譯ABI是ApplicationBinaryInterface,即應(yīng)用程序二進(jìn)制接口,ABI用來描述當(dāng)前合約的所有接口,當(dāng)我們與合約交互時,就需要使用ABI。Bytecode是部署合約所需的字節(jié)碼(也稱為創(chuàng)建時字節(jié)碼),部署合約時,就是把該字節(jié)碼作為交易的輸入數(shù)據(jù)發(fā)送鏈上。我們也可以勾選上自動編譯,這樣代碼編輯時,會自動編譯,合約編譯成功后,會輸出:ABI(合約接口描述)和Bytecode字節(jié)碼。ABI應(yīng)用二進(jìn)制接口ABI應(yīng)用二進(jìn)制接口ABI

(ApplicationBinaryInterfaces),則是用來定義了智能合約中可以進(jìn)行交互的方法、事件和錯誤,類似可以把ABI理解為與EVM進(jìn)行交互的橋梁。EVM是以太坊虛擬機(jī),和其他的機(jī)器一樣,他們無法執(zhí)行人類可讀代碼的,只能夠識別和運(yùn)行二進(jìn)制數(shù)據(jù),這是一串由0和1所組成的數(shù)據(jù)流。因此在調(diào)用函數(shù)時,需要借助ABI,把人類可讀函數(shù)轉(zhuǎn)化為EVM可讀的字節(jié)碼。在Solidity中,我們編譯代碼以后,會得到兩個重要東西(稱為artifact):bytecode(字節(jié)碼)和ABI接口描述。ABI應(yīng)用二進(jìn)制接口合約部署在本地的開發(fā)者網(wǎng)絡(luò)(模擬網(wǎng)絡(luò))進(jìn)行部署,測試及驗(yàn)證代碼邏輯的正確性在測試網(wǎng)絡(luò)進(jìn)行灰度發(fā)布一切OK后部署在主網(wǎng)Remix提供模擬網(wǎng)絡(luò)環(huán)境,也可以通過Metamask連接到真實(shí)的區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行部署,可以通過如下圖方式選擇不同的環(huán)境:部署到VM環(huán)境(ENVIRONMENT)一欄

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論