一、比特币
什么是比特币
一种去中心化的(decentralized),以区块链为基础的数字加密货币。
比特币的诞生是为了解决什么问题
- 信任问题
- 通货膨胀
1)信任问题
没有人可以控制你的账户,只有拥有私钥的人才能控制你的账户。私钥可以看成密码,比特币系统中的交易是不可以撤销的,让交易信息的具有可信度。
2)通货膨胀
限定上限为2100万枚,避免通货膨胀。
什么是区块链技术
区块链技术是一种去中心化的分布式账本技术,可以通过密码学手段安全、透明地记录数据或交易。
关键词:账户、记录交易。
比特币系统是电子交易系统,和银行等金融机构类似。
每个人都需要拥有一个账户,只有拥有账户后才能进行交易。账户用于保存个人的资产,其中的比特币并不会凭空产生,而是通过其他账户的转账获得。为了确保每个账户中的比特币来源合法,必须记录所有交易。这种记录机制可以确保一个人无法花费超过其账户余额的比特币,从而保障交易的安全和透明。
1)比特币的底层是区块链技术,区块链是如何记录交易的。
在一个由四个人组成的交易系统中,每个人都有一个账本,用来记录自己接收的交易信息。
- A 拥有100枚比特币。
- A 想将这 100 枚比特币转给 B,并将这笔交易记录广播给其他人(交易信息:A -> B 转账 100 枚比特币)。
- 记账的目的是让每个人都了解其他账户的余额,确保交易的参与者有足够的比特币进行后续交易,其他人的交易记录也是如此。
- 当账本的一页无法再记录更多交易时,系统会将信息记录到下一页。
- 在比特币系统中,每一页账本就是一个区块,区块中记录了许多交易信息。每个区块大约 1MB,通常可以记录约 2000 条交易信息。将这些交易信息放入一个区块的过程被称为打包。打包完成后的区块无法再被修改。为了将新打包的区块与之前的区块链接,系统会将新的区块连接到已有的区块后面,形成一个区块链。区块之间的连接构成了整个区块链系统。
1.1 问题:在区块链网络中,由于网络延迟或其他原因,不同节点可能会暂时不同步,导致出现多条链的情况,这种现象被称为链分叉。那么,以谁的区块为准呢?
(1)最长链原则(Longest Chain Rule) 当出现链分叉时,以最长的那条链为主链,其他较短的链被抛弃。是因为最长的链被认为包含了更多的工作量(工作量证明机制),因此更可信。
(2)链分叉的处理
- 当分叉发生时,不同节点会暂时持有不同的链条,这意味着部分节点的交易记录可能暂时没有包含最新的交易信息。
- 等待确认:当区块链出现分叉时,矿工会继续挖矿,试图将新区块附加到自己所在的链上。如果一条链比另一条链增长的更快并最终超过另一条链,它将被认为是最长链,并被整个网络接受。
- 丢弃较短的链:一旦网络确认了最长链,所有节点都会同步到这条链上,丢弃其他较短的链条及其包含的未确认交易。这些未确认交易可以重新被打包到未来的区块中。
(3)分叉对交易的影响
- 确认数:为了确保交易安全,一般需要等待几次确认(通常是 6 个区块确认),以防止因为分叉导致的交易回滚。
- 双花攻击:如果没有遵循最长链原则,可能会发生双花攻击(同一笔比特币在两条不同的链上被花费两次),但最长链原则有效防止了这种情况。
1.2 问题:计算这个难题这么困难,为什么还有人愿意算?
矿工仍愿意参与是因为他们能够通过区块奖励和交易手续费获取收益。
1.3 问题:比特币是如何产生的?
区块奖励是比特币产生的唯一途径,每四年减半,当前(2024年),每成功挖出一个区块的奖励为 6.25 枚比特币。2140年会减为0,总量2100万枚,在2140年后就不会有新的比特币产生了。因此 2140 年后,矿工的收入将主要依赖于交易手续费。
1.4 问题:如果奖励丰厚,如果大家都参与到挖矿,那么比特币的会被挖完吗?
即使大量的人参与挖矿,比特币也不会被快速“挖完”。这是因为比特币系统设计了一种动态难度调整机制,保证比特币的产生速度始终保持稳定。 调整数学题的难度(定期调整)目标是每10分钟出一个新区块。那么系统中挖矿的多了(算力多了),那么难度就会提升。算力少了,难度就会下降。
2)账户(外部账户)
通过公钥和私钥对来管理资产,外部账户可以发起交易、管理余额。
2.1 非对称加密(Asymmetric Encryption)
-
密钥对:
- 公钥(Public Key) :公开给所有人,用于加密数据。任何人都可以使用公钥对数据进行加密,但不能使用公钥解密数据。
- 私钥(Private Key) :保密仅由持有者掌握,用于解密数据。只有拥有私钥的人才能解密使用公钥加密的数据。
-
加密过程:
- 发送方使用接收方的公钥对数据进行加密。公钥可以公开,因此任何人都可以用它加密数据。
- 加密后的数据可以通过不安全的网络传输,因为即使数据被截获,攻击者也无法解密。
-
解密过程:
- 接收方使用自己的私钥对加密的数据进行解密。只有持有对应私钥的人才能成功解密数据。
2.2 区块链账户的核心是公钥-私钥加密机制:
- 公钥:相当于账户的地址(类似银行账户号码)。这是一个公开的信息,别人可以通过公钥向你转账。
- 私钥:相当于账户的密码,只有账户所有者知道。私钥用来签署交易,证明该交易确实是账户所有者发起的。
- 比特币主要利用非对称加密的数字签名功能来确保交易的安全性和完整性。
2.3 数字签名的作用
- 验证交易的真实性:在比特币网络中,每笔交易都需要签名。交易的发起者使用自己的私钥对交易数据进行签名。这个签名附加在交易信息中,任何人都可以使用发起者的公钥来验证签名的有效性。这样,网络中的任何人都可以确认交易确实是由持有该私钥的账户发起的。
- 防止交易篡改:数字签名不仅验证交易的发起者身份,还确保交易数据在传输过程中没有被篡改。任何对交易数据的修改都会使签名无效,从而能够被检测到。
- 确保交易的完整性:签名保证了交易的完整性,因为一旦交易被签名,任何对交易内容的更改都会导致签名校验失败。这样,可以确保交易在被网络接受之前没有被篡改。
2.4 比特币中的签名流程
-
创建交易:
- 比如,用户 A 想要将 1 比特币发送给用户 B。A 创建交易并生成交易数据。
-
签署交易:
- A 使用其私钥对交易数据进行签名,生成数字签名。
-
广播交易:
- A 将签名后的交易信息广播到比特币网络中。
-
验证交易:
- 比特币网络中的矿工或节点接收到交易后,使用 A 的公钥验证交易的签名。验证通过后,交易被记录到区块链中。
二、以太坊
以太坊平台:Ethereum
以太币:ETH
问题1:为什么会出现以太坊
解决比特币的不足。解决比特币在功能上的一些限制,同时扩展区块链技术的应用场景。
比特币系统:只能记录交易
以太坊平台(理解为计算机|手机系统):记录交易,运行应用,实现复杂功能
问题2: App与Dapp(Decentralized application)的区别
-
App:
- 经常更新
- 修改数据
- 代码不公开
- 传统应用的收入模式通常包括广告、订阅、一次性购买等。收入和收益由应用提供商管理。
-
Dapp:
- 不能更新
- 不能修改数据
- 代码开源
- Dapp 可能会使用代币经济模型。用户可以通过持有或使用代币参与应用的治理、获取奖励或支付服务费用。代币通常在区块链上交易,经济激励和收益分配由智能合约规则定义。
智能合约(Smart Contract)
智能合约是一段编程代码,它定义了在特定条件下自动执行的协议或规则。
问题:智能合约是如何运行的
- 运行环境:智能合约 在以太坊网络上运行,实际上它们是在网络中的多个节点(矿工)的计算机上执行的。每个节点都参与到智能合约的执行中,以确保网络的共识和一致性。
- 以太坊虚拟机(EVM):以太坊虚拟机(EVM) 是智能合约运行的环境。EVM 并不是一个实际的物理计算机,而是一个虚拟化的执行环境,它存在于每个以太坊节点上。它模拟了一台计算机的功能,为智能合约提供一个隔离的执行空间。
- 虚拟机与智能合约的隔离:在 EVM 中,智能合约的执行是隔离的。每个智能合约在虚拟机中以独立的方式运行,不会直接影响其他智能合约。这个隔离性确保了合约之间的操作互不干扰,从而提高了安全性和稳定性。
- 执行过程:
- 当用户发起交易或调用智能合约时,交易数据被发送到以太坊网络中的节点。节点的 EVM 负责执行这些智能合约的代码,计算出结果,并更新区块链上的状态。
- 节点在执行智能合约时,会验证其逻辑是否正确,并计算相关的状态变更。这些变更会被提交到区块链,并且所有节点都会更新他们的区块链副本,以确保网络的状态一致性。
- 安全性和隔离:EVM 提供了一个沙箱环境,确保智能合约的执行不会影响到其他智能合约。每个智能合约在自己的环境中运行,使用自己的状态存储和逻辑处理,这样即使一个智能合约的代码存在漏洞或错误,也不会直接影响到其他合约的执行。
- 计算资源和费用:智能合约的执行需要消耗计算资源,这些资源的消耗量用 Gas 来衡量。用户在调用智能合约时需要支付相应的 Gas 费用,矿工根据 Gas 费用的高低来选择处理交易的优先级。
智能合约都是运行在矿工的计算机上的,但为了智能合约之间不相互影响,以太坊设计了以太坊虚拟机EVM,虚拟机不是真实的计算机,而是在一台计算上模拟出很多的计算机。每个虚拟机都可以看成是一个小的手机系统。上面只能运行一个应用(也就是一个智能合约),这样不同的智能合约就在不同的虚拟机上运行。保证了智能合约运行环境的隔离。一个智能合约怎么运营都不会影响其他的智能合约。大大提高了智能合约执行时的安全性。
三、钱包账号
四、区块浏览器查看信息
五、GAS
以太坊的手续费单位,用户执行智能合约或进行交易时需要支付Gas作为手续费,Gas的大小取决于交易的复杂性。
Gas机制
在以太坊网络中,执行每笔交易或调用智能合约时都需要支付Gas费用。Gas机制的目的是防止滥用网络资源并激励矿工或验证者。
-
Gas Limit:用户愿意为一笔交易支付的最大Gas量。智能合约执行时消耗的Gas取决于合约的复杂性。
-
Gas Price:用户愿意支付的每单位Gas的价格。Gas价格越高,交易越有可能被优先处理。
-
Gas Fee:总费用等于Gas Limit乘以Gas Price,确保交易的优先级。
问题:Gas如何计算的
Gas Limit:是用户在发起交易或执行智能合约时指定的最大 Gas 数量。Gas Limit 是交易或合约可能消耗的最大 Gas 数量的上限。如果实际消耗的 Gas 超过了 Gas Limit,交易会失败,已消耗的 Gas 不会被退还。【代码的bug是通过Gas limit(燃料上限)控制】
计算 Gas 费用:
- Gas Fee = Gas Used × Gas Price
- Gas Used:实际消耗的 Gas 数量。在智能合约的执行中,Gas Used 取决于合约的复杂性和操作的数量。
- Gas Price:每单位 Gas 的价格,由用户在发起交易时指定。