Source Code
Multichain Info
Latest 11 from a total of 11 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 30090623 | 360 days ago | IN | 0.03 CELO | 0.00050442 | ||||
| Transfer | 27351181 | 519 days ago | IN | 0.01 CELO | 0.00015907 | ||||
| Transfer | 27211239 | 527 days ago | IN | 0.5 CELO | 0.0004804 | ||||
| Transfer | 27122743 | 532 days ago | IN | 0.01 CELO | 0.0004804 | ||||
| Transfer | 26887219 | 545 days ago | IN | 0.1 CELO | 0.00048088 | ||||
| Transfer | 26883422 | 546 days ago | IN | 0.03 CELO | 0.00048088 | ||||
| Transfer | 26846160 | 548 days ago | IN | 0.001 CELO | 0.0004804 | ||||
| Transfer | 26240267 | 583 days ago | IN | 0.04 CELO | 0.0004804 | ||||
| Transfer | 26012378 | 596 days ago | IN | 0.1 CELO | 0.0004804 | ||||
| Transfer | 25821505 | 607 days ago | IN | 0.001 CELO | 0.0004804 | ||||
| Transfer | 25711593 | 613 days ago | IN | 30 CELO | 0.0004554 |
Latest 21 internal transactions
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 30090623 | 360 days ago | 0.0225 CELO | ||||
| 30090623 | 360 days ago | 0.0075 CELO | ||||
| 27211239 | 527 days ago | 0.375 CELO | ||||
| 27211239 | 527 days ago | 0.125 CELO | ||||
| 27122743 | 532 days ago | 0.0075 CELO | ||||
| 27122743 | 532 days ago | 0.0025 CELO | ||||
| 26887219 | 545 days ago | 0.075 CELO | ||||
| 26887219 | 545 days ago | 0.025 CELO | ||||
| 26883422 | 546 days ago | 0.0225 CELO | ||||
| 26883422 | 546 days ago | 0.0075 CELO | ||||
| 26846160 | 548 days ago | 0.00075 CELO | ||||
| 26846160 | 548 days ago | 0.00025 CELO | ||||
| 26240267 | 583 days ago | 0.03 CELO | ||||
| 26240267 | 583 days ago | 0.01 CELO | ||||
| 26012378 | 596 days ago | 0.075 CELO | ||||
| 26012378 | 596 days ago | 0.025 CELO | ||||
| 25821505 | 607 days ago | 0.00075 CELO | ||||
| 25821505 | 607 days ago | 0.00025 CELO | ||||
| 25711593 | 613 days ago | 22.5 CELO | ||||
| 25711593 | 613 days ago | 7.5 CELO | ||||
| 22803736 | 782 days ago | Contract Creation | 0 CELO |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
UnitapFund
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
import "@openzeppelin/contracts/access/AccessControl.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
contract UnitapFund is AccessControl, Pausable {
address public fundWallet;
address public gasContract;
uint256 public walletPercent;
event AddFund(address funder, uint256 amount);
constructor(
address _admin,
address _wallet,
address _contract,
uint256 _walletPercent
) {
_setupRole(DEFAULT_ADMIN_ROLE, _admin);
fundWallet = _wallet;
gasContract = _contract;
walletPercent = _walletPercent;
}
function setFundWallet(
address _wallet
) external onlyRole(DEFAULT_ADMIN_ROLE) {
fundWallet = _wallet;
}
function setGasContract(
address _contract
) external onlyRole(DEFAULT_ADMIN_ROLE) {
gasContract = _contract;
}
function setWalletPercent(
uint256 _percent
) external onlyRole(DEFAULT_ADMIN_ROLE) {
require(_percent >= 0 && _percent <= 100, "INVALID_PERCENT");
walletPercent = _percent;
}
receive() external payable whenNotPaused {
require(msg.value > 0, "!FUND_AMOUNT");
uint256 walletAmount = (msg.value * walletPercent) / 100;
uint256 contractAmount = msg.value - walletAmount;
if (walletAmount > 0) {
payable(fundWallet).transfer(walletAmount);
}
if (contractAmount > 0) {
payable(gasContract).transfer(contractAmount);
}
emit AddFund(msg.sender, msg.value);
}
function emergencyWithdraw(
uint256 amount,
address to
) external onlyRole(DEFAULT_ADMIN_ROLE) {
require(amount <= address(this).balance, "INSUFFICIENT_BALANCE");
payable(to).transfer(amount);
}
function pause() external onlyRole(DEFAULT_ADMIN_ROLE) {
_pause();
}
function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) {
_unpause();
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)
pragma solidity ^0.8.0;
import "./IAccessControl.sol";
import "../utils/Context.sol";
import "../utils/Strings.sol";
import "../utils/introspection/ERC165.sol";
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms. This is a lightweight version that doesn't allow enumerating role
* members except through off-chain means by accessing the contract event logs. Some
* applications may benefit from on-chain enumerability, for those cases see
* {AccessControlEnumerable}.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
* ```
* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
* ```
*
* Roles can be used to represent a set of permissions. To restrict access to a
* function call, use {hasRole}:
*
* ```
* function foo() public {
* require(hasRole(MY_ROLE, msg.sender));
* ...
* }
* ```
*
* Roles can be granted and revoked dynamically via the {grantRole} and
* {revokeRole} functions. Each role has an associated admin role, and only
* accounts that have a role's admin role can call {grantRole} and {revokeRole}.
*
* By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
* that only accounts with this role will be able to grant or revoke other
* roles. More complex role relationships can be created by using
* {_setRoleAdmin}.
*
* WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
* grant and revoke this role. Extra precautions should be taken to secure
* accounts that have been granted it.
*/
abstract contract AccessControl is Context, IAccessControl, ERC165 {
struct RoleData {
mapping(address => bool) members;
bytes32 adminRole;
}
mapping(bytes32 => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
/**
* @dev Modifier that checks that an account has a specific role. Reverts
* with a standardized message including the required role.
*
* The format of the revert reason is given by the following regular expression:
*
* /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
*
* _Available since v4.1._
*/
modifier onlyRole(bytes32 role) {
_checkRole(role);
_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) public view virtual override returns (bool) {
return _roles[role].members[account];
}
/**
* @dev Revert with a standard message if `_msgSender()` is missing `role`.
* Overriding this function changes the behavior of the {onlyRole} modifier.
*
* Format of the revert message is described in {_checkRole}.
*
* _Available since v4.6._
*/
function _checkRole(bytes32 role) internal view virtual {
_checkRole(role, _msgSender());
}
/**
* @dev Revert with a standard message if `account` is missing `role`.
*
* The format of the revert reason is given by the following regular expression:
*
* /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
*/
function _checkRole(bytes32 role, address account) internal view virtual {
if (!hasRole(role, account)) {
revert(
string(
abi.encodePacked(
"AccessControl: account ",
Strings.toHexString(account),
" is missing role ",
Strings.toHexString(uint256(role), 32)
)
)
);
}
}
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {
return _roles[role].adminRole;
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleGranted} event.
*/
function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
_grantRole(role, account);
}
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleRevoked} event.
*/
function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
_revokeRole(role, account);
}
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been revoked `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `account`.
*
* May emit a {RoleRevoked} event.
*/
function renounceRole(bytes32 role, address account) public virtual override {
require(account == _msgSender(), "AccessControl: can only renounce roles for self");
_revokeRole(role, account);
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event. Note that unlike {grantRole}, this function doesn't perform any
* checks on the calling account.
*
* May emit a {RoleGranted} event.
*
* [WARNING]
* ====
* This function should only be called from the constructor when setting
* up the initial roles for the system.
*
* Using this function in any other way is effectively circumventing the admin
* system imposed by {AccessControl}.
* ====
*
* NOTE: This function is deprecated in favor of {_grantRole}.
*/
function _setupRole(bytes32 role, address account) internal virtual {
_grantRole(role, account);
}
/**
* @dev Sets `adminRole` as ``role``'s admin role.
*
* Emits a {RoleAdminChanged} event.
*/
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
bytes32 previousAdminRole = getRoleAdmin(role);
_roles[role].adminRole = adminRole;
emit RoleAdminChanged(role, previousAdminRole, adminRole);
}
/**
* @dev Grants `role` to `account`.
*
* Internal function without access restriction.
*
* May emit a {RoleGranted} event.
*/
function _grantRole(bytes32 role, address account) internal virtual {
if (!hasRole(role, account)) {
_roles[role].members[account] = true;
emit RoleGranted(role, account, _msgSender());
}
}
/**
* @dev Revokes `role` from `account`.
*
* Internal function without access restriction.
*
* May emit a {RoleRevoked} event.
*/
function _revokeRole(bytes32 role, address account) internal virtual {
if (hasRole(role, account)) {
_roles[role].members[account] = false;
emit RoleRevoked(role, account, _msgSender());
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)
pragma solidity ^0.8.0;
/**
* @dev External interface of AccessControl declared to support ERC165 detection.
*/
interface IAccessControl {
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted signaling this.
*
* _Available since v3.1._
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call, an admin role
* bearer except when using {AccessControl-_setupRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) external view returns (bool);
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {AccessControl-_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) external view returns (bytes32);
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `account`.
*/
function renounceRole(bytes32 role, address account) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
_requireNotPaused();
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
_requirePaused();
_;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Throws if the contract is paused.
*/
function _requireNotPaused() internal view virtual {
require(!paused(), "Pausable: paused");
}
/**
* @dev Throws if the contract is not paused.
*/
function _requirePaused() internal view virtual {
require(paused(), "Pausable: not paused");
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @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;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
import "./IERC165.sol";
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
enum Rounding {
Down, // Toward negative infinity
Up, // Toward infinity
Zero // Toward zero
}
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow.
return (a & b) + (a ^ b) / 2;
}
/**
* @dev Returns the ceiling of the division of two numbers.
*
* This differs from standard division with `/` in that it rounds up instead
* of rounding down.
*/
function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b - 1) / b can overflow on addition, so we distribute.
return a == 0 ? 0 : (a - 1) / b + 1;
}
/**
* @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
* @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)
* with further edits by Uniswap Labs also under MIT license.
*/
function mulDiv(
uint256 x,
uint256 y,
uint256 denominator
) internal pure returns (uint256 result) {
unchecked {
// 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
// use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
// variables such that product = prod1 * 2^256 + prod0.
uint256 prod0; // Least significant 256 bits of the product
uint256 prod1; // Most significant 256 bits of the product
assembly {
let mm := mulmod(x, y, not(0))
prod0 := mul(x, y)
prod1 := sub(sub(mm, prod0), lt(mm, prod0))
}
// Handle non-overflow cases, 256 by 256 division.
if (prod1 == 0) {
return prod0 / denominator;
}
// Make sure the result is less than 2^256. Also prevents denominator == 0.
require(denominator > prod1);
///////////////////////////////////////////////
// 512 by 256 division.
///////////////////////////////////////////////
// Make division exact by subtracting the remainder from [prod1 prod0].
uint256 remainder;
assembly {
// Compute remainder using mulmod.
remainder := mulmod(x, y, denominator)
// Subtract 256 bit number from 512 bit number.
prod1 := sub(prod1, gt(remainder, prod0))
prod0 := sub(prod0, remainder)
}
// Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
// See https://cs.stackexchange.com/q/138556/92363.
// Does not overflow because the denominator cannot be zero at this stage in the function.
uint256 twos = denominator & (~denominator + 1);
assembly {
// Divide denominator by twos.
denominator := div(denominator, twos)
// Divide [prod1 prod0] by twos.
prod0 := div(prod0, twos)
// Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
twos := add(div(sub(0, twos), twos), 1)
}
// Shift in bits from prod1 into prod0.
prod0 |= prod1 * twos;
// Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
// that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
// four bits. That is, denominator * inv = 1 mod 2^4.
uint256 inverse = (3 * denominator) ^ 2;
// Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
// in modular arithmetic, doubling the correct bits in each step.
inverse *= 2 - denominator * inverse; // inverse mod 2^8
inverse *= 2 - denominator * inverse; // inverse mod 2^16
inverse *= 2 - denominator * inverse; // inverse mod 2^32
inverse *= 2 - denominator * inverse; // inverse mod 2^64
inverse *= 2 - denominator * inverse; // inverse mod 2^128
inverse *= 2 - denominator * inverse; // inverse mod 2^256
// Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
// This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
// less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
// is no longer required.
result = prod0 * inverse;
return result;
}
}
/**
* @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
*/
function mulDiv(
uint256 x,
uint256 y,
uint256 denominator,
Rounding rounding
) internal pure returns (uint256) {
uint256 result = mulDiv(x, y, denominator);
if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
result += 1;
}
return result;
}
/**
* @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.
*
* Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
*/
function sqrt(uint256 a) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
// For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
//
// We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
// `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
//
// This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
// → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
// → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
//
// Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
uint256 result = 1 << (log2(a) >> 1);
// At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
// since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
// every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
// into the expected uint128 result.
unchecked {
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
return min(result, a / result);
}
}
/**
* @notice Calculates sqrt(a), following the selected rounding direction.
*/
function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = sqrt(a);
return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
}
}
/**
* @dev Return the log in base 2, rounded down, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 128;
}
if (value >> 64 > 0) {
value >>= 64;
result += 64;
}
if (value >> 32 > 0) {
value >>= 32;
result += 32;
}
if (value >> 16 > 0) {
value >>= 16;
result += 16;
}
if (value >> 8 > 0) {
value >>= 8;
result += 8;
}
if (value >> 4 > 0) {
value >>= 4;
result += 4;
}
if (value >> 2 > 0) {
value >>= 2;
result += 2;
}
if (value >> 1 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 2, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log2(value);
return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 10, rounded down, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >= 10**64) {
value /= 10**64;
result += 64;
}
if (value >= 10**32) {
value /= 10**32;
result += 32;
}
if (value >= 10**16) {
value /= 10**16;
result += 16;
}
if (value >= 10**8) {
value /= 10**8;
result += 8;
}
if (value >= 10**4) {
value /= 10**4;
result += 4;
}
if (value >= 10**2) {
value /= 10**2;
result += 2;
}
if (value >= 10**1) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 10, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log10(value);
return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 256, rounded down, of a positive value.
* Returns 0 if given 0.
*
* Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
*/
function log256(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 16;
}
if (value >> 64 > 0) {
value >>= 64;
result += 8;
}
if (value >> 32 > 0) {
value >>= 32;
result += 4;
}
if (value >> 16 > 0) {
value >>= 16;
result += 2;
}
if (value >> 8 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 10, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log256(value);
return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
import "./math/Math.sol";
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
unchecked {
uint256 length = Math.log10(value) + 1;
string memory buffer = new string(length);
uint256 ptr;
/// @solidity memory-safe-assembly
assembly {
ptr := add(buffer, add(32, length))
}
while (true) {
ptr--;
/// @solidity memory-safe-assembly
assembly {
mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
}
value /= 10;
if (value == 0) break;
}
return buffer;
}
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
unchecked {
return toHexString(value, Math.log256(value) + 1);
}
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
/**
* @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
*/
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256","name":"_walletPercent","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"funder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AddFund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setFundWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"setGasContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"setWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405234801561001057600080fd5b5060405162000f4a38038062000f4a83398101604081905261003191610151565b6001805460ff19169055610046600085610089565b60018054610100600160a81b0319166101006001600160a01b0395861602179055600280546001600160a01b03191692909316919091179091556003555061019c565b6100938282610097565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610093576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556100f13390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b80516001600160a01b038116811461014c57600080fd5b919050565b6000806000806080858703121561016757600080fd5b61017085610135565b935061017e60208601610135565b925061018c60408601610135565b6060959095015193969295505050565b610d9e80620001ac6000396000f3fe6080604052600436106101025760003560e01c80635c975abb1161009557806391d148541161006457806391d14854146103f0578063a217fddf14610410578063ab6d13df14610425578063c4d1ad0a14610445578063d547741f1461046557600080fd5b80635c975abb14610370578063664a1ad614610388578063680c63b3146103c55780638456cb59146103db57600080fd5b806336568abe116100d157806336568abe146102fb5780633f4ba83a1461031b57806355ce3b9a146103305780635accb5971461035057600080fd5b806301ffc9a714610246578063248a9ca31461027b5780632f2ff15d146102b95780632f940c70146102db57600080fd5b366102415761010f610485565b600034116101535760405162461bcd60e51b815260206004820152600c60248201526b085195539117d05353d5539560a21b60448201526064015b60405180910390fd5b60006064600354346101659190610b54565b61016f9190610b6b565b9050600061017d8234610b8d565b905081156101c5576001546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f193505050501580156101c3573d6000803e3d6000fd5b505b8015610207576002546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610205573d6000803e3d6000fd5b505b604080513381523460208201527f85475feba15e127a3c020e9ed07784e81fa905ad45771316e168bf8e0784f884910160405180910390a1005b600080fd5b34801561025257600080fd5b50610266610261366004610ba0565b6104cd565b60405190151581526020015b60405180910390f35b34801561028757600080fd5b506102ab610296366004610bca565b60009081526020819052604090206001015490565b604051908152602001610272565b3480156102c557600080fd5b506102d96102d4366004610bff565b610504565b005b3480156102e757600080fd5b506102d96102f6366004610bff565b61052e565b34801561030757600080fd5b506102d9610316366004610bff565b6105bc565b34801561032757600080fd5b506102d961063a565b34801561033c57600080fd5b506102d961034b366004610c2b565b610650565b34801561035c57600080fd5b506102d961036b366004610bca565b610684565b34801561037c57600080fd5b5060015460ff16610266565b34801561039457600080fd5b506001546103ad9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610272565b3480156103d157600080fd5b506102ab60035481565b3480156103e757600080fd5b506102d96106d8565b3480156103fc57600080fd5b5061026661040b366004610bff565b6106eb565b34801561041c57600080fd5b506102ab600081565b34801561043157600080fd5b506102d9610440366004610c2b565b610714565b34801561045157600080fd5b506002546103ad906001600160a01b031681565b34801561047157600080fd5b506102d9610480366004610bff565b610742565b60015460ff16156104cb5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161014a565b565b60006001600160e01b03198216637965db0b60e01b14806104fe57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206001015461051f81610767565b6105298383610771565b505050565b600061053981610767565b478311156105805760405162461bcd60e51b8152602060048201526014602482015273494e53554646494349454e545f42414c414e434560601b604482015260640161014a565b6040516001600160a01b0383169084156108fc029085906000818181858888f193505050501580156105b6573d6000803e3d6000fd5b50505050565b6001600160a01b038116331461062c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161014a565b61063682826107f5565b5050565b600061064581610767565b61064d61085a565b50565b600061065b81610767565b50600180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600061068f81610767565b60648211156106d25760405162461bcd60e51b815260206004820152600f60248201526e1253959053125117d4115490d15395608a1b604482015260640161014a565b50600355565b60006106e381610767565b61064d6108ac565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600061071f81610767565b50600280546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526020819052604090206001015461075d81610767565b61052983836107f5565b61064d81336108e7565b61077b82826106eb565b610636576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556107b13390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6107ff82826106eb565b15610636576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610862610940565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6108b4610485565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361088f565b6108f182826106eb565b610636576108fe81610989565b61090983602061099b565b60405160200161091a929190610c6a565b60408051601f198184030181529082905262461bcd60e51b825261014a91600401610cdf565b60015460ff166104cb5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161014a565b60606104fe6001600160a01b03831660145b606060006109aa836002610b54565b6109b5906002610d12565b67ffffffffffffffff8111156109cd576109cd610d25565b6040519080825280601f01601f1916602001820160405280156109f7576020820181803683370190505b509050600360fc1b81600081518110610a1257610a12610d3b565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610a4157610a41610d3b565b60200101906001600160f81b031916908160001a9053506000610a65846002610b54565b610a70906001610d12565b90505b6001811115610ae8576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610aa457610aa4610d3b565b1a60f81b828281518110610aba57610aba610d3b565b60200101906001600160f81b031916908160001a90535060049490941c93610ae181610d51565b9050610a73565b508315610b375760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161014a565b9392505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176104fe576104fe610b3e565b600082610b8857634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156104fe576104fe610b3e565b600060208284031215610bb257600080fd5b81356001600160e01b031981168114610b3757600080fd5b600060208284031215610bdc57600080fd5b5035919050565b80356001600160a01b0381168114610bfa57600080fd5b919050565b60008060408385031215610c1257600080fd5b82359150610c2260208401610be3565b90509250929050565b600060208284031215610c3d57600080fd5b610b3782610be3565b60005b83811015610c61578181015183820152602001610c49565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610ca2816017850160208801610c46565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610cd3816028840160208801610c46565b01602801949350505050565b6020815260008251806020840152610cfe816040850160208701610c46565b601f01601f19169190910160400192915050565b808201808211156104fe576104fe610b3e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081610d6057610d60610b3e565b50600019019056fea26469706673582212206150ed8a69f75b3d9407a93358a37d9d766cc80d2eccfe9ddf501283328dd85e64736f6c63430008120033000000000000000000000000e9239a6fe26985eb5b21ddacdc904cda7f7551a0000000000000000000000000b10f8e218a9cd738b0f1e2f7169aa3c0897f2d83000000000000000000000000b3a97684eb67182baa7994b226e6315196d8b3640000000000000000000000000000000000000000000000000000000000000019
Deployed Bytecode
0x6080604052600436106101025760003560e01c80635c975abb1161009557806391d148541161006457806391d14854146103f0578063a217fddf14610410578063ab6d13df14610425578063c4d1ad0a14610445578063d547741f1461046557600080fd5b80635c975abb14610370578063664a1ad614610388578063680c63b3146103c55780638456cb59146103db57600080fd5b806336568abe116100d157806336568abe146102fb5780633f4ba83a1461031b57806355ce3b9a146103305780635accb5971461035057600080fd5b806301ffc9a714610246578063248a9ca31461027b5780632f2ff15d146102b95780632f940c70146102db57600080fd5b366102415761010f610485565b600034116101535760405162461bcd60e51b815260206004820152600c60248201526b085195539117d05353d5539560a21b60448201526064015b60405180910390fd5b60006064600354346101659190610b54565b61016f9190610b6b565b9050600061017d8234610b8d565b905081156101c5576001546040516101009091046001600160a01b0316906108fc8415029084906000818181858888f193505050501580156101c3573d6000803e3d6000fd5b505b8015610207576002546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610205573d6000803e3d6000fd5b505b604080513381523460208201527f85475feba15e127a3c020e9ed07784e81fa905ad45771316e168bf8e0784f884910160405180910390a1005b600080fd5b34801561025257600080fd5b50610266610261366004610ba0565b6104cd565b60405190151581526020015b60405180910390f35b34801561028757600080fd5b506102ab610296366004610bca565b60009081526020819052604090206001015490565b604051908152602001610272565b3480156102c557600080fd5b506102d96102d4366004610bff565b610504565b005b3480156102e757600080fd5b506102d96102f6366004610bff565b61052e565b34801561030757600080fd5b506102d9610316366004610bff565b6105bc565b34801561032757600080fd5b506102d961063a565b34801561033c57600080fd5b506102d961034b366004610c2b565b610650565b34801561035c57600080fd5b506102d961036b366004610bca565b610684565b34801561037c57600080fd5b5060015460ff16610266565b34801561039457600080fd5b506001546103ad9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610272565b3480156103d157600080fd5b506102ab60035481565b3480156103e757600080fd5b506102d96106d8565b3480156103fc57600080fd5b5061026661040b366004610bff565b6106eb565b34801561041c57600080fd5b506102ab600081565b34801561043157600080fd5b506102d9610440366004610c2b565b610714565b34801561045157600080fd5b506002546103ad906001600160a01b031681565b34801561047157600080fd5b506102d9610480366004610bff565b610742565b60015460ff16156104cb5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161014a565b565b60006001600160e01b03198216637965db0b60e01b14806104fe57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526020819052604090206001015461051f81610767565b6105298383610771565b505050565b600061053981610767565b478311156105805760405162461bcd60e51b8152602060048201526014602482015273494e53554646494349454e545f42414c414e434560601b604482015260640161014a565b6040516001600160a01b0383169084156108fc029085906000818181858888f193505050501580156105b6573d6000803e3d6000fd5b50505050565b6001600160a01b038116331461062c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161014a565b61063682826107f5565b5050565b600061064581610767565b61064d61085a565b50565b600061065b81610767565b50600180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600061068f81610767565b60648211156106d25760405162461bcd60e51b815260206004820152600f60248201526e1253959053125117d4115490d15395608a1b604482015260640161014a565b50600355565b60006106e381610767565b61064d6108ac565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600061071f81610767565b50600280546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526020819052604090206001015461075d81610767565b61052983836107f5565b61064d81336108e7565b61077b82826106eb565b610636576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556107b13390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6107ff82826106eb565b15610636576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b610862610940565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6108b4610485565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361088f565b6108f182826106eb565b610636576108fe81610989565b61090983602061099b565b60405160200161091a929190610c6a565b60408051601f198184030181529082905262461bcd60e51b825261014a91600401610cdf565b60015460ff166104cb5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161014a565b60606104fe6001600160a01b03831660145b606060006109aa836002610b54565b6109b5906002610d12565b67ffffffffffffffff8111156109cd576109cd610d25565b6040519080825280601f01601f1916602001820160405280156109f7576020820181803683370190505b509050600360fc1b81600081518110610a1257610a12610d3b565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610a4157610a41610d3b565b60200101906001600160f81b031916908160001a9053506000610a65846002610b54565b610a70906001610d12565b90505b6001811115610ae8576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610aa457610aa4610d3b565b1a60f81b828281518110610aba57610aba610d3b565b60200101906001600160f81b031916908160001a90535060049490941c93610ae181610d51565b9050610a73565b508315610b375760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161014a565b9392505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176104fe576104fe610b3e565b600082610b8857634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156104fe576104fe610b3e565b600060208284031215610bb257600080fd5b81356001600160e01b031981168114610b3757600080fd5b600060208284031215610bdc57600080fd5b5035919050565b80356001600160a01b0381168114610bfa57600080fd5b919050565b60008060408385031215610c1257600080fd5b82359150610c2260208401610be3565b90509250929050565b600060208284031215610c3d57600080fd5b610b3782610be3565b60005b83811015610c61578181015183820152602001610c49565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610ca2816017850160208801610c46565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610cd3816028840160208801610c46565b01602801949350505050565b6020815260008251806020840152610cfe816040850160208701610c46565b601f01601f19169190910160400192915050565b808201808211156104fe576104fe610b3e565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081610d6057610d60610b3e565b50600019019056fea26469706673582212206150ed8a69f75b3d9407a93358a37d9d766cc80d2eccfe9ddf501283328dd85e64736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e9239a6fe26985eb5b21ddacdc904cda7f7551a0000000000000000000000000b10f8e218a9cd738b0f1e2f7169aa3c0897f2d83000000000000000000000000b3a97684eb67182baa7994b226e6315196d8b3640000000000000000000000000000000000000000000000000000000000000019
-----Decoded View---------------
Arg [0] : _admin (address): 0xe9239a6Fe26985eB5B21DdaCDc904cDa7f7551a0
Arg [1] : _wallet (address): 0xB10f8E218A9cD738b0F1E2f7169Aa3c0897F2d83
Arg [2] : _contract (address): 0xb3A97684Eb67182BAa7994b226e6315196D8b364
Arg [3] : _walletPercent (uint256): 25
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000e9239a6fe26985eb5b21ddacdc904cda7f7551a0
Arg [1] : 000000000000000000000000b10f8e218a9cd738b0f1e2f7169aa3c0897f2d83
Arg [2] : 000000000000000000000000b3a97684eb67182baa7994b226e6315196d8b364
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000019
Deployed Bytecode Sourcemap
174:1871:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1239:19:2;:17;:19::i;:::-;1227:1:8::1;1215:9;:13;1207:38;;;::::0;-1:-1:-1;;;1207:38:8;;216:2:9;1207:38:8::1;::::0;::::1;198:21:9::0;255:2;235:18;;;228:30;-1:-1:-1;;;274:18:9;;;267:42;326:18;;1207:38:8::1;;;;;;;;;1256:20;1309:3;1292:13;;1280:9;:25;;;;:::i;:::-;1279:33;;;;:::i;:::-;1256:56:::0;-1:-1:-1;1322:22:8::1;1347:24;1256:56:::0;1347:9:::1;:24;:::i;:::-;1322:49:::0;-1:-1:-1;1386:16:8;;1382:89:::1;;1426:10;::::0;1418:42:::1;::::0;1426:10:::1;::::0;;::::1;-1:-1:-1::0;;;;;1426:10:8::1;::::0;1418:42:::1;::::0;::::1;;::::0;;;::::1;::::0;;;;1426:10;1418:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;1382:89;1485:18:::0;;1481:94:::1;;1527:11;::::0;1519:45:::1;::::0;-1:-1:-1;;;;;1527:11:8;;::::1;::::0;1519:45;::::1;;;::::0;1549:14;;1527:11:::1;1519:45:::0;1527:11;1519:45;1549:14;1527:11;1519:45;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;1481:94;1590:30;::::0;;1598:10:::1;1189:51:9::0;;1610:9:8::1;1271:2:9::0;1256:18;;1249:34;1590:30:8::1;::::0;1162:18:9;1590:30:8::1;;;;;;;1197:430:::0;174:1871;;;;2606:202:0;;;;;;;;;;-1:-1:-1;2606:202:0;;;;;:::i;:::-;;:::i;:::-;;;1750:14:9;;1743:22;1725:41;;1713:2;1698:18;2606:202:0;;;;;;;;4378:129;;;;;;;;;;-1:-1:-1;4378:129:0;;;;;:::i;:::-;4452:7;4478:12;;;;;;;;;;:22;;;;4378:129;;;;2108:25:9;;;2096:2;2081:18;4378:129:0;1962:177:9;4803:145:0;;;;;;;;;;-1:-1:-1;4803:145:0;;;;;:::i;:::-;;:::i;:::-;;1633:234:8;;;;;;;;;;-1:-1:-1;1633:234:8;;;;;:::i;:::-;;:::i;5912:214:0:-;;;;;;;;;;-1:-1:-1;5912:214:0;;;;;:::i;:::-;;:::i;1959:84:8:-;;;;;;;;;;;;;:::i;667:129::-;;;;;;;;;;-1:-1:-1;667:129:8;;;;;:::i;:::-;;:::i;943:207::-;;;;;;;;;;-1:-1:-1;943:207:8;;;;;:::i;:::-;;:::i;1615:84:2:-;;;;;;;;;;-1:-1:-1;1685:7:2;;;;1615:84;;227:25:8;;;;;;;;;;-1:-1:-1;227:25:8;;;;;;;-1:-1:-1;;;;;227:25:8;;;;;;-1:-1:-1;;;;;3380:32:9;;;3362:51;;3350:2;3335:18;227:25:8;3216:203:9;290:28:8;;;;;;;;;;;;;;;;1873:80;;;;;;;;;;;;;:::i;2895:145:0:-;;;;;;;;;;-1:-1:-1;2895:145:0;;;;;:::i;:::-;;:::i;2027:49::-;;;;;;;;;;-1:-1:-1;2027:49:0;2072:4;2027:49;;802:135:8;;;;;;;;;;-1:-1:-1;802:135:8;;;;;:::i;:::-;;:::i;258:26::-;;;;;;;;;;-1:-1:-1;258:26:8;;;;-1:-1:-1;;;;;258:26:8;;;5228:147:0;;;;;;;;;;-1:-1:-1;5228:147:0;;;;;:::i;:::-;;:::i;1767:106:2:-;1685:7;;;;1836:9;1828:38;;;;-1:-1:-1;;;1828:38:2;;3808:2:9;1828:38:2;;;3790:21:9;3847:2;3827:18;;;3820:30;-1:-1:-1;;;3866:18:9;;;3859:46;3922:18;;1828:38:2;3606:340:9;1828:38:2;1767:106::o;2606:202:0:-;2691:4;-1:-1:-1;;;;;;2714:47:0;;-1:-1:-1;;;2714:47:0;;:87;;-1:-1:-1;;;;;;;;;;937:40:5;;;2765:36:0;2707:94;2606:202;-1:-1:-1;;2606:202:0:o;4803:145::-;4452:7;4478:12;;;;;;;;;;:22;;;2505:16;2516:4;2505:10;:16::i;:::-;4916:25:::1;4927:4;4933:7;4916:10;:25::i;:::-;4803:145:::0;;;:::o;1633:234:8:-;2072:4:0;2505:16;2072:4;2505:10;:16::i;:::-;1776:21:8::1;1766:6;:31;;1758:64;;;::::0;-1:-1:-1;;;1758:64:8;;4153:2:9;1758:64:8::1;::::0;::::1;4135:21:9::0;4192:2;4172:18;;;4165:30;-1:-1:-1;;;4211:18:9;;;4204:50;4271:18;;1758:64:8::1;3951:344:9::0;1758:64:8::1;1832:28;::::0;-1:-1:-1;;;;;1832:20:8;::::1;::::0;:28;::::1;;;::::0;1853:6;;1832:28:::1;::::0;;;1853:6;1832:20;:28;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;1633:234:::0;;;:::o;5912:214:0:-;-1:-1:-1;;;;;6007:23:0;;719:10:3;6007:23:0;5999:83;;;;-1:-1:-1;;;5999:83:0;;4502:2:9;5999:83:0;;;4484:21:9;4541:2;4521:18;;;4514:30;4580:34;4560:18;;;4553:62;-1:-1:-1;;;4631:18:9;;;4624:45;4686:19;;5999:83:0;4300:411:9;5999:83:0;6093:26;6105:4;6111:7;6093:11;:26::i;:::-;5912:214;;:::o;1959:84:8:-;2072:4:0;2505:16;2072:4;2505:10;:16::i;:::-;2026:10:8::1;:8;:10::i;:::-;1959:84:::0;:::o;667:129::-;2072:4:0;2505:16;2072:4;2505:10;:16::i;:::-;-1:-1:-1;769:10:8::1;:20:::0;;-1:-1:-1;;;;;769:20:8;;::::1;;;-1:-1:-1::0;;;;;;769:20:8;;::::1;::::0;;;::::1;::::0;;667:129::o;943:207::-;2072:4:0;2505:16;2072:4;2505:10;:16::i;:::-;1086:3:8::1;1074:8;:15;;1049:60;;;::::0;-1:-1:-1;;;1049:60:8;;4918:2:9;1049:60:8::1;::::0;::::1;4900:21:9::0;4957:2;4937:18;;;4930:30;-1:-1:-1;;;4976:18:9;;;4969:45;5031:18;;1049:60:8::1;4716:339:9::0;1049:60:8::1;-1:-1:-1::0;1119:13:8::1;:24:::0;943:207::o;1873:80::-;2072:4:0;2505:16;2072:4;2505:10;:16::i;:::-;1938:8:8::1;:6;:8::i;2895:145:0:-:0;2981:4;3004:12;;;;;;;;;;;-1:-1:-1;;;;;3004:29:0;;;;;;;;;;;;;;;2895:145::o;802:135:8:-;2072:4:0;2505:16;2072:4;2505:10;:16::i;:::-;-1:-1:-1;907:11:8::1;:23:::0;;-1:-1:-1;;;;;;907:23:8::1;-1:-1:-1::0;;;;;907:23:8;;;::::1;::::0;;;::::1;::::0;;802:135::o;5228:147:0:-;4452:7;4478:12;;;;;;;;;;:22;;;2505:16;2516:4;2505:10;:16::i;:::-;5342:26:::1;5354:4;5360:7;5342:11;:26::i;3334:103::-:0;3400:30;3411:4;719:10:3;3400::0;:30::i;7461:233::-;7544:22;7552:4;7558:7;7544;:22::i;:::-;7539:149;;7582:6;:12;;;;;;;;;;;-1:-1:-1;;;;;7582:29:0;;;;;;;;;:36;;-1:-1:-1;;7582:36:0;7614:4;7582:36;;;7664:12;719:10:3;;640:96;7664:12:0;-1:-1:-1;;;;;7637:40:0;7655:7;-1:-1:-1;;;;;7637:40:0;7649:4;7637:40;;;;;;;;;;7461:233;;:::o;7865:234::-;7948:22;7956:4;7962:7;7948;:22::i;:::-;7944:149;;;8018:5;7986:12;;;;;;;;;;;-1:-1:-1;;;;;7986:29:0;;;;;;;;;;:37;;-1:-1:-1;;7986:37:0;;;8042:40;719:10:3;;7986:12:0;;8042:40;;8018:5;8042:40;7865:234;;:::o;2433:117:2:-;1486:16;:14;:16::i;:::-;2491:7:::1;:15:::0;;-1:-1:-1;;2491:15:2::1;::::0;;2521:22:::1;719:10:3::0;2530:12:2::1;2521:22;::::0;-1:-1:-1;;;;;3380:32:9;;;3362:51;;3350:2;3335:18;2521:22:2::1;;;;;;;2433:117::o:0;2186:115::-;1239:19;:17;:19::i;:::-;2255:4:::1;2245:14:::0;;-1:-1:-1;;2245:14:2::1;::::0;::::1;::::0;;2274:20:::1;719:10:3::0;2281:12:2::1;640:96:3::0;3718:479:0;3806:22;3814:4;3820:7;3806;:22::i;:::-;3801:390;;3989:28;4009:7;3989:19;:28::i;:::-;4088:38;4116:4;4123:2;4088:19;:38::i;:::-;3896:252;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3896:252:0;;;;;;;;;;-1:-1:-1;;;3844:336:0;;;;;;;:::i;1945:106:2:-;1685:7;;;;2003:41;;;;-1:-1:-1;;;2003:41:2;;6735:2:9;2003:41:2;;;6717:21:9;6774:2;6754:18;;;6747:30;-1:-1:-1;;;6793:18:9;;;6786:50;6853:18;;2003:41:2;6533:344:9;2102:149:4;2160:13;2192:52;-1:-1:-1;;;;;2204:22:4;;311:2;1513:437;1588:13;1613:19;1645:10;1649:6;1645:1;:10;:::i;:::-;:14;;1658:1;1645:14;:::i;:::-;1635:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1635:25:4;;1613:47;;-1:-1:-1;;;1670:6:4;1677:1;1670:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1670:15:4;;;;;;;;;-1:-1:-1;;;1695:6:4;1702:1;1695:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;1695:15:4;;;;;;;;-1:-1:-1;1725:9:4;1737:10;1741:6;1737:1;:10;:::i;:::-;:14;;1750:1;1737:14;:::i;:::-;1725:26;;1720:128;1757:1;1753;:5;1720:128;;;-1:-1:-1;;;1800:5:4;1808:3;1800:11;1791:21;;;;;;;:::i;:::-;;;;1779:6;1786:1;1779:9;;;;;;;;:::i;:::-;;;;:33;-1:-1:-1;;;;;1779:33:4;;;;;;;;-1:-1:-1;1836:1:4;1826:11;;;;;1760:3;;;:::i;:::-;;;1720:128;;;-1:-1:-1;1865:10:4;;1857:55;;;;-1:-1:-1;;;1857:55:4;;7619:2:9;1857:55:4;;;7601:21:9;;;7638:18;;;7631:30;7697:34;7677:18;;;7670:62;7749:18;;1857:55:4;7417:356:9;1857:55:4;1936:6;1513:437;-1:-1:-1;;;1513:437:4:o;355:127:9:-;416:10;411:3;407:20;404:1;397:31;447:4;444:1;437:15;471:4;468:1;461:15;487:168;560:9;;;591;;608:15;;;602:22;;588:37;578:71;;629:18;;:::i;660:217::-;700:1;726;716:132;;770:10;765:3;761:20;758:1;751:31;805:4;802:1;795:15;833:4;830:1;823:15;716:132;-1:-1:-1;862:9:9;;660:217::o;882:128::-;949:9;;;970:11;;;967:37;;;984:18;;:::i;1294:286::-;1352:6;1405:2;1393:9;1384:7;1380:23;1376:32;1373:52;;;1421:1;1418;1411:12;1373:52;1447:23;;-1:-1:-1;;;;;;1499:32:9;;1489:43;;1479:71;;1546:1;1543;1536:12;1777:180;1836:6;1889:2;1877:9;1868:7;1864:23;1860:32;1857:52;;;1905:1;1902;1895:12;1857:52;-1:-1:-1;1928:23:9;;1777:180;-1:-1:-1;1777:180:9:o;2144:173::-;2212:20;;-1:-1:-1;;;;;2261:31:9;;2251:42;;2241:70;;2307:1;2304;2297:12;2241:70;2144:173;;;:::o;2322:254::-;2390:6;2398;2451:2;2439:9;2430:7;2426:23;2422:32;2419:52;;;2467:1;2464;2457:12;2419:52;2503:9;2490:23;2480:33;;2532:38;2566:2;2555:9;2551:18;2532:38;:::i;:::-;2522:48;;2322:254;;;;;:::o;2840:186::-;2899:6;2952:2;2940:9;2931:7;2927:23;2923:32;2920:52;;;2968:1;2965;2958:12;2920:52;2991:29;3010:9;2991:29;:::i;5060:250::-;5145:1;5155:113;5169:6;5166:1;5163:13;5155:113;;;5245:11;;;5239:18;5226:11;;;5219:39;5191:2;5184:10;5155:113;;;-1:-1:-1;;5302:1:9;5284:16;;5277:27;5060:250::o;5315:812::-;5726:25;5721:3;5714:38;5696:3;5781:6;5775:13;5797:75;5865:6;5860:2;5855:3;5851:12;5844:4;5836:6;5832:17;5797:75;:::i;:::-;-1:-1:-1;;;5931:2:9;5891:16;;;5923:11;;;5916:40;5981:13;;6003:76;5981:13;6065:2;6057:11;;6050:4;6038:17;;6003:76;:::i;:::-;6099:17;6118:2;6095:26;;5315:812;-1:-1:-1;;;;5315:812:9:o;6132:396::-;6281:2;6270:9;6263:21;6244:4;6313:6;6307:13;6356:6;6351:2;6340:9;6336:18;6329:34;6372:79;6444:6;6439:2;6428:9;6424:18;6419:2;6411:6;6407:15;6372:79;:::i;:::-;6512:2;6491:15;-1:-1:-1;;6487:29:9;6472:45;;;;6519:2;6468:54;;6132:396;-1:-1:-1;;6132:396:9:o;6882:125::-;6947:9;;;6968:10;;;6965:36;;;6981:18;;:::i;7012:127::-;7073:10;7068:3;7064:20;7061:1;7054:31;7104:4;7101:1;7094:15;7128:4;7125:1;7118:15;7144:127;7205:10;7200:3;7196:20;7193:1;7186:31;7236:4;7233:1;7226:15;7260:4;7257:1;7250:15;7276:136;7315:3;7343:5;7333:39;;7352:18;;:::i;:::-;-1:-1:-1;;;7388:18:9;;7276:136::o
Swarm Source
ipfs://6150ed8a69f75b3d9407a93358a37d9d766cc80d2eccfe9ddf501283328dd85e
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.