tron 公开节点和对外接口
节点看完基本的官方文档介绍之后,就会想着如何去试试官方文档中给的接口。对外提供的节点: https://tronprotocol.github.io/documentation-en/developers/official-public-nodes/这些节点都是对外节点,官方提供的
HTTP 接口对外提供,接口列表:https://tronprotocol.github.io/documentation-en/api/http/现在,节点也有了,接口也有了,那就试试看这些接口的情况
调用HTTP接口查询最近区块这个接口非常常用,其实看官方的文档就可以知道怎么调用。
总结接口类拟的用法官方文档已经写的简单又清楚,我就不献丑了,写这个就是让大家知道有这个文档,使用官方公开的节点也可以让自己先熟悉怎么用。我常说的一句话,先熟悉怎么用,快速消除陌生感,之后再了解原理,其实就是那么回事。什么事,一翻译成大白话,原理都是相通的。
小米 红米 路由器的sn计算
作用计算小米路由器的sn的网站 https://www.oxygen7.cn/miwifi 不能访问了,网上找了一圈,找到了这个方法,解决这个问题:记录一下,懂的都懂,相要用小米路由器科学的,这一步免不了。创建一个 sn.py 的python文件。
1234567891011121314151617181920212223242526272829303132#!/usr/bin/env python3import sysimport hashlibif sys.version_info < (3,7): print("python version is not supported", file=sys.stderr) sys.exit(1)salt = {'r1d': 'A2E371B0-B34B-48A5-8C40-A7133F3B5D88', 'others': 'd44fb0960aa0-a5e6-4a30-250f-6d2df50a' ...
GLIBCXX_3.4.20 not found 问题解决
前因最近在编译leveldb时,碰到一个问题:GLIBCXX_3.4.20 not found,这个提示已经比较明显了,是本地缺少重要的二进制LIB库文件。
本地的二进制文件一般在/usr/lib64下面,因为我使用的是64位系统。
处理查看本地系统的 GLIBCXX_版本
1strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
结果:
123456789101112131415161718192021GLIBCXX_3.4GLIBCXX_3.4.1GLIBCXX_3.4.2GLIBCXX_3.4.3GLIBCXX_3.4.4GLIBCXX_3.4.5GLIBCXX_3.4.6GLIBCXX_3.4.7GLIBCXX_3.4.8GLIBCXX_3.4.9GLIBCXX_3.4.10GLIBCXX_3.4.11GLIBCXX_3.4.12GLIBCXX_3.4.13GLIBCXX_3.4.14GLIBCXX_3.4.15GLIBCXX_3.4.16GLIBCXX_3.4.17GLIBCXX_3.4.18GLIBCXX_3.4.19GLIBCX ...
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',那这个时候链就会出现分叉。
在哪里用一般在验证广播交易阶段使用。
构建交易构建一笔交易时,会将这笔交易所需要引用的区块高度带上。交易构建之后会被 ...
shell 错误日志告警脚本
背景服务器有敏感数据,不允许直接登陆服务器查看日志文件,也不允许使用如ELK等日志功能收集日志,所以只能使用最简单的办法,只将错误日志进行收集,然后通过应用的webhook进行收集。
思路两种思路:
周期轮询
实时抓取
周期轮询每隔一分钟去抓取一次,错误日志的内容上送webhook。这样的好处是不会抓到过多的错误日志,但是也有个问题,有可能会错过关键的错误日志。假如每一分钟一轮询,这一次查询刚好没有错误日志产生,而这一个轮询时刻的一分钟内产生了错误日志,就会错过。
如果到到轮询时刻去统计这一分钟到上一分钟之间的错误日志,是可以,但是如果错误在轮询完成后的这一刻发生,需要等到一分钟之后才会告警出来,缺乏实时性,如果对实时性要求不高可以使用这种方式。
实时抓取这个思路很简单,就是实时抓取ERROR日志,有ERROR就推送webhook。实现思路:
使用 tail 查询日志
倒序获取第一条
关键字可指定
过滤关键字
下面这个脚本实现以上的几个思路,算是一种简单的实现,我一直觉得脚本这东西不要写的太复杂,需要考虑后面的人维护的成本。另外脚本尽量使用python而不是shell,pyth ...
tron http接口postman
接口把官方文档中的所有http接口整理成了postman的形式,方便自己调试使用。
使用http接口的话,需要注意的是,在代码中一个流程就可以完成的事情,在http接口下,需要一步一步执行。
比如创建一笔交易,需要调几次接口:
createtransaction
gettransactionsign
broadcasttransaction
这个和使用 wallet-cli 工具不同的的,wallet-cli 在一次交易构建中,在一次方法内,完成了这三步的操作。
构建交易示例构建一笔交易 createtransaction构建一笔交易,需要拿到返回的结果、加私钥生成签名。
12345{ "to_address": "410932AD502E8AB6CE4B7E0E8D52D78BAA231C00B6", "owner_address": "41AF71E98F91515D7E5D5379837B9EEFD1AB4650D2", "amount": 999900000 ...
docker 使用wget后文件消失
发现一个挺有意思的问题,之前一直没发现docker的这个问题,今天在改 Dockerfile 的时候发现,构建后运行容器,进行容器内部发现一个配置文件丢失了。检查命令没有问题,查看日志也没有问题。
build日志如下:
12345678910--2022-03-15 10:02:31-- https://raw.githubusercontent.com/protocol/deployment/master/main_net_config.confResolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.110.133, 185.199.109.133, ...Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... connected.HTTP request sent, awaiting response... 200 OKLeng ...