以太坊开发--geth的使用入门
? ? ? ?geth的全稱是go-ethereum,是一個以太坊客戶端,用go語言編寫,應該是目前最常用的客戶端。當然以太坊客戶端還有用C++,Ruby,Python,Java等其他多種語言編寫的,不同類型的客戶端是為了滿足不同的需求場景。今天我們主要來介紹geth(發音同guess )的使用。
? ? ? 對于我們開發來說,比較普遍有兩種方式打開geth控制臺,以開發方式登錄和私鏈方式登錄。這兩種方式是完全不同的,兩者的賬戶也是不共用的,其中以開發方式登錄相對比較簡單,以私鏈方式登錄還需要進行額外的配置,我會在后面的博客進行介紹。
(1)打開終端Terminal,執行以下命令,以開發方式啟動geth
geth ?--datadir “~/ethdev” --dev?
這會在當前根目錄下創建一個ethdev文件夾,當然這個文件夾的名稱你可以自己取,我們暫且不管這個文件夾是干嘛用的,后面會進行介紹。
(2)geth啟動成功后,重新開一個終端,執行以下命令,打開geth控制臺:
geth --dev console 2>>file_to_log_output
該命令會打開geth控制臺,同時在目錄下生成一個叫做file_to_log_output的日志文件,等下我們會來查看這個日志文件。
(3)查看當前有哪些賬戶
eth.accounts
.
可見當前沒有任何賬戶。
(4)創建一個新賬戶
personal.newAccount(‘密碼')
我們這里創建兩個賬戶。再使用eth.accounts查看賬戶:
就發現有兩個賬戶了。
(5)可以把賬戶賦值給某一個變量,同時查詢賬戶中的余額
可以看到兩個賬戶中的以太幣都是0.因為我們還沒有啟動挖礦。
(6)上面提到過日志文件,我們再重開一個終端,我們使用以下命令打開日志:
tail -f file_to_log_output
我們把這個終端界面放在一邊,等下在geth控制臺中有任何操作時,都可以來這邊看看日志。
(7)在geth控制臺中啟動挖礦:
miner.start()
來觀察日志輸出:
可以看到在日志界面中已經顯示在挖礦了。
(8)停止挖礦
miner.stop()
此時也可以看到日志界面輸出也停止了。
(9)此時我們再來查看兩個賬戶的賬戶余額
由此可見,挖礦所得的以太幣默認是傳入第一個賬戶的。
(10)user1向user2轉移以太幣
eth.sendTransaction({from: user1,to: user2,value: web3.toWei(3,"ether")})
提示我們賬號是鎖定的,所以我們需要解鎖賬戶。
解鎖賬戶后,轉移操作就成功了。打印出來的是本次交易的地址。
(11)再次查看以太幣轉移后的user2賬戶余額
。
但是發現user2的賬戶還是為0.這是因為沒有礦工來挖礦處理。根據區塊鏈的概念,我們知道,每次交易的確認,其實都是需要挖礦的,也就是被其他礦工共識確認,然后才能加入區塊鏈的賬本中。
好,我們執行“miner.start()”開始挖礦,
.
然后就發現賬戶user2有3個以太幣了。轉賬操作成功。
(12)下面我們來實現下在geth中編譯一個智能合約
contract test {function multiply(uint a) returns(uint d) {return a * 7; } }在geth中執行如下:source = "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"
然后編譯該合約:
contract = eth.compile.solidity(source).test
編譯后的結果如下:
code:就是合約編譯后的字節碼文件,在以太坊虛擬機EVM上運行的就是這個字節碼;
abiDefinition:其實就是合約的二進制接口,可用來外部調用;
其他的一些參數也都是可以見名知意了。
然后就要獲取合約的abi(其實該真正要用的abi可以通過https://ethereum.github.io/browser-solidity這個在線編譯器獲得):
abi=[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"type":"function"}]
然后是訪問abi接口:
MyContract=eth.contract(abi)
然后獲得合約的實例:
myContract=MyContract.new({from:user1,data:contract.code})
如果提示你沒有解鎖的話,只要解鎖即可。
調用函數傳遞參數
。
函數做了乘以7的操作,輸出符合預期。合約執行成功。
?
? ? ? 以上就是對geth最基本的運用,我們會在以后的開發中學習geth更為深入的功能。
總結
以上是生活随笔為你收集整理的以太坊开发--geth的使用入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSM+Vue+Element-UI实现
- 下一篇: hdu 2853