Web3 学习代码
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
土豆兄弟 4f2213d902 去中心化概念文档更新 1 year ago
demo init project 1 year ago
.gitignore init project 1 year ago
README.md 去中心化概念文档更新 1 year ago

README.md

1. 区块链技术的核心概念和原理

  • 密码朋克 (Cypher punk)

    • 维基解密的创始人 阿桑奇
    • BT下载的作者 布莱姆-科恩
    • WWW 的发明者 蒂姆博纳斯-李
    • 智能合约概念的提出者: 尼克萨博
    • Facebook 创始人: 肖恩帕克
    • 中本聪
  • Adam Back 发明了 Hash cash, 使用了 POW

  • Haber/ Stornetta 提出时间戳方法保证数字文件安全的协议

  • 戴维 发明了 B-money, 强调了点对点交易和不可更改记录

  • 哈尔-芬尼 推出了 "加密现金"

  • 2008 年中本聪 《比特币: 一个点对点的电子现金系统》

  • 区块链技术前景

    • 应用场景
      • 资产:数字资产发行, 支付(跨境支付), 交易, 结算
      • 记账:股权交易, 供应链金融, 商业积分
      • 不可篡改:溯源, 众筹, 医疗证明, 存在性证明
      • 点对点:共享经济, 物联网
      • 隐私: 匿名交易
  • 什么是货币?

    • 凯恩斯《货币论》货币是可以承载价值的一般等价物
  • 货币历史

    • 铜币, 金银 -> 银票 -> 法币 -> 数字货币(一串数字)
  • 信任从何而来

    • 财产只受自己控制
    • 无通胀(总量不变得)
    • 没有假钞
    • 流通性好
  • 比特币是什么

    • 去中心化的记账系统
  • 比特币的原理

    • 账本如何验证?
    • 所有权问题?
    • 为什么记账?(挖矿)
    • 以谁的账本为准?(共识机制)
  • Hash

    • 哈希函数: Hash(原始信息) = 摘要信息
    • 特点:
      • 同样的原始信息用同一个哈希函数总能得到相同的摘要信息
      • 原始信息任何微小的变化都会哈希出面目全非的摘要信息
      • 从摘要信息无法逆向推算出原始信息
  • 非对称加密技术(交易签名)

    • 交易进行hash得到摘要
    • 用私钥对摘要进行签名
  • 所有权问题? 广播交易

    • 签名及验证
  • 为什么记账?

    • 记账: Hash 打包过程
    • 消耗资源
    • 奖励 -> 比特币发行
  • 挖矿 - 工作量证明

    • 规则: 一段时间内只有一人可以记账成功
    • 通过解决密码学的难题(即工作量证明)竞争获得唯一记账权
    • 其他的节点复制记账结果
  • 工作量证明

    • Hash(上一个Hash值, 交易记录集) = 456635BCD
    • Hash(上一个Hash值, 交易记录集, 随机数) = 0000aFD635BCD
  • 交易记录集

    • 收集广播中还没有被记录账本的交易
    • 交易的有效性验证
    • 添加一笔给自己转账的交易(挖矿奖励)
  • 共识机制

    • 两个节点同时完成工作量证明, 使用谁的区块?
      • 无仲裁机构裁决
    • 为什么要遵守协议?
      • 节点的工作量只有在其他节点认可认同其是有效地
      • 累计工作量最大的区块链
        • 独立
        • 延长最长链

2. 区块链的原理实现 (Python3)

  • python, pip, pipenv, Flask/requests
# 安装运行的环境
pip install pipenv
# 安装 python 的运行环境 -> 生成 Pipfile
pipenv --python=python3.6
# 安装需要的依赖
pipenv install flask==0.12.2
pipenv install requests==2.18.4

2.1 区块链的实现代码

  • demo/blockchain.py

3. 以太坊

  • 比特币的局限性

    • 2013 Vitalik Buterin 发表了以太坊白皮书
  • 以太坊描述及特点

    • 去中心化应用平台
    • 区块链 2.0
    • 可编程(操作系统)
    • 智能合约, EVM
    • 约每 15 秒出块, 挖矿奖励3ETH, 叔块奖励
    • 无总量限制(比特币总共有2100万枚)

3.1 核心概念-智能合约

  • 以太坊上的程序, 是代码和数据(状态)的集合

  • 准图灵完备

  • 典型应用: 代币: EOS, 游戏: 迷恋猫

  • 编程语言: Solidity

    • 类 JavaScript语言 .sol
contract HelloWorld{
    function hello() public returns(string){
      return "Hello World";
    }
}

3.2 核心概念-账户

  • 账户

    • 地址(Address): 20字节
    • 状态(State)
  • 账户分类

    • 外部账户(EOA)
    • 合约账户
    • 消息由于外部账户发布, 合约的账户不能主动发起交易, 只能通过外部触发

3.3 核心概念-钱包

  • 钱包(理解为一个开发者工具)
    • Geth, Mist, MetaMask
# 启动终端
geth --datadir testNet --dev console 2>> test.log
# 查看账号信息
eth
# 列出账号的一些信息
personal.listAccounts
# todo 各种 API, 自行进行查看即可

3.4 核心概念- 交易手续费 Gas

  • 费用: Gas价格(用以太币计价) * Gas 数量

  • Gas 可以限制工作量, 从账户进行付费, 矿工进行获取

  • 以太币单位

  • 最小单位: 1Wei

    • 10^9 Wei = 1 Gwei
    • 10^12 Wei = 1szabo(萨博)
    • 10^15 Wei = 1 finey(芬尼)
    • 10^18 Wei = 1 Ether

3.4 核心概念- 以太坊网络

  • 主网, 测试网络, 私有链, 模拟环境

  • 区块链分类

    • 公有链, 联盟链, 私有链

4. 去中心化应用

  • 传统互联网应用

    • 中心化, 容易更新, 数据完全掌控
  • 去中心化应用

    • 去中心化, 按规则运行
  • 去中心化 Dapp

    • 应用层
      • 前端 : APP, H5/CSS
      • 后端 : 节点, 存储
    • 智能合约
  • 去中心化应用案例