zoukankan      html  css  js  c++  java
  • 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的课程真的令人吐槽

  • 相关阅读:
    Python中的list,tuple,dict,set
    linux上发布网站遇到的问题
    asp.net通过配置文件设置默认页
    半自动安装 linux 系统
    redis整合spring
    redis介绍。
    DAC模式登陆(解决对象名'sys.sysobjvalues'无效)
    对存储过程进行加密和解密(SQL 2008/SQL 2012)
    UML 系列
    Redis学习笔记~目录
  • 原文地址:https://www.cnblogs.com/xuesu/p/10421308.html
Copyright © 2011-2022 走看看