以太坊开发--geth的使⽤⼊门
geth的全称是-ethereum,是⼀个以太坊客户端,⽤go语⾔编写,应该是⽬前最常⽤的客户端。当然以太坊客户端还有⽤C++,Ruby,,等其他多种语⾔编写的,不同类型的客户端是为了满⾜不同的需求场景。今天我们主要来介绍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)创建⼀个新账户
我们这⾥创建两个账户。再使⽤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: Wei(3,"ether")})
提⽰我们账号是锁定的,所以我们需要解锁账户。
解锁账户后,转移操作就成功了。打印出来的是本次交易的地址。
(11)再次查看以太币转移后的user2账户余额
但是发现user2的账户还是为0.这是因为没有矿⼯来挖矿处理。根据的概念,我们知道,每次交易的确认,其实都是需要挖矿的,也就是被其他矿⼯共识确认,然后才能加⼊区块链的账本中。
好,我们执⾏“miner.start()”开始挖矿,
.
然后就发现账户user2有3个以太币了。转账操作成功。
(12)下⾯我们来实现下在geth 中编译⼀个合约
在geth 中执⾏如下:
source = "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"
然后编译该合约:
contract = ethpile.solidity(source).test
编译后的结果如下:
code :就是合约编译后的字节码⽂件,在以太坊虚拟机EVM 上运⾏的就是这个字节码;
abiDefinition:其实就是合约的⼆进制接⼝,可⽤来外部调⽤;
其他的⼀些参数也都是可以见名知意了。
abi=[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"type":"function"}]然后是访问abi 接⼝:
act(abi)
然后获得合约的实例:
w({from:user1,de})
如果提⽰你没有解锁的话,只要解锁即可。
调⽤函数传递参数
solidity
函数做了乘以7的操作,输出符合预期。合约执⾏成功。
以上就是对geth 最基本的运⽤,我们会在以后的开发中学习geth 更为深⼊的功能。[plain]
01. 02. 03. 04. 05.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。