tron-节点-SR单节点搭建
波场的产块节点称为 Supper Node,官方文档称之为SR。
波场使用DPOS共识算法,这个算法的特点是并不基于算力,而是基于股权证明来实现共识和产块。DPOS共识算法后面会专门讲到一期。
Supper Node(SR)以下称Supper Node 为SR,官方SR节点为产块节点,共有27个SR节点。这27个SR节点每隔3秒轮流负责产块,注意是轮流产块,即:节点A产块-->节点B产块...依次类推。这种产块方式相较于POW的共识,更加的节能省电,但是缺点也很明显,就是节点理论是更容易被控制作恶,只要半数节点被控制或者半数节点掌握在某个团队中,对于社区来说,并不为是一件好事,缺乏透明度。
成为 SR 的好处是,SR负责产块,产块后会获得产块奖励,SR可以产块后,再将奖励分发给投票者。
产块超级代表产块者由所有用户投票,得票最多的128个超级代表成员中选出27个进行产块,实际官方的27个产块SR是在配置文件中写死的。这27个SR节点即为产块者,如果其中一个节点挂掉后,会从超级代表中的成员节点顶上,继续进行产块。
如何产块27个SR节点,分别进行产块。27个节点分属于不同的机器 ...
tron-交易-交易构建
构建区块链当中要发起一笔交易,需要考虑更多的是这笔交易的安全性。在分布式、去中心化的环境当中,如何保证交易的安全性?需要考虑几个问题:
如何保证交易正确性
交易不可篡改
非中心化场景下,交易的验证
构建TRX转账交易构建交易需要最重要的东西就是私钥。需要了解TRON的ECKey的使用,tron ECC使用及项目中的应用
这里假设,你已经有了一套TRON的账户,包括:私钥、base58Check地址、公钥等。如果在图形界面操作的话,完全不需要理解它的原理,这里说的是它在代码中是如何构建出一笔交易的。构建交易需要跟FullNode产生交互。
需要准备好:
测试用的私钥
owner的地址
to的地址
实现构建一笔交易,需要以下步骤:
构建交易protobuf
生成签名
发送交易
tron 链使用的是protobuf进行序列化和反序列人。如果是在测试阶段完全可以自己搭一个FullNode进行测试。
构建交易protobuf交易在本地构建后,最终是需要广播到链上,需要经过网络传输。所以需要序列化。
123456789101112131415161718public Transacti ...
ethereum-编译geth
前言geth 是将计算机变成一个以太坊节点,连接到以太坊网络的客户端。
对于geth的几个问题:
有了 geth 之后能做什么?
该怎么用?
用了之后能了解到什么?
能做几件事:
成为一个以太坊节点,可以是:全节点、矿工节点、归档节点
可以当在一个gRPC 的查询工具来用
生成账户等操作
一句话总结:geth就代表运行在你电脑上的以太坊程序。
环境准备这里说明只基于对开发环境的基础配置,官方要求的配置更高
最小硬件要求
CPU 2+ cores
4GB RAM
1TB
8 MBit/sec
go安装
go1.16.x 安装
gcc 编译geth
注意需要修改一下go代理:
1go env -w GOPROXY=https://goproxy.cn
安装gcc
1yum install gcc
编译下载源码之后,看一下README.md,使用make geth就行编译,编译一下
123456git clone https://github.com/ethereum/go-ethereum.gitcd go-ethereum# 查看所有分支 git brarnch -ag ...
Tendermint-通过goland初始化和启动
前言对 Tendermint 有了一个的了解之后,我们需要对 Tendermint 进行开发和操作,该如何运行这个项目。Tendermint 使用的是 cobra 这个命令行框架,需要对 cobra 有一定的了解。
初始化项目配置IDEA我使用 goland开发调试,先将项目 clone 到本地,配置好go mod。
安装内置命令: tendermintgit clone 之后,找开项目,Tendermint 是go项目,内置的一些功能需要先进行编译。
make install
这一步的操作是为了将内置命令: tendermint,安装到当前系统中。
验证命令正确安装,执行一下:tendermint
这个图中展示了 tendermint 支持的各种命令,对节点运行来说,需要关注的是
init
start
初始化 validator 节点tendermint 可以初始化三种节点类型
FullNode
seed
validator
这三种类型是常见的三种节点类型,FullNode 用于区块广播、查询等;seed 是种子节点,用来做节点发现;validator 是验证人节 ...
matic checkpoint作用
整体架构
检查点 Checkpoint
RootHash is the Merkle hash of Bor block hashes from StartBlock to EndBlockcheckpoint 就是一开始区块到结束区块构建成的Merkle根hash。
其实就是一组block区块的keccak256,再组装起来,生成一个Merkle的Hash。然后提交到主链给合约验证合法性,以更新侧链状态。
两个作用先说两个概念:
铸币
燃烧
用户从 ETH->MATIC 即,在ETH链上质押ETH到Matic链上,是存款操作,matic链上会进行相关的铸币操作。用户从 MATIC->ETH 即,从Matic链上提现到ETH链上,是取款操作,Matic链上就会先燃烧Matic代币,再从ETH中释放对应ETH,就是燃烧。
1.通过提交到以太坊主链上的 checkpoint来决定,侧链上block的最终性(finality)。2.在用户提现资产到主链上时,可以提供燃烧证明。
检查点很重要,因为它们在以太坊链上提供了最终性。Heimdall 层允许将 Bor 生成的区块聚 ...
tron-节点-FullNode节点启动
简述tron 有三种节点类型:
SuperNode:负责生产区块。tron链是DPOS共识,只有27个SR能够产块。
FullNode: 节点负责广播区块,不进行产块,网络中的FullNode转发区块、广播区块。
SolidityNode: 该节点类型已经合并为其它两种节点类型,不会单独运行或部署,所以不再单独部署。
环境准备保证以下环境正常使用
JDK 1.8
注意不能高于或低于1.8版本,否则会有问题
FullNode.jar
启动节点项目的启动方式:
官方脚本启动
手动指定参数启动
docker 启动
脚本方式这种方式最简单,不过一般使用区块链的开发者都需要debug代码,所以一般在部署的时候使用脚本启动。需要用到的文件,都可以从 java-tron 这个项目中获得。
1234git clone https://github.com/tronprotocol/java-tron.gitcd java-trongit checkout -t origin/master./gradlew build -x test
gradlew是在java-tron项目中的gra ...
Tendermint 共识源码分析
简述Tendermint的共识算法可以看成是POS+BFT,Tendermint在进行BFT共识算法确认区块前,首先使用POS算法从Validators中选举出Proposer。然后由Proposer进行提案,最后使用BFT算法生成区块。Tendermint 的共识协议使用的gossip协议。
另外,源码分析部分由于代码篇幅太长,会省略部分源码,不影响阅读。
角色Tendermint 共识网络中有两个重要角色
Validator: 网络的参与者,也是区块的验证者(预先配置的网络中的一般验证者账户们)
Proposer: 从validator中选举出一个节点成为出块人(选举出的出块人),选举不需要网络通信,这点后面从源码中说明。
共识5个阶段
NewHeight
propose
prevote
precommit
commit
123456789101112131415161718 +--------------------------------------+ v ...
Tendermint 启动流程
启动流程Tendermint 的启动流程比较清析明了,各业务启动流程都在对应的实现代码,主启动流程加载所需配置,由各启动实现类启动自己对应业务,如节点启动相关在 nodeImpl,共识相关处理是 state 中进行处理。
流程大致:
加载配置 node.NewDefault
启动运行 Start
启动相关实现的 OnStart
先看启动流程
启动入口代码,这里使用到了一个命令行工具:cobra。代码位置:cmd/tendermint/main.go
1234567891011121314151617181920212223func main() { ...省略部份代码 // NOTE: // Users wishing to: // * Use an external signer for their validators // * Supply an in-proc abci app // * Supply a genesis doc file from another source // * Provide their own DB implementatio ...
Tendermint ABCI概述
ABCI 概述 (Application BlockChain Interface)作用让应用程序层 和 共识层进行解耦。可以理解为一套应用程序的接口标准,是应用程序层和共识层进行的桥梁。
应用程序区块链接口(ABCI) 允许用任何编程语言实现应用程序拜占庭容错复制。区块链是多主状态机复制的系统。ABCI是一个接口,定义了复制引擎(区块链)和状态机(应用程序)之间的边界。使用Socket协议,运行在一个进程中的共识引擎可以管理运行在另一个进程中的应用程序状态。以前,ABCI被称为TMSP。
官方github:ABCI
开发动机目前为止,所有的区块链“技术栈”(如比特币)都是作为一个紧耦合的整体进行设计的。 换句话说,每一个区块链技术栈都是一个单独的程序,处理分布式账本的所有问题。 这些问题包括P2P连接、交易内存池广播、最新区块共识、账户余额、图灵完备合约、用户级权限管理等。
在计算机科学中,过高耦合度的程序架构通常不是好做法。 因为耦合度高会导致程序难以复用,并且这样做易导致代码库分叉进而维护困难。 当开发者没有对代码库进行模块化设计并遭受“意大利面代码”的困扰时,这种设计方式导致 ...
Tendermint概述
简单理解为一个分布式状态机
什么是TendermintTenermint是个能够在多机器上安全一致地复制应用的软件。 安全是指无论多达1/3的机器出现何种类型的故障,Tendermint都可以正常工作。一致是指每个正确运行的机器都可以获取完全相同的交易日志并计算相同的状态。 在分布式系统中,安全一致地复制至关重要;从货币到选举再到基础设施管理等广泛应用容错方面,它都有着着重要作用。
拜占庭容错(BFT)指的是系统能够容忍机器以任意方式出现故障,包括机器故意危害系统的方式。拜占庭容错理论已有几十年的历史,但最近由于比特币和以太坊等“区块链技术”的成功,其软件实现才逐渐流行。区块链技术是在更现代的环境下对BFT的一种改造,重点引入了点对点网络和密码认证等技术。区块链的名称来源于交易的处理方式,交易被打包在每一个区块中,每一个区块存储前一个区块的哈希值,形成了一个链的结构。 实际上,区块链数据结构优化了BFT设计。
Tendermint包括两个主要技术组件:区块链共识引擎和通用应用程序接口。共识引擎,被称作Tendermint Core,保证所有的机器按照相同的顺序记录相同的交易。应用程 ...