不想说话,自闭中..

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

记账工作

由于记账是有奖励的,每次记账都可以给自己凭空增加一定数量的个比特币(当前是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

这里写图片描述

以太坊学习1—搭建以太坊私有链

关于以太坊

关于以太坊,我刚开始是从区块链的一些开源项目得知的。我们知道,比特币仅是作为数字货币的功能,是最开始区块链技术的应用(区块链1.0)。而以太坊作为公共的区块链平台,是一个去中心化的分布式账本技术的应用平台。智能合约的编写,让它可以实现更多元化的服务,所以我们更愿意称它为区块链2.0。

搭建环境

  • CentOS7.2
  • 以太坊客户端go-ethereum

    安装以太坊

    安装yum源

    1
    rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm

线程安全的单例模式

单例模式

单例模式(Singleton Pattern)是 Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。它有以下三个特点:

  • 单例类只能有一个实例。
  • 单例类必须自己创建自己的唯一实例。
  • 单例类必须给所有其他对象提供这一实例。

    创建单例模式

  • 懒汉式(线程不安全)

    所谓的懒汉式就是需要使用的时候才去创建实例。这种非线程安全的创建模式,懒加载很明显,不能够满足多线程条件下使用。