编译器
0.8.24+commit.e11b9ed9
文件 1 的 24:Address.sol
pragma solidity ^0.8.1;
library Address {
function isContract(address account) internal view returns (bool) {
return account.code.length > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, "Address: low-level call failed");
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
文件 2 的 24:BasicProvider.sol
pragma solidity ^0.8.0;
import "./ProviderModifiers.sol";
import "@poolzfinance/poolz-helper-v2/contracts/interfaces/IProvider.sol";
import "@poolzfinance/poolz-helper-v2/contracts/interfaces/ISimpleProvider.sol";
import "../../ERC165/Refundble.sol";
import "../../ERC165/Bundable.sol";
import "@openzeppelin/contracts/utils/introspection/ERC165.sol";
import "@ironblocks/firewall-consumer/contracts/FirewallConsumer.sol";
abstract contract BasicProvider is ProviderModifiers, ISimpleProvider, ERC165, FirewallConsumer {
function createNewPool(
address[] calldata addresses,
uint256[] calldata params,
bytes calldata signature
)
external
virtual
firewallProtected
validAddressesLength(addresses.length, 2)
validParamsLength(params.length, currentParamsTargetLength())
returns (uint256 poolId)
{
poolId = lockDealNFT.safeMintAndTransfer(addresses[0], addresses[1], msg.sender, params[0], this, signature);
_registerPool(poolId, params);
}
function registerPool(
uint256 poolId,
uint256[] calldata params
) external virtual firewallProtected onlyProvider validParamsLength(params.length, currentParamsTargetLength()) {
_registerPool(poolId, params);
}
function withdraw(uint256 poolId) external virtual firewallProtected override onlyNFT returns (uint256 withdrawnAmount, bool isFinal) {
(withdrawnAmount, isFinal) = _withdraw(poolId, getWithdrawableAmount(poolId));
}
function withdraw(
uint256 poolId,
uint256 amount
) external virtual firewallProtected onlyProvider returns (uint256 withdrawnAmount, bool isFinal) {
(withdrawnAmount, isFinal) = _withdraw(poolId, amount);
}
function _registerPool(uint256 poolId, uint256[] calldata params) internal virtual;
function _withdraw(
uint256 poolId,
uint256 amount
) internal virtual returns (uint256 withdrawnAmount, bool isFinal) {}
function getWithdrawableAmount(uint256 poolId) public view virtual override returns (uint256);
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return
interfaceId == Refundble._INTERFACE_ID_REFUNDABLE ||
interfaceId == Bundable._INTERFACE_ID_BUNDABLE ||
interfaceId == type(ISimpleProvider).interfaceId ||
super.supportsInterface(interfaceId);
}
}
文件 3 的 24:Bundable.sol
pragma solidity ^0.8.0;
library Bundable {
bytes4 public constant _INTERFACE_ID_BUNDABLE = 0x29c8a06d;
}
文件 4 的 24:CalcUtils.sol
pragma solidity ^0.8.0;
library CalcUtils {
function calcAmount(uint256 amount, uint256 rate) internal pure returns (uint256 tokenA) {
return (amount * rate) / 1e21;
}
function calcRate(uint256 tokenAValue, uint256 tokenBValue) internal pure returns (uint256 rate) {
return (tokenAValue * 1e21) / tokenBValue;
}
}
文件 5 的 24:Context.sol
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
文件 6 的 24:DealProvider.sol
pragma solidity ^0.8.0;
import "./DealProviderState.sol";
import "../Provider/BasicProvider.sol";
import "@poolzfinance/poolz-helper-v2/contracts/CalcUtils.sol";
contract DealProvider is DealProviderState, BasicProvider {
using CalcUtils for uint256;
constructor(ILockDealNFT _nftContract) {
require(address(_nftContract) != address(0x0), "invalid address");
lockDealNFT = _nftContract;
name = "DealProvider";
}
function _withdraw(
uint256 poolId,
uint256 amount
) internal override firewallProtectedSig(0x9e2bf22c) returns (uint256 withdrawnAmount, bool isFinal) {
if (poolIdToAmount[poolId] >= amount) {
poolIdToAmount[poolId] -= amount;
withdrawnAmount = amount;
isFinal = poolIdToAmount[poolId] == 0;
}
}
function split(uint256 oldPoolId, uint256 newPoolId, uint256 ratio) external override firewallProtected onlyProvider {
uint256 splitAmount = poolIdToAmount[oldPoolId].calcAmount(ratio);
require(poolIdToAmount[oldPoolId] >= splitAmount, "Split amount exceeds the available amount");
poolIdToAmount[oldPoolId] -= splitAmount;
poolIdToAmount[newPoolId] = splitAmount;
}
function _registerPool(uint256 poolId, uint256[] calldata params) internal override firewallProtectedSig(0x677df66b) {
poolIdToAmount[poolId] = params[0];
emit UpdateParams(poolId, params);
}
function getParams(uint256 poolId) external view override returns (uint256[] memory params) {
uint256 leftAmount = poolIdToAmount[poolId];
params = new uint256[](1);
params[0] = leftAmount;
}
function getWithdrawableAmount(uint256 poolId) public view override returns (uint256) {
return poolIdToAmount[poolId];
}
}
文件 7 的 24:DealProviderState.sol
pragma solidity ^0.8.0;
contract DealProviderState {
mapping(uint256 => uint256) public poolIdToAmount;
}
文件 8 的 24:ERC165.sol
pragma solidity ^0.8.0;
import "./IERC165.sol";
abstract contract ERC165 is IERC165 {
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
文件 9 的 24:ERC165Checker.sol
pragma solidity ^0.8.0;
import "./IERC165.sol";
library ERC165Checker {
bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;
function supportsERC165(address account) internal view returns (bool) {
return
supportsERC165InterfaceUnchecked(account, type(IERC165).interfaceId) &&
!supportsERC165InterfaceUnchecked(account, _INTERFACE_ID_INVALID);
}
function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {
return supportsERC165(account) && supportsERC165InterfaceUnchecked(account, interfaceId);
}
function getSupportedInterfaces(
address account,
bytes4[] memory interfaceIds
) internal view returns (bool[] memory) {
bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);
if (supportsERC165(account)) {
for (uint256 i = 0; i < interfaceIds.length; i++) {
interfaceIdsSupported[i] = supportsERC165InterfaceUnchecked(account, interfaceIds[i]);
}
}
return interfaceIdsSupported;
}
function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {
if (!supportsERC165(account)) {
return false;
}
for (uint256 i = 0; i < interfaceIds.length; i++) {
if (!supportsERC165InterfaceUnchecked(account, interfaceIds[i])) {
return false;
}
}
return true;
}
function supportsERC165InterfaceUnchecked(address account, bytes4 interfaceId) internal view returns (bool) {
bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);
bool success;
uint256 returnSize;
uint256 returnValue;
assembly {
success := staticcall(30000, account, add(encodedParams, 0x20), mload(encodedParams), 0x00, 0x20)
returnSize := returndatasize()
returnValue := mload(0x00)
}
return success && returnSize >= 0x20 && returnValue > 0;
}
}
文件 10 的 24:FirewallConsumer.sol
pragma solidity ^0.8;
import {FirewallConsumerBase} from "./FirewallConsumerBase.sol";
contract FirewallConsumer is FirewallConsumerBase(address(0), msg.sender) {
}
文件 11 的 24:FirewallConsumerBase.sol
pragma solidity ^0.8;
import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
import {Address} from "@openzeppelin/contracts/utils/Address.sol";
import {Context} from "@openzeppelin/contracts/utils/Context.sol";
import {IFirewall} from "./interfaces/IFirewall.sol";
import {IFirewallConsumer} from "./interfaces/IFirewallConsumer.sol";
contract FirewallConsumerBase is IFirewallConsumer, Context {
bytes32 private constant FIREWALL_STORAGE_SLOT = bytes32(uint256(keccak256("eip1967.firewall")) - 1);
bytes32 private constant FIREWALL_ADMIN_STORAGE_SLOT = bytes32(uint256(keccak256("eip1967.firewall.admin")) - 1);
bytes32 private constant NEW_FIREWALL_ADMIN_STORAGE_SLOT = bytes32(uint256(keccak256("eip1967.new.firewall.admin")) - 1);
bytes4 private constant SUPPORTS_APPROVE_VIA_SIGNATURE_INTERFACE_ID = bytes4(0x0c908cff);
bytes32 private constant APPROVED_TARGETS_MAPPING_SLOT = bytes32(uint256(keccak256("eip1967.approved.targets")) - 1);
event FirewallAdminUpdated(address newAdmin);
event FirewallUpdated(address newFirewall);
modifier firewallProtected() {
address firewall = _getAddressBySlot(FIREWALL_STORAGE_SLOT);
if (firewall == address(0)) {
_;
return;
}
uint256 value = _msgValue();
IFirewall(firewall).preExecution(_msgSender(), _msgData(), value);
_;
IFirewall(firewall).postExecution(_msgSender(), _msgData(), value);
}
modifier firewallProtectedCustom(bytes memory data) {
address firewall = _getAddressBySlot(FIREWALL_STORAGE_SLOT);
if (firewall == address(0)) {
_;
return;
}
uint256 value = _msgValue();
IFirewall(firewall).preExecution(_msgSender(), data, value);
_;
IFirewall(firewall).postExecution(_msgSender(), data, value);
}
modifier firewallProtectedSig(bytes4 selector) {
address firewall = _getAddressBySlot(FIREWALL_STORAGE_SLOT);
if (firewall == address(0)) {
_;
return;
}
uint256 value = _msgValue();
IFirewall(firewall).preExecution(_msgSender(), abi.encodePacked(selector), value);
_;
IFirewall(firewall).postExecution(_msgSender(), abi.encodePacked(selector), value);
}
modifier invariantProtected() {
address firewall = _getAddressBySlot(FIREWALL_STORAGE_SLOT);
if (firewall == address(0)) {
_;
return;
}
uint256 value = _msgValue();
bytes32[] memory storageSlots = IFirewall(firewall).preExecutionPrivateInvariants(_msgSender(), _msgData(), value);
bytes32[] memory preValues = _readStorage(storageSlots);
_;
bytes32[] memory postValues = _readStorage(storageSlots);
IFirewall(firewall).postExecutionPrivateInvariants(_msgSender(), _msgData(), value, preValues, postValues);
}
modifier onlyApprovedTarget(address target) {
bytes32 _slot = keccak256(abi.encode(APPROVED_TARGETS_MAPPING_SLOT, target));
bool isApprovedTarget = _getValueBySlot(_slot) != bytes32(0);
require(isApprovedTarget, "FirewallConsumer: Not approved target");
require(ERC165Checker.supportsERC165InterfaceUnchecked(target, SUPPORTS_APPROVE_VIA_SIGNATURE_INTERFACE_ID));
_;
}
modifier onlyFirewallAdmin() {
require(msg.sender == _getAddressBySlot(FIREWALL_ADMIN_STORAGE_SLOT), "FirewallConsumer: not firewall admin");
_;
}
constructor(
address _firewall,
address _firewallAdmin
) {
_setAddressBySlot(FIREWALL_STORAGE_SLOT, _firewall);
_setAddressBySlot(FIREWALL_ADMIN_STORAGE_SLOT, _firewallAdmin);
}
function safeFunctionCall(
address target,
bytes calldata targetPayload,
bytes calldata data
) external payable onlyApprovedTarget(target) {
(bool success, ) = target.call(targetPayload);
require(success);
require(msg.sender == _msgSender(), "FirewallConsumer: No meta transactions");
Address.functionDelegateCall(address(this), data);
}
function setApprovedTarget(address target, bool status) external onlyFirewallAdmin {
bytes32 _slot = keccak256(abi.encode(APPROVED_TARGETS_MAPPING_SLOT, target));
assembly {
sstore(_slot, status)
}
}
function firewallAdmin() external override view returns (address) {
return _getAddressBySlot(FIREWALL_ADMIN_STORAGE_SLOT);
}
function setFirewall(address _firewall) external onlyFirewallAdmin {
_setAddressBySlot(FIREWALL_STORAGE_SLOT, _firewall);
emit FirewallUpdated(_firewall);
}
function setFirewallAdmin(address _firewallAdmin) external onlyFirewallAdmin {
require(_firewallAdmin != address(0), "FirewallConsumer: zero address");
_setAddressBySlot(NEW_FIREWALL_ADMIN_STORAGE_SLOT, _firewallAdmin);
}
function acceptFirewallAdmin() external {
require(msg.sender == _getAddressBySlot(NEW_FIREWALL_ADMIN_STORAGE_SLOT), "FirewallConsumer: not new admin");
_setAddressBySlot(FIREWALL_ADMIN_STORAGE_SLOT, msg.sender);
emit FirewallAdminUpdated(msg.sender);
}
function _msgValue() internal view returns (uint256 value) {
assembly {
value := callvalue()
}
}
function _readStorage(bytes32[] memory storageSlots) internal view returns (bytes32[] memory) {
uint256 slotsLength = storageSlots.length;
bytes32[] memory values = new bytes32[](slotsLength);
for (uint256 i = 0; i < slotsLength; i++) {
bytes32 slotValue = _getValueBySlot(storageSlots[i]);
values[i] = slotValue;
}
return values;
}
function _setAddressBySlot(bytes32 _slot, address _address) internal {
assembly {
sstore(_slot, _address)
}
}
function _getAddressBySlot(bytes32 _slot) internal view returns (address _address) {
assembly {
_address := sload(_slot)
}
}
function _getValueBySlot(bytes32 _slot) internal view returns (bytes32 _value) {
assembly {
_value := sload(_slot)
}
}
}
文件 12 的 24:IERC165.sol
pragma solidity ^0.8.0;
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
文件 13 的 24:IERC2981.sol
pragma solidity ^0.8.0;
import "../utils/introspection/IERC165.sol";
interface IERC2981 is IERC165 {
function royaltyInfo(
uint256 tokenId,
uint256 salePrice
) external view returns (address receiver, uint256 royaltyAmount);
}
文件 14 的 24:IERC721.sol
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
interface IERC721 is IERC165 {
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
function balanceOf(address owner) external view returns (uint256 balance);
function ownerOf(uint256 tokenId) external view returns (address owner);
function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
function safeTransferFrom(address from, address to, uint256 tokenId) external;
function transferFrom(address from, address to, uint256 tokenId) external;
function approve(address to, uint256 tokenId) external;
function setApprovalForAll(address operator, bool approved) external;
function getApproved(uint256 tokenId) external view returns (address operator);
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
文件 15 的 24:IERC721Enumerable.sol
pragma solidity ^0.8.0;
import "../IERC721.sol";
interface IERC721Enumerable is IERC721 {
function totalSupply() external view returns (uint256);
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
function tokenByIndex(uint256 index) external view returns (uint256);
}
文件 16 的 24:IFirewall.sol
pragma solidity ^0.8;
interface IFirewall {
function preExecution(address sender, bytes memory data, uint256 value) external;
function postExecution(address sender, bytes memory data, uint256 value) external;
function preExecutionPrivateInvariants(address sender, bytes memory data, uint256 value) external returns (bytes32[] calldata);
function postExecutionPrivateInvariants(
address sender,
bytes memory data,
uint256 value,
bytes32[] calldata preValues,
bytes32[] calldata postValues
) external;
}
文件 17 的 24:IFirewallConsumer.sol
pragma solidity ^0.8;
interface IFirewallConsumer {
function firewallAdmin() external returns (address);
}
文件 18 的 24:ILockDealNFT.sol
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
import "./IProvider.sol";
import "./IVaultManager.sol";
interface ILockDealNFT is IERC721Enumerable {
function approvedContracts(address contractAddress) external view returns (bool);
function mintAndTransfer(
address owner,
address token,
uint256 amount,
IProvider provider
) external returns (uint256 poolId);
function safeMintAndTransfer(
address owner,
address token,
address from,
uint256 amount,
IProvider provider,
bytes calldata data
) external returns (uint256 poolId);
function cloneVaultId(uint256 destinationPoolId, uint256 sourcePoolId) external;
function mintForProvider(address owner, IProvider provider) external returns (uint256 poolId);
function getData(uint256 poolId) external view returns (BasePoolInfo memory poolInfo);
function getFullData(uint256 poolId) external view returns (BasePoolInfo[] memory poolInfo);
function tokenOf(uint256 poolId) external view returns (address token);
function vaultManager() external view returns (IVaultManager);
function poolIdToProvider(uint256 poolId) external view returns (IProvider provider);
function getWithdrawableAmount(uint256 poolId) external view returns (uint256 withdrawalAmount);
struct BasePoolInfo {
IProvider provider;
string name;
uint256 poolId;
uint256 vaultId;
address owner;
address token;
uint256[] params;
}
}
文件 19 的 24:IProvider.sol
pragma solidity ^0.8.0;
interface IProvider {
event UpdateParams(uint256 indexed poolId, uint256[] params);
function withdraw(uint256 tokenId) external returns (uint256 withdrawnAmount, bool isFinal);
function split(uint256 oldPoolId, uint256 newPoolId, uint256 ratio) external;
function registerPool(uint256 poolId, uint256[] calldata params) external;
function getParams(uint256 poolId) external view returns (uint256[] memory params);
function getWithdrawableAmount(uint256 poolId) external view returns (uint256 withdrawalAmount);
function currentParamsTargetLength() external view returns (uint256);
function name() external view returns (string memory);
function getSubProvidersPoolIds(uint256 poolID) external view returns (uint256[] memory poolIds);
}
文件 20 的 24:ISimpleProvider.sol
pragma solidity ^0.8.0;
import "./IProvider.sol";
interface ISimpleProvider is IProvider {
function withdraw(uint256 poolId, uint256 amount) external returns (uint256 withdrawnAmount, bool isFinal);
}
文件 21 的 24:IVaultManager.sol
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/interfaces/IERC2981.sol";
interface IVaultManager is IERC2981 {
function depositByToken(address _tokenAddress, uint _amount) external returns (uint vaultId);
function safeDeposit(
address _tokenAddress,
uint _amount,
address _from,
bytes memory _signature
) external returns (uint vaultId);
function withdrawByVaultId(uint _vaultId, address to, uint _amount) external;
function vaultIdToTokenAddress(uint _vaultId) external view returns (address token);
function vaultIdToTradeStartTime(uint256 _vaultId) external view returns (uint256 startTime);
}
文件 22 的 24:ProviderModifiers.sol
pragma solidity ^0.8.0;
import "./ProviderState.sol";
import "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
abstract contract ProviderModifiers is ProviderState {
modifier onlyProvider() {
_onlyProvider();
_;
}
modifier validParamsLength(uint256 paramsLength, uint256 minLength) {
_validParamsLength(paramsLength, minLength);
_;
}
modifier onlyNFT() {
_onlyNFT();
_;
}
modifier validProviderAssociation(uint256 poolId, IProvider provider) {
_validProvider(poolId, provider);
_;
}
modifier validProviderId(uint256 poolId) {
_validProvider(poolId, this);
_;
}
modifier validAddressesLength(uint256 addressLength, uint256 minLength) {
_validAddressLength(addressLength, minLength);
_;
}
function _validAddressLength(uint256 addressLength, uint256 minLength) internal pure {
require(addressLength >= minLength, "invalid addresses length");
}
function _validProvider(uint256 poolId, IProvider provider) internal view {
require(lockDealNFT.poolIdToProvider(poolId) == provider, "Invalid provider poolId");
}
function _onlyNFT() internal view {
require(msg.sender == address(lockDealNFT), "only NFT contract can call this function");
}
function _validParamsLength(uint256 paramsLength, uint256 minLength) private pure {
require(paramsLength >= minLength, "invalid params length");
}
function _onlyProvider() private view {
require(lockDealNFT.approvedContracts(msg.sender), "invalid provider address");
}
function _validProviderInterface(IProvider provider, bytes4 interfaceId) internal view {
require(ERC165Checker.supportsInterface(address(provider), interfaceId), "invalid provider type");
}
}
文件 23 的 24:ProviderState.sol
pragma solidity ^0.8.0;
import "@poolzfinance/poolz-helper-v2/contracts/interfaces/ILockDealNFT.sol";
abstract contract ProviderState is IProvider {
string public name;
ILockDealNFT public lockDealNFT;
function currentParamsTargetLength() public view virtual returns (uint256) {
return 1;
}
function getSubProvidersPoolIds(uint256) public view virtual override returns (uint256[] memory poolIds) {
return poolIds;
}
}
文件 24 的 24:Refundble.sol
pragma solidity ^0.8.0;
library Refundble {
bytes4 public constant _INTERFACE_ID_REFUNDABLE = 0xb0754565;
}
{
"compilationTarget": {
"contracts/LockDealNFT/contracts/SimpleProviders/DealProvider/DealProvider.sol": "DealProvider"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"contract ILockDealNFT","name":"_nftContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"FirewallAdminUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newFirewall","type":"address"}],"name":"FirewallUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"params","type":"uint256[]"}],"name":"UpdateParams","type":"event"},{"inputs":[],"name":"acceptFirewallAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"params","type":"uint256[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"createNewPool","outputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentParamsTargetLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firewallAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"getParams","outputs":[{"internalType":"uint256[]","name":"params","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getSubProvidersPoolIds","outputs":[{"internalType":"uint256[]","name":"poolIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"getWithdrawableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockDealNFT","outputs":[{"internalType":"contract ILockDealNFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolIdToAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256[]","name":"params","type":"uint256[]"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"targetPayload","type":"bytes"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeFunctionCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setApprovedTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_firewall","type":"address"}],"name":"setFirewall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_firewallAdmin","type":"address"}],"name":"setFirewallAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"oldPoolId","type":"uint256"},{"internalType":"uint256","name":"newPoolId","type":"uint256"},{"internalType":"uint256","name":"ratio","type":"uint256"}],"name":"split","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"withdrawnAmount","type":"uint256"},{"internalType":"bool","name":"isFinal","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"withdrawnAmount","type":"uint256"},{"internalType":"bool","name":"isFinal","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]