Berachain作为备受市场关注的一条区块链,具备多项创新与特性,吸引了大量的社区和开发者的关注。Berachain通过PoL机制和三代币模型,为链上流动性问题提供了独特的解决方案。随着Berachain即将上线主网,Berachain推出了激励计划和TGE,以吸引并支持Berachain的早期生态用户和项目。
Beosin作为Ronin Network、Merlin Chain、Manta Netowork、Self Chain等多条区块链网络的官方审计伙伴,在本篇文章中将通过讲解Berachain的架构、三大原生应用的设计及相关的合约执行流程,帮助读者深入了解Berachain。
Berachain是一个Layer1 EVM 等效链,该链的特点是引入了三重代币模型和流动性共识机制(Proof-of-Liquidity),将流动性、共识和治理机制集成在一起,为链生态中的流动性提供者带来了更多激励。
Berachain架构主要分为两个层级:
(1)BeaconKit共识层。该层主要负责区块链的共识机制,采用 CometBFT 作为基础共识算法,并在此基础上引入Proof-of-Liquidity。CometBFT 是基于 Tendermint 的一种共识协议,能够提供快速的交易确认和拜占庭容错功能(BFT)。在 Berachain 中,BeaconKit 对 CometBFT 进行了进一步封装,使其能够与任何兼容以太坊虚拟机(EVM)的执行环境进行交互。
(2)EVM 执行层。Berachain 的执行层采用与以太坊相同的虚拟机——EVM(Ethereum Virtual Machine),确保 Berachain 支持现有的以太坊工具链、智能合约和生态系统,使开发者能够直接移植以太坊上的智能合约和去中心化应用程序(dApps)到Berachain。
Berachain中节点类型分为两类,验证节点和RPC节点。每个节点可以配置为全节点或归档节点,每种类型的节点都是执行客户端和共识客户端的组合,这意味着从执行层面上,它支持任何EVM执行客户端,并与Berachain构建的BeaconKit共识客户端和框架配对。
● 执行客户端:负责执行智能合约代码、管理状态变化和执行交易逻辑。通过使用Ethereum Engine API,Berachain支持6种主流的EVM执行客户端:Geth、Erigon、Nethermind、Besu、Reth和Ethereumjs。
● 共识客户端:负责在网络节点之间达成共识,确保交易和区块的验证和排序。Berachain使用BeaconKit作为共识客户端。
Berachain 的 Proof-of-Liquidity (PoL) 代币经济模型主要涉及三个核心代币:
$BERA:BERA 是 Berachain 的原生 gas 代币,用于支付交易费用和作为验证者的质押代币
$BGT:Berachain 的治理代币,用于参与链上治理、奖励分配和验证者的委托。该代币相较于普通治理代币而言,其独特之处在于BGT是一种 soulbound 代币,这意味着它是不可转移的,即用户不能在不同地址之间进行BGT的转账,但是该代币可以按 1:1 的比例兑换为 BERA。需要注意的是这是一个单向操作,BERA 不能兑换回BGT。BGT作为不可转移的 soulbound 代币,代表只有通过实际参与 Berachain 生态系统(如提供流动性、借贷等)的用户才能参与治理,而不是通过购买或交易获得。
$HONEY:Berachain 的原生稳定币,用于在 Berachain 生态系统内外提供稳定和可靠的交换手段,官方介绍其价值与 1 美元的挂钩。HONEY是一种完全抵押的稳定币,可以通过将白名单中的抵押品存入金库来铸造。不同的抵押品有不同的铸造率,由 BGT 治理决定。
Berachain 采用的Proof of Liquidity (PoL) 机制不同于传统的共识机制(如 PoW 或 PoS),PoL考虑到所有链生态系统的流动性提供者所做的贡献。通过流动性挖矿和质押,Berachain 利用 PoL 来激励更多的用户参与到Berachain的整个生态系统之中,下面以Berachain原生的去中心化交易所BEX为例,介绍Berachain生态中PoL的主要流程:
初始质押:用户首先质押BERA,成为拥有出块资格的验证者。
区块提议: 随机选择一个活跃的验证者来提议一个新的区块。
奖励分配: 提议区块的验证者会获得治理代币(BGT),并将其分配给链生态系统中的不同奖励金库,该参数由各个验证者设置。
流动性提供者: 针对BEX,流动性提供者可以通过在 BEX 池中存入代币(例如HONEY和BERA)来提供流动性,并获得流动性凭证代币(例如 $HONEY-WBERA),将其质押到奖励金库中,从而根据其贡献获得 BGT 奖励。
委托治理代币: BGT持有者可以将其委托给活跃的验证者,增加该验证者在提议区块时分配奖励的权重,从而影响 BGT 的分配,但该权重不会影响验证者出块概率。
由于目前治理代币BGT主要来源于Berachain上的三个官方原生DApp,一个是Berachain原生的去中心化交易所BEX,一个是Berachain原生非托管借贷协议Bend,还有一个是原生去中心化的杠杆交易平台Berps,本文将主要介绍这三个项目的业务逻辑。
BEX (Berachain Exchange) 是 Berachain 的原生去中心化交易所 (DEX) 协议,允许用户在无需中介的情况下交易任意一对加密资产。BEX 是 Berachain 生态系统中的一个重要组成部分,作为原生去中心化交易所,它通过以下方式与 PoL 共识机制紧密结合:
流动性池: BEX 上的流动性池可以通过治理升级为 PoL 奖励金库,从而有资格获得 BGT 奖励。
流动性提供者: 用户可以在 BEX 上提供流动性并获得 LP 代币,然后将这些代币质押到 PoL 奖励金库中以赚取 BGT 奖励。
治理: BEX 的治理机制允许通过提案将新的流动性池列入 PoL 奖励金库的白名单,从而使这些池能够获得 BGT 奖励。
通过研究测试链上的合约,目前BEX的主要代码架构分为三部分,第一部分是BeraCrocMultiSwap合约 (https://bartio.beratrail.io/address/0x21e2C0AFd058A89FCf7caf3aEA3cB84Ae977B73D),该合约主要负责代币的多路径兑换,当用户的代币兑换涉及到中间代币时需要调用该合约;
第二部分是CrocSwapDex合约 (https://bartio.beratrail.io/address/0xAB827b1Cc3535A9e549EE387A6E9C3F02F481B49),该合约负责用户与池子的所有操作,包括添加和移除流动性、兑换代币等等;
第三部分是Path合约,链上BEX总共拥有8类Path类合约,不同的Path合约对应不同的功能,根据用户传入CrocSwapDex合约不同操作对应的User Cmd参数,CrocSwapDex会通过代理调用对应的Path完成指定逻辑。
项目主要逻辑按照不同Path功能分为以下几类:
BootPath:合约升级相关功能
ColdPath:交易无关的管理逻辑,包括池子的初始化和超额抵押功能
HotPath:负责交易最常见的逻辑,代币的单步兑换
KnockoutPath:当交易跨越一个预定的流动性边界点或价格点(称为bump point)时,这种事件会被触发,用于重新评估或调整流动性。与普通交易路径不同,跨越流动性边界的代码复杂,无法完全包含在处理普通交换的HotPath中,因此分离处理
LongPath:负责处理长链复合订单交易(Long-chain Compound Orders),通常指的是在去中心化交易平台或流动性池中,由多个单一操作组合而成的复杂交易
MicroPaths:包含与单个原子操作相关的中级组件,这些组件在执行复杂的复合操作时,能够在已预加载的流动性曲线的上下文中被调用
SafeModePath:主要目的是在DEX合约进入紧急状态时,限制所有其他操作,仅允许特定的管理操作
WarmPath:包含流动性提供者的核心操作逻辑,铸造环境流动性(Mint ambient liquidity)、铸造集中范围流动性(Mint concentrated range liquidity)、销毁环境流动性(Burn ambient liquidity)、销毁集中范围流动性(Burn concentrated range liquidity)
本文主要介绍添加流动性和代币兑换两种常见逻辑。当用户添加流动性时,首先通过前端或者合约调用CrocSwapDex合约的userCmd函数,其中callpath是一个16位索引,用于标识通过 DELEGATECALL 将命令调用转发到的对应的Path合约;
接着合约调用ProxyCaller合约的callUserCmd函数,根据传入的proxyIdx代理调用对应的Path合约,此时为WarmPath合约;WarmPath合约的commitLP函数会根据传入的参数进入对应的添加流动性分支逻辑,合约包括MINT_AMBIENT_LIQ_LP、MINT_AMBIENT_BASE_LP、MINT_AMBIENT_QUOTE_LP三种添加流动性逻辑,分别代表直接添加指定数量的流动性,以及按照pool中的base代币或者quote代币计价的方式计算出添加流动性的数量。
最后,WarmPath合约的mintAmbientLiq函数主要负责铸造流动性,该合约会调用SettleLayer合约的settleFlows函数,给用户铸造对应的流动性凭证代币。
移除流动性逻辑与添加流动性类似,本文就不做具体介绍。
当用户使用BEX进行代币兑换的时候,首先调用BeraCrocMultiSwap合约的multiSwap函数,该函数会按照兑换路径分步在CrocSwapDex合约中进行兑换;接着调用CrocSwapDex合约的caluserCmd函数进入指定的HotPath或KnockoutPath中执行具体的兑换逻辑,此处使用最常见的HotPath合约;HotPath会调用MarketSequencer的swapOverPool函数,计算出兑换的代币数量;最后HotPath合约再调用SettleLayer合约的settleFlows函数,给用户转账兑换后得到的目标代币。
综上,BEX相对于传统的uniswap V2等DEX,具有以下特性:
曲线状态(CurveState)管理
曲线快照(Snapshotting CurveState):为了优化gas消耗,BEX会将当前曲线状态(CurveState)从链上存储(EVM Storage)复制到内存中,并在交易完成后将修改的状态重新写回链上。
快照保存的信息包括价格根(priceRoot)、流动性种子(ambientSeeds)和集中流动性(concLiq_)。有关流动性种子等概念,可参考Ambient Finance (Crocswap)的白皮书:https://crocswap-whitepaper.netlify.app/
交易执行(Swap Execution)
分步执行交易:BEX的代码架构允许逐步执行交易,特别是在大规模交易时,会跨越多个流动性边界(如Uniswap V3中的tick)。当跨过一个流动性边界时,需要重新调整流动性和价格。迭代计算:通过遍历每一个流动性区间(或tick),系统会逐步消耗或累积交易的流动性,直到完成交易或达到用户的价格限制。
位图结构:类似Uniswap V3,Ambient DEX使用位图来标记每个价格范围内的流动性是否存在,并通过位图快速查找下一个可用流动性区间。但是由于目前BEX链上的池子流动性都采取的是环境流动性,即流动性提供者是在全局提供流动性,而并非采用指定价格的方式添加集中流动性,因此目前在代币兑换操作中,与uniswap V2相差不大。
Bend是Bera链上的非托管借贷协议,核心是为berachain生态提供基础的借贷服务,该项目是Berachain 生态系统中的一个重要组成部分,作为一个官方的借贷市场,它通过以下方式与 PoL 共识机制紧密结合。
借款人可以通过抵押加密货币的方式(类似于wBTC等)借入HONEY 代币,在借贷的同时也能获得一定数量的治理代币,这帮助了PoL共识机制完善了BGT的分配。而HONEY提供者则可以提供HONEY的流动性,从而获取借贷产生的利息分成。
Bend的主要参与者有三种:
1.提供$HONEY代币的流动性提供者(Suppliers)。
2.抵押加密货币从而借入HONEY代币的借款人(Borrowers)。
3.确保协议具备偿付能力的清算人(Liquidators)。
下图为该项目的主要架构:
通过研究测试链上的合约,目前流动性提供者会通过supply接口存入HONEY代币以1:1的比例获取相应数量的 AHONEY代币作为回报。随着时间的推移,这些用户获取的 AHONEY代币的余额会随着利息的增加而增加,他有助于维持借贷池的生态,保证借款人始终有资金可以进行借贷,在后续流动性提供者也可以通过withdraw接口,1:1的使用AHONEY代币取出对应数量的HONEY代币,从而实现盈利。
而借款人可以通过borrow接口进行抵押品抵押,从而根据抵押品的价值借出低于抵押品价值的HONEY代币,并且获得对应数量的vdHONEY,即债务代币。vdHONEY代币和HONEY代币类似,也会随着时间的推移增加数量,从而需要借款人偿还更多的HONEY代币。但是在Bera链中,借款人在借取HONEY代币的同时,也会获得一定数量的治理代币(BGT),这会激发借款人的借款积极性,维持借贷池的生态,也同时为PoL共识做出了贡献。
在Bend中,任何人都可以成为清算人。当借贷人的健康系数小于1时,则证明借贷人的抵押品价值不足以覆盖债务价值,清算人就可以启动清算,并且获得抵押品中的5%价值作为清算奖励,从而激励清算人进行清算。
当流动性提供者在进行流动性存入时,supply函数首先会更新当前储备缓存以及利率,这有助于维护储备缓存以及利率的健康以及随时获取最新的储备缓存数据,接着会验证当前的ATOKEN代币是否达到铸造上限,避免铸造过多的ATOKEN代币。
如果这些检查和更新都通过了,则会直接1:1铸造给流动性提供者相应数量的 ATOKEN代币。在流动性提供者进行流动性提取时,withdraw函数首先也会更新当前储备缓存以及利率,接着会根据目前的最新的利息数量计算目前用户拥有的最新的 ATOKEN代币余额,从而1:1的取出对应的抵押品代币。
值得注意的是,如果这里流动性提供者进行了借贷,则需要在借贷因子健康的情况下,才能取出对应数量的流动性。并且在目前的Berachain中,仅有HONEY代币可以作为借贷资产进行借出,其他的抵押品并不能依靠借贷获取利息。
当借款人使用Bend进行借贷时,首先需要有足够数量的抵押品通过supply函数抵押给池子,接着调用borrow函数进行借贷。borrow函数首先会更新储备缓存,保证最新的储备信息,接着调用validateBorrow函数验证本次借贷的合法性,验证包括借贷上限,抵押品价值,用户信用等信息。如果这些验证通过,则会根据抵押品价值铸造对应数量的债务代币,即vdHONEY代币,才能获得对应数量的HONEY代币。
当借款人需要偿还贷款时,repay函数同样也会先更新储备缓存以及利率,并且根据储备缓存以及借贷利率获取借款人本次偿还的HONEY代币数量,在成功偿还后销毁对应数量的vdHONEY代币。借款人仅有在成功偿还足够数量的vdHONEY代币,使得当前债务在取出抵押品仍旧为健康状态时,才能使用withdraw函数取出对应数量的抵押品。
当借款人的抵押品价值不足时,任何人都可以调用liquidationCall函数作为清算人进行清算。liquidationCall函数首先会更新债务缓存数据,然后调用validateLiquidationCall函数检查借款人的健康因子以及抵押品可用性,如果借款人的当前债务价值超过了清算界限,则会导致健康因子过低。如果健康因子小于1,则清算人可以成功执行清算,销毁借款人的债务代币,同时将抵押品发送储备金库地址。清算人可以从这笔清算中获取抵押品中的5%价值作为清算奖励,从而激励清算人进行清算。
Berachain Berps是一个去中心化的杠杆交易平台,允许进行永续期货合约交易。而Berachain的原生稳定币$HONEY,是所有交易的抵押品、支出和存款的基础代币。用户可以通过在$bHONEY金库中提供交易流动性来获得收益。金库存款人将赚取 Berps 产生的交易费,并作为交易者头寸的交易对手。此外,Berps的金库也可以获得PoL的激励,即在金库存入资金的用户将获得$BGT。
目前,Berps已上线测试网并支持BTC、ETH、ATOM与TIA四种代币的U本位永续合约交易。
Berps的架构与当前市场已有的去中心化永续交易平台非常相似,主要有以下重要的合约:
● Entrypoint:用户进行交易 (包括清算) 的入口。Entrypoint合约会检查用户发起的交易是否合法,如果通过校验,合约会为用户创建对应的交易。
● FeesAccrued:计算和管理借贷费用
● FeesMarkets:计算和管理所有交易对相关的费用
● Markets:管理所有交易对的参数和限制
● Orders:管理用户提交的交易订单和存储用户的资金
● Settlement:更新交易的状态变化
● Vault:作为交易者的对手方,提供交易的流动性。用户可存入资金到Vault获取平台手续费收益和PoL的代币激励。
综上,Berachain 是一个基于 Cosmos SDK 构建的 EVM 等效 L1 区块链,采用独特的流动性证明 (Proof-of-Liquidity, PoL) 共识机制,为Berachain提供流动性的用户会获得PoL机制的奖励。利用PoL,Berachain增强了链的资金流动性与安全性。相比于其它区块链,Berachain有原生的BEX、Bend与Berps应用,为用户提供代币兑换、流动性挖矿、借贷、永续交易等一系列的DeFi服务,结合PoL,这将使得Berachain在DeFi的交易深度和用户体验方面表现出色。