Latest 25 from a total of 3,728 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Reveal Bet | 11629569 | 431 days ago | IN | 0 ETH | 0.00000026 | ||||
| Commit To Bet | 11629562 | 431 days ago | IN | 0 ETH | 0.00000048 | ||||
| Reveal Bet | 11629554 | 431 days ago | IN | 0 ETH | 0.00000026 | ||||
| Commit To Bet | 11629547 | 431 days ago | IN | 0 ETH | 0.00000048 | ||||
| Reveal Bet | 11626247 | 431 days ago | IN | 0 ETH | 0.00000045 | ||||
| Commit To Bet | 11626236 | 431 days ago | IN | 0 ETH | 0.00000068 | ||||
| Reveal Bet | 11626216 | 431 days ago | IN | 0 ETH | 0.00000045 | ||||
| Commit To Bet | 11626207 | 431 days ago | IN | 0 ETH | 0.00000067 | ||||
| Reveal Bet | 11626190 | 431 days ago | IN | 0 ETH | 0.00000049 | ||||
| Commit To Bet | 11626182 | 431 days ago | IN | 0 ETH | 0.00000074 | ||||
| Reveal Bet | 11626166 | 431 days ago | IN | 0 ETH | 0.00000044 | ||||
| Commit To Bet | 11626158 | 431 days ago | IN | 0 ETH | 0.00000066 | ||||
| Reveal Bet | 11617459 | 431 days ago | IN | 0 ETH | 0.00000026 | ||||
| Commit To Bet | 11617451 | 431 days ago | IN | 0 ETH | 0.00000039 | ||||
| Reveal Bet | 11617441 | 431 days ago | IN | 0 ETH | 0.00000016 | ||||
| Commit To Bet | 11617433 | 431 days ago | IN | 0 ETH | 0.00000039 | ||||
| Reveal Bet | 11617412 | 431 days ago | IN | 0 ETH | 0.00000049 | ||||
| Commit To Bet | 11617403 | 431 days ago | IN | 0 ETH | 0.00000067 | ||||
| Reveal Bet | 11617389 | 431 days ago | IN | 0 ETH | 0.00000038 | ||||
| Commit To Bet | 11617380 | 431 days ago | IN | 0 ETH | 0.00000066 | ||||
| Reveal Bet | 11617352 | 431 days ago | IN | 0 ETH | 0.00000039 | ||||
| Commit To Bet | 11617343 | 431 days ago | IN | 0 ETH | 0.00000068 | ||||
| Reveal Bet | 11617331 | 431 days ago | IN | 0 ETH | 0.0000004 | ||||
| Commit To Bet | 11617322 | 431 days ago | IN | 0 ETH | 0.00000069 | ||||
| Reveal Bet | 11617306 | 431 days ago | IN | 0 ETH | 0.00000041 |
View more zero value Internal Transactions in Advanced View mode
Cross-Chain Transactions
Contract Source Code (Solidity)
/**
*Submitted for verification at blastscan.io on 2024-10-16
*/
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*
* ==== Security Considerations
*
* There are two important considerations concerning the use of `permit`. The first is that a valid permit signature
* expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be
* considered as an intention to spend the allowance in any specific way. The second is that because permits have
* built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should
* take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be
* generally recommended is:
*
* ```solidity
* function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {
* try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}
* doThing(..., value);
* }
*
* function doThing(..., uint256 value) public {
* token.safeTransferFrom(msg.sender, address(this), value);
* ...
* }
* ```
*
* Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of
* `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also
* {SafeERC20-safeTransferFrom}).
*
* Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so
* contracts should have entry points that don't rely on permit.
*/
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*
* CAUTION: See Security Considerations above.
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)
pragma solidity ^0.8.20;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev The ETH balance of the account is not enough to perform the operation.
*/
error AddressInsufficientBalance(address account);
/**
* @dev There's no code at `target` (it is not a contract).
*/
error AddressEmptyCode(address target);
/**
* @dev A call to an address target failed. The target may have reverted.
*/
error FailedInnerCall();
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
if (address(this).balance < amount) {
revert AddressInsufficientBalance(address(this));
}
(bool success, ) = recipient.call{value: amount}("");
if (!success) {
revert FailedInnerCall();
}
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason or custom error, it is bubbled
* up by this function (like regular Solidity function calls). However, if
* the call reverted with no returned reason, this function reverts with a
* {FailedInnerCall} error.
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
if (address(this).balance < value) {
revert AddressInsufficientBalance(address(this));
}
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
* was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an
* unsuccessful call.
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata
) internal view returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
// only check if target is a contract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
if (returndata.length == 0 && target.code.length == 0) {
revert AddressEmptyCode(target);
}
return returndata;
}
}
/**
* @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
* revert reason or with a default {FailedInnerCall} error.
*/
function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
return returndata;
}
}
/**
* @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.
*/
function _revert(bytes memory returndata) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert FailedInnerCall();
}
}
}
// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.20;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
/**
* @dev An operation with an ERC20 token failed.
*/
error SafeERC20FailedOperation(address token);
/**
* @dev Indicates a failed `decreaseAllowance` request.
*/
error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);
/**
* @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
}
/**
* @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
* calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
*/
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));
}
/**
* @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
forceApprove(token, spender, oldAllowance + value);
}
/**
* @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no
* value, non-reverting calls are assumed to be successful.
*/
function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {
unchecked {
uint256 currentAllowance = token.allowance(address(this), spender);
if (currentAllowance < requestedDecrease) {
revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
}
forceApprove(token, spender, currentAllowance - requestedDecrease);
}
}
/**
* @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
* to be set to zero before setting it to a non-zero value, such as USDT.
*/
function forceApprove(IERC20 token, address spender, uint256 value) internal {
bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));
_callOptionalReturn(token, approvalCall);
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data);
if (returndata.length != 0 && !abi.decode(returndata, (bool))) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*
* This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.
*/
function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false
// and not revert is the subcall reverts.
(bool success, bytes memory returndata) = address(token).call(data);
return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0;
}
}
// File: IHouse.sol
pragma solidity ^0.8.7;
interface IHouse {
function payout(address winner, uint amount) external;
}
// File: IBlast.sol
pragma solidity ^0.8.19;
enum YieldMode {
AUTOMATIC,
VOID,
CLAIMABLE
}
enum GasMode {
VOID,
CLAIMABLE
}
/// @title IBlast
/// @notice Interface for the Blast precompile contract
interface IBlast {
/// @notice Claims all gas for a specific contract. Called by an authorized user
/// @param contractAddress The address of the contract for which all gas is to be claimed
/// @param recipientOfGas The address of the recipient of the gas
/// @return gasClaimed The amount of gas that was claimed
function claimAllGas(
address contractAddress,
address recipientOfGas
) external returns (uint256 gasClaimed);
/// @notice Claims all yield for a specific contract. Called by an authorized user
/// @param contractAddress The address of the contract for which all yield is to be claimed
/// @param recipientOfYield The address of the recipient of the yield
/// @return yieldClaimed The amount of yield that was claimed
function claimAllYield(
address contractAddress,
address recipientOfYield
) external returns (uint256 yieldClaimed);
/// @notice Claims a specific amount of gas for a specific contract. claim rate governed by integral of gas over time
/// @param contractAddress The address of the contract for which gas is to be claimed
/// @param recipientOfGas The address of the recipient of the gas
/// @param gasToClaim The amount of gas to be claimed
/// @param gasSecondsToConsume The amount of gas seconds to consume
/// @return gasClaimed The amount of gas that was claimed
function claimGas(
address contractAddress,
address recipientOfGas,
uint256 gasToClaim,
uint256 gasSecondsToConsume
) external returns (uint256 gasClaimed);
/// @notice Claims gas at a minimum claim rate for a specific contract. Called by an authorized user
/// @param contractAddress The address of the contract for which gas is to be claimed
/// @param recipientOfGas The address of the recipient of the gas
/// @param minClaimRateBips The minimum claim rate in basis points
/// @return gasClaimed The amount of gas that was claimed
function claimGasAtMinClaimRate(
address contractAddress,
address recipientOfGas,
uint256 minClaimRateBips
) external returns (uint256 gasClaimed);
/// @notice Claims gas available to be claimed at max claim rate for a specific contract. Called by an authorized user
/// @param contractAddress The address of the contract for which maximum gas is to be claimed
/// @param recipientOfGas The address of the recipient of the gas
/// @return gasClaimed The amount of gas that was claimed
function claimMaxGas(
address contractAddress,
address recipientOfGas
) external returns (uint256 gasClaimed);
/// @notice Claims yield for a specific contract. Called by an authorized user
/// @param contractAddress The address of the contract for which yield is to be claimed
/// @param recipientOfYield The address of the recipient of the yield
/// @param amount The amount of yield to be claimed
/// @return yieldClaimed The amount of yield that was claimed
function claimYield(
address contractAddress,
address recipientOfYield,
uint256 amount
) external returns (uint256 yieldClaimed);
/// @notice contract configures its yield and gas modes and sets the governor. called by contract
/// @param yieldMode The yield mode to be set
/// @param gasMode The gas mode to be set
/// @param governor The address of the governor to be set
function configure(
YieldMode yieldMode,
GasMode gasMode,
address governor
) external;
/// @notice Configures the yield mode to AUTOMATIC for the contract that calls this function
function configureAutomaticYield() external;
/// @notice Configures the yield mode to AUTOMATIC for a specific contract. Called by an authorized user
/// @param contractAddress The address of the contract to be configured
function configureAutomaticYieldOnBehalf(address contractAddress) external;
/// @notice Configures the gas mode to CLAIMABLE for the contract that calls this function
function configureClaimableGas() external;
/// @notice Configures the gas mode to CLAIMABLE for a specific contract. Called by an authorized user
/// @param contractAddress The address of the contract to be configured
function configureClaimableGasOnBehalf(address contractAddress) external;
/// @notice Configures the yield mode to CLAIMABLE for the contract that calls this function
function configureClaimableYield() external;
/// @notice Configures the yield mode to CLAIMABLE for a specific contract. Called by an authorized user
/// @param contractAddress The address of the contract to be configured
function configureClaimableYieldOnBehalf(address contractAddress) external;
///@notice Configures the yield and gas modes and sets the governor for a specific contract. called by authorized user
/// @param contractAddress The address of the contract to be configured
/// @param yieldMode The yield mode to be set
/// @param gasMode The gas mode to be set
/// @param newGovernor The address of the new governor to be set
function configureContract(
address contractAddress,
YieldMode yieldMode,
GasMode gasMode,
address newGovernor
) external;
/// @notice Configures the governor for the contract that calls this function
/// @param governor The address of the governor to be configured for the contract
function configureGovernor(address governor) external;
/// @notice Configures the governor for a specific contract. Called by an authorized user
/// @param newGovernor The address of the new governor to be configured for the contract
/// @param contractAddress The address of the contract to be configured
function configureGovernorOnBehalf(
address newGovernor,
address contractAddress
) external;
/// @notice Configures the gas mode to VOID for the contract that calls this function
function configureVoidGas() external;
/// @notice Configures the gas mode to void for a specific contract. Called by an authorized user
/// @param contractAddress The address of the contract to be configured
function configureVoidGasOnBehalf(address contractAddress) external;
/// @notice Configures the yield mode to VOID for the contract that calls this function
function configureVoidYield() external;
/// @notice Configures the yield mode to VOID for a specific contract. Called by an authorized user
/// @param contractAddress The address of the contract to be configured
function configureVoidYieldOnBehalf(address contractAddress) external;
/// @notice Used to read the amount of yield that can be claimed for a contract
/// @param contractAddress The address of the contract to read the claimable yield for
/// @return claimableYield The claimable yield
function readClaimableYield(
address contractAddress
) external view returns (uint256 claimableYield);
/// @notice Reads the gas parameters for a specific contract.
/// @param contractAddress The address of the contract for which the gas parameters are to be read
/// @return etherSeconds uint256 representing the accumulated ether seconds
/// @return etherBalance uint256 representing ether balance
/// @return lastUpdated uint256 representing last update timestamp
/// @return gasMode The uint8 gas mode enum for the contract
function readGasParams(
address contractAddress
)
external
view
returns (
uint256 etherSeconds,
uint256 etherBalance,
uint256 lastUpdated,
GasMode gasMode
);
/// @notice Reads the yield configuration for a specific contract
/// @param contractAddress The address of the contract for which the yield configuration is to be read
/// @return yieldMode The uint8 yield mode enum for the contract
function readYieldConfiguration(
address contractAddress
) external view returns (YieldMode yieldMode);
}
// File: IBlastPoints.sol
pragma solidity ^0.8.7;
interface IBlastPoints {
function configurePointsOperator(address operator) external;
function configurePointsOperatorOnBehalf(address contractAddress, address operator) external;
}
// File: Roulette.sol
pragma solidity ^0.8.7;
contract Roulette is Ownable {
using SafeERC20 for IERC20;
address public house;
IERC20 public gameToken;
uint private maxCoinBet;
IBlast public constant BLAST =
IBlast(0x4300000000000000000000000000000000000002);
struct Bet {
uint number;
uint wager;
}
mapping(address => uint) private blockNumbers;
mapping(address => bytes32) private betHashes;
event PlayerBet(
address player,
uint randomNumber,
uint winnings,
bytes32 futureBlockhash
);
event PlayerBetCount(address player, uint totalBet);
modifier IsHuman() {
require(msg.sender == tx.origin, "function caller must be a human");
_;
}
modifier HasBlockNumber() {
require(
blockNumbers[msg.sender] > 0,
"must store block number before placing bet"
);
_;
}
constructor(
address initialOwner,
address _BlastPointsAddress,
address _pointsOperator,
address tokenAddress
) Ownable(initialOwner) {
//MAX BET
maxCoinBet = 720000000000000000000 ether;
gameToken = IERC20(tokenAddress);
IBlastPoints(_BlastPointsAddress).configurePointsOperator(
_pointsOperator
);
BLAST.configureClaimableGas();
}
function setHouse(address _house) external onlyOwner {
house = _house;
}
function commitToBet(
Bet[] calldata bets,
uint totalWager
) external payable {
gameToken.safeTransferFrom(msg.sender, address(house), totalWager);
checkBetsValid(bets, totalWager);
blockNumbers[msg.sender] = block.number;
betHashes[msg.sender] = keccak256(abi.encode(bets));
emit PlayerBetCount(msg.sender, totalWager);
}
function revealBet(Bet[] calldata bets) external IsHuman HasBlockNumber {
bytes32 betHash = keccak256(abi.encode(bets));
bytes32 futureBlockhash = blockhash(blockNumbers[msg.sender]);
blockNumbers[msg.sender] = 0;
uint randomNumber = uint(keccak256(abi.encode(futureBlockhash))) % 38;
uint winnings = 0;
if (futureBlockhash != 0) {
// ensure they havent just waited 256 blocks to get 0
for (uint i = 0; i < bets.length; i++) {
if (bets[i].number == randomNumber) {
winnings = bets[i].wager * 36;
if (betHash == betHashes[msg.sender]) {
IHouse(house).payout(msg.sender, winnings);
}
break; // prevent multiple wins with same number
}
}
}
emit PlayerBet(msg.sender, randomNumber, winnings, futureBlockhash);
betHashes[msg.sender] = 0;
}
function checkBetsValid(Bet[] calldata bets, uint totalWager) internal {
uint[38] memory playersMax;
uint correctWager = 0;
for (uint i = 0; i < bets.length; i++) {
playersMax[bets[i].number] += bets[i].wager;
correctWager += bets[i].wager;
if (playersMax[bets[i].number] > maxCoinBet) {
revert("Bet above max");
}
}
if (correctWager > totalWager) {
revert("Wager is not valid");
}
}
function _transferOwner(address newOwner) external onlyOwner {
transferOwnership(newOwner);
}
function updateMaxCoin(uint _maxCoinBet) external onlyOwner {
maxCoinBet = _maxCoinBet;
}
function claimMyContractsGas() external onlyOwner {
BLAST.claimAllGas(address(this), msg.sender);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"_BlastPointsAddress","type":"address"},{"internalType":"address","name":"_pointsOperator","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"randomNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"winnings","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"futureBlockhash","type":"bytes32"}],"name":"PlayerBet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalBet","type":"uint256"}],"name":"PlayerBetCount","type":"event"},{"inputs":[],"name":"BLAST","outputs":[{"internalType":"contract IBlast","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"_transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimMyContractsGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"uint256","name":"wager","type":"uint256"}],"internalType":"struct Roulette.Bet[]","name":"bets","type":"tuple[]"},{"internalType":"uint256","name":"totalWager","type":"uint256"}],"name":"commitToBet","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"gameToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"house","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"uint256","name":"wager","type":"uint256"}],"internalType":"struct Roulette.Bet[]","name":"bets","type":"tuple[]"}],"name":"revealBet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_house","type":"address"}],"name":"setHouse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxCoinBet","type":"uint256"}],"name":"updateMaxCoin","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561000f575f80fd5b50604051611c11380380611c1183398181016040528101906100319190610307565b835f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a2575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610099919061037a565b60405180910390fd5b6100b1816101e860201b60201c565b5070021daaf4bc2563ed0844af5d00000000006003819055508060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff166336b91f2b836040518263ffffffff1660e01b8152600401610143919061037a565b5f604051808303815f87803b15801561015a575f80fd5b505af115801561016c573d5f803e3d5ffd5b5050505073430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16634e606c476040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156101c9575f80fd5b505af11580156101db573d5f803e3d5ffd5b5050505050505050610393565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102d6826102ad565b9050919050565b6102e6816102cc565b81146102f0575f80fd5b50565b5f81519050610301816102dd565b92915050565b5f805f806080858703121561031f5761031e6102a9565b5b5f61032c878288016102f3565b945050602061033d878288016102f3565b935050604061034e878288016102f3565b925050606061035f878288016102f3565b91505092959194509250565b610374816102cc565b82525050565b5f60208201905061038d5f83018461036b565b92915050565b611871806103a05f395ff3fe6080604052600436106100a6575f3560e01c806397d757761161006357806397d757761461016c578063a208082314610196578063c3dfdae6146101be578063c5df2ce1146101e8578063f2fde38b14610210578063ff9b3acf14610238576100a6565b806301e7e893146100aa57806339021d3e146100d2578063715018a6146100ee57806377d5d2dc146101045780637f2a8a801461011a5780638da5cb5b14610142575b5f80fd5b3480156100b5575f80fd5b506100d060048036038101906100cb9190610fa1565b610262565b005b6100ec60048036038101906100e79190611060565b610276565b005b3480156100f9575f80fd5b506101026103da565b005b34801561010f575f80fd5b506101186103ed565b005b348015610125575f80fd5b50610140600480360381019061013b9190610fa1565b610487565b005b34801561014d575f80fd5b506101566104d2565b60405161016391906110cc565b60405180910390f35b348015610177575f80fd5b506101806104f9565b60405161018d9190611140565b60405180910390f35b3480156101a1575f80fd5b506101bc60048036038101906101b79190611159565b610511565b005b3480156101c9575f80fd5b506101d26108b5565b6040516101df91906111c4565b60405180910390f35b3480156101f3575f80fd5b5061020e600480360381019061020991906111dd565b6108da565b005b34801561021b575f80fd5b5061023660048036038101906102319190610fa1565b6108ec565b005b348015610243575f80fd5b5061024c610970565b60405161025991906110cc565b60405180910390f35b61026a610995565b610273816108ec565b50565b6102e53360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a1c909392919063ffffffff16565b6102f0838383610a9e565b4360045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550828260405160200161034592919061130b565b6040516020818303038152906040528051906020012060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507fc865943837ee5972bf361f83b3f69f8ba7a4be32258946fd5cdab242f075cfb533826040516103cd92919061133c565b60405180910390a1505050565b6103e2610995565b6103eb5f610c10565b565b6103f5610995565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663954fa5ee30336040518363ffffffff1660e01b8152600401610444929190611363565b6020604051808303815f875af1158015610460573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610484919061139e565b50565b61048f610995565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73430000000000000000000000000000000000000281565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461057f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057690611423565b60405180910390fd5b5f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054116105fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f5906114b1565b60405180910390fd5b5f828260405160200161061292919061130b565b6040516020818303038152906040528051906020012090505f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20544090505f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f6026826040516020016106c291906114e7565b604051602081830303815290604052805190602001205f1c6106e4919061152d565b90505f80801b831461082c575f5b8686905081101561082a57828787838181106107115761071061155d565b5b9050604002015f01350361081d5760248787838181106107345761073361155d565b5b9050604002016020013561074891906115b7565b915060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205485036108185760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663117de2fd33846040518363ffffffff1660e01b81526004016107ea92919061133c565b5f604051808303815f87803b158015610801575f80fd5b505af1158015610813573d5f803e3d5ffd5b505050505b61082a565b80806001019150506106f2565b505b7f92088998f44d6065dd095591180ebee496820c96eec4a43a200ff5a1e70c92013383838660405161086194939291906115f8565b60405180910390a15f801b60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108e2610995565b8060038190555050565b6108f4610995565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610964575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161095b91906110cc565b60405180910390fd5b61096d81610c10565b50565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61099d610cd1565b73ffffffffffffffffffffffffffffffffffffffff166109bb6104d2565b73ffffffffffffffffffffffffffffffffffffffff1614610a1a576109de610cd1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610a1191906110cc565b60405180910390fd5b565b610a98848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401610a519392919061163b565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610cd8565b50505050565b610aa6610f1c565b5f805b85859050811015610bc557858582818110610ac757610ac661155d565b5b9050604002016020013583878784818110610ae557610ae461155d565b5b9050604002015f013560268110610aff57610afe61155d565b5b60200201818151610b109190611670565b91508181525050858582818110610b2a57610b2961155d565b5b9050604002016020013582610b3f9190611670565b915060035483878784818110610b5857610b5761155d565b5b9050604002015f013560268110610b7257610b7161155d565b5b60200201511115610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf906116ed565b60405180910390fd5b8080600101915050610aa9565b5082811115610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0090611755565b60405180910390fd5b5050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f610d02828473ffffffffffffffffffffffffffffffffffffffff16610d6d90919063ffffffff16565b90505f815114158015610d26575080806020019051810190610d2491906117a8565b155b15610d6857826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401610d5f91906110cc565b60405180910390fd5b505050565b6060610d7a83835f610d82565b905092915050565b606081471015610dc957306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401610dc091906110cc565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051610df19190611825565b5f6040518083038185875af1925050503d805f8114610e2b576040519150601f19603f3d011682016040523d82523d5f602084013e610e30565b606091505b5091509150610e40868383610e4b565b925050509392505050565b606082610e6057610e5b82610ed8565b610ed0565b5f8251148015610e8657505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15610ec857836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610ebf91906110cc565b60405180910390fd5b819050610ed1565b5b9392505050565b5f81511115610eea5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051806104c00160405280602690602082028036833780820191505090505090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f7082610f47565b9050919050565b610f8081610f66565b8114610f8a575f80fd5b50565b5f81359050610f9b81610f77565b92915050565b5f60208284031215610fb657610fb5610f3f565b5b5f610fc384828501610f8d565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112610fed57610fec610fcc565b5b8235905067ffffffffffffffff81111561100a57611009610fd0565b5b60208301915083604082028301111561102657611025610fd4565b5b9250929050565b5f819050919050565b61103f8161102d565b8114611049575f80fd5b50565b5f8135905061105a81611036565b92915050565b5f805f6040848603121561107757611076610f3f565b5b5f84013567ffffffffffffffff81111561109457611093610f43565b5b6110a086828701610fd8565b935093505060206110b38682870161104c565b9150509250925092565b6110c681610f66565b82525050565b5f6020820190506110df5f8301846110bd565b92915050565b5f819050919050565b5f6111086111036110fe84610f47565b6110e5565b610f47565b9050919050565b5f611119826110ee565b9050919050565b5f61112a8261110f565b9050919050565b61113a81611120565b82525050565b5f6020820190506111535f830184611131565b92915050565b5f806020838503121561116f5761116e610f3f565b5b5f83013567ffffffffffffffff81111561118c5761118b610f43565b5b61119885828601610fd8565b92509250509250929050565b5f6111ae8261110f565b9050919050565b6111be816111a4565b82525050565b5f6020820190506111d75f8301846111b5565b92915050565b5f602082840312156111f2576111f1610f3f565b5b5f6111ff8482850161104c565b91505092915050565b5f82825260208201905092915050565b5f819050919050565b5f61122f602084018461104c565b905092915050565b6112408161102d565b82525050565b604082016112565f830183611221565b6112625f850182611237565b506112706020830183611221565b61127d6020850182611237565b50505050565b5f61128e8383611246565b60408301905092915050565b5f82905092915050565b5f604082019050919050565b5f6112bb8385611208565b93506112c682611218565b805f5b858110156112fe576112db828461129a565b6112e58882611283565b97506112f0836112a4565b9250506001810190506112c9565b5085925050509392505050565b5f6020820190508181035f8301526113248184866112b0565b90509392505050565b6113368161102d565b82525050565b5f60408201905061134f5f8301856110bd565b61135c602083018461132d565b9392505050565b5f6040820190506113765f8301856110bd565b61138360208301846110bd565b9392505050565b5f8151905061139881611036565b92915050565b5f602082840312156113b3576113b2610f3f565b5b5f6113c08482850161138a565b91505092915050565b5f82825260208201905092915050565b7f66756e6374696f6e2063616c6c6572206d75737420626520612068756d616e005f82015250565b5f61140d601f836113c9565b9150611418826113d9565b602082019050919050565b5f6020820190508181035f83015261143a81611401565b9050919050565b7f6d7573742073746f726520626c6f636b206e756d626572206265666f726520705f8201527f6c6163696e672062657400000000000000000000000000000000000000000000602082015250565b5f61149b602a836113c9565b91506114a682611441565b604082019050919050565b5f6020820190508181035f8301526114c88161148f565b9050919050565b5f819050919050565b6114e1816114cf565b82525050565b5f6020820190506114fa5f8301846114d8565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6115378261102d565b91506115428361102d565b92508261155257611551611500565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6115c18261102d565b91506115cc8361102d565b92508282026115da8161102d565b915082820484148315176115f1576115f061158a565b5b5092915050565b5f60808201905061160b5f8301876110bd565b611618602083018661132d565b611625604083018561132d565b61163260608301846114d8565b95945050505050565b5f60608201905061164e5f8301866110bd565b61165b60208301856110bd565b611668604083018461132d565b949350505050565b5f61167a8261102d565b91506116858361102d565b925082820190508082111561169d5761169c61158a565b5b92915050565b7f4265742061626f7665206d6178000000000000000000000000000000000000005f82015250565b5f6116d7600d836113c9565b91506116e2826116a3565b602082019050919050565b5f6020820190508181035f830152611704816116cb565b9050919050565b7f5761676572206973206e6f742076616c696400000000000000000000000000005f82015250565b5f61173f6012836113c9565b915061174a8261170b565b602082019050919050565b5f6020820190508181035f83015261176c81611733565b9050919050565b5f8115159050919050565b61178781611773565b8114611791575f80fd5b50565b5f815190506117a28161177e565b92915050565b5f602082840312156117bd576117bc610f3f565b5b5f6117ca84828501611794565b91505092915050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6117ff826117d3565b61180981856117dd565b93506118198185602086016117e7565b80840191505092915050565b5f61183082846117f5565b91508190509291505056fea26469706673582212200acda5ce29d47864d74735ff9f7ae26de1a8b8a940dc186cc724a23213ca022f64736f6c634300081a003300000000000000000000000051d789cfd37d1ddd44661dbd39a456d77c95d01c0000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd8000000000000000000000000002612c6c8bad9a8fe35450850c215822c7fbfde40000000000000000000000000b1a5700fa2358173fe465e6ea4ff52e36e88e2ad
Deployed Bytecode
0x6080604052600436106100a6575f3560e01c806397d757761161006357806397d757761461016c578063a208082314610196578063c3dfdae6146101be578063c5df2ce1146101e8578063f2fde38b14610210578063ff9b3acf14610238576100a6565b806301e7e893146100aa57806339021d3e146100d2578063715018a6146100ee57806377d5d2dc146101045780637f2a8a801461011a5780638da5cb5b14610142575b5f80fd5b3480156100b5575f80fd5b506100d060048036038101906100cb9190610fa1565b610262565b005b6100ec60048036038101906100e79190611060565b610276565b005b3480156100f9575f80fd5b506101026103da565b005b34801561010f575f80fd5b506101186103ed565b005b348015610125575f80fd5b50610140600480360381019061013b9190610fa1565b610487565b005b34801561014d575f80fd5b506101566104d2565b60405161016391906110cc565b60405180910390f35b348015610177575f80fd5b506101806104f9565b60405161018d9190611140565b60405180910390f35b3480156101a1575f80fd5b506101bc60048036038101906101b79190611159565b610511565b005b3480156101c9575f80fd5b506101d26108b5565b6040516101df91906111c4565b60405180910390f35b3480156101f3575f80fd5b5061020e600480360381019061020991906111dd565b6108da565b005b34801561021b575f80fd5b5061023660048036038101906102319190610fa1565b6108ec565b005b348015610243575f80fd5b5061024c610970565b60405161025991906110cc565b60405180910390f35b61026a610995565b610273816108ec565b50565b6102e53360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a1c909392919063ffffffff16565b6102f0838383610a9e565b4360045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550828260405160200161034592919061130b565b6040516020818303038152906040528051906020012060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507fc865943837ee5972bf361f83b3f69f8ba7a4be32258946fd5cdab242f075cfb533826040516103cd92919061133c565b60405180910390a1505050565b6103e2610995565b6103eb5f610c10565b565b6103f5610995565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663954fa5ee30336040518363ffffffff1660e01b8152600401610444929190611363565b6020604051808303815f875af1158015610460573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610484919061139e565b50565b61048f610995565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73430000000000000000000000000000000000000281565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461057f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057690611423565b60405180910390fd5b5f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054116105fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f5906114b1565b60405180910390fd5b5f828260405160200161061292919061130b565b6040516020818303038152906040528051906020012090505f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20544090505f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f6026826040516020016106c291906114e7565b604051602081830303815290604052805190602001205f1c6106e4919061152d565b90505f80801b831461082c575f5b8686905081101561082a57828787838181106107115761071061155d565b5b9050604002015f01350361081d5760248787838181106107345761073361155d565b5b9050604002016020013561074891906115b7565b915060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205485036108185760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663117de2fd33846040518363ffffffff1660e01b81526004016107ea92919061133c565b5f604051808303815f87803b158015610801575f80fd5b505af1158015610813573d5f803e3d5ffd5b505050505b61082a565b80806001019150506106f2565b505b7f92088998f44d6065dd095591180ebee496820c96eec4a43a200ff5a1e70c92013383838660405161086194939291906115f8565b60405180910390a15f801b60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108e2610995565b8060038190555050565b6108f4610995565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610964575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161095b91906110cc565b60405180910390fd5b61096d81610c10565b50565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61099d610cd1565b73ffffffffffffffffffffffffffffffffffffffff166109bb6104d2565b73ffffffffffffffffffffffffffffffffffffffff1614610a1a576109de610cd1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610a1191906110cc565b60405180910390fd5b565b610a98848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401610a519392919061163b565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610cd8565b50505050565b610aa6610f1c565b5f805b85859050811015610bc557858582818110610ac757610ac661155d565b5b9050604002016020013583878784818110610ae557610ae461155d565b5b9050604002015f013560268110610aff57610afe61155d565b5b60200201818151610b109190611670565b91508181525050858582818110610b2a57610b2961155d565b5b9050604002016020013582610b3f9190611670565b915060035483878784818110610b5857610b5761155d565b5b9050604002015f013560268110610b7257610b7161155d565b5b60200201511115610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf906116ed565b60405180910390fd5b8080600101915050610aa9565b5082811115610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0090611755565b60405180910390fd5b5050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f610d02828473ffffffffffffffffffffffffffffffffffffffff16610d6d90919063ffffffff16565b90505f815114158015610d26575080806020019051810190610d2491906117a8565b155b15610d6857826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401610d5f91906110cc565b60405180910390fd5b505050565b6060610d7a83835f610d82565b905092915050565b606081471015610dc957306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401610dc091906110cc565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051610df19190611825565b5f6040518083038185875af1925050503d805f8114610e2b576040519150601f19603f3d011682016040523d82523d5f602084013e610e30565b606091505b5091509150610e40868383610e4b565b925050509392505050565b606082610e6057610e5b82610ed8565b610ed0565b5f8251148015610e8657505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15610ec857836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610ebf91906110cc565b60405180910390fd5b819050610ed1565b5b9392505050565b5f81511115610eea5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051806104c00160405280602690602082028036833780820191505090505090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f7082610f47565b9050919050565b610f8081610f66565b8114610f8a575f80fd5b50565b5f81359050610f9b81610f77565b92915050565b5f60208284031215610fb657610fb5610f3f565b5b5f610fc384828501610f8d565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112610fed57610fec610fcc565b5b8235905067ffffffffffffffff81111561100a57611009610fd0565b5b60208301915083604082028301111561102657611025610fd4565b5b9250929050565b5f819050919050565b61103f8161102d565b8114611049575f80fd5b50565b5f8135905061105a81611036565b92915050565b5f805f6040848603121561107757611076610f3f565b5b5f84013567ffffffffffffffff81111561109457611093610f43565b5b6110a086828701610fd8565b935093505060206110b38682870161104c565b9150509250925092565b6110c681610f66565b82525050565b5f6020820190506110df5f8301846110bd565b92915050565b5f819050919050565b5f6111086111036110fe84610f47565b6110e5565b610f47565b9050919050565b5f611119826110ee565b9050919050565b5f61112a8261110f565b9050919050565b61113a81611120565b82525050565b5f6020820190506111535f830184611131565b92915050565b5f806020838503121561116f5761116e610f3f565b5b5f83013567ffffffffffffffff81111561118c5761118b610f43565b5b61119885828601610fd8565b92509250509250929050565b5f6111ae8261110f565b9050919050565b6111be816111a4565b82525050565b5f6020820190506111d75f8301846111b5565b92915050565b5f602082840312156111f2576111f1610f3f565b5b5f6111ff8482850161104c565b91505092915050565b5f82825260208201905092915050565b5f819050919050565b5f61122f602084018461104c565b905092915050565b6112408161102d565b82525050565b604082016112565f830183611221565b6112625f850182611237565b506112706020830183611221565b61127d6020850182611237565b50505050565b5f61128e8383611246565b60408301905092915050565b5f82905092915050565b5f604082019050919050565b5f6112bb8385611208565b93506112c682611218565b805f5b858110156112fe576112db828461129a565b6112e58882611283565b97506112f0836112a4565b9250506001810190506112c9565b5085925050509392505050565b5f6020820190508181035f8301526113248184866112b0565b90509392505050565b6113368161102d565b82525050565b5f60408201905061134f5f8301856110bd565b61135c602083018461132d565b9392505050565b5f6040820190506113765f8301856110bd565b61138360208301846110bd565b9392505050565b5f8151905061139881611036565b92915050565b5f602082840312156113b3576113b2610f3f565b5b5f6113c08482850161138a565b91505092915050565b5f82825260208201905092915050565b7f66756e6374696f6e2063616c6c6572206d75737420626520612068756d616e005f82015250565b5f61140d601f836113c9565b9150611418826113d9565b602082019050919050565b5f6020820190508181035f83015261143a81611401565b9050919050565b7f6d7573742073746f726520626c6f636b206e756d626572206265666f726520705f8201527f6c6163696e672062657400000000000000000000000000000000000000000000602082015250565b5f61149b602a836113c9565b91506114a682611441565b604082019050919050565b5f6020820190508181035f8301526114c88161148f565b9050919050565b5f819050919050565b6114e1816114cf565b82525050565b5f6020820190506114fa5f8301846114d8565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6115378261102d565b91506115428361102d565b92508261155257611551611500565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6115c18261102d565b91506115cc8361102d565b92508282026115da8161102d565b915082820484148315176115f1576115f061158a565b5b5092915050565b5f60808201905061160b5f8301876110bd565b611618602083018661132d565b611625604083018561132d565b61163260608301846114d8565b95945050505050565b5f60608201905061164e5f8301866110bd565b61165b60208301856110bd565b611668604083018461132d565b949350505050565b5f61167a8261102d565b91506116858361102d565b925082820190508082111561169d5761169c61158a565b5b92915050565b7f4265742061626f7665206d6178000000000000000000000000000000000000005f82015250565b5f6116d7600d836113c9565b91506116e2826116a3565b602082019050919050565b5f6020820190508181035f830152611704816116cb565b9050919050565b7f5761676572206973206e6f742076616c696400000000000000000000000000005f82015250565b5f61173f6012836113c9565b915061174a8261170b565b602082019050919050565b5f6020820190508181035f83015261176c81611733565b9050919050565b5f8115159050919050565b61178781611773565b8114611791575f80fd5b50565b5f815190506117a28161177e565b92915050565b5f602082840312156117bd576117bc610f3f565b5b5f6117ca84828501611794565b91505092915050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6117ff826117d3565b61180981856117dd565b93506118198185602086016117e7565b80840191505092915050565b5f61183082846117f5565b91508190509291505056fea26469706673582212200acda5ce29d47864d74735ff9f7ae26de1a8b8a940dc186cc724a23213ca022f64736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000051d789cfd37d1ddd44661dbd39a456d77c95d01c0000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd8000000000000000000000000002612c6c8bad9a8fe35450850c215822c7fbfde40000000000000000000000000b1a5700fa2358173fe465e6ea4ff52e36e88e2ad
-----Decoded View---------------
Arg [0] : initialOwner (address): 0x51D789cfD37D1DDD44661DBd39a456d77C95d01c
Arg [1] : _BlastPointsAddress (address): 0x2536FE9ab3F511540F2f9e2eC2A805005C3Dd800
Arg [2] : _pointsOperator (address): 0x2612C6c8BaD9a8FE35450850C215822c7fbFDe40
Arg [3] : tokenAddress (address): 0xb1a5700fA2358173Fe465e6eA4Ff52E36e88E2ad
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000051d789cfd37d1ddd44661dbd39a456d77c95d01c
Arg [1] : 0000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd800
Arg [2] : 0000000000000000000000002612c6c8bad9a8fe35450850c215822c7fbfde40
Arg [3] : 000000000000000000000000b1a5700fa2358173fe465e6ea4ff52e36e88e2ad
Deployed Bytecode Sourcemap
32247:3807:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35712:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33741:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3361:103;;;;;;;;;;;;;:::i;:::-;;35938:113;;;;;;;;;;;;;:::i;:::-;;33647:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2686:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32407:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34150:1016;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32343:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35827:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3619:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32316:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35712:107;2572:13;:11;:13::i;:::-;35784:27:::1;35802:8;35784:17;:27::i;:::-;35712:107:::0;:::o;33741:401::-;33853:66;33880:10;33900:5;;;;;;;;;;;33908:10;33853:9;;;;;;;;;;;:26;;;;:66;;;;;;:::i;:::-;33932:32;33947:4;;33953:10;33932:14;:32::i;:::-;34004:12;33977;:24;33990:10;33977:24;;;;;;;;;;;;;;;:39;;;;34072:4;;34061:16;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34051:27;;;;;;34027:9;:21;34037:10;34027:21;;;;;;;;;;;;;;;:51;;;;34096:38;34111:10;34123;34096:38;;;;;;;:::i;:::-;;;;;;;;33741:401;;;:::o;3361:103::-;2572:13;:11;:13::i;:::-;3426:30:::1;3453:1;3426:18;:30::i;:::-;3361:103::o:0;35938:113::-;2572:13;:11;:13::i;:::-;32454:42:::1;35999:17;;;36025:4;36032:10;35999:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35938:113::o:0;33647:86::-;2572:13;:11;:13::i;:::-;33719:6:::1;33711:5;;:14;;;;;;;;;;;;;;;;;;33647:86:::0;:::o;2686:87::-;2732:7;2759:6;;;;;;;;;;;2752:13;;2686:87;:::o;32407:90::-;32454:42;32407:90;:::o;34150:1016::-;32936:9;32922:23;;:10;:23;;;32914:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33095:1:::1;33068:12;:24;33081:10;33068:24;;;;;;;;;;;;;;;;:28;33046:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;34233:15:::2;34272:4;;34261:16;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34251:27;;;;;;34233:45;;34291:23;34327:12;:24;34340:10;34327:24;;;;;;;;;;;;;;;;34317:35;34291:61;;34390:1;34363:12;:24;34376:10;34363:24;;;;;;;;;;;;;;;:28;;;;34404:17;34471:2;34450:15;34439:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;34429:38;;;;;;34424:44;;:49;;;;:::i;:::-;34404:69;;34484:13;34537:1:::0;34518:20;::::2;:15;:20;34514:527;;34627:6;34622:408;34643:4;;:11;;34639:1;:15;34622:408;;;34702:12;34684:4;;34689:1;34684:7;;;;;;;:::i;:::-;;;;;;;:14;;;:30:::0;34680:335:::2;;34766:2;34750:4;;34755:1;34750:7;;;;;;;:::i;:::-;;;;;;;:13;;;:18;;;;:::i;:::-;34739:29;;34808:9;:21;34818:10;34808:21;;;;;;;;;;;;;;;;34797:7;:32:::0;34793:131:::2;;34865:5;;;;;;;;;;;34858:20;;;34879:10;34891:8;34858:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;34793:131;34948:5;;34680:335;34656:3;;;;;;;34622:408;;;;34514:527;35058:62;35068:10;35080:12;35094:8;35104:15;35058:62;;;;;;;;;:::i;:::-;;;;;;;;35157:1;35133:25:::0;::::2;:9;:21;35143:10;35133:21;;;;;;;;;;;;;;;:25;;;;34222:944;;;;34150:1016:::0;;:::o;32343:23::-;;;;;;;;;;;;;:::o;35827:103::-;2572:13;:11;:13::i;:::-;35911:11:::1;35898:10;:24;;;;35827:103:::0;:::o;3619:220::-;2572:13;:11;:13::i;:::-;3724:1:::1;3704:22;;:8;:22;;::::0;3700:93:::1;;3778:1;3750:31;;;;;;;;;;;:::i;:::-;;;;;;;;3700:93;3803:28;3822:8;3803:18;:28::i;:::-;3619:220:::0;:::o;32316:20::-;;;;;;;;;;;;;:::o;2851:166::-;2922:12;:10;:12::i;:::-;2911:23;;:7;:5;:7::i;:::-;:23;;;2907:103;;2985:12;:10;:12::i;:::-;2958:40;;;;;;;;;;;:::i;:::-;;;;;;;;2907:103;2851:166::o;19103:190::-;19204:81;19224:5;19246;:18;;;19267:4;19273:2;19277:5;19231:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19204:19;:81::i;:::-;19103:190;;;;:::o;35174:530::-;35256:26;;:::i;:::-;35293:17;35332:6;35327:272;35348:4;;:11;;35344:1;:15;35327:272;;;35411:4;;35416:1;35411:7;;;;;;;:::i;:::-;;;;;;;:13;;;35381:10;35392:4;;35397:1;35392:7;;;;;;;:::i;:::-;;;;;;;:14;;;35381:26;;;;;;;:::i;:::-;;;;;:43;;;;;;;:::i;:::-;;;;;;;;35455:4;;35460:1;35455:7;;;;;;;:::i;:::-;;;;;;;:13;;;35439:29;;;;;:::i;:::-;;;35518:10;;35489;35500:4;;35505:1;35500:7;;;;;;;:::i;:::-;;;;;;;:14;;;35489:26;;;;;;;:::i;:::-;;;;;;:39;35485:103;;;35549:23;;;;;;;;;;:::i;:::-;;;;;;;;35485:103;35361:3;;;;;;;35327:272;;;;35630:10;35615:12;:25;35611:86;;;35657:28;;;;;;;;;;:::i;:::-;;;;;;;;35611:86;35245:459;;35174:530;;;:::o;3999:191::-;4073:16;4092:6;;;;;;;;;;;4073:25;;4118:8;4109:6;;:17;;;;;;;;;;;;;;;;;;4173:8;4142:40;;4163:8;4142:40;;;;;;;;;;;;4062:128;3999:191;:::o;695:98::-;748:7;775:10;768:17;;695:98;:::o;21507:638::-;21931:23;21957:33;21985:4;21965:5;21957:27;;;;:33;;;;:::i;:::-;21931:59;;22026:1;22005:10;:17;:22;;:57;;;;;22043:10;22032:30;;;;;;;;;;;;:::i;:::-;22031:31;22005:57;22001:137;;;22119:5;22086:40;;;;;;;;;;;:::i;:::-;;;;;;;;22001:137;21577:568;21507:638;;:::o;13822:153::-;13897:12;13929:38;13951:6;13959:4;13965:1;13929:21;:38::i;:::-;13922:45;;13822:153;;;;:::o;14310:398::-;14409:12;14462:5;14438:21;:29;14434:110;;;14526:4;14491:41;;;;;;;;;;;:::i;:::-;;;;;;;;14434:110;14555:12;14569:23;14596:6;:11;;14615:5;14622:4;14596:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14554:73;;;;14645:55;14672:6;14680:7;14689:10;14645:26;:55::i;:::-;14638:62;;;;14310:398;;;;;:::o;15786:597::-;15934:12;15964:7;15959:417;;15988:19;15996:10;15988:7;:19::i;:::-;15959:417;;;16237:1;16216:10;:17;:22;:49;;;;;16264:1;16242:6;:18;;;:23;16216:49;16212:121;;;16310:6;16293:24;;;;;;;;;;;:::i;:::-;;;;;;;;16212:121;16354:10;16347:17;;;;15959:417;15786:597;;;;;;:::o;16936:528::-;17089:1;17069:10;:17;:21;17065:392;;;17301:10;17295:17;17358:15;17345:10;17341:2;17337:19;17330:44;17065:392;17428:17;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:117::-;1285:1;1282;1275:12;1299:117;1408:1;1405;1398:12;1422:117;1531:1;1528;1521:12;1574:591;1670:8;1680:6;1730:3;1723:4;1715:6;1711:17;1707:27;1697:122;;1738:79;;:::i;:::-;1697:122;1851:6;1838:20;1828:30;;1881:18;1873:6;1870:30;1867:117;;;1903:79;;:::i;:::-;1867:117;2017:4;2009:6;2005:17;1993:29;;2071:3;2063:4;2055:6;2051:17;2041:8;2037:32;2034:41;2031:128;;;2078:79;;:::i;:::-;2031:128;1574:591;;;;;:::o;2171:77::-;2208:7;2237:5;2226:16;;2171:77;;;:::o;2254:122::-;2327:24;2345:5;2327:24;:::i;:::-;2320:5;2317:35;2307:63;;2366:1;2363;2356:12;2307:63;2254:122;:::o;2382:139::-;2428:5;2466:6;2453:20;2444:29;;2482:33;2509:5;2482:33;:::i;:::-;2382:139;;;;:::o;2527:750::-;2645:6;2653;2661;2710:2;2698:9;2689:7;2685:23;2681:32;2678:119;;;2716:79;;:::i;:::-;2678:119;2864:1;2853:9;2849:17;2836:31;2894:18;2886:6;2883:30;2880:117;;;2916:79;;:::i;:::-;2880:117;3029:103;3124:7;3115:6;3104:9;3100:22;3029:103;:::i;:::-;3011:121;;;;2807:335;3181:2;3207:53;3252:7;3243:6;3232:9;3228:22;3207:53;:::i;:::-;3197:63;;3152:118;2527:750;;;;;:::o;3283:118::-;3370:24;3388:5;3370:24;:::i;:::-;3365:3;3358:37;3283:118;;:::o;3407:222::-;3500:4;3538:2;3527:9;3523:18;3515:26;;3551:71;3619:1;3608:9;3604:17;3595:6;3551:71;:::i;:::-;3407:222;;;;:::o;3635:60::-;3663:3;3684:5;3677:12;;3635:60;;;:::o;3701:142::-;3751:9;3784:53;3802:34;3811:24;3829:5;3811:24;:::i;:::-;3802:34;:::i;:::-;3784:53;:::i;:::-;3771:66;;3701:142;;;:::o;3849:126::-;3899:9;3932:37;3963:5;3932:37;:::i;:::-;3919:50;;3849:126;;;:::o;3981:141::-;4046:9;4079:37;4110:5;4079:37;:::i;:::-;4066:50;;3981:141;;;:::o;4128:161::-;4230:52;4276:5;4230:52;:::i;:::-;4225:3;4218:65;4128:161;;:::o;4295:252::-;4403:4;4441:2;4430:9;4426:18;4418:26;;4454:86;4537:1;4526:9;4522:17;4513:6;4454:86;:::i;:::-;4295:252;;;;:::o;4553:605::-;4662:6;4670;4719:2;4707:9;4698:7;4694:23;4690:32;4687:119;;;4725:79;;:::i;:::-;4687:119;4873:1;4862:9;4858:17;4845:31;4903:18;4895:6;4892:30;4889:117;;;4925:79;;:::i;:::-;4889:117;5038:103;5133:7;5124:6;5113:9;5109:22;5038:103;:::i;:::-;5020:121;;;;4816:335;4553:605;;;;;:::o;5164:140::-;5228:9;5261:37;5292:5;5261:37;:::i;:::-;5248:50;;5164:140;;;:::o;5310:159::-;5411:51;5456:5;5411:51;:::i;:::-;5406:3;5399:64;5310:159;;:::o;5475:250::-;5582:4;5620:2;5609:9;5605:18;5597:26;;5633:85;5715:1;5704:9;5700:17;5691:6;5633:85;:::i;:::-;5475:250;;;;:::o;5731:329::-;5790:6;5839:2;5827:9;5818:7;5814:23;5810:32;5807:119;;;5845:79;;:::i;:::-;5807:119;5965:1;5990:53;6035:7;6026:6;6015:9;6011:22;5990:53;:::i;:::-;5980:63;;5936:117;5731:329;;;;:::o;6066:205::-;6186:11;6220:6;6215:3;6208:19;6260:4;6255:3;6251:14;6236:29;;6066:205;;;;:::o;6277:125::-;6369:4;6392:3;6384:11;;6277:125;;;:::o;6408:122::-;6460:5;6485:39;6520:2;6515:3;6511:12;6506:3;6485:39;:::i;:::-;6476:48;;6408:122;;;;:::o;6536:108::-;6613:24;6631:5;6613:24;:::i;:::-;6608:3;6601:37;6536:108;;:::o;6700:548::-;6831:4;6826:3;6822:14;6903:50;6947:4;6940:5;6936:16;6929:5;6903:50;:::i;:::-;6966:63;7023:4;7018:3;7014:14;7000:12;6966:63;:::i;:::-;6846:193;7105:50;7149:4;7142:5;7138:16;7131:5;7105:50;:::i;:::-;7168:63;7225:4;7220:3;7216:14;7202:12;7168:63;:::i;:::-;7049:192;6800:448;6700:548;;:::o;7254:267::-;7367:10;7388:90;7474:3;7466:6;7388:90;:::i;:::-;7510:4;7505:3;7501:14;7487:28;;7254:267;;;;:::o;7527:109::-;7602:5;7627:3;7618:12;;7527:109;;;;:::o;7642:138::-;7737:4;7769;7764:3;7760:14;7752:22;;7642:138;;;:::o;7840:877::-;8013:3;8036:107;8136:6;8131:3;8036:107;:::i;:::-;8029:114;;8167:81;8242:5;8167:81;:::i;:::-;8271:7;8302:1;8287:405;8312:6;8309:1;8306:13;8287:405;;;8382:65;8440:6;8431:7;8382:65;:::i;:::-;8467:107;8570:3;8555:13;8467:107;:::i;:::-;8460:114;;8597:85;8675:6;8597:85;:::i;:::-;8587:95;;8347:345;8334:1;8331;8327:9;8322:14;;8287:405;;;8291:14;8708:3;8701:10;;8018:699;;7840:877;;;;;:::o;8723:481::-;8920:4;8958:2;8947:9;8943:18;8935:26;;9007:9;9001:4;8997:20;8993:1;8982:9;8978:17;8971:47;9035:162;9192:4;9183:6;9175;9035:162;:::i;:::-;9027:170;;8723:481;;;;;:::o;9210:118::-;9297:24;9315:5;9297:24;:::i;:::-;9292:3;9285:37;9210:118;;:::o;9334:332::-;9455:4;9493:2;9482:9;9478:18;9470:26;;9506:71;9574:1;9563:9;9559:17;9550:6;9506:71;:::i;:::-;9587:72;9655:2;9644:9;9640:18;9631:6;9587:72;:::i;:::-;9334:332;;;;;:::o;9672:::-;9793:4;9831:2;9820:9;9816:18;9808:26;;9844:71;9912:1;9901:9;9897:17;9888:6;9844:71;:::i;:::-;9925:72;9993:2;9982:9;9978:18;9969:6;9925:72;:::i;:::-;9672:332;;;;;:::o;10010:143::-;10067:5;10098:6;10092:13;10083:22;;10114:33;10141:5;10114:33;:::i;:::-;10010:143;;;;:::o;10159:351::-;10229:6;10278:2;10266:9;10257:7;10253:23;10249:32;10246:119;;;10284:79;;:::i;:::-;10246:119;10404:1;10429:64;10485:7;10476:6;10465:9;10461:22;10429:64;:::i;:::-;10419:74;;10375:128;10159:351;;;;:::o;10516:169::-;10600:11;10634:6;10629:3;10622:19;10674:4;10669:3;10665:14;10650:29;;10516:169;;;;:::o;10691:181::-;10831:33;10827:1;10819:6;10815:14;10808:57;10691:181;:::o;10878:366::-;11020:3;11041:67;11105:2;11100:3;11041:67;:::i;:::-;11034:74;;11117:93;11206:3;11117:93;:::i;:::-;11235:2;11230:3;11226:12;11219:19;;10878:366;;;:::o;11250:419::-;11416:4;11454:2;11443:9;11439:18;11431:26;;11503:9;11497:4;11493:20;11489:1;11478:9;11474:17;11467:47;11531:131;11657:4;11531:131;:::i;:::-;11523:139;;11250:419;;;:::o;11675:229::-;11815:34;11811:1;11803:6;11799:14;11792:58;11884:12;11879:2;11871:6;11867:15;11860:37;11675:229;:::o;11910:366::-;12052:3;12073:67;12137:2;12132:3;12073:67;:::i;:::-;12066:74;;12149:93;12238:3;12149:93;:::i;:::-;12267:2;12262:3;12258:12;12251:19;;11910:366;;;:::o;12282:419::-;12448:4;12486:2;12475:9;12471:18;12463:26;;12535:9;12529:4;12525:20;12521:1;12510:9;12506:17;12499:47;12563:131;12689:4;12563:131;:::i;:::-;12555:139;;12282:419;;;:::o;12707:77::-;12744:7;12773:5;12762:16;;12707:77;;;:::o;12790:118::-;12877:24;12895:5;12877:24;:::i;:::-;12872:3;12865:37;12790:118;;:::o;12914:222::-;13007:4;13045:2;13034:9;13030:18;13022:26;;13058:71;13126:1;13115:9;13111:17;13102:6;13058:71;:::i;:::-;12914:222;;;;:::o;13142:180::-;13190:77;13187:1;13180:88;13287:4;13284:1;13277:15;13311:4;13308:1;13301:15;13328:176;13360:1;13377:20;13395:1;13377:20;:::i;:::-;13372:25;;13411:20;13429:1;13411:20;:::i;:::-;13406:25;;13450:1;13440:35;;13455:18;;:::i;:::-;13440:35;13496:1;13493;13489:9;13484:14;;13328:176;;;;:::o;13510:180::-;13558:77;13555:1;13548:88;13655:4;13652:1;13645:15;13679:4;13676:1;13669:15;13696:180;13744:77;13741:1;13734:88;13841:4;13838:1;13831:15;13865:4;13862:1;13855:15;13882:410;13922:7;13945:20;13963:1;13945:20;:::i;:::-;13940:25;;13979:20;13997:1;13979:20;:::i;:::-;13974:25;;14034:1;14031;14027:9;14056:30;14074:11;14056:30;:::i;:::-;14045:41;;14235:1;14226:7;14222:15;14219:1;14216:22;14196:1;14189:9;14169:83;14146:139;;14265:18;;:::i;:::-;14146:139;13930:362;13882:410;;;;:::o;14298:553::-;14475:4;14513:3;14502:9;14498:19;14490:27;;14527:71;14595:1;14584:9;14580:17;14571:6;14527:71;:::i;:::-;14608:72;14676:2;14665:9;14661:18;14652:6;14608:72;:::i;:::-;14690;14758:2;14747:9;14743:18;14734:6;14690:72;:::i;:::-;14772;14840:2;14829:9;14825:18;14816:6;14772:72;:::i;:::-;14298:553;;;;;;;:::o;14857:442::-;15006:4;15044:2;15033:9;15029:18;15021:26;;15057:71;15125:1;15114:9;15110:17;15101:6;15057:71;:::i;:::-;15138:72;15206:2;15195:9;15191:18;15182:6;15138:72;:::i;:::-;15220;15288:2;15277:9;15273:18;15264:6;15220:72;:::i;:::-;14857:442;;;;;;:::o;15305:191::-;15345:3;15364:20;15382:1;15364:20;:::i;:::-;15359:25;;15398:20;15416:1;15398:20;:::i;:::-;15393:25;;15441:1;15438;15434:9;15427:16;;15462:3;15459:1;15456:10;15453:36;;;15469:18;;:::i;:::-;15453:36;15305:191;;;;:::o;15502:163::-;15642:15;15638:1;15630:6;15626:14;15619:39;15502:163;:::o;15671:366::-;15813:3;15834:67;15898:2;15893:3;15834:67;:::i;:::-;15827:74;;15910:93;15999:3;15910:93;:::i;:::-;16028:2;16023:3;16019:12;16012:19;;15671:366;;;:::o;16043:419::-;16209:4;16247:2;16236:9;16232:18;16224:26;;16296:9;16290:4;16286:20;16282:1;16271:9;16267:17;16260:47;16324:131;16450:4;16324:131;:::i;:::-;16316:139;;16043:419;;;:::o;16468:168::-;16608:20;16604:1;16596:6;16592:14;16585:44;16468:168;:::o;16642:366::-;16784:3;16805:67;16869:2;16864:3;16805:67;:::i;:::-;16798:74;;16881:93;16970:3;16881:93;:::i;:::-;16999:2;16994:3;16990:12;16983:19;;16642:366;;;:::o;17014:419::-;17180:4;17218:2;17207:9;17203:18;17195:26;;17267:9;17261:4;17257:20;17253:1;17242:9;17238:17;17231:47;17295:131;17421:4;17295:131;:::i;:::-;17287:139;;17014:419;;;:::o;17439:90::-;17473:7;17516:5;17509:13;17502:21;17491:32;;17439:90;;;:::o;17535:116::-;17605:21;17620:5;17605:21;:::i;:::-;17598:5;17595:32;17585:60;;17641:1;17638;17631:12;17585:60;17535:116;:::o;17657:137::-;17711:5;17742:6;17736:13;17727:22;;17758:30;17782:5;17758:30;:::i;:::-;17657:137;;;;:::o;17800:345::-;17867:6;17916:2;17904:9;17895:7;17891:23;17887:32;17884:119;;;17922:79;;:::i;:::-;17884:119;18042:1;18067:61;18120:7;18111:6;18100:9;18096:22;18067:61;:::i;:::-;18057:71;;18013:125;17800:345;;;;:::o;18151:98::-;18202:6;18236:5;18230:12;18220:22;;18151:98;;;:::o;18255:147::-;18356:11;18393:3;18378:18;;18255:147;;;;:::o;18408:139::-;18497:6;18492:3;18487;18481:23;18538:1;18529:6;18524:3;18520:16;18513:27;18408:139;;;:::o;18553:386::-;18657:3;18685:38;18717:5;18685:38;:::i;:::-;18739:88;18820:6;18815:3;18739:88;:::i;:::-;18732:95;;18836:65;18894:6;18889:3;18882:4;18875:5;18871:16;18836:65;:::i;:::-;18926:6;18921:3;18917:16;18910:23;;18661:278;18553:386;;;;:::o;18945:271::-;19075:3;19097:93;19186:3;19177:6;19097:93;:::i;:::-;19090:100;;19207:3;19200:10;;18945:271;;;;:::o
Swarm Source
ipfs://0acda5ce29d47864d74735ff9f7ae26de1a8b8a940dc186cc724a23213ca022f
Net Worth in USD
Net Worth in ETH
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.