Skip to content

Commit

Permalink
Add fixes from Spearbit review + Recon invariant tests (#2) (#389)
Browse files Browse the repository at this point in the history
* Rewrite UE-2

* fix: actor

* chore: cleanup

* feat: new library

* feat: virtual for ERC7540 tests

* feat: initial progress towards reusable Centrifuge ERC7540 implementation that is also non state impactinf

* feat: progress on ERC7540

* feat: progress on E_3

* fix: compilation

* feat: ERC7540 with reverts halfway done

* feat: all properties to stateless

* feat: admin trophy?

* chore: compilation

* chore: notes

* fix: override unused properties

* chore: cleanup

* fix: toggle back ERC7540

* chore: cleanup

* chore: trophies

* feat: merged delta handling

* chore: brought back ERC7540

* chore: ported out erc7540 logs

* feat: initial debug

* feat: triaged and flagged findings in legit

* feat: property 10

* chore: fmt

* chore: fmt

* feat: initial work on Global-1 and 2

* fix: woops

* feat: ignore ack findings

* fix: incorrect clamp

* fix: linear clamp on remaining orders for decrease

* chore: skip erc7540

* chore: untoggle ERC7540

* feat: admin mistake example

* refactor: make ERC7540 public

* chore: debugging scratchpad

* chore: rename

* feat: more debug

* feat: E_4 broken review

* fix: medusa default sender

* chore: triaage

* feat: broken E_4 second

* chore: notes

* chore: links

* Cleanpu

* chore: debug

* feat: canary 1e6

* fix: properties look ok

* chore: run link

* feat: decimals clamp

* fix: decimals **

* temp: hardcoded decimals

* chore: undo hardcoded decimals

* Round up reduction of maxMint

* feat: extra

* chore: readme

* feat: make ERC7540 Reusable

* chore: docs

* chore: comments

* Add new claim cancel methods

* feat: limit property

* fix: investments

* fix: removed trusted forwarders

* Add properties

* Fix new cancel methods

* Fix properties

* fix: investments

* fix: check for proofs only if > 1

* feat: progress on properties

* feat: recover and dispute recovery

* fix: remove canary

* chore: triage

* fix: calldata = cannot debug

* fix: naming

* fix: traige

* chore: comment

* chore: debug is broken

* fix: clamp to one main sender

* fix: message clamping fixed

* feat: SWE

* chore: debug 15

* fix: compilation and trusted forwarder

* Debug aggregator issues

* Fix properties

* Update

* Round consistently

* Fix max changes

* Cleanup

* Remove file methods

* Check

* Fix

* Fix global 6

* Fix e1 and e2

* More precies clamping

* Clean up

* Fix some tests

* Fix

* Disable property 10

* Disable erc7540-10, add rounding error to erc7540-4, block deposit>maxDeposit

* Format

* Cleanup

* feat: echidna settings

* Dont authTransferFrom to escrow

* Clean up tranche functions

* More cleanup

* Fix

* Fix

* fix: typo

* chore: note on TODO

* Cleanup

* Upgrade solidity

* Fix test compilation

* Fix compilation

* Fix

* Fix gateway

* Fix handlers

* Disable transient opcodes

* Fix setup

* Fix rely

* Update readme

* Fix missing decrease

* Rename

* Clean up existing tests

* Cleanup more old code

* Simplify 7540 properties

* Fix rounding in deposit/redeem

* Remove unnecessary log

* Add scope doc

* Fix forced authTransferFrom

* Rename

* Move transfer check to vault

* Fix max checks

* Fix tests

* Adapt property 9

* Re-enable transient storage

* Re-enable cancun

* Update scope

* Allow claiming 0

* Add if statements

* Rename and move

* Fix echidna in ci

* Add forge build to echidna commands

* Remove old invariant tests

* Fix interface name

* Basic investment mgr docs

* Clarify

* chore: Change the way initial ward is set

* chore: Gas optimization by caching array length in array iteration (#14)

* chore: Gas optimization by caching array length in array iteration

* chore: Rename variable

* chore: Fix formating

* fix: Remove unnecessary inheritance that is breaking compilation

* chore:(finding-21) Make stricter check when parsing batch messages (#18)

* chore:(finding-14) Replace _initiator() with msg.sender (#17)

* chore:(finding-14) Replace _initiator() with msg.sender

* chore: Remove completely _initiator()

* chore:(finding-3) Rename balances state variable to reflect the metadata it cont… (#11)

* chore: Rename balances state variable to reflect the metadata it contains in its bits

* chore: Change balance book-keeping for the tranch token

* chore: Fix format issues

* chore: Renaming field and removing unnecessary code

* chore: One more renaming

* chore: More improvements

* chore: Fix liniting

* chore: Fix weird formatting that appears on save

* fix: Gateway.estimate had mismatched local variables (#23)

* chore:(finding-24) Safely cast uint256 to uint8 (#19)

* chore:(finding-24) Safely cast uint256 to uint8

* Fix linting issues

* chore: Add unit tests for MathLib.toUint8()

* chore:(finding-19) Add a view method to allow user to see if they can execute their deposit requests (#16)

* chore:(finding 19) Add a view method to allow user to see if they can execute their deposit requests

* rename parameter

* chore: Rename function

* chore:(finding-2) Remove unnecessary interface declaration (#12)

* chore: Remove unnecessary itnerface declaration

* chore: Clean up all *Like interface definitions and usages

* chore: Add missing documentation

* chore: Change wording

* chorel: Fix linting

* fix: findings #8, #27, #38, #49, #53, #56, #65, #66, #68 (#24)

* Uses variable name tranches is confusing #56

* updateRestriction could try to call non existing hook #53

* No vault level emit for triggerRedeemRequest #49

* Slot name could lead to collisions #68

* Unnecessary typecast in concat #66

* Comment in fulfillDepositRequest() seems incorrect #38

* Could use safeTransferETH() #27

* Very low number of minimal decimals #8

* byAdapter => perAdapter #56

* Fix interface #56

* Add comment

* Assets can get stuck in TransferProxy #77 (#27)

* Fix transfer proxy

* Add tests

* Add recovery to proxy

* Finding 64, 57 (#29)

* consolidate licenses

* Use constant instead of 8

* fix:(finding-40) Calling PoolManager.transferTrancheTokens call directly tranche burn without checking for any restrictions (#26)

* fix: Calling PoolManager.transferTrancheTokens call directly tranche.burn without checking for any restrictions

* chore: Add hook for each tranche burn

* Remove unnecessary check

* Fix linting issue

* Remove unnecessary method

* chore:(finding-33) User wrapped token amount if it is possible when calling openLockDepositRequest, otherwise use underlying asset if possible to wrap it (#22)

* (#34) Check that vault is valid on `getVault()` (#25)

* Check vault exists in getVault

* add more tests

* Format

---------



* Updating set of active adapters does not always clear votes #78 (#32)

* Updating set of active adapters does not always clear votes #78

* Cleanup

* Format

* chore:(finding-70) Improve documentation (#34)

* Fixing findings #45 , #48, #76 (#33)

* chore:(finding-45) Optimize by caching values

* chore: Remove unnecesary variable

* fix:(finding-76) Cannot request deposit cancelation if you don't have any pending deposit requests

* chore:(finding-48) Add documentation for fulfillment param in fulfillCancelRequestDeposit

* chore: Improve documentation

* chore: Move documentation

* fix:(finding-76) Allow calling cancelReedemRequest only if there are any pending redeem requets

* Limit owner in `requestDeposit/Redeem`, extend` open()` docs (#36)

* Limit owner, add comment

* Update tests

* Add validate controller method

* Fix comments

* Update

* Enable/disable

* isOpen => isEnabled

* chore:(finding-10) Replace hardcoded value (#35)

* chore:(finding-10) Replace hardcoded value

* Replace comment

* chore:(finding-83) Replace non-transferable with non-fungible

* Require price to be set (#31)

* Require price to be set

* Fix test

* chore: Remove redundant check (#38)

* Remove unused import (#39)

* chore: Optimize gateway (#42)

* Fixes #4, #85, #88 (#40)

* Swap order

* Swap deadline/nonce

* manager => investmentManager

* Any tokens left in CentrifugeRouter can be used by anyone#4

* Undo

* Initializing with 0 isn't necessary if the variable is also defined in the for loop#88

* fix: Unnecessary authorization (#43)

* fix: Unnecessary authorization

* Fix deployment test

* Improve testing the deployer script

* Fixes set operator, #37, #95, #97, #98, #100, #103, #104, #108, #109, #111 (#45)

* Block setting self as operator

* Use _maxDeposit

* Remove encodePacked

* Simplify transfer check

* Remove unused method

* Clean up checkERC20Transfer

* Update src/token/RestrictionManager.sol



* Update src/token/RestrictionManager.sol



* Cleanup

* Update src/token/RestrictionManager.sol



* ExecuteMessage event

* Unsued imports

* 95

* Several more fixes

* Comment

* Format

* Add test for max message id

* Consistent storage

* Fix test

* Remove vault asset id

* Test authorize operator

* Endorsed operator test

* Disable crytic foundry tests for now

* Revert gas service change

* Execute message event

* Change getVault

* Add isPoolActive

* Move address zero check

* Clarify gateway events

* Change deployTranche

* Update InvestmentState order

---------



* feat: Introduce toppers mapping which are the only allowed addresses … (#46)

* feat: Introduce toppers mapping which are the only allowed addresses to call topUp().

* chore: Rename variable

* chore: Remove unused code

* chore: Change state vars order

* chore: Change wording in revert message

* fix: Test

* chore: Remove unused import in TransferProxyFactory (#53)

* chore: Rename transferAsset to avoid confusion (#50)

* fix: Missing filing in deployment script (#47)

* chore: Make Auth abstract (#52)

* chore: Cache reading array length (#56)

* chore: Improve comment (#51)

* chore: Improve comment

* fix: Comment format

* CREATE2 transfer proxy (#55)

* Use create2 for transfer proxy

* Format

* Add file test

* Format

* Change escrow salt

* Format

* chore: Use plain bit shift operations (#57)

* chore: Add shiftRight to BitmapsLib

* chore: Use plain bit shifting operations

* Add methods to predict CREATE2 addresses (#58)

* Fix #5, #47 (#59)

* Fix #5

* Fix #47

* Add test check (#60)

* Formt

---------



* Fix comment (#61)

* Make transfer proxy factory deployment deterministic

* fix: Initial changes to make fork tests verifiable again

* chore: Make deployment verifiable via fork

* Improve fork tests

* Update base config

* Adapt for base

* Add arbitrum

* Add ethereum mainnet

* Add celo

* Add a few more sanity checks

* Update README

* Update README.md

* Update README.md

* Compress pdfs

* Add test for determinism

* Comments

* Error messages

* Remove restriction manager verification

* Disable determinism tests

* Format

* Clean up invariant test code

---------

Co-authored-by: Alex The Entreprenerd <[email protected]>
Co-authored-by: John <[email protected]>
Co-authored-by: Adam Stox <[email protected]>
  • Loading branch information
4 people authored Aug 5, 2024
1 parent e582b5b commit 7b367a6
Show file tree
Hide file tree
Showing 121 changed files with 5,334 additions and 1,566 deletions.
42 changes: 21 additions & 21 deletions .github/workflows/ci-fork.yml
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
# name: "CI Fork"
name: "CI Fork"

# on:
# push:
# branches:
# - main
# schedule:
# - cron: "0 13 * * 1"
on:
push:
branches:
- main
schedule:
- cron: "0 13 * * 1"

# env:
# FOUNDRY_PROFILE: ci
env:
FOUNDRY_PROFILE: ci

# jobs:
# test:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v3
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

# - name: Install Foundry
# uses: foundry-rs/foundry-toolchain@v1
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1

# - name: Run tests
# run: forge test --match-path "test/fork/Fork.t.sol"
# env:
# FOUNDRY_PROFILE: ci
# FORK_TESTS: true
- name: Run tests
run: forge test --match-path "test/fork/Fork.t.sol"
env:
FOUNDRY_PROFILE: ci
FORK_TESTS: true
50 changes: 38 additions & 12 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ env:
FOUNDRY_PROFILE: ci

jobs:
test-unit:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
Expand All @@ -24,19 +24,45 @@ jobs:
FOUNDRY_PROFILE: ci
FORK_TESTS: false

# test-invariant:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v3
echidna-property:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1

- name: Compile contracts
run: |
forge build --build-info
- name: Run Echidna
uses: crytic/echidna-action@v2
with:
files: .
contract: CryticTester
config: echidna-property.yaml
test-limit: 100000

echidna-assertion:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

# - name: Install Foundry
# uses: foundry-rs/foundry-toolchain@v1
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1

# - name: Run tests
# run: forge test --match-path "test/invariant/**/*.sol"
# env:
# FOUNDRY_PROFILE: ci
# FORK_TESTS: false
- name: Compile contracts
run: |
forge build --build-info
- name: Run Echidna
uses: crytic/echidna-action@v2
with:
files: .
contract: CryticTester
config: echidna-assertion.yaml
test-limit: 100000

lint:
runs-on: ubuntu-latest
Expand Down
11 changes: 10 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,13 @@ broadcast/
.env.*
lcov.info
docs
.vscode
.vscode

## Recon
/medusa
/crytic-export
/echidna

## Recon Separate Configs
/medusa-core
/medusa-aggregator
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
[submodule "lib/forge-std"]
path = lib/forge-std
url = https://github.com/foundry-rs/forge-std
[submodule "lib/chimera"]
path = lib/chimera
url = https://github.com/Recon-Fuzz/chimera
28 changes: 22 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
[foundry]: https://getfoundry.sh
[foundry-badge]: https://img.shields.io/badge/Built%20with-Foundry-FFDB1C.svg

Liquidity Pools enable seamless deployment of Centrifuge RWA pools on any EVM-compatible blockchain.
Liquidity Pools enable seamless deployment of Centrifuge pools on any EVM-compatible blockchain. The multi-chain protocol was designed specifically to tokenize RWAs as ERC20 tokens featuring customizable and gas-efficient permissioning. Investors deposit and redeem onchain using the ERC7540 asynchronous tokenized vault standard. Issuers can plug-and-play custom investment features through ERC20 wrapper support and accept multiple stablecoins using ERC7575. The smart contracts are immutable, rigorously audited, and controlled by onchain governance.

## How it works
![Architecture](https://cloudflare-ipfs.com/ipfs/QmW7N8beQ6TF5efwqkMndouxGub2J1jqsEhv5gXDbyqA2K)
Expand Down Expand Up @@ -33,13 +33,29 @@ To run all tests locally:
forge test
```

To run the invariant tests using [echidna](https://github.com/crytic/echidna):
```sh
echidna . --contract CryticTester --config echidna-property.yaml
echidna . --contract CryticTester --config echidna-assertion.yaml
```

To run the invariant tests using [medusa](https://github.com/crytic/medusa/):
```sh
medusa fuzz --config medusa-core.json
medusa fuzz --config medusa-aggregator.json
```

## Audit reports

| Auditor | Report link |
|---|---|
| Code4rena | [`September 2023 - Code4rena Report`](https://code4rena.com/reports/2023-09-centrifuge) |
| SRLabs | [`September 2023 - SRLabs Report`](https://github.com/centrifuge/liquidity-pools/blob/main/audits/2023-09-SRLabs.pdf) |
| Spearbit | [`October 2023 - Cantina Managed Report`](https://github.com/centrifuge/liquidity-pools/blob/main/audits/2023-10-Spearbit-Cantina-Managed.pdf) |
| Auditor | Date | Engagement | Report |
| --- | --- |:------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| [xmxanuel](https://x.com/xmxanuel) | July 2023 | Security review | Internal |
| [Code4rena](https://code4rena.com/) | Sep 2023 | Competitive audit | [`Report`](https://code4rena.com/reports/2023-09-centrifuge) |
| [SRLabs](https://www.srlabs.de/) | Sep 2023 | Security review | [`Report`](https://github.com/centrifuge/liquidity-pools/blob/main/audits/2023-09-SRLabs.pdf) |
| [Cantina](https://cantina.xyz/) | Oct 2023 | Security review | [`Report`](https://github.com/centrifuge/liquidity-pools/blob/main/audits/2023-10-Spearbit-Cantina-Managed.pdf) |
| [Alex the Entreprenerd](https://x.com/gallodasballo) | Mar - Apr 2024 | Invariant test development | [`Part 1`](https://getrecon.substack.com/p/lessons-learned-from-fuzzing-centrifuge) |
| [xmxanuel](https://x.com/xmxanuel) | May - June 2024 | Security review | Internal |
| [Spearbit](https://spearbit.com/) | July 2024 | Security review | |

## License
This codebase is licensed under [GNU Lesser General Public License v3.0](https://github.com/centrifuge/liquidity-pools/blob/main/LICENSE).
Binary file modified audits/2023-09-SRLabs.pdf
Binary file not shown.
Binary file modified audits/2023-10-Spearbit-Cantina-Managed.pdf
Binary file not shown.
53 changes: 25 additions & 28 deletions deployments/mainnet/arbitrum-mainnet.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,47 +2,44 @@
"chainId": 42161,
"rpcUrl": "https://arbitrum-mainnet.infura.io/v3/ed5e0e19bcbc427cbf8f661736d44516",
"config": {
"commitHash": "333cc86042891d25c72e9a66dc9068652c0e02e0",
"commitHash": "27827821e933f574d9bd87581e9b3221c58a9b3d",
"deployer": "0x7270b20603FbB3dF0921381670fbd62b9991aDa4",
"admin": "0xa36caE0ACd40C6BbA61014282f6AE51c7807A433",
"adminSigners": [
"0x71d9f8CFdcCEF71B59DD81AB387e523E2834F2b8",
"0xEf270f8877Aa1875fc13e78dcA31f3235210368f",
"0xd55114BfE98a2ca16202Aa741BeE571765292616",
"0x6E72DD4D5CFCc274a8712A72C9dB9FE1d5A7eB6b",
"0x88b991A2A8d3C5Ac808D3471e1784C6165d29612",
"0xE9441B34f71659cCA2bfE90d98ee0e57D9CAD28F",
"0x2F1724cc5005F376411747dFE24fb7412f5955B1",
"0x46a71eEf8DbcFcbAC7A0e8D5d6B634A649e61fb8",
"0x9eDec77dd2651Ce062ab17e941347018AD4eAEA9",
"0x518B822e679Cc5162AD2C644760767D42d2fb80b",
"0xc4576CE4603552c5BeAa056c449b0795D48fcf92",
"0x790c2c860DDC993f3da92B19cB440cF8338C59a6"
],
"pausers": [
"0x9eDec77dd2651Ce062ab17e941347018AD4eAEA9",
"0x790c2c860DDC993f3da92B19cB440cF8338C59a6",
"0x2F1724cc5005F376411747dFE24fb7412f5955B1",
"0x3cE760441A4E9BD2c40A69d39A472052Ac14e0D9"
"0xc4576CE4603552c5BeAa056c449b0795D48fcf92"
],
"adapter": {
"name": "Axelar",
"axelarGateway": "0xe432150cce91c13a887f7D836923d5597adD8E31"
"axelarGateway": "0xe432150cce91c13a887f7D836923d5597adD8E31",
"axelarGasService": "0x2d5d7d31F671F86C782533cc367F14109a082712"
},
"deploymentSalt": "e416b338a274162320c79445ae6604141d1cb08275eb27011b69f002dc094d05",
"deploymentSalt": "0x7270b20603fbb3df0921381670fbd62b9991ada4b17953a73f70fdff36730018",
"etherscanUrl": "https://api.arbiscan.io/api/"
},
"contracts": {
"root": "0x498016d30Cd5f0db50d7ACE329C07313a0420502",
"investmentManager": "0xA85CB660D5dc25b6d9E5fd291ad5E5034B1AAeD7",
"poolManager": "0x8841717f4A0552505375A478e25b18EA35976067",
"gateway": "0xfD3791491999fb58F002eB2fA16e30290806D0Da",
"escrow": "0xd595E1483c507E74E2E6A3dE8e7D08d8f6F74936",
"userEscrow": "0x9fc3A3bcEdc1CaB14EfC1B7ef45dFBDd3d17c9d7",
"adapter": "0x2559998026796Ca6fd057f3aa66F2d6ecdEd9028",
"trancheFactory": "0x2d60cd1527073419423B14666E2D43C1Cf28B152",
"liquidityPoolFactory": "0x77F48b2c942E6f3ac2232568d560e423c441386a",
"restrictionManagerFactory": "0xf4D7F6919eF0B495a2551F7299324961F29aE7aC",
"pauseAdmin": "0x634F036fE66579E901c7bA34e33DF422E37A0037",
"delayedAdmin": "0xFE364bEdef1707DD4f2DF358da2C1908824Cc4AC",
"messages": "0x811f7bd79d9cf392f6a60c8e8f570c96769d92c3"
"escrow": "0x0000000005F458Fd6ba9EEb5f365D83b7dA913dD",
"routerEscrow": "0x0F1b890fC6774Ef9b14e99de16302E24A6e7B4F7",
"root": "0x0C1fDfd6a1331a875EA013F3897fc8a76ada5DfC",
"erc7540VaultFactory": "0x6f9dba3D3A3ab083BcA60Ef82784cf12A6eC24b8",
"restrictionManager": "0x4737C3f62Cc265e786b280153fC666cEA2fBc0c0",
"trancheFactory": "0xFa072fB96F737bdBCEa28c921d43c34d3a4Dbb6C",
"investmentManager": "0xE79f06573d6aF1B66166A926483ba00924285d20",
"poolManager": "0x91808B5E2F6d7483D41A681034D7c9DbB64B9E29",
"transferProxyFactory": "0xbe55eBC29344a26550E07EF59aeF791fA3b2A817",
"gasService": "0x3C9C09C4Cfda9D2c35142AAea706E9FC9EA28F27",
"gateway": "0x7829E5ca4286Df66e9F58160544097dB517a3B8c",
"centrifugeRouter": "0x2F445BA946044C5F508a63eEaF7EAb673c69a1F4",
"guardian": "0x09ab10a9c3E6Eac1d18270a2322B6113F4C7f5E8",
"adapter": "0x85bAFcAdeA202258e3512FFBC3E2c9eE6Ad56365"
},
"deploymentBlock": 161607032,
"isTestnet": false
"isTestnet": false,
"isDeterministicallyDeployed": true
}
55 changes: 26 additions & 29 deletions deployments/mainnet/base-mainnet.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,47 +2,44 @@
"chainId": 8453,
"rpcUrl": "https://mainnet.base.org",
"config": {
"commitHash": "2f07d3129172af3ee47463c03a253b4a8b24d824",
"commitHash": "27827821e933f574d9bd87581e9b3221c58a9b3d",
"deployer": "0x7270b20603FbB3dF0921381670fbd62b9991aDa4",
"admin": "0x8b83962fB9dB346a20c95D98d4E312f17f4C0d9b",
"adminSigners": [
"0x71d9f8CFdcCEF71B59DD81AB387e523E2834F2b8",
"0xEf270f8877Aa1875fc13e78dcA31f3235210368f",
"0xd55114BfE98a2ca16202Aa741BeE571765292616",
"0x6E72DD4D5CFCc274a8712A72C9dB9FE1d5A7eB6b",
"0x88b991A2A8d3C5Ac808D3471e1784C6165d29612",
"0xE9441B34f71659cCA2bfE90d98ee0e57D9CAD28F",
"0x2F1724cc5005F376411747dFE24fb7412f5955B1",
"0x46a71eEf8DbcFcbAC7A0e8D5d6B634A649e61fb8",
"0x9eDec77dd2651Ce062ab17e941347018AD4eAEA9",
"0x518B822e679Cc5162AD2C644760767D42d2fb80b",
"0xc4576CE4603552c5BeAa056c449b0795D48fcf92",
"0x790c2c860DDC993f3da92B19cB440cF8338C59a6"
],
"pausers": [
"0x9eDec77dd2651Ce062ab17e941347018AD4eAEA9",
"0x790c2c860DDC993f3da92B19cB440cF8338C59a6",
"0x2F1724cc5005F376411747dFE24fb7412f5955B1",
"0x3cE760441A4E9BD2c40A69d39A472052Ac14e0D9"
"0xc4576CE4603552c5BeAa056c449b0795D48fcf92"
],
"adapter": {
"name": "Axelar",
"axelarGateway": "0xe432150cce91c13a887f7D836923d5597adD8E31"
"axelarGateway": "0xe432150cce91c13a887f7D836923d5597adD8E31",
"axelarGasService": "0x2d5d7d31F671F86C782533cc367F14109a082712"
},
"deploymentSalt": "e416b338a274162320c79445ae6604141d1cb08275eb27011b69f002dc094d05",
"deploymentSalt": "0x7270b20603fbb3df0921381670fbd62b9991ada4b17953a73f70fdff36730018",
"etherscanUrl": "https://api.basescan.org/api/"
},
"contracts": {
"root": "0x498016d30Cd5f0db50d7ACE329C07313a0420502",
"investmentManager": "0xbBF0AB988691dB1892ADaF7F0eF560Ca4c6DD73A",
"poolManager": "0x78E9e622A57f70F1E0Ec652A4931E4e278e58142",
"gateway": "0x634F036fE66579E901c7bA34e33DF422E37A0037",
"escrow": "0xd595E1483c507E74E2E6A3dE8e7D08d8f6F74936",
"userEscrow": "0x9fc3A3bcEdc1CaB14EfC1B7ef45dFBDd3d17c9d7",
"adapter": "0x8174D5f12Ce682459864D8C081f9635012Ab51c2",
"trancheFactory": "0x2d60cd1527073419423B14666E2D43C1Cf28B152",
"liquidityPoolFactory": "0x77F48b2c942E6f3ac2232568d560e423c441386a",
"restrictionManagerFactory": "0xf4D7F6919eF0B495a2551F7299324961F29aE7aC",
"pauseAdmin": "0xce86472007Ea37a5d0208f8C1559A37530c8067C",
"delayedAdmin": "0x2559998026796Ca6fd057f3aa66F2d6ecdEd9028",
"messages": "0xAf9F6Ac63C057EB7F59b6Fae2c3d447191b58Ea5"
"escrow": "0x0000000005F458Fd6ba9EEb5f365D83b7dA913dD",
"routerEscrow": "0x0F1b890fC6774Ef9b14e99de16302E24A6e7B4F7",
"root": "0x0C1fDfd6a1331a875EA013F3897fc8a76ada5DfC",
"erc7540VaultFactory": "0xcaD01F5A7eE9ba09A1aFDb9Dcaa58cE024E4462C",
"restrictionManager": "0x4737C3f62Cc265e786b280153fC666cEA2fBc0c0",
"trancheFactory": "0xFa072fB96F737bdBCEa28c921d43c34d3a4Dbb6C",
"investmentManager": "0x36b87b860857e6a6d4c2D24be11dc9b230F00f03",
"poolManager": "0x7f192F34499DdB2bE06c4754CFf2a21c4B056994",
"transferProxyFactory": "0xbe55eBC29344a26550E07EF59aeF791fA3b2A817",
"gasService": "0x32043A41F4be198C4f6590312F7A7b91624Cab57",
"gateway": "0x3423D288F2C04eB072eBB973F8c8B9b73cAa4361",
"centrifugeRouter": "0xF35501E7fC4a076E744dbAFA883CED74CCF5009d",
"guardian": "0x427A1ce127b1775e4Cbd4F58ad468B9F832eA7e9",
"adapter": "0x30e34260b895CAE34A1cfB185271628c53311cF3"
},
"deploymentBlock": 8053054,
"isTestnet": false
"deploymentBlock": 17854405,
"isTestnet": false,
"isDeterministicallyDeployed": true
}
Loading

0 comments on commit 7b367a6

Please sign in to comment.