编译器
0.8.17+commit.8df45f5f
文件 1 的 8:ConsiderationEnums.sol
pragma solidity ^0.8.0;
enum OrderType {
FULL_OPEN,
PARTIAL_OPEN,
FULL_RESTRICTED,
PARTIAL_RESTRICTED
}
enum BasicOrderType {
ETH_TO_ERC721_FULL_OPEN,
ETH_TO_ERC721_PARTIAL_OPEN,
ETH_TO_ERC721_FULL_RESTRICTED,
ETH_TO_ERC721_PARTIAL_RESTRICTED,
ETH_TO_ERC1155_FULL_OPEN,
ETH_TO_ERC1155_PARTIAL_OPEN,
ETH_TO_ERC1155_FULL_RESTRICTED,
ETH_TO_ERC1155_PARTIAL_RESTRICTED,
ERC20_TO_ERC721_FULL_OPEN,
ERC20_TO_ERC721_PARTIAL_OPEN,
ERC20_TO_ERC721_FULL_RESTRICTED,
ERC20_TO_ERC721_PARTIAL_RESTRICTED,
ERC20_TO_ERC1155_FULL_OPEN,
ERC20_TO_ERC1155_PARTIAL_OPEN,
ERC20_TO_ERC1155_FULL_RESTRICTED,
ERC20_TO_ERC1155_PARTIAL_RESTRICTED,
ERC721_TO_ERC20_FULL_OPEN,
ERC721_TO_ERC20_PARTIAL_OPEN,
ERC721_TO_ERC20_FULL_RESTRICTED,
ERC721_TO_ERC20_PARTIAL_RESTRICTED,
ERC1155_TO_ERC20_FULL_OPEN,
ERC1155_TO_ERC20_PARTIAL_OPEN,
ERC1155_TO_ERC20_FULL_RESTRICTED,
ERC1155_TO_ERC20_PARTIAL_RESTRICTED
}
enum BasicOrderRouteType {
ETH_TO_ERC721,
ETH_TO_ERC1155,
ERC20_TO_ERC721,
ERC20_TO_ERC1155,
ERC721_TO_ERC20,
ERC1155_TO_ERC20
}
enum ItemType {
NATIVE,
ERC20,
ERC721,
ERC1155,
ERC721_WITH_CRITERIA,
ERC1155_WITH_CRITERIA
}
enum Side {
OFFER,
CONSIDERATION
}
文件 2 的 8:ConsiderationStructs.sol
pragma solidity ^0.8.0;
import {
OrderType,
BasicOrderType,
ItemType,
Side
} from "./ConsiderationEnums.sol";
struct OrderComponents {
address offerer;
address zone;
OfferItem[] offer;
ConsiderationItem[] consideration;
OrderType orderType;
uint256 startTime;
uint256 endTime;
bytes32 zoneHash;
uint256 salt;
bytes32 conduitKey;
uint256 counter;
}
struct OfferItem {
ItemType itemType;
address token;
uint256 identifierOrCriteria;
uint256 startAmount;
uint256 endAmount;
}
struct ConsiderationItem {
ItemType itemType;
address token;
uint256 identifierOrCriteria;
uint256 startAmount;
uint256 endAmount;
address payable recipient;
}
struct SpentItem {
ItemType itemType;
address token;
uint256 identifier;
uint256 amount;
}
struct ReceivedItem {
ItemType itemType;
address token;
uint256 identifier;
uint256 amount;
address payable recipient;
}
struct BasicOrderParameters {
address considerationToken;
uint256 considerationIdentifier;
uint256 considerationAmount;
address payable offerer;
address zone;
address offerToken;
uint256 offerIdentifier;
uint256 offerAmount;
BasicOrderType basicOrderType;
uint256 startTime;
uint256 endTime;
bytes32 zoneHash;
uint256 salt;
bytes32 offererConduitKey;
bytes32 fulfillerConduitKey;
uint256 totalOriginalAdditionalRecipients;
AdditionalRecipient[] additionalRecipients;
bytes signature;
}
struct AdditionalRecipient {
uint256 amount;
address payable recipient;
}
struct OrderParameters {
address offerer;
address zone;
OfferItem[] offer;
ConsiderationItem[] consideration;
OrderType orderType;
uint256 startTime;
uint256 endTime;
bytes32 zoneHash;
uint256 salt;
bytes32 conduitKey;
uint256 totalOriginalConsiderationItems;
}
struct Order {
OrderParameters parameters;
bytes signature;
}
struct AdvancedOrder {
OrderParameters parameters;
uint120 numerator;
uint120 denominator;
bytes signature;
bytes extraData;
}
struct OrderStatus {
bool isValidated;
bool isCancelled;
uint120 numerator;
uint120 denominator;
}
struct CriteriaResolver {
uint256 orderIndex;
Side side;
uint256 index;
uint256 identifier;
bytes32[] criteriaProof;
}
struct Fulfillment {
FulfillmentComponent[] offerComponents;
FulfillmentComponent[] considerationComponents;
}
struct FulfillmentComponent {
uint256 orderIndex;
uint256 itemIndex;
}
struct Execution {
ReceivedItem item;
address offerer;
bytes32 conduitKey;
}
文件 3 的 8:DataTypes.sol
pragma solidity ^0.8.0;
import {OfferItem, ConsiderationItem} from "../../../dependencies/seaport/contracts/lib/ConsiderationStructs.sol";
import {IStakefishValidator} from "../../../interfaces/IStakefishValidator.sol";
library DataTypes {
enum AssetType {
ERC20,
ERC721
}
address public constant SApeAddress = address(0x1);
uint256 public constant HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1e18;
struct ReserveData {
ReserveConfigurationMap configuration;
uint128 liquidityIndex;
uint128 currentLiquidityRate;
uint128 variableBorrowIndex;
uint128 currentVariableBorrowRate;
uint40 lastUpdateTimestamp;
uint16 id;
address xTokenAddress;
address variableDebtTokenAddress;
address interestRateStrategyAddress;
address auctionStrategyAddress;
uint128 accruedToTreasury;
address timeLockStrategyAddress;
uint128 unbacked;
}
struct ReserveConfigurationMap {
uint256 data;
}
struct UserConfigurationMap {
uint256 data;
uint256 auctionValidityTime;
}
struct ERC721SupplyParams {
uint256 tokenId;
bool useAsCollateral;
}
struct StakefishNTokenData {
uint256 validatorIndex;
bytes pubkey;
uint256 withdrawnBalance;
address feePoolAddress;
string nftArtUrl;
uint256 protocolFee;
IStakefishValidator.StateChange[] stateHistory;
uint256[2] pendingFeePoolReward;
}
struct NTokenData {
uint256 tokenId;
uint256 multiplier;
bool useAsCollateral;
bool isAuctioned;
StakefishNTokenData stakefishNTokenData;
}
struct ReserveCache {
uint256 currScaledVariableDebt;
uint256 nextScaledVariableDebt;
uint256 currLiquidityIndex;
uint256 nextLiquidityIndex;
uint256 currVariableBorrowIndex;
uint256 nextVariableBorrowIndex;
uint256 currLiquidityRate;
uint256 currVariableBorrowRate;
uint256 reserveFactor;
ReserveConfigurationMap reserveConfiguration;
address xTokenAddress;
address variableDebtTokenAddress;
uint40 reserveLastUpdateTimestamp;
}
struct ExecuteLiquidateParams {
uint256 reservesCount;
uint256 liquidationAmount;
uint256 collateralTokenId;
uint256 auctionRecoveryHealthFactor;
address weth;
address collateralAsset;
address liquidationAsset;
address borrower;
address liquidator;
bool receiveXToken;
address priceOracle;
address priceOracleSentinel;
}
struct ExecuteAuctionParams {
uint256 reservesCount;
uint256 auctionRecoveryHealthFactor;
uint256 collateralTokenId;
address collateralAsset;
address user;
address priceOracle;
}
struct ExecuteSupplyParams {
address asset;
uint256 amount;
address onBehalfOf;
address payer;
uint16 referralCode;
}
struct ExecuteSupplyERC721Params {
address asset;
DataTypes.ERC721SupplyParams[] tokenData;
address onBehalfOf;
address payer;
uint16 referralCode;
}
struct ExecuteBorrowParams {
address asset;
address user;
address onBehalfOf;
uint256 amount;
uint16 referralCode;
bool releaseUnderlying;
uint256 reservesCount;
address oracle;
address priceOracleSentinel;
}
struct ExecuteRepayParams {
address asset;
uint256 amount;
address onBehalfOf;
address payer;
bool usePTokens;
}
struct ExecuteWithdrawParams {
address asset;
uint256 amount;
address to;
uint256 reservesCount;
address oracle;
}
struct ExecuteWithdrawERC721Params {
address asset;
uint256[] tokenIds;
address to;
uint256 reservesCount;
address oracle;
}
struct ExecuteDecreaseUniswapV3LiquidityParams {
address user;
address asset;
uint256 tokenId;
uint256 reservesCount;
uint128 liquidityDecrease;
uint256 amount0Min;
uint256 amount1Min;
bool receiveEthAsWeth;
address oracle;
}
struct FinalizeTransferParams {
address asset;
address from;
address to;
bool usedAsCollateral;
uint256 amount;
uint256 balanceFromBefore;
uint256 balanceToBefore;
uint256 reservesCount;
address oracle;
}
struct FinalizeTransferERC721Params {
address asset;
address from;
address to;
bool usedAsCollateral;
uint256 tokenId;
uint256 balanceFromBefore;
uint256 reservesCount;
address oracle;
}
struct CalculateUserAccountDataParams {
UserConfigurationMap userConfig;
uint256 reservesCount;
address user;
address oracle;
}
struct ValidateBorrowParams {
ReserveCache reserveCache;
UserConfigurationMap userConfig;
address asset;
address userAddress;
uint256 amount;
uint256 reservesCount;
address oracle;
address priceOracleSentinel;
}
struct ValidateLiquidateERC20Params {
ReserveCache liquidationAssetReserveCache;
address liquidationAsset;
address weth;
uint256 totalDebt;
uint256 healthFactor;
uint256 liquidationAmount;
uint256 actualLiquidationAmount;
address priceOracleSentinel;
}
struct ValidateLiquidateERC721Params {
ReserveCache liquidationAssetReserveCache;
address liquidationAsset;
address liquidator;
address borrower;
uint256 globalDebt;
uint256 healthFactor;
address collateralAsset;
uint256 tokenId;
address weth;
uint256 actualLiquidationAmount;
uint256 maxLiquidationAmount;
uint256 auctionRecoveryHealthFactor;
address priceOracleSentinel;
address xTokenAddress;
bool auctionEnabled;
}
struct ValidateAuctionParams {
address user;
uint256 auctionRecoveryHealthFactor;
uint256 erc721HealthFactor;
address collateralAsset;
uint256 tokenId;
address xTokenAddress;
}
struct CalculateInterestRatesParams {
uint256 liquidityAdded;
uint256 liquidityTaken;
uint256 totalVariableDebt;
uint256 reserveFactor;
address reserve;
address xToken;
}
struct InitReserveParams {
address asset;
address xTokenAddress;
address variableDebtAddress;
address interestRateStrategyAddress;
address auctionStrategyAddress;
address timeLockStrategyAddress;
uint16 reservesCount;
uint16 maxNumberReserves;
}
struct ExecuteFlashClaimParams {
address receiverAddress;
address[] nftAssets;
uint256[][] nftTokenIds;
bytes params;
address oracle;
}
struct Credit {
address token;
uint256 amount;
bytes orderId;
uint8 v;
bytes32 r;
bytes32 s;
}
struct ExecuteMarketplaceParams {
bytes32 marketplaceId;
bytes payload;
Credit credit;
uint256 ethLeft;
DataTypes.Marketplace marketplace;
OrderInfo orderInfo;
address weth;
uint16 referralCode;
uint256 reservesCount;
address oracle;
address priceOracleSentinel;
}
struct OrderInfo {
address maker;
address taker;
bytes id;
OfferItem[] offer;
ConsiderationItem[] consideration;
}
struct Marketplace {
address marketplace;
address adapter;
address operator;
bool paused;
}
struct Auction {
uint256 startTime;
}
struct AuctionData {
address asset;
uint256 tokenId;
uint256 startTime;
uint256 currentPriceMultiplier;
uint256 maxPriceMultiplier;
uint256 minExpPriceMultiplier;
uint256 minPriceMultiplier;
uint256 stepLinear;
uint256 stepExp;
uint256 tickLength;
}
struct TokenData {
string symbol;
address tokenAddress;
}
enum ApeCompoundType {
SwapAndSupply
}
enum ApeCompoundTokenOut {
USDC,
WETH
}
struct ApeCompoundStrategy {
ApeCompoundType ty;
ApeCompoundTokenOut swapTokenOut;
uint256 swapPercent;
}
struct PoolStorage {
mapping(address => ReserveData) _reserves;
mapping(address => UserConfigurationMap) _usersConfig;
mapping(uint256 => address) _reservesList;
uint16 _reservesCount;
uint64 _auctionRecoveryHealthFactor;
uint16 _apeCompoundFee;
mapping(address => ApeCompoundStrategy) _apeCompoundStrategies;
}
struct ReserveConfigData {
uint256 decimals;
uint256 ltv;
uint256 liquidationThreshold;
uint256 liquidationBonus;
uint256 reserveFactor;
bool usageAsCollateralEnabled;
bool borrowingEnabled;
bool isActive;
bool isFrozen;
bool isPaused;
}
struct TimeLockParams {
uint48 releaseTime;
TimeLockActionType actionType;
}
struct TimeLockFactorParams {
AssetType assetType;
address asset;
uint256 amount;
}
enum TimeLockActionType {
BORROW,
WITHDRAW
}
struct ParaSpacePositionMoveInfo {
address[] cTokens;
DataTypes.AssetType[] cTypes;
uint256[][] cAmountsOrTokenIds;
address[] dTokens;
uint256[] dAmounts;
address to;
}
struct ParaSpacePositionMoveParams {
address user;
address[] cTokens;
DataTypes.AssetType[] cTypes;
uint256[][] cAmountsOrTokenIds;
address[] dTokens;
uint256[] dAmounts;
address to;
address priceOracle;
address priceOracleSentinel;
uint256 reservesCount;
}
}
文件 4 的 8:DefaultTimeLockStrategy.sol
pragma solidity ^0.8.0;
import "../interfaces/ITimeLockStrategy.sol";
import "../protocol/libraries/helpers/Errors.sol";
import "../dependencies/openzeppelin/contracts/SafeCast.sol";
contract DefaultTimeLockStrategy is ITimeLockStrategy {
using SafeCast for uint256;
address private immutable POOL;
uint256 public immutable MIN_THRESHOLD;
uint256 public immutable MID_THRESHOLD;
uint48 public immutable MIN_WAIT_TIME;
uint48 public immutable MID_WAIT_TIME;
uint48 public immutable MAX_WAIT_TIME;
uint48 public immutable POOL_PERIOD_WAIT_TIME;
uint256 public immutable POOL_PERIOD_LIMIT;
uint256 public immutable PERIOD;
uint128 public totalAmountInCurrentPeriod;
uint48 public lastResetTimestamp;
event PeriodReset();
modifier onlyPool() {
require(msg.sender == POOL, Errors.CALLER_MUST_BE_POOL);
_;
}
constructor(
address pool,
uint256 minThreshold,
uint256 midThreshold,
uint48 minWaitTime,
uint48 midWaitTime,
uint48 maxWaitTime,
uint256 poolPeriodLimit,
uint48 poolPeriodWaitTime,
uint256 period
) {
POOL = pool;
require(minThreshold < midThreshold, "minThreshold > midThreshold");
require(minWaitTime < midWaitTime, "minWaitTime > midWaitTime");
require(midWaitTime < maxWaitTime, "midWaitTime > maxWaitTime");
require(poolPeriodLimit > 0, "poolPeriodLimit can't be 0");
MIN_THRESHOLD = minThreshold;
MID_THRESHOLD = midThreshold;
MIN_WAIT_TIME = minWaitTime;
MID_WAIT_TIME = midWaitTime;
MAX_WAIT_TIME = maxWaitTime;
POOL_PERIOD_LIMIT = poolPeriodLimit;
POOL_PERIOD_WAIT_TIME = poolPeriodWaitTime;
PERIOD = period;
}
function _updatePeriodLimit(
uint48 currentTimestamp,
uint128 amount
) internal returns (uint48 extraDelay) {
if (currentTimestamp - lastResetTimestamp >= PERIOD) {
totalAmountInCurrentPeriod = 0;
lastResetTimestamp = currentTimestamp;
emit PeriodReset();
}
uint128 newTotalAmountInCurrentPeriod = totalAmountInCurrentPeriod +
amount;
totalAmountInCurrentPeriod = newTotalAmountInCurrentPeriod;
if (newTotalAmountInCurrentPeriod > POOL_PERIOD_LIMIT) {
extraDelay = POOL_PERIOD_WAIT_TIME;
}
}
function calculateTimeLockParams(
DataTypes.TimeLockFactorParams calldata params
) external onlyPool returns (DataTypes.TimeLockParams memory) {
uint48 currentTimestamp = uint48(block.timestamp);
DataTypes.TimeLockParams memory timeLockParams;
timeLockParams.releaseTime +=
currentTimestamp +
_updatePeriodLimit(currentTimestamp, params.amount.toUint128());
if (params.amount < MIN_THRESHOLD) {
timeLockParams.releaseTime += MIN_WAIT_TIME;
} else if (params.amount < MID_THRESHOLD) {
timeLockParams.releaseTime += MID_WAIT_TIME;
} else {
timeLockParams.releaseTime += MAX_WAIT_TIME;
}
return timeLockParams;
}
function getTimeLockStrategyData()
external
view
returns (TimeLockStrategyData memory timeLockStrategyData)
{
timeLockStrategyData.minThreshold = MIN_THRESHOLD;
timeLockStrategyData.midThreshold = MID_THRESHOLD;
timeLockStrategyData.minWaitTime = MIN_WAIT_TIME;
timeLockStrategyData.midWaitTime = MID_WAIT_TIME;
timeLockStrategyData.maxWaitTime = MAX_WAIT_TIME;
timeLockStrategyData.poolPeriodLimit = POOL_PERIOD_LIMIT;
timeLockStrategyData.poolPeriodWaitTime = POOL_PERIOD_WAIT_TIME;
timeLockStrategyData.period = PERIOD;
timeLockStrategyData
.totalAmountInCurrentPeriod = totalAmountInCurrentPeriod;
timeLockStrategyData.lastResetTimestamp = lastResetTimestamp;
}
}
文件 5 的 8:Errors.sol
pragma solidity ^0.8.0;
library Errors {
string public constant CALLER_NOT_POOL_ADMIN = "1";
string public constant CALLER_NOT_EMERGENCY_ADMIN = "2";
string public constant CALLER_NOT_POOL_OR_EMERGENCY_ADMIN = "3";
string public constant CALLER_NOT_RISK_OR_POOL_ADMIN = "4";
string public constant CALLER_NOT_ASSET_LISTING_OR_POOL_ADMIN = "5";
string public constant CALLER_NOT_BRIDGE = "6";
string public constant ADDRESSES_PROVIDER_NOT_REGISTERED = "7";
string public constant INVALID_ADDRESSES_PROVIDER_ID = "8";
string public constant NOT_CONTRACT = "9";
string public constant CALLER_NOT_POOL_CONFIGURATOR = "10";
string public constant CALLER_NOT_XTOKEN = "11";
string public constant INVALID_ADDRESSES_PROVIDER = "12";
string public constant RESERVE_ALREADY_ADDED = "14";
string public constant NO_MORE_RESERVES_ALLOWED = "15";
string public constant RESERVE_LIQUIDITY_NOT_ZERO = "18";
string public constant INVALID_RESERVE_PARAMS = "20";
string public constant CALLER_MUST_BE_POOL = "23";
string public constant INVALID_MINT_AMOUNT = "24";
string public constant INVALID_BURN_AMOUNT = "25";
string public constant INVALID_AMOUNT = "26";
string public constant RESERVE_INACTIVE = "27";
string public constant RESERVE_FROZEN = "28";
string public constant RESERVE_PAUSED = "29";
string public constant BORROWING_NOT_ENABLED = "30";
string public constant STABLE_BORROWING_NOT_ENABLED = "31";
string public constant NOT_ENOUGH_AVAILABLE_USER_BALANCE = "32";
string public constant INVALID_INTEREST_RATE_MODE_SELECTED = "33";
string public constant COLLATERAL_BALANCE_IS_ZERO = "34";
string public constant HEALTH_FACTOR_LOWER_THAN_LIQUIDATION_THRESHOLD =
"35";
string public constant COLLATERAL_CANNOT_COVER_NEW_BORROW = "36";
string public constant COLLATERAL_SAME_AS_BORROWING_CURRENCY = "37";
string public constant AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE = "38";
string public constant NO_DEBT_OF_SELECTED_TYPE = "39";
string public constant NO_EXPLICIT_AMOUNT_TO_REPAY_ON_BEHALF = "40";
string public constant NO_OUTSTANDING_STABLE_DEBT = "41";
string public constant NO_OUTSTANDING_VARIABLE_DEBT = "42";
string public constant UNDERLYING_BALANCE_ZERO = "43";
string public constant INTEREST_RATE_REBALANCE_CONDITIONS_NOT_MET = "44";
string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = "45";
string public constant COLLATERAL_CANNOT_BE_AUCTIONED_OR_LIQUIDATED = "46";
string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = "47";
string public constant SAME_BLOCK_BORROW_REPAY = "48";
string public constant BORROW_CAP_EXCEEDED = "50";
string public constant SUPPLY_CAP_EXCEEDED = "51";
string public constant XTOKEN_SUPPLY_NOT_ZERO = "54";
string public constant STABLE_DEBT_NOT_ZERO = "55";
string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = "56";
string public constant LTV_VALIDATION_FAILED = "57";
string public constant PRICE_ORACLE_SENTINEL_CHECK_FAILED = "59";
string public constant RESERVE_ALREADY_INITIALIZED = "61";
string public constant INVALID_LTV = "63";
string public constant INVALID_LIQ_THRESHOLD = "64";
string public constant INVALID_LIQ_BONUS = "65";
string public constant INVALID_DECIMALS = "66";
string public constant INVALID_RESERVE_FACTOR = "67";
string public constant INVALID_BORROW_CAP = "68";
string public constant INVALID_SUPPLY_CAP = "69";
string public constant INVALID_LIQUIDATION_PROTOCOL_FEE = "70";
string public constant INVALID_DEBT_CEILING = "73";
string public constant INVALID_RESERVE_INDEX = "74";
string public constant ACL_ADMIN_CANNOT_BE_ZERO = "75";
string public constant INCONSISTENT_PARAMS_LENGTH = "76";
string public constant ZERO_ADDRESS_NOT_VALID = "77";
string public constant INVALID_EXPIRATION = "78";
string public constant INVALID_SIGNATURE = "79";
string public constant OPERATION_NOT_SUPPORTED = "80";
string public constant ASSET_NOT_LISTED = "82";
string public constant INVALID_OPTIMAL_USAGE_RATIO = "83";
string public constant INVALID_OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = "84";
string public constant UNDERLYING_CANNOT_BE_RESCUED = "85";
string public constant ADDRESSES_PROVIDER_ALREADY_ADDED = "86";
string public constant POOL_ADDRESSES_DO_NOT_MATCH = "87";
string public constant STABLE_BORROWING_ENABLED = "88";
string public constant SILOED_BORROWING_VIOLATION = "89";
string public constant RESERVE_DEBT_NOT_ZERO = "90";
string public constant NOT_THE_OWNER = "91";
string public constant LIQUIDATION_AMOUNT_NOT_ENOUGH = "92";
string public constant INVALID_ASSET_TYPE = "93";
string public constant INVALID_FLASH_CLAIM_RECEIVER = "94";
string public constant ERC721_HEALTH_FACTOR_NOT_BELOW_THRESHOLD = "95";
string public constant UNDERLYING_ASSET_CAN_NOT_BE_TRANSFERRED = "96";
string public constant TOKEN_TRANSFERRED_CAN_NOT_BE_SELF_ADDRESS = "97";
string public constant INVALID_AIRDROP_CONTRACT_ADDRESS = "98";
string public constant INVALID_AIRDROP_PARAMETERS = "99";
string public constant CALL_AIRDROP_METHOD_FAILED = "100";
string public constant SUPPLIER_NOT_NTOKEN = "101";
string public constant CALL_MARKETPLACE_FAILED = "102";
string public constant INVALID_MARKETPLACE_ID = "103";
string public constant INVALID_MARKETPLACE_ORDER = "104";
string public constant CREDIT_DOES_NOT_MATCH_ORDER = "105";
string public constant PAYNOW_NOT_ENOUGH = "106";
string public constant INVALID_CREDIT_SIGNATURE = "107";
string public constant INVALID_ORDER_TAKER = "108";
string public constant MARKETPLACE_PAUSED = "109";
string public constant INVALID_AUCTION_RECOVERY_HEALTH_FACTOR = "110";
string public constant AUCTION_ALREADY_STARTED = "111";
string public constant AUCTION_NOT_STARTED = "112";
string public constant AUCTION_NOT_ENABLED = "113";
string public constant ERC721_HEALTH_FACTOR_NOT_ABOVE_THRESHOLD = "114";
string public constant TOKEN_IN_AUCTION = "115";
string public constant AUCTIONED_BALANCE_NOT_ZERO = "116";
string public constant LIQUIDATOR_CAN_NOT_BE_SELF = "117";
string public constant INVALID_RECIPIENT = "118";
string public constant FLASHCLAIM_NOT_ALLOWED = "119";
string public constant NTOKEN_BALANCE_EXCEEDED = "120";
string public constant ORACLE_PRICE_NOT_READY = "121";
string public constant SET_ORACLE_SOURCE_NOT_ALLOWED = "122";
string public constant INVALID_LIQUIDATION_ASSET = "123";
string public constant XTOKEN_TYPE_NOT_ALLOWED = "124";
string public constant GLOBAL_DEBT_IS_ZERO = "125";
string public constant ORACLE_PRICE_EXPIRED = "126";
string public constant APE_STAKING_POSITION_EXISTED = "127";
string public constant SAPE_NOT_ALLOWED = "128";
string public constant TOTAL_STAKING_AMOUNT_WRONG = "129";
string public constant NOT_THE_BAKC_OWNER = "130";
string public constant CALLER_NOT_EOA = "131";
string public constant MAKER_SAME_AS_TAKER = "132";
string public constant TOKEN_ALREADY_DELEGATED = "133";
string public constant INVALID_STATE = "134";
string public constant INVALID_TOKEN_ID = "135";
string public constant SENDER_SAME_AS_RECEIVER = "136";
string public constant INVALID_YIELD_UNDERLYING_TOKEN = "137";
string public constant CALLER_NOT_OPERATOR = "138";
string public constant INVALID_FEE_VALUE = "139";
string public constant TOKEN_NOT_ALLOW_RESCUE = "140";
string public constant INVALID_PARAMETER = "170";
string public constant INVALID_CALLER = "171";
}
文件 6 的 8:IStakefishValidator.sol
pragma solidity ^0.8.0;
interface IStakefishValidator {
enum State {
PreDeposit,
PostDeposit,
Active,
ExitRequested,
Exited,
Withdrawn,
Burnable
}
struct StateChange {
State state;
bytes15 userData;
uint128 changedAt;
}
function validatorIndex() external view returns (uint256);
function pubkey() external view returns (bytes memory);
function withdrawnBalance() external view returns (uint256);
function feePoolAddress() external view returns (address);
function stateHistory(
uint256 index
) external view returns (StateChange memory);
function lastStateChange() external view returns (StateChange memory);
function requestExit() external;
function withdraw() external;
function pendingFeePoolReward() external view returns (uint256, uint256);
function claimFeePool(uint256 amountRequested) external;
function getProtocolFee() external view returns (uint256);
function getNFTArtUrl() external view returns (string memory);
function computeCommission(uint256 amount) external view returns (uint256);
function render() external view returns (string memory);
}
文件 7 的 8:ITimeLockStrategy.sol
pragma solidity ^0.8.0;
import {DataTypes} from "../protocol/libraries/types/DataTypes.sol";
interface ITimeLockStrategy {
struct TimeLockStrategyData {
uint256 minThreshold;
uint256 midThreshold;
uint48 minWaitTime;
uint48 midWaitTime;
uint48 maxWaitTime;
uint48 poolPeriodWaitTime;
uint256 poolPeriodLimit;
uint256 period;
uint128 totalAmountInCurrentPeriod;
uint48 lastResetTimestamp;
}
function calculateTimeLockParams(
DataTypes.TimeLockFactorParams calldata params
) external returns (DataTypes.TimeLockParams memory);
function getTimeLockStrategyData()
external
view
returns (TimeLockStrategyData memory);
}
文件 8 的 8:SafeCast.sol
pragma solidity ^0.8.0;
library SafeCast {
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 toUint184(uint256 value) internal pure returns (uint184) {
require(value <= type(uint184).max, "SafeCast: value doesn't fit in 184 bits");
return uint184(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 toUint96(uint256 value) internal pure returns (uint96) {
require(
value <= type(uint96).max,
"SafeCast: value doesn't fit in 96 bits"
);
return uint96(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 toUint48(uint256 value) internal pure returns (uint48) {
require(value <= type(uint48).max, "SafeCast: value doesn't fit in 48 bits");
return uint48(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 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 toInt128(int256 value) internal pure returns (int128) {
require(
value >= type(int128).min && value <= type(int128).max,
"SafeCast: value doesn't fit in 128 bits"
);
return int128(value);
}
function toInt64(int256 value) internal pure returns (int64) {
require(
value >= type(int64).min && value <= type(int64).max,
"SafeCast: value doesn't fit in 64 bits"
);
return int64(value);
}
function toInt32(int256 value) internal pure returns (int32) {
require(
value >= type(int32).min && value <= type(int32).max,
"SafeCast: value doesn't fit in 32 bits"
);
return int32(value);
}
function toInt16(int256 value) internal pure returns (int16) {
require(
value >= type(int16).min && value <= type(int16).max,
"SafeCast: value doesn't fit in 16 bits"
);
return int16(value);
}
function toInt8(int256 value) internal pure returns (int8) {
require(
value >= type(int8).min && value <= type(int8).max,
"SafeCast: value doesn't fit in 8 bits"
);
return int8(value);
}
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);
}
}
{
"compilationTarget": {
"contracts/misc/DefaultTimeLockStrategy.sol": "DefaultTimeLockStrategy"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [
":@ensdomains/=node_modules/@ensdomains/",
":@matterlabs/=node_modules/@matterlabs/",
":@openzeppelin/=node_modules/@openzeppelin/",
":@prb/=node_modules/@prb/",
":@uniswap/=node_modules/@uniswap/",
":base64-sol/=node_modules/base64-sol/",
":contracts/=contracts/",
":ds-test/=lib/ds-test/src/",
":eth-gas-reporter/=node_modules/eth-gas-reporter/",
":forge-std/=lib/forge-std/src/",
":hardhat-deploy/=node_modules/hardhat-deploy/",
":hardhat/=node_modules/hardhat/",
":pnm-contracts/=lib/pnm-contracts/"
]
}
[{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"minThreshold","type":"uint256"},{"internalType":"uint256","name":"midThreshold","type":"uint256"},{"internalType":"uint48","name":"minWaitTime","type":"uint48"},{"internalType":"uint48","name":"midWaitTime","type":"uint48"},{"internalType":"uint48","name":"maxWaitTime","type":"uint48"},{"internalType":"uint256","name":"poolPeriodLimit","type":"uint256"},{"internalType":"uint48","name":"poolPeriodWaitTime","type":"uint48"},{"internalType":"uint256","name":"period","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"PeriodReset","type":"event"},{"inputs":[],"name":"MAX_WAIT_TIME","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MID_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MID_WAIT_TIME","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_WAIT_TIME","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_PERIOD_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_PERIOD_WAIT_TIME","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum DataTypes.AssetType","name":"assetType","type":"uint8"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct DataTypes.TimeLockFactorParams","name":"params","type":"tuple"}],"name":"calculateTimeLockParams","outputs":[{"components":[{"internalType":"uint48","name":"releaseTime","type":"uint48"},{"internalType":"enum DataTypes.TimeLockActionType","name":"actionType","type":"uint8"}],"internalType":"struct DataTypes.TimeLockParams","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTimeLockStrategyData","outputs":[{"components":[{"internalType":"uint256","name":"minThreshold","type":"uint256"},{"internalType":"uint256","name":"midThreshold","type":"uint256"},{"internalType":"uint48","name":"minWaitTime","type":"uint48"},{"internalType":"uint48","name":"midWaitTime","type":"uint48"},{"internalType":"uint48","name":"maxWaitTime","type":"uint48"},{"internalType":"uint48","name":"poolPeriodWaitTime","type":"uint48"},{"internalType":"uint256","name":"poolPeriodLimit","type":"uint256"},{"internalType":"uint256","name":"period","type":"uint256"},{"internalType":"uint128","name":"totalAmountInCurrentPeriod","type":"uint128"},{"internalType":"uint48","name":"lastResetTimestamp","type":"uint48"}],"internalType":"struct ITimeLockStrategy.TimeLockStrategyData","name":"timeLockStrategyData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastResetTimestamp","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAmountInCurrentPeriod","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"}]