區(qū)塊鏈之智能合約~PPT幻燈片.ppt_第1頁
區(qū)塊鏈之智能合約~PPT幻燈片.ppt_第2頁
區(qū)塊鏈之智能合約~PPT幻燈片.ppt_第3頁
區(qū)塊鏈之智能合約~PPT幻燈片.ppt_第4頁
區(qū)塊鏈之智能合約~PPT幻燈片.ppt_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、PPT模板: PPT素材: PPT背景: PPT圖表: PPT下載: PPT教程: 資料下載: 范文下載: 試卷下載: 教案下載: PPT論壇: PPT課件: 語文課件: 數(shù)學(xué)課件: 英語課件: 美術(shù)課件: 科學(xué)課件: 物理課件: 化學(xué)課件: 生物課件: 地理課件: 歷史課件:,Part 1,Part 2,Part 3,Part 4,內(nèi)容,以太坊,Demo演示,智能合約,Solidity,1,2020/9/25,以太坊,2,2020/9/25,比特幣的腳本的缺點,不支持循環(huán)語句,缺少圖靈完備,UTXO不可分割,價值盲,UTXO智能是已花費 或未花費,缺少狀態(tài),比特幣 的腳本 局限性,內(nèi)置有圖靈

2、完備編程語言,以太坊,3,2020/9/25,以太坊介紹,以太坊通過建立終極的抽象的基礎(chǔ)層-內(nèi)置有圖靈完備編程語言的區(qū)塊鏈-使得任何人都能夠創(chuàng)建合約和去中心化應(yīng)用,并在其中設(shè)立他們自由定義的所有權(quán)規(guī)則、交易方式和狀態(tài)轉(zhuǎn)換函數(shù)。,以太坊虛擬機(EVM)是以太坊中智能合約的運行環(huán)境。它不僅被沙箱封裝起來,事實上它被完全隔離,也就是說運行在EVM內(nèi)部的代碼不能接觸到網(wǎng)絡(luò)、文件系統(tǒng)或者其它進程。甚至智能合約與其它智能合約只有有限的接觸。,4,2020/9/25,以太坊賬戶,用戶用公鑰、私鑰控制,由合約編譯后的code控制,合約賬戶,外部賬戶,相同的地址空間 相同的數(shù)據(jù)結(jié)構(gòu) 不同的功能,包含四個部分:

3、隨機數(shù),用于確定每筆交易只能被處理一次的計數(shù)器,參與生成交易的id 賬戶目前的以太幣余額,以太幣(Ether)是以太坊內(nèi)部的主要加密燃料,用于支付交易費用。 以太幣的最小單位為Wei, 最大單位為以太,1 Ether=1018Wei 賬戶的合約代碼,如果有的話 賬戶的存儲(默認(rèn)為空),5,2020/9/25,交易,交易包含以下內(nèi)容: 消息的接收者地址 用于確認(rèn)發(fā)送者的簽名 要發(fā)送的以太幣的數(shù)量 可選的數(shù)據(jù)(合約的參數(shù)) STARTGAS: 用來限制合約最多執(zhí)行多少次運算 GASPRICE: 每次計算需要支付的費用,每5個Byte需要1個Gas,防止死循環(huán) 交易費用= STARTGAS* GAS

4、PRICE,對計算資源、存儲資源、帶寬的消耗都用Gas支付,外部賬戶,發(fā)送交易,6,2020/9/25,消息,消息包含五個部分: 消息的發(fā)送者 消息的接受者 要發(fā)送的以太幣的數(shù)量 可選的數(shù)據(jù)(合約的參數(shù)) STARTGAS: 用來限制合約最多執(zhí)行多少次運算,調(diào)用合約的 CALL方法時 隱式生成,7,2020/9/25,以太坊狀態(tài)轉(zhuǎn)移,8,2020/9/25,以太坊的狀態(tài)轉(zhuǎn)換函數(shù):APPLY(S,TX) - S,可以定義如下: 1. 檢查交易的格式是否正確(即有正確數(shù)值)、簽名是否有效和隨機數(shù)是否與發(fā)送者賬戶的隨機數(shù)匹配。如否,返回錯誤。 2. 計算交易費用:fee=STARTGAS * GAS

5、PRICE,并從簽名中確定發(fā)送者的地址。從發(fā)送者的賬戶中減去交易費用和增加發(fā)送者的隨機數(shù)。如果賬戶余額不足,返回錯誤。 3. 設(shè)定初值GAS = STARTGAS,并根據(jù)交易中的字節(jié)數(shù)減去一定量的燃料值。 4. 從發(fā)送者的賬戶轉(zhuǎn)移價值到接收者賬戶。如果接收賬戶還不存在,創(chuàng)建此賬戶。如果接收賬戶是一個合約,運行合約的代碼,直到代碼運行結(jié)束或者燃料用完。 5. 如果因為發(fā)送者賬戶足夠的錢或者代碼執(zhí)行耗盡燃料導(dǎo)致價值轉(zhuǎn)移失敗,生成out-of-gas異常,恢復(fù)原來的狀態(tài),但是還需要支沒有付交易費用,交易費用加至礦工賬戶。 6. 否則,將所有剩余的燃料歸還給發(fā)送者,消耗掉的燃料作為交易費用發(fā)送給礦工。

6、,以太坊狀態(tài)轉(zhuǎn)移函數(shù),9,2020/9/25,以太坊有Go語言、C+語言、Python語言的版本。,以太坊實現(xiàn)版本,10,2020/9/25,Etherscan,以太坊區(qū)塊在線瀏覽,https:/etherscan.io/,11,2020/9/25,以太坊的問題,挖礦機制,高耗能,每秒1020筆交易,并發(fā)處理能力差,完全公開,隱私性,交易費用,小額交易成本高,以太坊在不斷的改進中,很多機制可能會改變。,12,2020/9/25,Part 2,智能合約,13,2020/9/25,智能合約的定義,Smart contracts are pieces of code that live on the

7、 blockchain and execute commands exactly how the were told to. 智能合約就是存儲在區(qū)塊鏈上的代碼,用以實現(xiàn)執(zhí)行特定的功能。,“智能合約”- 根據(jù)事先任意制訂的規(guī)則來自動轉(zhuǎn)移數(shù)字資產(chǎn)的系統(tǒng)。,業(yè)務(wù)人員,開發(fā)人員,14,2020/9/25,智能合約使用步驟,編譯合約,部署合約,調(diào)用合約,監(jiān)聽合約,銷毀合約,創(chuàng)建合約,15,2020/9/25,編譯合約,備注:本節(jié)中的所有例子以在Go語言的客戶端geth中的操作為例,var greeterSource = contract greeter is mortal string greeting

8、; .return greeting; var greeterCompiled = pile.solidity(greeterSource),contract greeter is mortal /繼承mortal string greeting; function greeter(string _greeting) public greeting = _greeting; function greet() constant returns (string) return greeting; ,智能合約 hello word,16,2020/9/25,創(chuàng)建合約,備注:本節(jié)中的所有例子以在Go語

9、言的客戶端geth中的操作為例,var greeterContract = web3.eth.contract(greeterCompiled:.abiDefinition);,abiDefinition是合約的接口說明 老版本中是 greeterC. abiDefinition 新版本(geth-1.5.9)中是 greeterCompiled:greeter. info.abiDefinition,17,2020/9/25,部署合約,var greeter = greeterContract.new(_greeting, fr

10、om: eth.accounts0, data: greeterCompiled:greeter.code, gas: 1000000, function(e, contract) if(!e) if(!contract.address) console.log(Contract transaction send: TransactionHash: + contract.transactionHash + waiting to be mined.); else console.log(Contract mined! Address: + contract.address); console.l

11、og(contract); ),部署合約的時候,需要支付費用,需要用戶輸入密碼,先執(zhí)行 personal.unlockAccount(eth.accounts0);,日志,18,2020/9/25,調(diào)用合約,合約部署的Transaction被礦工挖礦之后,可以調(diào)用該合約。,greeter.greet(),合約部署的Transaction被礦工挖礦之后,可以查看該合約的地址。,eth.getCode(greeter.address) ),19,2020/9/25,其它的機器調(diào)用合約,其它的機器上沒有g(shù)reeter對象,需要根據(jù)合約的地址和abiDefinition來創(chuàng)建,然后調(diào)用。,var gr

12、eeter2 = eth.contract(constant:false,inputs:,name:kill,outputs:,type:function,constant:true,inputs:,name:greet,outputs:name:,type:string,type:function,inputs:name:_greeting,type:string,type:constructor).at(0 xcde7cfdf234dfa63ba4d7c273a); greeter2.greet();,20,2020/9/25,監(jiān)聽合約,合約部署后,可設(shè)置監(jiān)聽,21,2020/9/25,銷

13、毀合約,只有擁有者才能銷毀合約 msg存在于上下文中,不是參數(shù)中,22,2020/9/25,合約使用場景,對沖合約、儲蓄錢包、遺囑等,金融類場景,在線投票、去中心化治理、域名注冊,非金融類場景,23,2020/9/25,APPS(去中心化的應(yīng)用),24,2020/9/25,APPS,25,2020/9/25,26,2020/9/25,Solidity語言,27,2020/9/25,數(shù)據(jù)類型,Data location Arrays Structs,引用類型,Mappings mapping(_KeyType=_ValueType)不能遍歷keys和values,boolean, int/uin

14、t,byte, string, enum Int8int256 bytes1,bytes2,bytes32 function, fixed point numbers,基本類型,20個字節(jié),主要方法:balance、transfer、send、 call、delegatecall、 callcode,address,28,2020/9/25,流程控制 和 函數(shù),支持大部分javascript的邏輯控制,包括if,else,while,do,for,break,continue,return,?: 但是不支持switch 和 goto,function 函數(shù)名(參數(shù)) 權(quán)限控制符 returns

15、 (返回值,可以有多個),function Register(uint initialPrice) price=initialPrice; function utterance() returns (bytes32) return miaow; function getData() public returns(uint) return data; ,29,2020/9/25,合約與面向?qū)ο缶幊讨械念惙浅O嗨?。合約由變量、函數(shù)、函數(shù)修飾符、事件、struct結(jié)構(gòu)體、枚舉類型構(gòu)成。合約也可以繼承。,30,2020/9/25,可見性: public, private, internal, exte

16、rnal。其中public和private用于決定是否可以通過對象直接調(diào)用。 internal和external用于決定是否其它的合約可以調(diào)用。 另外constant關(guān)鍵詞,可以用于修飾常量和常函數(shù)。,31,2020/9/25,以太坊通過Logs實現(xiàn)Events(事件)功能。 日志內(nèi)容是交易收據(jù)(Transaction Receipts)的一部分,整個日志內(nèi)容,包括Receipts的其它內(nèi)容會生成一個ReceiptsRoot存儲在區(qū)塊的頭部。 日志永遠存在。 通過設(shè)置一些過濾條件,來獲取某些特定的事件??梢杂糜谧匪莺霞s的歷史狀態(tài),設(shè)置檢查點等。,event Deposit( address i

17、ndexed _from, bytes32 indexed _id, uint _value );,32,2020/9/25,抽象合約,接口,contract Final is Base2, Base1 ,繼承的關(guān)鍵字是is,支持多重繼承。,33,2020/9/25,34,2020/9/25,IDE,/#version=soljson-v0.4.10+commit.f0d539ae.js,Onlie,編譯器是solc,35,2020/9/25,Demo演示,36,2020/9/25,區(qū)塊鏈初始化,為賬戶分配以太幣, “nonce”: “0 x0

18、000000000000042”, mixhash: 0 x00000000000000000000000000000000000000000000000000000000, difficulty: 0 x4000, /難度值,決定塊生成的速度 alloc: 0 x09c7b615a1c5b3016ff6b521723364aa9382ec6e: “balance”: “10000000000000000000” , /10個以太幣 coinbase: 0 x0000000000000000000000000000000000000000, timestamp: 0 x00, parentHash: 0 x00000000000000000000000000000000000000000000000000000000, extraData: Custem Ethereum Genesis Block, gasLimit: 0 xffffffff ,genesis.json,編輯genesis.json,geth -datadir eth-data -networkid 123 -nodiscover c

溫馨提示

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

評論

0/150

提交評論