编译器
0.8.17+commit.8df45f5f
文件 1 的 12:Auction.sol
pragma solidity ^0.8.9;
import { AuctionOwnable } from "./utils/AuctionOwnable.sol";
import { ERC165Checker } from "./oz-simplified/ERC165Checker.sol";
import { ECDSA } from "./oz-simplified/ECDSA.sol";
import { IEscrow } from "./interfaces/IEscrow.sol";
import { ISellerToken } from './interfaces/ISellerToken.sol';
import { ReentrancyGuard } from 'solmate/src/utils/ReentrancyGuard.sol';
import { Errors } from "./library/errors/Errors.sol";
enum BidReturnValue {
Success,
BidTooLow,
AuctionClosed,
ExtendedBidding
}
enum AuctionStatus {
Closed,
Open,
InExtended,
Ended,
DoesntExist,
Cancelled
}
contract Auction is AuctionOwnable, ReentrancyGuard {
event AuctionAdded(uint256 indexed auctionId, uint48 startTime, uint48 endTime, uint256 indexed claimId, uint256 indexed tokenId);
event AuctionChanged(uint256 indexed auctionId, uint48 startTime, uint48 endTime, uint256 indexed claimId);
event AuctionEnded(uint256 indexed auctionId, address indexed winner, uint128 indexed bid);
event AuctionAborted(uint256 indexed auctionId, bool indexed refunded, string reason);
event AuctionProceedsClaimed(uint256 indexed auctionId, address indexed seller, address recipient, uint128 indexed amount);
event AuctionLotClaimed(uint256 indexed auctionId, uint256 indexed claimId, address indexed winner, address recipient);
event AuctionClosed(uint256 indexed auctionId);
event AuctionInExtendedBidding(uint indexed auctionId);
event BidTooLow(uint256 indexed auctionId, uint128 indexed bid, uint128 indexed minHighBid);
event Bid(
uint256 indexed auctionId,
uint256 when,
address indexed bidder,
uint128 indexed amount
);
struct AuctionData {
uint256 claimId;
uint256 tokenId;
uint48 startTime;
uint48 endTime;
uint32 extendedBiddingTime;
uint64 minBidIncrement;
bool active;
bool claimed;
bool cancelled;
uint8 basis;
address highBidder;
uint64 highBid;
uint32 lastBidDelta;
}
IEscrow private _escrow;
ISellerToken public _sellerToken;
uint256 private _lastId;
mapping(uint256 => AuctionData) private _auctions;
mapping(uint256 => uint256) public _tokenAuctionMap;
bool private _requireAuctionVerification = true;
constructor() {
__Ownable_init();
}
function setup(address escrow, address sellerToken_, bool requireAuctionVerification_) public onlyOwner {
if (!ERC165Checker.supportsInterface(escrow, type(IEscrow).interfaceId)) {
revert Errors.InterfaceNotSupported();
}
_escrow = IEscrow(escrow);
_requireAuctionVerification = requireAuctionVerification_;
_sellerToken = ISellerToken(sellerToken_);
}
function addAuction(
uint48 startTime,
uint48 endTime,
uint32 extendedBiddingTime,
uint64 startBid,
uint64 increment,
uint8 basis,
uint256 claimId,
address seller
) public onlyAuctioneer nonReentrant {
if (endTime < block.timestamp) {
revert Errors.OutOfRange(endTime);
}
uint256 auctionId = ++_lastId;
uint256 tokenId = _sellerToken.mint(seller, auctionId);
_auctions[ auctionId ] = AuctionData({
claimId: claimId,
tokenId: tokenId,
startTime: startTime,
endTime: endTime,
extendedBiddingTime: extendedBiddingTime,
minBidIncrement: increment,
active: true,
basis: basis,
lastBidDelta: uint32(0),
highBidder: address(0),
highBid: startBid,
claimed: false,
cancelled: false
});
emit AuctionAdded(auctionId, startTime, endTime, claimId, tokenId);
}
function editAuction(
uint256 auctionId,
uint48 startTime,
uint48 endTime,
uint32 extendedBiddingTime,
uint64 increment,
uint8 basis,
uint256 claimId
) public onlyAuctioneer {
_auctions[auctionId].startTime = startTime;
_auctions[auctionId].endTime = endTime;
_auctions[auctionId].extendedBiddingTime = extendedBiddingTime;
_auctions[auctionId].minBidIncrement = increment;
_auctions[auctionId].basis = basis;
_auctions[auctionId].claimId = claimId;
emit AuctionChanged(auctionId, startTime, endTime, claimId);
}
function abortAuction(uint256 auctionId, bool issueRefund, string memory reason) public onlyAuctioneer {
_auctions[auctionId].active = false;
_auctions[auctionId].cancelled = true;
_sellerToken.burn(_auctions[auctionId].tokenId);
if (issueRefund) {
address highBidder = _auctions[auctionId].highBidder;
if (highBidder != address(0)) {
uint8 basis = _auctions[auctionId].basis;
uint256 premium = basis == 0 ? 0 : _auctions[auctionId].highBid * basis / 100;
_escrow.withdraw(highBidder, _auctions[auctionId].highBid + premium);
}
}
emit AuctionAborted(auctionId, issueRefund, reason);
}
function claimLot(uint256 auctionId, address deliverTo) public nonReentrant {
AuctionData storage auction = _auctions[ auctionId ];
if (_requireAuctionVerification) {
if ( auction.active ) {
revert Errors.AuctionActive(auctionId);
}
}
if (block.timestamp < auction.endTime + 1) {
revert Errors.AuctionActive(auctionId);
}
if (_auctionInExtendedBidding(auction)) {
revert Errors.AuctionActive(auctionId);
}
if (auction.cancelled) {
revert Errors.AuctionAborted(auctionId);
}
if (auction.claimed) {
revert Errors.AlreadyClaimed(auctionId);
}
if (_msgSender() != auction.highBidder) {
revert Errors.BadSender(auction.highBidder, _msgSender());
}
if (false == _requireAuctionVerification) {
_escrow.authorizeClaim(auction.claimId, auction.highBidder);
}
auction.claimed = true;
_escrow.claimFor(_msgSender(), auction.claimId, deliverTo);
emit AuctionLotClaimed(auctionId, auction.claimId, _msgSender(), deliverTo);
}
function claimProceeds(uint256 auctionId, address deliverTo) public nonReentrant {
AuctionData storage auction = _auctions[ auctionId ];
if (_requireAuctionVerification) {
if ( true == auction.active ) {
revert Errors.AuctionActive(auctionId);
}
}
if (block.timestamp < auction.endTime + 1) {
revert Errors.AuctionActive(auctionId);
}
if (_auctionInExtendedBidding(auction)) {
revert Errors.AuctionActive(auctionId);
}
if (auction.cancelled) {
revert Errors.AuctionAborted(auctionId);
}
address tokenOwner = _sellerToken.ownerOf(auction.tokenId);
if ( _msgSender() != tokenOwner) {
revert Errors.BadSender(tokenOwner, _msgSender());
}
_sellerToken.burn(auction.tokenId);
_escrow.withdraw(deliverTo, auction.highBid);
emit AuctionProceedsClaimed(auctionId, _msgSender(), deliverTo, auction.highBid);
}
function confirmAuctions(uint256[] calldata auctionIds, address[] calldata premiumRecipients) public nonReentrant onlyAuctioneer {
uint256 auctionLength = auctionIds.length;
if (auctionLength != premiumRecipients.length) {
revert Errors.ArrayMismatch();
}
for (uint i = 0; i < auctionLength;) {
confirmAuction(auctionIds[ i ], premiumRecipients[ i ]);
unchecked {
++i;
}
}
}
function confirmAuction(uint256 auctionId, address premiumRecipient) public nonReentrant onlyAuctioneer {
AuctionData storage auction = _auctions[auctionId];
if (block.timestamp < auction.endTime + 1) {
revert Errors.AuctionActive(auctionId);
}
if (_auctionInExtendedBidding(auction)) {
revert Errors.AuctionActive(auctionId);
}
if (auction.cancelled) {
revert Errors.AuctionAborted(auctionId);
}
if (false == auction.active) {
revert Errors.AuctionInactive(auctionId);
}
auction.active = false;
emit AuctionEnded(auctionId, auction.highBidder, auction.highBid);
if (auction.highBidder != address(0)) {
if (false == auction.claimed && _requireAuctionVerification) {
_escrow.authorizeClaim(auction.claimId, auction.highBidder);
}
if (auction.basis > 0) {
if (address(0) == premiumRecipient) {
revert Errors.AddressTarget(premiumRecipient);
}
_escrow.withdraw(premiumRecipient, auction.highBid * auction.basis / 100);
}
}
}
function getAuctionMetadata(uint256 auctionId) public view returns (AuctionData memory) {
return _auctions[auctionId];
}
function bid(
uint256 auctionId,
uint64 amount,
bool revertOnFail
) public nonReentrant {
_bid(_msgSender(), auctionId, amount, revertOnFail);
}
function multiBid(
uint256[] memory auctionIds,
uint64[] memory amounts,
bool revertOnFail
) public nonReentrant {
uint256 arrayLength = auctionIds.length;
if (arrayLength != amounts.length) {
revert Errors.ArrayMismatch();
}
address bidder = _msgSender();
for (uint256 i = 0; i < arrayLength;) {
_bid(bidder, auctionIds[i], amounts[i], revertOnFail);
unchecked {
++i;
}
}
}
function auctionStatus(uint256 auctionId) public view returns(AuctionStatus) {
AuctionData storage a = _auctions[ auctionId ];
if (a.startTime == 0) {
return AuctionStatus.DoesntExist;
}
if (a.cancelled) {
return AuctionStatus.Cancelled;
}
if (block.timestamp < a.startTime) {
return AuctionStatus.Closed;
}
if (block.timestamp < a.endTime + 1) {
return AuctionStatus.Open;
}
if (_auctionInExtendedBidding(a)) {
return AuctionStatus.InExtended;
}
return AuctionStatus.Ended;
}
function _bid(
address bidder,
uint256 auctionId,
uint64 amount,
bool revertOnError
) internal returns (BidReturnValue) {
uint256 timestamp = block.timestamp;
AuctionData storage auction = _auctions[ auctionId ];
if (timestamp > auction.endTime) {
if ( false == _auctionInExtendedBidding(auction)) {
if (revertOnError) {
revert Errors.AuctionClosed(auctionId);
}
emit AuctionClosed(auctionId);
return BidReturnValue.AuctionClosed;
}
}
if (false == auction.active) {
if (revertOnError) {
revert Errors.AuctionClosed(auctionId);
}
emit AuctionClosed(auctionId);
return BidReturnValue.AuctionClosed;
}
if (timestamp < auction.startTime) {
if (revertOnError) {
revert Errors.AuctionClosed(auctionId);
}
emit AuctionClosed(auctionId);
return BidReturnValue.AuctionClosed;
}
uint64 previousAmount = auction.highBid;
if (amount < previousAmount + auction.minBidIncrement) {
if (revertOnError) {
revert Errors.BidTooLow(auctionId, amount, previousAmount + auction.minBidIncrement);
}
emit BidTooLow(auctionId, amount, previousAmount + auction.minBidIncrement);
return BidReturnValue.BidTooLow;
}
uint256 premium = auction.basis == 0 ? 0 : amount * auction.basis / 100;
_escrow.deposit(bidder, amount + premium);
address prevBidder = auction.highBidder;
if (prevBidder != address(0)) {
uint256 prevPremium = auction.basis == 0 ? 0 : previousAmount * auction.basis / 100;
_escrow.withdraw(prevBidder, previousAmount + prevPremium);
}
auction.highBidder = bidder;
auction.highBid = amount;
if (auction.endTime < timestamp) {
auction.lastBidDelta = uint32(timestamp - auction.endTime);
}
emit Bid(auctionId, timestamp, bidder, amount);
return BidReturnValue.Success;
}
function _auctionInExtendedBidding(AuctionData storage auction) internal view returns(bool) {
uint tmpEndTime = auction.endTime;
if (block.timestamp > auction.endTime) {
uint tmpExtTime = auction.extendedBiddingTime;
if (0 < tmpExtTime) {
uint extendedEndTime = tmpEndTime + tmpExtTime;
if (0 < auction.lastBidDelta) {
extendedEndTime = tmpEndTime + auction.lastBidDelta + tmpExtTime;
}
if (block.timestamp > extendedEndTime) {
return false;
}
return true;
}
}
return false;
}
}
文件 2 的 12:AuctionOwnable.sol
pragma solidity >=0.8.4 <0.9.0;
import { Context } from "../oz-simplified/Context.sol";
import { Initializable } from "../oz-simplified/Initializable.sol";
import { Errors } from "../library/errors/Errors.sol";
abstract contract AuctionOwnable is Initializable, Context {
address private _owner;
address private _auctioneer;
address private _broker;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
function __Ownable_init() internal initializer {
__Context_init_unchained();
__Ownable_init_unchained();
}
function __Ownable_init_unchained() internal initializer {
_setOwner(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
function isAuctioneer(address account) public view virtual returns (bool) {
return account == _auctioneer;
}
function isBroker(address account) public view virtual returns (bool) {
return account == _broker;
}
modifier onlyOwner() {
if (_owner != _msgSender()) revert Errors.UserPermissions();
_;
}
modifier onlyAuctioneer() {
if (
_auctioneer != _msgSender()
&& _owner != _msgSender()
) revert Errors.UserPermissions();
_;
}
modifier onlyBroker() {
if (
_broker != _msgSender()
&& _owner != _msgSender()
) revert Errors.UserPermissions();
_;
}
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) revert Errors.AddressTarget(newOwner);
_setOwner(newOwner);
}
function setAuctioneer(address newAuctioneer) public virtual onlyOwner {
_auctioneer = newAuctioneer;
}
function setBroker(address newBroker) public virtual onlyOwner {
_broker = newBroker;
}
function _setOwner(address newOwner) internal {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
文件 3 的 12:Context.sol
pragma solidity >=0.8.0 <0.9.0;
import { Initializable } from "./Initializable.sol";
abstract contract Context is Initializable {
function __Context_init() internal initializer {
__Context_init_unchained();
}
function __Context_init_unchained() internal initializer {
}
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
文件 4 的 12:ECDSA.sol
pragma solidity ^0.8.0;
import { Errors } from "../library/errors/Errors.sol";
library ECDSA {
enum RecoverError {
NoError,
InvalidSignature,
InvalidSignatureLength,
InvalidSignatureS,
InvalidSignatureV
}
function _throwError(RecoverError error) private pure {
if (error == RecoverError.NoError) {
return;
} else if (error == RecoverError.InvalidSignature) {
revert Errors.InvalidSignature();
} else if (error == RecoverError.InvalidSignatureLength) {
revert Errors.InvalidSignatureLength();
} else if (error == RecoverError.InvalidSignatureS) {
revert Errors.InvalidSignatureS();
}
}
function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
if (signature.length == 65) {
bytes32 r;
bytes32 s;
uint8 v;
assembly {
r := mload(add(signature, 0x20))
s := mload(add(signature, 0x40))
v := byte(0, mload(add(signature, 0x60)))
}
return tryRecover(hash, v, r, s);
} else {
return (address(0), RecoverError.InvalidSignatureLength);
}
}
function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
(address recovered, RecoverError error) = tryRecover(hash, signature);
_throwError(error);
return recovered;
}
function tryRecover(
bytes32 hash,
uint8 v,
bytes32 r,
bytes32 s
) internal pure returns (address, RecoverError) {
if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
return (address(0), RecoverError.InvalidSignatureS);
}
address signer = ecrecover(hash, v, r, s);
if (signer == address(0)) {
return (address(0), RecoverError.InvalidSignature);
}
return (signer, RecoverError.NoError);
}
function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
}
function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
}
}
文件 5 的 12:ERC165Checker.sol
pragma solidity ^0.8.0;
import "../interfaces/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 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;
}
}
文件 6 的 12:Errors.sol
pragma solidity >=0.8.4 <0.9.0;
library Errors {
error LinkError();
error ArrayMismatch();
error OutOfRange(uint256 value);
error OutOfRangeSigned(int256 value);
error UnsignedOverflow(uint256 value);
error SignedOverflow(int256 value);
error DuplicateCall();
error NotAContract();
error InterfaceNotSupported();
error NotInitialized();
error AlreadyInitialized();
error BadSender(address expected, address caller);
error AddressTarget(address target);
error UserPermissions();
error InvalidHash();
error InvalidSignature();
error InvalidSignatureLength();
error InvalidSignatureS();
error InsufficientBalance(uint256 available, uint256 required);
error InsufficientSupply(uint256 supply, uint256 available, int256 requested);
error InsufficientAvailable(uint256 available, uint256 requested);
error InvalidToken(uint256 tokenId);
error TokenNotMintable(uint256 tokenId);
error InvalidTokenType();
error ERC1155Receiver();
error ContractPaused();
error PaymentFailed(uint256 amount);
error IncorrectPayment(uint256 required, uint256 provided);
error TooManyForTransaction(uint256 mintLimit, uint256 amount);
error AuctionInactive(uint256 auctionId);
error AuctionActive(uint256 auctionId);
error InvalidBid(uint256 auctionId, uint256 amount);
error BidTooLow(uint256 auctionId, uint256 bid, uint256 minBid);
error AuctionClosed(uint256 auctionId);
error AuctionInExtendedBidding(uint256 auctionId);
error AuctionAborted(uint256 auctionId);
error AlreadyClaimed(uint256 lotId);
}
文件 7 的 12:IERC165.sol
pragma solidity ^0.8.0;
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
文件 8 的 12:IERC721.sol
pragma solidity ^0.8.0;
import "./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);
}
文件 9 的 12:IEscrow.sol
pragma solidity ^0.8.9;
interface IEscrow {
event Withdrawal(uint256 indexed amount, address indexed withdrawer);
event Deposit(uint256 indexed amount, address indexed depositer);
event ClaimAuthorized(uint256 indexed claimId, address indexed claimant);
event PrizeAdded(uint256 indexed claimId);
event PrizeRemoved(uint256 indexed claimId, address indexed recipient);
event PrizeReceived(uint256 indexed claimId, address indexed recipient);
function currencyBalance() external returns (uint256);
function deposit(address spender, uint256 amount) external;
function withdraw(address recipient, uint256 amount) external;
function authorizeClaim(uint256 claimId, address claimant) external;
function claimFor(address claimant, uint256 claimId, address recipient) external;
}
文件 10 的 12:ISellerToken.sol
pragma solidity ^0.8.0;
import './IERC721.sol';
interface ISellerToken is IERC721 {
function mint(address dest, uint256 tokenId) external returns (uint256);
function burn(uint256 tokenId) external;
}
文件 11 的 12:Initializable.sol
pragma solidity >=0.8.4 <0.9.0;
import { Errors } from "../library/errors/Errors.sol";
abstract contract Initializable {
bool private _initialized;
bool private _initializing;
modifier initializer() {
if (!_initializing && _initialized) revert Errors.AlreadyInitialized();
bool isTopLevelCall = !_initializing;
if (isTopLevelCall) {
_initializing = true;
_initialized = true;
}
_;
if (isTopLevelCall) {
_initializing = false;
}
}
}
文件 12 的 12:ReentrancyGuard.sol
pragma solidity >=0.8.0;
abstract contract ReentrancyGuard {
uint256 private locked = 1;
modifier nonReentrant() virtual {
require(locked == 1, "REENTRANCY");
locked = 2;
_;
locked = 1;
}
}
{
"compilationTarget": {
"contracts/Auction.sol": "Auction"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressTarget","type":"error"},{"inputs":[{"internalType":"uint256","name":"lotId","type":"uint256"}],"name":"AlreadyClaimed","type":"error"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"ArrayMismatch","type":"error"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"AuctionAborted","type":"error"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"AuctionActive","type":"error"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"AuctionClosed","type":"error"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"AuctionInactive","type":"error"},{"inputs":[{"internalType":"address","name":"expected","type":"address"},{"internalType":"address","name":"caller","type":"address"}],"name":"BadSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"},{"internalType":"uint256","name":"bid","type":"uint256"},{"internalType":"uint256","name":"minBid","type":"uint256"}],"name":"BidTooLow","type":"error"},{"inputs":[],"name":"InterfaceNotSupported","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"OutOfRange","type":"error"},{"inputs":[],"name":"UserPermissions","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":true,"internalType":"bool","name":"refunded","type":"bool"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"AuctionAborted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":false,"internalType":"uint48","name":"startTime","type":"uint48"},{"indexed":false,"internalType":"uint48","name":"endTime","type":"uint48"},{"indexed":true,"internalType":"uint256","name":"claimId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"AuctionAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":false,"internalType":"uint48","name":"startTime","type":"uint48"},{"indexed":false,"internalType":"uint48","name":"endTime","type":"uint48"},{"indexed":true,"internalType":"uint256","name":"claimId","type":"uint256"}],"name":"AuctionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"AuctionClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":true,"internalType":"address","name":"winner","type":"address"},{"indexed":true,"internalType":"uint128","name":"bid","type":"uint128"}],"name":"AuctionEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"AuctionInExtendedBidding","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"claimId","type":"uint256"},{"indexed":true,"internalType":"address","name":"winner","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"AuctionLotClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"uint128","name":"amount","type":"uint128"}],"name":"AuctionProceedsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"when","type":"uint256"},{"indexed":true,"internalType":"address","name":"bidder","type":"address"},{"indexed":true,"internalType":"uint128","name":"amount","type":"uint128"}],"name":"Bid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":true,"internalType":"uint128","name":"bid","type":"uint128"},{"indexed":true,"internalType":"uint128","name":"minHighBid","type":"uint128"}],"name":"BidTooLow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"_sellerToken","outputs":[{"internalType":"contract ISellerToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_tokenAuctionMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"},{"internalType":"bool","name":"issueRefund","type":"bool"},{"internalType":"string","name":"reason","type":"string"}],"name":"abortAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint48","name":"startTime","type":"uint48"},{"internalType":"uint48","name":"endTime","type":"uint48"},{"internalType":"uint32","name":"extendedBiddingTime","type":"uint32"},{"internalType":"uint64","name":"startBid","type":"uint64"},{"internalType":"uint64","name":"increment","type":"uint64"},{"internalType":"uint8","name":"basis","type":"uint8"},{"internalType":"uint256","name":"claimId","type":"uint256"},{"internalType":"address","name":"seller","type":"address"}],"name":"addAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"auctionStatus","outputs":[{"internalType":"enum AuctionStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bool","name":"revertOnFail","type":"bool"}],"name":"bid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"},{"internalType":"address","name":"deliverTo","type":"address"}],"name":"claimLot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"},{"internalType":"address","name":"deliverTo","type":"address"}],"name":"claimProceeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"},{"internalType":"address","name":"premiumRecipient","type":"address"}],"name":"confirmAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"auctionIds","type":"uint256[]"},{"internalType":"address[]","name":"premiumRecipients","type":"address[]"}],"name":"confirmAuctions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"},{"internalType":"uint48","name":"startTime","type":"uint48"},{"internalType":"uint48","name":"endTime","type":"uint48"},{"internalType":"uint32","name":"extendedBiddingTime","type":"uint32"},{"internalType":"uint64","name":"increment","type":"uint64"},{"internalType":"uint8","name":"basis","type":"uint8"},{"internalType":"uint256","name":"claimId","type":"uint256"}],"name":"editAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"getAuctionMetadata","outputs":[{"components":[{"internalType":"uint256","name":"claimId","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint48","name":"startTime","type":"uint48"},{"internalType":"uint48","name":"endTime","type":"uint48"},{"internalType":"uint32","name":"extendedBiddingTime","type":"uint32"},{"internalType":"uint64","name":"minBidIncrement","type":"uint64"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"bool","name":"claimed","type":"bool"},{"internalType":"bool","name":"cancelled","type":"bool"},{"internalType":"uint8","name":"basis","type":"uint8"},{"internalType":"address","name":"highBidder","type":"address"},{"internalType":"uint64","name":"highBid","type":"uint64"},{"internalType":"uint32","name":"lastBidDelta","type":"uint32"}],"internalType":"struct Auction.AuctionData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAuctioneer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBroker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"auctionIds","type":"uint256[]"},{"internalType":"uint64[]","name":"amounts","type":"uint64[]"},{"internalType":"bool","name":"revertOnFail","type":"bool"}],"name":"multiBid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAuctioneer","type":"address"}],"name":"setAuctioneer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newBroker","type":"address"}],"name":"setBroker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"escrow","type":"address"},{"internalType":"address","name":"sellerToken_","type":"address"},{"internalType":"bool","name":"requireAuctionVerification_","type":"bool"}],"name":"setup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]