algorithm 参与度算法
前言参与度算法是用在计算多个节点之间的参与情况的算法,也就是说在多个已经确认的节点个数之间的一种算法。
说人话就是假设有10个节点,这10个节点都正常工作参与度就是100%,如果挂了一个节点,参与度就是:90%。是不是有点感觉了。
在分布式场景下,参与度是个重要的指标,尤其是各种分布式应用,那用的更是多。比如有一堆reids集群,挂了几个还可以工作,这就是一个参与度的阀值。在DPOS共识的区块链的场景下,这个值就可以起到一个参考指标的作用。
实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293package com.liukai.blockchain.labs;import java.util.Arrays;import java.util.HashMap;import java.ut ...
tron 公开节点和对外接口
节点看完基本的官方文档介绍之后,就会想着如何去试试官方文档中给的接口。对外提供的节点: https://tronprotocol.github.io/documentation-en/developers/official-public-nodes/这些节点都是对外节点,官方提供的
HTTP 接口对外提供,接口列表:https://tronprotocol.github.io/documentation-en/api/http/现在,节点也有了,接口也有了,那就试试看这些接口的情况
调用HTTP接口查询最近区块这个接口非常常用,其实看官方的文档就可以知道怎么调用。
总结接口类拟的用法官方文档已经写的简单又清楚,我就不献丑了,写这个就是让大家知道有这个文档,使用官方公开的节点也可以让自己先熟悉怎么用。我常说的一句话,先熟悉怎么用,快速消除陌生感,之后再了解原理,其实就是那么回事。什么事,一翻译成大白话,原理都是相通的。
java-tron 区块处理
前言区块链当中,所有的交易都包含在区块中,如何验证每一次接收到的区块的合法性就至关重要。区块链是分布式的、对外公开的,所有人都可以参与,有些恶意节点通过修改代码的形式加入到区块链中,把一些对自己有利的交易、区块广播到节点当中,使这些交易对自己有利。所以判断合法交易、区块就尤为重要。这些操作都是交易区块链当中的各个节点进行验证。
区块区块是用来包含tron网中的交易的数据结构,是由27个超级节点(SR),每隔3秒,依次轮流将交易打包后的数据结构。
处理区块处理入口区块处理主要有两个入口,也对应两种场景:
同步处理区块
追块处理区块
同步处理区块,是节点之前本节点和网络中的节点区块之前高度没有差异,同步接收最新的区块。追块处理区块,本节点区块高度落后网络中的节点太远,需要追到最新高度后,转换为同步处理区块。
同步处理区块入口类:TronNetHandlerTronNetHandler 是一个 Netty 的 Handler,接收其他节点的消息,基本和其它节点交互的入口类都是这个类。整个流程调用栈:
12345TronNetHandler.channelRead0 |---tron ...
tron 交易处理--交易执行逻辑
前言分布式区块链环境下,所有的钱包要发起交易,都可以通过网络中的FullNode节点发起交易。TRON 网络中,交易是从客户端发起,再通过 FullNode 进行广播,并将交易广播到网络的SR节点,并由SR节点进行打包。
主要角色TRON网络中,站在发起交易的角度去看,需要了解的三个角色:
钱包客户端,代表用户
FullNode全节点,用来转广播交易
SR超级节点,用来使交易上链
使用TRON网络,主要就是各种钱包客户端。构建交易,需要通过钱包应用发起,可以是手机钱包或者浏览器钱包插件,都可以发起一笔交易,也可以使用HTTP接口或者RPC接口都可以发起交易。
比如用用浏览器插件发起:
当然如果需要深入了解,可以使用官方的wallet-cli工具,通过代码的方式,了解其实现原理。官方钱包项目: https://github.com/tronprotocol/wallet-cli
交易图形界面操作,就不需要多说了,这里来了解一下使用wallet-cli工具发起的转账流程,wallet-cli就是一个客户端,图形界面当中使用客户端也是相同原理。
TRON 中有三种代币,是三种不同类型 ...
时间轮 slot 机制实现
slot机制Slot 机制,大白话,就是分片机制。可以把时间或空间分成一个个槽,通过一定算法使用这些槽的机制。
有什么用?作用是可以把数据平均分存放到某个槽空间内,比如Hash环中使用的Hash Slot。再比如数组,可以再解为是一种槽机制。这是空间是的槽机制,在时间维度,可以把时间分片,每隔一段时间,就是一个时间槽位。比如:一分钟有60秒,每2秒划分一个槽位就有30个槽,那就可以执行30次;比如:一天有86400秒,每3秒划分一个槽位就有28800个槽。
这里实现一个简单的时间槽机制,分布式场景下,通过这个机制在,去中心化的场景下,让不同的机制按照一定时间槽机制进行运作。
实现要求必须保证是精准的3秒间隔,中间代码处理业务逻辑的时间必须也要计算在内。比如,执行业务逻辑使用100毫秒,那么到下一个3秒的间隔就是2900毫秒;如果,执行业务逻辑使用500毫秒,那么到下一个3秒的间隔就是2500毫秒;如果,执行业务逻辑使用2900毫秒,那么到下一个3秒的间隔就是100毫秒;保证完整的3秒,不多不少。
思路这样的话,就要记录计算所有时间:
标记当前开始时间
记录业务逻辑处理的时间
计算出 ...
tron TaPos理解和应用
什么是TaPos全称:Transaction as Proof of Stake,基于交易的权益证明机制。大白话:这笔交易所基于的证明。啥意思?就是说,在区块链的场景当中,每一过往的笔交易都基于一个区块。因为区块链当中所有的交易都是被打包到一个个区块当中的,如果这是一笔成功的交易,那它一定是存在于某一个特定的区块当中。另外,每一笔交易都有一个唯一的Hash,保证这笔交易的唯一性。那就破案了,这里的证明就是指:区块。
有什么实际作用
防止有不包含区块引用的交易被重放到某个分叉上,这样能避免不是该分叉的区块被添加到该分叉。
告诉用户该块是在哪个分支上面。
这个需要事先了解切链场景,才能说明这个问题。
先说分叉:
在区块链网络当中,如果同时收到相同高度的区块就,链就会分叉,你可以理解为git提交记录,从master分支中切出一个新的分叉,会有人基于这个分叉不断的提交代码。在区块链的角度也是一样的,如果区块高度都是 1000 和 1000',那这个时候链就会出现分叉。
在哪里用一般在验证广播交易阶段使用。
构建交易构建一笔交易时,会将这笔交易所需要引用的区块高度带上。交易构建之后会被 ...
tron http接口postman
接口把官方文档中的所有http接口整理成了postman的形式,方便自己调试使用。
使用http接口的话,需要注意的是,在代码中一个流程就可以完成的事情,在http接口下,需要一步一步执行。
比如创建一笔交易,需要调几次接口:
createtransaction
gettransactionsign
broadcasttransaction
这个和使用 wallet-cli 工具不同的的,wallet-cli 在一次交易构建中,在一次方法内,完成了这三步的操作。
构建交易示例构建一笔交易 createtransaction构建一笔交易,需要拿到返回的结果、加私钥生成签名。
12345{ "to_address": "410932AD502E8AB6CE4B7E0E8D52D78BAA231C00B6", "owner_address": "41AF71E98F91515D7E5D5379837B9EEFD1AB4650D2", "amount": 999900000 ...
ETH2.0-Lido业务与质押了解
简述ETH2.0搞的风风火火,我没有32个ETH,不然我也去质押,多少赚点。我很好奇ETH怎么实现质押的,然后稍微看了一下。
Lido 是一个以太坊 2.0 质押服务平台,用户可质押任意数量。Lido 是一个跨多个区块链的流动性质押协议,这个是重点,现在多链生态才是王道,自己玩只会越玩越窄。
ETH的质押是 1:1 的获得质押代币 stETH,获得stETH后,可以参与 DeFi 市场其他服务。
Lido 的 stTokens 在整个以太坊生态系统中被广泛采用:
最重要的流动性场所包括Curve 上的 stETH/ETH 流动性池和Balancer v2 上的 wstETH/ETH MetaStable 池。
stETH在以太坊主网上的AAVE v2 市场上被列为抵押资产。
wstETH在 Maker 上被列为抵押资产。
steCRV(the Curve stETH/ETH LP 代币)被列为 Maker 上的抵押资产。
在 Lido 的 stTokens 之上构建了多种流动性策略,包括yearn、Harvest Finance和Babylon Finance。
Curve 是一个 ...
tron-产块-SR产块机制
SR 基于DPOS共识,所有节点按照时间顺序轮流产块。
DPOS 共识简述DPOS 共识即为,Delegated Proof of Stake 股份授权证明,在 POS 机制上进行改进。相较于DPOS更为中心化,大白话主要就是两个角色:
持股人(持币用户)投票选举出委托人(Delegates)
被委托人进行出块,将奖励分给投票人
在DPOS机制下,算法要求系统做三件事:
随机指定生产者出场顺序;
必须按顺序产块,不按顺序生产的区块无效;
每过一个周期洗牌一次,打乱原有顺序;
受托人的职责主要有:
保证节点的正常运行;
收集网络里的交易;
节点验证交易,把交易打包到区块;
节点广播区块,其他节点验证后把区块添加到自己的数据库;
带领并促进区块链项目的发展;
大至概念就是这些,下面对SR产块原理进行分析。
产块机制注意,TRON对DPOS的产块机制是做了调整的,不完全是按照这个的机制来实现。这个嘛。。。懂的都懂。
产块大流程
产块节点通过定时任务制每隔最多不超过3秒执行一次,判断是否轮到自己产块
如果是自己产块,回滚当前节点交易状态,并将交易池中的交易打包
打包成功后广播 ...
tron-节点-轻节点搭建
轻节点轻节点,只包含部分数据,节点轻量化,所以叫轻节点,BTC、ETH都支持轻节点功能,在tron网络中轻节点数据,只保留一天的数据,从这一天的数据为起点,同步后续数据。开发一般使用轻节点来进行开发和调试是比较方便的,全量数据需要很大的磁盘空间。
快照快照有全量数据快照和轻节点数据快照。全量数据快照,就是全部的数据,比较大。轻节点数据快照是可以指定某一天的数据快照。
看下单天的数据量很小,只有10G,全量数据就比较大,有442G:
搭建搭建看之前的搭建方式: FullNode搭建,唯一的区别在于,FullNode并没有指定数据快照,从零开同步,轻节点或全量节点,是指定的数据快照,这样就不需从零开始同步。
项目结构:
123FullNode.jarconfig.confoutput-directory
启动:
1java -jar FullNode.jar -c config.conf -d output-directory
优化参数自行指定,这里只说怎么启动轻节点。还有一点,轻节点默认不启用查询功能,需要在config.conf中修改参数
1openHistoryQueryWh ...