基础概念
- 【区块链】是一种技术
- 【比特币】是基于区块链的第一代加密货币,在比特币网络上使用。
- 【比特币网络】是一个加密货币系统。仅仅支持简单的脚本。
- 【以太币】是在以太坊上使用的货币,在以太坊上作为主币。
- 【以太坊网络】是一个提供更广泛功能的区块链平台,支持各种去中心化应用和智能合约。
区块链网络
组成
区块链网络是去中心化的,由成千上万的节点(旷工的矿机)组成。
技术实现
区块链技术实现上是由一个个区块按照时间顺序连接起来的,并且每个区块都包含了一段时间内发生的所有交易信息。区块链的设计确保了历史数据的不可篡改性和透明性。任何人都可以使用区块链浏览器等工具,来查看包括每个区块的详细信息和每笔交易的历史记录。
区块链网络的问题
如以太坊:
- 高耗能 (矿机耗电):挖矿机制(工作量证明 POW,Proof of Work) ,POS
- 小额交易成本高:交易手续费过高,因为交易池 gas 高优先被选择。为了被选择,成本被动的被提高了。
- 隐私性:完全公开
- 并发处理能力差:每秒 10 ~ 20 笔交易
区块链的不可能三角
任何区块链系统都只能同时实现这三个目标中的 2 项,第 3 项会被牺牲。
- 去中心化:不依赖于任何中央权威来进行运作
- 安全性:指的是网络能够抵抗各种攻击,保证交易数据的完整性和正确性。涉及到加密、共识机制和其他安全协议。
- 可扩展性:指网络处理交易的能力,保持合理的速度和成本。通常是通过提高交易吞吐量和减少确认时间来衡量的。如果一个网络可以快速、高效地处理大量交易,那么它就更有可能满足不断增长的用户需求和应用场景。
- 比特币(Bitcoin): - 去中心化:高,比特币网络由全球成千上万的节点组成。 - 安全性:高,比特币安全性非常强,利用了工作量证明(PoW)机制来确保网络安全。 - 可扩展性:低,比特币的交易吞吐量相对较低(大约 7 笔交易/秒),交易确认时间较长。
- 以太坊(Ethereum)(在未完全实施分片和升级前): - 去中心化:高,以太坊也是一个全球性的去中心化网络。 - 安全性:高,以太坊提供了智能合约的执行环境,保证了合约的安全执行。且利用了工作量证明(PoW)机制来确保网络安全。 - 可扩展性:中到低,尽管比比特币有所改进,但在升级前,以太坊仍然面临可扩展性挑战。
- EOS: - 去中心化:中到低,EOS 使用的是委托权益证明(DPoS)共识机制,只有 21 个主节点参与区块的产生。 - 安全性:中,虽然有一定的安全措施,但相比于完全去中心化的网络,其安全性被认为是有折衷的。 - 可扩展性:高,EOS 设计了高吞吐量的架构,目标是实现更快的交易速度和更高的可扩展性。
- 以太坊 2.0(Ethereum 2.0)(在进行分片和其他升级后的状态,还未升级完成): - 去中心化:中到高,以太坊 2.0 通过引入权益证明(PoS)共识机制,意在保持网络的去中心化特性,同时降低参与门槛,理论上允许更多个体参与网络的维护。 - 安全性:预期高,需要验证。通过转换到 PoS 机制和新增的安全特性(如验证者激励措施),以太坊 2.0 旨在维持或增强其网络的安全性。不过,这需要在实践中经过时间检验。 - 可扩展性:高,这是以太坊 2.0 升级的主要目标之一。通过实施分片技术,以及可能的 Layer 2 扩展解决方案,以太坊 2.0 旨在显著提高交易处理能力和网络的整体性能。
账号
如何生成账号
账号根据账户的合约代码,区分为个人账号、合约账号。
外部账户: 去中心化,不同区块链网络生成账户都是在本地生成,只是生成账户规则的不同,利用(公钥、私钥)根据不同生成规则生成账户地址。
- 在本地生成 32/64 位 16 进制的随机数。
- 随机数生成 私钥、公钥。
- 公钥生成账户地址。
部分跨链钱包 app,是用同一公/私钥,在不同区块链上生成账户地址,由于生成规则不同,用一公/私钥在不同区块链上生成了不同的账户地址。实现一对多。
只要账户符合区块链生成规则,它就被视为有效地址,可以接收资产,没有传统意义上的“注册”过程。
新创建的账户虽然是有效地址,但由于没有人跟他交易过,区块链上没有它的交易记录,需要别的账户交易过来时才会产生交易记录。
智能合约账户:由外部账户发起一个交易,接受地址为 0
,智能合约的编译后字节码作为交易的可选参数 (留言)被发送,区块链会根据发起交易的账户地址和该账户的当前交易数(nonce)自动计算出一个新的合约地址。这个过程确保每个合约地址都是独一无二的。
账户
账户通常包含以下元素:
- Nonce(实际上是计数器):从0开始,并且每当该账户发起一笔新交易时,其 nonce 值就会递增。每笔交易都会包含该账户当前的 nonce 值。区块链网络会检查每个交易的 nonce 值,确保它是按顺序并且没有被使用过,被使用过了,那本次交易就被废弃了。防止重放攻击、重复交易。
- 余额 :以太币 (Ether)用于支付交易费用。以太币的最小单位为 Wei,最大单位为以太,
1 Ether=10^18 Wei
,Wei
单位很小是为了进行整数计算。 - 合约代码:有的话为智能合约账户。
- 存储(Storage): (默认为空)。合约账号存放存储数据(状态)和合约代码。
交易
账本结构
每个区块链网络,都有自己的账本结构:
- 以太坊网络基于账户的模型
- 比特币网络基于 UTXO 的模型
账户模型和 UTXO 模型有本质的不同,基于账户的模型直接反映每个账户的当前状态,而 UTXO 模型通过跟踪每个未花费的输出来确定账户的余额。
通过执行区块里的交易,驱动系统的状态从当前的状态转移到下一个状态。
稳定币
稳定币是不具有波动性的加密货币
Tether、USDC 都是和1 美元等价的稳定币,且是用法币抵押的(有些不是用法币,但这两家最大的稳定币用的是法币抵押),每造出一枚稳定币意味着他们的银行里有一美元,且接受检查,以此来建立信用。
稳定币的必要条件是稳定,按照绝对理想化的情况,稳定币的价值是稳定的,可以粗略理解为数字法币。稳定币可以和 ETH 以及其它以太坊代币互相转换,稳定币提供了一个相对稳定的价值存储手段,因为许多加密货币(包括以太坊的 ETH)经常经历剧烈的价格波动。
大量区块链系统对稳定币有强烈需求,稳定币的流入区块链系统,意味着区块链系统的资金变多,生态系统更活跃,有更多的应用和服务出现。稳定币的引入可以降低新用户的进入门槛,吸引更多的参与者进入区块链生态系统。这包括不仅限于投资者,还有开发者、普通用户。
区块链系统会用各种策略来吸引用户加入,比如以太坊有大量去中心化应用(DApps),如果想使用这些 DApp 的功能,就需要对接进入以太坊。 再比如一些去中心化金融(DeFi),开发各种 DeFi 应用,如借贷平台,将稳定币放入他们的借贷池赚取即时收益。就像在金融界一样,你出借稳定币,且可以随时撤回,获取收益。平台由可以拿你的这部分存款去操作钱滚钱。
代币
在以太坊中,主币是以太币(ETH),它是以太坊网络的原生货币,用于支付交易费用和执行智能合约等。当在以太坊中交易比特币时,比特币不会直接存在,而是以代币的形式存在,这种代币通常被称为 Wrapped Bitcoin(WBTC)。
WBTC 是一个遵循以太坊标准(如 ERC-20)的代币,每个 WBTC 都与实际的比特币以1:1的比例锚定,这意味着每个 WBTC 的背后都有相等数量的比特币被锁定。
在以太坊网络中,WBTC(或其他类型的代币化比特币)的价值可以用以太币来衡量,交易和计算费用在以太坊上用以太币支付。但是,WBTC 的背后价值确实代表着比特币。这样,用户就可以在以太坊上交易比特币。
稳定币在这些区块链中也是以代币的形式存在。
交易的特性
只能增量操作:增加交易,无法删除、修改交易。
形式:
- 发起交易仅仅交易加密货币
- 调用一个智能合约
每次交易的基本元素
账户交易的基本元素包括:
- 接收地址:合约账号地址或个人账号地址
- 发送者签名:用于非对称加密验证发送人,(公钥+签名)可以让接收方能够确定这笔交易一定是发送者发起的。签名由私钥生成(私钥丢了,账号就丢了;私钥泄露,签名就泄露了,相当于别人也掌握了交易权限;)
- 发送币的数量
- 可选数据:转账留言、调用智能合约的参数
- GasLimit: 以太坊中,限制最大运算次数。一次运算等同汇编语言的一个命令执行,合约会转成汇编语言的命令。而合约执行受参数影响,执行前命令执行数是不确定的,只能在执行前限制最大运算次。限制最大运算次,超过则放弃本次执行。
- GasPrice: 以太坊中,每次计算需要的费用,越高优先级越高。
Gas:燃料(抽象),节点(旷工的矿机)存储数据、验证数据的算力成本。Gas 越高,旷工收益更高,执行的优先级越高。
手续费:GasLimit * GasPrice
- 对于交易者,限制最大运算次,每次计算的费用控制手续费最大支出。避免有问题的智能合约消耗过多币造成损失。也可以核对账号是否有足够的币进行操作,执行完有多余的手续费会返还。
- 对于区块链:避免有问题的智能合约导致网络资源的无限制消耗。区块链的节点算力有限,可以通过 gas 价格自动调节市场,使得算力用在最有效的地方。
如果执行失败,可能是 GasLimit 设置太小了,如果目前的数值确实过小,可以放大些限制最大运算次数使得合约可以正常执行。如果一个交易因为 GasLimit 设定太低而执行失败,那么所支付的手续费(即已经消耗的 Gas)不会退回,这是为了补偿旷工已经进行的计算工作。交易失败会回滚所有已执行的命令。
交易过程
- 交易进入交易池:当用户发起交易后,该交易首先被广播到网络,进入到交易池(mempool)中。
- 交易的选择和打包:节点(如矿工节点)从交易池中选择交易进行打包时,是基于他们希望最大化自己收益的目的,通常优先选择 Gas 价格高的交易。
- 交易的预验证:节点(如矿工节点)在交易池根据 Gas 价格(或其他因素)选择交易时,会对交易进行初步的格式和有效性检查,校验不通过,矿工会忽略该交易。
- 验证账户余额是否足够支付交易币和手续费(GasLimit * GasPrice),账号余额不够则返回错误
- 交易格式是否正确(符合交易的基本元素要有)
- 签名是否有效
- Nonce 是否和发送交易的匹配且不重复
- 预验证合约代码,合约的代码在矿工的 EVM 中真实执行,确保所有状态的更新都是有效的。
- 矿工挖矿与区块确认:矿工通过哈希运算找到符合难度目标的值,成功挖到一个新区块时,将其广播到网络,广播时会携带执行后的交易的最终状态。新区块会在网络上被其他节点验证和确认。
- 交易的执行:其实一旦交易被选择打包时,它就在矿工的 EVM 中执行了(预验证时),广播时也是将执行后的交易的最终状态广播出去,配合新区块哈希给其他节点验证。所以一旦验证成功,就链接到主链上了,后续并没有交易的执行这个过程,在验证时就已经执行完成了。
- 合约执行与异常处理:如果预验证时合约代码执行耗尽燃料而转移失败,生成
Out-of-gas
异常,并回滚合约已执行命令(本质上也不需要回滚,因为还没链接到主链,不被认可的),已消耗的手续费交给旷工。
矿工在选择交易时,会对交易进行预验证,会在矿工的 EVM 环境中执行智能合约的代码,得到执行后的交易状态。后续成功挖到新区块时,会将交易的最终状态还有 Nonce 值,新区块哈希值等广播给其他节点,其他节点会验证区块的有效性(包括验证工作量证明、交易的有效性、状态的转换是否正确等,会在他们自己的 EVM 中执行合约进行验证)。一旦确认新区块有效,则新区块会链接到他们的区块链版本中。
智能合约
智能合约定义
智能合约:根据事先任意制订的规则来自动转移数字资产的系统。本质就是区块链上的代码,用来实现特定的功能。任何人都可以创建智能合约。
特点是:
- 无法修改:一旦部署,无法修改。
- 可不开源:合约上只有字节码,并没有源代码。但不开源对项目推广有阻力
智能合约本身不会“自动”执行。它们需要通过网络上的一个交易来触发。这意味着要执行合约中的某个函数或逻辑,必须有人或某个程序发起一个交易,指向该合约的地址,并提供适当的输入数据和足够的 Gas 费用。当区块链网络处理这笔交易时,合约代码会按照其编程逻辑执行。
“砸盘”或“暴跌”时,清算通常是由清算人或套利者触发的,他们监控市场条件和借贷平台的健康状况。当一个借款人的抵押品价值下降到某个临界点(清算阈值)时,这些参与者可以发起清算交易,以获得清算奖励。这个过程需要主动监控和参与,而不是智能合约自己执行。
ABI
“应用程序二进制接口”(Application Binary Interface)。类似于 Web 2.0 开发中的 API(应用程序编程接口)。ABI 作为智能合约的接口,定义了合约中可调用的函数、它们的参数、返回值以及触发的事件等。
程序员在编译合约时会生成字节码(bit code
),同时生成一个 JSON 格式的 ABI。ABI 提供给其他语言使得它们可以正常调用 bit code
。本质上只要 bit code
里有这个方法,而且提供了这个方法正确的 JSON,就能正常调用,没有认证过程,没有限制一定要来源官方提供的 JSON 链接才能调用。
ABI 一般提供在项目的 Github 或项目官方网站中。
生命周期
- 编写/编译合约:用 solidity 编写后进行编译,编译成可执行的字节码,即二进制指令。
- 测试合约:在部署到主网前,需要在测试网对合约进行测试,检查合约逻辑、寻找漏洞、验证功能和性能。
- 部署合约:由普通账号发起一个交易,接受地址为空,智能合约的编译后字节码作为交易的可选参数 (留言)被发送,区块链会根据发起交易的账户地址和该账户的当前交易数(nonce)自动计算出一个新的合约地址。这个过程确保每个合约地址都是独一无二的。部署是一个交易,会消耗 gas。
- 调用合约
- 监听合约:状态值改变,触发一些事件,例如上报给区块链记录。后续可以用其他语言开发区监听区块链上这个特定的状态值是否改变,对接到自己的应用里。
- 销毁合约:以太坊鼓励节省资源,从以太坊的全局状态中移除数据,网络会返还一定数量的 Gas 给触发自毁过程的交易,作为一种激励措施。
合约的透明度
虽然智能合约的字节码是公开的,但如果只有字节码而没有源代码,确实会很难理解合约内部的逻辑。 因此,为了透明性和可信赖性,开发者通常会在区块链上发布字节码的同时,在公共平台如 GitHub 上公开源代码,并通过各种工具对照字节码验证源代码的正确性。这种做法有助于社区审计和验证智能合约的行为。
不开源的项目,不利于推广,许多大型和流行的智能合约通常会选择开源。
去中心化金融 (DeFi)
定义
以太坊本身是一个开源的区块链平台,它提供了创建和运行去中心化应用(DApps)和智能合约的基础设施。以太坊提供了关键的基础设施,DeFi 是构建在以太坊之上的应用层,依赖智能合约。
DeFi 涵盖了广泛的金融服务,如: 借贷:用户可以借出或借入资金,借入通常通过超额抵押(抵押物价值高于借款价值)的方式。 交易所:去中心化交易所(DEX)允许用户直接交换不同的加密货币或代币。 资产管理:提供投资管理和其他理财产品,使用户能够管理和增长其加密资产。
清算激励
在去中心化金融(DeFi)系统中,一旦抵押资产的价值跌破要求的最低抵押率时,将会开发执行清算操作的权利,将借贷人的抵押资产以折扣的方式出售,主要目的是保护借贷人的抵押资产,且是对参与者(清算者)的一种奖励。清算激励机制会吸引参与方介入,执行清算操作。从参与方的角度,叫清算激励。从借贷人角度,对借贷人进行惩罚,让他们抵押资产折扣低于市场价出售,激励协助的清算者,也叫惩罚激励。
例如: 在以太坊中,借贷 10 以太币(ETH),由于 DeFi 平台要求超额抵押,抵押率为 150%。要求至少要有 15 ETH 价值的抵押物。 借贷人的抵押资产是代币(我们这里用 X 币代表),此时 X 币的市场价是,15 ETH 等价于 100 X 币,所以用了 100 X 币作为抵押,借出了 10 ETH。 假设平台规定最低抵押率为120%,一旦抵押资产的价值低于这个抵押率,抵押资产就会进入可被清算的状态。 随着市场变动,X 币的价值下降了,目前 11.9 ETH 等价于 100 X 币,接待人的抵押率为 119%,抵押资产就会进入可被清算的状态。 为了鼓励清算人参与清算,假设 DeFi 平台允许清算人以 95%折扣价购买接待人的抵押资产 100 个 X 币,这种折扣即为清算激励(购买的方式可以是折扣价价值的 ETH )。折扣人比直接去 X 比平台购买还省了 5%。
对贷方的资金也有一定程度的保护,如果没有清算者介入执行清算,抵押资产价值持续贬低的话,那么贷方资金也会亏损。
只要抵押资产的价值低于抵押率,抵押资产就会进入清算状态。DeFi 获取目前抵押资产的价值,就需要通过预言机,保证抵押物价值评估的准确性和及时性。
预言机提供数据,主要是用做参数提供给智能合约去执行其逻辑,如更改清算状态。当然智能合约并不会自动执行,是由 DeFi 在链外开发的程序通过定时/监听/爬虫去发起交易执行智能合约,智能合约无法链接网络,需要根据预言机提供的数据(链外程序也可能使用其他数据源作为辅助决策供给智能合约参考),决定是否更改清算状态。
?补充在本平台,主币价格下跌,贬值,虽然标准币稳定。 ?其他平台,以本币作为抵押资产的,触发清算。会一定程度影响其他币
套利激励
当套利者监控到相同资产,在本 DeFi 平台上预言机提供的价格,比其他市场或交易所上的价格低,纯在利润。这意味着他们可以利用这一差异进行套利。
套利者将会发起交易购入该低价资产,高需求将会提高低价市场的资产价格,同时在高价市场上出售资产会增加供应,从而降低那里的价格。两个市场达到了新的价格平衡,这种买卖活动有助于缩小不同市场间的价格差异。
套利激励有助于维护整个 DeFi 生态系统中的资产价格一致性。
EVM
定义
EVM (以太坊虚拟机)是智能合约的运行环境,运行在一个完全隔离,不能接触外部网络、文件系统的沙箱里。
可以通过预言机(Oracles)获取链外数据,是一种第三方服务,作为区块链和外部世界之间的桥梁。
获取链外数据的风险和措施
典型例子:交易所 Web 3 之前发生了一个重大的安全问题,有人拿了几百万美金,把交易所币的价格砸下来,错误的价格触发智能合约的规则,有大量的资产被清算。攻击者通过买回低价资产到别的地方卖掉从而获利,而同时对其他市场参与者造成重大损失。攻击的成本就几百万美金,但赚了千万美金。
原因:
- 合约是代码执行,具有强制性。
- 外部馈入的价格错误:合约通过预言机 (Oracles)获取链外数据风险大,许多中心化金融(DeFi)平台和智能合约使用外部的价格馈入(例如,通过预言机服务)来获取资产的当前市场价格,用于决定是否需要对抵押在智能合约中的资产进行清算。
解决方案:清算激励(惩罚激励)、套利激励
共识机制
共识机制允许网络中的不同节点,在没有中央权威机构的情况下,就网络中的数据和交易记录达成一致意见。
目前共识机制有:
- 工作量证明 PoW (Proof of Work),
- 权益证明 PoS(Proof of Stake)
对于目前以太坊区块链来说,达成共识意味着全网络中至少 66% 的节点(PoS)就网络的全局状态达成一致。
以太坊 2.0
以太坊2.0还没有完全部署。这个升级是分阶段进行的,目前已经实施了一些关键的升级,例如 Beacon Chain 的引入,这是以太坊向权益证明(PoS)共识机制转变的重要一步。
2020 年 12 月 1 日,Beacon Chain 已于上线。 2022 年 9 月 15 日,以太坊完成从工作量证明(Proof of Work,PoW)转向权益证明(Proof of Stake,PoS)的转换。以太坊将完全采用权益证明机制
更多具体参考:以太坊路线图 | ethereum.org
分片技术
二层网络卷叠发展迅猛,目前已经不需要分片链了,分片链已经从以太坊的路线图中被移除。以太坊路线图-分片 | ethereum.org
以太坊 1.0 运行在一个单一的主链上,处理所有交易和智能合约操作。
二层网络卷叠(Layer 2 rollups)通过在以太坊主链之上处理交易和状态变更来增加网络的吞吐量,从而减少了主链的负载。
分片链:在以太坊 2.0 中,预计将有 64 个分片链,每个分片处理一部分网络的交易和合约,减轻了主链的负担,并允许整个区块链网络同时处理更多事务。分片的目的是提高整个网络的吞吐量和效率。
二层网络卷叠 (Layer 2 rollups)
属于以太坊 2.0
定义
二层网络卷叠的目的:在不牺牲去中心化和安全性的情况下提高可扩展性,提高交易吞吐量。
一层网络 (L 1):底层区块链,以太坊和比特币都是一层网络区块链。二层网络建于其上。 二层网络 (L 2):以太坊扩容解决方案的统称。 - 以太坊上的“卷叠”(rollups) - 比特币的闪电网络
同时,二层网络在实现上是一个对以太坊进行扩展的单独区块链,一般由第三方提供 。用户可以在二层网络(第三方提供商)上发起交易,而非直接提交给一层网络,所有二层网络项目上的交易活动最终都可以回到一层网络区块链。
当以太坊的需求较高时,网络会出现拥堵,会提高交易费用,承担不起费用的用户就会被“挤出”。
- 二层网络将数百笔脱链交易,合并成一笔单独的一层网络交易,交易费将大幅降低(一笔交易的手续费由数百笔脱链交易去平摊)。
- 安全性有保障:二层网络通过将交易数据提交到一层网络,卷叠可以继承以太坊的安全性。
扩容 | ethereum.org二层网络 | ethereum.org
卷叠
卷叠将数百笔交易打包(或“卷叠”)到一层网络的一项交易中。这会将一层网络的交易费分散到整个卷叠中的所有用户,降低每个用户的费用。
卷叠交易在二层网络执行,最终会将交易数据会提交到一层网络。
卷叠有两种形式: 乐观卷叠、零知识卷叠,它们的主要区别在于交易数据提交到一层网络的方式。
乐观卷叠
乐观卷叠被认为是“乐观的”,因为它们假设链下交易是有效的。乐观卷叠依赖于欺诈证明方案来检测交易计算不正确的情况。在以太坊上提交卷叠批次后,有一个时间窗口(称为挑战期),在此期间任何人都可以通过计算欺诈证明来挑战卷叠交易的结果。
- 如果欺诈证明成功,则卷叠协议重新执行交易并相应地更新卷叠的状态,负责将错误执行的交易纳入区块的排序者会受到惩罚。
- 如果在挑战期过后卷叠批次仍然没有计算出欺诈证明,则将其视为有效并将交易数据作为
calldata
发布到主网。其他人可以继续扩建未经确认的卷叠区块
? 先打住,这块概念属于高级些的,目前底子弱暂时不碰,太多新概念产生 ? 需要补充理解
乐观卷叠可以提供高达 10-100 倍的可扩展性改进
乐观卷叠从主链上发布交易结果或从 Plasma 链获取安全性。
零知识卷叠
? 需要补充理解 使用有效性证明,其中的交易是脱链计算的,然后将压缩数据提供给以太坊主网,以证明其有效性。
卷叠回滚
在数据上传到一层网络后,如果要回滚卷叠交易,需要回滚以太坊交易。因为区块链是不可篡改的,但这种场景极少。
举个例子,如果二层网络 (乐观卷叠)发现了欺诈行为,确定需要回滚交易,二层网络可能需要执行一系列复杂的操作来恢复到欺诈行为发生之前的状态。这可能包括恢复账户余额、撤销非法交易导致的状态变更等,然后合并这些操作提交交易到一层网络。在极端情况下,这可能需要通过社区共识来决定如何恢复网络状态,并可能涉及到较为复杂的技术操作。