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 ...
jvm 使用CMS时FGC每次会跳2次
现象使用jstat -gc观察CMS FullGC的时候,发现每次到阈值回收的时候,FGC每次会跳2次:
123456789101112 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT68096.0 68096.0 0.0 16853.2 545344.0 371165.3 8755648.0 5890791.6 62312.0 59746.5 7076.0 6608.5 43879 1312.752 60 5.206 1317.95868096.0 68096.0 19377.9 0.0 545344.0 420827.3 8755648.0 5891528.9 62312.0 59746.5 7076.0 6608.5 43880 1312.785 60 5.206 1317.99168096.0 68096.0 0.0 ...
CMS回收器执行流程
CMS(Concurrent Mark Sweep)目标:获取最短回收停顿时间为目标的收集器。算法:"标记-清除"算法实现
CMS是老年代垃圾收集器,在收集过程中可以与用户线程并发操作。它可以与 Serial 收集器 和 Parallel New收集器搭配使用。CMS牺牲了系统的吞吐量来追求收集速度,适合追求垃圾收集速度的服务器上。可以通过JVM启动参数,来开启CMS:
-XX:+UseConcMarkSweepGC
牺牲吞吐量,追求收集速度是什么意思
其实实际使用过程中发现,CMS是将每次收集的时间减少,但是垃圾还是那么多,于是回收的工作方式就变成了跟吃自助餐常听到的一样"勤拿少取",就是每次回收时间短,也并不完全回收全部的垃圾,通过多次回来处理。
1.初始标记(CMS initial mark)单线程,标记新生代可达老年代的对象。为了收集应用程序的对象引用需要暂停应用程序线程,该阶段完成后,应用程序线程再次启动。
2.并发标记(CMS-concurrent-mark)在第一个阶段(Initial Mark)被暂停的应用线程将恢复运行 ...
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 是验证人节 ...
十步学习法
在IT行业,学习能力是一种必须的素养
在开发行业中,技术的迭代是非常之快,如何保证自身的技术随之迭代更新,就需在强大的学习能力,我在多年的摸索中总结出自己的一套学习方法,中间参考过各种不同的学习方法,其中的十步学习法是最接近我自身总结的方法。分享出来让更多小伙伴能够从中吸收优秀的方法应用到实际学习中。
第一步到第六步:概览全局,设定目标,搜寻资源,创建计划集中精力完成足够的前期调研,确保自己明确知道学习的内容,以及如何确定自己达成目标,挑选最好的资源来帮助自己实现目标,制定学习计划。
第一步:了解全局首先对需要学习的课题进行一些基础性研究,对该主题有一个全局性的了解。
第二步:确定范围根据自身的需求,决定学习的重点和学习的范围,在此阶段容易犯的一个错误就是:试图解决太大的问题而让自己陷入困境中。结合从第一步中获得的信息,明确自己的学习范围,尽可能的保持专注;同时也需要阐述自己的学习理由来帮助自己界定学习的范围。学习的范围务必大小适当,既能符合学习理由,有能符合自己的时间限制。
第三步:定义目标确定自己的学习目标,明确学习完成后应该达成的效果,根据简明清晰的目标,勾勒出勤奋学习后成功 ...
spring 源码01 开始阅读
在开始源码阅读之前,一定要使用过这个产品,了解这个产品的功能、特点。
在开始源码阅读之前,需要先明白几个事
是否足够了解
要阅读到什么程序
如何开始、从哪里开始
开始前最好是带着问题去阅读源码,不纠结于小细节。我一般读源码就是碰到问题后,带着问题去看,效果更好,不要想着假大空,把源码当小说一样看。单个问题解决后,再向外延伸,就可以把一些点串起来。最后,需要反复看一些重点部份,消失对源码的陌生感之后就会能看进去。熟悉之后就会一种想要了解更多的感觉就会一直往下看,这个就是自动驱动的动力。
如果看不下去,不要责怪自己懒,人对看不见短期收益的事提不起兴趣这才是正常的一个人,趋利避害是正常的。看不下去,该干嘛干,强迫自己看效果很差。不要骗自己,假装努力是在浪费时间,干IT的都很忙,看不去就看改改bug。
技巧
对说某个功能,在看之前,可以有自己的推测,想像后续的流程是如何执行的。
切一个 read_code 分支用来作注释,写上自己的见解,也方便以后再回到这块代码时能快速理解。
找到真实阅读源码的动力,如:
准备跳槽、面试
想了解原理
解决项目中的问题
装逼
跑测试用例,好的开源软件 ...
shutdownHook 死锁解决
最近碰到一个问题,通过脚本执行kill -15后,程序并没有退出,进程一直都在,最后被退出脚本的通过kill -9,杀死。导致数据完整性被破坏,程序再重启后不可用。通过排查认后发现是在执行shutdownHook时死锁程序死锁。
复现问题导致问题的代码,通过定位发现,程序在退出时卡住,线上代码敏感,写一个demo来复现:
12345678910111213141516171819public class Test { private static final Object lock = new Object(); public static void main(String... args) { Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override public void run() { System.out.println("Locking"); synchronized ...
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 生成的区块聚 ...
mysql 5.8 安装
选择版本mysql 这里通过rpm的方式安装,使用 MySQL 官方提供的安装包选择适合自己系统的包进行安装到这个页面下选择适合自己系统的版本:http://dev.mysql.com/downloads/mysql/
Select Operating System: 选择系统,如果是Linux CentOS 选 Red Hat即可,如果没有你的版本,选 Linux-generic。
Select OS Version: 选对应的版本,CentOS 7 选 Enterprise 7 x86, 64-bit。
最近添新增了一些CentOS7 的机器,就使用 Red Hat 的版本进行安装。
御载旧版本一定要御载干净,否则安装过程中有版本问题!!!yum 和 rpm 两种方式二选一:列出所有已安装的,但不在rpm中的包yum list installed mysql结果
mysql-libs.x86_64yum -y remove mysql-libs.x86_64
等价于上面的命令rpm -qa | grep mysql结果
mysql80-community-release-e ...
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 ...