Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
130 commits
Select commit Hold shift + click to select a range
e65e050
fix(ct): skip minting if address zero
ZeroEkkusu May 27, 2025
34ad5fb
docs(ct): v0.5.1
ZeroEkkusu May 27, 2025
0db4ba2
docs: v0.6.0
ZeroEkkusu May 27, 2025
f5333af
refactor: global versioning
ZeroEkkusu May 27, 2025
0289fb9
Merge branch 'feat/l2deployment' into 1.0.0
ZeroEkkusu May 27, 2025
62a9c0f
feat(script): redeploy layer y
ZeroEkkusu Jun 2, 2025
856caee
Merge pull request #25 from agglayer/1.0.0
ZeroEkkusu Jun 2, 2025
7ebbe5f
fix: backing migration
ZeroEkkusu Jun 2, 2025
6337e1e
fix: tests
JDawg287 Jun 3, 2025
c19f9bf
feat: vault bridge v1
ZeroEkkusu Jun 13, 2025
06cb154
fix(mm): invalid wrapped gas token
ZeroEkkusu Jun 13, 2025
f7ce308
fix(ct): decimals check
ZeroEkkusu Jun 19, 2025
3f0c548
fix: unit tests
JDawg287 Jun 24, 2025
39134e8
docs: update natspec
ZeroEkkusu Jun 24, 2025
cc53e31
docs: generated => produced
ZeroEkkusu Jun 24, 2025
3d1c54d
build: docs setup
ZeroEkkusu Jun 26, 2025
a5971ee
build: forge doc
ZeroEkkusu Jun 26, 2025
47ad9bd
build: remove docs ci
ZeroEkkusu Jun 26, 2025
782923c
docs: update readme
ZeroEkkusu Jun 27, 2025
6496dd8
docs: fix links
ZeroEkkusu Jun 27, 2025
e82ba68
docs: fix readme
ZeroEkkusu Jun 27, 2025
edba82e
docs: fix readme
ZeroEkkusu Jun 27, 2025
818c13d
docs: improve readme
ZeroEkkusu Jun 27, 2025
a9fece9
docs: link
ZeroEkkusu Jun 27, 2025
a9a8c55
fix(vb): revert claimAndRedeem interface change
ZeroEkkusu Jun 30, 2025
f0c2d3c
docs: fix readme
ZeroEkkusu Jun 30, 2025
a209dc2
docs(readme): add github
ZeroEkkusu Jun 30, 2025
6840aa6
fix: round up
ZeroEkkusu Jul 1, 2025
b96c753
docs: fix typo
ZeroEkkusu Jul 1, 2025
e4243e0
fix(nc): round up
ZeroEkkusu Jul 4, 2025
5788f10
fix(test): round off
JDawg287 Jul 7, 2025
3c65a2b
fix(ci): change to public rpc
JDawg287 Jul 7, 2025
a837321
fix(test): rework integration tests
JDawg287 Jul 8, 2025
0f79409
chore: improve vault bridge token test coverage
JDawg287 Jul 8, 2025
704113b
feat: fuzz test for `depositIntoYieldVault`
JDawg287 Jul 8, 2025
dbcc6b6
fix: script build errors
JDawg287 Jul 10, 2025
7298218
fix(test): suppress warnings
JDawg287 Jul 10, 2025
d571717
docs: update license
ZeroEkkusu Jul 30, 2025
03b2fa3
docs: update links
ZeroEkkusu Jul 30, 2025
2c76a32
docs: stylize
ZeroEkkusu Jul 30, 2025
5cec432
chore: remove banner
ZeroEkkusu Aug 7, 2025
8c24832
docs: reword
ZeroEkkusu Aug 11, 2025
f72b722
refactor: rename concepts
ZeroEkkusu Aug 11, 2025
5624dc2
test: rename concepts
ZeroEkkusu Aug 11, 2025
3857e7b
docs: rename concepts
ZeroEkkusu Aug 12, 2025
2f6deaf
build: restructure directories
ZeroEkkusu Aug 12, 2025
05f7cd1
docs: fix tables
ZeroEkkusu Aug 12, 2025
a0a817c
build: update imports
ZeroEkkusu Aug 12, 2025
87fd82e
docs: clean up
ZeroEkkusu Aug 12, 2025
b247e6b
docs: update deployments
ZeroEkkusu Aug 12, 2025
94ea293
docs: format deployments
ZeroEkkusu Aug 13, 2025
470b16b
docs: format deployments
ZeroEkkusu Aug 13, 2025
e3dff53
build: prepare for wormhole contracts
ZeroEkkusu Aug 13, 2025
bfd933c
Certora formal verification 1 (feat/v1) (#29)
JDawg287 Aug 18, 2025
e6cecbe
feat: polygon portal support, bridged usdc standard for agglayer, adv…
ZeroEkkusu Aug 18, 2025
cfb8c14
feat: add polygon portal contracts
ZeroEkkusu Aug 18, 2025
c45604f
refactor: import path
ZeroEkkusu Aug 18, 2025
1958d0e
fix: add modifiers
ZeroEkkusu Aug 18, 2025
81c3171
feat: v1.0.0-alpha.1
ZeroEkkusu Aug 19, 2025
6d5c430
feat: wormhole support and refactoring
ZeroEkkusu Aug 21, 2025
e1aabd7
refactor: move function
ZeroEkkusu Aug 21, 2025
9540424
refactor: `version` => `VAULT_BRIDGE_VERSION`
ZeroEkkusu Aug 21, 2025
41a68f3
feat: weth wormhole support
ZeroEkkusu Aug 22, 2025
af70e54
chore: empty generic files
ZeroEkkusu Aug 25, 2025
4afb4b2
fix: compile
simonDos Aug 28, 2025
e532e35
fmt
simonDos Aug 28, 2025
49671dc
fix: tests
simonDos Aug 28, 2025
8ddc9d3
fix: agglayer tokens
ZeroEkkusu Sep 2, 2025
860adb6
Merge pull request #38 from agglayer/feat/v1
ZeroEkkusu Sep 2, 2025
dc20755
refactor: misc mods
ZeroEkkusu Sep 3, 2025
f9f2b44
feat: secondary chain token adjustments
ZeroEkkusu Sep 5, 2025
c9beab6
chore(polygon): rename generic files
ZeroEkkusu Sep 5, 2025
3352164
docs: update deployments
ZeroEkkusu Sep 5, 2025
1e1604a
fix(weth): remove receive
ZeroEkkusu Sep 5, 2025
514a83d
feat: custom token weth extension
ZeroEkkusu Sep 10, 2025
25e9415
fix(weth): enable withdrawals and migrations
ZeroEkkusu Sep 10, 2025
89ee72e
docs: update deployments
ZeroEkkusu Sep 10, 2025
2e6d321
chore: reorg tests
JDawg287 Sep 2, 2025
345c0fd
chore: improve vault bridge token test orchastration
JDawg287 Sep 2, 2025
a45a0de
chore: remove unneeded vbUSDT test
JDawg287 Sep 3, 2025
20d21c9
feat: refactor primary chain tests
JDawg287 Sep 5, 2025
8ece9fc
feat: refactor secondary chain tests
JDawg287 Sep 9, 2025
bc0e3ca
fix: build after rebase
JDawg287 Sep 10, 2025
2af0347
fix: unit tests after rebase
JDawg287 Sep 10, 2025
fc83fd1
chore: improve coverage
JDawg287 Sep 11, 2025
e3fd6ee
chore: change fork testing for fuzz tests
JDawg287 Sep 11, 2025
9d0ffc3
fix: warnings
JDawg287 Sep 11, 2025
ecdf37e
feat: tests for custom token agglayer
JDawg287 Sep 12, 2025
062e613
feat: tests for custom token polygon
JDawg287 Sep 12, 2025
691850c
feat: tests for custom token wormhole
JDawg287 Sep 12, 2025
19e1dae
feat: tests for weth wormhole
JDawg287 Sep 12, 2025
49d3386
chore: sanitize integration tests
JDawg287 Sep 12, 2025
b32d583
feat: test for vbUSDC native converter agglayer
JDawg287 Sep 15, 2025
9bac000
fix: misc improvements
ZeroEkkusu Sep 16, 2025
f7ad461
docs: add deployment procedure
ZeroEkkusu Sep 16, 2025
e60a40d
fix: tests
JDawg287 Sep 16, 2025
d31f47b
feat: tests for InitializationCounterUpgradeable
JDawg287 Sep 16, 2025
40e2227
fix: suppress warnings
JDawg287 Sep 17, 2025
0eaa625
feat: integration test polygon
JDawg287 Sep 17, 2025
7e0397d
fix: misc improvements
ZeroEkkusu Sep 19, 2025
3c9d819
fix: tests
JDawg287 Sep 19, 2025
2ff8102
refactor: remove outdated cast
ZeroEkkusu Sep 23, 2025
6abc8f7
docs(wh): update procedure
ZeroEkkusu Sep 23, 2025
4d5a25c
script(pol): deploy custom tokens
ZeroEkkusu Sep 23, 2025
514a9d2
feat(ct/nc): inherit multicall
ZeroEkkusu Sep 24, 2025
6360ec0
feat: reinitialize
ZeroEkkusu Sep 24, 2025
94d8015
fix(ct): prevent claiming to address zero
ZeroEkkusu Sep 25, 2025
06b4a86
refactor(nc): rename param
ZeroEkkusu Sep 25, 2025
d779a69
refactor(nc): rename vars
ZeroEkkusu Sep 25, 2025
f29815b
docs(wh): update procedure
ZeroEkkusu Sep 25, 2025
015a291
fix: initialization counter upgradeable
ZeroEkkusu Sep 25, 2025
a53666e
script(polygon): update
ZeroEkkusu Sep 25, 2025
a145773
script(etc): reverting contract
ZeroEkkusu Sep 25, 2025
69f4d59
test: comment out test
ZeroEkkusu Sep 29, 2025
6ffcec3
docs: document version
ZeroEkkusu Sep 29, 2025
66f2202
build(ci): comment out forge fmt check
ZeroEkkusu Sep 29, 2025
743cfd4
docs: update deployments
ZeroEkkusu Sep 30, 2025
3268e47
script: rename files
ZeroEkkusu Sep 30, 2025
add9335
docs: update procedures
ZeroEkkusu Sep 30, 2025
f8abc7a
refactor: version => protocol
ZeroEkkusu Sep 30, 2025
6af933c
docs: update deployments
ZeroEkkusu Sep 30, 2025
8022cd8
docs: update deployments
ZeroEkkusu Sep 30, 2025
3c220ef
feat: manual weth setting
ZeroEkkusu Oct 1, 2025
f240bc7
fix(script): deployerAddress => ownerAddress
ZeroEkkusu Oct 1, 2025
a4ea0c0
fix(nc): add `setCustomToken(address)`
ZeroEkkusu Oct 1, 2025
fffd296
script: deploy wormhole custom tokens
ZeroEkkusu Oct 1, 2025
57be094
docs: correct
ZeroEkkusu Oct 7, 2025
7d60e49
docs: protection
ZeroEkkusu Oct 9, 2025
8ebb018
docs: fix link
ZeroEkkusu Oct 9, 2025
6766196
feat: unlimited extensions
ZeroEkkusu Oct 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
API_KEY=
INFURA_KEY=
POLYGONSCAN_API_KEY=
TATARA_TOKEN=
KATANA_TOKEN=
ETHERSCAN_API_KEY=
68 changes: 68 additions & 0 deletions .github/workflows/certora.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Certora - Verification

on:
pull_request:
branches:
- staging

env:
FOUNDRY_PROFILE: ci
CONFIGS: |
certora/confs/GenericVaultBridgeToken.conf
certora/confs/GenericVaultBridgeToken.conf --verify GenericVaultBridgeToken:certora/specs/GenericVaultBridgeToken_invariants.spec --rule netCollectedYieldAccounted --rule netCollectedYieldLimited
certora/confs/GenericVaultBridgeToken.conf --verify GenericVaultBridgeToken:certora/specs/GenericVaultBridgeToken_invariants.spec --rule minimumReservePercentageLimit --rule reserveBacked
certora/confs/GenericVaultBridgeToken.conf --verify GenericVaultBridgeToken:certora/specs/GenericVaultBridgeToken_invariants.spec --rule vaultBridgeTokenSolvency --rule vaultBridgeTokenSolvency_simple
certora/confs/GenericVaultBridgeToken.conf --verify GenericVaultBridgeToken:certora/specs/GenericVaultBridgeToken_invariants.spec --rule assetsMoreThanSupply --rule noSupplyIfNoAssets
certora/confs/GenericVaultBridgeToken.conf --verify GenericVaultBridgeToken:certora/specs/GenericVaultBridgeToken_invariants.spec --rule zeroAllowanceOnAssets --rule zeroAllowanceOnShares
certora/confs/GenericVaultBridgeToken.conf --verify GenericVaultBridgeToken:certora/specs/GenericVaultBridgeToken_allowedChanges.spec
certora/confs/GenericVaultBridgeToken.conf --verify GenericVaultBridgeToken:certora/specs/GenericVaultBridgeToken_integrity.spec
certora/confs/GenericVaultBridgeToken.conf --verify GenericVaultBridgeToken:certora/specs/GVBTBalances.spec
certora/confs/GenericVaultBridgeToken.conf --verify GenericVaultBridgeToken:certora/specs/tokenMockBalances.spec
certora/confs/GenericNativeConverter.conf
certora/confs/base/MigrationManager.conf --rule onMsgReceived_doesntAlwaysRevert
jobs:
check:
runs-on: ubuntu-latest
permissions:
contents: read
statuses: write
pull-requests: write
id-token: write
steps:
- name: checkout repository
uses: actions/checkout@v4
with:
submodules: recursive

- name: install foundry
uses: foundry-rs/foundry-toolchain@v1

- name: install bun
uses: oven-sh/setup-bun@v2

- name: bun install
run: |
forge soldeer install
bun install || true

- name: setup bridge repo
run: |
git clone https://github.com/0xPolygonHermez/zkevm-contracts.git
cd zkevm-contracts/
git checkout v10.1.0-rc.1
npm install

- name: Certora munge
run: ./certora/scripts/munge.sh

- name: run configs
uses: Certora/certora-run-action@v2
with:
cli-release: beta
configurations: ${{ env.CONFIGS }}
solc-versions: 0.8.28 0.8.29
solc-remove-version-prefix: "0."
job-name: "Verified Rules"
certora-key: ${{ secrets.CERTORAKEY }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
11 changes: 4 additions & 7 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,13 @@ jobs:
run: |
forge --version

- name: Run Forge fmt
run: |
forge fmt --check
id: fmt
# - name: Run Forge fmt
# run: |
# forge fmt --check
# id: fmt

- name: Run Forge build
run: |
forge --version
forge soldeer install
forge build --sizes
id: build
Expand All @@ -54,6 +53,4 @@ jobs:
run: |
npm install
forge test --no-match-contract "Generic" -vvv
env:
TATARA_TOKEN: ${{ secrets.TATARA_TOKEN }}
id: test
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,9 @@ docs/
coverage
lcov.info

.DS_Store
.DS_Store

# certora
.certora_internal/
zkevm-contracts/
emv-*/*
27 changes: 0 additions & 27 deletions LICENSE-OPEN-LICENSE

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ SPDX-License-Identifier: LicenseRef-PolygonLabs-Source-Available
SOURCE AVAILABLE LICENSE

Licensor: PT Services DMCC
Licensed Work: VaultBridge
Licensed Work: Vault Bridge
The Licensed Work is Copyright (c) 2025 PT Services DMCC

Permitted Use: The Licensor hereby grants you the right to copy, modify, create derivative
Expand Down
128 changes: 86 additions & 42 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,104 +1,148 @@
<div align="center">

# Vault Bridge

**[⛓️ Deployments](#deployments)**
**&nbsp;&nbsp; [📙 Documentation](#documentation)**
**&nbsp;&nbsp; [🧭 Website](https://www.agglayer.dev/agglayer-vaultbridge)**
**&nbsp;&nbsp; [🐈‍⬛ GitHub](https://github.com/agglayer/vault-bridge/)**
**&nbsp;&nbsp; [🦙 DefiLllama](https://defillama.com/protocol/vault-bridge)**

</div>

<br>

> [!IMPORTANT]
> You are viewing a development version of the codebase.

# Vault Bridge
## Contents

Vault Bridge Token is the core of the Vault Bridge protocol. Built from the ground up to be reusable, it offers full Vault Bridge functionality out of the box, allowing you to create vbTokens in just a few lines of code.
- [Contents](#contents)
- [Overview](#overview)
- [TL;DR](#tldr)
- [Vault Bridge Token](#vault-bridge-token)
- [Migration Manager](#migration-manager)
- [Custom Token](#custom-token)
- [Native Converter](#native-converter)
- [Get Started](#get-started)
- [Documentation](#documentation)
- [Deployments](#deployments)
- [Usage](#usage)
- [License](#license)

<br>

## Overview

The Vault Bridge protocol is comprised of:
Vault Bridge enables chains and apps to generate native yield on TVL by putting bridged assets to work.

The protocol is comprised of:

- Layer X (the main network)
- [Vault Bridge Token](#vault-bridge-token-)
- [Migration Manager (singleton)](#migration-manager-singleton-)
- Layer Y (other networks)
- [Custom Token](#custom-token-)
- [Native Converter](#native-converter-)
- One Primary Chain
- [Vault Bridge Token](#vault-bridge-token)
- [Migration Manager](#migration-manager)
- Many Secondary Chains
- [Custom Token](#custom-token)
- [Native Converter](#native-converter)

### Vault Bridge Token [↗](src/VaultBridgeToken.sol)
### TL;DR

A Vault Bridge Token is an
Select assets are bridged from Primary Chain to Secondary Chain. These assets are deposited into Vault Bridge Token contract on Primary Chain, which mints and bridges vbToken to Secondary Chain. Deposited assets are used to generate yield on Primary Chain, while bridged vbTokens are used in DeFi on Secondary Chain. Generated yield gets distributed to chains and apps participating in the revenue sharing program.

Native Converter contract can be deployed on Secondary Chain to enable acquisition of vbToken on Secondary Chain without having to bridge from Primary Chain. Accumulated backing in Native Converter on Secondary Chain gets migrated to Primary Chain and deposited into Vault Bridge Token contract.

### Vault Bridge Token

A Vault Bridge Token is:

- [ERC-20](https://eips.ethereum.org/EIPS/eip-20) token
- [ERC-4626](https://eips.ethereum.org/EIPS/eip-4626) vault
- [LxLy Bridge](https://github.com/0xPolygonHermez/zkevm-contracts) extension
- [Agglayer Bridge](https://github.com/agglayer/agglayer-contracts) extension

enabling bridging of select assets, such as WBTC, WETH, USDT, USDC, and USDS, while producing yield.
Assets in high demand with available yield strategies, such as WETH and USDC, can get their versions of vbTokens. The underlying asset is deposited into Vault Bridge Token contract, and vbToken is minted in a 1:1 ratio. The same can be withdrawn by burning vbToken. Vault Bridge Token contract doubles a pseudo bridge, so vbToken can be minted and bridged, or claimed and redeemed, in a single call. Deposited underlying assets are put into an external, ERC-4626 compatible vault ("yield vault") where they generate yield. Yield is distributed to chains and apps that participate in the revenue sharing program. Vault Bridge Token contracts also includes functionality that enables minting of vbToken directly on Secondary Chain via Native Converter, with backing migration to Primary Chain via Migration Manager.

### Migration Manager (singleton) [↗](src/MigrationManager.sol)
### Migration Manager

The Migration Manager is a
The Migration Manager is:

- [Vault Bridge Token](#vault-bridge-token-) dependency
- [Vault Bridge Token](#vault-bridge-token) dependency

handling migration of backing from Native Converters.
vbTokens can be minted directly on Secondary Chain. In order for an underlying asset that backs vbToken minted on Secondary Chain to be deposited in Vault Bridge Token contract on Primary Chain, backing is migrated to Primary Chain via Native Converter and Migration Manager. Migration Manager completes migrations by interacting with Vault Bridge Token contract. All vbTokens share the same Migration Manager contract.

### Custom Token [↗](src/CustomToken.sol)
### Custom Token

A Custom Token is an
A Custom Token is:

- [ERC-20](https://eips.ethereum.org/EIPS/eip-20) token

an upgrade for [LxLy Bridge](https://github.com/0xPolygonHermez/zkevm-contracts)'s generic wrapped token.
Bridged vbToken can be upgraded to Custom Token on Secondary Chain. This enables custom behavior, such as bridged vbETH to integrate WETH9 interface, replacing WETH on Secondary Chain.

### Native Converter

A Native Converter is:

### Native Converter [↗](src/NativeConverter.sol)
- [Vault Bridge Token](#vault-bridge-token) extension
- [Agglayer Bridge](https://github.com/agglayer/agglayer-contracts) extension

A Native Converter is a
Native Converter can be deployed on Secondary Chain to enable minting of vbToken directly on Secondary Chain by converting the bridged underlying asset, in a 1:1 ratio. The same can be deconverted to by burning bridged vbToken. Accumulated backing in Native Converter on Secondary Chain can be migrated to Primary Chain to be deposited into Vault Bridge Token contract via Migration Manger. For this reason, liqudity for deconverting to the bridged underlying token on Secondary Chain is guaranteed only up to a certain percentage. Native Converter doubles a bridge extension, so vbToken can be deconverted and bridged in a single call.

- pseudo [ERC-4626](https://eips.ethereum.org/EIPS/eip-4626) vault
- [LxLy Bridge](https://github.com/0xPolygonHermez/zkevm-contracts) extension
## Get Started

allowing conversion to, and deconversion of, Custom Token, as well as migration of backing to Vault Bridge Token.
Getting started should be easy as Vault Bridge Token contracts follow the ERC-4626 interface. Variants of the standard ERC-4626 functions include `depositAndBridge` and `claimAndRedeem`. Please see [Documentation](#documentation) for more information.

If your chain is part of Agglayer, you can start using the official vbTokens immediately. Please note that you will get vbToken when bridging, not the underlying token, therefore activity should be incentivized in vbToken. You must participate in the revenue sharing program in order to receive yield. [Contact our team](https://info.polygon.technology/vaultbridge-intake-form) if interested in revenue sharing.

If your chain is not part of Agglayer, you can start using the official vbTokens immediately. Please note that you will need to use a third-party bridge to bridge vbTokens to your chain, and Native Converter functionality will not be supported. You must participate in the revenue sharing program in order to receive yield. [Contact our team](https://info.polygon.technology/vaultbridge-intake-form) if interested in revenue sharing.

Full support for non-Agglayer chains, third-party bridges, as well as non-EVM chains is coming soon. [Contact our team](https://info.polygon.technology/vaultbridge-intake-form) to register interest.

## Documentation

Please see NatSpec documentation inside of the files.
- [General Documentation](https://docs.agglayer.dev/)
- [Technical Reference](https://agglayer.github.io/vault-bridge/)
- [Source Code](https://github.com/agglayer/vault-bridge/tree/main/src): In addition to General Documentation and Technical Reference, the Source Code is 100% documented and you are encouraged to take a look.
- Pay attention to the following bookmarks: `@note CAUTION!`, `@note IMPORTANT:`, `@note (ATTENTION)`.

## Deployments

Please see `@note` documentation for important information.
See [`broadcast/README.md`](https://github.com/agglayer/vault-bridge/blob/main/broadcast/README.md).

## Usage

#### Prerequisite
Clone:

```
foundryup
git clone [email protected]:agglayer/vault-bridge.git
```

#### Install
Install:

```
forge soldeer install & npm install
```

#### Build
Build:

```
forge build
```

#### Test
Test:

```
forge test
```

#### Coverage
Coverage:

```
forge coverage --ir-minimum --report lcov && genhtml -o coverage lcov.info
```

## License

This codebase is licensed under a dual license model:
This codebase is licensed under Source Available License.

1. Open Attribution License – this license is similar to the MIT License and permits broad
use (including for commercial purposes), but is only available when the codebase is used in
connection with cryptoasset deposits into the Agglayer’s unified LxLy bridge. See: [LICENSE-OPEN-LICENSE](<LICENSE-OPEN-LICENSE>)
2. Source Available License – for all other use cases, including cryptoasset deposits into
elsewhere than the Agglayer’s unified LxLy bridge, you may use the codebase under the Source
Available License. See: [LICENSE-SOURCE-AVAILABLE-LICENSE](<LICENSE-SOURCE-AVAILABLE-LICENSE>)
See [`LICENSE-SOURCE-AVAILABLE`](https://github.com/agglayer/vault-bridge/blob/main/LICENSE-SOURCE-AVAILABLE).

Your use of this software constitutes acceptance of these license terms. If you are unsure whether
your use qualifies under the Open Attribution license, please contact: [email protected]
Your use of this software constitutes acceptance of these license terms.
Loading