以太坊私链建立和geth的使用
环境部署
1. brewMacOs包管理器
下载 brewMacOs包管理器
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2.go语言安装
brew install go
3 . geth 运行以太坊节点
http://blog.csdn.net/ethchinese/article/details/62220817
4 安装Solidity语言包
brew install solidity 时间长 多等等
二
创建文件夹来存储以太坊私链数据
ifconfig 命令 查看自己的ip
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000 // 127.0.0.1 为你电脑的ip
geth --networkid 123 --dev --datadir data1 --rpc --rpcaddr 127.0.0.1 --rpcport 8989 --port 3000 // 127.0.0.1 替换你电脑的ip 加载
在创建好自己的文件夹中打开新的终端。
geth attach ipc:geth.ipc 打开控制台。 这是一个交互式的JavaScript执行环境,在这里面可以执行js代码。 环境里面内置了一下用来操作以太坊的js对象。可以直接使用这些对象。
eth : 包含一些跟区块链相关的方法。
net: 包含一些p2p网络状态的方法。
admin: 包含一些与管理节点相关的方法。
miner:包含启动和停止挖矿的方法。 新的版本没有交易不能挖矿。
personal : 包含管理账号的方法。
txpool:查看交易内存池的方法。
web3 :包含以上对象,还包括一些单位换算的方法。
练习命令。
1.personal.listAccounts 查看当前帐户。
0x2e4a38eac1233ecd283c55d2250fe88ba86235ac
2.personal.newAccount("123456");为创建新账户并设置密码。
0x925e1ec575ff586b3e70743b077a5a801cbabd28
3. web3.eth.coinbase 获取账户的第0个帐号。 相当于personal.listAccounts[0]
4.第0个账户没有密码。 创建第2个帐号。 如果有密码的帐号向别人转账先需要解锁帐号。
personal.unlockAccount(personal.listAccounts[1])
然后输入密码 返回true 表示解锁成功。
5. eth.getBalance("0x2e4a38eac1233ecd283c55d2250fe88ba86235ac") 查看我账户的余额 默认的帐号是有余额的 新创建的帐号没有余额。
6. miner.start(); 开始挖矿 miner.stop();停止挖矿。 新版本 这两个命令实效。 没有交易没办法挖矿。。。 有交易自动挖矿。
7. web3.toWei
把以太坊单位(包含代币单位)转为 wei. ether表示(以太币)
8. amount =web3.toWei(5,'ether');
9. web3.fromWei(web3.eth.getBalance(personal.listAccounts[2]),"ether") 查看第二个账户有多少个以太币。
10. eth.sendTransaction({from:personal.listAccounts[0],to:personal.listAccounts[1],value:amount}) 从第0个帐户转给第一个帐号
value:amount. amount 表示多少位。
11. txpool.status
{
pending: 0, 等于0 表示没有待交易的内容。 等于1 表示有待交易的内容 需要挖矿 miner.start();
queued: 0
}
eth.getTransaction("
0xc7364cfea18836df90cf99cccbd4d11e4b93d6b376190c2403a2376069dfaea5")
0xc7364cfea18836df90cf99cccbd4d11e4b93d6b376190c2403a2376069dfaea5 这个是交易的哈希值。
eth.getTransaction可以查询到交易详情
例如
1 1.eth.getBlock("pending",true); 查看 pending 的详细数据。
12 eth.blockNumber 查看交易区块 eth.getBlock(2); 通过区块号查询数据。
创建简单合约。
pragma solidity ^0.4.18;
contract test {
function multiply( uint a) public pure returns (uint d) {
return a*7;
}
}
需要将写好的合约代码放到remix.ethereum上 获得质检码data 和abi
如果格式不对 ,需要将data 和 abi 放到bejson 上格式化。
将 adta 和abi 保存
例如:
var bin ="0x6060604052341561000f57600080fd5b60b18061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820502084cafe4255cb2852fbd5e681cde601e64848e08ca2978f2a69aff6ed6ba30029"
var abi = [{"constant":true,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"}]
在保证帐号 有足够以太币的情况下 用密码授权。
检测智能合约 需要多少手续费。 web3.eth.estimateGas({data:bin})
eth.sendTransaction({from:personal.listAccounts[1],data:bin,gas:1000000}); // 有eth.sendTransaction 提交易才会自动挖矿!
miner.setEtherbase(eth.coinbase) // 设置矿工地址
contract.address // 挖矿奖励: 查看矿工地址
eth.getCode(contract.address) // 获取交易质检码 data
txpool.status
{
pending: 0,
queued: 0
}
contract.multiply.(6); // 调用合约中的方法 获得正确的值。
42