以太坊私有链节点搭建方法

windows搭建方法

1. 搭建以太坊私有链节点

下载Geth ,下载地址: https://geth.ethereum.org/downloads/

2. 创建创世区块文件

在安装目录下创建一个genesis.json文件,内容如下:

{
"config": {
"chainId": 1337,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"ethash": {}
},
"nonce": "0x0",
"timestamp": "0x5ddf8f3e",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x47b760",
"difficulty": "0x00002",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"0x1e82968C4624880FD1E8e818421841E6DB8D1Fa4" : {"balance" : "30000000000000000000"}
},
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

3. 初始化创世区块信息并指定数据文件存放位置

geth init ./genesis.json --datadir "F:\eth\test"

此命令会创建一个文件夹test,test文件夹为节点相关数据

4. 启动节点

geth --datadir test --allow-insecure-unlock --identity test --networkid 613 --rpc --rpcport "8545" --rpccorsdomain "*" --rpcapi "db,eth,net,web3" console  

启动成功后会进入节点的虚拟机环境,可以执行一些命令

5. 创建其他节点

用相同的配置文件初始化一个文件夹为test0的节点

geth init ./genesis.json --datadir "F:\eth\test0"

启动这个节点

geth --datadir test0 --allow-insecure-unlock --identity test0 --port 30304 --networkid 613 --ipcdisable --rpc --rpcport "8546" --rpccorsdomain "*" --rpcapi "db,eth,net,web3" console

6. 俩个节点连接

查询第一个节点的enode

admin.nodeInfo

可以看到第一个节点的enode为                                                                                                                  enode://c963b939ec6e6a1a741f267664264647938d1dea880c39ee1e8a888bf8461b0b0cb500dcc98f5b7eb2e520800049c6575239499aa48f3ddc02bf294fd03a18ab@127.0.0.1:30303

打开第二个节点,让第二个节点连接上第一个节点

admin.addPeer("enode://c963b939ec6e6a1a741f267664264647938d1dea880c39ee1e8a888bf8461b0b0cb500dcc98f5b7eb2e520800049c6575239499aa48f3ddc02bf294fd03a18ab@127.0.0.1:30303")

输入命令  admin.peers

可以看到第二个节点已经能够连接第一个节点了。

linux搭建方法

linux搭建方法与windows大同小异

写了一个以太坊节点管理脚本,仓库地址:https://github.com/wangjinxin613/ethNodeRun

将仓库克隆下来,运行./start.sh 即可

基于solidity的分布式虚拟宠物系统 – HelloPet

这是一个完全分布式的虚拟宠物系统,不需要中心服务器,运行于以太坊网络上,需要依赖MetaMask浏览器插件。新加入的节点可以捕猎一只宠物,并且经过12小时后可进行下一次捕猎,宠物可以收藏可以流通。任何人可以给任何人的宠物喂食,喂食可以留言,留言内容永久存储在区块链系统里,哪怕千年之后,这些数据依然会存在,只要以太坊还运行着一个节点。

项目地址:https://github.com/wangjinxin613/HelloPet

演示地址:https://wangjinxin613.github.io/HelloPet/

合约部署-使用remix

网址:remix.ethereum.org

如上图所示,第一次使用remix需要启动一些功能的开关。

启动上边的三个即可,其他的我也没用过...

下边可以尝试运行一个小例子,官网的HelloWorld


pragma solidity ^0.4.0;

contract HelloWorld{
uint public balance;
function update(uint amount) public returns (address, uint){
balance += amount;
return (msg.sender, balance);
}
}
新建一个文件,命名为HelloWorld.sol,将上述代码复制到这个文件里。

如上图所示,可以看到编译结果,对号证明编译无错误。建议勾选自动编译(Auto compile),就不用每次手动编译了。

然后就可以运行了。 

如上图所示,点击deploy即可部署合约,需要支付一定的gas; 

这个合约的功能是存一个数,并且可以读取这个数。

点击update 存一个数,点击balance就能取到这个数了。 
————————————————

私有链网络也可以使用remix部署合约(需搭配浏览器插件MetaMask)

附录(ethereum JavaScript Console内置对象和方法):

eth:包含一些跟操作区块链相关的方法
net:包含以下查看p2p网络状态的方法
admin:包含一些与管理节点相关的方法
miner:包含启动&停止挖矿的一些方法
personal:主要包含一些管理账户的方法
txpool:包含一些查看交易内存池的方法
debug:包含一些debug的方法
web3:包含了以上对象,还包含一些单位换算的方法

1、admin对象

admin.addPeer(nodeURL) // 为本客户端新建与目标节点的链接
admin.peers // 返回已有连接对象组成的数组
admin.nodeInfo // 返回节点信息
admin.datadir // 返回当前节点存储数据的文件夹
admin.importChain(file) // 从编组二进制格式的数据导入区块
admin.exportChain(file) // 把区块导出为二进制格式
admin.chainSyncStatus // 返回区块链同步状态信息
admin.startRPC(host, portNumber, corsheader, modules) // 启动JSON-RPC的HTTP服务
admin.stopRPC() // 关闭JSON-RPC的HTTP服务
admin.verbosity(level) // 设置日志冗水平,1-6级
admin.setSolc(path2solc) // 设置solidity编译器,例如:admin.setSolc('/some/path/solc')
admin.sleepBlocks(n) // 等待n个区块
/*****以下是与智能合约有关的方法*****/
admin.saveInfo(contract.info, filename) // 把合约info按照json格式写到目标文件
admin.startNatSpec() // 启动协议NatSpec构建合同和事务
admin.stopNatSpec() // 停止NatSpec
admin.getContractInfo(address) // 按合约地址返回json格式的合约信息
admin.register(address, contractaddress, contenthash) // 将内容hash注册到合约的代码hash
admin.registerUrl(address, codehash, contenthash) // 在区块链中注册带有内容哈希值的网址
2、miner对象

miner.start() // 开始挖矿
miner.stop() // 停止挖矿
miner.startAutoDAG() // 开启auto DAG
miner.stopAutoDAG() // 关闭auto DAG
miner.makeDAG(blockNumber, dir) // 产生epoch的DAG
miner.hashrate // 返回当前hash rate
miner.setExtra("extra data") // 在产生区块的时候设置额外的信息
miner.setGasPrice(gasPrice) // 设置旷工的gasprice
miner.setEtherbase(account) // 设置默认旷工账户,用于接受挖矿奖励
3、personal对象

personal.newAccount(passwd) // 新建账户
personal.listAccounts // 列举所有账户
personal.deleteAccount(addr, passwd) // 删除账户
personal.unlockAccount(addr, passwd, duration) // 解锁账户,可以限定时间,解锁期间可以进行交易
4、txpool对象

txpool.status // 返回挂起和排队中的交易的数量
5、debug对象

debug.setHead(blockNumber) // 根据区块序号设置区块头,用于回滚
debug.seedHash(blockNumber) // 返回目标区块所在的epoch的hash
debug.processBlock(blockNumber) // 使用debug模式的VM执行block
debug.getBlockRlp(blockNumber) // 返回区块的Rlp编码的十六进制
debug.printBlock(blockNumber) // 打印区块信息
debug.dumpBlock(blockNumber) // 返回相应区块的状态并返回账户列表
6、eth对象:源自web3.eth

// 一些web3之外的eth方法
eth.sign(signer, data)
eth.pendingTransactions // 返回pending的交易
eth.resend(tx, <optional gas price>, <optional gas limit>) // 重新发送pending的交易

发布了8 篇原创文章 · 获赞 9 · 访问量 7307

猜你喜欢

转载自blog.csdn.net/qq_30113287/article/details/104274120