编译器
0.8.24+commit.e11b9ed9
文件 1 的 31:DCSStructs.sol
pragma solidity ^0.8.24;
enum DCSOptionType {
BuyLow,
SellHigh
}
enum SettlementStatus {
NotAuctioned,
Auctioned,
InitialPremiumPaid,
AwaitingSettlement,
Settled,
Defaulted
}
struct DCSProductCreationParams {
uint128 maxUnderlyingAmountLimit;
uint128 minDepositAmount;
uint128 minWithdrawalAmount;
address quoteAssetAddress;
address baseAssetAddress;
DCSOptionType dcsOptionType;
uint8 daysToStartLateFees;
uint8 daysToStartAuctionDefault;
uint8 daysToStartSettlementDefault;
uint16 lateFeeBps;
uint16 strikeBarrierBps;
uint40 tenorInSeconds;
uint8 disputePeriodInHours;
uint8 disputeGraceDelayInHours;
string name;
string tradeWinnerNftImage;
}
struct DCSProduct {
uint128 maxUnderlyingAmountLimit;
uint128 minDepositAmount;
uint128 minWithdrawalAmount;
uint128 sumVaultUnderlyingAmounts;
address quoteAssetAddress;
uint40 tenorInSeconds;
uint16 lateFeeBps;
uint8 daysToStartLateFees;
address baseAssetAddress;
uint16 strikeBarrierBps;
uint8 daysToStartAuctionDefault;
uint8 daysToStartSettlementDefault;
uint8 disputePeriodInHours;
DCSOptionType dcsOptionType;
bool isDepositQueueOpen;
address[] vaults;
uint8 disputeGraceDelayInHours;
}
struct DCSVault {
uint128 initialSpotPrice;
uint128 strikePrice;
uint128 totalYield;
uint16 aprBps;
SettlementStatus settlementStatus;
bool isPayoffInDepositAsset;
}
文件 2 的 31:Errors.sol
pragma solidity ^0.8.24;
library Errors {
string public constant NOT_CEGA_ENTRY = "1";
string public constant NOT_CEGA_ADMIN = "2";
string public constant NOT_TRADER_ADMIN = "3";
string public constant NOT_TRADE_WINNER = "4";
string public constant INVALID_VAULT = "5";
string public constant INVALID_VAULT_STATUS = "6";
string public constant VAULT_IN_ZOMBIE_STATE = "7";
string public constant TRADE_DEFAULTED = "8";
string public constant INVALID_SETTLEMENT_STATUS = "9";
string public constant VAULT_IN_DISPUTE = "10";
string public constant VAULT_NOT_IN_DISPUTE = "11";
string public constant OUTSIDE_DISPUTE_PERIOD = "12";
string public constant TRADE_HAS_NO_WINNER = "13";
string public constant TRADE_NOT_CONVERTED = "14";
string public constant TRADE_CONVERTED = "15";
string public constant INVALID_TRADE_END_DATE = "16";
string public constant INVALID_PRICE = "17";
string public constant VALUE_TOO_SMALL = "18";
string public constant VALUE_TOO_LARGE = "19";
string public constant VALUE_IS_ZERO = "20";
string public constant MAX_DEPOSIT_LIMIT_REACHED = "21";
string public constant DEPOSIT_QUEUE_NOT_OPEN = "22";
string public constant INVALID_QUOTE_OR_BASE_ASSETS = "23";
string public constant INVALID_MIN_DEPOSIT_AMOUNT = "24";
string public constant INVALID_MIN_WITHDRAWAL_AMOUNT = "25";
string public constant INVALID_STRIKE_PRICE = "26";
string public constant TRANSFER_FAILED = "27";
string public constant NOT_AVAILABLE_DATA_SOURCE = "28";
string public constant NO_PRICE_AVAILABLE = "29";
string public constant NO_PRICE_FEED_SET = "30";
string public constant INCOMPATIBLE_PRICE = "31";
string public constant NOT_CEGA_ENTRY_OR_REDEPOSIT_MANAGER = "32";
string public constant NO_PROXY_FOR_REDEPOSIT = "33";
string public constant NOT_TRADE_WINNER_OR_TRADER_ADMIN = "34";
string public constant TRADE_NOT_STARTED = "35";
string public constant NOT_AVAILABLE_SWAP_TYPE = "36";
string public constant NOT_AVAILABLE_SWAP_PATH = "37";
string public constant PROTOCOL_PAUSED = "38";
string public constant WRONG_STRATEGY = "39";
string public constant INVALID_ARRAY_LENGTH = "40";
string public constant UNKNOWN_BARRIER_TYPE = "41";
string public constant NOT_BOND_OPTION = "42";
string public constant UNAUTHORIZED_BOND_RECEIVER = "43";
string public constant REMAINING_VALUE_TOO_SMALL = "44";
string public constant VALUE_IN_DISPUTE_GRACE_DELAY = "45";
}
文件 3 的 31:FCNStructs.sol
pragma solidity ^0.8.24;
import { IOracleEntry } from "../../oracle-entry/interfaces/IOracleEntry.sol";
struct FCNProductCreationParams {
uint128 minDepositAmount;
uint128 minWithdrawalAmount;
uint128 maxUnderlyingAmountLimit;
address underlyingAsset;
uint64 leverage;
uint40 tenorInSeconds;
uint8 daysToStartLateFees;
uint8 daysToStartAuctionDefault;
uint8 daysToStartSettlementDefault;
uint8 disputePeriodInHours;
uint8 disputeGraceDelayInHours;
uint16 lateFeeBps;
string name;
string tradeWinnerNftImage;
bool isBondOption;
uint24 observationIntervalInSeconds;
FCNOptionBarrier[] optionBarriers;
}
struct FCNProduct {
uint128 minDepositAmount;
uint128 minWithdrawalAmount;
uint128 maxUnderlyingAmountLimit;
uint128 sumVaultUnderlyingAmounts;
address underlyingAsset;
uint64 leverage;
uint40 tenorInSeconds;
uint8 daysToStartLateFees;
uint8 daysToStartAuctionDefault;
uint8 daysToStartSettlementDefault;
uint8 disputePeriodInHours;
uint8 disputeGraceDelayInHours;
uint16 lateFeeBps;
bool isDepositQueueOpen;
bool isBondOption;
uint24 observationIntervalInSeconds;
FCNOptionBarrier[] optionBarriers;
address[] vaults;
}
struct FCNVaultCreationParams {
string tokenName;
string tokenSymbol;
uint16 yieldFeeBps;
uint16 managementFeeBps;
}
struct FCNVaultBarrierData {
uint128 initialSpotPrice;
IOracleEntry.DataSource dataSource;
}
struct FCNVault {
uint128 notional;
uint128 totalYield;
uint16 aprBps;
bool isKnockedIn;
uint16 observationsDone;
uint96 buffer;
FCNVaultBarrierData[] barrierData;
}
struct FCNOptionBarrier {
uint16 barrierBps;
FCNOptionBarrierType barrierType;
address asset;
uint8 exponent;
}
enum FCNOptionBarrierType {
None,
KnockIn
}
enum FCNVaultStatus {
DepositsClosed,
DepositsOpen,
PreAuction,
Auctioned,
Traded,
AwaitingSettlement,
Settled,
FeesCollected,
WithdrawalQueueProcessed,
Zombie
}
文件 4 的 31:ICommonEvents.sol
pragma solidity ^0.8.24;
import { VaultStatus, OldVaultStatus } from "../../../Structs.sol";
interface ICommonEvents {
event DepositQueued(
uint32 indexed productId,
address sender,
address receiver,
uint128 amount
);
event DepositRemoved(
uint32 indexed productId,
address depositor,
uint128 amount
);
event DepositProcessed(
address indexed vaultAddress,
address receiver,
uint128 amount
);
event WithdrawalQueued(
address indexed vaultAddress,
uint256 sharesAmount,
address owner,
uint32 nextProductId,
bool withProxy
);
event WithdrawalProcessed(
address indexed vaultAddress,
uint256 sharesAmount,
address owner,
uint32 nextProductId
);
event CommonVaultStatusUpdated(
address indexed vaultAddress,
VaultStatus vaultStatus
);
event VaultDefaultUpdated(address indexed vaultAddress, bool value);
event OraclePriceOverriden(
address indexed vaultAddress,
address indexed asset,
uint256 timestamp,
uint256 newPrice
);
event ManagementFeeUpdated(address indexed vaultAddress, uint16 value);
event YieldFeeUpdated(address indexed vaultAddress, uint16 value);
event ProductNameUpdated(uint32 indexed productId, string name);
event TradeWinnerNftImageUpdated(uint32 indexed productId, string imageUrl);
event VaultStatusUpdated(
address indexed vaultAddress,
OldVaultStatus vaultStatus
);
}
文件 5 的 31:IConfigurationEntry.sol
pragma solidity ^0.8.24;
interface IConfigurationEntry {
function setManagementFee(address vaultAddress, uint16 value) external;
function setYieldFee(address vaultAddress, uint16 value) external;
function setProductName(uint32 productId, string calldata name) external;
function setTradeWinnerNftImage(
uint32 productId,
string calldata imageUrl
) external;
function setIsDefaulted(address vaultAddress, bool newState) external;
}
文件 6 的 31:IDCSBulkActionsEntry.sol
pragma solidity ^0.8.24;
import { Withdrawer, VaultStatus } from "../../../Structs.sol";
import { DCSProductCreationParams, DCSProduct } from "../DCSStructs.sol";
import {
IOracleEntry
} from "../../../oracle-entry/interfaces/IOracleEntry.sol";
interface IDCSBulkActionsEntry {
function dcsBulkStartTrades(
address[] calldata vaultAddresses
) external payable;
function dcsBulkProcessDepositQueues(
address[] calldata vaultAddresses,
uint256 maxProcessCount
) external;
function dcsBulkProcessWithdrawalQueues(
address[] calldata vaultAddresses,
uint256 maxProcessCount
) external;
function dcsBulkRolloverVaults(address[] calldata vaultAddresses) external;
function dcsBulkCheckTradesExpiry(
address[] calldata vaultAddresses
) external;
function dcsBulkCheckAuctionDefault(
address[] calldata vaultAddresses
) external;
function dcsBulkCheckSettlementDefault(
address[] calldata vaultAddresses
) external;
function dcsBulkSettleVaults(
address[] calldata vaultAddresses
) external payable;
function dcsBulkCollectFees(address[] calldata vaultAddresses) external;
}
文件 7 的 31:IDCSConfigurationEntry.sol
pragma solidity ^0.8.24;
interface IDCSConfigurationEntry {
function dcsSetLateFeeBps(uint16 lateFeeBps, uint32 productId) external;
function dcsSetMinDepositAmount(
uint128 minDepositAmount,
uint32 productId
) external;
function dcsSetMinWithdrawalAmount(
uint128 minWithdrawalAmount,
uint32 productId
) external;
function dcsSetIsDepositQueueOpen(
bool isDepositQueueOpen,
uint32 productId
) external;
function dcsSetDaysToStartLateFees(
uint32 productId,
uint8 daysToStartLateFees
) external;
function dcsSetDaysToStartAuctionDefault(
uint32 productId,
uint8 daysToStartAuctionDefault
) external;
function dcsSetDaysToStartSettlementDefault(
uint32 productId,
uint8 daysToStartSettlementDefault
) external;
function dcsSetMaxUnderlyingAmount(
uint128 maxUnderlyingAmountLimit,
uint32 productId
) external;
function dcsSetDisputePeriodInHours(
uint32 productId,
uint8 disputePeriodInHours
) external;
function dcsSetDisputeGraceDelayInHours(
uint32 productId,
uint8 disputeGraceDelayInHours
) external;
}
文件 8 的 31:IDCSEntry.sol
pragma solidity ^0.8.24;
import { IDCSEvents } from "./IDCSEvents.sol";
import { IDCSProductEntry } from "./IDCSProductEntry.sol";
import { IDCSVaultEntry } from "./IDCSVaultEntry.sol";
import { IDCSConfigurationEntry } from "./IDCSConfigurationEntry.sol";
import { IDCSBulkActionsEntry } from "./IDCSBulkActionsEntry.sol";
import { IDCSViewEntry } from "./IDCSViewEntry.sol";
import {
IProductViewEntry
} from "../../../common/interfaces/IProductViewEntry.sol";
import {
IVaultViewEntry
} from "../../../common/interfaces/IVaultViewEntry.sol";
import {
IVaultConfigurationEntry
} from "../../../common/interfaces/IVaultConfigurationEntry.sol";
import {
IConfigurationEntry
} from "../../../common/interfaces/IConfigurationEntry.sol";
import { IProductEntry } from "../../../common/interfaces/IProductEntry.sol";
interface IDCSEntry is
IDCSEvents,
IDCSProductEntry,
IDCSVaultEntry,
IDCSConfigurationEntry,
IDCSBulkActionsEntry,
IDCSViewEntry,
IProductViewEntry,
IVaultViewEntry,
IVaultConfigurationEntry,
IConfigurationEntry,
IProductEntry
{}
文件 9 的 31:IDCSEvents.sol
pragma solidity ^0.8.24;
import { ICommonEvents } from "../../common/interfaces/ICommonEvents.sol";
import { VaultCreationParams } from "../../../Structs.sol";
import { SettlementStatus } from "../DCSStructs.sol";
interface IDCSEvents is ICommonEvents {
event DCSProductCreated(uint32 indexed productId);
event DCSVaultFeesCollected(
address indexed vaultAddress,
uint128 totalFees,
uint128 managementFee,
uint128 yieldFee
);
event DCSVaultCreated(
uint32 indexed productId,
address indexed vaultAddress,
VaultCreationParams params
);
event DCSAuctionEnded(
address indexed vaultAddress,
address indexed auctionWinner,
uint40 tradeStartDate,
uint16 aprBps,
uint128 initialSpotPrice,
uint128 strikePrice
);
event DCSTradeStarted(
address indexed vaultAddress,
address auctionWinner,
uint128 notionalAmount,
uint128 yieldAmount
);
event DCSLateFeePaid(address indexed vaultAddress, uint128 feeAmount);
event DCSVaultSettled(
address indexed vaultAddress,
address settler,
uint128 depositedAmount,
uint128 withdrawnAmount
);
event DCSVaultRolledOver(address indexed vaultAddress);
event DCSIsPayoffInDepositAssetUpdated(
address indexed vaultAddress,
bool isPayoffInDepositAsset
);
event DCSLateFeeBpsUpdated(uint32 indexed productId, uint16 lateFeeBps);
event DCSMinDepositAmountUpdated(
uint32 indexed productId,
uint128 minDepositAmount
);
event DCSMinWithdrawalAmountUpdated(
uint32 indexed productId,
uint128 minWithdrawalAmount
);
event DCSIsDepositQueueOpenUpdated(
uint32 indexed productId,
bool isDepositQueueOpen
);
event DCSMaxUnderlyingAmountLimitUpdated(
uint32 indexed productId,
uint128 maxUnderlyingAmountLimit
);
event DCSManagementFeeUpdated(address indexed vaultAddress, uint16 value);
event DCSYieldFeeUpdated(address indexed vaultAddress, uint16 value);
event DCSDisputeSubmitted(address indexed vaultAddress);
event DCSDisputeProcessed(
address indexed vaultAddress,
bool isDisputeAccepted,
uint40 timestamp,
uint128 newPrice
);
event DCSDisputePeriodInHoursUpdated(
uint32 indexed productId,
uint8 disputePeriodInHours
);
event DCSDisputeGraceDelayInHoursUpdated(
uint32 indexed productId,
uint8 disputeGraceDelayInHours
);
event DCSDaysToStartLateFeesUpdated(
uint32 indexed productId,
uint8 daysToStartLateFees
);
event DCSDaysToStartAuctionDefaultUpdated(
uint32 indexed productId,
uint8 daysToStartAuctionDefault
);
event DCSDaysToStartSettlementDefaultUpdated(
uint32 indexed productId,
uint8 daysToStartSettlementDefault
);
event VaultCreated(
uint32 indexed productId,
address indexed vaultAddress,
string _tokenSymbol,
string _tokenName
);
event DCSSettlementStatusUpdated(
address indexed vaultAddress,
SettlementStatus settlementStatus
);
}
文件 10 的 31:IDCSProductEntry.sol
pragma solidity ^0.8.24;
import { Withdrawer, VaultStatus } from "../../../Structs.sol";
import { DCSProductCreationParams, DCSProduct } from "../DCSStructs.sol";
import {
IOracleEntry
} from "../../../oracle-entry/interfaces/IOracleEntry.sol";
interface IDCSProductEntry {
function dcsCreateProduct(
DCSProductCreationParams calldata creationParams
) external returns (uint32);
function dcsAddToDepositQueue(
uint32 productId,
uint128 amount,
address receiver
) external payable;
function dcsRemoveFromDepositQueue(
uint32 productId,
uint128 amount
) external;
function dcsProcessDepositQueue(
address vault,
uint256 maxProcessCount
) external;
function dcsAddToWithdrawalQueue(
address vault,
uint128 sharesAmount,
uint32 nextProductId
) external;
function dcsAddToWithdrawalQueueWithProxy(
address vaultAddress,
uint128 sharesAmount
) external;
function dcsProcessWithdrawalQueue(
address vault,
uint256 maxProcessCount
) external;
function dcsCheckTradeExpiry(address vaultAddress) external;
function dcsCheckSettlementDefault(address vaultAddress) external;
function dcsCollectVaultFees(address vaultAddress) external;
function dcsSubmitDispute(address vaultAddress) external;
function dcsProcessTradeDispute(
address vaultAddress,
uint128 newPrice
) external;
}
文件 11 的 31:IDCSVaultEntry.sol
pragma solidity ^0.8.24;
import { VaultStatus, Vault, VaultCreationParams } from "../../../Structs.sol";
import { DCSVault } from "../DCSStructs.sol";
import {
IOracleEntry
} from "../../../oracle-entry/interfaces/IOracleEntry.sol";
import { ISwapManager } from "../../../swaps/interfaces/ISwapManager.sol";
interface IDCSVaultEntry {
function dcsCreateVault(
uint32 _productId,
VaultCreationParams calldata creationParams
) external returns (address vaultAddress);
function dcsEndAuction(
address vaultAddress,
address _auctionWinner,
uint40 _tradeStartDate,
uint16 _aprBps,
IOracleEntry.DataSource dataSource
) external;
function dcsStartTrade(address vaultAddress) external payable;
function dcsSettleVault(address vaultAddress) external payable;
function dcsSwapAndSettleVault(
address vaultAddress,
ISwapManager.SwapProtocol swapProtocol,
ISwapManager.SwapData calldata swapData
) external payable;
function dcsRolloverVault(address vaultAddress) external;
function dcsSetIsPayoffInDepositAsset(
address vaultAddress,
bool newState
) external;
function dcsCheckAuctionDefault(address vaultAddress) external;
}
文件 12 的 31:IDCSViewEntry.sol
pragma solidity ^0.8.24;
import { Withdrawer } from "../../../Structs.sol";
import { DCSProduct, DCSVault } from "../DCSStructs.sol";
interface IDCSViewEntry {
function dcsGetProduct(
uint32 productId
) external view returns (DCSProduct memory);
function dcsGetProductDepositAsset(
uint32 productId
) external view returns (address);
function dcsCalculateVaultFinalPayoff(
address vaultAddress
) external view returns (uint128);
function dcsGetVault(
address vaultAddress
) external view returns (DCSVault memory);
function dcsCalculateLateFee(
address vaultAddress
) external view returns (uint128);
function dcsGetCouponPayment(
address vaultAddress
) external view returns (uint128);
function dcsGetVaultSettlementAsset(
address vaultAddress
) external view returns (address);
}
文件 13 的 31:IERC20.sol
pragma solidity ^0.8.0;
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
文件 14 的 31:IFCNBulkActionsEntry.sol
pragma solidity ^0.8.17;
interface IFCNBulkActionsEntry {
function fcnBulkProcessDepositQueues(
address[] calldata vaultAddresses,
uint256 maxProcessCount
) external;
function fcnBulkProcessWithdrawalQueues(
address[] calldata vaultAddresses,
uint256 maxProcessCount
) external;
function fcnBulkStartTrades(
address[] calldata vaultAddresses
) external payable;
function fcnBulkCheckBarriers(
address[] calldata vaultAddresses,
uint16 maxObservations
) external;
function fcnBulkCheckTradesExpiry(
address[] calldata vaultAddresses
) external;
function fcnBulkRepayBonds(
address[] calldata vaultAddresses,
uint128[] calldata amounts
) external payable;
function fcnBulkSettleVaults(
address[] calldata vaultAddresses
) external payable;
function fcnBulkCollectFees(address[] calldata vaultAddresses) external;
function fcnBulkRolloverVaults(address[] calldata vaultAddresses) external;
function fcnBulkCheckSettlementDefault(
address[] calldata vaultAddresses
) external;
function fcnBulkCheckAuctionDefault(
address[] calldata vaultAddresses
) external;
}
文件 15 的 31:IFCNConfigurationEntry.sol
pragma solidity ^0.8.24;
interface IFCNConfigurationEntry {
function fcnSetLateFeeBps(uint32 productId, uint16 lateFeeBps) external;
function fcnSetMinDepositAmount(
uint32 productId,
uint128 minDepositAmount
) external;
function fcnSetMinWithdrawalAmount(
uint32 productId,
uint128 minWithdrawalAmount
) external;
function fcnSetIsDepositQueueOpen(
uint32 productId,
bool isDepositQueueOpen
) external;
function fcnSetDaysToStartLateFees(
uint32 productId,
uint8 daysToStartLateFees
) external;
function fcnSetDaysToStartAuctionDefault(
uint32 productId,
uint8 daysToStartAuctionDefault
) external;
function fcnSetDaysToStartSettlementDefault(
uint32 productId,
uint8 daysToStartSettlementDefault
) external;
function fcnSetMaxUnderlyingAmountLimit(
uint32 productId,
uint128 maxUnderlyingAmountLimit
) external;
function fcnSetDisputePeriodInHours(
uint32 productId,
uint8 disputePeriodInHours
) external;
function fcnSetBondAllowList(address receiver, bool value) external;
function fcnSetDisputeGraceDelayInHours(
uint32 productId,
uint8 disputeGraceDelayInHours
) external;
}
文件 16 的 31:IFCNEntry.sol
pragma solidity ^0.8.24;
import { IFCNEvents } from "./IFCNEvents.sol";
import { IFCNConfigurationEntry } from "./IFCNConfigurationEntry.sol";
import { IFCNProductEntry } from "./IFCNProductEntry.sol";
import { IFCNVaultEntry } from "./IFCNVaultEntry.sol";
import { IFCNBulkActionsEntry } from "./IFCNBulkActionsEntry.sol";
import { IFCNViewEntry } from "./IFCNViewEntry.sol";
import {
IProductViewEntry
} from "../../../common/interfaces/IProductViewEntry.sol";
import {
IVaultViewEntry
} from "../../../common/interfaces/IVaultViewEntry.sol";
import {
IVaultConfigurationEntry
} from "../../../common/interfaces/IVaultConfigurationEntry.sol";
import {
IConfigurationEntry
} from "../../../common/interfaces/IConfigurationEntry.sol";
import { IProductEntry } from "../../../common/interfaces/IProductEntry.sol";
interface IFCNEntry is
IFCNEvents,
IFCNConfigurationEntry,
IFCNProductEntry,
IFCNVaultEntry,
IFCNViewEntry,
IFCNBulkActionsEntry,
IProductViewEntry,
IVaultViewEntry,
IVaultConfigurationEntry,
IConfigurationEntry,
IProductEntry
{}
文件 17 的 31:IFCNEvents.sol
pragma solidity ^0.8.24;
import { ICommonEvents } from "../../common/interfaces/ICommonEvents.sol";
import { FCNVaultCreationParams } from "../FCNStructs.sol";
interface IFCNEvents is ICommonEvents {
event FCNProductCreated(uint32 indexed productId);
event FCNVaultCreated(
uint32 indexed productId,
address indexed vaultAddress,
FCNVaultCreationParams creationParams
);
event FCNLateFeeBpsUpdated(uint32 indexed productId, uint16 lateFeeBps);
event FCNMinDepositAmountUpdated(
uint32 indexed productId,
uint128 minDepositAmount
);
event FCNMinWithdrawalAmountUpdated(
uint32 indexed productId,
uint128 minWithdrawalAmount
);
event FCNIsDepositQueueOpenUpdated(
uint32 indexed productId,
bool isDepositQueueOpen
);
event FCNMaxUnderlyingAmountLimitUpdated(
uint32 indexed productId,
uint128 maxUnderlyingAmountLimit
);
event FCNDisputePeriodInHoursUpdated(
uint32 indexed productId,
uint8 disputePeriodInHours
);
event FCNDisputeGraceDelayInHoursUpdated(
uint32 indexed productId,
uint8 disputeGraceDelayInHours
);
event FCNDaysToStartLateFeesUpdated(
uint32 indexed productId,
uint8 daysToStartLateFees
);
event FCNDaysToStartAuctionDefaultUpdated(
uint32 indexed productId,
uint8 daysToStartAuctionDefault
);
event FCNDaysToStartSettlementDefaultUpdated(
uint32 indexed productId,
uint8 daysToStartSettlementDefault
);
event FCNAuctionEnded(
address indexed vaultAddress,
address indexed auctionWinner,
uint40 tradeStartDate,
uint16 aprBps,
uint128[] initialSpotPrices
);
event FCNTradeStarted(
address indexed vaultAddress,
address auctionWinner,
uint128 notionalAmount,
uint128 yieldAmount
);
event FCNIsKnockedInUpdated(address indexed vaultAddress, bool isKnockedIn);
event FCNLateFeePaid(address indexed vaultAddress, uint128 feeAmount);
event FCNBondRepaid(address indexed vaultAddress, uint128 amount);
event FCNVaultRolledOver(address indexed vaultAddress);
event FCNBondAllowListUpdated(address indexed receiver, bool value);
event FCNVaultFeesCollected(
address indexed vaultAddress,
uint128 totalFees,
uint128 managementFee,
uint128 yieldFee
);
event FCNDisputeProcessed(
address indexed vaultAddress,
bool isDisputeAccepted,
uint8 barrierIndex,
uint40 timestamp,
uint128 newPrice
);
event FCNDisputeSubmitted(
address indexed vaultAddress,
uint8 barrierIndex,
uint40 timestamp
);
}
文件 18 的 31:IFCNProductEntry.sol
pragma solidity ^0.8.24;
import {
FCNProductCreationParams,
FCNVaultCreationParams
} from "../FCNStructs.sol";
interface IFCNProductEntry {
function fcnCreateProduct(
FCNProductCreationParams calldata creationParams
) external returns (uint32);
function fcnCreateVault(
uint32 productId,
FCNVaultCreationParams calldata creationParams
) external returns (address vaultAddress);
function fcnAddToDepositQueue(
uint32 productId,
uint128 amount,
address receiver
) external payable;
function fcnRemoveFromDepositQueue(
uint32 productId,
uint128 amount
) external;
function fcnProcessDepositQueue(
address vaultAddress,
uint256 maxProcessCount
) external;
function fcnAddToWithdrawalQueue(
address vaultAddress,
uint128 sharesAmount,
uint32 nextProductId
) external;
function fcnAddToWithdrawalQueueWithProxy(
address vaultAddress,
uint128 sharesAmount
) external;
function fcnProcessWithdrawalQueue(
address vaultAddress,
uint256 maxProcessCount
) external;
}
文件 19 的 31:IFCNVaultEntry.sol
pragma solidity ^0.8.24;
import {
IOracleEntry
} from "../../../oracle-entry/interfaces/IOracleEntry.sol";
interface IFCNVaultEntry {
function fcnEndAuction(
address vaultAddress,
address auctionWinner,
uint40 tradeStartDate,
uint16 aprBps,
IOracleEntry.DataSource[] calldata dataSources
) external;
function fcnStartTrade(address vaultAddress) external payable;
function fcnCheckBarriers(
address vaultAddress,
uint16 maxObservations
) external;
function fcnCheckTradeExpiry(address vaultAddress) external;
function fcnRepayBond(
address vaultAddress,
uint128 amount
) external payable;
function fcnSettleVault(address vaultAddress) external payable;
function fcnCollectVaultFees(address vaultAddress) external;
function fcnRolloverVault(address vaultAddress) external;
function fcnCheckSettlementDefault(address vaultAddress) external;
function fcnCheckAuctionDefault(address vaultAddress) external;
function fcnSubmitDispute(
address vaultAddress,
uint8 barrierIndex,
uint40 timestamp
) external;
function fcnProcessTradeDispute(
address vaultAddress,
uint8 barrierIndex,
uint40 timestamp,
uint128 newPrice
) external;
}
文件 20 的 31:IFCNViewEntry.sol
pragma solidity ^0.8.24;
import { FCNProduct, FCNVault } from "../FCNStructs.sol";
interface IFCNViewEntry {
function fcnGetProduct(
uint32 productId
) external view returns (FCNProduct memory);
function fcnGetProductDepositAsset(
uint32 productId
) external view returns (address);
function fcnGetVault(
address vaultAddress
) external view returns (FCNVault memory);
function fcnGetCouponPayment(
address vaultAddress
) external view returns (uint128);
function fcnCalculateVaultFinalPayoff(
address vaultAddress
) external view returns (uint128);
function fcnCalculateRepaidBond(
address vaultAddress
) external view returns (uint128);
function fcnCalculateVaultSettlementAmount(
address vaultAddress
) external view returns (uint128);
function fcnGetBondAllowList(address receiver) external view returns (bool);
function fcnCalculateLateFee(
address vaultAddress
) external view returns (uint128);
}
文件 21 的 31:IOracleEntry.sol
pragma solidity 0.8.24;
interface IOracleEntry {
enum DataSource {
None,
Pyth
}
event DataSourceAdapterSet(DataSource dataSource, address adapter);
function getSinglePrice(
address asset,
uint40 timestamp,
DataSource dataSource
) external view returns (uint128);
function getPrice(
address baseAsset,
address quoteAsset,
uint40 timestamp,
DataSource dataSource
) external view returns (uint128);
function setDataSourceAdapter(
DataSource dataSource,
address adapter
) external;
function getTargetDecimals() external pure returns (uint8);
}
文件 22 的 31:IProductEntry.sol
pragma solidity ^0.8.24;
interface IProductEntry {
function addToDepositQueue(
uint32 productId,
uint128 amount,
address receiver
) external payable;
function removeFromDepositQueue(uint32 productId, uint128 amount) external;
function addToWithdrawalQueue(
address vaultAddress,
uint128 sharesAmount,
uint32 nextProductId
) external;
function addToWithdrawalQueueWithProxy(
address vaultAddress,
uint128 sharesAmount
) external;
}
文件 23 的 31:IProductViewEntry.sol
import { ProductMetadata } from "../../Structs.sol";
pragma solidity ^0.8.24;
interface IProductViewEntry {
function getStrategyOfProduct(
uint32 productId
) external view returns (uint32);
function getLatestProductId() external view returns (uint32);
function getProductMetadata(
uint32 productId
) external view returns (ProductMetadata memory);
function getIsProtocolPaused() external view returns (bool);
function getDepositQueue(
uint32 productId
)
external
view
returns (
address[] memory depositors,
uint128[] memory amounts,
uint128 totalAmount
);
}
文件 24 的 31:ISwapManager.sol
pragma solidity 0.8.24;
interface ISwapManager {
enum SwapProtocol {
None,
UniswapV3
}
struct SwapData {
uint256 deadline;
uint128 minOutputAmount;
bytes extraData;
}
event SwapProtocolAdapterUpdated(
SwapProtocol swapProtocol,
address adapter
);
event Swapped(
address fromAsset,
address toAsset,
uint128 amount,
address receiver,
SwapProtocol swapProtocol,
SwapData swapData
);
function swapProtocolAdapters(
SwapProtocol swapProtocol
) external view returns (address);
function setSwapProtocolAdapter(
SwapProtocol swapProtocol,
address adapter
) external;
function swap(
address fromAsset,
address toAsset,
uint128 amount,
address receiver,
SwapProtocol swapProtocol,
SwapData calldata swapData
) external returns (uint128 outputAmount);
}
文件 25 的 31:IVaultConfigurationEntry.sol
pragma solidity ^0.8.24;
import { VaultStatus } from "../../Structs.sol";
interface IVaultConfigurationEntry {
function openVaultDeposits(address vaultAddress) external;
function bulkOpenVaultDeposits(address[] calldata vaultAddresses) external;
function setVaultStatus(
address vaultAddress,
VaultStatus _vaultStatus
) external;
function overrideOraclePrice(
address vaultAddress,
address asset,
uint40 timestamp,
uint128 newPrice
) external;
function setIsProtocolPaused(bool value) external;
}
文件 26 的 31:IVaultViewEntry.sol
pragma solidity ^0.8.24;
import { Vault, Withdrawer } from "../../Structs.sol";
interface IVaultViewEntry {
function getOraclePriceOverride(
address vaultAddress,
uint40 timestamp
) external view returns (uint128);
function getVault(
address vaultAddress
) external view returns (Vault memory);
function getVaultProductId(address vault) external view returns (uint32);
function getIsAuctionDefaulted(
address vaultAddress
) external view returns (bool);
function getDaysLate(address vaultAddress) external view returns (uint256);
function totalAssets(address vaultAddress) external view returns (uint256);
function convertToAssets(
address vaultAddress,
uint256 shares
) external view returns (uint128);
function convertToShares(
address vaultAddress,
uint128 assets
) external view returns (uint256);
function getWithdrawalQueue(
address vaultAddress
)
external
view
returns (
Withdrawer[] memory withdrawers,
uint256[] memory amounts,
bool[] memory withProxy,
uint256 totalAmount
);
function isWithdrawalPossible(
address vaultAddress
) external view returns (bool);
}
文件 27 的 31:IWrappingProxy.sol
pragma solidity 0.8.24;
interface IWrappingProxy {
function unwrapAndTransfer(address receiver, uint256 amount) external;
function wrapAndAddToDCSDepositQueue(
uint32 productId,
uint128 amount,
address receiver
) external;
function wrapAndAddToFCNDepositQueue(
uint32 productId,
uint128 amount,
address receiver
) external;
function wrapAndAddToDepositQueue(
uint32 productId,
uint128 amount,
address receiver
) external;
}
文件 28 的 31:IWstETH.sol
pragma solidity 0.8.24;
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
interface IWstETH is IERC20 {
function wrap(uint256 _stETHAmount) external returns (uint256);
function unwrap(uint256 _wstETHAmount) external returns (uint256);
}
文件 29 的 31:SafeCast.sol
pragma solidity ^0.8.0;
library SafeCast {
function toUint248(uint256 value) internal pure returns (uint248) {
require(value <= type(uint248).max, "SafeCast: value doesn't fit in 248 bits");
return uint248(value);
}
function toUint240(uint256 value) internal pure returns (uint240) {
require(value <= type(uint240).max, "SafeCast: value doesn't fit in 240 bits");
return uint240(value);
}
function toUint232(uint256 value) internal pure returns (uint232) {
require(value <= type(uint232).max, "SafeCast: value doesn't fit in 232 bits");
return uint232(value);
}
function toUint224(uint256 value) internal pure returns (uint224) {
require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
return uint224(value);
}
function toUint216(uint256 value) internal pure returns (uint216) {
require(value <= type(uint216).max, "SafeCast: value doesn't fit in 216 bits");
return uint216(value);
}
function toUint208(uint256 value) internal pure returns (uint208) {
require(value <= type(uint208).max, "SafeCast: value doesn't fit in 208 bits");
return uint208(value);
}
function toUint200(uint256 value) internal pure returns (uint200) {
require(value <= type(uint200).max, "SafeCast: value doesn't fit in 200 bits");
return uint200(value);
}
function toUint192(uint256 value) internal pure returns (uint192) {
require(value <= type(uint192).max, "SafeCast: value doesn't fit in 192 bits");
return uint192(value);
}
function toUint184(uint256 value) internal pure returns (uint184) {
require(value <= type(uint184).max, "SafeCast: value doesn't fit in 184 bits");
return uint184(value);
}
function toUint176(uint256 value) internal pure returns (uint176) {
require(value <= type(uint176).max, "SafeCast: value doesn't fit in 176 bits");
return uint176(value);
}
function toUint168(uint256 value) internal pure returns (uint168) {
require(value <= type(uint168).max, "SafeCast: value doesn't fit in 168 bits");
return uint168(value);
}
function toUint160(uint256 value) internal pure returns (uint160) {
require(value <= type(uint160).max, "SafeCast: value doesn't fit in 160 bits");
return uint160(value);
}
function toUint152(uint256 value) internal pure returns (uint152) {
require(value <= type(uint152).max, "SafeCast: value doesn't fit in 152 bits");
return uint152(value);
}
function toUint144(uint256 value) internal pure returns (uint144) {
require(value <= type(uint144).max, "SafeCast: value doesn't fit in 144 bits");
return uint144(value);
}
function toUint136(uint256 value) internal pure returns (uint136) {
require(value <= type(uint136).max, "SafeCast: value doesn't fit in 136 bits");
return uint136(value);
}
function toUint128(uint256 value) internal pure returns (uint128) {
require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
return uint128(value);
}
function toUint120(uint256 value) internal pure returns (uint120) {
require(value <= type(uint120).max, "SafeCast: value doesn't fit in 120 bits");
return uint120(value);
}
function toUint112(uint256 value) internal pure returns (uint112) {
require(value <= type(uint112).max, "SafeCast: value doesn't fit in 112 bits");
return uint112(value);
}
function toUint104(uint256 value) internal pure returns (uint104) {
require(value <= type(uint104).max, "SafeCast: value doesn't fit in 104 bits");
return uint104(value);
}
function toUint96(uint256 value) internal pure returns (uint96) {
require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
return uint96(value);
}
function toUint88(uint256 value) internal pure returns (uint88) {
require(value <= type(uint88).max, "SafeCast: value doesn't fit in 88 bits");
return uint88(value);
}
function toUint80(uint256 value) internal pure returns (uint80) {
require(value <= type(uint80).max, "SafeCast: value doesn't fit in 80 bits");
return uint80(value);
}
function toUint72(uint256 value) internal pure returns (uint72) {
require(value <= type(uint72).max, "SafeCast: value doesn't fit in 72 bits");
return uint72(value);
}
function toUint64(uint256 value) internal pure returns (uint64) {
require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
return uint64(value);
}
function toUint56(uint256 value) internal pure returns (uint56) {
require(value <= type(uint56).max, "SafeCast: value doesn't fit in 56 bits");
return uint56(value);
}
function toUint48(uint256 value) internal pure returns (uint48) {
require(value <= type(uint48).max, "SafeCast: value doesn't fit in 48 bits");
return uint48(value);
}
function toUint40(uint256 value) internal pure returns (uint40) {
require(value <= type(uint40).max, "SafeCast: value doesn't fit in 40 bits");
return uint40(value);
}
function toUint32(uint256 value) internal pure returns (uint32) {
require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
return uint32(value);
}
function toUint24(uint256 value) internal pure returns (uint24) {
require(value <= type(uint24).max, "SafeCast: value doesn't fit in 24 bits");
return uint24(value);
}
function toUint16(uint256 value) internal pure returns (uint16) {
require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
return uint16(value);
}
function toUint8(uint256 value) internal pure returns (uint8) {
require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
return uint8(value);
}
function toUint256(int256 value) internal pure returns (uint256) {
require(value >= 0, "SafeCast: value must be positive");
return uint256(value);
}
function toInt248(int256 value) internal pure returns (int248 downcasted) {
downcasted = int248(value);
require(downcasted == value, "SafeCast: value doesn't fit in 248 bits");
}
function toInt240(int256 value) internal pure returns (int240 downcasted) {
downcasted = int240(value);
require(downcasted == value, "SafeCast: value doesn't fit in 240 bits");
}
function toInt232(int256 value) internal pure returns (int232 downcasted) {
downcasted = int232(value);
require(downcasted == value, "SafeCast: value doesn't fit in 232 bits");
}
function toInt224(int256 value) internal pure returns (int224 downcasted) {
downcasted = int224(value);
require(downcasted == value, "SafeCast: value doesn't fit in 224 bits");
}
function toInt216(int256 value) internal pure returns (int216 downcasted) {
downcasted = int216(value);
require(downcasted == value, "SafeCast: value doesn't fit in 216 bits");
}
function toInt208(int256 value) internal pure returns (int208 downcasted) {
downcasted = int208(value);
require(downcasted == value, "SafeCast: value doesn't fit in 208 bits");
}
function toInt200(int256 value) internal pure returns (int200 downcasted) {
downcasted = int200(value);
require(downcasted == value, "SafeCast: value doesn't fit in 200 bits");
}
function toInt192(int256 value) internal pure returns (int192 downcasted) {
downcasted = int192(value);
require(downcasted == value, "SafeCast: value doesn't fit in 192 bits");
}
function toInt184(int256 value) internal pure returns (int184 downcasted) {
downcasted = int184(value);
require(downcasted == value, "SafeCast: value doesn't fit in 184 bits");
}
function toInt176(int256 value) internal pure returns (int176 downcasted) {
downcasted = int176(value);
require(downcasted == value, "SafeCast: value doesn't fit in 176 bits");
}
function toInt168(int256 value) internal pure returns (int168 downcasted) {
downcasted = int168(value);
require(downcasted == value, "SafeCast: value doesn't fit in 168 bits");
}
function toInt160(int256 value) internal pure returns (int160 downcasted) {
downcasted = int160(value);
require(downcasted == value, "SafeCast: value doesn't fit in 160 bits");
}
function toInt152(int256 value) internal pure returns (int152 downcasted) {
downcasted = int152(value);
require(downcasted == value, "SafeCast: value doesn't fit in 152 bits");
}
function toInt144(int256 value) internal pure returns (int144 downcasted) {
downcasted = int144(value);
require(downcasted == value, "SafeCast: value doesn't fit in 144 bits");
}
function toInt136(int256 value) internal pure returns (int136 downcasted) {
downcasted = int136(value);
require(downcasted == value, "SafeCast: value doesn't fit in 136 bits");
}
function toInt128(int256 value) internal pure returns (int128 downcasted) {
downcasted = int128(value);
require(downcasted == value, "SafeCast: value doesn't fit in 128 bits");
}
function toInt120(int256 value) internal pure returns (int120 downcasted) {
downcasted = int120(value);
require(downcasted == value, "SafeCast: value doesn't fit in 120 bits");
}
function toInt112(int256 value) internal pure returns (int112 downcasted) {
downcasted = int112(value);
require(downcasted == value, "SafeCast: value doesn't fit in 112 bits");
}
function toInt104(int256 value) internal pure returns (int104 downcasted) {
downcasted = int104(value);
require(downcasted == value, "SafeCast: value doesn't fit in 104 bits");
}
function toInt96(int256 value) internal pure returns (int96 downcasted) {
downcasted = int96(value);
require(downcasted == value, "SafeCast: value doesn't fit in 96 bits");
}
function toInt88(int256 value) internal pure returns (int88 downcasted) {
downcasted = int88(value);
require(downcasted == value, "SafeCast: value doesn't fit in 88 bits");
}
function toInt80(int256 value) internal pure returns (int80 downcasted) {
downcasted = int80(value);
require(downcasted == value, "SafeCast: value doesn't fit in 80 bits");
}
function toInt72(int256 value) internal pure returns (int72 downcasted) {
downcasted = int72(value);
require(downcasted == value, "SafeCast: value doesn't fit in 72 bits");
}
function toInt64(int256 value) internal pure returns (int64 downcasted) {
downcasted = int64(value);
require(downcasted == value, "SafeCast: value doesn't fit in 64 bits");
}
function toInt56(int256 value) internal pure returns (int56 downcasted) {
downcasted = int56(value);
require(downcasted == value, "SafeCast: value doesn't fit in 56 bits");
}
function toInt48(int256 value) internal pure returns (int48 downcasted) {
downcasted = int48(value);
require(downcasted == value, "SafeCast: value doesn't fit in 48 bits");
}
function toInt40(int256 value) internal pure returns (int40 downcasted) {
downcasted = int40(value);
require(downcasted == value, "SafeCast: value doesn't fit in 40 bits");
}
function toInt32(int256 value) internal pure returns (int32 downcasted) {
downcasted = int32(value);
require(downcasted == value, "SafeCast: value doesn't fit in 32 bits");
}
function toInt24(int256 value) internal pure returns (int24 downcasted) {
downcasted = int24(value);
require(downcasted == value, "SafeCast: value doesn't fit in 24 bits");
}
function toInt16(int256 value) internal pure returns (int16 downcasted) {
downcasted = int16(value);
require(downcasted == value, "SafeCast: value doesn't fit in 16 bits");
}
function toInt8(int256 value) internal pure returns (int8 downcasted) {
downcasted = int8(value);
require(downcasted == value, "SafeCast: value doesn't fit in 8 bits");
}
function toInt256(uint256 value) internal pure returns (int256) {
require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
return int256(value);
}
}
文件 30 的 31:StETHWrappingProxy.sol
pragma solidity 0.8.24;
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { SafeCast } from "@openzeppelin/contracts/utils/math/SafeCast.sol";
import { DCS_STRATEGY_ID, FCN_STRATEGY_ID } from "../Structs.sol";
import { Errors } from "../utils/Errors.sol";
import { IDCSEntry } from "../cega-strategies/dcs/interfaces/IDCSEntry.sol";
import { IFCNEntry } from "../cega-strategies/fcn/interfaces/IFCNEntry.sol";
import { IProductViewEntry } from "../common/interfaces/IProductViewEntry.sol";
import { IWrappingProxy } from "./interfaces/IWrappingProxy.sol";
import { IWstETH } from "./interfaces/IWstETH.sol";
contract StETHWrappingProxy is IWrappingProxy {
using SafeCast for uint256;
address public immutable cegaEntry;
IERC20 public immutable stETH;
IWstETH public immutable wstETH;
constructor(address _cegaEntry, IERC20 _stETH, IWstETH _wstETH) {
cegaEntry = _cegaEntry;
stETH = _stETH;
wstETH = _wstETH;
_stETH.approve(address(_wstETH), type(uint256).max);
_wstETH.approve(_cegaEntry, type(uint256).max);
}
function unwrapAndTransfer(address receiver, uint256 amount) external {
uint256 stETHAmount = wstETH.unwrap(amount);
stETH.transfer(receiver, stETHAmount);
}
function wrapAndAddToDCSDepositQueue(
uint32 productId,
uint128 amount,
address receiver
) public {
_wrapAndAddToDCSDepositQueue(productId, amount, receiver);
}
function wrapAndAddToFCNDepositQueue(
uint32 productId,
uint128 amount,
address receiver
) public {
_wrapAndAddToFCNDepositQueue(productId, amount, receiver);
}
function wrapAndAddToDepositQueue(
uint32 productId,
uint128 amount,
address receiver
) external {
uint32 strategyId = IProductViewEntry(cegaEntry).getStrategyOfProduct(
productId
);
if (strategyId == DCS_STRATEGY_ID) {
_wrapAndAddToDCSDepositQueue(productId, amount, receiver);
} else if (strategyId == FCN_STRATEGY_ID) {
_wrapAndAddToFCNDepositQueue(productId, amount, receiver);
} else {
revert(Errors.WRONG_STRATEGY);
}
}
function _wrapAndAddToDCSDepositQueue(
uint32 productId,
uint128 amount,
address receiver
) internal {
stETH.transferFrom(msg.sender, address(this), amount);
uint128 wstETHAmount = wstETH.wrap(amount).toUint128();
IDCSEntry(cegaEntry).dcsAddToDepositQueue(
productId,
wstETHAmount,
receiver
);
}
function _wrapAndAddToFCNDepositQueue(
uint32 productId,
uint128 amount,
address receiver
) internal {
stETH.transferFrom(msg.sender, address(this), amount);
uint128 wstETHAmount = wstETH.wrap(amount).toUint128();
IFCNEntry(cegaEntry).fcnAddToDepositQueue(
productId,
wstETHAmount,
receiver
);
}
}
文件 31 的 31:Structs.sol
pragma solidity ^0.8.24;
import { DCSProduct, DCSVault } from "./cega-strategies/dcs/DCSStructs.sol";
import { FCNProduct, FCNVault } from "./cega-strategies/fcn/FCNStructs.sol";
import { IOracleEntry } from "./oracle-entry/interfaces/IOracleEntry.sol";
uint32 constant DCS_STRATEGY_ID = 1;
uint32 constant FCN_STRATEGY_ID = 2;
struct DepositQueue {
uint128 queuedDepositsTotalAmount;
uint128 processedIndex;
mapping(address => uint128) amounts;
address[] depositors;
mapping(address => bool) depositorExists;
}
struct Withdrawer {
address account;
uint32 nextProductId;
}
struct ProductMetadata {
string name;
string tradeWinnerNftImage;
}
struct WithdrawalQueue {
uint128 queuedWithdrawalSharesAmount;
uint128 processedIndex;
mapping(address => mapping(uint32 => uint256)) amounts;
Withdrawer[] withdrawers;
mapping(address => bool) withdrawingWithProxy;
}
struct CegaGlobalStorage {
uint32 strategyIdCounter;
uint32 productIdCounter;
uint32[] strategyIds;
mapping(uint32 => uint32) strategyOfProduct;
mapping(uint32 => ProductMetadata) productMetadata;
mapping(address => Vault) vaults;
mapping(uint32 => DCSProduct) dcsProducts;
mapping(uint32 => DepositQueue) depositQueues;
mapping(address => DCSVault) dcsVaults;
mapping(address => WithdrawalQueue) withdrawalQueues;
mapping(address => mapping(bytes32 => mapping(uint40 => uint128))) oraclePriceOverride;
uint256 protocolPauseConfig;
mapping(uint32 => FCNProduct) fcnProducts;
mapping(address => FCNVault) fcnVaults;
mapping(address => bool) fcnBondAllowList;
}
struct Vault {
uint128 totalAssets;
uint64 auctionWinnerTokenId;
uint16 yieldFeeBps;
uint16 managementFeeBps;
uint32 productId;
address auctionWinner;
uint40 tradeStartDate;
VaultStatus vaultStatus;
IOracleEntry.DataSource dataSource;
bool isInDispute;
bool isDefaulted;
}
enum OldVaultStatus {
DepositsClosed,
DepositsOpen,
NotTraded,
Traded,
TradeExpired,
FeesCollected,
WithdrawalQueueProcessed,
Zombie
}
enum VaultStatus {
DepositsClosed,
DepositsOpen,
PreAuction,
Auctioned,
Traded,
AwaitingSettlement,
Settled,
FeesCollected,
WithdrawalQueueProcessed,
Zombie
}
struct MMNFTMetadata {
address vaultAddress;
uint40 tradeStartDate;
uint40 tradeEndDate;
uint16 aprBps;
uint128 notional;
uint128 initialSpotPrice;
uint128 strikePrice;
}
struct VaultCreationParams {
string tokenName;
string tokenSymbol;
uint16 yieldFeeBps;
uint16 managementFeeBps;
}
{
"compilationTarget": {
"contracts/proxies/StETHWrappingProxy.sol": "StETHWrappingProxy"
},
"evmVersion": "shanghai",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs",
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [],
"viaIR": true
}
[{"inputs":[{"internalType":"address","name":"_cegaEntry","type":"address"},{"internalType":"contract IERC20","name":"_stETH","type":"address"},{"internalType":"contract IWstETH","name":"_wstETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"cegaEntry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stETH","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unwrapAndTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"productId","type":"uint32"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"address","name":"receiver","type":"address"}],"name":"wrapAndAddToDCSDepositQueue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"productId","type":"uint32"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"address","name":"receiver","type":"address"}],"name":"wrapAndAddToDepositQueue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"productId","type":"uint32"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"address","name":"receiver","type":"address"}],"name":"wrapAndAddToFCNDepositQueue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wstETH","outputs":[{"internalType":"contract IWstETH","name":"","type":"address"}],"stateMutability":"view","type":"function"}]