Biconomy Network是一种无权限的点对点协议,旨在实现跨链互操作性,使开发人员可以无需编写智能合约,便可通过统一的接口在多个区块链上进行交易操作。该网络通过使用超级交易(Supertransaction)模型来简化复杂的多链交互,有效降低开发门槛,并提供灵活的执行环境,确保跨链事务的安全性和可靠性。
本文介绍了 Biconomy Network,一个开放的点对点协议,旨在实现无缝的跨链互操作性,位于应用层 - 无需编写智能合约。
通过提供一个针对通用信息传递协议(GMP)、桥接和求解器网络的聚合接口,Biconomy Network 创建了一种统一的层,使开发者能够通过单一的“所有链”连接(通过 SDK 或单一 API 端点连接到单个“入口”节点)协调和组合跨多个区块链的交易。
通过将权限过程(使用私钥签名)和提交交易的过程(发布到链上)分离开来(由 Biconomy 网络完成);与验证和执行交易的过程(由底层链完成)相分离,它使开发者能够构建丰富的链上应用,这些应用将数千条底层区块链视为单个执行环境 - 无需编写或部署智能合约。
利用 Biconomy 堆栈为前端和后端开发者打开了一个全新的可能性天空,使他们能够编写作为多链智能合约的脚本。脚本中的指令保持丰富的执行上下文,允许开发者在多个链的多个交易之间共享相同的内存布局和数据。
这些脚本的执行受到链上验证合约的保护,继承了底层区块链的安全性 - 同时执行的实时性是由 Biconomy 网络节点发布的保证金确保的 - 使整个系统真正实现了无权限和无信任。
智能合约平台的出现引入了强大的组合原语,使开发者能够结合现有协议创建新颖的应用。此组合性在 DeFi 扩展期间推动了显著的创新,开发者利用单链环境中的多个协议创造复杂的金融产品。
虽然单链组合性证明了其强大,但在执行速度和成本上面临固有限制。以太坊的聚合中心化扩展模型和具有独特虚拟机的替代 Layer-1 网络(如 Solana)的出现创造了一个片段化的生态环境。尽管在跨链结算和消息传递层上取得了显著进展,但前端互操作性仍然在很大程度上未得到解决。
区块链生态系统面临显著的不平衡:精通 TypeScript、Swift 和 Kotlin 的前端开发者数量大大超过智能合约开发者。然而,这些前端开发者在构建跨链应用时面临相当大的技术障碍,涉及实现基本功能所需的专业区块链知识。
Biconomy Network 引入了一种新颖的点对点架构,使其能够实现:
该网络可以被看作是一种互操作性聚合器,独特地定位于:
Biconomy Network 方法的核心方面在于它不在内部传递消息或流动性。它仅作为一个触发器,用于协调现有(和未来)解决方案共同工作。
Biconomy 网络旨在成为所有区块链的通用接口,供前端和后端开发者使用。通过连接到单一 RPC 端点,开发者将能够在所有区块链上执行交易,包括 EVM 和 alt-VM 环境。
该网络是完全无权限和抵制审查的。网络中的所有保证都是通过纯加密技术提供的,没有选票或社会共识机制用于解决争端。
与网络交互的过程与所有现有钱包和开发工具向后兼容。应用开发者能够在他们的现有项目中无缝接入 Biconomy 网络,而无需进行重大迁移。
及时资源共享(统一多链余额) 开发者需要能够访问用户在 任何 链上的资金,无需用户进行桥接或签署多个交易。跨区块链转移资金的过程需要对用户是隐形的,对开发者是毫不费力的。
多链交易调度
Biconomy Network 使开发者能够编码复杂的多链交易序列,可以包括对桥、求解器或预言机的调用,并通过单个用户签名执行它们。Biconomy Network 将负责协调所有操作,并以正确的顺序执行它们。
跨链组合性
开发者需要能够动态组合跨链的多笔交易、桥和求解器为单一的“用户操作”。通常,这些输入变量在用户签署交易时并不明确。Biconomy 网络允许开发者在 执行时 读取存储槽或Token余额的状态,并动态注入到函数参数中。
通用Gas及Gas赞助
区块链中最大的问题之一是需要 Gas 来执行交易。Biconomy 网络将允许用户在所有链上使用 ERC20 代币支付Gas(例如,在 Arbitrum 上用 USDC 支付 Optimism 上的交易执行)。节点本身充当“代币付款人”,使开发者能够无缝使用此功能,而无需额外的集成努力。为了更高级的Gas抽象 - 应用开发者将能够为他们的用户赞助Gas。
协同执行
Biconomy 网络使多个节点能够协同执行单一所需的用户操作。这是网络能够支持 1000+ 区块链的基础。虽然每个单独的节点专门用于其所支持的区块链和操作类型的子集 - 但与网络交互的开发者看到的是支持 所有 区块链和 所有 操作类型的统一接口。
执行冗余
对于流行的区块链和指令类型,在任何给定时刻将有许多节点可用于执行。这确保了通过 Biconomy Network 执行在多个节点出现故障时仍将是 高度可用 的。
Biconomy 网络由称为 超级交易 的统一数据模型驱动。超级交易表示一系列链上和链外指令,Biconomy Network 需要根据用户希望支付的执行费用信息进行执行。
紧凑且多功能的数据结构
超级交易使用默克尔树数据结构编码,使其能够使用单个哈希 - 称为 超级交易哈希 来表示任意数量的指令。
一个签名批准所有指令
通过用他们的私钥对超级交易哈希进行签名,用户允许 Biconomy Network 执行超级交易中包含的所有操作。
一笔费用支付所有指令
Biconomy Network 上的所有操作,无论它们跨越多少链、求解器、桥或其他提供商 - 始终使用单一费用支付。此费用可以由用户支付,或由应用开发者赞助。
信任无执行验证
在执行过程中,超级交易中所有指令的验证都是 链上 完成的。这防止了 Biconomy Network 节点执行用户 明确 使用其私钥签名的内容以外的任何操作。
执行受质押保护
超级交易中的每个操作都受到加密质押的保护。如果节点未在给定参数内执行交易,则会被惩罚。
实现协同执行
节点可以协作执行单个超级交易。如果某个节点缺乏支持特定区块链或超级交易中的指令类型,它可以处理其支持的部分,并邀请网络中的其他节点执行其他部分。由路径查找节点处理此任务。
无信任协作
协同执行是无信任的,通过质押保护的。每个节点发布自己的质押承诺自己支持的指令子集。
Biconomy Network 是最近由 Biconomy 引入的 模块化执行环境 (MEE) 标准的扩展和去中心化实施。模块化执行环境被定义为能够执行超级交易的任何执行环境。
模块化执行环境受到模块化区块链理论和 ERC-4337 账户抽象能力的启发。
MEEs 代表了模块化区块链理论的自然演变,扩展了专业层的概念,超越了共识、数据可用性和结算。虽然模块化区块链范式将这些核心功能分离以优化可扩展性和效率,MEEs 特别关注执行层,通过将其抽象化与底层链分开。这种方法允许区块链交互通过专用基础设施处理、增强和优化,然后达到共识层,创造出一种能够均匀处理复杂交易模式、跨链操作和用户体验改进的专业中间件。
虽然 MEE 的灵感来自 ERC 4337,但我们已经能够证明它远远超过了后者的能力,并服务于不同的目的。ERC-4337 旨在简化用户与区块链交互的体验,拥有分离的执行层(捆绑器/付款人)只是支持这些功能的一个结果。相反,MEEs 则基于专门的执行层(MEE 节点)作为其基础,允许在其上构建一个全面的高级功能生态系统。
Biconomy Network 节点可以在中心化和去中心化模式下工作。只需将足够的质押代币划拨给节点,即可轻松将其从中心化切换到去中心化。这还使得 MEE 集成者能够在中心化环境中测试他们的堆栈,并在未来任何时候连接到更广泛的 Biconomy Network 生态系统。
机构和开发者可以运行自己的 MEEs 和/或接入 Biconomy Network。中心化 MEE 无法进行协同执行,而是充当多链捆绑器和付款人,能够协调交易。
对于 EVM 链,开发者可以通过简单部署任何兼容 ERC7579 的智能合约账户(例如 Biconomy Nexus、Safe 或 Kernel..)并安装 k1MeeValidator
模块来加入网络。签署交易和管理权限与现有钱包(如 MetaMask、Rabby、Zerion 等)或通过包括 Passkeys 和 OAuth 的替代身份验证方法无缝工作。MEE 架构完全支持 EIP-7702,使得标准 EOA 账户也能访问 MEE 功能。这种兼容性使得用户能够仅使用一个签名执行复杂的多链操作,无论其钱包类型如何。
Biconomy Network 作为一个无权限的点对点 Gossip 网络工作。任何人都可以加入网络。对于任何给定的超级交易,验证和执行可以分为多个部分,由专门的节点处理:
路径查找 - 路径查找器/入口节点
网络需要找到能够执行超级交易中所有指令的节点。这一工作由专门的节点——路径查找器完成。路径查找器读取记录所有节点及其声明的能力(支持的链和支持的指令类型)。路径查找器还检查执行节点的实时性,并确保优先将订单流发送给延迟低和可用性高的节点。当用户访问 Biconomy Network 时,他们连接到一个路径查找器节点。
执行 - 执行节点
节点承诺执行超级交易中的指令并执行它们。在每次指令执行结束时,一个链上存储槽会被设置为“成功”(取决于指令的类型),这证明了指令已被执行。
验证/斩罚 - 瞭望塔节点
如果所有节点成功执行了他们分配的指令,则在经过一定时间后,验证步骤会自动执行。经过该时间后,节点如果未执行,则无法再被斩罚。如果任何节点未按承诺执行他们的指令,可以调用公共的 slash
函数,确保节点受到惩罚。为确保节点定期受到惩罚,有一组专门的“瞭望塔”节点监控网络并在需要时调用 slash
函数。
Biconomy Network 使用 报价与执行 流程确保超级交易的执行。这意味着开发者首先向 Biconomy Network 请求 报价 - 这个报价由执行节点提供,具有约束力,并带有到期时间。
报价与执行模型的核心优势:
用户的价格可预测性。
用户提前获得整个超级交易执行成本的报价。Biconomy Network 节点作为更复杂的参与者,承担了计算执行成本的风险。
防止节点抢跑。
代理用户转发交易的一个大问题(例如,在 ERC-4337 的情况下)是 - 如果交易拥有将费用分配给中介的费用,MEV 机器人就可能抢先获取,这些机器人会将费用获取为己有。在报价与执行模型中,执行费用的接收者在交易数据中被 硬编码,使 MEV 机器人无法抢跑。
反抄袭与 DDOS 缓解
节点中进行超级交易实际执行的代码可以与提供承诺调用的代码分开。这意味着潜在的恶意用户只能对执行轻量的操作点进行轰炸,并且可以进行简单扩展以支持高负载。
执行超级交易的过程从将所需指令编码为数组开始。每个超级交易请求必须包含两个字段:
指令
要求 Biconomy Network 执行的确切指令
费用信息
用户希望为超级交易的执行支付的方式
一个包含三条指令的超级交易伪代码示例如下:
// 将由 Biconomy Network 执行的指令
const instructions = [
swap(
chain: optimism,
fromToken: USDC,
toToken: USDT,
amount: 1000 // 将 1000 USDC 交换为未知数量的 USDT
), // 交换
bridge( // 触发求解器/桥
fromChain: optimism
toChain: arbitrum,
// 注入从交换中获得的确切 USDT 数量
amount: inTimeBalanceOf(USDC)
),
// 目标链操作的自动调度,供应
// 功能将在资金从桥接到达后 **执行**
supplyToLendingProtocol(
token: USDC,
amount: inTimeBalanceOf(USDC) // 跨链组合性示例
)
]
// 编码费用支付信息
const feePaymentInfo = {
type: 'payWithERC20Token',
onChain: optimism,
token: USDC
}
// 完整的超级交易包含指令和期望的支付类型
const stx: Supertransaction = {
instructions: instuctions,
feePaymentInfo: feePaymentInfo
}
用户将其超级交易请求发送到他们连接的节点。该节点将触发 路径查找器(初始为中心化,之后去中心化)以找到节点间可用的执行路径。
在找到可用路径后,执行节点需要承诺他们的执行意愿。它们通过提供非约束性报价来做到这一点,声明:
路径查找器将汇集可用的执行路线并将其按执行成本或其他变量(例如,所选节点的平均延迟、所选节点的成功执行百分比等)返回给用户。
用户将接受路径查找器返回的已提供的路径之一。由于每条路径内的支付数据被表示,因此每个可用路径的 超级交易哈希 完全不同。用户通过使用私钥签署所选路径的超级交易哈希,允许该路径的执行,并将已签名的哈希以及完整的超级交易指令和支付对象 - 发送回路径查找器/入口节点。路径查找器/入口节点将分发签名对象给执行节点进行执行,并发送给瞭望塔节点,以便在节点违法时对其进行惩罚。
节点在收到用户签署的超级交易哈希后,能够通过使用他们自己的私钥签署超级交易哈希来声明其执行费用的份额。为了在索要资金时提高Gas效率,资金可以在所有节点中一次性索要。
声明执行费用是执行保证/惩罚流程的一个重要部分。因为声明执行费用必须通过在链上发布签署的超级交易哈希进行,所以节点基本上是广播其承诺,在超级交易中执行所有分配的指令。如果未执行,此承诺可用于对节点进行惩罚。
执行节点将按所需顺序执行所有交易。交易执行的协调通过超级交易中的特殊指令 maxTime
和 minTime
完成。每个节点 必须 在 maxTime
前执行,否则将被处罚。
由于多链执行可能依赖于未立即满足的条件 - 例如,其中一条指令可能是调用 supply
功能,需要在 Arbitrum 上可用 1 WETH
,而该资金则需要从 Polygon 桥接过来 - 节点无法知道交易失败是由于条件未满足 还是 因为开发者编码了无效交易。
因此,如果达到 maxTime
且交易在模拟中仍然回退,节点将 强制 执行此交易,即使它无效。如果节点不强制执行此交易,它将面临被惩罚的风险。节点能够通过在链上发布此交易并让实际调用在智能账户合约内回退,从而强制执行无效交易(实际交易成功,但智能账户内的代理调用失败,并发出 success=false
的 UserOp 事件)。
如果流程中任何节点未执行其承诺要执行的交易,它们将受到惩罚。惩罚是通过调用链上的公共 slash
函数完成的。任何人都可以调用该函数,瞭望塔节点只作为确保惩罚确实发生的服务。
slash
函数的参数包括:
由于 Biconomy 网络中的指令类型可以是异构的(例如,执行 UserOp、前置流动性、触发跨链消息) - 每种类型的指令都有对应的专用“惩罚条件”合约 - 该合约检查链上或链外的某些条件,以判断节点是否需要被惩罚。
为了保持未来的灵活性,Biconomy Network 对节点能够承诺的指令类型保持中立,只要其指令类型具有相关的惩罚合约。
在初始版本中,Biconomy Network 将带有 UserOpExecutionSlashing
合约,使节点能够承诺在某条链上执行特定的 UserOp。
在多个链上执行多个指令(交易、消息传递、代币转账)伴随着隐含的组合性问题。由于链上交易、桥接或求解器的执行输出在事先并不确定,因此通常无法编码控制所有这些变量的函数调用数据。
模块化执行环境(MEE)堆栈,包括 Biconomy Network,提供了一种向后兼容的解决方案,用于 动态注入 存储槽或函数输出的确切值 - 在运行时!
在实践中,这意味着你可以通过编码一个脚本来完全控制滑点或运行时问题,该脚本将在执行时“提取”所需的数据。数据提取过程是在 链上 完成的!结果是动态数据的注入是完全无需信任的。
在一个示例中:假设你要:
在这个示例中,我们有几个未知数:
在 EVM 网络上,MEE 堆栈通过使用智能账户(ERC-7579)备份处理程序 解决了组合性问题。备份处理程序的一个优势是其能够 拦截 交易调用数据并以 完全无信任/确定性方式 进行修改。组合性备份处理程序的工作方式如下:
读取原始交易
原始交易需要以特殊方式编码(作为对 ERC-7579 智能合约账户上 executeComposable
函数的调用),然后备份处理程序将能够读取它并推导出开发者提前设置的参数以及需要从链中“提取”的参数。
访问当前区块链状态
备份处理程序将为每个需要动态注入的参数读取关联的存储槽或调用关联的链上函数,以获取需要注入的确切数据。对于每个动态参数,由开发者提前编码出其将从中提取数据的确切存储槽。备份处理程序是智能合约,只能读那个存储槽中的数据。
注入动态参数
一旦获取数据,备份处理程序将把动态参数注入到请求的函数中。
执行
备份处理程序将以注入的参数执行编码的函数。
存储
备份处理程序可选择将执行结果或执行后区块链状态存储到预先确定的存储槽中,以供下一个交易使用。
除了使函数调用(例如执行时的某代币 balanceOf)组合化,或从同一链上存储槽注入外,MEE 堆栈还通过为每个超级交易创建一个 多链内存布局 来实现跨链组合性。这意味着指令可以共享相同的执行上下文 - 甚至跨越链。
推导内存布局
每个超级交易的内存布局来源于:
布局的推导方式如下:
keccak256(superTxHash, contractAddress, methodSignature, slot)
进入备份处理程序的每个函数调用都能够在目标合约执行结束后,将变量存储到这些存储槽中。开发者可以决定是存储某些存储槽还是某些函数调用的输出(例如,存储某个 NFT 上的 getLastMintedId
调用)。
获取存储
MEE 堆栈对开发者希望如何获取其他链上存储槽的状态保持中立。这可以通过通用消息传递协议、状态的 ZK 证明、预言机等来完成。这由可信的单例合约操作,掌握如何读取和写入派生的存储槽。应用本身将信任服务提供商(例如 LayerZero、Polymer、Chainlink 等)以正确方式转移信息。
备份处理程序将确保为超级交易内的所有指令 只 调用同一超级交易所推广的确切存储槽。这意味着其中每个交易将 共享 相同的内存布局 - 使开发者可以轻松编写跨链的脚本。备份处理程序、可信单例和跨链提供商将确保整个过程是无信任的,防止中间人攻击。
编码可组合交易
由于调用 executeComposable
的编码结构是众所周知的,因此可以通过使用 SDK 包从用户手中抽象出组合性。一个 SDK 中可组合流的示例将是:
const amountToBridge = parseUnits('100', 6) // 100 USDC
const supertx: Supertransaction = {
instructions: [
acrossPool.on(optimism).bridge({
args: [
usdc.addressOn(optimism), // 从 OP 桥接 USDC
usdc.addressOn(arbitrum), // 到 Arbitrum 上的 USDC
optimism.id,// 从 Optimism 桥接
arbitrum.id, // 包-到 Arbitrum
amountToBridge
]
}),
uniswap.on(arbitrum).swap({
args: [
usdc.addressOn(arbitrum), // 在 Arbitrum 上交换 USDC,
usdt.addressOn(arbitrum), // 在 Arbitrum 上交换为 USDT
// 动态注入从 Optimism 获得的 USDC 数量
// 来应对桥接可能出现的滑点
runtimeBalanceOf(usdc.addressOn(arbitrum))
]
})
]
}
Biconomy Network 是一个全面的堆栈,实现多个链之间的完全可组合交易执行。通过协作执行和递归承诺的可扩展架构,该网络能够规模支持 1000+ 链的未来。它能够触发求解器、跨链消息提供者并基于运行时数据执行交易 - 这些数据来源于链上存储槽,或由预言机提供。它提供Gas抽象和Gas赞助。
Biconomy Network 是你与所有区块链的通用接口!
- 原文链接: blog.biconomy.io/biconom...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!