不想说话,自闭中..

用Java搭建一条区块链

前言

为了更好的理解区块链的底层实现原理,决定自己动手模拟实现一条区块链。

思路分析

通过之前的学习,从文本知识的角度,我们知道,创世区块、记账原理、挖矿原理、工作量证明、共识机制等等区块链的相关知识。

创建一条区块链,首先默认构造创世区块。在此基础上,我们可以发布交易,并进行挖矿,计算出工作量证明,将交易记录到区块中,每成功的挖一次矿,块高就+1。当然在此过程中,可能会出现“造假”的问题。也就是说,每一个新注册的节点,都可以有自己的链。这些链长短不一,为了保证账本的一致性,需要通过一种一致性共识算法来找到最长的链,作为样本,同步数据,保证每个节点上的账本信息都是一致的。

数据结构

以太坊客户端 Geth 命令用法-参数详解

前言

Geth 在以太坊智能合约开发中最常用的工具(必备开发工具),一个多用途的命令行工具。

命令用法

geth [选项] 命令 [命令选项] [参数…]

版本

1.7.3-stable

命令

共识协议之工作量证明(比特币的挖矿原理)

记账工作

由于记账是有奖励的,每次记账都可以给自己凭空增加一定数量的个比特币(当前是12.5比特币,博文写作时每个比特币是4万人民币以上,大家可以算算多少钱),因此就出现大家争相记账,大家一起记账就会引起问题:出现记账不一致的问题,比特币系统引入工作量证明来解决这个问题,规则如下:
一段时间内(10分钟左右,具体时间会与密码学难题难度相互影响)只有一人可以记账成功
通过解决密码学难题(即工作量证明)竞争获得唯一记账权
其他节点复制记账结果
不过在进行工作量证明之前,记账节点会做进行如下准备工作:

  • 收集广播中还没有被记录账本的原始交易信息
  • 检查每个交易信息中付款地址有没有足够的余额
  • 验证交易是否有正确的签名
  • 把验证通过的交易信息进行打包记录
  • 添加一个奖励交易:给自己的地址增加12.5比特币

区块链的记账原理

在讲记账原理之前,我们先聊聊哈希函数。

哈希函数

Hash(原始信息) = 摘要信息
哈希函数的特点:

  • 同样的原始信息用同一个哈希函数总能够得到相同的摘要信息。
  • 原始信息任何微小的变化都会哈希出面目全非的摘要信息。
  • 无法从摘要信息逆推出原始信息。

举例说明:
Hash(张三借给李四100万,利息1%,1年后还本息 .....) = AC4635D34DEF
账本上记录了AC4635D34DEF这样一条记录。
可以看出哈希函数有以下的特点:

以太坊学习2—转账与智能合约

前言

上一篇文章已经为我们搭建好了开发环境,接着上面讲,本篇文章将简单的记录如何创建用户、转账、编写第一个智能合约并部署它等操作。

开发者启动及创建账户

由于账户的余额为0时,是不能够部署智能合约的。这时,我们选择dev开发者模式进行开发。

  • 开发者模式启动以太坊
1
./geth --dev --datadir testNet console 2>> info.log

这里写图片描述