技术支持

此页面取自 Github 上的Aztec Connect Bridges 存储库README。

阿兹特克是什么?

Aztec 是一个以隐私为中心的 L2,它通过称为 DeFi 聚合的过程实现与第 1 层智能合约和流动性的廉价私人交互。我们使用先进的零知识技术“zk-zk rollups”通过 Aztec Connect 网桥增加隐私和显着节省任何第 1 层协议。

什么是桥

桥接器是部署在主网上的第 1 层 Solidity 合约,它使 DeFi 协议符合 Aztec rollup 期望的接口。这允许 Aztec 汇总合约通过桥与 DeFi 协议进行交互。

桥接合约将任何第 1 层 DeFi 协议建模为异步资产交换。您可以为每个桥指定最多两个输入资产和两个输出资产。

这是如何工作的

在 Aztec 上屏蔽资产的用户可以构建一个零知识证明,指示 Aztec rollup 合约进行外部 L1 合约调用。

汇总提供者在汇总中将 Aztec 网络上的多个 L2 事务意图批处理在一起。然后,汇总合约对 L1 DeFi 合约进行聚合交易,并将资金按比例返还给 L2 上的用户。

这个要多少资金

Aztec 连接事务可以批处理到一个汇总中。该批次中的每个用户都支付基本费用,以支付汇总证明的验证以及他们在 L1 DeFi 交易燃料成本中的份额。单次 Aztec Connect 交易需要 3 个基本费用或大约 8000 个 gas。

然后用户支付他们在 L1 Defi 交易中的份额。rollup 将调用具有固定确定性 gas 量的桥接合约,因此总费用很简单,约为 8000 gas + BRIDGE_GAS / BATCH_SIZE。

什么是私人的

任何 Aztec Connect 交易的资金来源都是 Aztec 保护资产。当用户与 Aztec Connect Bridge 合约交互时,他们的身份是隐藏的,但发送到桥的余额是公开的。

汇总提供者被激励用相同的bridgeId. 这降低了类似交易的 L1 交易成本。bridgeId组成:

虚拟资产

Aztec 使用虚拟资产或头寸代币的概念来表示桥接合约持有的资产份额。这比铸造 ERC20 代币要高效得多。当网桥持有 Aztec 不支持的资产(例如 Uniswap Position NFT 或其他不可替代资产)时,将使用这些资产。

如果任何交互的输出资产指定为“虚拟”,用户将在 Aztec 上收到代表其持仓份额的加密票据,但无需转移代币或 ETH。仓位代币有一个assetIdinteractionNonceDeFi Bridge 调用的。这是全球独一无二的。虚拟资产可用于构建复杂的流程,例如进入或退出 LP 头寸(例如,一份过桥合约可以有多个流程,这些流程使用不同的输入资产触发)。

辅助输入数据

auxData字段可用于向桥接合约提供数据,例如滑点、tokenIds 等。

桥接合约接口

// SPDX-License-Identifier: GPL-2.0-only// Copyright 2020 Spilsbury Holdings Ltdpragma solidity >=0.6.6 <0.8.0;pragma experimental ABIEncoderV2;import { Types } from "../Types.sol";interface IDefiBridge {  /**   * Input cases:   * Case1: 1 real input.   * Case2: 1 virtual asset input.   * Case3: 1 real 1 virtual input.   *   * Output cases:   * Case1: 1 real   * Case2: 2 real   * Case3: 1 real 1 virtual   * Case4: 1 virtual   *   * Example use cases with asset mappings   * 1 1: Swapping.   * 1 2: Swapping with incentives (2nd output reward token).   * 1 3: Borrowing. Lock up collateral, get back loan asset and virtual position asset.   * 1 4: Opening lending position OR Purchasing NFT.             Input real asset, get back virtual asset representing NFT or position.   * 2 1: Selling NFT. Input the virtual asset, get back a real asset.   * 2 2: Closing a lending position. Get back original asset and reward asset.   * 2 3: Claiming fees from an open position.   * 2 4: Voting on a 1 4 case.   * 3 1: Repaying a borrow. Return loan plus interest. Get collateral back.   * 3 2: Repaying a borrow. Return loan plus interest.             Get collateral plus reward token. (AAVE)   * 3 3: Partial loan repayment.   * 3 4: DAO voting stuff.   */  /*  @dev This function is called from the RollupProcessor.sol contract via the DefiBridgeProxy.    It receives the aggregate sum of all users funds for the input assets.  @param AztecAsset inputAssetA a struct detailing the first input asset,     this will always be set  @param AztecAsset inputAssetB an optional struct detailing the second input asset,     this is used for repaying borrows and should be virtual  @param AztecAsset outputAssetA a struct detailing the first output asset,     this will always be set  @param AztecAsset outputAssetB a struct detailing an optional second output asset  @param uint256 inputValue, the total amount input,     if there are two input assets, equal amounts of both assets will have been input  @param uint256 interactionNonce a globally unique identifier for this DeFi interaction.    This is used as the assetId if one of the output assets is virtual  @param uint64 auxData other data to be passed into the bridge contract (slippage / nftID etc)  @return uint256 outputValueA the amount of outputAssetA returned from this interaction,    should be 0 if async  @return uint256 outputValueB the amount of outputAssetB returned from this interaction,     should be 0 if async or bridge only returns 1 asset.  @return bool isAsync a flag to toggle if this bridge interaction will return assets     at a later date after some third party contract has interacted with it via finalise()  */  function convert(    Types.AztecAsset calldata inputAssetA,    Types.AztecAsset calldata inputAssetB,    Types.AztecAsset calldata outputAssetA,    Types.AztecAsset calldata outputAssetB,    uint256 inputValue,    uint256 interactionNonce,    uint64 auxData  )    external    payable    returns (      uint256 outputValueA,      uint256 outputValueB,      bool isAsync    );  /*  @dev This function is called from the RollupProcessor.sol contract via the DefiBridgeProxy.    It receives the aggreagte sum of all users funds for the input assets.  @param AztecAsset inputAssetA a struct detailing the first input asset,     this will always be set  @param AztecAsset inputAssetB an optional struct detailing the second input asset,     this is used for repaying borrows and should be virtual  @param AztecAsset outputAssetA a struct detailing the first output asset,     this will always be set  @param AztecAsset outputAssetB a struct detailing an optional second output asset  @param uint256 interactionNonce  @param uint64 auxData other data to be passed into the bridge contract (slippage / nftID etc)  @return uint256 outputValueA the return value of output asset A  @return uint256 outputValueB optional return value of output asset B  @dev this function should have a modifier on it to ensure     it can only be called by the Rollup Contract  */  function finalise(    Types.AztecAsset calldata inputAssetA,    Types.AztecAsset calldata inputAssetB,    Types.AztecAsset calldata outputAssetA,    Types.AztecAsset calldata outputAssetB,    uint256 interactionNonce,    uint64 auxData  ) external payable returns (uint256 outputValueA, uint256 outputValueB, bool interactionComplete);}

异步流解释

如果 DeFi Bridge 交互是异步的,则必须在 DeFi 交互完成后稍后完成。

这是通过调用来实现的RollupProcessor.processAsyncDefiInteraction(uint256 interactionNonce)。这将在内部调用finalise并确保已转移正确数量的代币。

转换

该函数通过 DeFi Bridge 代理从 Aztec Rollup Contract 调用。在调用桥接合约上的此功能之前,汇总合约将向您发送由输入参数定义的 ETH 或代币。

此功能应与 DeFi 协议(例如 Uniswap)交互并将代币或 ETH 转回 Aztec Rollup Contract。Rollup 合约将检查它收到的金额是否正确。

如果 DeFi Bridge 交互是异步的(例如,它不在同一个区块中),则对 convert 的调用应该返回(0,0 true)。合约应记录任何异步头寸或虚拟资产返还的交互随机数。

稍后,可以通过促使汇总合约调用finalise桥接来完成此交互。

终结

该函数将从 Azte Rollup 合约中调用。Aztec Rollup 合约将检查它是否收到了返回值指定的正确数量的 ETH 和代币,并触发 Aztec 上的结算步骤。

Last updated