




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
區塊鏈技術概述
2017年五月1區塊鏈技術概述
2017年五月1區塊鏈技術概述
2017年五月1區塊鏈技術概述
2017年五12區塊鏈技術介紹
OBC組網與智能合約3智能合約的開發與示例212區塊鏈技術介紹OBC組網與智能合約3智能合約的開發12區塊鏈技術介紹OBC組網與智能合約3智能合約的開發3”繼互聯網后的又一大變革時代到來”、“互聯網金融的終極形式”、“價值互聯網的開端”、“RecordofThings記錄一切”……
區塊鏈在短短時間內獲得了巨大的漣漪效應,IBM在2016年2月開放了OpenBlockChain技術并貢獻給了Linux社區,引起了業界巨大轟動。那么區塊鏈到底是怎樣的一項顛覆性技術?其特點是什么?IBM區塊鏈平臺的特點是什么?未來會如何演變?區塊鏈應用與已有應用的關系是什么?本片將對這些問題逐一解鏈并進行探討。序3”繼互聯網后的又一大變革時代到來”、“互聯網金融的終極形式3”繼互聯網后的又一大變革時代到來”、“互聯網金融的終極形式4區塊鏈介紹區塊鏈是一種共享賬本技術,商業網絡中的任何參與方都可以查看交易系統記錄(賬本)什么是區塊鏈?4區塊鏈介紹區塊鏈是一種共享賬本技術,商業網絡中的任何參與4區塊鏈介紹區塊鏈是一種共享賬本技術,商業網絡中的任何參與5區塊鏈是支撐比特幣的底層關鍵技術區塊鏈技術的分類?公有鏈Pow/Pos/DPos聯盟鏈OBC/Etherenumpbft共識私有鏈5區塊鏈是支撐比特幣的底層關鍵技術區塊鏈技術的分類?公有鏈聯5區塊鏈是支撐比特幣的底層關鍵技術區塊鏈技術的分類?公有鏈聯6
是不受監管的,抗審查的影子貨幣區塊鏈確?!邦惉F金”的貨幣流通唯一的,
不可篡改確定的是區塊鏈首個應用區塊鏈
不是區塊鏈是支撐比特幣的底層關鍵技術什么是區塊鏈?6是不受監管的,抗審查的6是不受監管的,抗審查的7更進一步——什么是(企業級)區塊鏈智能合約隱私保護共享賬本共識保證共享賬本適當的可見性;保證交易是真實和可驗證的交易條款和交易狀態內嵌在區塊鏈系統中,驅動交易執行所有參與者一致同意才意味著交易在網絡中通過驗證跨商業網絡共享的,不可更改的,分布式交易記錄系統更廣泛的參與,更低的成本,更高的效率什么是區塊鏈? 區塊鏈是一種分布式多節點“共識”實現技術,通過區塊鏈可以完整、“不可篡改”地記錄價值轉移(交易)的全過程。區塊鏈的形成按照時間先后順序進行連接,每一個參與共識形成的節點都有一份區塊鏈信息的完整副本。7更進一步——什么是(企業級)區塊鏈智能合約隱私保護共享賬本7更進一步——什么是(企業級)區塊鏈智能合約隱私保護共享賬本8比特幣帳本什么是區塊鏈?8比特幣帳本什么是區塊鏈?8比特幣帳本什么是區塊鏈?8比特幣帳本什么是區塊鏈?9OBC帳本什么是區塊鏈?9OBC帳本什么是區塊鏈?9OBC帳本什么是區塊鏈?9OBC帳本什么是區塊鏈?10共享賬本記錄商業網絡中的所有交易在參與者之間共享參與者通過同步獲取自己的備份授權許可的,參與者只能看到適當的交易記錄信息共享的記錄系統什么是區塊鏈?10共享賬本記錄商業網絡中的所有交易什么是區塊鏈?10共享賬本記錄商業網絡中的所有交易什么是區塊鏈?10共享賬11智能合約合約中的商業規則內嵌在區塊鏈系統中,在交易時被執行可驗證的、被簽署的編碼在編程語言中案例: –在公司債權發生轉移時執行定義的合同條款什么是區塊鏈?11智能合約合約中的商業規則內嵌在區塊鏈系統中,在交易時被執11智能合約合約中的商業規則內嵌在區塊鏈系統中,在交易時被執12隱私保護賬本是共享的,但是參與者要求其具有隱私保護參與者需要: –交易信息需要保密 –身份不和交易綁定交易必須是真實的密碼學是這些步驟的核心什么是區塊鏈?12隱私保護賬本是共享的,但是參與者要求其具有隱私保護什么是12隱私保護賬本是共享的,但是參與者要求其具有隱私保護什么是13共識共識是交易驗證與確認的過程當參與方是匿名時 –交易確認代價高昂 –的挖礦過程為匿名者提供驗證,但需巨大計算成本(工作證明)當參與者都是已知且可信時 –交易確認的成本降低多種替代方案 –權益證明,欺詐性交易產生時需要驗證(如債券交易) –多個簽名(如5個參與者中3人的同意)企業級區塊鏈需要“可插拔的”共識什么是區塊鏈?13共識共識是交易驗證與確認的過程什么是區塊鏈?13共識共識是交易驗證與確認的過程什么是區塊鏈?13共識共識14行業采用區塊鏈的好處減少成本及復雜度提高可發現性可信的記錄保存共享的可信流程為什么與業務相關?14行業采用區塊鏈的好處減少成本及復雜度可信的記錄保存為什么14行業采用區塊鏈的好處減少成本及復雜度可信的記錄保存為什么15區塊鏈——并非萬能不適用場景1.高性能(毫秒級)交易2.小型組織(無商業網絡)3.尋找數據庫的替代方案4.尋找消息傳遞的解決方案5.尋找交易處理的替代方案為什么與業務相關?15區塊鏈——并非萬能不適用場景為什么與業務相關?15區塊鏈——并非萬能不適用場景為什么與業務相關?15區塊鏈16區塊鏈技術平臺對比16區塊鏈技術平臺對比16區塊鏈技術平臺對比16區塊鏈技術平臺對比第一,跨組織協作。在區塊鏈信任機制中,所有成員參與對信任價值的監督、控制和審計,對地址、鏈、公鑰、私鑰、摘要等幾乎所有數據記錄的要素,進行全生命周期的協作密碼保護,而且是全球、隨機的。一個聯盟鏈,相當于一臺全球超級密碼、交換機、密鑰簽名服務器和密碼本的總和,信用連續。第二,永不宕機。因為成員的動態運算機制,所有成員節點,進行實時同步,無法實現局部控制,全球節點的隨機分布和相應在運算時鐘和動態時間戳的控制下,永遠不停機,信用連續。第三,成員監管。區塊鏈強信任的技術特點,來自其節點成員無中心的安全職責,成員局部的協作綜合實現了體系安全的監管全部,融監管與過程之中,實現了系統學中安全的正反饋機制,在目前的計算條件下,尚無法通過跨越動態時間戳的可靠超越,信用連續。為何要用區塊鏈—強信任機制解決中心化系統中信用不連續問題17第一,跨組織協作。在區塊鏈信任機制中,所有成員參與對信任價值第一,跨組織協作。在區塊鏈信任機制中,所有成員參與對信任價值18區塊鏈運營對比18區塊鏈運營對比18區塊鏈運營對比18區塊鏈運營對比19IBM開放區塊鏈與Linux社區——開放持續投入代碼運行環境賬簿數據結構模塊化(可插式)共識框架模塊化(可插式)身份服務P2P網絡技術升級包SDK(API)共識算法庫(插入模塊)成員管理策略區塊鏈網關開發工具管理控制臺區塊鏈行業應用基礎部分共享賬簿(SharedLedger)增值部分(模塊、工具、封裝)應用部分項目核心范圍內核心APIIBM社區貢獻Hyperledger項目IBM在Blockchain上持續投入,致力于行業應用是Linux開源社區Hyperledger的主要貢獻方,致力于協同其他公司共同研發,公布OpenLedger標準(規格說明書),創建基于Linux的開源共享賬簿(比Bitcoin更適合行業應用)推動區塊鏈技術在行業中的應用(行業區塊鏈)Blockchain已經作為一種實驗性(網絡)服務在Bluemix上推出基于LinuxOne的開放計算平臺對Blockchain的支持……IBM區塊鏈19IBM開放區塊鏈與Linux社區——開放持續投入代碼運行19IBM開放區塊鏈與Linux社區——開放持續投入代碼運行20IBM開放區塊鏈:貢獻給Linux社區的架構及代碼Community+CodeMEMBERSHIP包括OBC參與方的身份識別,隱私,可審計性。BLOCKCHAIN|TRANSACTIONS經過共識過程進行分布式交易賬本處理。CHAIN-CODE“智能合約”,提供在區塊鏈上運行業務邏輯的能力。APIs,SDKs,CLI為開發人員提供以可編程方式控制區塊鏈網絡的能力。20IBM開放區塊鏈:貢獻給Linux社區的架構及代碼C20IBM開放區塊鏈:貢獻給Linux社區的架構及代碼C21IBM開放區塊鏈名詞解釋Transaction交易。賬頁中的一筆記錄,用于確認一個事實,執行一段代碼(chaincode)Ledger賬?。ㄙ~冊)。由首尾相連的一組區塊(block,有時也稱為一個賬頁)構成,記錄交易和區塊世界的狀態WorldState區塊世界的狀態。由一組變量組成,指明交易的執行結果Chaincode交易中記錄的一段代碼,其執行結果會改變區塊世界的狀態(Worldstate)ValidatingPeer驗證節點。OBC區域鏈網絡中的全功能節點,負責驗證交易、記錄賬薄、達成共識Non-validatingPeer非驗證節點。OBC區域鏈網絡中的半功能節點,負責驗證交易,但不執行交易,也不記錄賬薄,通常用于代理ValidatingPeer,提供RESTservice轉發功能Permissioned許可。只接受成員接入,不接受匿名接入Privacy隱私。OBC中任何成員都能發起交易,但只有相關方才能知道,其它無關節點無法從交易回溯到交易方Confidentiality保密。OBC中只有交易相關方可以看到交易內容,其它無關節點只能驗證交易的真實性Auditability審計。如果把審計方加入OBC交易,則它可以看到交易,從而審計是否合規21IBM開放區塊鏈名詞解釋Transaction21IBM開放區塊鏈名詞解釋Transaction21IBM22帳本結構示意22帳本結構示意22帳本結構示意22帳本結構示意23OBC角色劃分與工作內容成員服務(MemberServices)注冊(Registration)身份管理(IdentityManagement)可審計(Auditibility)驗證節點(ValidatingPeer)進行共識(Consensus)運行交易(Transaction)維護賬本(Ledger)發出事件(Event)非驗證節點(Non-ValidatingPeer)維護節點間的安全上下文(SecureContext)代表客戶向成員服務或驗證節點請求服務向應用交付事件(Event)處理API請求應用(Application)認證客戶把客戶映射到安全上下文(SecureContext)調用RESTAPI用戶(Client)登錄與交易23OBC角色劃分與工作內容成員服務(MemberSer23OBC角色劃分與工作內容成員服務(MemberSer24網絡拓撲結構整個OBC網絡中含有兩種節點,驗證節點(ValidatingPeer)和非驗證節點(Non-ValidationPeer)。前者是全功能節點,構成全連通拓撲結構,后者是代理節點,通常掛接在相鄰驗證節點上應用程序可以連接在驗證節點,也可以連接在非驗證節點在OBC網絡中需要有一個密鑰管理結節,考慮到PBFT算法的3f+1共識機制,典型的容錯(允許一個節點故障)環境需要有4個ValidationPeer節點成員服務MemberServices用戶Client用戶Client24網絡拓撲結構整個OBC網絡中含有兩種節點,驗證節點(Va24網絡拓撲結構整個OBC網絡中含有兩種節點,驗證節點(Va25單節點和多節點網絡若OBC網絡中只有一個VP節點(極端簡化),則應用程序可以直接與該節點連接,執行其上的Chaincode代碼,這時VP節點只需要記賬,不需要共識若OBC網絡中有多個VP節點,則應用程序可以通過NVP節點(NVP與應用程序可以一對多)間接訪問VP(NVP與VP之間多對一),這時VP節點需要驗證交易、運行代碼、記錄賬薄、達成共識25單節點和多節點網絡若OBC網絡中只有一個VP節點(極端簡25單節點和多節點網絡若OBC網絡中只有一個VP節點(極端簡26商業票據的Blockchain應用-星形架構26商業票據的Blockchain應用-星形架構26商業票據的Blockchain應用-星形架構26商業票據27IBM開放區塊鏈參考架構概覽(模塊與服務)27IBM開放區塊鏈參考架構概覽(模塊與服務)27IBM開放區塊鏈參考架構概覽(模塊與服務)27IBM開放28成員管理(Membership)成員管理提供會員注冊、身份保護、內容保密、交易審計功能OBC所有成員首先,通過RegistrationAuthority(RA)注冊獲得許可然后,通過EnrollmentCertificateAuthority(ECA)獲得注冊安全證書(ECert),第三步(可選),通過TransactionCertificateAuthority(TCA)獲得交易安全證書(TCert)使用二者之一簽名發起交易請求與公有鏈不同(所有參與方不需要身份認證,可直接進行交易)28成員管理(Membership)成員管理提供會員注冊、身28成員管理(Membership)成員管理提供會員注冊、身29成員管理模型29成員管理模型29成員管理模型29成員管理模型30業務網絡動態組建示例:第一個節點OBC節點相關配置位于/openblockchain/obc-peer/openchain.yaml在配置文件的peer小節中,validator_enabled為true表示節點是驗證節點,否則是非驗證節點discovery_rootnode在啟動時使用,當這個參數被設置時節點會使用discoveryprotocal查找其他節點。這個參數是網絡上另外一個節點的IP,這個節點作為網絡上所有節點進行discover的起始點。rest_enabled表明節點是否接受REST請求,對于生產環境一般把驗證節點設置為false,只讓非驗證節點接受來自應用的REST請求第一個節點驗證節點根節點IP:validator_enabled:truediscovery_rootnode:rest_enabled:false30業務網絡動態組建示例:第一個節點OBC節點相關配置位于g30業務網絡動態組建示例:第一個節點OBC節點相關配置位于g31業務網絡動態組建示例:第二個節點第二個節點向根節點發送消息DISC_HELLO,含有自己區塊鏈的高度blockNumber和PeerEndpoint。如果根節點應答的DISC_HELLO消息中的區塊鏈高度高于第二個節點當前持有的,第二個節點立刻發起synchronizationprotocol以同步賬本的最新狀態此后第二個節點每5秒鐘向所有的已知節點(目前只知道第一個節點)發送DISC_GET_PEERS消息獲得加入網絡的其它節點第一個節點收到DISC_GET_PEERS消息后,回復包含了PeerEndpoint數組的DISC_PEERS消息IP:validator_enabled:truediscovery_rootnode:rest_enabled:falseIP:validator_enabled:truediscovery_rootnode:discovery_period:5srest_enabled:false第二個節點驗證節點第一個節點驗證節點根節點31業務網絡動態組建示例:第二個節點第二個節點向根節點發送消31業務網絡動態組建示例:第二個節點第二個節點向根節點發送消32業務網絡動態組建示例:第三個節點第三個節點向根節點發送消息DISC_HELLO,含有自己區塊鏈的高度blockNumber和PeerEndpoint。如果根節點應答的DISC_HELLO消息中的區塊鏈高度高于第三個節點當前持有的,第三個節點立刻發起synchronizationprotocol以同步賬本的最新狀態,雖然不執行交易,但是非驗證節點維護一個最新的賬本副本此后第三個節點每60秒鐘向所有的已知節點(第一、二個節點)發送DISC_GET_PEERS消息獲得加入網絡的其它節點(考慮到發送間隔,第二個節點應該先于第三個節點發現對方)第一、二個節點收到DISC_GET_PEERS消息后,回復包含了PeerEndpoint數組的DISC_PEERS消息IP:validator_enabled:truediscovery_rootnode:rest_enabled:falseIP:validator_enabled:falsediscovery_rootnode:discovery_period:60srest_enabled:true第二個節點驗證節點第一個節點驗證節點IP:validator_enabled:truediscovery_rootnode:discovery_period:5srest_enabled:false第三個節點非驗證節點32業務網絡動態組建示例:第三個節點第三個節點向根節點發送消32業務網絡動態組建示例:第三個節點第三個節點向根節點發送消33區塊(Block)結構messageBlock{version=1;tobuf.Timestamptimestamp=2;bytestransactionsHash=3;bytesstateHash=4;bytespreviousBlockHash=5;bytesconsensusMetadata=6;NonHashDatanonHashData=7;}messageBlockTransactions{repeatedTransactiontransactions=1;}messageNonHashData{tobuf.TimestamplocalLedgerCommitTimestamp=1;repeatedTransactionResulttransactionResults=2;}messageTransactionResult{stringuuid=1; //交易IDbytesresult=2; //交易執行結果uint32errorCode=3; //錯誤碼stringerror=4; //錯誤說明}33區塊(Block)結構messageBlock{33區塊(Block)結構messageBlock{3334PBFT原理介紹:核心算法(也叫做3-phasecommit)client把一個request廣播到所有的replica,確保primary收到請求<PRE-PREPARE>Primary為這個request分配一個順序號并廣播到其他replica;那些replica檢查消息的有效性,同意那個順序號且確認了message和view;如果replica有了m和有效的pre-pare,就進行下一步<PREPARE>每個replica發送一個PREPARE消息給其他的replica,所有收到2f個prepare的replica進入commit<COMMIT>每個replica廣播commit消息,一個replica收到2f個commit消息后,就執行(Execute)序號小于n的所有request<REPLY>replica直接返回結果給client,client等待f+1個相同的結果。周期性地,replica會做checkpoint來清理log在內存中的prepared/committedmessageReplica通過超時機制來監控primary的狀態,并適時觸發viewchangeprotocol來選舉新的primary。v:viewnumber;n:sequencenumber;D(m):
Digestofrequestmessagem;代碼實現:/openchain/consensus/obcpbft/pbft-core.go;其中:innerStack=innerCPI34PBFT原理介紹:核心算法(也叫做3-phasec34PBFT原理介紹:核心算法(也叫做3-phasec35賬鏈代碼(Chaincode)OBC中的智能合約,是通過賬鏈代碼(Chaincode)來實現。業務邏輯(Logic)=賬鏈代碼(Chaincode)=智能合約(Smartcontract)它嵌在交易中,所有驗證節點在確認交易時都必須執行它。執行環境是一個定制化的安全的“沙箱”(Docker)目前支持Go,將來支持Java,Node.js35賬鏈代碼(Chaincode)OBC中的智能合約,是通過35賬鏈代碼(Chaincode)OBC中的智能合約,是通過36賬鏈代碼相關概念賬鏈代碼的分類:公開的賬鏈代碼:通過公開的交易來部署的賬鏈代碼,這些代碼能被網絡中任意成員調用。機密的賬鏈代碼:通過機密的交易來部署的賬鏈代碼,這些代碼只能被網絡中指定的做驗證的成員調用。訪問受控的賬鏈代碼:通過內置令牌的機密交易來部署的賬鏈代碼,這些代碼能被網絡中持有對應令牌的成員調用(即使這些成員不是校驗者)。賬鏈代碼的操作類型:部署賬鏈代碼:通過交易部署新的賬鏈代碼。調用賬鏈代碼:通過交易調用已經部署的賬鏈代碼,也可以在賬鏈代碼中調用其他的賬鏈代碼。調用操作可以修改賬鏈代碼中的變量信息。查詢賬鏈代碼:通過交易查詢已經部署的賬鏈代碼,也可以在賬鏈代碼中查詢其他賬鏈代碼。查詢操作不能修改賬鏈代碼中的變量信息。賬鏈代碼的數據存儲賬鏈代碼中需要持久化的狀態(State),可以存儲在世界狀態(WorldState)中。36賬鏈代碼相關概念賬鏈代碼的分類:36賬鏈代碼相關概念賬鏈代碼的分類:36賬鏈代碼相關概念賬鏈37VM&ChaincodetypeVMinterface{build(ctxtcontext.Context,idstring,args[]string,env[]string,attachstdinbool,attachstdoutbool,readerio.Reader)error //建立chaincodeimagestart(ctxtcontext.Context,idstring,args[]string,env[]string,attachstdinbool,attachstdoutbool)error //啟動chaincodestop(ctxtcontext.Context,idstring,timeoutuint,dontkillbool,dontremovebool)error //停止chaincode}typeChaincodeinterface{Invoke(stub*ChaincodeStub,functionstring,args[]string)(error) //調用chaincodeQuery(stub*ChaincodeStub,functionstring,args[]string)([]byte,error) //查詢chaincode}messageChaincodeMessage{enumType{UNDEFINED=0;REGISTER=1;REGISTERED=2;INIT=3;READY=4;TRANSACTION=5;COMPLETED=6;ERROR=7;GET_STATE=8;PUT_STATE=9;DEL_STATE=10;INVOKE_CHAINCODE=11;INVOKE_QUERY=12;RESPONSE=13;QUERY=14;QUERY_COMPLETED=15;QUERY_ERROR=16;RANGE_QUERY_STATE=17;}Typetype=1; //消息類型tobuf.Timestamptimestamp=2;bytespayload=3; //消息體stringuuid=4; //消息ID}首先,ValidatingPeer在執行Deploy交易時,OBC框架會自動創建VM(Docker),為其加載(build)賬鏈代碼(Chaincode),根據情況啟動(start)或停止(stop)賬鏈代碼接著,Chaincodeshim會與ValidatingPeer建立反向連接,接收ChaincodeMessage指令37VM&ChaincodetypeVMinterf37VM&ChaincodetypeVMinterf38Chaincode操作38Chaincode操作38Chaincode操作38Chaincode操作39State操作messagePutStateInfo{ //存數據stringkey=1;bytesvalue=2;}messageRangeQueryState{ //批量取數據stringstartKey=1; //開始key(含),字母順序stringendKey=2; //結束key(含),字母順序}messageRangeQueryStateResponse{repeatedRangeQueryStateKeyValuekeysAndValues=1;boolhasMore=2; //是否還有后續數據stringID=3;}messageRangeQueryStateKeyValue{stringkey=1; //keybytesvalue=2; //value}messageRangeQueryStateNext{ //分批取回stringID=1;}messageRangeQueryStateClose{ //結束stringID=1;}39State操作messagePutStateInfo39State操作messagePutStateInfo40賬鏈代碼示例(Go)賬戶A和B之間相互轉賬主函數(源代碼鏈接:G)//Runcallbackrepresentingtheinvocationofachaincode
//ThischaincodewillmanagetwoaccountsAandBandwilltransferXunitsfrom//AtoBuponinvoke
func(t*SimpleChaincode)Run(stub*shim.ChaincodeStub,functionstring,args[]string)([]byte,error){
//Handledifferentfunctions
iffunction==“init”{
//初始化
returnt.init(stub,args)
}elseiffunction==“invoke”{
//調用賬鏈代碼,從賬戶A轉X元到賬戶
returnt.invoke(stub,args)
}elseiffunction=="delete"{
//Deletesanentityfromitsstate
returnt.delete(stub,args)
}
returnnil,errors.New("Receivedunknownfunctioninvocation")
}40賬鏈代碼示例(Go)賬戶A和B之間相互轉賬//Run40賬鏈代碼示例(Go)賬戶A和B之間相互轉賬//Run41賬鏈代碼示例(Go)初始化函數:func(t*SimpleChaincode)init(stub*shim.ChaincodeStub,args[]string)([]byte,error){
varA,Bstring//賬戶地址
varAval,Bvalint//賬戶金額
varerrerror
...
//初始化
A=args[0]//獲取賬戶A地址
Aval,err=strconv.Atoi(args[1])
//獲取賬戶A初始余額
iferr!=nil{
returnnil,errors.New(“Expectingintegervalueforassetholding”)
}
B=args[2]
...fmt.Printf(“Aval=%d,Bval=%d\n”,Aval,Bval)
//將變量信息寫入賬本中err=stub.PutState(A,[]byte(strconv.Itoa(Aval)))
iferr!=nil{
returnnil,err
}
err=stub.PutState(B,[]byte(strconv.Itoa(Bval)))
iferr!=nil{
returnnil,err
}
returnnil,nil
}41賬鏈代碼示例(Go)初始化函數:func(t*Sim41賬鏈代碼示例(Go)初始化函數:func(t*Sim42賬鏈代碼示例(Go)轉賬函數://該交易從賬戶A中轉賬X元到賬戶B
func(t*SimpleChaincode)invoke(stub*shim.ChaincodeStub,args[]string)([]byte,error){
varA,Bstring//賬戶地址
varAval,Bvalint//賬戶余額
varXint//轉賬金額
varerrerror
...
A=args[0]
B=args[1]
//從賬本中獲取狀態/變量信息
Avalbytes,err:=stub.GetState(A)//賬戶A的當前余額
iferr!=nil{
returnnil,errors.New(“Failedtogetstate”)
}
ifAvalbytes==nil{
returnnil,errors.New(“Entitynotfound”)
}
Aval,_=strconv.Atoi(string(Avalbytes))//講賬戶A的當前余額轉換為數值
Bvalbytes,err:=stub.GetState(B)
...Bval,_=strconv.Atoi(string(Bvalbytes))
待續42賬鏈代碼示例(Go)轉賬函數://該交易從賬戶A中轉賬42賬鏈代碼示例(Go)轉賬函數://該交易從賬戶A中轉賬43賬鏈代碼示例(Go)轉賬函數(續)//該交易從賬戶A中轉賬X元到賬戶B
//執行轉賬操作
X,err=strconv.Atoi(args[2])
Aval=Aval-X
Bval=Bval+X
fmt.Printf(“Aval=%d,Bval=%d\n”,Aval,Bval)
//將執行后的結果寫入賬本中
err=stub.PutState(A,[]byte(strconv.Itoa(Aval)))
iferr!=nil{
returnnil,err
}
err=stub.PutState(B,[]byte(strconv.Itoa(Bval)))
iferr!=nil{
returnnil,err
}
returnnil,nil
}43賬鏈代碼示例(Go)轉賬函數(續)//該交易從賬戶A中43賬鏈代碼示例(Go)轉賬函數(續)//該交易從賬戶A中區塊鏈技術概述
2017年五月44區塊鏈技術概述
2017年五月1區塊鏈技術概述
2017年五月44區塊鏈技術概述
2017年12區塊鏈技術介紹
OBC組網與智能合約3智能合約的開發與示例4512區塊鏈技術介紹OBC組網與智能合約3智能合約的開發12區塊鏈技術介紹OBC組網與智能合約3智能合約的開發46”繼互聯網后的又一大變革時代到來”、“互聯網金融的終極形式”、“價值互聯網的開端”、“RecordofThings記錄一切”……
區塊鏈在短短時間內獲得了巨大的漣漪效應,IBM在2016年2月開放了OpenBlockChain技術并貢獻給了Linux社區,引起了業界巨大轟動。那么區塊鏈到底是怎樣的一項顛覆性技術?其特點是什么?IBM區塊鏈平臺的特點是什么?未來會如何演變?區塊鏈應用與已有應用的關系是什么?本片將對這些問題逐一解鏈并進行探討。序3”繼互聯網后的又一大變革時代到來”、“互聯網金融的終極形式46”繼互聯網后的又一大變革時代到來”、“互聯網金融的終極形47區塊鏈介紹區塊鏈是一種共享賬本技術,商業網絡中的任何參與方都可以查看交易系統記錄(賬本)什么是區塊鏈?4區塊鏈介紹區塊鏈是一種共享賬本技術,商業網絡中的任何參與47區塊鏈介紹區塊鏈是一種共享賬本技術,商業網絡中的任何參48區塊鏈是支撐比特幣的底層關鍵技術區塊鏈技術的分類?公有鏈Pow/Pos/DPos聯盟鏈OBC/Etherenumpbft共識私有鏈5區塊鏈是支撐比特幣的底層關鍵技術區塊鏈技術的分類?公有鏈聯48區塊鏈是支撐比特幣的底層關鍵技術區塊鏈技術的分類?公有鏈49
是不受監管的,抗審查的影子貨幣區塊鏈確保“類現金”的貨幣流通唯一的,
不可篡改確定的是區塊鏈首個應用區塊鏈
不是區塊鏈是支撐比特幣的底層關鍵技術什么是區塊鏈?6是不受監管的,抗審查的49是不受監管的,抗審查50更進一步——什么是(企業級)區塊鏈智能合約隱私保護共享賬本共識保證共享賬本適當的可見性;保證交易是真實和可驗證的交易條款和交易狀態內嵌在區塊鏈系統中,驅動交易執行所有參與者一致同意才意味著交易在網絡中通過驗證跨商業網絡共享的,不可更改的,分布式交易記錄系統更廣泛的參與,更低的成本,更高的效率什么是區塊鏈? 區塊鏈是一種分布式多節點“共識”實現技術,通過區塊鏈可以完整、“不可篡改”地記錄價值轉移(交易)的全過程。區塊鏈的形成按照時間先后順序進行連接,每一個參與共識形成的節點都有一份區塊鏈信息的完整副本。7更進一步——什么是(企業級)區塊鏈智能合約隱私保護共享賬本50更進一步——什么是(企業級)區塊鏈智能合約隱私保護共享賬51比特幣帳本什么是區塊鏈?8比特幣帳本什么是區塊鏈?51比特幣帳本什么是區塊鏈?8比特幣帳本什么是區塊鏈?52OBC帳本什么是區塊鏈?9OBC帳本什么是區塊鏈?52OBC帳本什么是區塊鏈?9OBC帳本什么是區塊鏈?53共享賬本記錄商業網絡中的所有交易在參與者之間共享參與者通過同步獲取自己的備份授權許可的,參與者只能看到適當的交易記錄信息共享的記錄系統什么是區塊鏈?10共享賬本記錄商業網絡中的所有交易什么是區塊鏈?53共享賬本記錄商業網絡中的所有交易什么是區塊鏈?10共享賬54智能合約合約中的商業規則內嵌在區塊鏈系統中,在交易時被執行可驗證的、被簽署的編碼在編程語言中案例: –在公司債權發生轉移時執行定義的合同條款什么是區塊鏈?11智能合約合約中的商業規則內嵌在區塊鏈系統中,在交易時被執54智能合約合約中的商業規則內嵌在區塊鏈系統中,在交易時被執55隱私保護賬本是共享的,但是參與者要求其具有隱私保護參與者需要: –交易信息需要保密 –身份不和交易綁定交易必須是真實的密碼學是這些步驟的核心什么是區塊鏈?12隱私保護賬本是共享的,但是參與者要求其具有隱私保護什么是55隱私保護賬本是共享的,但是參與者要求其具有隱私保護什么是56共識共識是交易驗證與確認的過程當參與方是匿名時 –交易確認代價高昂 –的挖礦過程為匿名者提供驗證,但需巨大計算成本(工作證明)當參與者都是已知且可信時 –交易確認的成本降低多種替代方案 –權益證明,欺詐性交易產生時需要驗證(如債券交易) –多個簽名(如5個參與者中3人的同意)企業級區塊鏈需要“可插拔的”共識什么是區塊鏈?13共識共識是交易驗證與確認的過程什么是區塊鏈?56共識共識是交易驗證與確認的過程什么是區塊鏈?13共識共識57行業采用區塊鏈的好處減少成本及復雜度提高可發現性可信的記錄保存共享的可信流程為什么與業務相關?14行業采用區塊鏈的好處減少成本及復雜度可信的記錄保存為什么57行業采用區塊鏈的好處減少成本及復雜度可信的記錄保存為什么58區塊鏈——并非萬能不適用場景1.高性能(毫秒級)交易2.小型組織(無商業網絡)3.尋找數據庫的替代方案4.尋找消息傳遞的解決方案5.尋找交易處理的替代方案為什么與業務相關?15區塊鏈——并非萬能不適用場景為什么與業務相關?58區塊鏈——并非萬能不適用場景為什么與業務相關?15區塊鏈59區塊鏈技術平臺對比16區塊鏈技術平臺對比59區塊鏈技術平臺對比16區塊鏈技術平臺對比第一,跨組織協作。在區塊鏈信任機制中,所有成員參與對信任價值的監督、控制和審計,對地址、鏈、公鑰、私鑰、摘要等幾乎所有數據記錄的要素,進行全生命周期的協作密碼保護,而且是全球、隨機的。一個聯盟鏈,相當于一臺全球超級密碼、交換機、密鑰簽名服務器和密碼本的總和,信用連續。第二,永不宕機。因為成員的動態運算機制,所有成員節點,進行實時同步,無法實現局部控制,全球節點的隨機分布和相應在運算時鐘和動態時間戳的控制下,永遠不停機,信用連續。第三,成員監管。區塊鏈強信任的技術特點,來自其節點成員無中心的安全職責,成員局部的協作綜合實現了體系安全的監管全部,融監管與過程之中,實現了系統學中安全的正反饋機制,在目前的計算條件下,尚無法通過跨越動態時間戳的可靠超越,信用連續。為何要用區塊鏈—強信任機制解決中心化系統中信用不連續問題60第一,跨組織協作。在區塊鏈信任機制中,所有成員參與對信任價值第一,跨組織協作。在區塊鏈信任機制中,所有成員參與對信任價值61區塊鏈運營對比18區塊鏈運營對比61區塊鏈運營對比18區塊鏈運營對比62IBM開放區塊鏈與Linux社區——開放持續投入代碼運行環境賬簿數據結構模塊化(可插式)共識框架模塊化(可插式)身份服務P2P網絡技術升級包SDK(API)共識算法庫(插入模塊)成員管理策略區塊鏈網關開發工具管理控制臺區塊鏈行業應用基礎部分共享賬簿(SharedLedger)增值部分(模塊、工具、封裝)應用部分項目核心范圍內核心APIIBM社區貢獻Hyperledger項目IBM在Blockchain上持續投入,致力于行業應用是Linux開源社區Hyperledger的主要貢獻方,致力于協同其他公司共同研發,公布OpenLedger標準(規格說明書),創建基于Linux的開源共享賬簿(比Bitcoin更適合行業應用)推動區塊鏈技術在行業中的應用(行業區塊鏈)Blockchain已經作為一種實驗性(網絡)服務在Bluemix上推出基于LinuxOne的開放計算平臺對Blockchain的支持……IBM區塊鏈19IBM開放區塊鏈與Linux社區——開放持續投入代碼運行62IBM開放區塊鏈與Linux社區——開放持續投入代碼運行63IBM開放區塊鏈:貢獻給Linux社區的架構及代碼Community+CodeMEMBERSHIP包括OBC參與方的身份識別,隱私,可審計性。BLOCKCHAIN|TRANSACTIONS經過共識過程進行分布式交易賬本處理。CHAIN-CODE“智能合約”,提供在區塊鏈上運行業務邏輯的能力。APIs,SDKs,CLI為開發人員提供以可編程方式控制區塊鏈網絡的能力。20IBM開放區塊鏈:貢獻給Linux社區的架構及代碼C63IBM開放區塊鏈:貢獻給Linux社區的架構及代碼C64IBM開放區塊鏈名詞解釋Transaction交易。賬頁中的一筆記錄,用于確認一個事實,執行一段代碼(chaincode)Ledger賬薄(賬冊)。由首尾相連的一組區塊(block,有時也稱為一個賬頁)構成,記錄交易和區塊世界的狀態WorldState區塊世界的狀態。由一組變量組成,指明交易的執行結果Chaincode交易中記錄的一段代碼,其執行結果會改變區塊世界的狀態(Worldstate)ValidatingPeer驗證節點。OBC區域鏈網絡中的全功能節點,負責驗證交易、記錄賬薄、達成共識Non-validatingPeer非驗證節點。OBC區域鏈網絡中的半功能節點,負責驗證交易,但不執行交易,也不記錄賬薄,通常用于代理ValidatingPeer,提供RESTservice轉發功能Permissioned許可。只接受成員接入,不接受匿名接入Privacy隱私。OBC中任何成員都能發起交易,但只有相關方才能知道,其它無關節點無法從交易回溯到交易方Confidentiality保密。OBC中只有交易相關方可以看到交易內容,其它無關節點只能驗證交易的真實性Auditability審計。如果把審計方加入OBC交易,則它可以看到交易,從而審計是否合規21IBM開放區塊鏈名詞解釋Transaction64IBM開放區塊鏈名詞解釋Transaction21IBM65帳本結構示意22帳本結構示意65帳本結構示意22帳本結構示意66OBC角色劃分與工作內容成員服務(MemberServices)注冊(Registration)身份管理(IdentityManagement)可審計(Auditibility)驗證節點(ValidatingPeer)進行共識(Consensus)運行交易(Transaction)維護賬本(Ledger)發出事件(Event)非驗證節點(Non-ValidatingPeer)維護節點間的安全上下文(SecureContext)代表客戶向成員服務或驗證節點請求服務向應用交付事件(Event)處理API請求應用(Application)認證客戶把客戶映射到安全上下文(SecureContext)調用RESTAPI用戶(Client)登錄與交易23OBC角色劃分與工作內容成員服務(MemberSer66OBC角色劃分與工作內容成員服務(MemberSer67網絡拓撲結構整個OBC網絡中含有兩種節點,驗證節點(ValidatingPeer)和非驗證節點(Non-ValidationPeer)。前者是全功能節點,構成全連通拓撲結構,后者是代理節點,通常掛接在相鄰驗證節點上應用程序可以連接在驗證節點,也可以連接在非驗證節點在OBC網絡中需要有一個密鑰管理結節,考慮到PBFT算法的3f+1共識機制,典型的容錯(允許一個節點故障)環境需要有4個ValidationPeer節點成員服務MemberServices用戶Client用戶Client24網絡拓撲結構整個OBC網絡中含有兩種節點,驗證節點(Va67網絡拓撲結構整個OBC網絡中含有兩種節點,驗證節點(Va68單節點和多節點網絡若OBC網絡中只有一個VP節點(極端簡化),則應用程序可以直接與該節點連接,執行其上的Chaincode代碼,這時VP節點只需要記賬,不需要共識若OBC網絡中有多個VP節點,則應用程序可以通過NVP節點(NVP與應用程序可以一對多)間接訪問VP(NVP與VP之間多對一),這時VP節點需要驗證交易、運行代碼、記錄賬薄、達成共識25單節點和多節點網絡若OBC網絡中只有一個VP節點(極端簡68單節點和多節點網絡若OBC網絡中只有一個VP節點(極端簡69商業票據的Blockchain應用-星形架構26商業票據的Blockchain應用-星形架構69商業票據的Blockchain應用-星形架構26商業票據70IBM開放區塊鏈參考架構概覽(模塊與服務)27IBM開放區塊鏈參考架構概覽(模塊與服務)70IBM開放區塊鏈參考架構概覽(模塊與服務)27IBM開放71成員管理(Membership)成員管理提供會員注冊、身份保護、內容保密、交易審計功能OBC所有成員首先,通過RegistrationAuthority(RA)注冊獲得許可然后,通過EnrollmentCertificateAuthority(ECA)獲得注冊安全證書(ECert),第三步(可選),通過TransactionCertificateAuthority(TCA)獲得交易安全證書(TCert)使用二者之一簽名發起交易請求與公有鏈不同(所有參與方不需要身份認證,可直接進行交易)28成員管理(Membership)成員管理提供會員注冊、身71成員管理(Membership)成員管理提供會員注冊、身72成員管理模型29成員管理模型72成員管理模型29成員管理模型73業務網絡動態組建示例:第一個節點OBC節點相關配置位于/openblockchain/obc-peer/openchain.yaml在配置文件的peer小節中,validator_enabled為true表示節點是驗證節點,否則是非驗證節點discovery_rootnode在啟動時使用,當這個參數被設置時節點會使用discoveryprotocal查找其他節點。這個參數是網絡上另外一個節點的IP,這個節點作為網絡上所有節點進行discover的起始點。rest_enabled表明節點是否接受REST請求,對于生產環境一般把驗證節點設置為false,只讓非驗證節點接受來自應用的REST請求第一個節點驗證節點根節點IP:validator_enabled:truediscovery_rootnode:rest_enabled:false30業務網絡動態組建示例:第一個節點OBC節點相關配置位于g73業務網絡動態組建示例:第一個節點OBC節點相關配置位于g74業務網絡動態組建示例:第二個節點第二個節點向根節點發送消息DISC_HELLO,含有自己區塊鏈的高度blockNumber和PeerEndpoint。如果根節點應答的DISC_HELLO消息中的區塊鏈高度高于第二個節點當前持有的,第二個節點立刻發起synchronizationprotocol以同步賬本的最新狀態此后第二個節點每5秒鐘向所有的已知節點(目前只知道第一個節點)發送DISC_GET_PEERS消息獲得加入網絡的其它節點第一個節點收到DISC_GET_PEERS消息后,回復包含了PeerEndpoint數組的DISC_PEERS消息IP:validator_enabled:truediscovery_rootnode:rest_enabled:falseIP:validator_enabled:truediscovery_rootnode:discovery_period:5srest_enabled:false第二個節點驗證節點第一個節點驗證節點根節點31業務網絡動態組建示例:第二個節點第二個節點向根節點發送消74業務網絡動態組建示例:第二個節點第二個節點向根節點發送消75業務網絡動態組建示例:第三個節點第三個節點向根節點發送消息DISC_HELLO,含有自己區塊鏈的高度blockNumber和PeerEndpoint。如果根節點應答的DISC_HELLO消息中的區塊鏈高度高于第三個節點當前持有的,第三個節點立刻發起synchronizationprotocol以同步賬本的最新狀態,雖然不執行交易,但是非驗證節點維護一個最新的賬本副本此后第三個節點每60秒鐘向所有的已知節點(第一、二個節點)發送DISC_GET_PEERS消息獲得加入網絡的其它節點(考慮到發送間隔,第二個節點應該先于第三個節點發現對方)第一、二個節點收到DISC_GET_PEERS消息后,回復包含了PeerEndpoint數組的DISC_PEERS消息IP:validator_enabled:truediscovery_rootnode:rest_enabled:falseIP:validator_enabled:falsediscovery_rootnode:discovery_period:60srest_enabled:true第二個節點驗證節點第一個節點驗證節點IP:validator_enabled:truediscovery_rootnode:discovery_period:5srest_enabled:false第三個節點非驗證節點32業務網絡動態組建示例:第三個節點第三個節點向根節點發送消75業務網絡動態組建示例:第三個節點第三個節點向根節點發送消76區塊(Block)結構messageBlock{version=1;tobuf.Timestamptimestamp=2;bytestransactionsHash=3;bytesstateHash=4;bytespreviousBlockHash=5;bytesconsensusMetadata=6;NonHashDatanonHashData=7;}messageBlockTransactions{repeatedTransactiontransactions=1;}messageNonHashData{tobuf.TimestamplocalLedgerCommitTimestamp=1;repeatedTransactionResulttransactionResults=2;}messageTransactionResult{stringuuid=1; //交易IDbytesresult=2; //交易執行結果uint32errorCode=3; //錯誤碼stringerror=4; //錯誤說明}33區塊(Block)結構messageBlock{76區塊(Block)結構messageBlock{3377PBFT原理介紹:核心算法(也叫做3-phasecommit)client把一個request廣播到所有的replica,確保primary收到請求<PRE-PREPARE>Primary為這個request分配一個順序號并廣播到其他replica;那些replica檢查消息的有效性,同意那個順序號且確認了message和view;如果replica有了m和有效的pre-pare,就進行下一步<PREPARE>每個replica發送一個PREPARE消息給其他的replica,所有收到2f個prepare的replica進入commit<COMMIT>每個replica廣播commit消息,一個replica收到2f個commit消息后,就執行(Execute)序號小于n的所有request<REPLY>replica直接返回結果給client,client等待f+1個相同的結果。周期性地,replica會做checkpoint來清理log在內存中的prepared/committedmessageReplica通過超時機制來監控primary的狀態,并適時觸發viewchangeprotocol來選舉新的primary。v:viewnumber;n:sequencenumber;D(m):
Digestofrequestmessagem;代碼實現:/openchain/consensus/obcpbft/pbft-core.go;其中:innerStack=innerCPI34PBFT原理介紹:核心算法(也叫做3-phasec77PBFT原理介紹:核心算法(也叫做3-phasec78賬鏈代碼(Chaincode)OBC中的智能合約,是通過賬鏈代碼(Chaincode)來實現。業務邏輯(Logic)=賬鏈代碼(Chaincode)=智能合約(Smartcontract)它嵌在交易中,所有驗證節點在確認交易時都必須執行它。執行環境是一個定制化的安全的“沙箱”(Docker)目前支持Go,將來支持Java,Node.js35賬鏈代碼(Chaincode)OBC中的智能合約,是通過78賬鏈代碼(Chaincode)OBC中的智能合約,是通過79賬鏈代碼相關概念賬鏈代碼的分類:公開的賬鏈代碼:通過公開的交易來部署的賬鏈代碼,這些代碼能被網絡中任意成員調用。機密的賬鏈代碼:通過機密的交易來部署的賬鏈代碼,這些代碼只能被網絡中指定的做驗證的成員調用。訪問受控的賬鏈代碼:通過內置令牌的機密交易來部署的賬鏈代碼,這些代碼能被網絡中持有對應令牌的成員調用(即使這些成員不是校驗者)。賬鏈代碼的操作類型:部署賬鏈代碼:通過交易部署新的賬鏈代碼。調用賬鏈代碼:通過交易調用已經部署的賬鏈代碼,也可以在賬鏈代碼中調用其他的賬鏈代碼。調用操作可以修改賬鏈代碼中的變量信息。查詢賬鏈代碼:通過交易查詢已經部署的賬鏈代碼,也可以在賬鏈代碼中查詢其他賬鏈代碼。查詢操作不能修改賬鏈代碼中的變量信息。賬鏈代碼的數據存儲賬鏈代碼中需要持久化的狀態(State),可以存儲在世界狀態(WorldState)中。36賬鏈代碼相關概念賬鏈代碼的分類:79賬鏈代碼相關概念賬鏈代碼的分類:36賬鏈代碼相關概念賬鏈80VM&ChaincodetypeVMinterface{build(ctxtcontext.Context,idstring,args[]string,env[]string,attachstdinbool,attachstdoutbool,readerio.Reader)error //建立chaincodeimagestart(ctxtcontext.Context,idstring,args[]string,env[]string,attachstdinbool,attachstdoutbool)error //啟動chaincodestop(ctxtcontext.Context,idstring,timeoutuint,dontkillbool,dontremovebool)error //停止chaincode}typeChaincodeinterface{Invoke(stub*ChaincodeStub,functionstring,args[]string)(error) //調用chaincodeQuery(stub*ChaincodeStub,functionstring,args[]string)([]byte,error) //查詢chaincode}messageChaincodeMessage{enumType{UNDEFINED=0;REGISTER=1;REGISTERED=2;INIT=3;READY=4;TRANSACTION=5;COMPLETED=6;ERROR=7;GET_STATE=8;PUT_STATE=9;DEL_STATE=10;INVOKE_CHAINCODE=11;INVOKE_QUERY=12;RESPONSE=13;QUERY=14;QUERY_COMPLETED=15;QUERY_ERROR=16;RANGE_QUERY_STATE=17;}Typetype=1; //消息類型tobuf.Timestamptimestamp=2;bytespayload=3; //消息體stringuuid=4; //消息ID}首先,ValidatingPeer在執行Deploy交易時,OBC框架會自動創建VM(Docker),為其加載(build)賬鏈代碼(Chaincode),根據情況啟動(start)或停止(stop)賬鏈代碼接著,Chaincodeshim會與ValidatingPeer建立反向連接,接收ChaincodeMessage指令37VM&ChaincodetypeVMinterf80VM&ChaincodetypeVMinterf81Chaincode操作38Chaincode操作81Chaincode操作38Chaincode操作82State操作messagePutStateInfo{ //存數據stringkey=1;bytesvalue=2;}messageRangeQueryState{ //批量取數據stringstartKey=1; //開始key(含),字母順序stringendKey=2; //結束key(含),字母順序}messageRangeQueryStateResponse{repeatedRangeQueryStateKeyValuekeysAndValues=1;boolhasMore=2; //是否還有后續數據stringID=3;}messageRangeQueryStateKeyValue{stringkey=1; //keybytesvalue=2; //value}messageRangeQueryStateNext{ //分批取回stringID=1;}messageRangeQueryStateClose{ //結束stringID=1;}39State操作messagePutStat
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 全國泰山版初中信息技術九年級下冊第二章第六節《勇敢的消防員》教學設計
- 中學生感恩演講稿(10篇)
- 四年級上冊科學教學設計-1.4《我們是怎樣聽到聲音的》 教科版
- 公司采購部2025年終個人工作總結(18篇)
- 高一化學教師工作總結(5篇)
- 加薪自我評價(15篇)
- 2025年員工辭職報告范文(32篇)
- 私有房屋購買合同(18篇)
- 頂崗實習的心得體會收獲(16篇)
- 2025護士個人小結(4篇)
- 2025屆廣東省廣州市普通高中高三下學期二模物理試卷含答案
- 醫院綜合考核試題及答案
- 2025年工會五一勞動節活動方案范文
- 光纖通信系統與網絡(第5版)課件 胡慶 第1-4章 光纖通信概論-光纖通信系統及設計
- 舞臺劇代理運營協議合同
- 西南政法大學自主招生個人陳述的風格與語氣
- 中外航海文化知到課后答案智慧樹章節測試答案2025年春中國人民解放軍海軍大連艦艇學院
- 行政復議法-形考作業2-國開(ZJ)-參考資料
- 診所中藥飲片清單
- AOI直通率持續提升報告
- 財綜[2001]94號
評論
0/150
提交評論