BxE协议基于Ordinals协议为基础,在比特币原生网络(Layer1)实现了对以太坊虚拟机EVM的支持,从而让比特币网络能够支持图灵完备的智能合约。BxE打通了比特币生态与自己的EVM,可以将Ordinals藏品、BRC-20、Runes以及更多的比特币生态引入到EVM中,为比特币生态带来了去中
BxE协议基于Ordinals协议为基础,在比特币原生网络(Layer1)实现了对以太坊虚拟机EVM的支持,从而让比特币网络能够支持图灵完备的智能合约。BxE打通了比特币生态与自己的EVM,可以将Ordinals藏品、BRC-20、Runes以及更多的比特币生态引入到EVM中,为比特币生态带来了去中心化的流动性。
区块链技术自诞生以来,为金融、供应链、数字身份等领域带来了变革性的创新。然而,作为第一个成功应用区块链技术的比特币,存在着一些局限性,如较低的交易吞吐量、较高的能源消耗以及有限的脚本功能。这使得比特币在支持复杂应用和智能合约方面显得力不从心。
为了解决这些问题,比特币社区提出了许多解决方案,其中之一便是Ordinals协议。Ordinals协议通过在比特币交易中嵌入数据,使得开发者可以在比特币网络上实现更复杂的逻辑和功能。尽管Ordinals在一定程度上弥补了比特币的不足,但它依然存在一些缺陷,如较低的数据存储效率和较差的互操作性。
此外,随着以太坊和其他智能合约平台的兴起,一种名为BRC-20的新协议应运而生。BRC-20试图在比特币网络上实现类似以太坊的代币发行和交易功能。然而,由于比特币网络和以太坊网络之间的本质差异,BRC-20在性能和安全性方面存在一定的局限。
鉴于此,BxE项目旨在突破现有框架,构建一个基于比特币网络的支持图灵完备智能合约并兼容以太坊生态的新型区块链基础设施。通过引入先进的共识算法、优化数据存储结构以及改进跨链互操作性,BxE项目有望为用户带来更高效、安全且易于使用的区块链服务。
为了实现这一目标,BxE项目采用了以下策略:
通过这些措施,BxE项目有望为比特币网络带来新的生机和活力,推动区块链技术在各个领域的广泛应用和发展。
BxE协议(Bitcoin x Ethereum Protocol) 旨在充分利用比特币强大的安全性、去中心化特性和庞大的网络效应,在其基础上构建一个可编程、跨生态互联的新一代区块链生态系统。通过创新的技术设计,BxE将成为连接比特币与以太坊Web3生态网络的桥梁,推动整个加密经济的发展。
基于Ordinals协议,创新性地将以太坊EVM迁移到比特币网络上运行,实现了以太坊dApp与比特币网络的无缝集成。 通过定制设计的BxEVM虚拟机,使得使用Solidity等语言编写的智能合约可直接部署在比特币网络上执行,开启全新的DeFi、NFT等应用场景。 借助Ordinals的数字艺术特性,BxE生态上的NFT不仅具备独特的艺术价值,也能作为金融衍生品进行投资交易。 搭建了BRC-20、BXET等创新型Token协议,使资产在比特币链和以太坊链之间自由流转,促进不同生态的价值整合。
BxE项目将致力于打造一个开放、多元、安全高效的去中心化合约生态。我们将为开发者提供友好的开发工具、完善的技术文档和丰富的社区支持,鼓励社区成员共同参与BxE的建设和发展。同时,我们也将推出官方的钱包、浏览器等工具,方便用户与BxE交互。我们相信,通过BxE的努力,将为全球用户带来更多的创新应用和更佳的区块链体验。
BxE项目的核心优势和价值主要体现在以下几个方面:
Ordinals是比特币网络的一项革命性拓展方案,允许将任意数据永久性地铭刻到比特币区块链中,打开了在比特币链上发行NFT、发行代币等无限可能。BRC-20协议便是利用了Ordinals的优势,第一次在比特币网络上实现了类似ERC-20的代币标准。
以太坊交易是以太坊区块链上的基本操作单元,通过它可以在以太坊网络上实现以太币的转账和智能合约的调用。交易是由发送者发起的,经过挖矿节点验证和打包,最终被记录到区块链上的。 以太坊交易包含了交易的发送者Nonce值、接收者、转账金额、智能合约调用数据、Gas相关信息和发送者对交易的签名(通过前面可以恢复出发送者地址)。 以太坊交易的作用包括:
EVM,全称Ethereum Virtual Machine,即以太坊虚拟机,是以太坊区块链的核心部分。它作为一个全局计算设备,用于执行智能合约。EVM允许任何人在以太坊区块链上执行任意复杂的代码,只要他们愿意为执行的计算步骤支付足够的GAS。 EVM执行一次交易或智能合约时,需要以下信息:
BxE协议的整体设计如下图所示,它由比特币Ordinals交易与以太坊交易的转换器、BxEVM虚拟机与合约状态数据持久化服务、Bitcoin/Ordinals/BRC-20等多个系统合约和模块组成,并提供了与以太坊Web3生态兼容的网关服务。
BxE节点通过连接比特币官方钱包或者运营商的RPC服务监听比特币区块链上的Ordinals交易,提取交易中铭刻的内容,该内容主要包含了以太坊交易的Nonce值、Gas价格、Gas限额、接收者、转账金额、智能合约调用数据等数据。 其中的以太坊交易内容不包含签名(R、S、V字段),实际上我们构造的以太坊交易的From字段(也就是交易发起人)是由Ordinals交易中P2TR隔离见证脚本中的公钥部分计算而来。在附加上From字段后,该以太坊交易将发送给BxEVM执行EVM合约的安装、执行等操作。
BxEVM是BxE协议的核心组件,它是一个以太坊虚拟机的实现,兼容最新版本以太坊主网的合约逻辑,用于执行以太坊交易中的智能合约。BxEVM的执行结果将被独立记录和存储,而不会写入比特币区块链。 BxEVM的执行除了当前交易外,还需要从状态数据库中读取合约字节码、合约状态数据和用户账户数据,另外BxE协议还提供了比特币交易和区块到BxEVM所需的上下文的映射。BxEvm的执行结果包括合约执行的状态变更、执行结果、Gas消耗、事件日志等信息,这些信息将被存储在BxE节点的本地数据库中,并通过BxE网关服务对外提供查询接口。
BxE采用PoS质押挖矿的形式对BxEVM的执行结果进行共识。在BxE上提供了一个质押合约,用户通过质押BXET成为验证者,验证者可以在每个新比特币区块产生时执行其中的BxE交易,并将执行结果(包括账户状态、合约状态、收据)形成默克尔树,并最终形成一个哈希值。该哈希值包含了所有历史BxE交易的执行结果,被称为状态根哈希。验证者将区块高度、状态根和奖励数额(包括出块奖励和Gas手续费奖励)等信息组成状态消息并提交到比特币网络。提交的方式有两种:比特币矿工在Coinbase中包含本区块的BxE状态消息,或者普通节点通过Ordinals交易在比特币网络铭刻指定高度的BxE状态消息。 BxE节点在收到新比特币区块并解析其中的交易和BxE协议内容时,如果包含状态消息,则验证状态消息的正确性,即验证在指定区块高度时,BxE协议执行后形成的状态根是否与状态消息中提交的状态根相同,同时也验证挖矿奖励是否与BxE协议规定的奖励相同,验证通过则为本区块中状态消息的提出者进行BXET的奖励。如果有多个验证通过的提出者,则平分该奖励。
BxE平台将预置诸如比特币查询、Ordinals查询、BRC-20查询等一系列系统合约,为外部的EVM合约提供查询比特币链上数据的能力。
另外,为了防止BRC-20代币锁定时对其UTXO关联聪的锁定,BxE协议还定义了一个BTC-ERC20合约,当任意数量的BTC被锁定时,BTC-ERC20合约可以mint对应数量的WBTC实现了BTC的跨协议流转。
通过以上系统合约的设计,BxE连接各种比特币生态,为BxE上的dApp与智能合约也其他比特币生态进行互操作和对接提供了天然的桥梁。
为了能区别EVM现有的预编译合约(预编译合约的地址从 0x01开始递增,目前最新预编译合约地址为0x18),避免地址冲突,BxE协议规定系统合约从0x81开始递增!
比特币查询合约允许用户查询比特币区块头、交易、地址余额等信息。 合约地址:0x0000000000000000000000000000000000000081
interface Bitcoin {
// getBlockHeader 根据区块高度查询区块头
function getBlockHeader(uint256 height) external view returns (bytes32 blockHash, uint256 timestamp, bytes memory);
// getTransaction 根据交易ID查询交易
function getTransaction(bytes32 txid) external view returns (bytes memory);
// getBalance 检索地址的余额
function getBalance(string memory addr) external view returns (uint256);
// getUtxo 根据地址查询UTXO
function getUtxo(string memory addr) external view returns (bytes memory);
// getTxFrom 根据交易ID和索引获取比特币交易输入的地址和金额
function getTxFrom(bytes32 txid, uint256 index) external view returns (string memory,uint256);
// getTxTo 根据交易ID和索引获取比特币交易输出的地址和金额
function getTxTo(bytes32 txid, uint256 index) external view returns (string memory,uint256);
// getTxToList 根据交易ID获取比特币交易输出的地址和金额
function getTxToList(bytes32 txid) external view returns (string[] memory, uint256[] memory) ;
// isFromPubKey 验证交易是否来自指定的公钥
function isFromPubKey(bytes32 txid, string memory pubKeyHex) external view returns (bool);
}
Ordinals管理合约允许用户查询、验证、解析比特币区块中的Ordinals数据。 合约地址:0x0000000000000000000000000000000000000082
interface Ordinals {
//getInscriptionById 根据传入的铭文ID获取铭文信息,包括铭文对应聪编号、铭文内容、大小、创建时间、创建高度、创建者、当前拥有者等
function getInscriptionById(uint256 inscriptionId) external view returns (bytes memory);
//getInscriptionBySatNumber 根据传入的聪编号获取铭文信息
function getInscriptionBySatNumber(uint256 satNumber) external view returns (bytes memory);
//getCollection 根据传入的序号获取铭文集合
function getCollection(uint256 ordinal) external view returns (bytes memory);
//getInscriptionTransaction 根据传入的交易ID获取铭文交易信息
function getInscriptionTransfer(bytes32 txHash) external view returns (string memory from, string memory to, uint256 satNumber, bytes memory txData);
}
BRC-20合约是Ordinals上的代币标准,允许用户定义、发行、转账等操作。 合约地址:0x0000000000000000000000000000000000000083
interface BRC20 {
//getDeploy 根据传入的交易ID获取代币部署信息,包括代币名称、总发行量、单次挖矿限额等
function getDeploy(bytes32 txHash) external view returns (string memory token, uint256 totalSupply,uint256 limit);
//getMint 根据传入的交易ID获取代币铸币信息,包括代币名称、铸币者、铸币数量
function getMint(bytes32 txHash) external view returns (string memory token,string memory owner, uint256 value);
//getTransfer 根据传入的交易ID获取代币转账信息,包括代币名称、转出地址、转入地址、转账数量
function getTransfer( bytes32 txHash) external view returns (string memory token,string memory from, string memory to, uint256 value);
}
Bitcoin ERC20合约又称WBTC合约,是Bitcoin的Wrapped形式并满足ERC20接口标准,当BTC在比特币网络锁定时,该合约则可Mint出对应数量的WBTC。 合约地址:0x0000000000000000000000000000000000000084
interface BitcoinERC20 {
//满足ERC20
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
//Event
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
//mint 传入锁定BTC的交易哈希,以及用户的公钥,系统判断从比特币网络锁定的BTC后,可在BxE上铸造对应数量的WBTC给对应的公钥所在的账户
function mint(bytes32 txHash,string memory pubkeyHex) external returns (bool);
}
状态共识质押合约是BxE协议的共识核心组件,它允许用户质押BXET成为验证者,并在每个新比特币区块产生时执行其中的BxE交易,并将执行结果形成状态根哈希提交到比特币网络。 无质押的用户将无法参与状态共识,即使提交了状态消息也不会获得任何奖励。 验证者作恶提交了错误的状态消息,将会被其他验证者举报,并被扣除一定数量的BXET。 合约地址:0x0000000000000000000000000000000000000085
interface Pos {
//stake 质押BXET,成为验证者
function stake() external;
//unstake 申请解除质押BXET
function unstake() external ;
//slash 惩罚验证者,扣除BXET
function slash(address account, uint256 amount) external;
//report 举报作恶者
function report(address account) external;
}
为了能够兼容日益繁荣的比特币生态,BxE协议还将进一步扩展其他比特币生态查询合约,在后续版本升级中逐步开放。
BXET(Bitcoin x Ethereum Virtual Machine Token简称BXET)是BxE协议与生态系统的核心加密数字资产,BXET在BxE协议上线时一次性发行一部分,剩下的部分与由状态共识矿工挖出,BxEVM的执行过程中扮演了重要的角色,主要用于支付智能合约部署、合约调用、BXET转账等的手续费。 为了保证BxE与以太坊的兼容性,BXET与以太坊Gas费用的设计保持一致,即用户在BxE上执行智能合约时,需要支付一定数量的BXET作为手续费。BXET做为手续费才用以太坊相同的算法,部分销毁,部分返回到对BxE状态数据进行共识的矿工手中。 在BxE交易中,Gas单价默认为1 GWei,小于这个单价的交易将被标记为无效而无法执行。单笔交易的Gas限额的上限为15,000,000,超过该限额的交易将被标记为无效而无法执行。
以转账交易为例,假设用户A有2个BXET,需要转账1个BXET给用户B,当前Gas单价为1 GWei,转账需要消耗21000 Gas,于是手续费是:
21000*1*10^-9=0.000021BXET
转账成功打包上链后,用户A的账户中将剩余0.999979BXET,用户B的账户余额是1BXET。
当用户账户的BXET余额不足以支持对应的交易(比如账户余额只有1BXET却构造转账2BXET的交易)或者账户余额不足以支付对应的Gas限额费用(比如账户余额只有1BXET却构造转账1BXET的交易,剩余的账户余额不足以支付手续费)时,交易无需执行即可被判断并被标记为无效。
无效的交易不扣除BXET。
比如用户A有1个BXET,转账0.999999BXET给用户B,当前Gas单价为1 GWei,转账需要消耗21000 Gas,于是手续费是:
21000*1*10^-9=0.000021BXET
0.999999BXET+0.000021BXET=1.00002BXET>1BXET
所以转账失败,状态数据不变,用户A的账户中将剩余1BXET。
如果用户构造的交易的Gas限额不足以支持EVM运行所需的Gas消耗,那么交易将被标记为Out of Gas,合约状态不会更新,但用户的BXET余额将会被扣除。
假如用户A有1个BXET,需要调用某个合约方法,并设置Gas限额100000,当前Gas单价为1 GWei,实际合约调用成功需要消耗110000 Gas,所以合约调用会返回Out of Gas。
手续费为:100000*1*10^-9=0.0001BXET
最终合约调用失败,状态数据不变,用户A的账户中将剩余0.9999 BXET。
未在BxE协议上线时发行的BXET随着比特币区块高度的增加,在每个区块上附加一定数量的出块奖励,然后由矿工(状态数据提交者、验证者)挖出。 比如BxE协议最新提交了状态共识的高度是840000,每个区块的奖励是3.125 BXET,然后在接下来的840001,840002... 840010都没有任何一个BxE验证者提交状态消息,于是出块奖励将累计到3.125*10=31.25 BXET。验证者A订阅最新比特币区块到840010,检查并执行了所有BxE协议的交易,于是构造了一笔BxE状态消息:
{
"Height":840010,
"StateRoot":"0x12325436345...",
"Reward":"31.25"
}
并将该状态消息通过Ordinals协议铭刻到比特币网络。 假设该铭刻交易在840011号区块上被打包,于是所有BxE节点将验证该状态消息的有效性和验证者的有效性,有效,则为验证者A的地址增加31.25的奖励。
除了前面提到的出块奖励,BxE协议还有Gas交易手续费的回收奖励。当用户支付Gas费用时,这部分费用将采用与以太坊Gas相同的算法,被收入到一个专门的奖励池中,然后由状态共识的验证者按照一定的规则进行分配。
{
"Height":840010,
"StateRoot":"0x12325436345...",
"Reward":"31.251"
}
{
"Height":840010,
"StateRoot":"0x12325436345...",
"Reward":"31.251"
}
而验证者B提交的是840009这个高度的状态数据,内容如下:
{
"Height":840009,
"StateRoot":"0xabcdef...",
"Reward":"28.126"
}
然后这两个铭文都被打包到了840011号区块,那么两位验证者获得的奖励分配为:
当用户需要转账BXET、创建EVM合约或者调用EVM合约时,用户需要构造一个以太坊交易,并将其进行RLP编码(这是以太坊相关工具提供的能力)。接下来,用户无需对这个编码后的以太坊交易签名,而是将这个交易数据放入Ordinals协议中,构造出铭刻脚本和对应的P2TR地址。 接下来用户将一定数量的BTC转入P2TR地址,这个转账BTC的交易可以进行广播。 最后,用户无需等待比特币网络的打包确认,用户即可再次构造从P2TR地址到自己地址的交易,将包含以太坊交易的脚本铭刻到比特币网络,用户对这个交易签名并广播。 当两笔交易被比特币网络打包到区块中时,所有BxE节点将会订阅对应的新区块和交易并解析执行其中的以太坊交易,完成各个BxE节点状态数据的更新。
BxE协议对外提供与以太坊JSON-RPC接口兼容的网关服务,用户可以通过该网关查询BxE节点上的合约状态和执行结果。 这种设计带来的主要优势是:
充分利用了比特币网络出色的安全性、去中心化程度和全球共识,使得合约执行的数据源具有很高的可靠性和确定性。
将合约执行和状态存储与记账分离,避免了把所有计算和存储都放在链上,从而提高了系统吞吐量和扩展性。
由于BxE协议开源透明,任何第三方都可以部署BxE节点参与网络,形成了天然的数据去中心化和冗余备份。
通过网关服务,为外部应用提供了与以太坊生态无缝兼容的接口,使得现有dApp可以无缝迁移到BxE平台。
BxE项目方将推出官方的钱包、浏览器等工具,方便用户与BxE交互。同时也鼓励社区开发更多基于BxE协议的产品和服务,打造一个开放、多元、安全高效的去中心化合约生态。
BXET(Bitcoin x Ethereum Virtual Machine Token简称BXET)是BxE生态系统的核心加密数字资产,其发行总量为2100万,其发行速度与比特币网络同步,截止2024.4,比特币网络中BTC已经发行约1966W,占发行总量的93%,剩下的约7%将随着比特币区块高度的增加逐步挖出。 与之对应的,BxE协议在上线时将一次性发行与当时BTC等量的BXET,而剩下的约10%的BXET将随着比特币的产块奖励一样逐步挖出。
对于这一次性发行的约1970万BXET,在BxE协议上线之前,项目方通过BRC-20和ERC20在比特币链和以太坊链上进行锚定,在BxE生态系统运行后转入BxE平台。
BXET将作为BxE平台内部的Gas费用支付通证,用于支付智能合约部署、合约调用等手续费。此外,BXET还将作为PoS状态共识的质押资产,通过质押BXET取得状态验证人资格,参与后续的BXET挖矿。另外BXET还作为生态系统权益证明参与社区治理投票。
与以太坊类似,在BxE平台上使用智能合约需要消耗一定Gas费用,并按当前Gas Price折算成相应BXET数量从用户账户扣减。BxE的交易被打包后,部分Gas将直接销毁,而剩余的Gas将和产块奖励一起被验证人矿工挖出。
BxE协议支持BRC-20 Token转移到BxE上,以ERC20 Token的形式存在。
要实现BRC-20到ERC20的兑换,需要定义一个锁定地址,该锁定地址可以是一个黑洞地址,如果使用黑洞地址作为锁定地址,那么将支持单向的BRC-20 Token转移到BxE协议上,以ERC20 Token的形式存在。 如果希望实现双向的BRC-20 Token转移到BxE协议上,那么可以采用多签地址或者某个可信地址作为锁定地址。
以知名的BRC-20 ORDI为例,跨到BxE协议的过程如下:
function _mint(address to, uint256 amount)
,为锁定交易的发起人铸造对应锁定数量的WORDI Token。WORDI的铸造逻辑如图:
flowchart TD
Start((WORDI合约\nmint方法)) --> A
A{判断交易哈希} -->|已处理过| E[返回错误]
A -->|未处理过| C[跨合约调用BRC-20查询合约getTransfer方法]
C --> D{判断Token Symbol}
D -->|不是ORDI| E[返回错误]
D -->|是ORDI| F{判断收款人地址}
F -->|不是锁定地址| E[返回错误]
F -->|是锁定地址| H[调用_mint铸造WORDI]
H --> End((完成))
BxE协议支持BTC转移到BxE上,以ERC20 Token(WBTC)的形式存在。
要实现BTC到ERC20的兑换,需要定义一个锁定地址,该锁定地址可以是一个黑洞地址,如果使用黑洞地址作为锁定地址,那么将支持单向的BTC转移到BxE协议上,以ERC20 Token(WBTC)的形式存在。 如果希望实现双向的BTC转移到BxE协议上,那么可以采用多签地址或者某个可信地址作为锁定地址。
以下是BTC跨到BxE协议的过程:
function _mint(address to, uint256 amount)
,为锁定交易的发起人铸造对应锁定数量的WBTC。WBTC的铸造逻辑如图:
flowchart TD
Start((WBTC合约\nmint方法)) --> A
A{判断交易哈希} -->|已处理过| E[返回错误]
A -->|未处理过| C[跨合约调用BTC查询合约getTransaction方法]
C --> D{判断收款人地址}
D -->|不是锁定地址| E[返回错误]
D -->|是锁定地址| F{判断锁定金额>0?}
F -->|锁定金额=0| E[返回错误]
F -->|是| H[调用_mint铸造WBTC]
H --> End((完成))
BxE协议基于Ordinals协议为基础,在比特币原生网络(Layer1)实现了对以太坊虚拟机EVM的支持,从而让比特币网络能够支持图灵完备的智能合约。BxE打通了比特币生态与自己的EVM,可以将Ordinals藏品、BRC-20以及更多的比特币生态引入到EVM中,为比特币生态带来了去中心化的流动性。
以下是BxE协议的主要优点:
总的来说,BxE协议通过创新的技术设计,为比特币网络带来了新的生机和活力,推动了区块链技术在各个领域的广泛应用和发展。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!