核心idea

通过后一个区块对前一个区块的引用,并以加密技术保证了区块链不可修改

特性

分布式的,不可篡改的数据库,可验证、可信任。

比特币

基于数学加密原理构建的不可伪造的货币系统,使用区块链技术实现了数字货币的可信支付

第一篇paper&比特币白皮书

比特币通过区块链技术,把整个账本全部公开,人手一份,全网相同,修改账本不会被其他人承认

无需中央信任机构,密码学理论保证货币防伪造

区块链原理

一个不断增长的全网总账本

每个完全节点都拥有完整的区块链,节点总是信任最长的区块链,So,伪造区块链需要拥有超过51%的全网算力

区块链是由区块s构成的有序链表,每个区块都记录了一系列交易,并且,每个区块都指向前一个区块(通过记录上一个区块的哈希),从而形成一个链条,每个区块都有一个唯一的哈希标识。每一个区块还有一个Merkle哈希用来确保该区块的所有交易记录无法被篡改。

P2P交易原理

无需信任中介参与的P2P(Peer-to-peer)交易

数字签名

每个人都可以自己生成一个秘钥对,包含一个私钥和一个公钥:

私钥被称为Secret Key或者Private Key,严格保密,不能泄漏给其他人

公钥被称为Public Key,可以公开给任何人

私钥签签名,公钥用于他人验证

常用的数字签名算法有:RSA算法,DSA算法和ECDSA算法。

比特币采用的签名算法是椭圆曲线签名算法:ECDSA,使用的椭圆曲线是一个已经定义好的标准曲线secp256k1

私钥本质上就是一个1~2256的随机数,公钥是由私钥根据ECDSA算法推算出来的,通过私钥可以很容易推算出公钥,所以不必保存公钥,但通过公钥无法反推私钥,只能暴力破解

私钥

比特币中,私钥本质上就是一个256位的随机整数

以太坊

支持智能合约的区块链平台

实现了一个图灵完备的脚本语言,运行在EVM(Ethereum Virtual Machine,以太坊虚拟机)中,任何人都可以编写合法的脚本来执行任意逻辑(有限制)

智能合约

一种运行在区块链上的程序,保证在区块链网络的每一个节点中运行的结果完全相同。

为了消除程序运行的不确定性,智能合约有很多限制,例如,不支持浮点运算(因为浮点数有不同的表示方法,不同架构的CPU运行的浮点计算精度都不同),不支持随机数,不支持从外部读取输入等。

最常用的开发智能合约的语言是以太坊专门为其定制的Solidity语言。

  • 智能合约部署在以太坊的区块链时,会根据部署者的地址和该地址的nonce分配一个合约地址,

  • 合约地址和账户地址的格式没有区别,但合约地址没有私钥,没有人能直接操作该地址的合约数据。

  • 要调用合约,唯一的方法是调用合约的公共函数 So 合约不能主动执行,只能被外部账户发起调用

  • 合约内部也可以存储数据(存储在合约地址关联的存储上) So 合约具有状态,可实现比较复杂的逻辑

  • 合约在执行的过程中,可以调用其他已部署的合约

Solidity

大括号语言

静态类型,支持继承、库和复杂的用户定义类型等特性