目录
2、安装目录下cmd,输入geth -help看看是否可用geth命令
1、Geth安装、配置文件、与ETH节点交互
1.1、下载并安装好geth客户端
并将exe路径添加到环境变量中
1.2、配置好genesis.json文件
1. { 2. "nonce": "0x0000000000000042", 3. "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", 4. "difficulty": "0x400", 5. "alloc": {}, 6. "coinbase": "0x0000000000000000000000000000000000000000", 7. "timestamp": "0x0", 8. "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", 9. "extraData": "0x", 10. "gasLimit": "0xffffffff", 11. "config": { 12. "chainId": 4224, 13. "homesteadBlock": 0, 14. "eip155Block": 0, 15. "eip158Block": 0 16. } 17. }
1.3 、命令进行初始化文件
会自动生成两个文件夹geth(存放区块链数据)、keystore(存放账号信息),
geth --datadir . init genesis.json
1.4、启动节点
数据都会放在该节点上,该node也需要对外访问(web.js)即需要占用一个端口(默认8545),geth与web之间是rpc协议。
port区块之间连接,rpc是否支持跨域,rpcapi提供几个对象,包括net console控制台(使win系统的dos变为与节点交互的控制台),打印信息都放在log.txt文件内,
到此为止,节点都已启好,但是因为我们通过genesis.json配置文件使其,没有连接到主网。
1. geth --datadir . --networkid 4224 --rpc --rpcport 8545 2. --port 30303 --rpccorsdomain="*" -rpcapi eth,web3,personal,net console 2> log.txt
使用dos控制台与节点进行交互
如何知道账户名称:几个节点连接在一起,网络ID唯一的,
1. #利用客户端工具提供的api与节点进行交互 2. eth.accounts #查看eth上是否有账号,列表为空即无账号 3. personal.newAccount("123456"); #创建账号且指定密码,不需要指定账号名,会自动生成一个账号的文件 4. personal.newAccount("123456"); #再生成一个账号 5. eth.accounts #查看已有的账号,有了账号就可以挖矿了 6. miner.start(); #开始进行挖矿,会返回null,挖的是自己节点上,因为没有连接主网。即使上主网挖矿,一天也就挖个几毛钱 7. eth.getBalance(""); #输入账户名称,查看账户余额
2、基于Remix环境Solidity编程、发布、交互SC
2.1、solidty语言编写个智能合约
采用Remix工具编写Solidty语言,操作Remix交互式操作按钮(也可以编写程序进行发布)将智能合约发布上去。
1. pragma solidity ^0.4.18; //指定IDE版本 2. 3. //1、Solidty定义智能合约 4. contract Message{ 5. string msg; //定义全局变量,b变量值会保存在区块链的节点上 6. //写数据的方法:public使其可被外部调用 7. function setMsg(string _msg)public{ 8. msg=_msg; 9. } 10. //查看数据的方法:view只读的方法(不需要gas花钱的)+返回string类型值 11. //别的方法调用需要消耗gas即花钱,同步数据是需要消耗gas的,避免太多数据代码即发布程序需要交钱 12. function getMsg(string _msg)public view returns(string){ 13. return msg; 14. } 15. }
2.2、右进入在线Remix
Setting栏设置编译版本;
run栏设置Environment选择Web3。点击两次ok即可,http://localhost:8545
2.3、会取出ETH上的账号
然后点击粉红色的Deply进行发布(发布到区块链的geth节点上去),会弹出两个信息框,
2.4、然后对地址进行解锁
解锁后,再点击发布Deploy,当出现Message at ……,说明智能合约已经发布上去
在控制台输入
personal.unlockAccount("") #对已有账号进行解锁
Passphrase:123456 #返回true即解锁成功!
2.5 setMag右边框输入内容信息
先点击setMsg按钮,然后接着点击getMsg按钮,会取出输入的内容信
3、采用前端web调用ETH的SC
3.1、思路框架
3.2、实现代码
1. 搭建node.js 的基本环境,然后启动 node.js 2. var Web3=require("web3"); 3. var web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:8545")); 4. var abi=[ 5. { 6. "constant": false, 7. "inputs": [ 8. { 9. "name": "_message", 10. "type": "string" 11. } 12. ], 13. "name": "setMessage", 14. "outputs": [], 15. "payable": false, 16. "stateMutability": "nonpayable", 17. "type": "function" 18. }, 19. { 20. "constant": true, 21. "inputs": [], 22. "name": "getMessage", 23. "outputs": [ 24. { 25. "name": "", 26. "type": "string" 27. } 28. ], 29. "payable": false, 30. "stateMutability": "view", 31. "type": "function" 32. } 33. ]; 34. var address="0xd069af98379fe4326c33f6718e0ce820c0f63a55"; 35. var message = new web3.eth.Contract(abi,address); 36. router.get("/getMessage",function(req,resp){ 37. message.methods.getMessage().call(function(error,result){ 38. resp.send(result); 39. }); 40. });
4、采用微信小程序调用ETH的SC
4.1、思路框架
4.2、实现代码
1. 调用小程序提供的api 去请求中心化的服务器node.js 的数据 2. wx.request({ 3. url: 'http://localhost:3000/user/getMessage', //仅为示例,并非真实的接口地址 4. success: function (res) { 5. console.log(res.data) 6. _this.setData({ 7. message:res.data 8. }) 9. } 10. })
Geth节点的安装
1、Geth 地址下载
2、安装目录下cmd,输入geth -help看看是否可用geth命令