以太坊是什么丨以太坊開發入門指南
成都創新互聯堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都做網站、成都網站制作、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的崇禮網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
很多同學已經躍躍欲試投入到區塊鏈開發隊伍當中來,可是又感覺無從下手,本文將基于以太坊平臺,以通俗的方式介紹以太坊開發中涉及的各晦澀的概念,輕松帶大家入門。
以太坊是什么
以太坊(Ethereum)是一個建立在區塊鏈技術之上, 去中心化應用平臺。它允許任何人在平臺中建立和使用通過區塊鏈技術運行的去中心化應用。
對這句話不理解的同學,姑且可以理解為以太坊是區塊鏈里的Android,它是一個開發平臺,讓我們就可以像基于Android Framework一樣基于區塊鏈技術寫應用。
在沒有以太坊之前,寫區塊鏈應用是這樣的:拷貝一份比特幣代碼,然后去改底層代碼如加密算法,共識機制,網絡協議等等(很多山寨幣就是這樣,改改就出來一個新幣)。
以太坊平臺對底層區塊鏈技術進行了封裝,讓區塊鏈應用開發者可以直接基于以太坊平臺進行開發,開發者只要專注于應用本身的開發,從而大大降低了難度。
目前圍繞以太坊已經形成了一個較為完善的開發生態圈:有社區的支持,有很多開發框架、工具可以選擇。
智能合約
什么是智能合約
以太坊上的程序稱之為智能合約, 它是代碼和數據(狀態)的集合。
智能合約可以理解為在區塊鏈上可以自動執行的(由事件驅動的)、以代碼形式編寫的合同(特殊的交易)。
在比特幣腳本中,我們講到過比特幣的交易是可以編程的,但是比特幣腳本有很多的限制,能夠編寫的程序也有限,而以太坊則更加完備(在計算機科學術語中,稱它為是“圖靈完備的”),讓我們就像使用任何高級語言一樣來編寫幾乎可以做任何事情的程序(智能合約)。
智能合約非常適合對信任、安全和持久性要求較高的應用場景,比如:數字貨幣、數字資產、投票、保險、金融應用、預測市場、產權所有權管理、物聯網、點對點交易等等。
目前除數字貨幣之外,真正落地的應用還不多(就像移動平臺剛開始出來一樣),相信1到3年內,各種殺手級會慢慢出現。
編程語言:Solidity
智能合約的默認的編程語言是Solidity,文件擴展名以.sol結尾。
Solidity是和JavaScript相似的語言,用它來開發合約并編譯成以太坊虛擬機字節代碼。
還有長像Python的智能合約開發語言:Serpent,不過建議大家還是使用Solidity。
Browser-Solidity是一個瀏覽器的Solidity IDE, 大家可以點進去看看,以后我們更多文章介紹Solidity這個語言。
運行環境:EVM
EVM(Ethereum Virtual Machine)以太坊虛擬機是以太坊中智能合約的運行環境。
Solidity之于EVM,就像之于跟JVM的關系一樣,這樣大家就容易理解了。
以太坊虛擬機是一個隔離的環境,在EVM內部運行的代碼不能跟外部有聯系。
而EVM運行在以太坊節點上,當我們把合約部署到以太坊網絡上之后,合約就可以在以太坊網絡中運行了。
合約的編譯
以太坊虛擬機上運行的是合約的字節碼形式,需要我們在部署之前先對合約進行編譯,可以選擇Browser-Solidity Web IDE或solc編譯器。
合約的部署
在以太坊上開發應用時,常常要使用到以太坊客戶端(錢包)。平時我們在開發中,一般不接觸到客戶端或錢包的概念,它是什么呢?
以太坊客戶端(錢包)
以太坊客戶端,其實我們可以把它理解為一個開發者工具,它提供賬戶管理、挖礦、轉賬、智能合約的部署和執行等等功能。
EVM是由以太坊客戶端提供的。
Geth是典型的開發以太坊時使用的客戶端,基于Go語言開發。 Geth提供了一個交互式命令控制臺,通過命令控制臺中包含了以太坊的各種功能(API)。Geth的使用我們之后會有文章介紹,這里大家先有個概念。
Geth控制臺和Chrome瀏覽器開發者工具里的面的控制臺是類似,不過是跑在終端里。
相對于Geth,Mist則是圖形化操作界面的以太坊客戶端。
如何部署
智能合約的部署是指把合約字節碼發布到區塊鏈上,并使用一個特定的地址來標示這個合約,這個地址稱為合約賬戶。
以太坊中有兩類賬戶:
· 外部賬戶
該類賬戶被私鑰控制(由人控制),沒有關聯任何代碼。
· 合約賬戶
該類賬戶被它們的合約代碼控制且有代碼與之關聯。
和比特幣使用UTXO的設計不一樣,以太坊使用更為簡單的賬戶概念。
兩類賬戶對于EVM來說是一樣的。
外部賬戶與合約賬戶的區別和關系是這樣的:一個外部賬戶可以通過創建和用自己的私鑰來對交易進行簽名,來發送消息給另一個外部賬戶或合約賬戶。
在兩個外部賬戶之間傳送消息是價值轉移的過程。但從外部賬戶到合約賬戶的消息會激活合約賬戶的代碼,允許它執行各種動作(比如轉移代幣,寫入內部存儲,挖出一個新代幣,執行一些運算,創建一個新的合約等等)。
只有當外部賬戶發出指令時,合同賬戶才會執行相應的操作。
合約部署就是將編譯好的合約字節碼通過外部賬號發送交易的形式部署到以太坊區塊鏈上(由實際礦工出塊之后,才真正部署成功)。
運行
合約部署之后,當需要調用這個智能合約的方法時只需要向這個合約賬戶發送消息(交易)即可,通過消息觸發后智能合約的代碼就會在EVM中執行了。
Gas
和云計算相似,占用區塊鏈的資源(不管是簡單的轉賬交易,還是合約的部署和執行)同樣需要付出相應的費用(天下沒有免費的午餐對不對!)。
以太坊上用Gas機制來計費,Gas也可以認為是一個工作量單位,智能合約越復雜(計算步驟的數量和類型,占用的內存等),用來完成運行就需要越多Gas。
任何特定的合約所需的運行合約的Gas數量是固定的,由合約的復雜度決定。
而Gas價格由運行合約的人在提交運行合約請求的時候規定,以確定他愿意為這次交易愿意付出的費用:Gas價格(用以太幣計價) * Gas數量。
Gas的目的是限制執行交易所需的工作量,同時為執行支付費用。當EVM執行交易時,Gas將按照特定規則被逐漸消耗,無論執行到什么位置,一旦Gas被耗盡,將會觸發異常。當前調用幀所做的所有狀態修改都將被回滾, 如果執行結束還有Gas剩余,這些Gas將被返還給發送賬戶。
如果沒有這個限制,就會有人寫出無法停止(如:死循環)的合約來阻塞網絡。
因此實際上(把前面的內容串起來),我們需要一個有以太幣余額的外部賬戶,來發起一個交易(普通交易或部署、運行一個合約),運行時,礦工收取相應的工作量費用。
以太坊網絡
有些著急的同學要問了,沒有以太幣,要怎么進行智能合約的開發?可以選擇以下方式:
選擇以太坊官網測試網絡Testnet
測試網絡中,我們可以很容易獲得免費的以太幣,缺點是需要發很長時間初始化節點。
使用私有鏈
創建自己的以太幣私有測試網絡,通常也稱為私有鏈,我們可以用它來作為一個測試環境來開發、調試和測試智能合約。
通過上面提到的Geth很容易就可以創建一個屬于自己的測試網絡,以太幣想挖多少挖多少,也免去了同步正式網絡的整個區塊鏈數據。
使用開發者網絡(模式)
相比私有鏈,開發者網絡(模式)下,會自動分配一個有大量余額的開發者賬戶給我們使用。
使用模擬環境
另一個創建測試網絡的方法是使用testrpc,testrpc是在本地使用內存模擬的一個以太坊環境,對于開發調試來說,更方便快捷。而且testrpc可以在啟動時幫我們創建10個存有資金的測試賬戶。
進行合約開發時,可以在testrpc中測試通過后,再部署到Geth節點中去。
更新:testrpc 現在已經并入到Truffle 開發框架中,現在名字是Ganache CLI。
Dapp:去中心化的應用程序
以太坊社區把基于智能合約的應用稱為去中心化的應用程序(DecentralizedApp)。如果我們把區塊鏈理解為一個不可篡改的數據庫,智能合約理解為和數據庫打交道的程序,那就很容易理解Dapp了,一個Dapp不單單有智能合約,比如還需要有一個友好的用戶界面和其他的東西。
Truffle
Truffle是Dapp開發框架,他可以幫我們處理掉大量無關緊要的小事情,讓我們可以迅速開始寫代碼-編譯-部署-測試-打包DApp這個流程。
總結
我們現在來總結一下,以太坊是平臺,它讓我們方便的使用區塊鏈技術開發去中心化的應用,在這個應用中,使用Solidity來編寫和區塊鏈交互的智能合約,合約編寫好后之后,我們需要用以太坊客戶端用一個有余額的賬戶去部署及運行合約(使用Truffle框架可以更好的幫助我們做這些事情了)。為了開發方便,我們可以用Geth或testrpc來搭建一個測試網絡。
注:本文中為了方便大家理解,對一些概念做了類比,有些嚴格來不是準確,不過我也認為對于初學者,也沒有必要把每一個概念掌握的很細致和準確,學習是一個逐步深入的過程,很多時候我們會發現,過一段后,我們會對同一個東西有不一樣的理解。
以太坊的礦機還是很不錯的,這一款礦機是實體礦機,安全性很高的。中本聰以一己之力奠定了比特幣的理論基礎,而以太坊,不僅站在了比特幣的基石之上,還用比特幣眾籌的方式,一方面儲備了足夠的啟動資金,另一方面還積累了廣大的種子用戶群,更重要的是贏得了來自全球的關注和期待,相對于比特幣早期的默默無聞,以太坊簡直就是含著金鑰匙出生的世家子弟,可以說真正贏在了起跑線上。以太坊采用多種編程語言實現協議,Go語言寫的客戶端作為默認客戶端。在多編程語言競爭的環境下,獲得了最符合規劃思想的成品。
在這個章節中我們會介紹如何用Go來編譯,部署,寫入和讀取智能合約。
與智能合約交互,我們要先生成相應智能合約的應用二進制接口ABI(application binary interface),并把ABI編譯成我們可以在Go應用中調用的格式。
第一步是安裝 Solidity編譯器 ( solc ).
Solc 在Ubuntu上有snapcraft包。
Solc在macOS上有Homebrew的包。
其他的平臺或者從源碼編譯的教程請查閱官方solidity文檔 install guide .
我們還得安裝一個叫 abigen 的工具,來從solidity智能合約生成ABI。
假設您已經在計算機上設置了Go,只需運行以下命令即可安裝 abigen 工具。
我們將創建一個簡單的智能合約來測試。 學習更復雜的智能合約,或者智能合約的開發的內容則超出了本書的范圍。 我強烈建議您查看 truffle framework 來學習開發和測試智能合約。
這里只是一個簡單的合約,就是一個鍵/值存儲,只有一個外部方法來設置任何人的鍵/值對。 我們還在設置值后添加了要發出的事件。
雖然這個智能合約很簡單,但它將適用于這個例子。
現在我們可以從一個solidity文件生成ABI。
它會將其寫入名為“Store_sol_Store.abi”的文件中
現在讓我們用 abigen 將ABI轉換為我們可以導入的Go文件。 這個新文件將包含我們可以用來與Go應用程序中的智能合約進行交互的所有可用方法。
為了從Go部署智能合約,我們還需要將solidity智能合約編譯為EVM字節碼。 EVM字節碼將在事務的數據字段中發送。 在Go文件上生成部署方法需要bin文件。
現在我們編譯Go合約文件,其中包括deploy方法,因為我們包含了bin文件。
在接下來的課程中,我們將學習如何部署智能合約,然后與之交互。
Commands
Store.sol
solc version used for these examples
如果你還沒看之前的章節,請先學習 編譯智能合約的章節 因為這節內容,需要先了解如何將智能合約編譯為Go文件。
假設你已經導入從 abigen 生成的新創建的Go包文件,并設置ethclient,加載您的私鑰,下一步是創建一個有配置密匙的交易發送器(tansactor)。 首先從go-ethereum導入 accounts/abi/bind 包,然后調用傳入私鑰的 NewKeyedTransactor 。 然后設置通常的屬性,如nonce,燃氣價格,燃氣上線限制和ETH值。
如果你還記得上個章節的內容, 我們創建了一個非常簡單的“Store”合約,用于設置和存儲鍵/值對。 生成的Go合約文件提供了部署方法。 部署方法名稱始終以單詞 Deploy 開頭,后跟合約名稱,在本例中為 Store 。
deploy函數接受有密匙的事務處理器,ethclient,以及智能合約構造函數可能接受的任何輸入參數。我們測試的智能合約接受一個版本號的字符串參數。 此函數將返回新部署的合約地址,事務對象,我們可以交互的合約實例,還有錯誤(如果有)。
就這么簡單:)你可以用事務哈希來在Etherscan上查詢合約的部署狀態:
Commands
Store.sol
contract_deploy.go
solc version used for these examples
這寫章節需要了解如何將智能合約的ABI編譯成Go的合約文件。如果你還沒看, 前先讀 上一個章節 。
一旦使用 abigen 工具將智能合約的ABI編譯為Go包,下一步就是調用“New”方法,其格式為“Newcontractname style="box-sizing: border-box; font-size: 16px; -ms-text-size-adjust: auto; -webkit-tap-highlight-color: transparent;"”,所以在我們的例子中如果你 回想一下它將是 NewStore 。 此初始化方法接收智能合約的地址,并返回可以開始與之交互的合約實例。/contractname
Commands
Store.sol
contract_load.go
solc version used for these examples
這寫章節需要了解如何將智能合約的ABI編譯成Go的合約文件。如果你還沒看, 前先讀 上一個章節 。
在上個章節我們學習了如何在Go應用程序中初始化合約實例。 現在我們將使用新合約實例提供的方法來閱讀智能合約。 如果你還記得我們在部署過程中設置的合約中有一個名為 version 的全局變量。 因為它是公開的,這意味著它們將成為我們自動創建的getter函數。 常量和view函數也接受 bind.CallOpts 作為第一個參數。了解可用的具體選項要看相應類的 文檔 一般情況下我們可以用 nil 。
Commands
Store.sol
contract_read.go
solc version used for these examples
這寫章節需要了解如何將智能合約的ABI編譯成Go的合約文件。如果你還沒看, 前先讀 上一個章節 。
寫入智能合約需要我們用私鑰來對交易事務進行簽名。
我們還需要先查到nonce和燃氣價格。
接下來,我們創建一個新的keyed transactor,它接收私鑰。
然后我們需要設置keyed transactor的標準交易選項。
現在我們加載一個智能合約的實例。如果你還記得 上個章節 我們創建一個名為 Store 的合約,并使用 abigen 工具生成一個Go文件。 要初始化它,我們只需調用合約包的 New 方法,并提供智能合約地址和ethclient,它返回我們可以使用的合約實例。
我們創建的智能合約有一個名為 SetItem 的外部方法,它接受solidity“bytes32”格式的兩個參數(key,value)。 這意味著Go合約包要求我們傳遞一個長度為32個字節的字節數組。 調用 SetItem 方法需要我們傳遞我們之前創建的 auth 對象(keyed transactor)。 在幕后,此方法將使用它的參數對此函數調用進行編碼,將其設置為事務的 data 屬性,并使用私鑰對其進行簽名。 結果將是一個已簽名的事務對象。
現在我就可以看到交易已經成功被發送到了以太坊網絡了:
要驗證鍵/值是否已設置,我們可以讀取智能合約中的值。
搞定!
Commands
Store.sol
contract_write.go
solc version used for these examples
有時您需要讀取已部署的智能合約的字節碼。 由于所有智能合約字節碼都存在于區塊鏈中,因此我們可以輕松獲取它。
首先設置客戶端和要讀取的字節碼的智能合約地址。
現在你需要調用客戶端的 codeAt 方法。 codeAt 方法接受智能合約地址和可選的塊編號,并以字節格式返回字節碼。
你也可以在etherscan上查詢16進制格式的字節碼
contract_bytecode.go
首先創建一個ERC20智能合約interface。 這只是與您可以調用的函數的函數定義的契約。
然后將interface智能合約編譯為JSON ABI,并使用 abigen 從ABI創建Go包。
假設我們已經像往常一樣設置了以太坊客戶端,我們現在可以將新的 token 包導入我們的應用程序并實例化它。這個例子里我們用 Golem 代幣的地址.
我們現在可以調用任何ERC20的方法。 例如,我們可以查詢用戶的代幣余額。
我們還可以讀ERC20智能合約的公共變量。
我們可以做一些簡單的數學運算將余額轉換為可讀的十進制格式。
同樣的信息也可以在etherscan上查詢:
Commands
erc20.sol
contract_read_erc20.go
solc version used for these examples
區塊鏈-什么是區塊鏈?金點幣訊能讀懂區塊鏈?
區塊先鋒動畫視頻帶你了解什么是區塊鏈,簡單易懂
什么是區塊鏈,卯貝屬于區塊鏈?
答:卯貝不是屬于區塊鏈,只是運用了區塊鏈的技術,區塊鏈的特性就是每件發生的事物都會被記錄,不得刪除更改。
區塊鏈,什么是區塊
區塊鏈全面解讀
一說起區塊鏈,人們總是拿它與比特幣相提并論。 2008年10月31日,一名叫“中本聰”的人在一個密碼學郵件群組中發出電子郵件,宣稱,“我一直在研究一個新的電子現金系統,這完全是點對點的,無需任何可信的第三方。 ”他推出了一個以比特幣為交易貨幣的新體系。
什么是區塊鏈技術?什么叫區塊鏈?
區塊鏈是一種分布式共享記賬的技術,它要做的事情就是讓參與的各方能夠在技術層面建立信任關系。
區塊鏈可以大致分成兩個層面,一是做區塊鏈底層技術;二是做區塊鏈上層應用,即基于區塊鏈的改造、優化或者創新應用。
區塊鏈的核心意義到底是什么,我們的理解是,區塊鏈最核心的意義是參與方之間建立數據信用,通過單方面的對抗,在明確規定下打造單方面的生態共同保障完整機會,這是一個體系,這種建立可以結束沒有區塊鏈之前的問題,沒有區塊鏈之前,在數據共享的時候是無法做到有新的共享,即使做定向也只是給你一個接口,區塊鏈有了以后,讓參與方是實現信用的共享。
區塊鏈的底層平臺有哪些?
答:主要有一下幾類:
1、比特幣。是最早的區塊鏈開發便是基于比特幣的區塊鏈網絡進行開發了,由于比特幣是全球最廣泛使用和真正意義的去中心化,就區塊鏈應用來說,比特幣就是世上最強大的錨,擁有最大的權威性。
2、以太坊??梢哉f除了比特幣外,以太坊目前在區塊鏈平臺是最吸引眼球的。 以太坊是一個圖靈完備的區塊鏈一站式開發平臺,采用多種編程語言實現協議,采用Go語言寫的客戶端作為默認客戶端(即與以太坊網絡交互的方法, 支持其他多種語言的客戶端)。
3、IBM HyperLedger 。又叫 fabric,他的目標是打造成一個由全社會來共同維護的一個超級賬本,fabric源于IBM,初衷為了服務于工業生產,IBM將44,000行代碼開源,是了不起的貢獻,讓我們可以有機會如此近的去探究區別于比特幣的區塊鏈的原理。
4、LISK。是新一代的區塊鏈平臺,允許JavaScript(又是Javascript技術,工程師們注意了)的開發和基于分布的分散的應用程序使用一個易于使用的,功能齊全的生態區塊鏈系統。
5、網錄區塊鏈平臺。是網錄區塊鏈底層技術的研發成果和能夠進行商業交付的基礎平臺,網錄區塊鏈平臺除了服務網錄公鏈外,也是網錄為客戶打造私有鏈和聯盟鏈的基礎平臺。
什么是區塊鏈?什么是數字貨幣的區塊鏈?
狹義來講,區塊鏈是一種按照時間順序將數據區塊以順序相連的方式組合成的一 種鏈式數據結構, 并以密碼學方式保證的不可篡改和不可偽造的分布式賬本。廣義來講,區塊鏈技術是利用塊鏈式數據結構來驗證與存儲數據、利用分布式節點共識算法來生成和更新數據、利用密碼學的方式保證數據傳輸和訪問的安全、利用由自動化腳本代碼組成的智能合約來編程和操作數 據的一種全新的分布式基礎架構與計算范式。
現在,主流的數字貨幣基本上都是基于區塊鏈技術開發的。區塊鏈是數字貨幣的底層技術。國內的茶本位數字貨幣普銀就是基于區塊鏈技術開發的。
什么是區塊鏈
區塊鏈的本質是一種去中心化的記賬系統,比特幣是這個系統上承載的“以數字形式存在”的貨幣。區塊鏈是比特幣背后的一套由信用記錄和信用記錄的清算構成的體系。
區塊鏈是分布式數據存儲、點對點傳輸、共識機制、加密算法等計算機技術的新型應用模式。所謂共識機制是區塊鏈系統中實現不同節點之間建立信任、獲取權益的數學算法 [1] 。
區塊鏈(Blockchain)是比特幣的一個重要概念,火幣網聯合清華大學五道口金融學院互聯網金融實驗室、新浪科技發布的《2014—2016全球比特幣發展研究報告》提到區塊鏈是比特幣的底層技術和基礎架構 [2] 。它本質上是一個去中心化的數據庫,同時作為比特幣的底層技術。區塊鏈是一串使用密碼學方法相關聯產生的數據塊,每一個數據塊中包含了一次比特幣網絡交易的信息,用于驗證其信息的有效性(防偽)和生成下一個區塊
區塊鏈的進化方式是:
? 區塊鏈1.0——數字貨幣
? 區塊鏈2.0——數字資產與智能合約
? 區塊鏈3.0——IFMChain,區塊鏈正式鏈接移動終端
網頁標題:以太坊go語言寫的 以太坊 語言
分享URL:http://m.kartarina.com/article46/dogeihg.html
成都網站建設公司_創新互聯,為您提供面包屑導航、自適應網站、虛擬主機、定制開發、動態網站、品牌網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯