rust-rustup介绍
rustup 工具链管理这个可能很少人在意,一般只有在安装rust的时候通过脚本安装了rustup,但是后面很少会用到。这几天在折腾rust-vim的时候,发现还是会用到,记录一下。这个工具不止是安装、御载,还是一个工具链管理工具。
有几个作用:
安装rust
卸载rust
升级rust
安装工具链,就是rust相关的工具链
官方说明
Rust 由工具 rustup 安装和管理。Rust 有着以 6 星期为周期的 快速版本迭代机制,支持 大量平台,因而不同时期存在大量不同的 Rust 构建版本。 rustup 用于管理不同平台下的 Rust 构建版本并使其互相兼容, 支持安装由 Beta 和 Nightly 频道发布的版本,并支持其他用于交叉编译的编译版本。如果您曾经安装过 rustup,可以执行 rustup update 来升级 Rust。
安装rust1curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
选1默认安装
再按照提示执行一下:
1source $HOME/.cargo ...
tron 接收交易和广播交易
前言分析tron是如何接收到交易,并在接收到交易后,后续是如何处理的,交易处理细节可以看看:tron 交易处理--交易执行逻辑
接收交易节点使用netty进行P2P连接,主要使用到的类:
TransactionsMsgHandler: netty Handler处理器
TronNetService: 消息分发
AdvService: 消息广播
FetchInvDataMsgHandler: 消息拉取
交易处理调用栈:
123TronNetHandler.channelRead0 接收消息\--TronNetService.onMessage 分发消息 \--transactionsMsgHandler.processMessage; 具体业务处理
TronNetService.onMessage 分发消息1234567891011121314151617181920212223242526272829303132333435363738394041protected void onMessage(PeerConnection peer, TronMessage msg) ...
ethereum原理-RLP编码
简述RLP(Recursive Length Prefix),中文翻译过来叫递归长度前缀编码,它是以太坊序列化所采用的编码方式。RLP主要用于以太坊中数据的网络传输和持久化存储。为什么要说这个东西,因为ETH在构建状态树的时候,使用到了这个编码,有比较强的关联性。
为什么要有RLP这种编码?是为了通用性,使数据成为平台无关性的数据。
递归长度前缀的目的在于,对任意嵌套的二进制数据数组进行编码,而递归长度前缀是用于序列化以太坊执行层中对象的主要编码方法。 递归长度前缀的唯一目的是对结构进行编码;而对特定数据类型(例如字符串、浮点数)进行编码的工作,则留给高阶协议;但正递归长度前缀整数必须以不带前导零的大端序二进制形式表示(从而使整数值零相当于空字节数组)。 带有前导零的反序列化正整数被视为无效。 字符串长度的整数表示也必须以这种方式编码,有效载荷中的整数也是如此。
意思就是说,底层存储的数据要保持一致,如果通过别的工具序列化出来的二进制数据,具有平台相关性,所以索性自己规定一种编码格式,上层使用者,自行解码。
编码RLP主要用于以太坊中数据的网络传输和持久化存储。分四种情况:1.单一 ...
tron-网络模型-AdvService广播服务
AdvService 作用AdvService 负责将数据广播到tron网络当中。基础框架是netty,在此之上开发AdvService对业务进行了封装。
数据包括:
交易
区块
需要注意的是,tron的AdvService的这套广播逻辑,不是单向广播,而是双向互动。啥意思,就是说,一般理解,一条数据广播出去后,就广播到对方节上了。但是tron的广播不是这样,而是先广播一个交易ID到目录节点上,目标节点收到ID后,再发一条请求接取的网络请求,把数据接回去!!!!是不是有点反直觉!!!
AdvService 主要成员invToFetch:invToSpread: 待广播的数据:交易、区块invToFetchCache:
主要方法consumerInvToSpread: 处理发送队列consumerInvToFetch: 处理拉取队列broadcast: 广播
处理流程
broadcast: 构建广播消息体:只包含ID
将数据添加入trxCache/blockCache
封装item
保存待发送消息: invToSpread.put(item)
consumerInvToSpre ...
tron-数据库设计1-接口和内存数据库状态
数据库设计tron的数据库设计是在基于leveldb的基础上抽像自己的相关业务,设计出基于自己的业务数据操作类。有两大块分别是:
内存数据库
持久化数据库
从两个角度进行梳理:
代码设计
业务应用
代码结构
代码结构设计
接口关系、主要功能方面着手了解。
业务使用
generateBlock
pushBlock
pushTransaction
switchFork
一、ITronChainBase 存储操作接口数据库相关的接口比较多,有些关系结构看起来功能相似,反而不容易区分出差异。下面按照功能职责划分。
作用:提供基础数据库基础操作方法。
ITronChainBase: 顶层接口,提供如:put、get、delete等相关操作,包含两个抽象类。
TronStoreWithRevoking: 抽象类,提供构造器中包含初始化方法。各个Store的初始化从这里开始,包含36个Store,如:a. AccountStoreb. BlockStorec. BlockIndexStore
TronDatabase:抽象类,提供的方法大部分为抽像方法,这样的话,实现类可以根据 ...
WOL 唤醒内网设备
简述使用在内网发起一个数据包来唤醒支持WOL的设备。但是这有几个前提:
设备支持WOL
代码实现使用UDP,设置广播模式,往目标或者直接全网段广播就行。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253package net.liukai.tool;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;public class WakeOnLanTest { public static void wakeUp(String macAddress) { try { byte[] macBytes = getMacBytes(macAddress); byte[] magicPacket = new byte[102]; ...
tron 参与度算法模拟
简述这个算法是在分布式场景下,计算不同节点之前的参与度,也就是有多少节点还存活,并参与到正常的业务处理当中。
为什么需要: 参与度?大白话就是有什么用,不用行不行?在中心化的应用当中,网络的数据处理只需要提交易中心节点处理即可。如下一个订单、注册一个用户。在区块链场景下,所有节点之前都是独立的个体,谁也没有比较权威,在完成一个业务的处理,需要多个节点的认可才可能完成。用不用需要看是使用的哪一种共识协议。如果是POW完全不用考虑,如果是DPOS这种就需要。在分布式环境下,一件事需要处理成功,需要有一定数量的可信节点来证明!、证明!、证明!,否则这件事就不可能被认为是一件可信的事情,比如,有一个节点给自己的账户转了1000万,并生产了一个区块记账,那这个区块必须得到网络中半数以上的验证者认可,那这个区块就是可信的。如果不需要的话,自己可以随意改代码给做对自己有利的事,那这个网络就没有人会信任,所以需要有一定的节点成为:验证者。
验证者那就选出一批验证者来干活。问题是,网络是分布式的,机器、网络节点有可能会故障挂掉,如何确保挂掉一部分验证者后,网络还能继续工作。那就需要保证有一批最小的可信验 ...
go-viper 配置文件框架
简介看了一些开源项目,很多都会使用viper这个配置文件框架,然后了解了一番,做一下输出。下面这些内容摘自官方github,官方的示例比较粗糙,下面稍加改动改动了一下写了几个示例。实际这个框架写的简单好用。
viper 是一个完整的 Go应用程序的配置解决方案,它被设计为在应用程序中工作,并能处理所有类型的配置需求和格式。支持特性功能如下:
设置默认值读取 JSON、TOML、YAML、HCL、envfile和 Java属性的配置文件监控配置文件改动,并热加载配置文件从环境变量中读取从远程配置中心读取配置(etcd/consul),并监控变动从命令行标志中读取从缓冲区读取支持直接设置配置项的值
viper读取配置文件的优先级顺序viper.Set() 所设置的值命令行 flag环境变量配置文件配置中心etcd/consul默认值
注意:viper的配置键是不区分大小写的。
创建测试项目最简单的方式使用vscode、goland直接操作一下就完了,如果你也习惯使用vim来操作,可以直接用下面这种方式。
1234567mkdir -p vipertestcd vipertestgit in ...
tron-资源模型-能量Bandwidth
资源模型tron有两种资源:
带宽 Bandwidth
固定免费额度
质押获得
能量 Energy
固定免费额度
质押获得
资源模型指什么,指tron链当中,每个账户account都拥有的除了代币之外的资源。这个资源是在执行交易或智能合约时,进行消耗的资源,大白话就是交易都有手续费,这个资源就相当于免费给你的资源,可以用来抵销转账的手续费,每个账户免费额度有限。
tron链中主要有两种资源模型:带宽和能量。这个模型对标以太坊的 gas 费。
什么意思呢?举个例子,比如玩游戏,游戏人物都有蓝条,这个蓝条使有技术就会耗蓝,这个蓝量会在一定时间内自动恢复。这个能量和带完是一样的道理。
会在24小时恢复tron链当中,每个账户都会拥有一定的免费资源额度,如果用完免费额度,就用账户中的代币抵扣,这个免费额度会在24小时内逐步恢复到一个初始值。
免费的能量有多少?
免费带宽是个固定值:1500。
质押能量有多少?
这个值是个动态值,跟参与这个游戏的人数有关。这里有一个概念,就是全网总能上限,就是全网最大的一个带宽上限。每个人都能从里面分到一点资源,当作一种福利看。
能分到多少,就要 ...