以太坊私链搭建
modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0
在命令行模式创建一个目录,例如geths ,这里geths目录命名任意。命令:mkdir geths然后在ubuntu目录下会出现一个geths文件夹。继续进入到该文件夹目录下,创建一个文件,genesis.json, 文件名也可以任意。genesis.json 文件内容:(注意版本太早的复制进去,运行会出错,可以适当更改内容)
- {
- "config": {
- "chainId": 666,
- "homesteadBlock": 0,
- "eip155Block": 0,
- "eip158Block": 0
- },
- "alloc" : {},
- "coinbase" : "0x0000000000000000000000000000000000000000",
- "difficulty" : "0x20000",
- "extraData" : "",
- "gasLimit" : "0x2fefd8",
- "nonce" : "0x0000000000000042",
- "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
- "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
- "timestamp" : "0x00"
- }
切换回命令行,执行命令,制造创世区块进入到geths 目录下,执行命令geth --datadir "./" init genesis.json此时当前geths目录下面会新增出两个文件夹geth和keystoregeth中保存的是区块链的相关数据keystore中保存的是该链条中的用户信息
geth --datadir "./" --nodiscover console 2>>geth.log注意这里输出打印日志到log文件中
(4)创建一个新账户
personal.newAccount(‘密码')
(5)账户赋值给某一个变量
user1 = persnal.account[0]
(6)上面提到过日志文件,我们再重开一个终端,我们使用以下命令打开日志:
tail -f log.log
(7)在geth控制台中启动挖矿:
miner.start()
(8)停止挖矿
miner.stop()
(9)查看账户的账户余额
eth.getBalance(user1)
(10)
user1向user2转移以太币
eth.sendTransaction({from: user1,to: user2,value: web3.toWei(3,"ether")})
(11)解锁账户后
eth.unlockAccount(user1,"123")
2)下面我们来实现下在geth中编译一个智能合约
- contract test {
- function multiply(uint a) returns(uint d) {
- return a * 7;
- }
- }
source = "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"
然后编译该合约:
contract = eth.compile.solidity(source).test
编译后的结果如下:
code:就是合约编译后的字节码文件,在以太坊虚拟机EVM上运行的就是这个字节码;
abiDefinition:其实就是合约的二进制接口,可用来外部调用;
其他的一些参数也都是可以见名知意了。
然后就要获取合约的abi(其实该真正要用的abi可以通过https://ethereum.github.io/browser-solidity这个在线编译器获得):
abi=[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"type":"function"}]
然后是访问abi接口:
MyContract=eth.contract(abi)
然后获得合约的实例:
myContract=MyContract.new({from:user1,data:contract.code})
如果提示你没有解锁的话,只要解锁即可。
调用函数传递参数
。
函数做了乘以7的操作,输出符合预期。合约执行成功。
以上就是对geth最基本的运用,我们会在以后的开发中学习geth更为深入的功能。