非商用声明: 本文来自 B 站 ’chainlink 预言机‘ UP 主所发布的课程学习笔记,如侵权请及时联系本文作者。
一、区块链简史
1.1 比特币:点对点的电子现金系统
区块链:将区块按照先后顺序连起来,构建了区块链的存储结构 公共账本:
1.2 比特币的设计哲学
系统简单,使用简洁脚本语言减少复杂性,但是导致系统非图灵完备
1.3 以太坊(加入虚拟机使得图灵完备)
以太坊产生了智能合约:是一种运行在区块链上的自治性协议,能够自动执行和验证合约条款。通俗讲,只能合约就是一段程序,可以在满足条件时自动执行预定的操作。下面为一些常见的智能合约实现的:
- DeFi: Decentrialized Finance: 去中心化金融,指用区块链技术和智能合约构建的一系列金融服务和产品;(通过智能合约实现借贷、抵押等金融服务。指使用区块链技术和智能合约构建的一系列金融服务和产品。)
- 预言机:将区块链系统外的数据以去中心化的方式写入到智能合约中。(将区块链系统外的数据以加密方式提供给区块链系统,从而实现数据的可信传递和验证。)
- NFT: Non Fungible Token: 非同质化通行证,一项通证编程标准,用于承载业务逻辑(一项技术,通过区块链技术实现数字资产的不可替代性)
- 跨链:不同区块链之间的智能合约进行项目操作
1.4 Layer 2(二层网络)
二层网络是指基于某一个区块链网络,开发一个新的协议,新的协议可以累计大量的交易收集并一次提交给网络,作用:
- 提升主网效率
- 增加主网可扩展性
- 增加更多功能
二、区块链设计哲学
2.1 去中心化
共同记账
2.2 共识
解决问题:如何防止人做假账? 当有人提交数据时,需要这个节点把数据广播给所有节点,每个节点都需要对这个数据进行合法性的验证。 验证张三的签名、张三的账户中是否有这么多钱等合法性验证,经过绝大多数的验证后写入到自己的数据库中,这个时候就会写到这个网络中所有其他账本中,这个过程也称为上链。
2.2.1 女巫攻击(Sybil Attack)
是指攻击者通过创建多个虚假身份来操控和破坏网络的一种攻击方式。可以想象成一个人伪装成很多人投票,试图影响投票结果。在区块链中这种攻击可以用来获取不公平的优势,比如控制多数节点影响共识过程或者干扰网络正常运行。
解法:解决复杂的数学难题,这个过程需要大量的计算资源和时间,但是验证却很简单。
提升不诚实节点作恶成本,增加诚实节点激励,让作恶的收益低于成本,确保互相诚实。
解决难题的过程称“挖矿”
2.2.2 工作量证明(Proof of Work)POW
2.2.3 以太坊 merge
从 PoW 转变为 PoS(Proof of Stake(权益证明)),这个事件成为 Merge(合并)
PoS 时前置质押资产,只要提交错误信息,就会扣除资产。不需要矿机,质押资产就行。
2.2.4 其他共识算法
三、Web3:面向资产的互联网
3.1 安全性和去中心化的权衡
共识算法的复杂性:共识也需要多个节点进行验证和沟通、增加了共识达成的时间和复杂性。 去中心化存储:每个节点都维护着整个区块链的副本。每笔交易都需要广播到全网,并由大多数节点验证和存储。
不可能三角:效率、去中心化、安全 区块链是通过增加成本的方式提升数据的安全性。
如果一个数据除了你别人不能更改且长期需要存在:这个数据有了资产属性。拥有所有权的数据就是一种资产。去中心系统适用于处理数据资产。
存储数据+存储数字资产的应用就是 Web3.0 应用
四、 智能合约简介
- 比特币
- 以太坊
- 区块链
- 共识
- PoW
- Web3
4.1 以太坊智能合约
智能合约是一种自动执行
的合约,合同条款直接写入代码中,并在区块链网络上运行。它们自动执行
和强制执行
合同中的条款和条件,无需第三方干预。
有以下特点:
- 去中中心化
- 数据透明:统一规则下都可查看
- 不可篡改:部署后不能修改或删除
- 消除交易对手风险:双方操作以程序运行,消除单方面作恶。
4.1.1 去中心化金融 DeFi
4.1.2 非同质化通证 NFT
数字藏品之类的
4.1.3 去中心化的自治组织 DAO
五、阶段总结
六、发送第一笔交易
6.1 以太坊账户
有两种类型:
本课程选择自托管账户: 没有 找回密码 这一说:丢失私钥相当于丢失了资产
6.2 matamask 钱包
6.2.1 安装 & 创建账户
以浏览器插件的形式安装,学习和真实使用的账户分开创建 助记词不可遗失,遗失后丢失资产。
有了钱包以后可以和区块链进行交互。
6.2.2 metamsk 钱包功能简介
左上角的 network
比特币和以太坊都是不同的网络,正确的钱包内容需要选择不同的网络
打开“显示测试网络”,学习中一般使用测试网络 /usr/local/bin/v2ray
ETH 以太坊; Linea:metakask 发布的区块链网络
Sepolia: 学习中使用的测试网络,测试网的都是假的,部署到主网之前需要先在测试网上进行测试调试,调试后没问题了再部署到主网上。
6.3 密码学
6.3.1 区块链中的密码学
- 哈希函数(HashFunction)
- 公钥和私钥(Public key and Private Key)
6.3.2
哈希函数:将一个任意长度的数据转化为一个固定长度的数据
特点:
- 确定性:相同输入可以得到相同输出
- 单向高效性:计算数据的哈希算法很高效率。计算数据的哈希很容易但是反推其输入数据很困难。(基本不能实现)
checksum:防止应用程序被篡改
6.3.3 公钥&私钥
6.3.3.1 非对称加密
加密:
- 任何人都可以通过接收者的公钥对信息进行加密
- 只有公钥对应的私钥持有者才能解密
6.3.3.2 电子签名原理
验证:
- 用户通过私钥签名/授权交易(电子签名)
- 通过公钥验证电子签名,确定是私钥持有人在发送交易
电子签名=加密Fun(要发送送数据的Hash结果 + 私钥),就是加密后的密文称为电子签名;
验证过程:用公钥解密得到发送来的 hash 和 发送的数据,然后给 发送的数据进行 hash 计算,比对这两个 hash 值是否相同;相同则认定签名真实且有效。
metamask 就是做这个事儿的:把交易签名,然后其他人就能查看我们的公钥,大家就能收到这个公钥解密,解密后得到 hash 和数据。区块链中交易基本原理也是这个;
这也是为什么私钥丢失后等于资产丢失,因为其他人可以用这个私钥伪造电子签名,电子签名代表你本人。
6.4 助记词生成原理
6.5 (领取测试通证)水龙头
接下来开始发送第一笔交易,此前需要介绍一个概念『水龙头』。
区块链是一个去中心化的节点每次交易需要各个节点把你的交易存到他们的数据库中,形成共识后才能入块(即上链)。
别人为啥要做这个事儿呢?因为可以获得激励,为了获得这个激励的方式就是『挖矿』。
每次去更改这个链条的数据,不管是 transfer 还是同合约进行交互亦或是调用什么函数,都需要支付一部分『手续费』。
为了支付手续费,你需要一个『原生的通证』。
- 如果在以太坊:原生通证就是以太坊;
- 如果在 polygon 上:原生通证就是 magic(读音是这个,不确定拼写)
- avalanche:avas
现在我们要做 transfer 需要手续费了,现在需要原生通证,现在使用的时以太坊的测试网 Sepolia/sepaolia/,现在需要领取这个测试网的通证。
以下时 ETH 的以太坊测试网的 ETH 通证:
测试网的通证可以免费获取,在哪里获取呢?就是『水龙头』。
faucets:水龙头:例如 chainlink 的 faucets ,通过 google 搜索 faucets chainlink :
点击链接:faucets.chain.link/
搜索:sepolia 可以得到
勾选 Ethereum Sepolia,下面小字显示 Drips 0.5 ETH (0.5个ETH),勾选后表示我们需要这个 0.5 个 ETH;
勾选 Ethereum Sepolia,小字 Drips 25 LINK 的,先勾上,后面的服务中也可能用到一些 LINK 的通证。
点击 continue:
在接下来的弹窗中填入钱包地址:
获取钱包地址(metamask 账户下面的剪贴板按钮):
按照操进行:
ETH 的通证会自动发放到你的电子钱包中,但是 LINK 的不是原生通证而是通过向合约写入的,这里点击图上的 Transation Hash 就可以跳转一个链接,
这个链接里面的会显示
interaccted with(to) 这个就是合约的 hash,通过此 hash 可以把本次申请的 LINK 通证导入到钱包中:导入路径如图:
在右上角有个三个点:点击之后出来的菜单选择 import tokens(中文 导入代币)
6.6 用电子钱包转账(几种 transfer 的操作)
在区块链上发送第一笔交易:Send 在电子钱包上点击 Send (发送)
点击 钱包界面的 Send 然后填写你的 from 账户和 to 账户
金额(通证数量)
下面的 EstimateFee 就是收取的 GAS 费用,发送后变成 pending 表示链上的节点正在验证,当交易变成 confirmed 说明交易已经完成了。
查看交易: 在 metamask 的钱包里面查看这一笔交易: 在钱包的界面上的 activity 选项卡下有一笔记录,点击之后
选择 view in expolrer 后会打开下面的页面,页面上的 Transaction Fee 就是手续费:
6.7 gas 介绍
Transaction Fee: 是由两部分构成:
- Gas Limit: 计算单元,需要多收节点做计算。比如从100w个数据中找到一些数据,然后再进行一些复杂的运算,此时需要的计算单元就会非常的多。但是如果只是 transfer 转账则需要的计算单元相对少很多。
- Gas Price: 每个计算单元的报价,这个报价是由网络拥堵的情况决定的。如果大家都想让自己的交易快速被共识、快速写入到区块链中。供大于求的时候,这个价格就比较高。如果此时这条网络没啥人用,此时节点就会卷低价。供求关系模型。
最终的 Gas Limit * GasPrice = transaction Fee 手续费价格。单价乘以数量的计算模式。
GAS Fe'e 又被分为三部分:
这是因为以太坊的一次重要升级 (EIP 1559)本次升级把 GAS fee 分为两部分:一部分是要烧掉的,另一部分是真正给到节点的。烧掉的意思就是这些烧掉的 ETH 自动退出流通,相当于整个以太网上的代币总数就会减少这么多。 上限 Base: 就是本次交易烧掉的部分 Max: 除了 base 之外,我还想多付的部分。为啥多付,因为我想更快的更快的写入到区块链里面(达成这笔交易)。如果其他人出的这个 GAS fee 都比我设置的这个值还多,那节点就不要执行我的交易了。这有点竞价的意思,这个值就是出价的上限。 Max Preority: 单独付给矿工的小费,为了使我的交易更容易达成。
6.8 小结
经过以上步骤,我们就在以太坊上成功的发送了第一笔交易。我们了解了发送交易必须得工具和一些基础知识。
七、总结
我们学习了
-
区块链账户:托管账户&自托管账户,作为开发者和web3应用使用者一般使用自托管账户。
-
Metamask(小狐狸):通过浏览器插件安装;过程中学习了助记词、私钥、公钥、地址的概念;一组助记词可以对应多组私钥。丢失助记词,则私钥丢失,私钥丢失则资产丢失。
-
学习如何发送交易:交易手续费、facuet(水龙头)领取通证 -> 发送交易;gas fee = Gas Limit * Gas price; EIP 1559: gas fee= base + max + tips; EIP1559 是尽可能的提升以太坊的效率。