以太坊开发-geth入门【通俗易懂】
以太坊开发--geth入门【通俗易懂】 geth全称go-ethereum,是用go语言编写的以太坊客户端,应该是目前最常用的客户端。 当然,以太坊客户端也是用C++、Ruby、Python、Java等语言编写的。 不同类型的客户端是为了满足不同的需求场景而设计的。 今天主要介绍geth(读音与guess相同)的使用。 对于我们的开发来说以太坊批量转账教程,打开geth控制台一般有两种方式,开发模式登录和私链模式登录。这两种方式是完全不同的
大家好,我是建筑先生,一个会写代码会吟诗的架构师。 今天我就来说说以太坊的发展--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)日志文件上面说了,我们重新打开一个终端,我们使用如下命令打开日志:
尾巴-f file_to_log_output
这个终端界面我们先放一边,在geth控制台进行任何操作的时候,都可以来这里查看日志。
(7) 在geth控制台开始挖矿:
miner.start()
观察日志输出:
可以看到日志界面已经显示挖矿了。
(8) 停止挖矿
矿工。 停止()
这时候你也可以看到日志界面的输出也停止了。
(9)此时我们来查看一下两个账户的账户余额
可以看出,挖矿获得的以太币默认转入第一个账户。
(10) user1 将以太币转给 user2
eth.sendTransaction({from: user1,to: user2,value: web3.toWei(3,"ether")})
提示我们账号被锁了,需要解锁账号。
账户解锁后,转账成功。 打印出来的是这笔交易的地址。
(11) 以太转账后查看user2账户余额
.
但是发现user2的账号还是0,这是因为没有矿工可以挖了。 根据区块链的概念,我们知道每笔交易的确认其实都需要挖矿,也就是经过其他矿工的共识确认后才能加入到区块链的账本中。
OK,我们执行“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; } }"
然后编译合约:
合同 = eth.compile.solidity(source).test
编译结果如下:
code:是合约编译后的字节码文件,是运行在以太坊虚拟机EVM上的字节码;
abiDefinition:其实就是合约的二进制接口,可以供外部调用;
其他一些参数也有名称。
然后需要获取合约的abi(其实应该用的abi可以通过这个在线编译器获取):
abi=[{"常量":false,"输入":[{"名称":"a","类型":"uint256"}],"名称":"乘法","输出":[{"名称":"d","type":"uint256"}],"payable":false,"type":"function"}]
然后访问abi接口:
MyContract=eth.contract(abi)
然后获取合约实例:
myContract=MyContract.new({from:user1,data:contract.code})
如果提示未解锁,解锁即可。
调用函数传递参数
.
该函数执行乘以 7 的操作,输出符合预期。 合约执行成功。
以上就是geth最基本的使用。 我们会在以后的开发中学习geth更深入的功能。