搭建私链:
安装必要的app
.对于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
下载source code(tar.gz)
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
安装完成后就用geth help验证是否安装成功
geth help
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
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 如果想让交易完成 就要挖矿 也就是让pending为0
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()