code随手记

Practice from here


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

  • 搜索
close

tendermint多节点组网

发表于 2019-03-16   |   分类于 tendermint   |     |   阅读次数

多节点组网概述

在之前的课程内容中,我们的关注点集中在单一节点上的状态机逻辑实现上,这是因为 状态机复制的问题,是由tendermint负责完成的:我们在任何一个节点提交的交易请求, tendermint可以透明地帮我们在多个节点间实现同步。

在这一章,我们将通过前面已经学习过的简单的ABCI计数应用来学习如何部署多个tendermint节点, 并进一步理解tendermint共识的建立过程。为了简化操作,我们将首先了解如何将ABCI 应用与tendermint库集成为单一可执行文件,然后利用这个单一完整的程序来部署4个 节点旳区块链:

networking

阅读全文 »

tendermint多版本状态库

发表于 2019-03-16   |   分类于 tendermint   |     |   阅读次数

平衡二叉树简介

在之前的课程中,我们简单地使用磁盘文件来保存状态,对于简单的学习或验证 而言没有问题,但在生产环境中,tendermint推荐我们使用其基于avl树实现的 多版本状态库。

avl树得名于发明者G. M. Adelson-Velsky和Evgenii Landis,它是一种 自平衡二叉检索树,这包括两个核心的思想:二叉、平衡。

二叉是指整棵树中每个节点最多有两个子节点,左侧的子节点值一定小于父节点值,而 右侧的子节点值一定大于父节点值,二叉树的主要用途是进行数据检索:当查找指定的数值时, 只需要逐层与节点值比较即可快速定位,因此被称为二叉检索树。

例如,下图就是一个典型的二叉检索树,每个节点列出了其表示的值:

btree

阅读全文 »

tendermint默克尔树

发表于 2019-03-16   |   分类于 tendermint   |     |   阅读次数

默克尔树概述

在ABCI应用响应Commit请求消息时,需要计算并返回当前状态的哈希,以便Tendermint 将其打包到下一个区块头里(app_hash字段)。

但是,如果我们还按原来的方法计算一个总体哈希,例如:hash: = tmhash.Sum(state), 就存在一个问题 —— 当查询某个特定账户的状态数据时,如何验证该状态是未被篡改的?

显然,单独返回整个状态的哈希是不够的,但是我们也不可能将整个账户表提供给 客户端以便其重算哈希进行验证,因为其中包含了其他用户的账户信息。

这就是默克尔树(Merkle Tree)的用武之地:不需要提供完整的数据(例如整个账户表), 就可以验证某个数据(例如账户A的状态)是否属于该数据集。

在默克尔树中,叶节点对应于各状态的哈希值,根节点则对应于整个状态的哈希, 中间各层的节点则分别由前一层节点两两结对后计算哈希得到。

例如,下图给出了4个账户状态时的默克尔树的构成:

merkle-tree

阅读全文 »

tendermint发行代币

发表于 2019-01-06   |   分类于 tendermint   |     |   阅读次数

发行自己的代币

代币发行概述

状态机模型是一种图灵完备的计算模型,理论上你可以用它来实现任何应用, 代币也不例外。例如,我们可以借鉴以太坊的账户模型,设计出自己的账户 状态机:

sm-account

出于简化问题考虑,我们假设系统只发行一种代币,因此在账户模型中只需要 记录每个账户的余额即可。所有账户及其余额是整个系统的状态,只有当交易 发生时,这一状态才会发生变化。

例如,假设账户tommy有1000个代币,那么当发生一笔从mary到tommy 的500个币的转账交易后,tommy的余额将增加500个代币,同时mary的余额将 减少500个代币,这意味着整个系统在这笔交易后进入了一个新的状态。

基于我们之前的学习,很容易将账户采用哈希地址来表示,同时通过非对称 加密技术进行身份验证,从而实现一个去中心化的代币账户状态机。

阅读全文 »

12…12
夜千寻墨

夜千寻墨

扫码关注微信公众号,及时获取文章更新

48 日志
10 分类
77 标签
RSS
GitHub Weibo 简书 instagram
© 2020 夜千寻墨
powered by Hexo
theme - Next
本站访客数人次 总访问量次