Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@ MAINNET_ETHERSCAN_API_KEY="MAINNET_ETHERSCAN_API_KEY"
POLYGON_ETHERSCAN_API_KEY="POLYGON_ETHERSCAN_API_KEY"
ARBITRUM_ETHERSCAN_API_KEY="ARBITRUM_ETHERSCAN_API_KEY"
FANTOM_ETHERSCAN_API_KEY="FANTOM_ETHERSCAN_API_KEY"
OPTIMISM_ETHERSCAN_API_KEY="OPTIMISM_ETHERSCAN_API_KEY"
BASE_ETHERSCAN_API_KEY="BASE_ETHERSCAN_API_KEY"
SONIC_ETHERSCAN_API_KEY="SONIC_ETHERSCAN_API_KEY"
124 changes: 124 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,130 @@ The Parallel Core own the following contracts:

## Deployment Addresses

### Mainnets

#### Ethereum

| Contract | Explore |
| --------------------- | --------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0x94Ea8800444017695345156319e96bdB1E355F7a](https://etherscan.io/address/0x94Ea8800444017695345156319e96bdB1E355F7a) |

#### Polygon

| Contract | Explore |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| ParallelAccessManager | [0x7Df74BBB6F82eC1BCB1562a30ef5Bf5c326e2811](https://polygonscan.com/address/0x7Df74BBB6F82eC1BCB1562a30ef5Bf5c326e2811) |

#### Fantom

| Contract | Explore |
| --------------------- | ------------------------------------------ |
| ParallelAccessManager | 0x1FF33CF1607Ca109F23A3Fb9Ec5193037eB26306 |

#### Base

| Contract | Explore |
| --------------------- | --------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0x0e4e7Ca9D7b1e6293D0713EFEfB4BCA010DeBF46](https://basescan.org/address/0x0e4e7Ca9D7b1e6293D0713EFEfB4BCA010DeBF46) |

#### Optimism

| Contract | Explore |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0x0e4e7Ca9D7b1e6293D0713EFEfB4BCA010DeBF46](https://optimistic.etherscan.io/address/0x0e4e7Ca9D7b1e6293D0713EFEfB4BCA010DeBF46) |

#### Arbitrum

| Contract | Explore |
| --------------------- | -------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0x0e4e7Ca9D7b1e6293D0713EFEfB4BCA010DeBF46](https://arbiscan.io/address/0x0e4e7Ca9D7b1e6293D0713EFEfB4BCA010DeBF46) |

#### Sonic

| Contract | Explore |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0x8eFb3DED78FbaEF2a4eFe01E01BBD911E4094b78](https://sonicscan.org/address/0x8eFb3DED78FbaEF2a4eFe01E01BBD911E4094b78) |

#### Sei

| Contract | Explore |
| --------------------- | --------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0xfD28f108e95f4D41daAE9dbfFf707D677985998E](https://seitrace.com/address/0xfD28f108e95f4D41daAE9dbfFf707D677985998E) |

#### Avalanche

| Contract | Explore |
| --------------------- | --------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0xfD28f108e95f4D41daAE9dbfFf707D677985998E](https://snowtrace.io/address/0xfD28f108e95f4D41daAE9dbfFf707D677985998E) |

#### BSC

| Contract | Explore |
| --------------------- | -------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0xfD28f108e95f4D41daAE9dbfFf707D677985998E](https://bscscan.com/address/0xfD28f108e95f4D41daAE9dbfFf707D677985998E) |

#### Berachain

| Contract | Explore |
| --------------------- | --------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0xfD28f108e95f4D41daAE9dbfFf707D677985998E](https://berascan.com/address/0xfD28f108e95f4D41daAE9dbfFf707D677985998E) |

#### Scroll

| Contract | Explore |
| --------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0xfD28f108e95f4D41daAE9dbfFf707D677985998E](https://scrollscan.com/address/0xfD28f108e95f4D41daAE9dbfFf707D677985998E) |

#### Mantle

| Contract | Explore |
| --------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0xfD28f108e95f4D41daAE9dbfFf707D677985998E](https://mantlescan.xyz/address/0xfD28f108e95f4D41daAE9dbfFf707D677985998E) |

#### Gnosis

| Contract | Explore |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0xfD28f108e95f4D41daAE9dbfFf707D677985998E](https://gnosisscan.io/address/0xfD28f108e95f4D41daAE9dbfFf707D677985998E) |

#### Unichain

| Contract | Explore |
| --------------------- | -------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0xfD28f108e95f4D41daAE9dbfFf707D677985998E](https://uniscan.xyz/address/0xfD28f108e95f4D41daAE9dbfFf707D677985998E) |

#### Ink

| Contract | Explore |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0xfD28f108e95f4D41daAE9dbfFf707D677985998E](https://explorer.inkonchain.com/address/0xfD28f108e95f4D41daAE9dbfFf707D677985998E) |

#### HyperEvm

| Contract | Explore |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0xfD28f108e95f4D41daAE9dbfFf707D677985998E](http://www.hyperscan.com/address/0xfD28f108e95f4D41daAE9dbfFf707D677985998E) |

#### Tac

| Contract | Explore |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0xfD28f108e95f4D41daAE9dbfFf707D677985998E](http://explorer.tac.build/address/0xfD28f108e95f4D41daAE9dbfFf707D677985998E) |

### Testnets

#### Sepolia

| Contract | Explore |
| --------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0xfD28f108e95f4D41daAE9dbfFf707D677985998E](https://sepolia.etherscan.io/address/0xfD28f108e95f4D41daAE9dbfFf707D677985998E) |

#### Arbitrum Sepolia

| Contract | Explore |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| ParallelAccessManager | [0xfD28f108e95f4D41daAE9dbfFf707D677985998E](https://sepolia.arbiscan.io/address/0xfD28f108e95f4D41daAE9dbfFf707D677985998E) |

## Security

### Assumptions
Expand Down
Binary file modified bun.lockb
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;

import { AccessManager as OZAccessManager } from "@openzeppelin/contracts/access/manager/AccessManager.sol";
import { AccessManager } from "@openzeppelin/contracts/access/manager/AccessManager.sol";

import { Roles } from "contracts/libraries/RolesLib.sol";

/// @title AccessManager
/// @title ParallelAccessManager
/// @author Cooper Labs
/// @custom:contact security@cooperlabs.xyz
/// @notice Contract inheriting from OpenZeppelin's AccessManager contract.
contract AccessManager is OZAccessManager {
constructor(address owner) OZAccessManager(owner) { }
contract ParallelAccessManager is AccessManager {
constructor(address owner) AccessManager(owner) { }
}
6 changes: 6 additions & 0 deletions contracts/libraries/RolesLib.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,14 @@ library Roles {
uint64 constant GOVERNOR_ROLE_TIMELOCK = 11;
uint64 constant GUARDIAN_ROLE = 20;
uint64 constant GUARDIAN_ROLE_TIMELOCK = 21;
uint64 constant KEEPER_ROLE = 30;
uint64 constant KEEPER_ROLE_TIMELOCK = 31;
uint64 constant EURp_MINTER_ROLE = 100;
uint64 constant EURp_MINTER_ROLE_TIMELOCK = 105;
uint64 constant USDp_MINTER_ROLE = 110;
uint64 constant USDp_MINTER_ROLE_TIMELOCK = 115;
uint64 constant ETHp_MINTER_ROLE = 120;
uint64 constant ETHp_MINTER_ROLE_TIMELOCK = 125;
uint64 constant BTCp_MINTER_ROLE = 130;
uint64 constant BTCp_MINTER_ROLE_TIMELOCK = 135;
}
31 changes: 31 additions & 0 deletions contracts/oracles/SiloVaultsMorphoAdapter.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;

import { IERC4626 } from "@openzeppelin/contracts/interfaces/IERC4626.sol";

/// @title SiloVaultsMorphoAdapter
/// @author Cooper Labs
/// @custom:contact security@cooperlabs.xyz
/// @notice Adapter of Silo Vaults for MorphoChainlinkOracleV2.
/// @dev Silo Vaults v2 is a ERC4626 that do not have an initial 1:1 shares-to-assets rate with underlying markets but
/// 1e18 shares = 1 underlying asset.
/// @dev This adapter is used to allow MorphoChainlinkOracleV2 to get the assets value of Silo Vaults v2 rounded down.
contract SiloVaultsMorphoAdapter {
uint256 public immutable SILO_DECIMALS_OFFSET;

IERC4626 public immutable siloVault;

constructor(IERC4626 _vault, uint256 _siloDecimalsOffset) {
require(address(_vault) != address(0), "Invalid vault address");
require(_siloDecimalsOffset > 0, "Invalid silo decimals offset");
siloVault = _vault;
SILO_DECIMALS_OFFSET = _siloDecimalsOffset;
}

/// @notice Convert shares to assets and apply the silo decimals offset.
/// @param shares The number of shares to convert in 1e18.
/// @return The number of assets in 1e18 from silo vault.
function convertToAssets(uint256 shares) external view returns (uint256) {
return siloVault.convertToAssets(shares * 10 ** SILO_DECIMALS_OFFSET);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import assert from "assert";

import { type DeployFunction } from "hardhat-deploy/types";

const contractName = "AccessManager";
const contractName = "ParallelAccessManager";

const deploy: DeployFunction = async (hre) => {
const { getNamedAccounts, deployments } = hre;
Expand All @@ -16,9 +16,7 @@ const deploy: DeployFunction = async (hre) => {

const contract = await deploy(contractName, {
from: deployer,
args: [],
log: true,
skipIfAlreadyDeployed: false,
args: [deployer],
});

console.log(`Deployed contract: ${contractName}, network: ${hre.network.name}, address: ${contract.address}`);
Expand Down
29 changes: 29 additions & 0 deletions deploy/SiloVaultsMorphoAdapter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import assert from "assert";

import { type DeployFunction } from "hardhat-deploy/types";

const contractName = "SiloVaultsMorphoAdapter";

const siloVault = "0x92ebF5A1fB4061B45222a6d76ACCF4698bdE4b95";
const siloDecimalsOffset = 18;

const deploy: DeployFunction = async (hre) => {
const { getNamedAccounts, deployments, network } = hre;

const { deploy } = deployments;
const { deployer } = await getNamedAccounts();

assert(deployer, "Missing deployer account");

console.log(`Deploying contract: ${contractName}, network: ${network.name}, deployer: ${deployer}`);

const contract = await deploy(contractName, {
from: deployer,
args: [siloVault, siloDecimalsOffset],
});

console.log(`Deployed contract: ${contractName}, network: ${network.name}, address: ${contract.address}`);
};

deploy.tags = [contractName];
export default deploy;
1 change: 1 addition & 0 deletions deployments/arbiSepolia/.chainId
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
421614
Loading
Loading