以太坊私链搭建

Window上安装ubuntu系统搭建私有链操作步骤
 
 

modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

 
前提是 geth 已经安装,可以参考上一节内容讲解
Step 1: 建立目录和genesis.json
在命令行模式创建一个目录,例如geths ,这里geths目录命名任意。
命令:mkdir geths
然后在ubuntu目录下会出现一个geths文件夹。
继续进入到该文件夹目录下,创建一个文件,genesis.json, 文件名也可以任意。
genesis.json 文件内容:
(注意版本太早的复制进去,运行会出错,可以适当更改内容)
[html] view plain copy
 
  1.    {  
  2.   "config": {  
  3.         "chainId": 666,  
  4.         "homesteadBlock": 0,  
  5.         "eip155Block": 0,  
  6.         "eip158Block": 0  
  7.     },  
  8.   "alloc"      : {},  
  9.   "coinbase"   : "0x0000000000000000000000000000000000000000",  
  10.   "difficulty" : "0x20000",  
  11.   "extraData"  : "",  
  12.   "gasLimit"   : "0x2fefd8",  
  13.   "nonce"      : "0x0000000000000042",  
  14.   "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",  
  15.   "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",  
  16.   "timestamp"  : "0x00"  
  17. }  
Step 2: 执行命令,创建创世区块
切换回命令行,执行命令,制造创世区块
进入到geths 目录下,执行命令
geth --datadir "./" init genesis.json
此时当前geths目录下面会新增出两个文件夹geth和keystore
geth中保存的是区块链的相关数据
keystore中保存的是该链条中的用户信息
Step 3:创建自己的私有链条
geth --datadir "./" --nodiscover console 2>>geth.log
注意这里输出打印日志到log文件中
Step 4:在自己的私有链条上创建用户
输入命令eth.accounts, 我们会发现返回值为[],这是因为此时虽然以太坊的私有链已经被创造出来,但还没有任何账户。
输入命令personal.newAccount("xxx"),该命令将创造一个新的用户,该用户的密码是xxx. 当然用户也可以将xxx 改为123,或者123456,或者任意密码
再次输入命令 eth.accounts, 我们会发现一个新的用户被创建了出来,这就代表我们已经创建了一个账户,重personal.newAccount() & eth.accounts 我们可以创建若干个账户出来
 
Step 5: 最重要的一步来了,开始挖矿
在命令行中执行命令 miner.start(), 开始在我们的区块链上进行挖矿
一直等到100%。这个以太坊私有链就会正式启动,并持续不断的生成出以太坊来。
注意点:
1. 挖矿挖到的ether币会默认保在第一个账户中,即eth.acccounts[0]中。
2. 挖矿是执行智能合约的基础。如果停止挖矿的话,不仅以太币会停止生成,所有智能合约的调用也会不起作用。
3. 如果真的要停止挖矿,可以执行命令miner.stop()来停止挖矿
4. 按上面的命令,应该是可以实现以太坊挖矿的。如果不行的话,有可能就是之前有存在的链,此时应该删除之前的数据。即删除~/.ethash文件夹和里面的文件即可。
5. 通常有人出现miner.start()返回null,,并且没有信息刷屏,就停留在null,, 原因回到step 3 你将输出结果打印到日志log,所以无法显示,exit 退出, 重新运行geth --datadir "./" --nodiscover console 即可。
 
Step6: 挖矿启动后,查看主账户的以太币数量
acc0 = eth.accounts[0]
eth.getBalance(acc0)
结果只要不为0,那就说明挖矿成功!
 
退出挖矿:miner.stop()
退出当前geth ,执行:exit
重新运行geth, 直接进入到step 3, 不需要执行前两步了。
 

(4)创建一个新账户

personal.newAccount(‘密码')

 

(5)账户赋值给某一个变量

user1 = persnal.account[0]

 

(6)上面提到过日志文件,我们再重开一个终端,我们使用以下命令打开日志:

tail -f  log.log

(7)在geth控制台中启动挖矿:

miner.start()

 

(8)停止挖矿

miner.stop()

 

(9)查看账户的账户余额

eth.getBalance(user1)

 

(10)

user1向user2转移以太币

eth.sendTransaction({from: user1,to: user2,value: web3.toWei(3,"ether")})

 

(11)解锁账户后

eth.unlockAccount(user1,"123")

 

 

 

2)下面我们来实现下在geth中编译一个智能合约

 

[plain] view plain copy
 
  1. contract test {  
  2.     function multiply(uint a) returns(uint d) {  
  3.         return a * 7;   
  4.     }   
  5. }  
在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更为深入的功能。

 
posted @ 2018-05-10 11:35  左佑  阅读(313)  评论(0编辑  收藏  举报