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.

264 lines
5.9 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## 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
```shell
# 安装运行的环境
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
```solidity
contract HelloWorld{
function hello() public returns(string){
return "Hello World";
}
}
```
- IDE : Remix
- https://remix.ethereum.org
- 运行环境: EVM
- Solidity -> EVM
- Java -> JVM
### 3.2 核心概念-账户
- 账户
- 地址(Address): 20字节
- 状态(State)
- 账户分类
- 外部账户(EOA)
- 合约账户
- 消息由于外部账户发布, 合约的账户不能主动发起交易, 只能通过外部触发
### 3.3 核心概念-钱包
- 钱包(理解为一个开发者工具)
- Geth, Mist, MetaMask
```shell
# 启动终端
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
- 后端 : 节点, 存储
- 智能合约
- 去中心化应用案例
- 预测平台: Augur
- 谜恋猫: https://www.cryptokitties.co/
- 百度莱茨, 网易招财猫, 小米加密兔
## 5. 智能合约编程语言-solidity
- 合约文件的结构
- 版本声明
- import
- 合约
- 状态变量
- 函数
- 结构类型
- 事件
- 函数修改器
- 代码注释
- Solidity 语言的类型
- 值类型(Value Type)
- 引用类型(Reference Types)
- https://docs.soliditylang.org/en/v0.4.23/types.html
- 常用值类型
- 布尔类型(Booleans)
- 取值 true/false
- 运算符 ! && || == !=
- 整型(Integers)
- int/uint
- 关键字 unit8 到 uint256(以8步进)
- 位运算符 & | ^ ``
- 算术运算 + - * / % ** << >>
- 右移 等价于 除法去除以2的几次方
-
- 字符串常量(String literals)
- 地址类型(Address)