[blockchain-011] tendermint使用和安装

1. 安装go 1.9
  1.1 下载 
    https://golang.org/doc/install?download=go1.9.4.linux-amd64.tar.gz
  1.2 解压缩到目录 /home/bri/usr/go-1.9
    tar -C /home/bri/usr/go-1.9  -xzf go1.9.4.linux-amd64.tar.gz
  1.3 修改/etc/profile增加环境变量
---------------------
#for go
#gopath is woring directory
export GOPATH=/home/bri/workspace/go
#goroot is go install directory
export GOROOT=/home/bri/usr/go-1.9/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
---------------------


  1.4 在liteide编译一个helloworld.go以验证安装无误
  1.5 go version 检查版本为1.9


2.tendermint源码分析
  2.1 获取源码
    git clone -b v0.15.0 https://github.com/tendermint/tendermint.git
  2.2 tendermint官网
    https://www.tendermint.com/
  2.3 tendermint文档
    https://tendermint.readthedocs.io/en/master/


3. tendermint文档要点
  3.1 tendermint分量部分:共识引擎; 应用接口。共识引擎,又叫tendermint core。应用接口,又叫 ABCI,Application BlockChain Interface。tendermint的共识引擎可以单独部署,非go语言开发的应用也可以使用。
  3.2 bft最多运行1/3的节点坏掉,这个坏掉是指任意的攻击诈骗行为。
  3.3 早期,tendermint是内建的共识引擎,是pos的。现在,tendermint已经变成了通用的区块链共识引擎,支持各种应用,可拔插式的。
  3.4 cosmos是一个基于tendermint的加密数字货币。https://cosmos.network/ 
  3.5 ABCI,让多种语言可以写BFT共识应用。它的实现是TSP(tendermint socket protocal)
  3.6 tendermint把共识引擎和p2p网络这两个东东解耦出来了,比特币是整体设计。解耦更好。
  3.7 如果开发一个类似比特币的东东,ABCI和app分别解决不同的问题。ABCI需要解决的是:在节点间共享区块和交易事务; 用区块链建立不可变的事务次序。app需要解决的问题是:维护UTXO数据库; 验证交易事务的加密签名; 防范双花; 让客户端可以查询UTXO数据库。
  3.8 ABCI有三种消息类型:DeliverTx; CheckTx; Commit。
    3.8.1 DeliverTx 区块链上的每一个交易事务都是有DeliverTx消息发送的,app需要验证从DeliverTx收到的每个事务的当前状态,协议,加密验证等等。交易事务被验证后,app更新状态,把交易事务存入数据库,比如UTXO。
    3.8.2 CheckTx 跟DeliverTx相似,但仅用于验证交易事务。
    3.8.3 Commit 计算一个加密的提交给当前app的状态,这个提交将放在下一个区块的头部。
  3.9 一个app可以创建多个ABCI socket连接,每个连接处理一类消息。这个一个流程https://tendermint.readthedocs.io/en/master/_images/abci.png 


3. tendermint 二进制 安装
  3.1 下载Linux 64的版本 https://github.com/tendermint/tendermint/releases 解压缩到~/usr/tendermint
  3.2 运行
    初始化  tendermint init
    运行  tendermint node --proxy_app=dummy
  3.3 tendermint配置分析
    在~/.tendermint目录下,有三个json文件,有一个config.toml文件。
    addrbook.json是记录各节点的地址。
    priv_validator.json是私钥文件。 
    genesis.json是公钥文件。
    config.toml是配置信息,包括proxy, 数据库,rpc, p2p等各参数。




4. tendermint源码结构
  4.1 README.md 介绍性资料
  4.2 Makefile  go语言使用Makefile
    4.2.1 编译tendermint需要安装gox(https://github.com/mitchellh/gox): go get github.com/mitchellh/gox   
    4.2.2 需要ghr https://github.com/tcnksm/ghr#install,安装 go get -u github.com/tcnksm/ghr
    4.2.3 需要gometalinter.v2,安装 go get -u gopkg.in/alecthomas/gometalinter.v2


    










你可能感兴趣的:(区块链)