经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 区块链 » 查看文章
区块链开发(2)以太坊私链
来源:cnblogs  作者:alphagl  时间:2018/11/28 9:35:41  对本文有异议

以太坊作为第二代区块链技术,相比"中本聪"第一代区块链技术比特币,拥有更快的交易确认时间,比特币每笔平均10分钟,以太坊只要18秒左右(EOS为0.5秒,还免手续费)。同时,以太坊自带图灵完备的智能合约编程语言(Solidity),运行在以太坊虚拟机上,拥有更大的灵活性,基于以太坊的Dapp和游戏也越来越多。

以太坊主链上发行的代币成为以太币(ether),用来支付交易的手续费。在主链上部署智能合约之前,我们可以先搭一个以太坊私链环境,用来测试和部署合约,避免不必要的损失。其中,以太币有如下单位:

  1. 1 ether = 10^18 wei
  2. 1 ether = 10^15 Kwei 1 Kwei = 10^3 wei
  3. 1 ether = 10^12 Mwei 1 Mwei = 10^6 wei
  4. 1 ether = 10^9 Gwei, 1 Gwei = 10^9 wei
  5. 1 ether = 10^6 szabo, 1 szabo = 10^12 wei
  6. 1 ether = 10^3 finney, 1 finney = 10^15 wei

1. 私链环境搭建

操作系统:Ubuntu 18.04

1.1 下载Geth

虽然,以太坊的实现有很多语言的版本(ethereum-github),但官方推荐使用Go的实现,所以这里直接下载go-ethereum,可以直接下载源码翻译安装,也可以直接下载编译好的可执行文件。

下载地址:

https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.8.18-58632d44.tar.gz

然后,解压安装即可:

1.2 初始化创世块

(1)新建一个目录,用来存放创世块数据:

(2)新建genesis.json创世块配置文件:

  1. {
  2. "config": {
  3. "chainId": 0,
  4. "homesteadBlock": 0,
  5. "eip155Block": 0,
  6. "eip158Block": 0
  7. },
  8. "alloc" : {},
  9. "coinbase" : "0x0000000000000000000000000000000000000000",
  10. "difficulty" : "0x20000",
  11. "extraData" : "",
  12. "gasLimit" : "0x2fefd8",
  13. "nonce" : "0x0000000000000042",
  14. "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  15. "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  16. "timestamp" : "0x00"
  17. }

注:genesis.json来自于https://github.com/ethereum/go-ethereum

(3)初始化创世块

1.3 启动私链节点

(1)在终端执行以下命令:

  1. sudo geth --networkid 123 --dev --datadir chain --rpc --rpcapi "personal,db,eth,net,web3,miner,admin,debug" --rpcaddr "0.0.0.0" --rpcport 8545 --port 30303 --rpccorsdomain "*" --nodiscover

参数介绍:

  • --networkid:网络id。(默认值为1)
    • 1:Frontier(主网络)
    • 2:Morden(忽略)
    • 3:Ropsten(测试网络)
    • 4:Rinkeby(测试网络)
  • --dev: 开发模式。包含一个预含以太币的开发者账号。
  • --datadir:指定数据库和密钥存放的路径。
  • --rpc:是否开启HTTP-RPC。
  • --rpcapi:指定哪些HTTP-RPC提供的API接口可用。
  • --rpcaddr:指定HTTP-RPC监听的地址。默认是:localhost。
  • --rpcport:指定HTTP-RPC监听的端口。默认是:8545。
  • --port:网络监听端口,用于与其它节点通信。默认是:30303。
  • --rpccorsdomain:指定哪些URL可以跨域访问节点。
  • --nodiscover:关闭节点发现。

注:这里没有开启自动挖矿(--dev.period参数),也没有使用websocket的方式访问。更多参数的含义参考geth --help

2. 连接到私链

2.1 使用mist钱包连接到本地私链

(1)下载Mist钱包

  1. https://github.com/ethereum/mist/releases

(2)解压Mist钱包

  1. unzip Mist-linux64-0-11-1.zip -d ./Mist

(3)使用Mist连接到私链

  1. sudo ./mist --rpc ./../chain/geth.ipc

如遇到以下错误:
error while loading shared libraries:libgconf-2.so.4:cannot open shared object file:No such file or directory
则需安装libgconf库,执行sudo apt install libgconf-2-4:

(4)解决上述错误,再次执行步骤(3)会成功打开Mist钱包,并看到一个包含1.1579e+77个以太币的帐号。

2.2 使用MetaMask钱包连接到本地私链

(1)下载并安装MetaMask钱包
步骤略。(这里安装MetaMask钱包,可能需要科学上网,自行解决。浏览器使用Chrome)

(2)连接到本地节点
当然,MetaMask也可以不与节点装在同一台机器上,则选择Custom RPC,然后配置相应的ip和端口即可。

3. Geth控制台

3.1 Web3命令的使用

(1) 进入Geth控制台

  1. sudo geth attach ./chain/geth.ipc
  2. 这里也可以使用HTTP接口的方式:
  3. sudo geth attach http://127.0.0.1

3.2 交易

(1)创建新帐号,并返回新帐号的地址

  1. personal.newAccount("123456")

(2)查询帐号,默认有一个帐号加上新创建,因此,总共看到两个地址 。

  1. personal.listAccounts


(3)查询余额

  1. eth.getBalance("xxx")


(4)转账交易,转账单位是1000ether,最小单位是wei,并再次查看余额,可以看到转账成功,并返回交易哈希。

  1. eth.sendTransaction({from:"xxx", to:"xxx", value:web3.toWei(1000, "ether")})

注:由于默认帐号是不带密码的,所以直接转账是成功。否则,需要先解锁帐号。

注:密码为上面创建帐号时的123456

3.2.1 使用Mist钱包交易

(1)Mist钱包中查看

可以看到,本地私链中已经有两个帐号了,第二个帐号余额为900。

(2)在Mist钱包中点Send,并填入私链中的两个地址。


这里,直接点交易即可,因为,默认帐号没有密码。

注:如果在私链环境中,交易或者部署合约,一直在等待确认。需在控制台手动执行下挖矿,这样才会出新块来记录交易。

该篇主要演示了下以太坊私链的搭建,以及Mist钱包的使用,当然,MetaMask等钱包的使用类似,过程都不复杂,只是细节偏多。那么,这一篇就先总结到这里,下一篇暂定为以太坊智能合约的部署。如果你对区块链开发感兴趣,或者你觉得任何文中错误的地方,欢迎与我交流并指正。

作者:AlphaGL。版权所有,欢迎保留原文链接进行转载 :)

参考:

以太坊-维基百科
Ethereum JavaScript API

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号