以太坊私链建立和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

原文地址:https://www.cnblogs.com/panfeng1104/p/8527071.html