区块链:如何在ubuntu 上搭建私链


一:通过geth的形式初始化区块链

搭建私链:

  安装必要的app

1 安装GO64ubutun(参考https://blog.csdn.net/ceciiiilia/article/details/71483221

.对于64位Linux 

wget https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz  

/usr/local下安装程序

$ sudo tar -xzf go1.8.1.linux-xxx.tar.gz -C /usr/local

配置全局变量

sudo vim ~/.bashrc  

在打开的文件最后加上两行代码

export GOPATH=/usr/local/go  

export PATH=$GOPATH/bin:$PATH  

保存文件

使修改生效

source ~/.bashr 

验证配置是否成功

go version

出现warning,配置PATH

export GOROOT=/usr/local/go  

export GOPATH=$PATH:$GOROOT/bin 

 

2  geth 运行以太坊节点(geth是什么自行百度,先下载geth 参考:https://blog.csdn.net/ddffr/article/details/73733850)

     

下载source codetar.gz

sudo add-apt-repository -y ppa:ethereum/ethereum

 sudo apt-get update

 sudo apt-get install ethereum

安装完成后就用geth help验证是否安装成功

geth help

3 安装 solidity(参考文档:  https://blog.csdn.net/lp18036194881/article/details/72851178)

git clone --recursive https://github.com/ethereum/solidity.git 

cd solidity 

mkdir build  

cd build  

cmake .. && make  

./scripts/build.sh

安装时有可能会遇到virtual memory exhausted异常

 

1. mkdir /opt/images/    

2. rm -rf /opt/images/swap    

3. dd if=/dev/zero of=/opt/images/swap bs=1024 count=2048000    

4. mkswap /opt/images/swap    

5. swapon /opt/images/swap 

 

swapoff swap   

solc --help  

 

4 建立私链

1 mkdir privatechain

2 ifconfig  查看自己IP  ip换到下面的IP

3 geth --networkid 123 --dev --datadir data1 --rpc --rpcaddr 192.168.247.131 --rpcport 8989 --port 3000

4 保持当前窗口不变 打开一个新的命令窗口

5  新窗口cd /home/jack/privatechain  会看到新产生的data1文件夹

6  geth attach ipc:geth.ipc

7

(1-7为必要的 8-19为非必要的操作)

 

比如执行 personal.listAccounts  查看当前账户

8  personal.newAccount(“ghc”) 创建一个ghc的钱包

9 personal.newAccount(“ghc2”)创建第二个钱包

10  personal.listAccounts 查看当前钱包有几个

11 web3.eth.coinbase  查看第一个帐号  就相当于 personal.listAccount[0] 的查看结果

12 eth.getbalance(“”)   查看帐号的余额   显示的单位是“位”

13 miner.start();   开始挖矿  可以查看上一个命令端口 正在执行挖矿

14 miner.stop()     停止挖矿

15 eth.getBalance(“”)    查看第一个帐号的余额 会出现余额  默认挖矿给第一个帐号

如果要实现转账 要先把第一个帐号进行解除锁定

16 aersonal.unlockAccount(personal.listAccount[0]);   解除第一个账户锁定

然后输入密码  ghc

17 amount  = web3.toWei(5,”ether”) 5个以太币转换成“位”

18 eth.sendTransaction({from:personal.listAccounts[0],to:personal.listAccounts[1],value:amount})  得到交易的hash数值(从0  账户转账到 1账户5 个以太币  eth.getTransaction(传入hash”)  即可查看交易详情)

txpool.status 查看状态  pendin 1  如果想让交易完成 就要挖矿 也就是让pending0

19 eth.getBlock(“pending”,true)  查看交易代办详情

miner.start();   开始挖矿

miner.stop()  停止挖矿  

txpool.status pending 数值就为0

eth.blockNumber  查看区块数

eth.getBlock(n)   查看第n个区块信息

 

 

20  开始写合约部署

privatechain文件夹下  新建sol文件  保存(编译的方式有很多种  我们可以安装solc方便编译   前边我们已经进行了安装)

21  使用solc  编译的命令是:  solc --bin test.sol 拿到字节码文件

编译后  拷贝字节码文件 前边加上0x

22  var code = “0x.......” 

code  就会把code显示出来

23  solc --abi test.sol  生成在最下方abi文件

24  var abi =   拷贝的abi文件

开始部署合约,部署合约前要进行评估花费

25   web3.eth.estimateGas({data: code})  得出是9万多,下面部署的时候要比90000多才行

然后

26  var myContract = eth.contract(abi)

27  var contract = myContract.new({from:personal.listAccounts[0],data:code,gas:10000})

28  contract  (显示部署完成以后的合约)

29  eth.getCode(contract.address)  查看部署合约地址

contract.address

contract.方法名 就是调用合约,如果保存,方法中没加constant 可以contract.f.call()

 

 

以下是部分截图,并不属于上面的执行步骤:

  Port:用于两个节点之间连接的时候端口号

 

二:同一个文件夹下  运行两个节点

1 在相同文件夹下 运行 geth --networkid 123 --datadir data2 --rpc --rpcaddr (自己的ip) --report 9000 --port 3001 console   加上console 就相当于geth attach ipc:geth.ipc  会重新地区启动

2 打开新命令窗口

 运行

geth --networkid 123 --datadir data3 --rpc --rpcaddr (自己的ip) --rpcport 9001 --port 3002 console

(端口可以随便改 不和上一个冲突即可)

3  在第一个窗口 运行  admin.nodeInfo.encode 生成一个唯一的enode标识

4  admin.peers  查看连接数

5  第二个窗口运行admin.addPeer(第三部的结果)  添加连接

6  admin.peers  再查看一次连接

7 web3.net.peerCount 查看连接数

 

 

 

三:通过创世区块的形式初始化区块链

必要参数  config diffculty  gasLimit  alloc

{

 "config":{

    "chainId": 15,

    "homesteadBlock": 0,

    "eip155Block": 0,

    "eip158Block": 0

},

  "difficulty": "4",

  "gasLimit": "2100000",

   "alloc":{

  "627306090abab3a6e1400e9345bc60c78a8bef57":{

    "balance": "300000"

  },

  "f17f52151ebef6c7334fad080c5704d77216b732":{

   "balance": "400000"

   }

   }

}

2  将上述文件内容复制进json中去

3  确定 退出

4  cat genesis.json   查看内容

5  退出  查看我们目前有 data1  data2  data3  我们要创建data5

6  geth init genesis.json --datadir data4   即可创建data4

7  成功后第一行一般会有警告warn  没有设置默认挖矿钱包地址

8  我们打开data4   geth --networkid 123 --datadir data5 console

9  查看余额  eth.getBalance(627306090abab3a6e1400e9345bc60c78a8bef57) 出现的应该是300000

10 miner.start()  开始挖矿 会报错 因为没设置钱包地址

11 miner.setEtherbase(627306090abab3a6e1400e9345bc60c78a8bef57)  设置钱包地址

12 miner.start()

本菜鸟微信 guofly123  希望和区块链开发的各位多多交流




参考https://blog.csdn.net/ceciiiilia/article/details/71483221
参考https://blog.csdn.net/ddffr/article/details/73733850
参考孔壹学院教学视频(已付费购买)



阅读更多

更多精彩内容