区块链新手入门菜鸟,看了很多不清不楚的博客都没有成功发布,无数error,想砸电脑,最后还是耐心看error的抛出解决问题
主要问题:npm install 安装后输入命令并不能使用
win10需要git,geth,solidity编译器solcjs,node.js,ganache-cli(testrpc)
创建账户 geth account new
账户 文件路径C:\Users\Administrator\AppData\Local\Etherem\keystor
地址0x424f2929Fbb728ee0a75ccf245b6C788BB219498
eth.getBalance(“0x424f2929Fbb728ee0a75ccf245b6C788BB219498”)查看余额
初始化创世区块
先在命令行中进入cd D:\Program Files\geth才能用geth命令或者更改环境变量在path里添加路径D:\Program Files\geth这就就可以直接使geth命令
geth init block.json --datadir test
geth --rpc --rpcaddr 0.0.0.0 --rpcport 8545 --datadir test console
testprc(gannche-cli)测试智能合约
先进入gannche-cli目录cd C:\Users\Administrator$dir\node_modules\ganache-cli
然后运行node cli.js
solc编译先进入安装路径cd G:\solcjs$dir在运行命令就可以了
或者更改环境变量在系统变量path里添加路径C:\Users\Administrator$dir(因为这个路径下有一个solc.cmd文件,并且node.js也是默认安装在C:\Users\Administrator这所以用命令npm install 后会在路径C:\Users\Administrator$dir有你需要的cmd文件,cmd文件名就是需要用到的命令)
javascript上发布智能合约步骤
1.编译sol文件
2.启动ganache-cli会显示正在监听端口8545,默认端口8545,这个dos界面不要关闭,关了应该就不会监听了
3.调用sol写的程序
例如合约程序是两个数之和
源代码
pragma solidity ^0.5.10;
contract demo {
constructor()public{
}
function add(uint m,uint n)public returns(uint){
return m + n;
}
}
发布调试(deploy.js文件)
var Web3 = require(‘web3’)
var fs = require(‘fs’)
var web3 = new Web3(new Web3.providers.HttpProvider(“http://localhost:8545”))
var eth = web3.eth
var abi = JSON.parse(fs.readFileSync(“demo_sol_demo.abi”))
var code = fs.readFileSync(“demo_sol_demo.bin”)
var contract = web3.eth.contract(abi)
//var deployed = contract.new({from:eth.accounts[0],data:code,gas:470000})
//console.log(deployed.address)
var deployed = contract.new({from:eth.accounts[0],data:code,gas:470000},
function(e,contract)
{
if(contract.address){
console.log(‘address:’+contract.address)
}
}
)
在dos中进入deploy.js路径->命令node deploy.js执行
会得到账户地址:0x36e0848e6d7e4f31668a5f2d9620d41e2724a93a,每次运行地址都不一样
或者在启动ganache-cli的dos里
Transaction 是交易地址
contract created是创建的账户地址
调用程序源代码(diaoyong.js)
//要安装node.js
//web3版本0.20.1(npm install web3@0.20.1)
var Web3 = require(‘web3’)
var fs = require(‘fs’)
var web3 = new Web3(new Web3.providers.HttpProvider(“http://localhost:8545”))
var eth = web3.eth
var abi = JSON.parse(fs.readFileSync(“demo_sol_demo.abi”))
var contract = web3.eth.contract(abi)
var instance = contract.at(‘0x36e0848e6d7e4f31668a5f2d9620d41e2724a93a’)
console.log(instance.add.call(20,30))//调用,执行add(20,30)