在前面几章,我们简单的在本地搭建了以太坊的测试网络。需要的小伙伴们可以看一下之前的那篇:搭建测试网络之ubuntu系统安装geth客户端以及同步区块数据,现在的问题是搭建完之后,该如何进行操作呢?
下面将会在javascript控制台上给出一个完整的交易流程。
1、打开geth客户端
geth --datadir '/data/ethereum/block_data' attach ipc:/data/ethereum/block_data/geth.ipc
//第一是指定节点的位置,第二是指定ipc的位置,大家根据自己同步区块的目录改一下就可以
2、关于geth客户端
geth控制台中内置了一些对象,通过这些对象,我们可以很方便的和以太坊进行交互,这些内置对象包括:
eth:提供了操作区块链相关的方法
net:提供了查看p2p网络状态的方法
admin:提供了管理节点相关的方法
miner:提供了启动和停止挖矿的方法
personal:提供了管理账户的方法
txpool:提供了查看交易内存池的方法
web3:除了包含以上对象中有的方法,还包含一些单位换算的方法
我们接下来的操作就是依据上面那些内置对象来操作的。
3、新建账户
personal.newAccount('123456'); 传入的参数是密码,返回的是账户的公钥。账户文件在keystore文件中
这里我们也可以使用geth命令创建账号:
geth --datadir '/data' account new :紧接着会让输入密码 ,这个--datadir是指自己geth客户端的文件目录
geth --datadir '/data' account list :查看当前已有的账户
geth --datadir '/data' account update '公钥地址' : 修改密码。输入此命令后,会要求输入两次新命令
在学习的过程中,博主发现通过javascript控制台和通过以太坊的cli控制台命令是不同的。这里主要是讲解javascript控制台的。有关geth控制台的命令,可以参考博客:
以太坊开发文档06 - 以太坊基本命令操作
4、查看刚生成的账户
eth.accounts
//返回的是一个数组,里面是账户公钥 ["xxxxx","xxxxxxx"]
//这里的公钥指的是一串加密的hash。大家可以进入自己目录下的keystore文件瞎查看
5、查看账户的余额
balance = web3.fromWei(eth.getBalance(eth.accounts[0]),"ether");
//获取余额:eth.getBalance(); 参入的参数是账户的地址
//转换单位:因为默认的单位是wei,所以我们这里要转换成以太币(ether)的格式
//1Ether=10^18Wei
6、关于挖矿
这里进行挖矿的原因是因为这个新账户是没有钱的。
1、miner.setEtherbase(eth.account[0]); 设置挖矿的地址,传入参数是账户公钥。返回布尔值
2、eth.coinbase 返回挖矿奖励地址,设置成功的话,就会返回我们的账户公钥地址3
3、miner.start(1); 开启挖矿,传入的参数是线程数,表示可以开启几个线程来挖矿
4、miner.stop(); 停止挖矿
7、解锁账户
挖矿之后,我们就可以进行转账交易。但是新建的账户默认都是被锁定的状态,因此需要解锁:
personal.unlockAccount(eth.account[0],'123456');
传入参数:1、账号的公钥
:2、账号的密码
返回:bool值
8、开始转账交易
eth.sendTransaction({
from:eth.accounts[0], //交易的发起地址
to:eth.accounts[1], //接收交易的地址
value:web3.toWei(1,"ether"); //交易的金额,这里是转换成了以太币的方式
});
//转账交易完成之后,会返回一个hash值,此时的交易正在旷工的交易池中等待打包。
9、查看交易池中被打包的交易
这个时候我们查看交易池等待被打包的交易:
txpool.status
{
pending:1, //pending表示已提交但未被处理的交易
queued:0
}
我们也可以查看pending交易的详情:
txpool.inspect.pending; 返回pending交易的详情
10、为了使交易成功,必须进行挖矿
以太坊是一个基于交易的状态机。换句话说,在两个不同账户之间发生的交易才让以太坊全球状态从一个状态转换成另一个状态。为了让一个状态转换成下一个状态,交易必须是有效的。为了让一个交易被认为是有效的,它必须要经过一个验证过程,此过程也就是挖矿。挖矿就是一组节点(即电脑)用它们的计算资源来创建一个包含有效交易的区块出来。
所以我们要明白,通过挖矿促进交易,挖到一个区块就可以停下来了。此时交易已经被成功打包,并且加入到区块链中。
此时再查看余额,我们会发现转账已经成功
11、查看交易状态
(1)、查看我们挖到的区块的内容
eth.getTransaction("hash"); 这里的hash就是我们发起交易之后返回的那个hash值
返回的关键信息:
blockHash 交易所在区块的哈希值。当这个区块处于pending时将会返回null
blockNumber 交易所在区块的块号。当这个区块处于pending时将返回null
from:交易发起者的地址
gas;交易发起者提供的gas数量
gasPrice:交易发起者提供的gas单价,单位是wei
hash:交易的hash值
input:交易附带的数据
nonce:交易发起者在之前发起过的交易数量。。(比如发起者之前已经交易过20次,则nonce为20)
transactionIndex:交易在区块中的序号。当这个区块处于pending时会返回null
value:交易附带的货币量 单位为wei
to: 交易接受者的地址
(2)、查看详细信息
eth.getTransactionReceipt('hash'); //查看交易被打包进区块的详细信息
以上就是一个简单的转账流程。通过javascript控制台和通过以太坊的CLI控制台操作命令虽然不同,但作用是一样的。在测试阶段,通过控制台操作命令还是挺简单的。如果是要部署智能合约或者需要些自己的逻辑部分的话,用web3.js是更好的选择。
end