Blockchain
区块链
肖臻
- 不需要不存在证明,只需要存在性证明,不要求排序
北京大学Web3公开课
1、Web3 综述 24/03/26
- Web1:只读、静态内容
- Web2:可读写交互、数据存在中心化服务器、用户生成内容:社交媒体
- Web3:可拥有
- 区块链技术
- 智能合约
- 去中心化
- 不可篡改
- 密码学是区块链底层安全的保证
- 公钥密码学
- 哈希函数
- 比特币
- 去中心化电子记账系统
- 工作量证明PoW共识机制
- 不可篡改
- 以太坊
- 开源、去中心化、有智能合约的区块链
- 去中心化的全球计算机
- 智能合约
- PoW共识机制
- 22年转为权益证明PoS共识机制
- 智能合约
- 图灵完备、Solidity语言创建运行在EVM上的应用程序——智能合约
- 去中心化
- 代码即法律,无需第三方
- 无需准入
- 可组合
- 加密钱包
- Web3,使用加密钱包管理链上资产
- 助记词/私钥:谁拥有,就拥有资产
- 公钥:链上地址、用户名
- DeFi(去中心化金融)
- 建立在区块链、智能合约平台上的金融类产品工具
- 去中心化交易所DEX
- 链上借贷
- 稳定币
- NFT
- 非同质化代币
- 不能互换,独特数字代币
- 门槛低
- 链上艺术品/头像
- 虚拟房产
- 链上凭证
- NFT交易所
- DAO
- 去中心化自治组织
- 与公司制相对
- 通过智能合约保持运转的组织
2、密码学基础 24/03/28
- 数字签名
- 私钥签名,公钥验证
- ECDSA(椭圆曲线数字签名算法)
- 区块链中的密码学
- 钱包地址
- 每个钱包地址都是一个公私钥对
- 私钥 产生 公钥
- 公钥 产生 地址
- 私钥是证明你拥有账户的唯一方式
- 不要复制私钥/助记词
- 交易
- 每个交易就是一条message
- 哈希算法
- 除了暴力枚举以外没有其他挖矿方法
- pow靠hash出块
- 维护最长链(链式结构)
- 前改后都改
- 枚举哈希很难,所以很难对抗全网算力
- Merkle Tree
- 快速确认某个值是否在某个集合中的数据结构
- 用于区块存储交易、发行白名单
- 钱包地址
3、以太坊和Layer2
- Layer2(加速)
- 交易批量打包压缩
- 状态转移确认
- 交易不用在以太坊Layer1上执行,在链下执行完上传就行
- Rollup把状态更新提交到主链的智能合约
- 智能合约的验证并不用执行交易
- Optimistic Rollups
- 欺诈性证明
- 假设正确,有人发现不对可以发布证明,验证主链错误,恢复Rollups之前状态,惩罚、奖赏
- 用挑战期来保护数据正确性(时间太长)
- 激励验证
- OPTIMISM
- 单轮交互式欺诈式证明
- ARBITRUM
- L2上的多轮 L1上一轮
- 不断拆分存在争议的部分
- 切分出一个最小的不能拆分的单位,发送给L1,最后确定争议的胜者(智能合约的可组合性?)
- 分成200份 优化 缩小范围
- 并不减少复杂度
- 多伦交互式证明,窗口争议期更长,
- zk-Rollups(基于零知识证明的Rollup扩容方案)
- 有效性证明(不需要挑战期)
- 目前的zk-rollup通用计算能力较差
- 提交的时候就带着证明
- 更安全,当场验证
- 依赖的证明很复杂
- 目前无法和EVM完全兼容
- 零知识证明
- 证明者向验证者证明一个陈述是正确的,而无需透露除该陈述是正确的之外的其他信息
- 证明者负责计算交易并聚合成零知识证明
- 验证者证明其有效性
- 数学基础:同态加密(公私钥签名验证)
- 有效性证明(不需要挑战期)
- zk-SNARK
- 证明者向验证者一次性发送一个较细 无需交互
- 验证速度快 存储空间小
- 应用:
- Zcash 用其来隐藏具体交易信息
- Filecoin
- zkSync 基于SNARKs
- 链上存储 链下存储
- EVM兼容,把智能合约转换操作码来实现Solidity兼容
4、智能合约
5、DEFI 去中心化金融
6、Web3应用
7、去中心化安全
MOOC
c1 什么是区块链和区块链思维
c2 比特币分布式账本初探
在比特币中,公钥用于接收比特币,私钥用于生成其对应地址上支付此特币所必需的签名,以唯一确定这些比特币的所有权。具体到比特币地址的生成,其实是先产生私钥,私钥通过椭圆曲线算法这种不可逆的函数来产生公钥,公钥经过一系列不可逆的运算再来产生地址。
私钥持有者,是比特币的拥有者
钱包:用来装密钥的容器,不包含具体几个比特币
- 钱包装了一系列密钥用于完成比特币交易
- 钱包地址(银行账户)公开、私钥:银行卡密码
持有比特币:拥有特定比特币的地址(银行账户)
需要知道余额需要到区块链计算
交易
- 第一笔是矿工挖矿所得
- 之后都有一个或者多个输入、一个或者多个输出
- 输入:谁给A的币的地址
- 数目:币数目
- 输出:B的地址
- 每一个交易输入,都和之前的某个交易输出关联
- 本质:包含输入值和输出值的数据结构
- 输出是对之前输入的引用
- A给B转账的时候,加了公钥脚本(使用输出的必须是Bob本人)
- 签名需要用私钥,私钥对应的公钥才能验证签名通过
- B签名后,其他人可以用Bob提供的公钥验签
某个地址,具有多个比特币,其实是钱包根据未花费的交易输出算出来的
地址是公钥的hash 多方签名
私钥生成公钥,公钥生成地址
- 公钥加密的内容只能用私钥解密,利用公钥可以生成比特币地址
- 私钥签名,公钥验签名
- 公私钥生成以及签名算法都基于椭圆曲线算法
避免假账
- 私钥签名,公钥验证
- 签名过的交易信息广播,广泛验签
- 接受信息,生成区块,组装(默克尔树)
哈希指针
双花问题(利用UTXO解决)
- 一笔钱被花了多次
- 比特币以交易输出(TXO)的形式存在
- 输入输出配平(12 = 2(给别人) + 10(给自己))
- majority attack (实现双花)
算力
- 用来衡量哈希运算能力的指标(每秒能进行多少次hash运算)
- 矿工通过算力解答加密难题,把转账信息放到区块中,完成这笔转账
- 51%攻击,控制算力
共识算法:规定了下一个新区块由哪个矿工生成
- 工作量证明 pow 通过工作结果证明完成一定的工作量(不对称性)
- 容易重算,不容易得到
- 权益证明
- 委托工作量证明
- 实用拜占庭容错算法
- 工作量证明 pow 通过工作结果证明完成一定的工作量(不对称性)
区块的链接
- 元数据:难度、时间戳和nonce
- 找到区块:hash or 区块高度(不能唯一表示)
共识算法规定下一个新区块由哪个矿工生成
- 区块包含交易记录,生成的矿工获得比特币奖励
c3 从分布式信息系统视角分析比特币
- 分布式系统随意分布空间位置,没有控制整个系统的主机
- 系统资源被所有计算机共享,可以用系统中其他资源
- CPU 文件 打印机
- 任意两台计算机可以通信交换信息
- 系统资源被所有计算机共享,可以用系统中其他资源
- 分布式系统
- 信息发布与传输:任意节点都可以发起,相邻交互,全网公开
- 记账:根据共识机制完成工作量设定获得记账权,可以溯源,不可篡改
- 存储:每个节点有完整本地数据存储,实时更新
- 选择完整or部分存储
- 一致性
- 一致性
- 原子提交协议,引入多个leader机器
- leader机器故障?
- 保证一定数量的机器能够运行,利用共识机制
- Paxos
- 解决分布式一致性问题
- Proposer 提议者
- 利用更大的ID抢占临时访问权 避免思索
- Acceptor 批准者 完全对等独立
- Learner 学习者 学习value
- 拜占庭将军问题
- 可能出现丢失or错误的不可靠信道,如何通过消息传递的方式达到一致性
- 要求
- 所有忠诚接受相同命令,恶意消息不被接受
- 发送命令的将军忠诚,忠诚将军遵守
- 选择正确的人(不同共识算法不同),加大造价成本
- 拜占庭容错算法(BFT)
- 类似于POW
- PBFT(实用拜占庭容错算法)
- 复杂度指数级降低到多项式级
- 失效节点不超过1/3保证信息可靠
- 通信次数换取可靠性
c4 智能合约和区块链操作系统
以太坊:开源的有智能合约功能的公共区块链平台,以太币(ETH),以太虚拟机(EVM)
智能合约:脚本代码(计算机程序定义 自动执行的承诺和协议)
以太坊的优化:图灵完备、可编程的底层系统(区块链网络)
共识:POW+POS 矿工和持币者利益平衡
以太坊智能合约:代码(合约功能)和数据(合约状态的集合),存在于特定地址,依靠EVM以二进制形式在区块链运行
智能合约
- 数据库合约:数据存储,允许其他合约crud
- 管理员合约:在数据库合约上运行,批量读写
- 合约管理合约:管理其他合约
- 跟踪所有合约/组建,处理通信,简化模块设计
- 应用逻辑合约:包含应用程序的特定代码
- 公用合约:执行特定任务,被其他合约无限制调用
- 少依赖,少空间
区块链虚拟机
- 自动兼容所有硬件
- 本质实现将硬件层or系统层进行抽象,隐藏底层实现细节,实现快速应用部署
- 将高级语言程序转换成CPU相关指令
- 语言 业务分离
- 提供原始API为了编写智能合约的需要
- ABI:其他应用要知道本合约提供的借口以及数据结构
- 流程
- 高级语言和API编写智能合约
- 编译成byte codes 并同时生成ABI
- 测试后就可以利用byte codes 进行交易
以太坊虚拟机
- Solidity 面向合约 类似JS 静态语言
- 基于账户而不是UTXO
- address类型 定位用户 定位合约 定位合约代码
- 合约本身也是一个账户
- 再去中心化网络运行
- 强调 合约 函数 的调用方式
- 异常机制,全部回撤,保证原子性
- REMIX(IDE)
- Solidity
- 版本申明
- 引用文件
- 路经相关
- 在实际编译器中的使用
- 代码注释
- 文档注释
- 合约结构
- 状态变量
- 函数(可执行单元)
- 函数的修饰符:声明时修改语义
- 事件(日志提供的便利借口)
- 结构体类型
- 枚举类型
- Solidity 面向合约 类似JS 静态语言
以太坊的共识机制
- POW
- 前沿
- 家园
- 大都会
- POS
- 宁静
- Casper
- 基于保证金的经济激励共识协议
- POW
挖矿
- 生成钱包(地址 可获取)
- 电脑(显卡 主板电源决定稳定程度)
- 挖矿软件(xxx)
EOS
蚂蚁课程
区块链系统开发与应用(初级)
区块链核心概念
区块链本质是去中心化的(账本)数据库
- 中心化
- 单点失效 系统无法使用
- 隐私保护性差
- 信息泄漏
- 诚信问题
- 去中心化
- 避免单点失效
- 公开透明
- 不可篡改
- 可追溯
- 中心化
链块式结构:假象式区块链(时序的链块式结构)
- 如今成为行业
- 技术
- 密码学(签名让交易不可抵赖 可信 )
- 私钥才能签名
- 数据结构
- 分布式存储
- P2P网络
- 共识算法
- 博弈论
- 密码学(签名让交易不可抵赖 可信 )
区块链分类与架构相关术语
- 分类
- 划分1(节点的加入、退出是否需要区块链系统的许可)
- 许可链
- 根据权限的主体是否集中
- 联盟链(只允许一个节点介入网络的半开放式区块链)
- 私有链(企业或组织部署,权限严格内部控制)
- 如蚂蚁链
- 根据权限的主体是否集中
- 非许可链(公有链)
- 开放程度最高,任何人可以参与
- 加密货币
- 可以参与网络共识
- 许可链
- 划分1(节点的加入、退出是否需要区块链系统的许可)
- 架构相关术语
- 一个区块 一页账目 包含多笔交易
- 利用链连起来,时序,时间戳
- DAG(有向无环图)
- 区块链的变种 也算区块链系统
- P2P网络
- 去中心化 每个主机都可以看成服务器和客户端
- 分类
区块链常用术语
- 智能合约
- 智能合约之于区块链
- 相当于SQL之于数据库
- 协议
- 共同遵从的一组约定
- 双花
- 把一笔资金花出去2次或多次
- 想要成功 一定要分叉(因为不可能在同一个区块、时序问题会避免同链)
- 算力或资金足够强大
- 共识算法
- 各分布节点对事务或状态的验证、记录、修改等行为达成一致确认的算法
- 伏笔 共识算法章节才有
- 数字签名
- 附加在数据单元上的数据or对数据进行密码变换
- 数据单元的接受者可以确认来源和完整性,防止伪造抵赖
- 国密算法(国产加密算法)
- 加密算法
- 非对称
- RSA Elgamal ECC
- 对称
- AES DES
- 非对称
- 国产加密算法 国家密码局认定
- SM1对称
- SM2非对称
- SM3消息摘要算法
- SM4无限局域网标准的分组数据方法
- 加密算法
- 智能合约
区块链的匿名性和开放性
- 技术特征
- 匿名性 开放性 可追溯 不可篡改 共识 完整 自治 不可抵赖….
- 匿名性
- 只需要加密货币地址进行交易,不知道个人信息(如是谁 资产)
- 违法行为的保护伞
- 级别划分
- 基础:知道是谁,就可以查交易
- 高级:知道是谁,也查不到所有转账信息
- 极致:只有私钥持有者才能看到对应地址交易行为
- 开放性 (参与程度)
- 账目、组织结构、生态
- 公有链 联盟链 私有链
- 技术特征
区块链的可编程和可追溯
- 进化
- 可编程货币
- 可编程金融(通过智能合约生产金融衍生产品)
- 可编程社会(不仅仅是货币和金融衍生品)
- 智能合约并不是一定要在区块链系统中运行
- 区块链是最合适的环境
- 可追溯性
- 加入链中的交易记录永久存储
- 交易记录绑定交易者信息、完整记录、可追溯、不可被摧毁
- 一头牛从出生到被食用
- 农产品
- 基于区块链溯源的优势
- 安全性有效提高
- 记录不可篡改
- 数据透明度高 容易追溯
- 进化
区块链的不可篡改性
- 在开放的网络实现一个可信的账本、数据安全是第一要务
- 数据安全:账本不可损坏和不可篡改
- 不可篡改的技术实现
- 1、分布式多点记账 P2P
- 2、链块式结构(重点是防碰撞的hash函数)
- 区块内包含时间戳、交易信息、前和本块hash
- 默克尔🌲
- 区块分为区块头和区块体
- 区块的hash由前一块hash、随机数、树根、时间戳作为输入获得
- 记录在区块头
- 通过只同步区块头来减少流量和存储、
- 利用默克尔🌲来验证数据安全可靠(因为区块头和体分开)
- 平衡二叉树
- 叶子结点都是交易数据
- 非叶子结点是下属节点作为输入得到的hash
- 某个交易信息改了,树根也改了,快速定位篡改
- 可以快速验证交易是否属于这个区块
区块链其他技术特征
- 数据完整性
- 精确 可靠
- hash函数(是否修改) 数字签名(修改者身份) P2P网络(多点数据备份)
- 自治性
- 通过区块链协议和特性本身达到自治
- 集体维护性
- 各个参与方基于协议共同维护区块链系统
- 由于开放 自治 必然需要集体维护
- 可信交易
- 提升可扩展性和健壮性
- 不可抵赖性
- 行为不可抵赖:数字签名
- 发生时间不可抵赖:时间戳
- 数据完整性
区块链系统架构概述
- 架构
- 应用层:封装应用场景和案例
- 传统应用部署在区块链平台(冷链、等等)
- 合约层:封装脚本、算法、智能合约
- 无需第三方
- 可编程的基础
- 不止转账 记账也是 智能合约控制
- 通信层:节点间通信的通信协议
- RPC HTTP IPC等
- 共识层:对区块数据的有效性达成共识
- 进行验证的交易数据通过共识机制来决定记账权
- 得到符合条件的hash值,就可以记账
- 通道层:联盟链中确保隐私安全(跨组织数据信任)
- 需要隔离 也需要复用
- 网络层:区块链网络中节点与节点之间的信息交流方式
- P2P组网机制
- 数据传播机制
- 全网广播 验证 临近节点
- 数据验证机制
- 格式 输入输出 数字签名
- 数据层:存储区块链基础数据
- 不同链不同结构
- 应用层:封装应用场景和案例
- 架构
区块链系统开发与应用(高级)
共识机制
- BFT拜占庭共识
- 区别两军问题,两军问题在于可信信道
- 拜占庭信道无问题,问题在于如何达成共识
- 忠诚的将军让别的将军收到自己的真实意图
- 仅仅靠一致性,就能解决吗?
- 由于叛徒的存在,可能一致没有进攻
- 不该进攻却又一致进攻
- 需要看客观事实
- 仅仅靠一致性,就能解决吗?
- 形式化:一致性、正确性
- 一个发送命令的将军要发送一个命令给其他n-1个将军
- 所有忠诚的接受命令的将军遵守相同的命令
- 如果发送命令的将军也是忠诚的
- 所有忠诚的接受命令的将军遵守所接受的命令
- 在分布式系统中非常有挑战性
- 问题修复
- 口头协议
- 实现简单 算法复杂 需要克服更多困难
- 知道谁发的 能被正确发 知道缺少的消息
- 少于1/3 可解
- 不能追本溯源
- 书面协议
- 实现困难 算法简单 无需克服很多困难
- 知道谁发的 能被正确发 知道缺少的消息+签名不可伪造 否则发现
- 所有消息追本溯源 采用即可
- 忠诚将军必定一致
- 书面协议在实际情况下的问题可以通过区块链解决
- 口头协议
- POW共识
- POS共识
aweaweweaw
aweaweawea
- Post title:Blockchain
- Post author:Picasun
- Create time:2024-03-05 13:03:21
- Post link:https://redefine.ohevan.com/2024/03/05/Blockchain/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.