Source Code
Latest 25 from a total of 24,365 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Reveal Bet | 10138566 | 466 days ago | IN | 0 ETH | 0.00000091 | ||||
| Commit To Bet | 10138536 | 466 days ago | IN | 0 ETH | 0.00000137 | ||||
| Reveal Bet | 9806201 | 474 days ago | IN | 0 ETH | 0.00000033 | ||||
| Commit To Bet | 9806190 | 474 days ago | IN | 0 ETH | 0.00000046 | ||||
| Reveal Bet | 9806171 | 474 days ago | IN | 0 ETH | 0.00000029 | ||||
| Commit To Bet | 9806161 | 474 days ago | IN | 0 ETH | 0.00000046 | ||||
| Reveal Bet | 9806137 | 474 days ago | IN | 0 ETH | 0.00000021 | ||||
| Commit To Bet | 9806129 | 474 days ago | IN | 0 ETH | 0.00000036 | ||||
| Reveal Bet | 9806101 | 474 days ago | IN | 0 ETH | 0.00000013 | ||||
| Commit To Bet | 9806091 | 474 days ago | IN | 0 ETH | 0.00000028 | ||||
| Reveal Bet | 9805939 | 474 days ago | IN | 0 ETH | 0.00000042 | ||||
| Commit To Bet | 9805927 | 474 days ago | IN | 0 ETH | 0.00000056 | ||||
| Reveal Bet | 9805875 | 474 days ago | IN | 0 ETH | 0.00000017 | ||||
| Commit To Bet | 9805865 | 474 days ago | IN | 0 ETH | 0.0000003 | ||||
| Reveal Bet | 9805850 | 474 days ago | IN | 0 ETH | 0.00000014 | ||||
| Commit To Bet | 9805836 | 474 days ago | IN | 0 ETH | 0.00000029 | ||||
| Reveal Bet | 9805821 | 474 days ago | IN | 0 ETH | 0.00000057 | ||||
| Commit To Bet | 9805810 | 474 days ago | IN | 0 ETH | 0.00000071 | ||||
| Reveal Bet | 9805780 | 474 days ago | IN | 0 ETH | 0.00000023 | ||||
| Commit To Bet | 9805771 | 474 days ago | IN | 0 ETH | 0.00000035 | ||||
| Reveal Bet | 9805747 | 474 days ago | IN | 0 ETH | 0.00000015 | ||||
| Commit To Bet | 9805738 | 474 days ago | IN | 0 ETH | 0.00000028 | ||||
| Reveal Bet | 9805712 | 474 days ago | IN | 0 ETH | 0.00000043 | ||||
| Commit To Bet | 9805702 | 474 days ago | IN | 0 ETH | 0.00000055 | ||||
| Reveal Bet | 9805682 | 474 days ago | IN | 0 ETH | 0.00000016 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PewRoulette
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/**
*Submitted for verification at blastscan.io on 2024-06-04
*/
// File: contracts/IBlastPoints.sol
pragma solidity ^0.8.7;
interface IBlastPoints {
function configurePointsOperator(address operator) external;
function configurePointsOperatorOnBehalf(address contractAddress, address operator) external;
}
// File: contracts/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: contracts/IHouse.sol
pragma solidity ^0.8.7;
interface IHouse {
function payout(address winner, uint amount) external;
}
// 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/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/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/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: @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: contracts/Roulette.sol
pragma solidity ^0.8.7;
contract PewRoulette 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 PewRoulette.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 PewRoulette.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
608060405234801561000f575f80fd5b50604051611c11380380611c1183398181016040528101906100319190610307565b835f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a2575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610099919061037a565b60405180910390fd5b6100b1816101e860201b60201c565b5070021daaf4bc2563ed0844af5d00000000006003819055508060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff166336b91f2b836040518263ffffffff1660e01b8152600401610143919061037a565b5f604051808303815f87803b15801561015a575f80fd5b505af115801561016c573d5f803e3d5ffd5b5050505073430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16634e606c476040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156101c9575f80fd5b505af11580156101db573d5f803e3d5ffd5b5050505050505050610393565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102d6826102ad565b9050919050565b6102e6816102cc565b81146102f0575f80fd5b50565b5f81519050610301816102dd565b92915050565b5f805f806080858703121561031f5761031e6102a9565b5b5f61032c878288016102f3565b945050602061033d878288016102f3565b935050604061034e878288016102f3565b925050606061035f878288016102f3565b91505092959194509250565b610374816102cc565b82525050565b5f60208201905061038d5f83018461036b565b92915050565b611871806103a05f395ff3fe6080604052600436106100a6575f3560e01c806397d757761161006357806397d757761461016c578063a208082314610196578063c3dfdae6146101be578063c5df2ce1146101e8578063f2fde38b14610210578063ff9b3acf14610238576100a6565b806301e7e893146100aa57806339021d3e146100d2578063715018a6146100ee57806377d5d2dc146101045780637f2a8a801461011a5780638da5cb5b14610142575b5f80fd5b3480156100b5575f80fd5b506100d060048036038101906100cb9190610fa1565b610262565b005b6100ec60048036038101906100e79190611060565b610276565b005b3480156100f9575f80fd5b506101026103da565b005b34801561010f575f80fd5b506101186103ed565b005b348015610125575f80fd5b50610140600480360381019061013b9190610fa1565b610487565b005b34801561014d575f80fd5b506101566104d2565b60405161016391906110cc565b60405180910390f35b348015610177575f80fd5b506101806104f9565b60405161018d9190611140565b60405180910390f35b3480156101a1575f80fd5b506101bc60048036038101906101b79190611159565b610511565b005b3480156101c9575f80fd5b506101d26108b5565b6040516101df91906111c4565b60405180910390f35b3480156101f3575f80fd5b5061020e600480360381019061020991906111dd565b6108da565b005b34801561021b575f80fd5b5061023660048036038101906102319190610fa1565b6108ec565b005b348015610243575f80fd5b5061024c610970565b60405161025991906110cc565b60405180910390f35b61026a610995565b610273816108ec565b50565b6102e53360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a1c909392919063ffffffff16565b6102f0838383610a9e565b4360045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550828260405160200161034592919061130b565b6040516020818303038152906040528051906020012060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507fc865943837ee5972bf361f83b3f69f8ba7a4be32258946fd5cdab242f075cfb533826040516103cd92919061133c565b60405180910390a1505050565b6103e2610995565b6103eb5f610c10565b565b6103f5610995565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663954fa5ee30336040518363ffffffff1660e01b8152600401610444929190611363565b6020604051808303815f875af1158015610460573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610484919061139e565b50565b61048f610995565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73430000000000000000000000000000000000000281565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461057f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057690611423565b60405180910390fd5b5f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054116105fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f5906114b1565b60405180910390fd5b5f828260405160200161061292919061130b565b6040516020818303038152906040528051906020012090505f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20544090505f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f6026826040516020016106c291906114e7565b604051602081830303815290604052805190602001205f1c6106e4919061152d565b90505f80801b831461082c575f5b8686905081101561082a57828787838181106107115761071061155d565b5b9050604002015f01350361081d5760248787838181106107345761073361155d565b5b9050604002016020013561074891906115b7565b915060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205485036108185760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663117de2fd33846040518363ffffffff1660e01b81526004016107ea92919061133c565b5f604051808303815f87803b158015610801575f80fd5b505af1158015610813573d5f803e3d5ffd5b505050505b61082a565b80806001019150506106f2565b505b7f92088998f44d6065dd095591180ebee496820c96eec4a43a200ff5a1e70c92013383838660405161086194939291906115f8565b60405180910390a15f801b60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108e2610995565b8060038190555050565b6108f4610995565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610964575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161095b91906110cc565b60405180910390fd5b61096d81610c10565b50565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61099d610cd1565b73ffffffffffffffffffffffffffffffffffffffff166109bb6104d2565b73ffffffffffffffffffffffffffffffffffffffff1614610a1a576109de610cd1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610a1191906110cc565b60405180910390fd5b565b610a98848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401610a519392919061163b565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610cd8565b50505050565b610aa6610f1c565b5f805b85859050811015610bc557858582818110610ac757610ac661155d565b5b9050604002016020013583878784818110610ae557610ae461155d565b5b9050604002015f013560268110610aff57610afe61155d565b5b60200201818151610b109190611670565b91508181525050858582818110610b2a57610b2961155d565b5b9050604002016020013582610b3f9190611670565b915060035483878784818110610b5857610b5761155d565b5b9050604002015f013560268110610b7257610b7161155d565b5b60200201511115610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf906116ed565b60405180910390fd5b8080600101915050610aa9565b5082811115610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0090611755565b60405180910390fd5b5050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f610d02828473ffffffffffffffffffffffffffffffffffffffff16610d6d90919063ffffffff16565b90505f815114158015610d26575080806020019051810190610d2491906117a8565b155b15610d6857826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401610d5f91906110cc565b60405180910390fd5b505050565b6060610d7a83835f610d82565b905092915050565b606081471015610dc957306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401610dc091906110cc565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051610df19190611825565b5f6040518083038185875af1925050503d805f8114610e2b576040519150601f19603f3d011682016040523d82523d5f602084013e610e30565b606091505b5091509150610e40868383610e4b565b925050509392505050565b606082610e6057610e5b82610ed8565b610ed0565b5f8251148015610e8657505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15610ec857836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610ebf91906110cc565b60405180910390fd5b819050610ed1565b5b9392505050565b5f81511115610eea5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051806104c00160405280602690602082028036833780820191505090505090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f7082610f47565b9050919050565b610f8081610f66565b8114610f8a575f80fd5b50565b5f81359050610f9b81610f77565b92915050565b5f60208284031215610fb657610fb5610f3f565b5b5f610fc384828501610f8d565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112610fed57610fec610fcc565b5b8235905067ffffffffffffffff81111561100a57611009610fd0565b5b60208301915083604082028301111561102657611025610fd4565b5b9250929050565b5f819050919050565b61103f8161102d565b8114611049575f80fd5b50565b5f8135905061105a81611036565b92915050565b5f805f6040848603121561107757611076610f3f565b5b5f84013567ffffffffffffffff81111561109457611093610f43565b5b6110a086828701610fd8565b935093505060206110b38682870161104c565b9150509250925092565b6110c681610f66565b82525050565b5f6020820190506110df5f8301846110bd565b92915050565b5f819050919050565b5f6111086111036110fe84610f47565b6110e5565b610f47565b9050919050565b5f611119826110ee565b9050919050565b5f61112a8261110f565b9050919050565b61113a81611120565b82525050565b5f6020820190506111535f830184611131565b92915050565b5f806020838503121561116f5761116e610f3f565b5b5f83013567ffffffffffffffff81111561118c5761118b610f43565b5b61119885828601610fd8565b92509250509250929050565b5f6111ae8261110f565b9050919050565b6111be816111a4565b82525050565b5f6020820190506111d75f8301846111b5565b92915050565b5f602082840312156111f2576111f1610f3f565b5b5f6111ff8482850161104c565b91505092915050565b5f82825260208201905092915050565b5f819050919050565b5f61122f602084018461104c565b905092915050565b6112408161102d565b82525050565b604082016112565f830183611221565b6112625f850182611237565b506112706020830183611221565b61127d6020850182611237565b50505050565b5f61128e8383611246565b60408301905092915050565b5f82905092915050565b5f604082019050919050565b5f6112bb8385611208565b93506112c682611218565b805f5b858110156112fe576112db828461129a565b6112e58882611283565b97506112f0836112a4565b9250506001810190506112c9565b5085925050509392505050565b5f6020820190508181035f8301526113248184866112b0565b90509392505050565b6113368161102d565b82525050565b5f60408201905061134f5f8301856110bd565b61135c602083018461132d565b9392505050565b5f6040820190506113765f8301856110bd565b61138360208301846110bd565b9392505050565b5f8151905061139881611036565b92915050565b5f602082840312156113b3576113b2610f3f565b5b5f6113c08482850161138a565b91505092915050565b5f82825260208201905092915050565b7f66756e6374696f6e2063616c6c6572206d75737420626520612068756d616e005f82015250565b5f61140d601f836113c9565b9150611418826113d9565b602082019050919050565b5f6020820190508181035f83015261143a81611401565b9050919050565b7f6d7573742073746f726520626c6f636b206e756d626572206265666f726520705f8201527f6c6163696e672062657400000000000000000000000000000000000000000000602082015250565b5f61149b602a836113c9565b91506114a682611441565b604082019050919050565b5f6020820190508181035f8301526114c88161148f565b9050919050565b5f819050919050565b6114e1816114cf565b82525050565b5f6020820190506114fa5f8301846114d8565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6115378261102d565b91506115428361102d565b92508261155257611551611500565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6115c18261102d565b91506115cc8361102d565b92508282026115da8161102d565b915082820484148315176115f1576115f061158a565b5b5092915050565b5f60808201905061160b5f8301876110bd565b611618602083018661132d565b611625604083018561132d565b61163260608301846114d8565b95945050505050565b5f60608201905061164e5f8301866110bd565b61165b60208301856110bd565b611668604083018461132d565b949350505050565b5f61167a8261102d565b91506116858361102d565b925082820190508082111561169d5761169c61158a565b5b92915050565b7f4265742061626f7665206d6178000000000000000000000000000000000000005f82015250565b5f6116d7600d836113c9565b91506116e2826116a3565b602082019050919050565b5f6020820190508181035f830152611704816116cb565b9050919050565b7f5761676572206973206e6f742076616c696400000000000000000000000000005f82015250565b5f61173f6012836113c9565b915061174a8261170b565b602082019050919050565b5f6020820190508181035f83015261176c81611733565b9050919050565b5f8115159050919050565b61178781611773565b8114611791575f80fd5b50565b5f815190506117a28161177e565b92915050565b5f602082840312156117bd576117bc610f3f565b5b5f6117ca84828501611794565b91505092915050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6117ff826117d3565b61180981856117dd565b93506118198185602086016117e7565b80840191505092915050565b5f61183082846117f5565b91508190509291505056fea26469706673582212206924e2c2814060168dde73e8715a3294f99622d5984b4b08b90aac72c7f507dd64736f6c634300081a003300000000000000000000000051d789cfd37d1ddd44661dbd39a456d77c95d01c0000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd800000000000000000000000000d94ff4fe12dd3ea08be632a5393771cf878089770000000000000000000000000ee485dfd0f4ef8c4fabc1ab93dbcc03fcc05c57
Deployed Bytecode
0x6080604052600436106100a6575f3560e01c806397d757761161006357806397d757761461016c578063a208082314610196578063c3dfdae6146101be578063c5df2ce1146101e8578063f2fde38b14610210578063ff9b3acf14610238576100a6565b806301e7e893146100aa57806339021d3e146100d2578063715018a6146100ee57806377d5d2dc146101045780637f2a8a801461011a5780638da5cb5b14610142575b5f80fd5b3480156100b5575f80fd5b506100d060048036038101906100cb9190610fa1565b610262565b005b6100ec60048036038101906100e79190611060565b610276565b005b3480156100f9575f80fd5b506101026103da565b005b34801561010f575f80fd5b506101186103ed565b005b348015610125575f80fd5b50610140600480360381019061013b9190610fa1565b610487565b005b34801561014d575f80fd5b506101566104d2565b60405161016391906110cc565b60405180910390f35b348015610177575f80fd5b506101806104f9565b60405161018d9190611140565b60405180910390f35b3480156101a1575f80fd5b506101bc60048036038101906101b79190611159565b610511565b005b3480156101c9575f80fd5b506101d26108b5565b6040516101df91906111c4565b60405180910390f35b3480156101f3575f80fd5b5061020e600480360381019061020991906111dd565b6108da565b005b34801561021b575f80fd5b5061023660048036038101906102319190610fa1565b6108ec565b005b348015610243575f80fd5b5061024c610970565b60405161025991906110cc565b60405180910390f35b61026a610995565b610273816108ec565b50565b6102e53360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a1c909392919063ffffffff16565b6102f0838383610a9e565b4360045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550828260405160200161034592919061130b565b6040516020818303038152906040528051906020012060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507fc865943837ee5972bf361f83b3f69f8ba7a4be32258946fd5cdab242f075cfb533826040516103cd92919061133c565b60405180910390a1505050565b6103e2610995565b6103eb5f610c10565b565b6103f5610995565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663954fa5ee30336040518363ffffffff1660e01b8152600401610444929190611363565b6020604051808303815f875af1158015610460573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610484919061139e565b50565b61048f610995565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73430000000000000000000000000000000000000281565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461057f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057690611423565b60405180910390fd5b5f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054116105fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f5906114b1565b60405180910390fd5b5f828260405160200161061292919061130b565b6040516020818303038152906040528051906020012090505f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20544090505f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f6026826040516020016106c291906114e7565b604051602081830303815290604052805190602001205f1c6106e4919061152d565b90505f80801b831461082c575f5b8686905081101561082a57828787838181106107115761071061155d565b5b9050604002015f01350361081d5760248787838181106107345761073361155d565b5b9050604002016020013561074891906115b7565b915060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205485036108185760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663117de2fd33846040518363ffffffff1660e01b81526004016107ea92919061133c565b5f604051808303815f87803b158015610801575f80fd5b505af1158015610813573d5f803e3d5ffd5b505050505b61082a565b80806001019150506106f2565b505b7f92088998f44d6065dd095591180ebee496820c96eec4a43a200ff5a1e70c92013383838660405161086194939291906115f8565b60405180910390a15f801b60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108e2610995565b8060038190555050565b6108f4610995565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610964575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161095b91906110cc565b60405180910390fd5b61096d81610c10565b50565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61099d610cd1565b73ffffffffffffffffffffffffffffffffffffffff166109bb6104d2565b73ffffffffffffffffffffffffffffffffffffffff1614610a1a576109de610cd1565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610a1191906110cc565b60405180910390fd5b565b610a98848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401610a519392919061163b565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610cd8565b50505050565b610aa6610f1c565b5f805b85859050811015610bc557858582818110610ac757610ac661155d565b5b9050604002016020013583878784818110610ae557610ae461155d565b5b9050604002015f013560268110610aff57610afe61155d565b5b60200201818151610b109190611670565b91508181525050858582818110610b2a57610b2961155d565b5b9050604002016020013582610b3f9190611670565b915060035483878784818110610b5857610b5761155d565b5b9050604002015f013560268110610b7257610b7161155d565b5b60200201511115610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf906116ed565b60405180910390fd5b8080600101915050610aa9565b5082811115610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0090611755565b60405180910390fd5b5050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f610d02828473ffffffffffffffffffffffffffffffffffffffff16610d6d90919063ffffffff16565b90505f815114158015610d26575080806020019051810190610d2491906117a8565b155b15610d6857826040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401610d5f91906110cc565b60405180910390fd5b505050565b6060610d7a83835f610d82565b905092915050565b606081471015610dc957306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401610dc091906110cc565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051610df19190611825565b5f6040518083038185875af1925050503d805f8114610e2b576040519150601f19603f3d011682016040523d82523d5f602084013e610e30565b606091505b5091509150610e40868383610e4b565b925050509392505050565b606082610e6057610e5b82610ed8565b610ed0565b5f8251148015610e8657505f8473ffffffffffffffffffffffffffffffffffffffff163b145b15610ec857836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610ebf91906110cc565b60405180910390fd5b819050610ed1565b5b9392505050565b5f81511115610eea5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051806104c00160405280602690602082028036833780820191505090505090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f7082610f47565b9050919050565b610f8081610f66565b8114610f8a575f80fd5b50565b5f81359050610f9b81610f77565b92915050565b5f60208284031215610fb657610fb5610f3f565b5b5f610fc384828501610f8d565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112610fed57610fec610fcc565b5b8235905067ffffffffffffffff81111561100a57611009610fd0565b5b60208301915083604082028301111561102657611025610fd4565b5b9250929050565b5f819050919050565b61103f8161102d565b8114611049575f80fd5b50565b5f8135905061105a81611036565b92915050565b5f805f6040848603121561107757611076610f3f565b5b5f84013567ffffffffffffffff81111561109457611093610f43565b5b6110a086828701610fd8565b935093505060206110b38682870161104c565b9150509250925092565b6110c681610f66565b82525050565b5f6020820190506110df5f8301846110bd565b92915050565b5f819050919050565b5f6111086111036110fe84610f47565b6110e5565b610f47565b9050919050565b5f611119826110ee565b9050919050565b5f61112a8261110f565b9050919050565b61113a81611120565b82525050565b5f6020820190506111535f830184611131565b92915050565b5f806020838503121561116f5761116e610f3f565b5b5f83013567ffffffffffffffff81111561118c5761118b610f43565b5b61119885828601610fd8565b92509250509250929050565b5f6111ae8261110f565b9050919050565b6111be816111a4565b82525050565b5f6020820190506111d75f8301846111b5565b92915050565b5f602082840312156111f2576111f1610f3f565b5b5f6111ff8482850161104c565b91505092915050565b5f82825260208201905092915050565b5f819050919050565b5f61122f602084018461104c565b905092915050565b6112408161102d565b82525050565b604082016112565f830183611221565b6112625f850182611237565b506112706020830183611221565b61127d6020850182611237565b50505050565b5f61128e8383611246565b60408301905092915050565b5f82905092915050565b5f604082019050919050565b5f6112bb8385611208565b93506112c682611218565b805f5b858110156112fe576112db828461129a565b6112e58882611283565b97506112f0836112a4565b9250506001810190506112c9565b5085925050509392505050565b5f6020820190508181035f8301526113248184866112b0565b90509392505050565b6113368161102d565b82525050565b5f60408201905061134f5f8301856110bd565b61135c602083018461132d565b9392505050565b5f6040820190506113765f8301856110bd565b61138360208301846110bd565b9392505050565b5f8151905061139881611036565b92915050565b5f602082840312156113b3576113b2610f3f565b5b5f6113c08482850161138a565b91505092915050565b5f82825260208201905092915050565b7f66756e6374696f6e2063616c6c6572206d75737420626520612068756d616e005f82015250565b5f61140d601f836113c9565b9150611418826113d9565b602082019050919050565b5f6020820190508181035f83015261143a81611401565b9050919050565b7f6d7573742073746f726520626c6f636b206e756d626572206265666f726520705f8201527f6c6163696e672062657400000000000000000000000000000000000000000000602082015250565b5f61149b602a836113c9565b91506114a682611441565b604082019050919050565b5f6020820190508181035f8301526114c88161148f565b9050919050565b5f819050919050565b6114e1816114cf565b82525050565b5f6020820190506114fa5f8301846114d8565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6115378261102d565b91506115428361102d565b92508261155257611551611500565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6115c18261102d565b91506115cc8361102d565b92508282026115da8161102d565b915082820484148315176115f1576115f061158a565b5b5092915050565b5f60808201905061160b5f8301876110bd565b611618602083018661132d565b611625604083018561132d565b61163260608301846114d8565b95945050505050565b5f60608201905061164e5f8301866110bd565b61165b60208301856110bd565b611668604083018461132d565b949350505050565b5f61167a8261102d565b91506116858361102d565b925082820190508082111561169d5761169c61158a565b5b92915050565b7f4265742061626f7665206d6178000000000000000000000000000000000000005f82015250565b5f6116d7600d836113c9565b91506116e2826116a3565b602082019050919050565b5f6020820190508181035f830152611704816116cb565b9050919050565b7f5761676572206973206e6f742076616c696400000000000000000000000000005f82015250565b5f61173f6012836113c9565b915061174a8261170b565b602082019050919050565b5f6020820190508181035f83015261176c81611733565b9050919050565b5f8115159050919050565b61178781611773565b8114611791575f80fd5b50565b5f815190506117a28161177e565b92915050565b5f602082840312156117bd576117bc610f3f565b5b5f6117ca84828501611794565b91505092915050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6117ff826117d3565b61180981856117dd565b93506118198185602086016117e7565b80840191505092915050565b5f61183082846117f5565b91508190509291505056fea26469706673582212206924e2c2814060168dde73e8715a3294f99622d5984b4b08b90aac72c7f507dd64736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000051d789cfd37d1ddd44661dbd39a456d77c95d01c0000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd800000000000000000000000000d94ff4fe12dd3ea08be632a5393771cf878089770000000000000000000000000ee485dfd0f4ef8c4fabc1ab93dbcc03fcc05c57
-----Decoded View---------------
Arg [0] : initialOwner (address): 0x51D789cfD37D1DDD44661DBd39a456d77C95d01c
Arg [1] : _BlastPointsAddress (address): 0x2536FE9ab3F511540F2f9e2eC2A805005C3Dd800
Arg [2] : _pointsOperator (address): 0xd94ff4fe12Dd3EA08BE632A5393771CF87808977
Arg [3] : tokenAddress (address): 0x0EE485dfD0f4ef8C4faBC1Ab93dbcC03FCC05c57
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000051d789cfd37d1ddd44661dbd39a456d77c95d01c
Arg [1] : 0000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd800
Arg [2] : 000000000000000000000000d94ff4fe12dd3ea08be632a5393771cf87808977
Arg [3] : 0000000000000000000000000ee485dfd0f4ef8c4fabc1ab93dbcc03fcc05c57
Deployed Bytecode Sourcemap
32287:3810:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35755:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33784:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31377:103;;;;;;;;;;;;;:::i;:::-;;35981:113;;;;;;;;;;;;;:::i;:::-;;33690:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30702:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32450:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34193:1016;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32386:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35870:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31635:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32359:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35755:107;30588:13;:11;:13::i;:::-;35827:27:::1;35845:8;35827:17;:27::i;:::-;35755:107:::0;:::o;33784:401::-;33896:66;33923:10;33943:5;;;;;;;;;;;33951:10;33896:9;;;;;;;;;;;:26;;;;:66;;;;;;:::i;:::-;33975:32;33990:4;;33996:10;33975:14;:32::i;:::-;34047:12;34020;:24;34033:10;34020:24;;;;;;;;;;;;;;;:39;;;;34115:4;;34104:16;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34094:27;;;;;;34070:9;:21;34080:10;34070:21;;;;;;;;;;;;;;;:51;;;;34139:38;34154:10;34166;34139:38;;;;;;;:::i;:::-;;;;;;;;33784:401;;;:::o;31377:103::-;30588:13;:11;:13::i;:::-;31442:30:::1;31469:1;31442:18;:30::i;:::-;31377:103::o:0;35981:113::-;30588:13;:11;:13::i;:::-;32497:42:::1;36042:17;;;36068:4;36075:10;36042:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35981:113::o:0;33690:86::-;30588:13;:11;:13::i;:::-;33762:6:::1;33754:5;;:14;;;;;;;;;;;;;;;;;;33690:86:::0;:::o;30702:87::-;30748:7;30775:6;;;;;;;;;;;30768:13;;30702:87;:::o;32450:90::-;32497:42;32450:90;:::o;34193:1016::-;32979:9;32965:23;;:10;:23;;;32957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33138:1:::1;33111:12;:24;33124:10;33111:24;;;;;;;;;;;;;;;;:28;33089:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;34276:15:::2;34315:4;;34304:16;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34294:27;;;;;;34276:45;;34334:23;34370:12;:24;34383:10;34370:24;;;;;;;;;;;;;;;;34360:35;34334:61;;34433:1;34406:12;:24;34419:10;34406:24;;;;;;;;;;;;;;;:28;;;;34447:17;34514:2;34493:15;34482:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;34472:38;;;;;;34467:44;;:49;;;;:::i;:::-;34447:69;;34527:13;34580:1:::0;34561:20;::::2;:15;:20;34557:527;;34670:6;34665:408;34686:4;;:11;;34682:1;:15;34665:408;;;34745:12;34727:4;;34732:1;34727:7;;;;;;;:::i;:::-;;;;;;;:14;;;:30:::0;34723:335:::2;;34809:2;34793:4;;34798:1;34793:7;;;;;;;:::i;:::-;;;;;;;:13;;;:18;;;;:::i;:::-;34782:29;;34851:9;:21;34861:10;34851:21;;;;;;;;;;;;;;;;34840:7;:32:::0;34836:131:::2;;34908:5;;;;;;;;;;;34901:20;;;34922:10;34934:8;34901:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;34836:131;34991:5;;34723:335;34699:3;;;;;;;34665:408;;;;34557:527;35101:62;35111:10;35123:12;35137:8;35147:15;35101:62;;;;;;;;;:::i;:::-;;;;;;;;35200:1;35176:25:::0;::::2;:9;:21;35186:10;35176:21;;;;;;;;;;;;;;;:25;;;;34265:944;;;;34193:1016:::0;;:::o;32386:23::-;;;;;;;;;;;;;:::o;35870:103::-;30588:13;:11;:13::i;:::-;35954:11:::1;35941:10;:24;;;;35870:103:::0;:::o;31635:220::-;30588:13;:11;:13::i;:::-;31740:1:::1;31720:22;;:8;:22;;::::0;31716:93:::1;;31794:1;31766:31;;;;;;;;;;;:::i;:::-;;;;;;;;31716:93;31819:28;31838:8;31819:18;:28::i;:::-;31635:220:::0;:::o;32359:20::-;;;;;;;;;;;;;:::o;30867:166::-;30938:12;:10;:12::i;:::-;30927:23;;:7;:5;:7::i;:::-;:23;;;30923:103;;31001:12;:10;:12::i;:::-;30974:40;;;;;;;;;;;:::i;:::-;;;;;;;;30923:103;30867:166::o;23871:190::-;23972:81;23992:5;24014;:18;;;24035:4;24041:2;24045:5;23999:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23972:19;:81::i;:::-;23871:190;;;;:::o;35217:530::-;35299:26;;:::i;:::-;35336:17;35375:6;35370:272;35391:4;;:11;;35387:1;:15;35370:272;;;35454:4;;35459:1;35454:7;;;;;;;:::i;:::-;;;;;;;:13;;;35424:10;35435:4;;35440:1;35435:7;;;;;;;:::i;:::-;;;;;;;:14;;;35424:26;;;;;;;:::i;:::-;;;;;:43;;;;;;;:::i;:::-;;;;;;;;35498:4;;35503:1;35498:7;;;;;;;:::i;:::-;;;;;;;:13;;;35482:29;;;;;:::i;:::-;;;35561:10;;35532;35543:4;;35548:1;35543:7;;;;;;;:::i;:::-;;;;;;;:14;;;35532:26;;;;;;;:::i;:::-;;;;;;:39;35528:103;;;35592:23;;;;;;;;;;:::i;:::-;;;;;;;;35528:103;35404:3;;;;;;;35370:272;;;;35673:10;35658:12;:25;35654:86;;;35700:28;;;;;;;;;;:::i;:::-;;;;;;;;35654:86;35288:459;;35217:530;;;:::o;32015:191::-;32089:16;32108:6;;;;;;;;;;;32089:25;;32134:8;32125:6;;:17;;;;;;;;;;;;;;;;;;32189:8;32158:40;;32179:8;32158:40;;;;;;;;;;;;32078:128;32015:191;:::o;28711:98::-;28764:7;28791:10;28784:17;;28711:98;:::o;26275:638::-;26699:23;26725:33;26753:4;26733:5;26725:27;;;;:33;;;;:::i;:::-;26699:59;;26794:1;26773:10;:17;:22;;:57;;;;;26811:10;26800:30;;;;;;;;;;;;:::i;:::-;26799:31;26773:57;26769:137;;;26887:5;26854:40;;;;;;;;;;;:::i;:::-;;;;;;;;26769:137;26345:568;26275:638;;:::o;11762:153::-;11837:12;11869:38;11891:6;11899:4;11905:1;11869:21;:38::i;:::-;11862:45;;11762:153;;;;:::o;12250:398::-;12349:12;12402:5;12378:21;:29;12374:110;;;12466:4;12431:41;;;;;;;;;;;:::i;:::-;;;;;;;;12374:110;12495:12;12509:23;12536:6;:11;;12555:5;12562:4;12536:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12494:73;;;;12585:55;12612:6;12620:7;12629:10;12585:26;:55::i;:::-;12578:62;;;;12250:398;;;;;:::o;13726:597::-;13874:12;13904:7;13899:417;;13928:19;13936:10;13928:7;:19::i;:::-;13899:417;;;14177:1;14156:10;:17;:22;:49;;;;;14204:1;14182:6;:18;;;:23;14156:49;14152:121;;;14250:6;14233:24;;;;;;;;;;;:::i;:::-;;;;;;;;14152:121;14294:10;14287:17;;;;13899:417;13726:597;;;;;;:::o;14876:528::-;15029:1;15009:10;:17;:21;15005:392;;;15241:10;15235:17;15298:15;15285:10;15281:2;15277:19;15270:44;15005:392;15368: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;1577:591;1673:8;1683:6;1733:3;1726:4;1718:6;1714:17;1710:27;1700:122;;1741:79;;:::i;:::-;1700:122;1854:6;1841:20;1831:30;;1884:18;1876:6;1873:30;1870:117;;;1906:79;;:::i;:::-;1870:117;2020:4;2012:6;2008:17;1996:29;;2074:3;2066:4;2058:6;2054:17;2044:8;2040:32;2037:41;2034:128;;;2081:79;;:::i;:::-;2034:128;1577:591;;;;;:::o;2174:77::-;2211:7;2240:5;2229:16;;2174:77;;;:::o;2257:122::-;2330:24;2348:5;2330:24;:::i;:::-;2323:5;2320:35;2310:63;;2369:1;2366;2359:12;2310:63;2257:122;:::o;2385:139::-;2431:5;2469:6;2456:20;2447:29;;2485:33;2512:5;2485:33;:::i;:::-;2385:139;;;;:::o;2530:750::-;2648:6;2656;2664;2713:2;2701:9;2692:7;2688:23;2684:32;2681:119;;;2719:79;;:::i;:::-;2681:119;2867:1;2856:9;2852:17;2839:31;2897:18;2889:6;2886:30;2883:117;;;2919:79;;:::i;:::-;2883:117;3032:103;3127:7;3118:6;3107:9;3103:22;3032:103;:::i;:::-;3014:121;;;;2810:335;3184:2;3210:53;3255:7;3246:6;3235:9;3231:22;3210:53;:::i;:::-;3200:63;;3155:118;2530:750;;;;;:::o;3286:118::-;3373:24;3391:5;3373:24;:::i;:::-;3368:3;3361:37;3286:118;;:::o;3410:222::-;3503:4;3541:2;3530:9;3526:18;3518:26;;3554:71;3622:1;3611:9;3607:17;3598:6;3554:71;:::i;:::-;3410:222;;;;:::o;3638:60::-;3666:3;3687:5;3680:12;;3638:60;;;:::o;3704:142::-;3754:9;3787:53;3805:34;3814:24;3832:5;3814:24;:::i;:::-;3805:34;:::i;:::-;3787:53;:::i;:::-;3774:66;;3704:142;;;:::o;3852:126::-;3902:9;3935:37;3966:5;3935:37;:::i;:::-;3922:50;;3852:126;;;:::o;3984:140::-;4048:9;4081:37;4112:5;4081:37;:::i;:::-;4068:50;;3984:140;;;:::o;4130:159::-;4231:51;4276:5;4231:51;:::i;:::-;4226:3;4219:64;4130:159;;:::o;4295:250::-;4402:4;4440:2;4429:9;4425:18;4417:26;;4453:85;4535:1;4524:9;4520:17;4511:6;4453:85;:::i;:::-;4295:250;;;;:::o;4551:605::-;4660:6;4668;4717:2;4705:9;4696:7;4692:23;4688:32;4685:119;;;4723:79;;:::i;:::-;4685:119;4871:1;4860:9;4856:17;4843:31;4901:18;4893:6;4890:30;4887:117;;;4923:79;;:::i;:::-;4887:117;5036:103;5131:7;5122:6;5111:9;5107:22;5036:103;:::i;:::-;5018:121;;;;4814:335;4551:605;;;;;:::o;5162:140::-;5226:9;5259:37;5290:5;5259:37;:::i;:::-;5246:50;;5162:140;;;:::o;5308:159::-;5409:51;5454:5;5409:51;:::i;:::-;5404:3;5397:64;5308:159;;:::o;5473:250::-;5580:4;5618:2;5607:9;5603:18;5595:26;;5631:85;5713:1;5702:9;5698:17;5689:6;5631:85;:::i;:::-;5473:250;;;;:::o;5729:329::-;5788:6;5837:2;5825:9;5816:7;5812:23;5808:32;5805:119;;;5843:79;;:::i;:::-;5805:119;5963:1;5988:53;6033:7;6024:6;6013:9;6009:22;5988:53;:::i;:::-;5978:63;;5934:117;5729:329;;;;:::o;6064:205::-;6184:11;6218:6;6213:3;6206:19;6258:4;6253:3;6249:14;6234:29;;6064:205;;;;:::o;6275:125::-;6367:4;6390:3;6382:11;;6275:125;;;:::o;6406:122::-;6458:5;6483:39;6518:2;6513:3;6509:12;6504:3;6483:39;:::i;:::-;6474:48;;6406:122;;;;:::o;6534:108::-;6611:24;6629:5;6611:24;:::i;:::-;6606:3;6599:37;6534:108;;:::o;6704:548::-;6835:4;6830:3;6826:14;6907:50;6951:4;6944:5;6940:16;6933:5;6907:50;:::i;:::-;6970:63;7027:4;7022:3;7018:14;7004:12;6970:63;:::i;:::-;6850:193;7109:50;7153:4;7146:5;7142:16;7135:5;7109:50;:::i;:::-;7172:63;7229:4;7224:3;7220:14;7206:12;7172:63;:::i;:::-;7053:192;6804:448;6704:548;;:::o;7258:267::-;7371:10;7392:90;7478:3;7470:6;7392:90;:::i;:::-;7514:4;7509:3;7505:14;7491:28;;7258:267;;;;:::o;7531:109::-;7606:5;7631:3;7622:12;;7531:109;;;;:::o;7646:138::-;7741:4;7773;7768:3;7764:14;7756:22;;7646:138;;;:::o;7850:877::-;8023:3;8046:107;8146:6;8141:3;8046:107;:::i;:::-;8039:114;;8177:81;8252:5;8177:81;:::i;:::-;8281:7;8312:1;8297:405;8322:6;8319:1;8316:13;8297:405;;;8392:65;8450:6;8441:7;8392:65;:::i;:::-;8477:107;8580:3;8565:13;8477:107;:::i;:::-;8470:114;;8607:85;8685:6;8607:85;:::i;:::-;8597:95;;8357:345;8344:1;8341;8337:9;8332:14;;8297:405;;;8301:14;8718:3;8711:10;;8028:699;;7850:877;;;;;:::o;8733:481::-;8930:4;8968:2;8957:9;8953:18;8945:26;;9017:9;9011:4;9007:20;9003:1;8992:9;8988:17;8981:47;9045:162;9202:4;9193:6;9185;9045:162;:::i;:::-;9037:170;;8733:481;;;;;:::o;9220:118::-;9307:24;9325:5;9307:24;:::i;:::-;9302:3;9295:37;9220:118;;:::o;9344:332::-;9465:4;9503:2;9492:9;9488:18;9480:26;;9516:71;9584:1;9573:9;9569:17;9560:6;9516:71;:::i;:::-;9597:72;9665:2;9654:9;9650:18;9641:6;9597:72;:::i;:::-;9344:332;;;;;:::o;9682:::-;9803:4;9841:2;9830:9;9826:18;9818:26;;9854:71;9922:1;9911:9;9907:17;9898:6;9854:71;:::i;:::-;9935:72;10003:2;9992:9;9988:18;9979:6;9935:72;:::i;:::-;9682:332;;;;;:::o;10020:143::-;10077:5;10108:6;10102:13;10093:22;;10124:33;10151:5;10124:33;:::i;:::-;10020:143;;;;:::o;10169:351::-;10239:6;10288:2;10276:9;10267:7;10263:23;10259:32;10256:119;;;10294:79;;:::i;:::-;10256:119;10414:1;10439:64;10495:7;10486:6;10475:9;10471:22;10439:64;:::i;:::-;10429:74;;10385:128;10169:351;;;;:::o;10526:169::-;10610:11;10644:6;10639:3;10632:19;10684:4;10679:3;10675:14;10660:29;;10526:169;;;;:::o;10701:181::-;10841:33;10837:1;10829:6;10825:14;10818:57;10701:181;:::o;10888:366::-;11030:3;11051:67;11115:2;11110:3;11051:67;:::i;:::-;11044:74;;11127:93;11216:3;11127:93;:::i;:::-;11245:2;11240:3;11236:12;11229:19;;10888:366;;;:::o;11260:419::-;11426:4;11464:2;11453:9;11449:18;11441:26;;11513:9;11507:4;11503:20;11499:1;11488:9;11484:17;11477:47;11541:131;11667:4;11541:131;:::i;:::-;11533:139;;11260:419;;;:::o;11685:229::-;11825:34;11821:1;11813:6;11809:14;11802:58;11894:12;11889:2;11881:6;11877:15;11870:37;11685:229;:::o;11920:366::-;12062:3;12083:67;12147:2;12142:3;12083:67;:::i;:::-;12076:74;;12159:93;12248:3;12159:93;:::i;:::-;12277:2;12272:3;12268:12;12261:19;;11920:366;;;:::o;12292:419::-;12458:4;12496:2;12485:9;12481:18;12473:26;;12545:9;12539:4;12535:20;12531:1;12520:9;12516:17;12509:47;12573:131;12699:4;12573:131;:::i;:::-;12565:139;;12292:419;;;:::o;12717:77::-;12754:7;12783:5;12772:16;;12717:77;;;:::o;12800:118::-;12887:24;12905:5;12887:24;:::i;:::-;12882:3;12875:37;12800:118;;:::o;12924:222::-;13017:4;13055:2;13044:9;13040:18;13032:26;;13068:71;13136:1;13125:9;13121:17;13112:6;13068:71;:::i;:::-;12924:222;;;;:::o;13152:180::-;13200:77;13197:1;13190:88;13297:4;13294:1;13287:15;13321:4;13318:1;13311:15;13338:176;13370:1;13387:20;13405:1;13387:20;:::i;:::-;13382:25;;13421:20;13439:1;13421:20;:::i;:::-;13416:25;;13460:1;13450:35;;13465:18;;:::i;:::-;13450:35;13506:1;13503;13499:9;13494:14;;13338:176;;;;:::o;13520:180::-;13568:77;13565:1;13558:88;13665:4;13662:1;13655:15;13689:4;13686:1;13679:15;13706:180;13754:77;13751:1;13744:88;13851:4;13848:1;13841:15;13875:4;13872:1;13865:15;13892:410;13932:7;13955:20;13973:1;13955:20;:::i;:::-;13950:25;;13989:20;14007:1;13989:20;:::i;:::-;13984:25;;14044:1;14041;14037:9;14066:30;14084:11;14066:30;:::i;:::-;14055:41;;14245:1;14236:7;14232:15;14229:1;14226:22;14206:1;14199:9;14179:83;14156:139;;14275:18;;:::i;:::-;14156:139;13940:362;13892:410;;;;:::o;14308:553::-;14485:4;14523:3;14512:9;14508:19;14500:27;;14537:71;14605:1;14594:9;14590:17;14581:6;14537:71;:::i;:::-;14618:72;14686:2;14675:9;14671:18;14662:6;14618:72;:::i;:::-;14700;14768:2;14757:9;14753:18;14744:6;14700:72;:::i;:::-;14782;14850:2;14839:9;14835:18;14826:6;14782:72;:::i;:::-;14308:553;;;;;;;:::o;14867:442::-;15016:4;15054:2;15043:9;15039:18;15031:26;;15067:71;15135:1;15124:9;15120:17;15111:6;15067:71;:::i;:::-;15148:72;15216:2;15205:9;15201:18;15192:6;15148:72;:::i;:::-;15230;15298:2;15287:9;15283:18;15274:6;15230:72;:::i;:::-;14867:442;;;;;;:::o;15315:191::-;15355:3;15374:20;15392:1;15374:20;:::i;:::-;15369:25;;15408:20;15426:1;15408:20;:::i;:::-;15403:25;;15451:1;15448;15444:9;15437:16;;15472:3;15469:1;15466:10;15463:36;;;15479:18;;:::i;:::-;15463:36;15315:191;;;;:::o;15512:163::-;15652:15;15648:1;15640:6;15636:14;15629:39;15512:163;:::o;15681:366::-;15823:3;15844:67;15908:2;15903:3;15844:67;:::i;:::-;15837:74;;15920:93;16009:3;15920:93;:::i;:::-;16038:2;16033:3;16029:12;16022:19;;15681:366;;;:::o;16053:419::-;16219:4;16257:2;16246:9;16242:18;16234:26;;16306:9;16300:4;16296:20;16292:1;16281:9;16277:17;16270:47;16334:131;16460:4;16334:131;:::i;:::-;16326:139;;16053:419;;;:::o;16478:168::-;16618:20;16614:1;16606:6;16602:14;16595:44;16478:168;:::o;16652:366::-;16794:3;16815:67;16879:2;16874:3;16815:67;:::i;:::-;16808:74;;16891:93;16980:3;16891:93;:::i;:::-;17009:2;17004:3;17000:12;16993:19;;16652:366;;;:::o;17024:419::-;17190:4;17228:2;17217:9;17213:18;17205:26;;17277:9;17271:4;17267:20;17263:1;17252:9;17248:17;17241:47;17305:131;17431:4;17305:131;:::i;:::-;17297:139;;17024:419;;;:::o;17449:90::-;17483:7;17526:5;17519:13;17512:21;17501:32;;17449:90;;;:::o;17545:116::-;17615:21;17630:5;17615:21;:::i;:::-;17608:5;17605:32;17595:60;;17651:1;17648;17641:12;17595:60;17545:116;:::o;17667:137::-;17721:5;17752:6;17746:13;17737:22;;17768:30;17792:5;17768:30;:::i;:::-;17667:137;;;;:::o;17810:345::-;17877:6;17926:2;17914:9;17905:7;17901:23;17897:32;17894:119;;;17932:79;;:::i;:::-;17894:119;18052:1;18077:61;18130:7;18121:6;18110:9;18106:22;18077:61;:::i;:::-;18067:71;;18023:125;17810:345;;;;:::o;18161:98::-;18212:6;18246:5;18240:12;18230:22;;18161:98;;;:::o;18265:147::-;18366:11;18403:3;18388:18;;18265:147;;;;:::o;18418:139::-;18507:6;18502:3;18497;18491:23;18548:1;18539:6;18534:3;18530:16;18523:27;18418:139;;;:::o;18563:386::-;18667:3;18695:38;18727:5;18695:38;:::i;:::-;18749:88;18830:6;18825:3;18749:88;:::i;:::-;18742:95;;18846:65;18904:6;18899:3;18892:4;18885:5;18881:16;18846:65;:::i;:::-;18936:6;18931:3;18927:16;18920:23;;18671:278;18563:386;;;;:::o;18955:271::-;19085:3;19107:93;19196:3;19187:6;19107:93;:::i;:::-;19100:100;;19217:3;19210:10;;18955:271;;;;:::o
Swarm Source
ipfs://6924e2c2814060168dde73e8715a3294f99622d5984b4b08b90aac72c7f507dd
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Token Allocations
ETH
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BLAST | 100.00% | $2,868.09 | 0.00000000000000018 | <$0.000001 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
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.