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搭建方法与windows大同小异
写了一个以太坊节点管理脚本,仓库地址:https://github.com/wangjinxin613/ethNodeRun
将仓库克隆下来,运行./start.sh 即可
这是一个完全分布式的虚拟宠物系统,不需要中心服务器,运行于以太坊网络上,需要依赖MetaMask浏览器插件。新加入的节点可以捕猎一只宠物,并且经过12小时后可进行下一次捕猎,宠物可以收藏可以流通。任何人可以给任何人的宠物喂食,喂食可以留言,留言内容永久存储在区块链系统里,哪怕千年之后,这些数据依然会存在,只要以太坊还运行着一个节点。
项目地址:https://github.com/wangjinxin613/HelloPet
演示地址:https://wangjinxin613.github.io/HelloPet/
网址: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)
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,