Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Loading...
Loading
Contract Name:
LiveTradingProcessorData
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 100 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "../../utils/proxy/ProxyOwned.sol";
import "../../utils/proxy/ProxyPausable.sol";
import "../../interfaces/ILiveTradingProcessor.sol";
import "../../interfaces/IFreeBetsHolder.sol";
contract LiveTradingProcessorData is Initializable, ProxyOwned, ProxyPausable {
/* ========== STRUCT VARIABLES ========== */
struct Leg {
string gameId;
uint16 sportId;
uint16 typeId;
int24 line;
uint8 position;
uint24 playerId;
uint expectedQuote;
}
struct RequestData {
address user;
bytes32 requestId;
address ticketId;
bool isFulfilled;
uint timestamp;
uint maturityTimestamp;
uint buyInAmount;
uint expectedPayout;
uint additionalSlippage;
address referrer;
address collateral;
bool isFreeBet;
Leg[] legs;
}
/* ========== STATE VARIABLES ========== */
ILiveTradingProcessor public liveTradingProcessor;
IFreeBetsHolder public freeBetsHolder;
function initialize(address _owner, ILiveTradingProcessor _liveTradingProcessor) external initializer {
setOwner(_owner);
liveTradingProcessor = _liveTradingProcessor;
}
/**
* @notice Retrieves requests data within a paginated range.
* @dev Fetches requests data in batches.
* @param _startIndex The starting index for pagination.
* @param _pageSize The number of entries to fetch in the current page.
* @return requestsData Requests data.
*/
function getRequestsData(uint _startIndex, uint _pageSize) external view returns (RequestData[] memory requestsData) {
uint requestsSize = liveTradingProcessor.requestCounter();
uint remaining = requestsSize > _startIndex ? requestsSize - _startIndex : 0;
uint size = _pageSize > remaining ? remaining : _pageSize;
requestsData = new RequestData[](size);
for (uint i = 0; i < size; ++i) {
uint requestIndex = _startIndex + i;
bytes32 requestId = liveTradingProcessor.counterToRequestId(requestIndex);
address requester = liveTradingProcessor.requestIdToRequester(requestId);
address ticketId = liveTradingProcessor.requestIdToTicketId(requestId);
uint timestampPerRequest = liveTradingProcessor.timestampPerRequest(requestId);
bool isFreeBet = requester == address(freeBetsHolder);
bool isLiveParlay = liveTradingProcessor.requestIdIsParlay(requestId);
requestsData[i] = isLiveParlay
? _processParlayTrade(requestId, requester, ticketId, timestampPerRequest, isFreeBet)
: _processSingleTrade(requestId, requester, ticketId, timestampPerRequest, isFreeBet);
}
}
/**
* @notice Retrieves latest live requests data for a specific user within search range.
* @dev Fetches latest requests data for a specific user by iterating all requests backwards inside provided range.
* @param user The address of the user.
* @param _batchSize The number of latest requests to iterate.
* @param _maxSize The max number of requests to fetch for a user.
* @return requestsData Requests data.
*/
function getLatestRequestsDataPerUser(
address user,
uint _batchSize,
uint _maxSize
) external view returns (RequestData[] memory requestsData) {
uint count = 0;
uint requestsSize = liveTradingProcessor.requestCounter();
requestsData = new RequestData[](_maxSize);
_batchSize = _batchSize > requestsSize ? 0 : requestsSize - _batchSize;
// iterate backwards in order to fetch most recent data
for (uint i = requestsSize; i > _batchSize; --i) {
bytes32 requestId = liveTradingProcessor.counterToRequestId(i - 1);
address requester = liveTradingProcessor.requestIdToRequester(requestId);
address ticketId = liveTradingProcessor.requestIdToTicketId(requestId);
bool isFreeBet = requester == address(freeBetsHolder);
if (isFreeBet) {
requester = freeBetsHolder.ticketToUser(ticketId);
}
if (requester != user) continue;
uint timestampPerRequest = liveTradingProcessor.timestampPerRequest(requestId);
bool isLiveParlay = liveTradingProcessor.requestIdIsParlay(requestId);
requestsData[count] = isLiveParlay
? _processParlayTrade(requestId, requester, ticketId, timestampPerRequest, isFreeBet)
: _processSingleTrade(requestId, requester, ticketId, timestampPerRequest, isFreeBet);
++count;
if (count == _maxSize) break;
}
}
function _processSingleTrade(
bytes32 _requestId,
address _requester,
address _ticketId,
uint _timestampPerRequest,
bool _isFreeBet
) private view returns (RequestData memory) {
ILiveTradingProcessor.LiveTradeData memory liveTradeData = liveTradingProcessor.getTradeData(_requestId);
Leg[] memory legs = new Leg[](1);
legs[0] = Leg({
gameId: liveTradeData._gameId,
sportId: liveTradeData._sportId,
typeId: liveTradeData._typeId,
line: liveTradeData._line,
position: liveTradeData._position,
playerId: liveTradeData._playerId,
expectedQuote: liveTradeData._expectedQuote
});
return
RequestData({
user: _requester,
requestId: _requestId,
ticketId: _ticketId,
isFulfilled: liveTradingProcessor.requestIdFulfilled(_requestId),
timestamp: _timestampPerRequest,
maturityTimestamp: _timestampPerRequest + liveTradingProcessor.maxAllowedExecutionDelay(),
buyInAmount: liveTradeData._buyInAmount,
expectedPayout: liveTradeData._expectedQuote,
additionalSlippage: liveTradeData._additionalSlippage,
referrer: liveTradeData._referrer,
collateral: liveTradeData._collateral,
isFreeBet: _isFreeBet,
legs: legs
});
}
function _processParlayTrade(
bytes32 _requestId,
address _requester,
address _ticketId,
uint _timestampPerRequest,
bool _isFreeBet
) private view returns (RequestData memory) {
ILiveTradingProcessor.LiveParlayTradeData memory liveParlayTradeData = liveTradingProcessor.getParlayTradeData(
_requestId
);
Leg[] memory legs = new Leg[](liveParlayTradeData.legs.length);
for (uint j = 0; j < liveParlayTradeData.legs.length; ++j) {
ILiveTradingProcessor.LiveParlayLeg memory leg = liveParlayTradeData.legs[j];
legs[j] = Leg({
gameId: leg.gameId,
sportId: leg.sportId,
typeId: leg.typeId,
line: leg.line,
position: leg.position,
playerId: leg.playerId,
expectedQuote: leg.expectedLegOdd
});
}
return
RequestData({
user: _requester,
requestId: _requestId,
ticketId: _ticketId,
isFulfilled: liveTradingProcessor.requestIdFulfilled(_requestId),
timestamp: _timestampPerRequest,
maturityTimestamp: _timestampPerRequest + liveTradingProcessor.maxAllowedExecutionDelay(),
buyInAmount: liveParlayTradeData.buyInAmount,
expectedPayout: liveParlayTradeData.expectedPayout,
additionalSlippage: liveParlayTradeData.additionalSlippage,
referrer: liveParlayTradeData.referrer,
collateral: liveParlayTradeData.collateral,
isFreeBet: _isFreeBet,
legs: legs
});
}
function setLiveTradingProcessor(ILiveTradingProcessor _liveTradingProcessor) external onlyOwner {
liveTradingProcessor = _liveTradingProcessor;
emit LiveTradingProcessorChanged(address(_liveTradingProcessor));
}
function setFreeBetsHolder(IFreeBetsHolder _freeBetsHolder) external onlyOwner {
freeBetsHolder = _freeBetsHolder;
emit FreeBetsHolderChanged(address(_freeBetsHolder));
}
event LiveTradingProcessorChanged(address liveTradingProcessor);
event FreeBetsHolderChanged(address freeBetsHolder);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol)
pragma solidity ^0.8.20;
/**
* @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
* behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an
* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
*
* The initialization functions use a version number. Once a version number is used, it is consumed and cannot be
* reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in
* case an upgrade adds a module that needs to be initialized.
*
* For example:
*
* [.hljs-theme-light.nopadding]
* ```solidity
* contract MyToken is ERC20Upgradeable {
* function initialize() initializer public {
* __ERC20_init("MyToken", "MTK");
* }
* }
*
* contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {
* function initializeV2() reinitializer(2) public {
* __ERC20Permit_init("MyToken");
* }
* }
* ```
*
* TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
* possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
*
* CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
* that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
*
* [CAUTION]
* ====
* Avoid leaving a contract uninitialized.
*
* An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation
* contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke
* the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:
*
* [.hljs-theme-light.nopadding]
* ```
* /// @custom:oz-upgrades-unsafe-allow constructor
* constructor() {
* _disableInitializers();
* }
* ```
* ====
*/
abstract contract Initializable {
/**
* @dev Storage of the initializable contract.
*
* It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions
* when using with upgradeable contracts.
*
* @custom:storage-location erc7201:openzeppelin.storage.Initializable
*/
struct InitializableStorage {
/**
* @dev Indicates that the contract has been initialized.
*/
uint64 _initialized;
/**
* @dev Indicates that the contract is in the process of being initialized.
*/
bool _initializing;
}
// keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;
/**
* @dev The contract is already initialized.
*/
error InvalidInitialization();
/**
* @dev The contract is not initializing.
*/
error NotInitializing();
/**
* @dev Triggered when the contract has been initialized or reinitialized.
*/
event Initialized(uint64 version);
/**
* @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,
* `onlyInitializing` functions can be used to initialize parent contracts.
*
* Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any
* number of times. This behavior in the constructor can be useful during testing and is not expected to be used in
* production.
*
* Emits an {Initialized} event.
*/
modifier initializer() {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
// Cache values to avoid duplicated sloads
bool isTopLevelCall = !$._initializing;
uint64 initialized = $._initialized;
// Allowed calls:
// - initialSetup: the contract is not in the initializing state and no previous version was
// initialized
// - construction: the contract is initialized at version 1 (no reininitialization) and the
// current contract is just being deployed
bool initialSetup = initialized == 0 && isTopLevelCall;
bool construction = initialized == 1 && address(this).code.length == 0;
if (!initialSetup && !construction) {
revert InvalidInitialization();
}
$._initialized = 1;
if (isTopLevelCall) {
$._initializing = true;
}
_;
if (isTopLevelCall) {
$._initializing = false;
emit Initialized(1);
}
}
/**
* @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the
* contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be
* used to initialize parent contracts.
*
* A reinitializer may be used after the original initialization step. This is essential to configure modules that
* are added through upgrades and that require initialization.
*
* When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`
* cannot be nested. If one is invoked in the context of another, execution will revert.
*
* Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in
* a contract, executing them in the right order is up to the developer or operator.
*
* WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.
*
* Emits an {Initialized} event.
*/
modifier reinitializer(uint64 version) {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
if ($._initializing || $._initialized >= version) {
revert InvalidInitialization();
}
$._initialized = version;
$._initializing = true;
_;
$._initializing = false;
emit Initialized(version);
}
/**
* @dev Modifier to protect an initialization function so that it can only be invoked by functions with the
* {initializer} and {reinitializer} modifiers, directly or indirectly.
*/
modifier onlyInitializing() {
_checkInitializing();
_;
}
/**
* @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.
*/
function _checkInitializing() internal view virtual {
if (!_isInitializing()) {
revert NotInitializing();
}
}
/**
* @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.
* Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized
* to any version. It is recommended to use this to lock implementation contracts that are designed to be called
* through proxies.
*
* Emits an {Initialized} event the first time it is successfully executed.
*/
function _disableInitializers() internal virtual {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
if ($._initializing) {
revert InvalidInitialization();
}
if ($._initialized != type(uint64).max) {
$._initialized = type(uint64).max;
emit Initialized(type(uint64).max);
}
}
/**
* @dev Returns the highest version that has been initialized. See {reinitializer}.
*/
function _getInitializedVersion() internal view returns (uint64) {
return _getInitializableStorage()._initialized;
}
/**
* @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.
*/
function _isInitializing() internal view returns (bool) {
return _getInitializableStorage()._initializing;
}
/**
* @dev Returns a pointer to the storage namespace.
*/
// solhint-disable-next-line var-name-mixedcase
function _getInitializableStorage() private pure returns (InitializableStorage storage $) {
assembly {
$.slot := INITIALIZABLE_STORAGE
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "./IProxyBetting.sol";
interface IFreeBetsHolder is IProxyBetting {
function ticketToUser(address _createdTicket) external view returns (address);
function confirmLiveTrade(bytes32 requestId, address _createdTicket, uint _buyInAmount, address _collateral) external;
function confirmSGPTrade(bytes32 requestId, address _createdTicket, uint _buyInAmount, address _collateral) external;
function balancePerUserAndCollateral(address user, address collateral) external view returns (uint);
function freeBetExpiration(address user, address collateral) external view returns (uint);
function freeBetExpirationUpgrade() external view returns (uint);
function freeBetExpirationPeriod() external view returns (uint);
function confirmSpeedOrChainedSpeedMarketTrade(
bytes32 _requestId,
address _speedMarketAddress,
address _collateral,
uint _buyinAmount,
bool _isChained
) external;
function confirmSpeedMarketResolved(
address _resolvedTicket,
uint _exercized,
uint _buyInAmount,
address _collateral,
bool isChained
) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface ILiveTradingProcessor {
struct LiveTradeData {
string _gameId;
uint16 _sportId;
uint16 _typeId;
int24 _line;
uint8 _position;
uint _buyInAmount;
uint _expectedQuote;
uint _additionalSlippage;
address _referrer;
address _collateral;
uint24 _playerId; // player props
}
struct LiveParlayLeg {
string gameId;
uint16 sportId;
uint16 typeId;
int24 line;
uint8 position;
uint expectedLegOdd; // optional; node-side hint
uint24 playerId;
}
struct LiveParlayTradeData {
LiveParlayLeg[] legs;
uint buyInAmount;
uint expectedPayout;
uint additionalSlippage;
address referrer;
address collateral;
}
// =========================
// Views
// =========================
function freeBetsHolder() external view returns (address);
function maxAllowedExecutionDelay() external view returns (uint);
function requestCounter() external view returns (uint);
function counterToRequestId(uint _counter) external view returns (bytes32);
function requestIdToRequester(bytes32 _requestId) external view returns (address);
function requestIdIsParlay(bytes32 _requestId) external view returns (bool);
function requestIdToTicketId(bytes32 _requestId) external view returns (address);
function requestIdFulfilled(bytes32 _requestId) external view returns (bool);
function timestampPerRequest(bytes32 _requestId) external view returns (uint);
function getTradeData(bytes32 _requestId) external view returns (LiveTradeData memory);
function getParlayTradeData(bytes32 _requestId) external view returns (LiveParlayTradeData memory);
// =========================
// Actions
// =========================
function requestLiveTrade(LiveTradeData calldata _liveTradeData) external returns (bytes32);
function requestLiveParlayTrade(LiveParlayTradeData calldata _parlay) external returns (bytes32);
/**
* @notice SINGLE fulfill (backwards-compatible with production)
*/
function fulfillLiveTrade(bytes32 _requestId, bool allow, uint approvedQuote) external;
/**
* @notice PARLAY fulfill (new)
* @dev approvedLegOdds.length must equal number of legs
*/
function fulfillLiveTradeParlay(
bytes32 _requestId,
bool allow,
uint approvedQuote,
uint[] calldata approvedLegOdds
) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IProxyBetting {
function getActiveTicketsPerUser(uint _index, uint _pageSize, address _user) external view returns (address[] memory);
function numOfActiveTicketsPerUser(address _user) external view returns (uint);
function getResolvedTicketsPerUser(uint _index, uint _pageSize, address _user) external view returns (address[] memory);
function numOfResolvedTicketsPerUser(address _user) external view returns (uint);
function confirmTicketResolved(address _resolvedTicket) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
// Clone of syntetix contract without constructor
contract ProxyOwned {
address public owner;
address public nominatedOwner;
bool private _initialized;
bool private _transferredAtInit;
function setOwner(address _owner) public {
require(_owner != address(0), "Owner address cannot be 0");
require(!_initialized, "Already initialized, use nominateNewOwner");
_initialized = true;
owner = _owner;
emit OwnerChanged(address(0), _owner);
}
function nominateNewOwner(address _owner) external onlyOwner {
nominatedOwner = _owner;
emit OwnerNominated(_owner);
}
function acceptOwnership() external {
require(msg.sender == nominatedOwner, "You must be nominated before you can accept ownership");
emit OwnerChanged(owner, nominatedOwner);
owner = nominatedOwner;
nominatedOwner = address(0);
}
function transferOwnershipAtInit(address proxyAddress) external onlyOwner {
require(proxyAddress != address(0), "Invalid address");
require(!_transferredAtInit, "Already transferred");
owner = proxyAddress;
_transferredAtInit = true;
emit OwnerChanged(owner, proxyAddress);
}
modifier onlyOwner() {
_onlyOwner();
_;
}
function _onlyOwner() private view {
require(msg.sender == owner, "Only the contract owner may perform this action");
}
event OwnerNominated(address newOwner);
event OwnerChanged(address oldOwner, address newOwner);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
// Inheritance
import "./ProxyOwned.sol";
// Clone of syntetix contract without constructor
contract ProxyPausable is ProxyOwned {
uint public lastPauseTime;
bool public paused;
/**
* @notice Change the paused state of the contract
* @dev Only the contract owner may call this.
*/
function setPaused(bool _paused) external onlyOwner {
// Ensure we're actually changing the state before we do anything
if (_paused == paused) {
return;
}
// Set our paused state.
paused = _paused;
// If applicable, set the last pause time.
if (paused) {
lastPauseTime = block.timestamp;
}
// Let everyone know that our pause state has changed.
emit PauseChanged(paused);
}
event PauseChanged(bool isPaused);
modifier notPaused() {
require(!paused, "This action cannot be performed while the contract is paused");
_;
}
}{
"optimizer": {
"enabled": true,
"runs": 100
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract ABI
API[{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"freeBetsHolder","type":"address"}],"name":"FreeBetsHolderChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"liveTradingProcessor","type":"address"}],"name":"LiveTradingProcessorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isPaused","type":"bool"}],"name":"PauseChanged","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeBetsHolder","outputs":[{"internalType":"contract IFreeBetsHolder","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"_batchSize","type":"uint256"},{"internalType":"uint256","name":"_maxSize","type":"uint256"}],"name":"getLatestRequestsDataPerUser","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes32","name":"requestId","type":"bytes32"},{"internalType":"address","name":"ticketId","type":"address"},{"internalType":"bool","name":"isFulfilled","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"maturityTimestamp","type":"uint256"},{"internalType":"uint256","name":"buyInAmount","type":"uint256"},{"internalType":"uint256","name":"expectedPayout","type":"uint256"},{"internalType":"uint256","name":"additionalSlippage","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"address","name":"collateral","type":"address"},{"internalType":"bool","name":"isFreeBet","type":"bool"},{"components":[{"internalType":"string","name":"gameId","type":"string"},{"internalType":"uint16","name":"sportId","type":"uint16"},{"internalType":"uint16","name":"typeId","type":"uint16"},{"internalType":"int24","name":"line","type":"int24"},{"internalType":"uint8","name":"position","type":"uint8"},{"internalType":"uint24","name":"playerId","type":"uint24"},{"internalType":"uint256","name":"expectedQuote","type":"uint256"}],"internalType":"struct LiveTradingProcessorData.Leg[]","name":"legs","type":"tuple[]"}],"internalType":"struct LiveTradingProcessorData.RequestData[]","name":"requestsData","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startIndex","type":"uint256"},{"internalType":"uint256","name":"_pageSize","type":"uint256"}],"name":"getRequestsData","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes32","name":"requestId","type":"bytes32"},{"internalType":"address","name":"ticketId","type":"address"},{"internalType":"bool","name":"isFulfilled","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"maturityTimestamp","type":"uint256"},{"internalType":"uint256","name":"buyInAmount","type":"uint256"},{"internalType":"uint256","name":"expectedPayout","type":"uint256"},{"internalType":"uint256","name":"additionalSlippage","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"address","name":"collateral","type":"address"},{"internalType":"bool","name":"isFreeBet","type":"bool"},{"components":[{"internalType":"string","name":"gameId","type":"string"},{"internalType":"uint16","name":"sportId","type":"uint16"},{"internalType":"uint16","name":"typeId","type":"uint16"},{"internalType":"int24","name":"line","type":"int24"},{"internalType":"uint8","name":"position","type":"uint8"},{"internalType":"uint24","name":"playerId","type":"uint24"},{"internalType":"uint256","name":"expectedQuote","type":"uint256"}],"internalType":"struct LiveTradingProcessorData.Leg[]","name":"legs","type":"tuple[]"}],"internalType":"struct LiveTradingProcessorData.RequestData[]","name":"requestsData","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"contract ILiveTradingProcessor","name":"_liveTradingProcessor","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastPauseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liveTradingProcessor","outputs":[{"internalType":"contract ILiveTradingProcessor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IFreeBetsHolder","name":"_freeBetsHolder","type":"address"}],"name":"setFreeBetsHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ILiveTradingProcessor","name":"_liveTradingProcessor","type":"address"}],"name":"setLiveTradingProcessor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxyAddress","type":"address"}],"name":"transferOwnershipAtInit","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50611ff3806100206000396000f3fe608060405234801561001057600080fd5b50600436106100e05760003560e01c806379ba50971161008757806379ba5097146101b1578063805661b0146101b95780638da5cb5b146101cc57806391b4ded9146101df57806394bd2313146101f6578063c3b83f5f14610209578063ce18a8371461021c578063f90e73431461022f57600080fd5b806304de96c5146100e557806313af4035146101135780631627540c1461012857806316c38b3c1461013b5780633b0e6e3e1461014e578063485cc9551461016e57806353a47bb7146101815780635c975abb14610194575b600080fd5b6003546100fd9061010090046001600160a01b031681565b60405161010a9190611768565b60405180910390f35b610126610121366004611791565b610242565b005b610126610136366004611791565b61035e565b6101266101493660046117c3565b6103b1565b61016161015c3660046117e0565b610423565b60405161010a91906118f4565b61012661017c3660046119f5565b6107ff565b6001546100fd906001600160a01b031681565b6003546101a19060ff1681565b604051901515815260200161010a565b61012661092e565b6101266101c7366004611791565b610a06565b6000546100fd906001600160a01b031681565b6101e860025481565b60405190815260200161010a565b610126610204366004611791565b610a59565b610126610217366004611791565b610ab1565b6004546100fd906001600160a01b031681565b61016161023d366004611a2e565b610ba1565b6001600160a01b0381166102995760405162461bcd60e51b815260206004820152601960248201527804f776e657220616464726573732063616e6e6f74206265203603c1b60448201526064015b60405180910390fd5b600154600160a01b900460ff16156103055760405162461bcd60e51b815260206004820152602960248201527f416c726561647920696e697469616c697a65642c20757365206e6f6d696e617460448201526832a732bba7bbb732b960b91b6064820152608401610290565b6001805460ff60a01b1916600160a01b179055600080546001600160a01b0383166001600160a01b0319909116178155604051600080516020611f9e83398151915291610353918490611a63565b60405180910390a150565b610366611024565b600180546001600160a01b0319166001600160a01b0383161790556040517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2290610353908390611768565b6103b9611024565b60035460ff16151581151514610420576003805460ff191682151590811790915560ff16156103e757426002555b60035460405160ff909116151581527f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec590602001610353565b50565b60606000600360019054906101000a90046001600160a01b03166001600160a01b031663973a814e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561047a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049e9190611a7d565b905060008482116104b05760006104ba565b6104ba8583611aac565b905060008185116104cb57846104cd565b815b9050806001600160401b038111156104e7576104e7611ac5565b60405190808252806020026020018201604052801561052057816020015b61050d611699565b8152602001906001900390816105055790505b50935060005b818110156107f557600061053a8289611adb565b60035460405163241086df60e21b8152600481018390529192506000916101009091046001600160a01b0316906390421b7c90602401602060405180830381865afa15801561058d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b19190611a7d565b600354604051637ff39d2960e01b8152600481018390529192506000916101009091046001600160a01b031690637ff39d2990602401602060405180830381865afa158015610604573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106289190611afe565b60035460405163bfc69e8360e01b8152600481018590529192506000916101009091046001600160a01b03169063bfc69e8390602401602060405180830381865afa15801561067b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069f9190611afe565b600354604051630ca6631f60e31b8152600481018690529192506000916101009091046001600160a01b03169063653318f890602401602060405180830381865afa1580156106f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107169190611a7d565b600480546003546040516318cb511d60e31b81529283018890529293506001600160a01b0390811686821614926000926101009091049091169063c65a88e890602401602060405180830381865afa158015610776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079a9190611b1b565b9050806107b3576107ae8686868686611098565b6107c0565b6107c08686868686611376565b8c89815181106107d2576107d2611b38565b602002602001018190525050505050505050806107ee90611b4e565b9050610526565b5050505092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156108445750825b90506000826001600160401b031660011480156108605750303b155b90508115801561086e575080155b1561088c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156108b657845460ff60401b1916600160401b1785555b6108bf87610242565b60038054610100600160a81b0319166101006001600160a01b03891602179055831561092557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6001546001600160a01b031633146109a65760405162461bcd60e51b815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527402063616e20616363657074206f776e65727368697605c1b6064820152608401610290565b600054600154604051600080516020611f9e833981519152926109d7926001600160a01b0391821692911690611a63565b60405180910390a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b610a0e611024565b600480546001600160a01b0319166001600160a01b0383161790556040517fb46323c836df32be1e2a36bb37c280dcd0b55b813f1962b19a07f20ed01dfefa90610353908390611768565b610a61611024565b60038054610100600160a81b0319166101006001600160a01b038416021790556040517fb6d32e867ecb1156e3f98524d07ea4ce425a686c9e4f8960af24ce6b045fbcfd90610353908390611768565b610ab9611024565b6001600160a01b038116610b015760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610290565b600154600160a81b900460ff1615610b515760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481d1c985b9cd9995c9c9959606a1b6044820152606401610290565b600080546001600160a01b0383166001600160a01b031990911681179091556001805460ff60a81b1916600160a81b179055604051600080516020611f9e83398151915291610353918490611a63565b6060600080600360019054906101000a90046001600160a01b03166001600160a01b031663973a814e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1d9190611a7d565b9050836001600160401b03811115610c3757610c37611ac5565b604051908082528060200260200182016040528015610c7057816020015b610c5d611699565b815260200190600190039081610c555790505b509250808511610c8957610c848582611aac565b610c8c565b60005b9450805b8581111561101a5760035460009061010090046001600160a01b03166390421b7c610cbc600185611aac565b6040518263ffffffff1660e01b8152600401610cda91815260200190565b602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b9190611a7d565b600354604051637ff39d2960e01b8152600481018390529192506000916101009091046001600160a01b031690637ff39d2990602401602060405180830381865afa158015610d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d929190611afe565b60035460405163bfc69e8360e01b8152600481018590529192506000916101009091046001600160a01b03169063bfc69e8390602401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e099190611afe565b6004549091506001600160a01b038381169116148015610e965760048054604051638f974cd960e01b81526001600160a01b0390911691638f974cd991610e5291869101611768565b602060405180830381865afa158015610e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e939190611afe565b92505b8a6001600160a01b0316836001600160a01b031614610eb8575050505061100a565b600354604051630ca6631f60e31b81526004810186905260009161010090046001600160a01b03169063653318f890602401602060405180830381865afa158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b9190611a7d565b6003546040516318cb511d60e31b8152600481018890529192506000916101009091046001600160a01b03169063c65a88e890602401602060405180830381865afa158015610f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa29190611b1b565b905080610fbb57610fb68686868587611098565b610fc8565b610fc88686868587611376565b8a8a81518110610fda57610fda611b38565b602002602001018190525088610fef90611b4e565b98508a89036110035750505050505061101a565b5050505050505b61101381611b67565b9050610c90565b5050509392505050565b6000546001600160a01b031633146110965760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201526e37b936903a3434b99030b1ba34b7b760891b6064820152608401610290565b565b6110a0611699565b600354604051632afdebb160e01b81526004810188905260009161010090046001600160a01b031690632afdebb190602401600060405180830381865afa1580156110ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111179190810190611cce565b60408051600180825281830190925291925060009190816020015b61113a61172c565b8152602001906001900390816111325790505090506040518060e0016040528083600001518152602001836020015161ffff168152602001836040015161ffff168152602001836060015160020b8152602001836080015160ff16815260200183610140015162ffffff1681526020018360c00151815250816000815181106111c5576111c5611b38565b6020026020010181905250604051806101a00160405280886001600160a01b03168152602001898152602001876001600160a01b03168152602001600360019054906101000a90046001600160a01b03166001600160a01b03166301432bf28b6040518263ffffffff1660e01b815260040161124391815260200190565b602060405180830381865afa158015611260573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112849190611b1b565b15158152602001868152602001600360019054906101000a90046001600160a01b03166001600160a01b03166383223eb56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113089190611a7d565b6113129088611adb565b81526020018360a0015181526020018360c0015181526020018360e0015181526020018361010001516001600160a01b031681526020018361012001516001600160a01b031681526020018515158152602001828152509250505095945050505050565b61137e611699565b60035460405163cbbe361d60e01b81526004810188905260009161010090046001600160a01b03169063cbbe361d90602401600060405180830381865afa1580156113cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113f59190810190611ddb565b905060008160000151516001600160401b0381111561141657611416611ac5565b60405190808252806020026020018201604052801561144f57816020015b61143c61172c565b8152602001906001900390816114345790505b50905060005b8251518110156115125760008360000151828151811061147757611477611b38565b602002602001015190506040518060e0016040528082600001518152602001826020015161ffff168152602001826040015161ffff168152602001826060015160020b8152602001826080015160ff1681526020018260c0015162ffffff1681526020018260a001518152508383815181106114f5576114f5611b38565b6020026020010181905250508061150b90611b4e565b9050611455565b50604080516101a0810182526001600160a01b03808a168252602082018b905288811682840152600354925162a195f960e11b8152600481018c905291926060840192610100909104909116906301432bf290602401602060405180830381865afa158015611585573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a99190611b1b565b15158152602001868152602001600360019054906101000a90046001600160a01b03166001600160a01b03166383223eb56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162d9190611a7d565b6116379088611adb565b815260200183602001518152602001836040015181526020018360600151815260200183608001516001600160a01b031681526020018360a001516001600160a01b031681526020018515158152602001828152509250505095945050505050565b604051806101a0016040528060006001600160a01b031681526020016000801916815260200160006001600160a01b03168152602001600015158152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600015158152602001606081525090565b6040805160e081018252606080825260006020830181905292820183905281018290526080810182905260a0810182905260c081019190915290565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461042057600080fd5b6000602082840312156117a357600080fd5b81356117ae8161177c565b9392505050565b801515811461042057600080fd5b6000602082840312156117d557600080fd5b81356117ae816117b5565b600080604083850312156117f357600080fd5b50508035926020909101359150565b60005b8381101561181d578181015183820152602001611805565b50506000910152565b600081518084526020808501808196508360051b8101915082860160005b858110156118e7578284038952815160e0815181875280518083890152610100925061187581848a018b8501611802565b8884015161ffff908116898b01526040808601519091169089015260608085015160020b9089015260808085015160ff169089015260a08085015162ffffff169089015260c093840151938801939093525099860199601f909101601f19169094019093019290840190600101611844565b5091979650505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156119e757603f19898403018552815180516001600160a01b0390811685528882015189860152878201518116888601526060808301511515908601526080808301519086015260a0808301519086015260c0808301519086015260e08083015190860152610100808301519086015261012080830151821690860152610140808301519091169085015261016080820151151590850152610180908101516101a0918501829052906119d381860183611826565b96890196945050509086019060010161191b565b509098975050505050505050565b60008060408385031215611a0857600080fd5b8235611a138161177c565b91506020830135611a238161177c565b809150509250929050565b600080600060608486031215611a4357600080fd5b8335611a4e8161177c565b95602085013595506040909401359392505050565b6001600160a01b0392831681529116602082015260400190565b600060208284031215611a8f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611abf57611abf611a96565b92915050565b634e487b7160e01b600052604160045260246000fd5b80820180821115611abf57611abf611a96565b8051611af98161177c565b919050565b600060208284031215611b1057600080fd5b81516117ae8161177c565b600060208284031215611b2d57600080fd5b81516117ae816117b5565b634e487b7160e01b600052603260045260246000fd5b600060018201611b6057611b60611a96565b5060010190565b600081611b7657611b76611a96565b506000190190565b60405161016081016001600160401b0381118282101715611ba157611ba1611ac5565b60405290565b60405160c081016001600160401b0381118282101715611ba157611ba1611ac5565b60405160e081016001600160401b0381118282101715611ba157611ba1611ac5565b604051601f8201601f191681016001600160401b0381118282101715611c1357611c13611ac5565b604052919050565b600082601f830112611c2c57600080fd5b81516001600160401b03811115611c4557611c45611ac5565b611c58601f8201601f1916602001611beb565b818152846020838601011115611c6d57600080fd5b611c7e826020830160208701611802565b949350505050565b805161ffff81168114611af957600080fd5b8051600281900b8114611af957600080fd5b805160ff81168114611af957600080fd5b805162ffffff81168114611af957600080fd5b600060208284031215611ce057600080fd5b81516001600160401b0380821115611cf757600080fd5b908301906101608286031215611d0c57600080fd5b611d14611b7e565b825182811115611d2357600080fd5b611d2f87828601611c1b565b825250611d3e60208401611c86565b6020820152611d4f60408401611c86565b6040820152611d6060608401611c98565b6060820152611d7160808401611caa565b608082015260a083015160a082015260c083015160c082015260e083015160e08201526101009150611da4828401611aee565b828201526101209150611db8828401611aee565b828201526101409150611dcc828401611cbb565b91810191909152949350505050565b60006020808385031215611dee57600080fd5b82516001600160401b0380821115611e0557600080fd5b9084019060c08287031215611e1957600080fd5b611e21611ba7565b825182811115611e3057600080fd5b8301601f81018813611e4157600080fd5b805183811115611e5357611e53611ac5565b8060051b611e62878201611beb565b918252828101870191878101908b841115611e7c57600080fd5b88850192505b83831015611f4d57825187811115611e9957600080fd5b850160e0818e03601f19011215611eb05760008081fd5b611eb8611bc9565b8a82015189811115611eca5760008081fd5b611ed88f8d83860101611c1b565b8252506040611ee8818401611c86565b8c8301526060611ef9818501611c86565b8284015260809150611f0c828501611c98565b9083015260a0611f1d848201611caa565b8284015260c0840151818401525050611f3860e08301611cbb565b60c08201528352509188019190880190611e82565b808652505050505083830151848201526040830151604082015260608301516060820152611f7d60808401611aee565b6080820152611f8e60a08401611aee565b60a0820152969550505050505056feb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159ca2646970667358221220fda844e90daae52a26ded503218b429c610cef3ab49aaf26c3953bce5343bd9f64736f6c63430008140033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100e05760003560e01c806379ba50971161008757806379ba5097146101b1578063805661b0146101b95780638da5cb5b146101cc57806391b4ded9146101df57806394bd2313146101f6578063c3b83f5f14610209578063ce18a8371461021c578063f90e73431461022f57600080fd5b806304de96c5146100e557806313af4035146101135780631627540c1461012857806316c38b3c1461013b5780633b0e6e3e1461014e578063485cc9551461016e57806353a47bb7146101815780635c975abb14610194575b600080fd5b6003546100fd9061010090046001600160a01b031681565b60405161010a9190611768565b60405180910390f35b610126610121366004611791565b610242565b005b610126610136366004611791565b61035e565b6101266101493660046117c3565b6103b1565b61016161015c3660046117e0565b610423565b60405161010a91906118f4565b61012661017c3660046119f5565b6107ff565b6001546100fd906001600160a01b031681565b6003546101a19060ff1681565b604051901515815260200161010a565b61012661092e565b6101266101c7366004611791565b610a06565b6000546100fd906001600160a01b031681565b6101e860025481565b60405190815260200161010a565b610126610204366004611791565b610a59565b610126610217366004611791565b610ab1565b6004546100fd906001600160a01b031681565b61016161023d366004611a2e565b610ba1565b6001600160a01b0381166102995760405162461bcd60e51b815260206004820152601960248201527804f776e657220616464726573732063616e6e6f74206265203603c1b60448201526064015b60405180910390fd5b600154600160a01b900460ff16156103055760405162461bcd60e51b815260206004820152602960248201527f416c726561647920696e697469616c697a65642c20757365206e6f6d696e617460448201526832a732bba7bbb732b960b91b6064820152608401610290565b6001805460ff60a01b1916600160a01b179055600080546001600160a01b0383166001600160a01b0319909116178155604051600080516020611f9e83398151915291610353918490611a63565b60405180910390a150565b610366611024565b600180546001600160a01b0319166001600160a01b0383161790556040517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2290610353908390611768565b6103b9611024565b60035460ff16151581151514610420576003805460ff191682151590811790915560ff16156103e757426002555b60035460405160ff909116151581527f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec590602001610353565b50565b60606000600360019054906101000a90046001600160a01b03166001600160a01b031663973a814e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561047a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049e9190611a7d565b905060008482116104b05760006104ba565b6104ba8583611aac565b905060008185116104cb57846104cd565b815b9050806001600160401b038111156104e7576104e7611ac5565b60405190808252806020026020018201604052801561052057816020015b61050d611699565b8152602001906001900390816105055790505b50935060005b818110156107f557600061053a8289611adb565b60035460405163241086df60e21b8152600481018390529192506000916101009091046001600160a01b0316906390421b7c90602401602060405180830381865afa15801561058d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b19190611a7d565b600354604051637ff39d2960e01b8152600481018390529192506000916101009091046001600160a01b031690637ff39d2990602401602060405180830381865afa158015610604573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106289190611afe565b60035460405163bfc69e8360e01b8152600481018590529192506000916101009091046001600160a01b03169063bfc69e8390602401602060405180830381865afa15801561067b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069f9190611afe565b600354604051630ca6631f60e31b8152600481018690529192506000916101009091046001600160a01b03169063653318f890602401602060405180830381865afa1580156106f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107169190611a7d565b600480546003546040516318cb511d60e31b81529283018890529293506001600160a01b0390811686821614926000926101009091049091169063c65a88e890602401602060405180830381865afa158015610776573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079a9190611b1b565b9050806107b3576107ae8686868686611098565b6107c0565b6107c08686868686611376565b8c89815181106107d2576107d2611b38565b602002602001018190525050505050505050806107ee90611b4e565b9050610526565b5050505092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156108445750825b90506000826001600160401b031660011480156108605750303b155b90508115801561086e575080155b1561088c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156108b657845460ff60401b1916600160401b1785555b6108bf87610242565b60038054610100600160a81b0319166101006001600160a01b03891602179055831561092557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6001546001600160a01b031633146109a65760405162461bcd60e51b815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527402063616e20616363657074206f776e65727368697605c1b6064820152608401610290565b600054600154604051600080516020611f9e833981519152926109d7926001600160a01b0391821692911690611a63565b60405180910390a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b610a0e611024565b600480546001600160a01b0319166001600160a01b0383161790556040517fb46323c836df32be1e2a36bb37c280dcd0b55b813f1962b19a07f20ed01dfefa90610353908390611768565b610a61611024565b60038054610100600160a81b0319166101006001600160a01b038416021790556040517fb6d32e867ecb1156e3f98524d07ea4ce425a686c9e4f8960af24ce6b045fbcfd90610353908390611768565b610ab9611024565b6001600160a01b038116610b015760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610290565b600154600160a81b900460ff1615610b515760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481d1c985b9cd9995c9c9959606a1b6044820152606401610290565b600080546001600160a01b0383166001600160a01b031990911681179091556001805460ff60a81b1916600160a81b179055604051600080516020611f9e83398151915291610353918490611a63565b6060600080600360019054906101000a90046001600160a01b03166001600160a01b031663973a814e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1d9190611a7d565b9050836001600160401b03811115610c3757610c37611ac5565b604051908082528060200260200182016040528015610c7057816020015b610c5d611699565b815260200190600190039081610c555790505b509250808511610c8957610c848582611aac565b610c8c565b60005b9450805b8581111561101a5760035460009061010090046001600160a01b03166390421b7c610cbc600185611aac565b6040518263ffffffff1660e01b8152600401610cda91815260200190565b602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b9190611a7d565b600354604051637ff39d2960e01b8152600481018390529192506000916101009091046001600160a01b031690637ff39d2990602401602060405180830381865afa158015610d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d929190611afe565b60035460405163bfc69e8360e01b8152600481018590529192506000916101009091046001600160a01b03169063bfc69e8390602401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e099190611afe565b6004549091506001600160a01b038381169116148015610e965760048054604051638f974cd960e01b81526001600160a01b0390911691638f974cd991610e5291869101611768565b602060405180830381865afa158015610e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e939190611afe565b92505b8a6001600160a01b0316836001600160a01b031614610eb8575050505061100a565b600354604051630ca6631f60e31b81526004810186905260009161010090046001600160a01b03169063653318f890602401602060405180830381865afa158015610f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2b9190611a7d565b6003546040516318cb511d60e31b8152600481018890529192506000916101009091046001600160a01b03169063c65a88e890602401602060405180830381865afa158015610f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa29190611b1b565b905080610fbb57610fb68686868587611098565b610fc8565b610fc88686868587611376565b8a8a81518110610fda57610fda611b38565b602002602001018190525088610fef90611b4e565b98508a89036110035750505050505061101a565b5050505050505b61101381611b67565b9050610c90565b5050509392505050565b6000546001600160a01b031633146110965760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201526e37b936903a3434b99030b1ba34b7b760891b6064820152608401610290565b565b6110a0611699565b600354604051632afdebb160e01b81526004810188905260009161010090046001600160a01b031690632afdebb190602401600060405180830381865afa1580156110ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111179190810190611cce565b60408051600180825281830190925291925060009190816020015b61113a61172c565b8152602001906001900390816111325790505090506040518060e0016040528083600001518152602001836020015161ffff168152602001836040015161ffff168152602001836060015160020b8152602001836080015160ff16815260200183610140015162ffffff1681526020018360c00151815250816000815181106111c5576111c5611b38565b6020026020010181905250604051806101a00160405280886001600160a01b03168152602001898152602001876001600160a01b03168152602001600360019054906101000a90046001600160a01b03166001600160a01b03166301432bf28b6040518263ffffffff1660e01b815260040161124391815260200190565b602060405180830381865afa158015611260573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112849190611b1b565b15158152602001868152602001600360019054906101000a90046001600160a01b03166001600160a01b03166383223eb56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113089190611a7d565b6113129088611adb565b81526020018360a0015181526020018360c0015181526020018360e0015181526020018361010001516001600160a01b031681526020018361012001516001600160a01b031681526020018515158152602001828152509250505095945050505050565b61137e611699565b60035460405163cbbe361d60e01b81526004810188905260009161010090046001600160a01b03169063cbbe361d90602401600060405180830381865afa1580156113cd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113f59190810190611ddb565b905060008160000151516001600160401b0381111561141657611416611ac5565b60405190808252806020026020018201604052801561144f57816020015b61143c61172c565b8152602001906001900390816114345790505b50905060005b8251518110156115125760008360000151828151811061147757611477611b38565b602002602001015190506040518060e0016040528082600001518152602001826020015161ffff168152602001826040015161ffff168152602001826060015160020b8152602001826080015160ff1681526020018260c0015162ffffff1681526020018260a001518152508383815181106114f5576114f5611b38565b6020026020010181905250508061150b90611b4e565b9050611455565b50604080516101a0810182526001600160a01b03808a168252602082018b905288811682840152600354925162a195f960e11b8152600481018c905291926060840192610100909104909116906301432bf290602401602060405180830381865afa158015611585573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a99190611b1b565b15158152602001868152602001600360019054906101000a90046001600160a01b03166001600160a01b03166383223eb56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162d9190611a7d565b6116379088611adb565b815260200183602001518152602001836040015181526020018360600151815260200183608001516001600160a01b031681526020018360a001516001600160a01b031681526020018515158152602001828152509250505095945050505050565b604051806101a0016040528060006001600160a01b031681526020016000801916815260200160006001600160a01b03168152602001600015158152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600015158152602001606081525090565b6040805160e081018252606080825260006020830181905292820183905281018290526080810182905260a0810182905260c081019190915290565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461042057600080fd5b6000602082840312156117a357600080fd5b81356117ae8161177c565b9392505050565b801515811461042057600080fd5b6000602082840312156117d557600080fd5b81356117ae816117b5565b600080604083850312156117f357600080fd5b50508035926020909101359150565b60005b8381101561181d578181015183820152602001611805565b50506000910152565b600081518084526020808501808196508360051b8101915082860160005b858110156118e7578284038952815160e0815181875280518083890152610100925061187581848a018b8501611802565b8884015161ffff908116898b01526040808601519091169089015260608085015160020b9089015260808085015160ff169089015260a08085015162ffffff169089015260c093840151938801939093525099860199601f909101601f19169094019093019290840190600101611844565b5091979650505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156119e757603f19898403018552815180516001600160a01b0390811685528882015189860152878201518116888601526060808301511515908601526080808301519086015260a0808301519086015260c0808301519086015260e08083015190860152610100808301519086015261012080830151821690860152610140808301519091169085015261016080820151151590850152610180908101516101a0918501829052906119d381860183611826565b96890196945050509086019060010161191b565b509098975050505050505050565b60008060408385031215611a0857600080fd5b8235611a138161177c565b91506020830135611a238161177c565b809150509250929050565b600080600060608486031215611a4357600080fd5b8335611a4e8161177c565b95602085013595506040909401359392505050565b6001600160a01b0392831681529116602082015260400190565b600060208284031215611a8f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611abf57611abf611a96565b92915050565b634e487b7160e01b600052604160045260246000fd5b80820180821115611abf57611abf611a96565b8051611af98161177c565b919050565b600060208284031215611b1057600080fd5b81516117ae8161177c565b600060208284031215611b2d57600080fd5b81516117ae816117b5565b634e487b7160e01b600052603260045260246000fd5b600060018201611b6057611b60611a96565b5060010190565b600081611b7657611b76611a96565b506000190190565b60405161016081016001600160401b0381118282101715611ba157611ba1611ac5565b60405290565b60405160c081016001600160401b0381118282101715611ba157611ba1611ac5565b60405160e081016001600160401b0381118282101715611ba157611ba1611ac5565b604051601f8201601f191681016001600160401b0381118282101715611c1357611c13611ac5565b604052919050565b600082601f830112611c2c57600080fd5b81516001600160401b03811115611c4557611c45611ac5565b611c58601f8201601f1916602001611beb565b818152846020838601011115611c6d57600080fd5b611c7e826020830160208701611802565b949350505050565b805161ffff81168114611af957600080fd5b8051600281900b8114611af957600080fd5b805160ff81168114611af957600080fd5b805162ffffff81168114611af957600080fd5b600060208284031215611ce057600080fd5b81516001600160401b0380821115611cf757600080fd5b908301906101608286031215611d0c57600080fd5b611d14611b7e565b825182811115611d2357600080fd5b611d2f87828601611c1b565b825250611d3e60208401611c86565b6020820152611d4f60408401611c86565b6040820152611d6060608401611c98565b6060820152611d7160808401611caa565b608082015260a083015160a082015260c083015160c082015260e083015160e08201526101009150611da4828401611aee565b828201526101209150611db8828401611aee565b828201526101409150611dcc828401611cbb565b91810191909152949350505050565b60006020808385031215611dee57600080fd5b82516001600160401b0380821115611e0557600080fd5b9084019060c08287031215611e1957600080fd5b611e21611ba7565b825182811115611e3057600080fd5b8301601f81018813611e4157600080fd5b805183811115611e5357611e53611ac5565b8060051b611e62878201611beb565b918252828101870191878101908b841115611e7c57600080fd5b88850192505b83831015611f4d57825187811115611e9957600080fd5b850160e0818e03601f19011215611eb05760008081fd5b611eb8611bc9565b8a82015189811115611eca5760008081fd5b611ed88f8d83860101611c1b565b8252506040611ee8818401611c86565b8c8301526060611ef9818501611c86565b8284015260809150611f0c828501611c98565b9083015260a0611f1d848201611caa565b8284015260c0840151818401525050611f3860e08301611cbb565b60c08201528352509188019190880190611e82565b808652505050505083830151848201526040830151604082015260608301516060820152611f7d60808401611aee565b6080820152611f8e60a08401611aee565b60a0820152969550505050505056feb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159ca2646970667358221220fda844e90daae52a26ded503218b429c610cef3ab49aaf26c3953bce5343bd9f64736f6c63430008140033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.