GO语言区块链技术---电子加密货币与区块链

密码学基础

对称加密:加密和解密都是使用同一个密钥。例如:DES、AES-GCM、ChaCha20等

非对称加密:加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥,公钥和算法都是公开的,私钥是保密的。非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。例如:RSA、DSA、ECDSA、DH、ECDHE等。

哈希算法:将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆。例如:MD5、SHA-1、SHA-2、SHA-256等

数字签名:在信息的后面再加上一段内容(信息经过hash后的值),可以证明信息没有被修改过。hash值一般都会加密后(也就是签名)再和信息一起发送,保证这歌hash值不被修改

密钥

非对称式加密中的公钥与私钥

1、公钥与私钥成对生成

2、由公钥加密的信息,只有有对应的私钥者可以解密

比特币主要用了ECDSA(椭圆曲线签名算法),这个算法有两个特性

1、只要知道私钥,可以算出相应的公钥

2、用私钥签名过的东西,可以用公钥验证是否有配对的私钥签名

LevelDB

比特币客户端

1、参考实现Bitcoin Core

2、编译:Ubuntu下的编译;交叉编译Windows版

3、命令行下使用JSON-RPC API:获取区块链信息;获取网络信息;获取节点信息

P2PKH:Pay to Public Key Hash

其他交易脚本:

P2PK(Pay-to-Public-Key)脚本

MS(Mutil-Signature)脚本

OP_RETURN操作

P2SH(Pay-to-Script-Hash)脚本

交易内存池

1、收到交易广播,并验证通过的交易池

孤儿交易池

UXTO池

Bitcoin网络结点类型

钱包(Wallet)、矿工(Miner)、完全区块链(Full Blockchain)、网络路由(Network Routing Node)

Bitcoin拓展网络中的结点

参考实现结点、完全区块链结点、单独挖矿结点、轻量钱包结点、池协议服务结点、挖矿节点、轻量Stratum钱包结点

Bloom Filters

挖矿需要的硬件:CPU、显卡、FPGA、ASIC矿机

软分叉:主链、备用链、孤儿区块

矿池利益分配算法:PPS(Pay Per Share)、PPLNS(Pay Per Lash N Shares)、Score

共识攻击:

51%攻击、共识攻击不会影响用户的私钥以及加密算法、不能不签名、不能重新分配bitcoin、不能改变过去的校验或者改变比特币持有记录、双重支付

Bitcoin的缺陷:

交易确认时间长,吞吐量低

PoW挖矿浪费计算资源

ASIC矿机出现使全民参与性降低,算力集中

不完全匿名

无法存储太多数字资产

不支持复杂的脚本语言

缩短交易确认时间的方法:

缩短平均产生区块的时间(如Litecoin、Ethereum)

中心化服务(coinbase.com)

信任地址多重签名

开放交易和联合服务器

POS与DPOS

Segwit与闪电网络

POS(Proof of Stake)

2012年8月,PPC诞生,引入PoS概念

谁有资格写区块链?

挖矿浪费资源,拥有财富的节点(Stake Holder)可以负责生成区块,无需竞争

矿池的出现,使去中心化和安全都受到威胁

币龄

Delegated POS:投票选举制度

举例:steemd

为什么要隔离见证(Segwit):

签名可以更改,导致延展性Bug

签名占据了约65%的空间

闪电网络简介

基于微支付通道演进而来

本质是智能合约(序列到期可撤销合约,RSMC:Revocable Sequence Maturity Contract)

如果没有直接网络通道,可以间接的通过其它已连接的通道进行转移(哈希时间锁定合约,HTLC:Hashed Timelock Contract)