2020-02-03
整体架构HashMap 底层的数据结构主要是:数组 + 链表 + 红黑树。其中当链表的长度大于等于 8 时,链表会转化成红黑树,当红黑树的大小小于等于 6 时,红黑树会转化成链表,整体的数据结构如下:
图中左边竖着的是 HashMap 的数组结构,数组的元素可能是单个 Node,也可能是个链表,也可能是个红黑树,比如数组下标索引为 2 的位置就是一个链表,...
阅读全文
2019-11-17
前言MPT树,全称Merkle Patria Tree,是以太坊采用的一种经典存储结构。该结构不仅仅被以太坊所使用,像国内金链盟的Fisco Bcos联盟链就将该结构纳入了自身的存储体系。MPT树的概念可以说是很简单,就是merkle + trie,但又因为它是这些知识的综合体,故往往又弄的初学者一头雾水。这里采用一种层层递进的方式将这个MPT树的概念讲清楚...
阅读全文
2019-09-28
ECDSA-secp256k1以太坊数字签名算法使用的是椭圆曲线数字签名算法,英文简称ECDSA。其中EC是“椭圆曲线”的简称,DSA是“数字签名算法”的简称。椭圆曲线算法简单的说就是用X和Y坐标画一个曲线。这个曲线怎么画,需要很多个参数来确定。以太坊使用了一套叫secp256k1的参数确定了椭圆的形状。所以,以太坊的椭圆曲线签名算法全称就是ECDSA-se...
阅读全文
2019-09-24
前言多重签名:multi-signature,顾名思义就是多个用户对同一个消息进行数字签名。“用N把钥匙生成一个多重签名的地址,需要其中M把钥匙才能执行完成这个地址上的交易,N>=M,这就是M/N的多重签名”。
意义多重签名的作用意义非常,如果采用单独的私钥,尽管以目前的密码学可以保证无法被暴力破解,但是这个私钥不保证会以其他方式(...
阅读全文
2019-04-09
前言Redis作为内存型数据库,性能好,读写快。但是难免会遇到进程崩溃或者系统重启的时候,如果此时的内存数据没有被及时的保存,无法恢复,就会消失不见。所以数据的持久化是内存型数据库的重中之重。为此Redis对于数据持久化提供了两种持久化的方案,RDB(Redis DataBase)与AOF(Append Only)。下面我们来详细地了解下两者的区别于选择场景...
阅读全文
2019-02-24
前言Tendermint是Tendermint公司开源的的一个项目,是一个PBFT算法的变体优化,只需要两轮投票就可以完成共识。其本质上是POS+BFT结合的算法。
在上篇文章[PBFT学习笔记]的基础上,本文主要介绍Tendermint共识算法的核心流程和相关证明机制。
算法流程关于 Tendermint 算法的完整描述在这里。
下面这张图是 Tender...
阅读全文
2019-02-14
前言关于拜占庭将军的问题,也很有意思,可以当作故事看看。
PBFT是Practical Byzantine Fault Tolerance的缩写,意为实用拜占庭容错算法。1999年,卡斯托(Miguel Castro)与李斯克夫(Barbara Liskov)提出了实用拜占庭容错算法,解决了原始拜占庭算法效率不高的问题。
PBFT作为一种许可制的一种算法,应...
阅读全文
2019-01-22
前言正如以太坊官方黄皮书所描述的一样:以太坊是一个巨大的状态机,每次交易的执行、区块的产生都是状态的迁移变化。
本文就将围绕以太坊的state模块进行讨论以太坊状态的变化。
关于以太坊中的“状态”状态的定义一个账户对应一个状态,而以太坊是所有状态的集合。比如,最开始的状态是:{A有10元,B有0元},后来A发起了交易,给B2元,状态变成{A有8元,B有2元}...
阅读全文
2018-08-05
前言比特币和以太坊在“账户”上实行了不同的账户模型。比特币采用UTXO表示“未花费的交易输出”,而以太坊采用“状态”来维护账户的变化。
比特币的UTXO模型Unspent Transaction Output,译为:未花费交易输出。UTXO是不可拆分的,也就是说使用过之后一定有新的UTXO产生。
举个栗子:A账户有20个BTC(有钱的主儿),口渴了,斥巨资2...
阅读全文
2018-06-05
前言其实呢,今天刚接触Using for的时候,我并没有看懂它的意思。官方的文档有些晦涩难懂,导致我也产生了它与import的区别这样的疑问。
使用与import的联系与区别import是讲某个合约contract或者某个库lib导入到当前文件,它是using的前提;import后,当前文件内可以引用被引入文件内定义的library或contract。
举个...
阅读全文