以太坊的智能合約存儲在哪裡?
最近在學習區塊鏈,了解到以太坊這個平台,想問下使用以太坊開發和使用傳統方式開發部署應用有什麼區別?以太坊的智能合約會存儲在哪裡?如果部署的戒掉宕機還能提供服務嗎?謝謝
以太坊是一個分散式的公鏈,由很多台電腦組網而成,每台接入這個網路的電腦本地都會保存一份完整區塊鏈(可理解為一個本地資料庫,多個文件組成)。這些組網的電腦中有一些節點電腦擔任所謂的礦工,礦工負責將所有這個網路上的交易打包成一個小區塊,然後分發到所有的節點(包括你的電腦),這些小區塊就構成了剛才前面所說的區塊鏈。
智能合約可以簡單的理解為一段可執行的程序片段,具體的代碼由發布人使用特定的編程語言來編寫(以太坊使用的是Solidity編程語言,類似JavaScript),在本地編譯成功後可以發布到區塊鏈上。而以太坊的智能合約也可以理解為一個特殊的交易(包括可執行代碼的),被發送出去後會被礦工打包記錄在某一個區塊中,當需要調用這個智能合約的方法時只需要向這個智能合約的地址發送一筆交易即可。
每個節點電腦都需要安裝以太坊客戶端,而這個以太坊客戶端自帶了EVM,一個以太坊智能合約的執行環境,類似JVM一樣,通過交易觸發智能合約後智能合約的代碼就會在EVM中執行了。這種方式相當於把程序部署到了非常非常多的電腦上(只要這個電腦安裝了以太坊客戶端並接入了以太坊網路),隨時都可以通過交易來觸發這些智能合約的執行,也從而完成了分散式程序的部署和調用。
當然,目前智能合約的功能還非常有限,不能完成所有的現在編程可以解決的事情(比如訪問網路下載文件,這個是目前EVM不允許和不支持的)。但這並不妨礙以太坊和智能合約技術的發展,以及有可能成為下一代互聯網基礎設施和協議的可能!
合約代碼是存儲在區塊鏈中的,並且是在accountstate中的codehash指向的一塊存儲區域中。
部署在區塊鏈上,去中心化的,很多節點。除非區塊鏈網路完蛋了,否則不用擔心這個問題。
實際的數據和邏輯代碼是存儲於所有運行全節點的電腦上,這些全節點數據都是一樣的(實時同步的),只要還有一個全節點在運行你的代碼都可以訪問,只要還有一個礦工在挖礦,你的程序就可以運行。說區塊鏈0宕機就是在這種假設之上的,其實區塊鏈在沒一個節點運行的時候沒有礦工的時候也會宕機的。
按照合約地址存在區塊鏈上
推薦閱讀:
TAG:區塊鏈Blockchain | 以太坊 |