编译器
0.8.17+commit.8df45f5f
文件 1 的 13:Deal.sol
pragma solidity ^0.8.17;
import './DealPointRef.sol';
struct Deal {
uint256 state;
address owner1;
address owner2;
uint256 pointsCount;
}
文件 2 的 13:DealPointData.sol
pragma solidity ^0.8.17;
struct DealPointData {
address controller;
uint256 id;
uint256 dealPointTypeId;
uint256 dealId;
address from;
address to;
uint256 withdrawTimer;
uint256 withdrawTime;
address owner;
uint256 value;
uint256 balance;
uint256 fee;
address tokenAddress;
bool isSwapped;
bool isExecuted;
}
文件 3 的 13:DealPointRef.sol
pragma solidity ^0.8.17;
struct DealPointRef {
address controller;
uint256 id;
}
文件 4 的 13:DealsController.sol
pragma solidity ^0.8.17;
import '../lib/factories/HasFactories.sol';
import './IDealsController.sol';
import './IDealPointsController.sol';
import './Deal.sol';
import './DealPointRef.sol';
import './DealPointData.sol';
abstract contract DealsController is IDealsController, HasFactories {
mapping(uint256 => Deal) internal _deals;
mapping(uint256 => mapping(uint256 => DealPointRef)) internal _dealPoints;
uint256 internal _dealsCount;
uint256 internal _totalDealPointsCount;
uint256 constant dealPointsLimit = 20;
mapping(uint256 => uint256) internal _swapTimes;
modifier onlyEditDealState(uint256 dealId) {
require(_deals[dealId].state == 1, 'deal is not in edit state');
_;
}
modifier onlyExecutionDealState(uint256 dealId) {
require(_deals[dealId].state == 2, 'deal is not in execution state');
_;
}
function getTotalDealPointsCount() external view returns (uint256) {
return _totalDealPointsCount;
}
function createDeal(
address owner1,
address owner2
) external onlyFactory returns (uint256) {
Deal memory dealHeader = Deal(
1,
owner1,
owner2,
0
);
++_dealsCount;
_deals[_dealsCount] = dealHeader;
emit NewDeal(_dealsCount, owner1);
return _dealsCount;
}
function addDealPoint(
uint256 dealId,
address dealPointsController,
uint256 newPointId
) external onlyFactory onlyEditDealState(dealId) {
Deal storage deal = _deals[dealId];
require(deal.state == 1, 'only for editing deal state');
_dealPoints[dealId][deal.pointsCount] = DealPointRef(
dealPointsController,
newPointId
);
++deal.pointsCount;
require(
deal.pointsCount <= dealPointsLimit,
'deal points count exceeds of limit'
);
++_totalDealPointsCount;
}
function getDealHeader(uint256 dealId) external view returns (Deal memory) {
Deal memory header = _deals[dealId];
require(header.state > 0, 'deal is not exists');
return header;
}
function getDeal(
uint256 dealId
) external view override returns (Deal memory, DealPointData[] memory) {
Deal memory deal = _deals[dealId];
DealPointData[] memory points = new DealPointData[](deal.pointsCount);
for (uint256 i = 0; i < deal.pointsCount; ++i) {
points[i] = this.getDealPoint(dealId, i);
}
return (deal, points);
}
function isExecuted(uint256 dealId) external view returns (bool) {
Deal memory deal = _deals[dealId];
if (deal.pointsCount == 0) return false;
mapping(uint256 => DealPointRef) storage points = _dealPoints[dealId];
for (uint256 i = 0; i < deal.pointsCount; ++i) {
DealPointRef memory pointRef = points[i];
if (
!IDealPointsController(payable(pointRef.controller)).isExecuted(
pointRef.id
)
) return false;
}
return true;
}
function swap(uint256 dealId) external onlyExecutionDealState(dealId) {
Deal storage deal = _deals[dealId];
require(deal.pointsCount > 0, 'deal has no points');
_swapTimes[dealId] = block.timestamp;
mapping(uint256 => DealPointRef) storage points = _dealPoints[dealId];
for (uint256 i = 0; i < deal.pointsCount; ++i) {
DealPointRef memory pointRef = points[i];
require(
IDealPointsController(payable(pointRef.controller)).isExecuted(
pointRef.id
),
'there are not executed deal points'
);
}
deal.state = 3;
emit Swap(dealId);
}
function isSwapped(uint256 dealId) external view returns (bool) {
return _deals[dealId].state == 3;
}
function swapTime(uint256 dealId) external view returns (uint256) {
return _swapTimes[dealId];
}
function withdraw(uint256 dealId) external payable {
Deal storage deal = _deals[dealId];
require(deal.state > 0, 'deal id is not exists');
require(deal.pointsCount > 0, 'deal has no points');
require(
msg.sender == deal.owner1 || msg.sender == deal.owner2,
'only for deal member'
);
uint256 dif = msg.value;
mapping(uint256 => DealPointRef) storage points = _dealPoints[dealId];
bool withdrawed;
for (uint256 i = 0; i < deal.pointsCount; ++i) {
DealPointRef memory pointRef = points[i];
IDealPointsController controller = IDealPointsController(
payable(pointRef.controller)
);
if (controller.owner(pointRef.id) == msg.sender) {
if (block.timestamp < controller.withdrawTime(pointRef.id))
continue;
if (deal.state == 3 && controller.feeIsEthOnWithdraw()) {
uint256 v = controller.fee(pointRef.id);
controller.withdraw{ value: v }(pointRef.id);
dif -= v;
} else {
controller.withdraw(pointRef.id);
}
withdrawed = true;
}
}
require(withdrawed, 'nothing to withdraw');
if (dif > 0) {
(bool sent, ) = payable(msg.sender).call{ value: dif }('');
require(sent, 'sent ether error: ether is not sent');
}
if (deal.state != 3) emit Execute(dealId, msg.sender, false);
emit OnWithdraw(dealId, msg.sender);
}
function feeEthOnWithdraw(
uint256 dealId,
uint256 ownerNumber
) external view returns (uint256) {
uint256 fee;
Deal storage deal = _deals[dealId];
mapping(uint256 => DealPointRef) storage points = _dealPoints[dealId];
for (uint256 i = 0; i < deal.pointsCount; ++i) {
DealPointRef memory pointRef = points[i];
IDealPointsController controller = IDealPointsController(
payable(pointRef.controller)
);
if (ownerNumber == 1) {
if (controller.owner(pointRef.id) == deal.owner1) {
if (controller.feeIsEthOnWithdraw())
fee += controller.fee(pointRef.id);
}
} else if (ownerNumber == 2) {
if (controller.owner(pointRef.id) == deal.owner2) {
if (controller.feeIsEthOnWithdraw())
fee += controller.fee(pointRef.id);
}
}
}
return fee;
}
function getDealPoint(
uint256 dealId,
uint256 pointIndex
) external view returns (DealPointData memory) {
DealPointRef storage ref = _dealPoints[dealId][pointIndex];
IDealPointsController controller = IDealPointsController(
payable(ref.controller)
);
return
DealPointData(
ref.controller,
ref.id,
controller.dealPointTypeId(),
dealId,
controller.from(ref.id),
controller.to(ref.id),
controller.withdrawTimer(ref.id),
controller.withdrawTime(ref.id),
controller.owner(ref.id),
controller.value(ref.id),
controller.balance(ref.id),
controller.fee(ref.id),
controller.tokenAddress(ref.id),
controller.isSwapped(ref.id),
controller.isExecuted(ref.id)
);
}
function getDealPointsCount(
uint256 dealId
) external view returns (uint256) {
return _deals[dealId].pointsCount;
}
function getDealPoints(
uint256 dealId
) external view returns (DealPointRef[] memory) {
Deal memory deal = _deals[dealId];
DealPointRef[] memory res = new DealPointRef[](deal.pointsCount);
for (uint256 i = 0; i < deal.pointsCount; ++i)
res[i] = _dealPoints[dealId][i];
return res;
}
function stopDealEditing(
uint256 dealId
) external onlyFactory onlyEditDealState(dealId) {
_deals[dealId].state = 2;
}
function execute(uint256 dealId) external payable {
Deal storage deal = _deals[dealId];
require(deal.state == 2, 'only executing state');
bool isOpenSwapNotOwner;
if (deal.owner2 == address(0) && msg.sender != deal.owner1) {
deal.owner2 = msg.sender;
isOpenSwapNotOwner = true;
}
require(deal.pointsCount > 0, 'deal has no points');
uint256 dif = msg.value;
mapping(uint256 => DealPointRef) storage points = _dealPoints[dealId];
for (uint256 i = 0; i < deal.pointsCount; ++i) {
DealPointRef memory pointRef = points[i];
IDealPointsController controller = IDealPointsController(
payable(pointRef.controller)
);
address from = controller.from(pointRef.id);
if (
controller.to(pointRef.id) == address(0) && isOpenSwapNotOwner
) {
controller.setTo(pointRef.id, msg.sender);
continue;
}
if (
from == msg.sender || (from == address(0) && isOpenSwapNotOwner)
) {
uint256 v = controller.executeEtherValue(pointRef.id);
controller.execute{ value: v }(pointRef.id, msg.sender);
dif -= v;
}
}
if (dif > 0) {
(bool sent, ) = payable(msg.sender).call{ value: dif }('');
require(sent, 'sent ether error: ether is not sent');
}
emit Execute(dealId, msg.sender, true);
}
function executeEtherValue(
uint256 dealId,
uint256 ownerNumber
) external view returns (uint256) {
uint256 value;
Deal storage deal = _deals[dealId];
mapping(uint256 => DealPointRef) storage points = _dealPoints[dealId];
for (uint256 i = 0; i < deal.pointsCount; ++i) {
DealPointRef memory pointRef = points[i];
IDealPointsController controller = IDealPointsController(
payable(pointRef.controller)
);
if (ownerNumber == 1) {
if (controller.owner(pointRef.id) == deal.owner1) {
value += controller.executeEtherValue(pointRef.id);
}
} else if (ownerNumber == 2) {
if (controller.owner(pointRef.id) == deal.owner2) {
value += controller.executeEtherValue(pointRef.id);
}
}
}
return value;
}
}
文件 5 的 13:FeeSettingsDecorator.sol
pragma solidity ^0.8.17;
import './IFeeSettings.sol';
contract FeeSettingsDecorator is IFeeSettings {
IFeeSettings public immutable feeSettings;
constructor(address feeSettingsAddress) {
feeSettings = IFeeSettings(feeSettingsAddress);
}
function zeroFeeShare() external view virtual returns (uint256) {
return feeSettings.zeroFeeShare();
}
function feeAddress() external view virtual returns (address) {
return feeSettings.feeAddress();
}
function feePercent() external view virtual returns (uint256) {
return feeSettings.feePercent();
}
function feePercentFor(address account) external view returns (uint256) {
return feeSettings.feePercentFor(account);
}
function feeForCount(
address account,
uint256 count
) external view returns (uint256) {
return feeSettings.feeForCount(account, count);
}
function feeDecimals() external view returns (uint256) {
return feeSettings.feeDecimals();
}
function feeEth() external view virtual returns (uint256) {
return feeSettings.feeEth();
}
function feeEthFor(address account) external view returns (uint256) {
return feeSettings.feeEthFor(account);
}
}
文件 6 的 13:GigaSwap.sol
pragma solidity ^0.8.17;
import '../swapper/DealsController.sol';
import '../fee/FeeSettingsDecorator.sol';
contract GigaSwap is DealsController, FeeSettingsDecorator {
constructor(address feeSettingsAddress)
FeeSettingsDecorator(feeSettingsAddress)
{}
}
文件 7 的 13:HasFactories.sol
pragma solidity ^0.8.17;
import '../ownable/Ownable.sol';
import './IHasFactories.sol';
contract HasFactories is Ownable, IHasFactories {
mapping(address => bool) internal _factories;
modifier onlyFactory() {
require(_isFactory(msg.sender), 'only for factories');
_;
}
function isFactory(address addr) external view returns (bool) {
return _isFactory(addr);
}
function _isFactory(address addr) internal view returns (bool) {
if (addr == address(this)) return true;
return _factories[addr];
}
function addFactory(address factory) external onlyOwner {
_factories[factory] = true;
}
function removeFactory(address factory) external onlyOwner {
_factories[factory] = false;
}
function setFactories(address[] calldata addresses, bool isFactory_)
external
onlyOwner
{
uint256 len = addresses.length;
for (uint256 i = 0; i < len; ++i) {
_factories[addresses[i]] = isFactory_;
}
}
}
文件 8 的 13:IDealPointsController.sol
pragma solidity ^0.8.17;
interface IDealPointsController {
receive() external payable;
function dealPointTypeId() external pure returns (uint256);
function dealId(uint256 pointId) external view returns (uint256);
function tokenAddress(uint256 pointId) external view returns (address);
function from(uint256 pointId) external view returns (address);
function to(uint256 pointId) external view returns (address);
function withdrawTimer(uint256 pointId) external view returns (uint256);
function withdrawTime(uint256 positionId) external view returns (uint256);
function setTo(uint256 pointId, address account) external;
function value(uint256 pointId) external view returns (uint256);
function balance(uint256 pointId) external view returns (uint256);
function fee(uint256 pointId) external view returns (uint256);
function feeIsEthOnWithdraw() external pure returns (bool);
function owner(uint256 pointId) external view returns (address);
function dealsController() external view returns (address);
function isSwapped(uint256 pointId) external view returns (bool);
function isExecuted(uint256 pointId) external view returns (bool);
function execute(uint256 pointId, address addr) external payable;
function executeEtherValue(uint256 pointId) external view returns (uint256);
function withdraw(uint256 pointId) external payable;
}
文件 9 的 13:IDealsController.sol
pragma solidity ^0.8.17;
import '../fee/IFeeSettings.sol';
import '../lib/factories/IHasFactories.sol';
import './Deal.sol';
import './DealPointData.sol';
interface IDealsController is IFeeSettings, IHasFactories {
event NewDeal(uint256 indexed dealId, address indexed creator);
event Swap(uint256 indexed dealId);
event Execute(uint256 indexed dealId, address account, bool executed);
event OnWithdraw(uint256 indexed dealId, address indexed account);
function swap(uint256 dealId) external;
function isSwapped(uint256 dealId) external view returns (bool);
function swapTime(uint256 dealId) external view returns (uint256);
function getTotalDealPointsCount() external view returns (uint256);
function createDeal(
address owner1,
address owner2
) external returns (uint256);
function getDeal(
uint256 dealId
) external view returns (Deal memory, DealPointData[] memory);
function getDealHeader(uint256 dealId) external view returns (Deal memory);
function addDealPoint(
uint256 dealId,
address dealPointsController,
uint256 newPointId
) external;
function getDealPoint(
uint256 dealId,
uint256 pointIndex
) external view returns (DealPointData memory);
function getDealPointsCount(uint256 dealId) external view returns (uint256);
function isExecuted(uint256 dealId) external view returns (bool);
function withdraw(uint256 dealId) external payable;
function stopDealEditing(uint256 dealId) external;
function execute(uint256 dealId) external payable;
function executeEtherValue(
uint256 dealId,
uint256 ownerNumber
) external view returns (uint256);
function feeEthOnWithdraw(
uint256 dealId,
uint256 ownerNumber
) external view returns (uint256);
}
文件 10 的 13:IFeeSettings.sol
pragma solidity ^0.8.17;
interface IFeeSettings {
function feeAddress() external view returns (address);
function feePercent() external view returns (uint256);
function feePercentFor(address account) external view returns (uint256);
function feeForCount(
address account,
uint256 count
) external view returns (uint256);
function feeDecimals() external view returns (uint256);
function feeEth() external view returns (uint256);
function feeEthFor(address account) external view returns (uint256);
function zeroFeeShare() external view returns (uint256);
}
文件 11 的 13:IHasFactories.sol
pragma solidity ^0.8.17;
import '../ownable/IOwnable.sol';
interface IHasFactories is IOwnable {
function isFactory(address addr) external view returns (bool);
function addFactory(address factory) external;
function removeFactory(address factory) external;
function setFactories(address[] calldata addresses, bool isFactory_)
external;
}
文件 12 的 13:IOwnable.sol
pragma solidity ^0.8.17;
interface IOwnable {
function owner() external view returns (address);
function transferOwnership(address newOwner) external;
}
文件 13 的 13:Ownable.sol
pragma solidity ^0.8.17;
import './IOwnable.sol';
contract Ownable is IOwnable {
address _owner;
constructor() {
_owner = msg.sender;
}
modifier onlyOwner() {
require(_owner == msg.sender, 'caller is not the owner');
_;
}
function owner() external virtual view returns (address) {
return _owner;
}
function transferOwnership(address newOwner) external override onlyOwner {
_owner = newOwner;
}
}
{
"compilationTarget": {
"contracts/swapper/GigaSwap.sol": "GigaSwap"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"feeSettingsAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"dealId","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"executed","type":"bool"}],"name":"Execute","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"dealId","type":"uint256"},{"indexed":true,"internalType":"address","name":"creator","type":"address"}],"name":"NewDeal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"dealId","type":"uint256"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"OnWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"Swap","type":"event"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"},{"internalType":"address","name":"dealPointsController","type":"address"},{"internalType":"uint256","name":"newPointId","type":"uint256"}],"name":"addDealPoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"addFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner1","type":"address"},{"internalType":"address","name":"owner2","type":"address"}],"name":"createDeal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"},{"internalType":"uint256","name":"ownerNumber","type":"uint256"}],"name":"executeEtherValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"feeEthFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"},{"internalType":"uint256","name":"ownerNumber","type":"uint256"}],"name":"feeEthOnWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"feeForCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"feePercentFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSettings","outputs":[{"internalType":"contract IFeeSettings","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"getDeal","outputs":[{"components":[{"internalType":"uint256","name":"state","type":"uint256"},{"internalType":"address","name":"owner1","type":"address"},{"internalType":"address","name":"owner2","type":"address"},{"internalType":"uint256","name":"pointsCount","type":"uint256"}],"internalType":"struct Deal","name":"","type":"tuple"},{"components":[{"internalType":"address","name":"controller","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"dealPointTypeId","type":"uint256"},{"internalType":"uint256","name":"dealId","type":"uint256"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"withdrawTimer","type":"uint256"},{"internalType":"uint256","name":"withdrawTime","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"bool","name":"isSwapped","type":"bool"},{"internalType":"bool","name":"isExecuted","type":"bool"}],"internalType":"struct DealPointData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"getDealHeader","outputs":[{"components":[{"internalType":"uint256","name":"state","type":"uint256"},{"internalType":"address","name":"owner1","type":"address"},{"internalType":"address","name":"owner2","type":"address"},{"internalType":"uint256","name":"pointsCount","type":"uint256"}],"internalType":"struct Deal","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"},{"internalType":"uint256","name":"pointIndex","type":"uint256"}],"name":"getDealPoint","outputs":[{"components":[{"internalType":"address","name":"controller","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"dealPointTypeId","type":"uint256"},{"internalType":"uint256","name":"dealId","type":"uint256"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"withdrawTimer","type":"uint256"},{"internalType":"uint256","name":"withdrawTime","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"bool","name":"isSwapped","type":"bool"},{"internalType":"bool","name":"isExecuted","type":"bool"}],"internalType":"struct DealPointData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"getDealPoints","outputs":[{"components":[{"internalType":"address","name":"controller","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"internalType":"struct DealPointRef[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"getDealPointsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDealPointsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"isExecuted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"isSwapped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"removeFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isFactory_","type":"bool"}],"name":"setFactories","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"stopDealEditing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"swapTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dealId","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"zeroFeeShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]