Introduction to Cryto & Crptocurrencies Lecture 1

Lecture 1.2 Hash Pointer & Data Structure

Use Case 1. 什么是Block Chain呢?

想象一个像链表一样的结构,只不过与通常的指向下一块地址的指针不同的是,这里用的是Hash指针。

如图:

如果黑客篡改了block 0,那么他也必须篡改Block 1的H1,Block 2的H2等,会给他带来一定困难。

Use Case 2: Merkle Tree

Block Chain固然具有防止篡改的能力,但是每次验证某条记录没被篡改,就需要O(n)的时间来一一核对。比如看第i个block有没有被篡改,就要去查block i + 1, block i + 2...

Merkle Tree则使用Hash Pointer + 二叉树结合,将核对验证的代价降到了O(logn)。

具体格式见下图。

现在如果要验证L3没被篡改,那么就只要看Hash 1-0,Hash 1, Top Hash没算错就行了。

所以,如果一个客户端只用到L3,那么它只需要获取用于计算的Hash 1-1, Hash 0,用于对比的Hash 1-0, Hash 1和Top Hash这几个值,而不需要存储整个交易历史。

 Lecture 1.4

Decentralized Identity Management 去中心化身份管理

用公钥作为身份,方便随时生成和丢弃。用私钥来发消息。

Lecture 1.5 A Simple Cryptocurrency

 Case 1: Goofy Coin

Goofy学会了区块链,Goofy想要发行自己的比特币Goofy Coin。

一枚虚拟硬币至少有两种行为:

1. 被创建

2. 被交易

所以Goofy给自己创造的这枚硬币一个独一无二的CoinID,并且留下自己的数字签名。

接着Goofy要交易给Alice,于是他建立一个新的交易记录区块,并且留下自己的数字签名

到这里为止,如果使用了强大的数字签名算法和Hash算法,一切看起来似乎井然有序地开始了,不过还存在一个致命问题Double-Spending Attack:

如果Alice已经把这枚硬币给了Bob,但她又想再花一次-给Chuck,怎么办?

由于Chuck去验证的时候认为这枚比特币和自己的Hash值都是合法的,所以Chuck被骗了。

如何解决这个问题呢?

1. 交易的同时,发行这枚比特币的全部历史交易

2. 历史记录唯一

3. 在每个操作上添加会话号

Case 2: Scrooge Coin:

Scrooge吸取了Groofy的教训,决定自己来发行新硬币。

硬币有两种操作:

1. Create

2. Pay

Scrooge引入了面额这一概念,一枚硬币对应一个面额,就像纸币一样,方便拆分。

如果面额对不上,比如Scrooge有一枚5元钱的硬币,但是他要付3元,那么Scrooge就可以把这枚5元拆分为2元和3元两枚硬币,实际操作是通过Destroy&Recreation完成的。

每次操作、交易的原则是:价值守恒-比如Scrooge的5圆硬币拆给Groofy3元,自己剩下2元,现在Scooge+Groofy有2枚硬币了,但是整体价值还是5元。

 

 现在还存在一个问题:历史由Scrooge维护,这违反了去中心化原则。

 BTW: priceton的课程真的令人吐槽

原文地址:https://www.cnblogs.com/xuesu/p/10421308.html