ETH Price: $3,265.14 (+2.27%)
Gas: 2 Gwei

Token

aBTC Token (aBTC)
 

Overview

Max Total Supply

83,729.256758818355795776 aBTC

Holders

113

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000013 aBTC

Value
$0.00
0x715F06DA4bB270bD6924014dee44172834Cb219D
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
aBTCVault

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-31
*/

// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol


// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.0) (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;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the value of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 value) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;





/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

    mapping(address account => mapping(address spender => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

// File: aBTC.sol


pragma solidity ^0.8.0;



interface IBTC is IERC20{
    function burn(uint256 amount) external;
    function mint(address to, uint256 amount) external;
}

contract aBTCVault is ERC20, Ownable(msg.sender) {
    IBTC public btcToken;
    address public buybackWallet;
    uint256 public mintFeePercent = 1;  // Initial mint fee percentage
    uint256 public redeemFeePercent = 2; // Initial redeem fee percentage

    constructor(address _btcTokenAddress, address _buybackWallet) ERC20("aBTC Token", "aBTC") {
        btcToken = IBTC(_btcTokenAddress);
        buybackWallet = _buybackWallet;
    }

    function mint(uint256 btcAmount) external {
        uint256 fee = calculateFee(btcAmount, mintFeePercent);
        uint256 amountAfterFee = btcAmount - fee;
        btcToken.transferFrom(address(msg.sender), address(this), btcAmount);
        btcToken.burn(btcAmount);
        _mint(msg.sender, amountAfterFee);
        _mint(buybackWallet, fee);
    }

    function redeem(uint256 abtcAmount) external {
        uint256 fee = calculateFee(abtcAmount, redeemFeePercent);
        uint256 amountAfterFee = abtcAmount - fee;

        _burn(msg.sender, abtcAmount);
        btcToken.mint(msg.sender, amountAfterFee);
        _mint(buybackWallet, fee);
    }

    function calculateFee(uint256 amount, uint256 feePercent) private pure returns (uint256) {
        return amount * feePercent / 100;
    }

    function setMintFeePercent(uint256 _mintFeePercent) external onlyOwner {
        require(_mintFeePercent >= 0 && _mintFeePercent <= 10, "Fee must be between 0% and 10%");
        mintFeePercent = _mintFeePercent;
    }

    function setRedeemFeePercent(uint256 _redeemFeePercent) external onlyOwner {
        require(_redeemFeePercent >= 0 && _redeemFeePercent <= 10, "Fee must be between 0% and 10%");
        redeemFeePercent = _redeemFeePercent;
    }

    function setBuybackWallet(address _buybackWallet) external onlyOwner {
        buybackWallet = _buybackWallet;
    }

    // Additional functions and safety checks can be added here.
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_btcTokenAddress","type":"address"},{"internalType":"address","name":"_buybackWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"btcToken","outputs":[{"internalType":"contract IBTC","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"btcAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"abtcAmount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redeemFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_buybackWallet","type":"address"}],"name":"setBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintFeePercent","type":"uint256"}],"name":"setMintFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_redeemFeePercent","type":"uint256"}],"name":"setRedeemFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600160085560026009553480156200001b57600080fd5b50604051620020f4380380620020f4833981810160405281019062000041919062000315565b336040518060400160405280600a81526020017f6142544320546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f61425443000000000000000000000000000000000000000000000000000000008152508160039081620000bf9190620005d6565b508060049081620000d19190620005d6565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001495760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620001409190620006ce565b60405180910390fd5b6200015a81620001e560201b60201c565b5081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620006eb565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002dd82620002b0565b9050919050565b620002ef81620002d0565b8114620002fb57600080fd5b50565b6000815190506200030f81620002e4565b92915050565b600080604083850312156200032f576200032e620002ab565b5b60006200033f85828601620002fe565b92505060206200035285828601620002fe565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003de57607f821691505b602082108103620003f457620003f362000396565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200045e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200041f565b6200046a86836200041f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004b7620004b1620004ab8462000482565b6200048c565b62000482565b9050919050565b6000819050919050565b620004d38362000496565b620004eb620004e282620004be565b8484546200042c565b825550505050565b600090565b62000502620004f3565b6200050f818484620004c8565b505050565b5b8181101562000537576200052b600082620004f8565b60018101905062000515565b5050565b601f82111562000586576200055081620003fa565b6200055b846200040f565b810160208510156200056b578190505b620005836200057a856200040f565b83018262000514565b50505b505050565b600082821c905092915050565b6000620005ab600019846008026200058b565b1980831691505092915050565b6000620005c6838362000598565b9150826002028217905092915050565b620005e1826200035c565b67ffffffffffffffff811115620005fd57620005fc62000367565b5b620006098254620003c5565b620006168282856200053b565b600060209050601f8311600181146200064e576000841562000639578287015190505b620006458582620005b8565b865550620006b5565b601f1984166200065e86620003fa565b60005b82811015620006885784890151825560018201915060208501945060208101905062000661565b86831015620006a85784890151620006a4601f89168262000598565b8355505b6001600288020188555050505b505050505050565b620006c881620002d0565b82525050565b6000602082019050620006e56000830184620006bd565b92915050565b6119f980620006fb6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a0712d681161007c578063a0712d681461031a578063a9059cbb14610336578063db006a7514610366578063dd62ed3e14610382578063deab8aea146103b2578063f2fde38b146103d057610137565b806370a0823114610288578063715018a6146102b8578063756b2bdb146102c25780638da5cb5b146102de57806395d89b41146102fc57610137565b806318160ddd116100ff57806318160ddd146101e25780631d0adc071461020057806323b872dd1461021c5780632c2ee9c31461024c578063313ce5671461026a57610137565b80630541d0b01461013c57806306fdde031461015a578063074bc10114610178578063095ea7b3146101965780630d22a0b9146101c6575b600080fd5b6101446103ec565b6040516101519190611334565b60405180910390f35b6101626103f2565b60405161016f91906113df565b60405180910390f35b610180610484565b60405161018d9190611480565b60405180910390f35b6101b060048036038101906101ab919061150a565b6104aa565b6040516101bd9190611565565b60405180910390f35b6101e060048036038101906101db9190611580565b6104cd565b005b6101ea610530565b6040516101f79190611334565b60405180910390f35b61021a600480360381019061021591906115ad565b61053a565b005b610236600480360381019061023191906115da565b610586565b6040516102439190611565565b60405180910390f35b6102546105b5565b6040516102619190611334565b60405180910390f35b6102726105bb565b60405161027f9190611649565b60405180910390f35b6102a2600480360381019061029d91906115ad565b6105c4565b6040516102af9190611334565b60405180910390f35b6102c061060c565b005b6102dc60048036038101906102d79190611580565b610620565b005b6102e6610683565b6040516102f39190611673565b60405180910390f35b6103046106ad565b60405161031191906113df565b60405180910390f35b610334600480360381019061032f9190611580565b61073f565b005b610350600480360381019061034b919061150a565b6108ca565b60405161035d9190611565565b60405180910390f35b610380600480360381019061037b9190611580565b6108ed565b005b61039c6004803603810190610397919061168e565b6109d7565b6040516103a99190611334565b60405180910390f35b6103ba610a5e565b6040516103c79190611673565b60405180910390f35b6103ea60048036038101906103e591906115ad565b610a84565b005b60085481565b606060038054610401906116fd565b80601f016020809104026020016040519081016040528092919081815260200182805461042d906116fd565b801561047a5780601f1061044f5761010080835404028352916020019161047a565b820191906000526020600020905b81548152906001019060200180831161045d57829003601f168201915b5050505050905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806104b5610b0a565b90506104c2818585610b12565b600191505092915050565b6104d5610b24565b600081101580156104e75750600a8111155b610526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051d9061177a565b60405180910390fd5b8060088190555050565b6000600254905090565b610542610b24565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610591610b0a565b905061059e858285610bab565b6105a9858585610c3f565b60019150509392505050565b60095481565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610614610b24565b61061e6000610d33565b565b610628610b24565b6000811015801561063a5750600a8111155b610679576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106709061177a565b60405180910390fd5b8060098190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546106bc906116fd565b80601f01602080910402602001604051908101604052809291908181526020018280546106e8906116fd565b80156107355780601f1061070a57610100808354040283529160200191610735565b820191906000526020600020905b81548152906001019060200180831161071857829003601f168201915b5050505050905090565b600061074d82600854610df9565b90506000818361075d91906117c9565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b81526004016107be939291906117fd565b6020604051808303816000875af11580156107dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108019190611860565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68846040518263ffffffff1660e01b815260040161085d9190611334565b600060405180830381600087803b15801561087757600080fd5b505af115801561088b573d6000803e3d6000fd5b505050506108993382610e1b565b6108c5600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683610e1b565b505050565b6000806108d5610b0a565b90506108e2818585610c3f565b600191505092915050565b60006108fb82600954610df9565b90506000818361090b91906117c9565b90506109173384610e9d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b815260040161097492919061188d565b600060405180830381600087803b15801561098e57600080fd5b505af11580156109a2573d6000803e3d6000fd5b505050506109d2600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683610e1b565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a8c610b24565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610afe5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610af59190611673565b60405180910390fd5b610b0781610d33565b50565b600033905090565b610b1f8383836001610f1f565b505050565b610b2c610b0a565b73ffffffffffffffffffffffffffffffffffffffff16610b4a610683565b73ffffffffffffffffffffffffffffffffffffffff1614610ba957610b6d610b0a565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610ba09190611673565b60405180910390fd5b565b6000610bb784846109d7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c395781811015610c29578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c20939291906118b6565b60405180910390fd5b610c3884848484036000610f1f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cb15760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610ca89190611673565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d235760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d1a9190611673565b60405180910390fd5b610d2e8383836110f6565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060648284610e0991906118ed565b610e13919061195e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e8d5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610e849190611673565b60405180910390fd5b610e99600083836110f6565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0f5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610f069190611673565b60405180910390fd5b610f1b826000836110f6565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f915760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610f889190611673565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110035760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ffa9190611673565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156110f0578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110e79190611334565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361114857806002600082825461113c919061198f565b9250508190555061121b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111d4578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016111cb939291906118b6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361126457806002600082825403925050819055506112b1565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161130e9190611334565b60405180910390a3505050565b6000819050919050565b61132e8161131b565b82525050565b60006020820190506113496000830184611325565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561138957808201518184015260208101905061136e565b60008484015250505050565b6000601f19601f8301169050919050565b60006113b18261134f565b6113bb818561135a565b93506113cb81856020860161136b565b6113d481611395565b840191505092915050565b600060208201905081810360008301526113f981846113a6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061144661144161143c84611401565b611421565b611401565b9050919050565b60006114588261142b565b9050919050565b600061146a8261144d565b9050919050565b61147a8161145f565b82525050565b60006020820190506114956000830184611471565b92915050565b600080fd5b60006114ab82611401565b9050919050565b6114bb816114a0565b81146114c657600080fd5b50565b6000813590506114d8816114b2565b92915050565b6114e78161131b565b81146114f257600080fd5b50565b600081359050611504816114de565b92915050565b600080604083850312156115215761152061149b565b5b600061152f858286016114c9565b9250506020611540858286016114f5565b9150509250929050565b60008115159050919050565b61155f8161154a565b82525050565b600060208201905061157a6000830184611556565b92915050565b6000602082840312156115965761159561149b565b5b60006115a4848285016114f5565b91505092915050565b6000602082840312156115c3576115c261149b565b5b60006115d1848285016114c9565b91505092915050565b6000806000606084860312156115f3576115f261149b565b5b6000611601868287016114c9565b9350506020611612868287016114c9565b9250506040611623868287016114f5565b9150509250925092565b600060ff82169050919050565b6116438161162d565b82525050565b600060208201905061165e600083018461163a565b92915050565b61166d816114a0565b82525050565b60006020820190506116886000830184611664565b92915050565b600080604083850312156116a5576116a461149b565b5b60006116b3858286016114c9565b92505060206116c4858286016114c9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061171557607f821691505b602082108103611728576117276116ce565b5b50919050565b7f466565206d757374206265206265747765656e20302520616e64203130250000600082015250565b6000611764601e8361135a565b915061176f8261172e565b602082019050919050565b6000602082019050818103600083015261179381611757565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117d48261131b565b91506117df8361131b565b92508282039050818111156117f7576117f661179a565b5b92915050565b60006060820190506118126000830186611664565b61181f6020830185611664565b61182c6040830184611325565b949350505050565b61183d8161154a565b811461184857600080fd5b50565b60008151905061185a81611834565b92915050565b6000602082840312156118765761187561149b565b5b60006118848482850161184b565b91505092915050565b60006040820190506118a26000830185611664565b6118af6020830184611325565b9392505050565b60006060820190506118cb6000830186611664565b6118d86020830185611325565b6118e56040830184611325565b949350505050565b60006118f88261131b565b91506119038361131b565b92508282026119118161131b565b915082820484148315176119285761192761179a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006119698261131b565b91506119748361131b565b9250826119845761198361192f565b5b828204905092915050565b600061199a8261131b565b91506119a58361131b565b92508282019050808211156119bd576119bc61179a565b5b9291505056fea2646970667358221220e1def82cdc41380338caf0ba3a482dcfeddbf75d15bbdfefcfc348e0fb9f21f664736f6c63430008160033000000000000000000000000bd6323a83b613f668687014e8a5852079494fb68000000000000000000000000ee4daac843bc54a23c80f5176882e7eeacde0371

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a0712d681161007c578063a0712d681461031a578063a9059cbb14610336578063db006a7514610366578063dd62ed3e14610382578063deab8aea146103b2578063f2fde38b146103d057610137565b806370a0823114610288578063715018a6146102b8578063756b2bdb146102c25780638da5cb5b146102de57806395d89b41146102fc57610137565b806318160ddd116100ff57806318160ddd146101e25780631d0adc071461020057806323b872dd1461021c5780632c2ee9c31461024c578063313ce5671461026a57610137565b80630541d0b01461013c57806306fdde031461015a578063074bc10114610178578063095ea7b3146101965780630d22a0b9146101c6575b600080fd5b6101446103ec565b6040516101519190611334565b60405180910390f35b6101626103f2565b60405161016f91906113df565b60405180910390f35b610180610484565b60405161018d9190611480565b60405180910390f35b6101b060048036038101906101ab919061150a565b6104aa565b6040516101bd9190611565565b60405180910390f35b6101e060048036038101906101db9190611580565b6104cd565b005b6101ea610530565b6040516101f79190611334565b60405180910390f35b61021a600480360381019061021591906115ad565b61053a565b005b610236600480360381019061023191906115da565b610586565b6040516102439190611565565b60405180910390f35b6102546105b5565b6040516102619190611334565b60405180910390f35b6102726105bb565b60405161027f9190611649565b60405180910390f35b6102a2600480360381019061029d91906115ad565b6105c4565b6040516102af9190611334565b60405180910390f35b6102c061060c565b005b6102dc60048036038101906102d79190611580565b610620565b005b6102e6610683565b6040516102f39190611673565b60405180910390f35b6103046106ad565b60405161031191906113df565b60405180910390f35b610334600480360381019061032f9190611580565b61073f565b005b610350600480360381019061034b919061150a565b6108ca565b60405161035d9190611565565b60405180910390f35b610380600480360381019061037b9190611580565b6108ed565b005b61039c6004803603810190610397919061168e565b6109d7565b6040516103a99190611334565b60405180910390f35b6103ba610a5e565b6040516103c79190611673565b60405180910390f35b6103ea60048036038101906103e591906115ad565b610a84565b005b60085481565b606060038054610401906116fd565b80601f016020809104026020016040519081016040528092919081815260200182805461042d906116fd565b801561047a5780601f1061044f5761010080835404028352916020019161047a565b820191906000526020600020905b81548152906001019060200180831161045d57829003601f168201915b5050505050905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806104b5610b0a565b90506104c2818585610b12565b600191505092915050565b6104d5610b24565b600081101580156104e75750600a8111155b610526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051d9061177a565b60405180910390fd5b8060088190555050565b6000600254905090565b610542610b24565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610591610b0a565b905061059e858285610bab565b6105a9858585610c3f565b60019150509392505050565b60095481565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610614610b24565b61061e6000610d33565b565b610628610b24565b6000811015801561063a5750600a8111155b610679576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106709061177a565b60405180910390fd5b8060098190555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546106bc906116fd565b80601f01602080910402602001604051908101604052809291908181526020018280546106e8906116fd565b80156107355780601f1061070a57610100808354040283529160200191610735565b820191906000526020600020905b81548152906001019060200180831161071857829003601f168201915b5050505050905090565b600061074d82600854610df9565b90506000818361075d91906117c9565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b81526004016107be939291906117fd565b6020604051808303816000875af11580156107dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108019190611860565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68846040518263ffffffff1660e01b815260040161085d9190611334565b600060405180830381600087803b15801561087757600080fd5b505af115801561088b573d6000803e3d6000fd5b505050506108993382610e1b565b6108c5600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683610e1b565b505050565b6000806108d5610b0a565b90506108e2818585610c3f565b600191505092915050565b60006108fb82600954610df9565b90506000818361090b91906117c9565b90506109173384610e9d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b815260040161097492919061188d565b600060405180830381600087803b15801561098e57600080fd5b505af11580156109a2573d6000803e3d6000fd5b505050506109d2600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683610e1b565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a8c610b24565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610afe5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610af59190611673565b60405180910390fd5b610b0781610d33565b50565b600033905090565b610b1f8383836001610f1f565b505050565b610b2c610b0a565b73ffffffffffffffffffffffffffffffffffffffff16610b4a610683565b73ffffffffffffffffffffffffffffffffffffffff1614610ba957610b6d610b0a565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610ba09190611673565b60405180910390fd5b565b6000610bb784846109d7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c395781811015610c29578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c20939291906118b6565b60405180910390fd5b610c3884848484036000610f1f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cb15760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610ca89190611673565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d235760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d1a9190611673565b60405180910390fd5b610d2e8383836110f6565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060648284610e0991906118ed565b610e13919061195e565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e8d5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610e849190611673565b60405180910390fd5b610e99600083836110f6565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0f5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610f069190611673565b60405180910390fd5b610f1b826000836110f6565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f915760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610f889190611673565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110035760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ffa9190611673565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156110f0578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110e79190611334565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361114857806002600082825461113c919061198f565b9250508190555061121b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111d4578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016111cb939291906118b6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361126457806002600082825403925050819055506112b1565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161130e9190611334565b60405180910390a3505050565b6000819050919050565b61132e8161131b565b82525050565b60006020820190506113496000830184611325565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561138957808201518184015260208101905061136e565b60008484015250505050565b6000601f19601f8301169050919050565b60006113b18261134f565b6113bb818561135a565b93506113cb81856020860161136b565b6113d481611395565b840191505092915050565b600060208201905081810360008301526113f981846113a6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061144661144161143c84611401565b611421565b611401565b9050919050565b60006114588261142b565b9050919050565b600061146a8261144d565b9050919050565b61147a8161145f565b82525050565b60006020820190506114956000830184611471565b92915050565b600080fd5b60006114ab82611401565b9050919050565b6114bb816114a0565b81146114c657600080fd5b50565b6000813590506114d8816114b2565b92915050565b6114e78161131b565b81146114f257600080fd5b50565b600081359050611504816114de565b92915050565b600080604083850312156115215761152061149b565b5b600061152f858286016114c9565b9250506020611540858286016114f5565b9150509250929050565b60008115159050919050565b61155f8161154a565b82525050565b600060208201905061157a6000830184611556565b92915050565b6000602082840312156115965761159561149b565b5b60006115a4848285016114f5565b91505092915050565b6000602082840312156115c3576115c261149b565b5b60006115d1848285016114c9565b91505092915050565b6000806000606084860312156115f3576115f261149b565b5b6000611601868287016114c9565b9350506020611612868287016114c9565b9250506040611623868287016114f5565b9150509250925092565b600060ff82169050919050565b6116438161162d565b82525050565b600060208201905061165e600083018461163a565b92915050565b61166d816114a0565b82525050565b60006020820190506116886000830184611664565b92915050565b600080604083850312156116a5576116a461149b565b5b60006116b3858286016114c9565b92505060206116c4858286016114c9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061171557607f821691505b602082108103611728576117276116ce565b5b50919050565b7f466565206d757374206265206265747765656e20302520616e64203130250000600082015250565b6000611764601e8361135a565b915061176f8261172e565b602082019050919050565b6000602082019050818103600083015261179381611757565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117d48261131b565b91506117df8361131b565b92508282039050818111156117f7576117f661179a565b5b92915050565b60006060820190506118126000830186611664565b61181f6020830185611664565b61182c6040830184611325565b949350505050565b61183d8161154a565b811461184857600080fd5b50565b60008151905061185a81611834565b92915050565b6000602082840312156118765761187561149b565b5b60006118848482850161184b565b91505092915050565b60006040820190506118a26000830185611664565b6118af6020830184611325565b9392505050565b60006060820190506118cb6000830186611664565b6118d86020830185611325565b6118e56040830184611325565b949350505050565b60006118f88261131b565b91506119038361131b565b92508282026119118161131b565b915082820484148315176119285761192761179a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006119698261131b565b91506119748361131b565b9250826119845761198361192f565b5b828204905092915050565b600061199a8261131b565b91506119a58361131b565b92508282019050808211156119bd576119bc61179a565b5b9291505056fea2646970667358221220e1def82cdc41380338caf0ba3a482dcfeddbf75d15bbdfefcfc348e0fb9f21f664736f6c63430008160033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000bd6323a83b613f668687014e8a5852079494fb68000000000000000000000000ee4daac843bc54a23c80f5176882e7eeacde0371

-----Decoded View---------------
Arg [0] : _btcTokenAddress (address): 0xbD6323A83b613F668687014E8A5852079494fB68
Arg [1] : _buybackWallet (address): 0xEE4daaC843Bc54a23C80f5176882e7EEacDe0371

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000bd6323a83b613f668687014e8a5852079494fb68
Arg [1] : 000000000000000000000000ee4daac843bc54a23c80f5176882e7eeacde0371


Deployed Bytecode Sourcemap

25889:1942:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26007:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16371:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25945:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18664:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27172:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17473:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27642:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19432:249;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26079:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17324:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17635:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9984:103;;;:::i;:::-;;27401:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9309:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16581:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26347:359;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17958:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26714:302;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18203:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25972:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10242:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26007:33;;;;:::o;16371:91::-;16416:13;16449:5;16442:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16371:91;:::o;25945:20::-;;;;;;;;;;;;;:::o;18664:190::-;18737:4;18754:13;18770:12;:10;:12::i;:::-;18754:28;;18793:31;18802:5;18809:7;18818:5;18793:8;:31::i;:::-;18842:4;18835:11;;;18664:190;;;;:::o;27172:221::-;9195:13;:11;:13::i;:::-;27281:1:::1;27262:15;:20;;:45;;;;;27305:2;27286:15;:21;;27262:45;27254:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;27370:15;27353:14;:32;;;;27172:221:::0;:::o;17473:99::-;17525:7;17552:12;;17545:19;;17473:99;:::o;27642:118::-;9195:13;:11;:13::i;:::-;27738:14:::1;27722:13;;:30;;;;;;;;;;;;;;;;;;27642:118:::0;:::o;19432:249::-;19519:4;19536:15;19554:12;:10;:12::i;:::-;19536:30;;19577:37;19593:4;19599:7;19608:5;19577:15;:37::i;:::-;19625:26;19635:4;19641:2;19645:5;19625:9;:26::i;:::-;19669:4;19662:11;;;19432:249;;;;;:::o;26079:35::-;;;;:::o;17324:84::-;17373:5;17398:2;17391:9;;17324:84;:::o;17635:118::-;17700:7;17727:9;:18;17737:7;17727:18;;;;;;;;;;;;;;;;17720:25;;17635:118;;;:::o;9984:103::-;9195:13;:11;:13::i;:::-;10049:30:::1;10076:1;10049:18;:30::i;:::-;9984:103::o:0;27401:233::-;9195:13;:11;:13::i;:::-;27516:1:::1;27495:17;:22;;:49;;;;;27542:2;27521:17;:23;;27495:49;27487:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;27609:17;27590:16;:36;;;;27401:233:::0;:::o;9309:87::-;9355:7;9382:6;;;;;;;;;;;9375:13;;9309:87;:::o;16581:95::-;16628:13;16661:7;16654:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16581:95;:::o;26347:359::-;26400:11;26414:39;26427:9;26438:14;;26414:12;:39::i;:::-;26400:53;;26464:22;26501:3;26489:9;:15;;;;:::i;:::-;26464:40;;26515:8;;;;;;;;;;;:21;;;26545:10;26566:4;26573:9;26515:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26594:8;;;;;;;;;;;:13;;;26608:9;26594:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26629:33;26635:10;26647:14;26629:5;:33::i;:::-;26673:25;26679:13;;;;;;;;;;;26694:3;26673:5;:25::i;:::-;26389:317;;26347:359;:::o;17958:182::-;18027:4;18044:13;18060:12;:10;:12::i;:::-;18044:28;;18083:27;18093:5;18100:2;18104:5;18083:9;:27::i;:::-;18128:4;18121:11;;;17958:182;;;;:::o;26714:302::-;26770:11;26784:42;26797:10;26809:16;;26784:12;:42::i;:::-;26770:56;;26837:22;26875:3;26862:10;:16;;;;:::i;:::-;26837:41;;26891:29;26897:10;26909;26891:5;:29::i;:::-;26931:8;;;;;;;;;;;:13;;;26945:10;26957:14;26931:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26983:25;26989:13;;;;;;;;;;;27004:3;26983:5;:25::i;:::-;26759:257;;26714:302;:::o;18203:142::-;18283:7;18310:11;:18;18322:5;18310:18;;;;;;;;;;;;;;;:27;18329:7;18310:27;;;;;;;;;;;;;;;;18303:34;;18203:142;;;;:::o;25972:28::-;;;;;;;;;;;;;:::o;10242:220::-;9195:13;:11;:13::i;:::-;10347:1:::1;10327:22;;:8;:22;;::::0;10323:93:::1;;10401:1;10373:31;;;;;;;;;;;:::i;:::-;;;;;;;;10323:93;10426:28;10445:8;10426:18;:28::i;:::-;10242:220:::0;:::o;7425:98::-;7478:7;7505:10;7498:17;;7425:98;:::o;23491:130::-;23576:37;23585:5;23592:7;23601:5;23608:4;23576:8;:37::i;:::-;23491:130;;;:::o;9474:166::-;9545:12;:10;:12::i;:::-;9534:23;;:7;:5;:7::i;:::-;:23;;;9530:103;;9608:12;:10;:12::i;:::-;9581:40;;;;;;;;;;;:::i;:::-;;;;;;;;9530:103;9474:166::o;25207:487::-;25307:24;25334:25;25344:5;25351:7;25334:9;:25::i;:::-;25307:52;;25394:17;25374:16;:37;25370:317;;25451:5;25432:16;:24;25428:132;;;25511:7;25520:16;25538:5;25484:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;25428:132;25603:57;25612:5;25619:7;25647:5;25628:16;:24;25654:5;25603:8;:57::i;:::-;25370:317;25296:398;25207:487;;;:::o;20066:308::-;20166:1;20150:18;;:4;:18;;;20146:88;;20219:1;20192:30;;;;;;;;;;;:::i;:::-;;;;;;;;20146:88;20262:1;20248:16;;:2;:16;;;20244:88;;20317:1;20288:32;;;;;;;;;;;:::i;:::-;;;;;;;;20244:88;20342:24;20350:4;20356:2;20360:5;20342:7;:24::i;:::-;20066:308;;;:::o;10622:191::-;10696:16;10715:6;;;;;;;;;;;10696:25;;10741:8;10732:6;;:17;;;;;;;;;;;;;;;;;;10796:8;10765:40;;10786:8;10765:40;;;;;;;;;;;;10685:128;10622:191;:::o;27024:140::-;27104:7;27153:3;27140:10;27131:6;:19;;;;:::i;:::-;:25;;;;:::i;:::-;27124:32;;27024:140;;;;:::o;22186:213::-;22276:1;22257:21;;:7;:21;;;22253:93;;22331:1;22302:32;;;;;;;;;;;:::i;:::-;;;;;;;;22253:93;22356:35;22372:1;22376:7;22385:5;22356:7;:35::i;:::-;22186:213;;:::o;22727:211::-;22817:1;22798:21;;:7;:21;;;22794:91;;22870:1;22843:30;;;;;;;;;;;:::i;:::-;;;;;;;;22794:91;22895:35;22903:7;22920:1;22924:5;22895:7;:35::i;:::-;22727:211;;:::o;24472:443::-;24602:1;24585:19;;:5;:19;;;24581:91;;24657:1;24628:32;;;;;;;;;;;:::i;:::-;;;;;;;;24581:91;24705:1;24686:21;;:7;:21;;;24682:92;;24759:1;24731:31;;;;;;;;;;;:::i;:::-;;;;;;;;24682:92;24814:5;24784:11;:18;24796:5;24784:18;;;;;;;;;;;;;;;:27;24803:7;24784:27;;;;;;;;;;;;;;;:35;;;;24834:9;24830:78;;;24881:7;24865:31;;24874:5;24865:31;;;24890:5;24865:31;;;;;;:::i;:::-;;;;;;;;24830:78;24472:443;;;;:::o;20698:1135::-;20804:1;20788:18;;:4;:18;;;20784:552;;20942:5;20926:12;;:21;;;;;;;:::i;:::-;;;;;;;;20784:552;;;20980:19;21002:9;:15;21012:4;21002:15;;;;;;;;;;;;;;;;20980:37;;21050:5;21036:11;:19;21032:117;;;21108:4;21114:11;21127:5;21083:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;21032:117;21304:5;21290:11;:19;21272:9;:15;21282:4;21272:15;;;;;;;;;;;;;;;:37;;;;20965:371;20784:552;21366:1;21352:16;;:2;:16;;;21348:435;;21534:5;21518:12;;:21;;;;;;;;;;;21348:435;;;21751:5;21734:9;:13;21744:2;21734:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;21348:435;21815:2;21800:25;;21809:4;21800:25;;;21819:5;21800:25;;;;;;:::i;:::-;;;;;;;;20698:1135;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1784:126::-;1821:7;1861:42;1854:5;1850:54;1839:65;;1784:126;;;:::o;1916:60::-;1944:3;1965:5;1958:12;;1916:60;;;:::o;1982:142::-;2032:9;2065:53;2083:34;2092:24;2110:5;2092:24;:::i;:::-;2083:34;:::i;:::-;2065:53;:::i;:::-;2052:66;;1982:142;;;:::o;2130:126::-;2180:9;2213:37;2244:5;2213:37;:::i;:::-;2200:50;;2130:126;;;:::o;2262:138::-;2324:9;2357:37;2388:5;2357:37;:::i;:::-;2344:50;;2262:138;;;:::o;2406:155::-;2505:49;2548:5;2505:49;:::i;:::-;2500:3;2493:62;2406:155;;:::o;2567:246::-;2672:4;2710:2;2699:9;2695:18;2687:26;;2723:83;2803:1;2792:9;2788:17;2779:6;2723:83;:::i;:::-;2567:246;;;;:::o;2900:117::-;3009:1;3006;2999:12;3146:96;3183:7;3212:24;3230:5;3212:24;:::i;:::-;3201:35;;3146:96;;;:::o;3248:122::-;3321:24;3339:5;3321:24;:::i;:::-;3314:5;3311:35;3301:63;;3360:1;3357;3350:12;3301:63;3248:122;:::o;3376:139::-;3422:5;3460:6;3447:20;3438:29;;3476:33;3503:5;3476:33;:::i;:::-;3376:139;;;;:::o;3521:122::-;3594:24;3612:5;3594:24;:::i;:::-;3587:5;3584:35;3574:63;;3633:1;3630;3623:12;3574:63;3521:122;:::o;3649:139::-;3695:5;3733:6;3720:20;3711:29;;3749:33;3776:5;3749:33;:::i;:::-;3649:139;;;;:::o;3794:474::-;3862:6;3870;3919:2;3907:9;3898:7;3894:23;3890:32;3887:119;;;3925:79;;:::i;:::-;3887:119;4045:1;4070:53;4115:7;4106:6;4095:9;4091:22;4070:53;:::i;:::-;4060:63;;4016:117;4172:2;4198:53;4243:7;4234:6;4223:9;4219:22;4198:53;:::i;:::-;4188:63;;4143:118;3794:474;;;;;:::o;4274:90::-;4308:7;4351:5;4344:13;4337:21;4326:32;;4274:90;;;:::o;4370:109::-;4451:21;4466:5;4451:21;:::i;:::-;4446:3;4439:34;4370:109;;:::o;4485:210::-;4572:4;4610:2;4599:9;4595:18;4587:26;;4623:65;4685:1;4674:9;4670:17;4661:6;4623:65;:::i;:::-;4485:210;;;;:::o;4701:329::-;4760:6;4809:2;4797:9;4788:7;4784:23;4780:32;4777:119;;;4815:79;;:::i;:::-;4777:119;4935:1;4960:53;5005:7;4996:6;4985:9;4981:22;4960:53;:::i;:::-;4950:63;;4906:117;4701:329;;;;:::o;5036:::-;5095:6;5144:2;5132:9;5123:7;5119:23;5115:32;5112:119;;;5150:79;;:::i;:::-;5112:119;5270:1;5295:53;5340:7;5331:6;5320:9;5316:22;5295:53;:::i;:::-;5285:63;;5241:117;5036:329;;;;:::o;5371:619::-;5448:6;5456;5464;5513:2;5501:9;5492:7;5488:23;5484:32;5481:119;;;5519:79;;:::i;:::-;5481:119;5639:1;5664:53;5709:7;5700:6;5689:9;5685:22;5664:53;:::i;:::-;5654:63;;5610:117;5766:2;5792:53;5837:7;5828:6;5817:9;5813:22;5792:53;:::i;:::-;5782:63;;5737:118;5894:2;5920:53;5965:7;5956:6;5945:9;5941:22;5920:53;:::i;:::-;5910:63;;5865:118;5371:619;;;;;:::o;5996:86::-;6031:7;6071:4;6064:5;6060:16;6049:27;;5996:86;;;:::o;6088:112::-;6171:22;6187:5;6171:22;:::i;:::-;6166:3;6159:35;6088:112;;:::o;6206:214::-;6295:4;6333:2;6322:9;6318:18;6310:26;;6346:67;6410:1;6399:9;6395:17;6386:6;6346:67;:::i;:::-;6206:214;;;;:::o;6426:118::-;6513:24;6531:5;6513:24;:::i;:::-;6508:3;6501:37;6426:118;;:::o;6550:222::-;6643:4;6681:2;6670:9;6666:18;6658:26;;6694:71;6762:1;6751:9;6747:17;6738:6;6694:71;:::i;:::-;6550:222;;;;:::o;6778:474::-;6846:6;6854;6903:2;6891:9;6882:7;6878:23;6874:32;6871:119;;;6909:79;;:::i;:::-;6871:119;7029:1;7054:53;7099:7;7090:6;7079:9;7075:22;7054:53;:::i;:::-;7044:63;;7000:117;7156:2;7182:53;7227:7;7218:6;7207:9;7203:22;7182:53;:::i;:::-;7172:63;;7127:118;6778:474;;;;;:::o;7258:180::-;7306:77;7303:1;7296:88;7403:4;7400:1;7393:15;7427:4;7424:1;7417:15;7444:320;7488:6;7525:1;7519:4;7515:12;7505:22;;7572:1;7566:4;7562:12;7593:18;7583:81;;7649:4;7641:6;7637:17;7627:27;;7583:81;7711:2;7703:6;7700:14;7680:18;7677:38;7674:84;;7730:18;;:::i;:::-;7674:84;7495:269;7444:320;;;:::o;7770:180::-;7910:32;7906:1;7898:6;7894:14;7887:56;7770:180;:::o;7956:366::-;8098:3;8119:67;8183:2;8178:3;8119:67;:::i;:::-;8112:74;;8195:93;8284:3;8195:93;:::i;:::-;8313:2;8308:3;8304:12;8297:19;;7956:366;;;:::o;8328:419::-;8494:4;8532:2;8521:9;8517:18;8509:26;;8581:9;8575:4;8571:20;8567:1;8556:9;8552:17;8545:47;8609:131;8735:4;8609:131;:::i;:::-;8601:139;;8328:419;;;:::o;8753:180::-;8801:77;8798:1;8791:88;8898:4;8895:1;8888:15;8922:4;8919:1;8912:15;8939:194;8979:4;8999:20;9017:1;8999:20;:::i;:::-;8994:25;;9033:20;9051:1;9033:20;:::i;:::-;9028:25;;9077:1;9074;9070:9;9062:17;;9101:1;9095:4;9092:11;9089:37;;;9106:18;;:::i;:::-;9089:37;8939:194;;;;:::o;9139:442::-;9288:4;9326:2;9315:9;9311:18;9303:26;;9339:71;9407:1;9396:9;9392:17;9383:6;9339:71;:::i;:::-;9420:72;9488:2;9477:9;9473:18;9464:6;9420:72;:::i;:::-;9502;9570:2;9559:9;9555:18;9546:6;9502:72;:::i;:::-;9139:442;;;;;;:::o;9587:116::-;9657:21;9672:5;9657:21;:::i;:::-;9650:5;9647:32;9637:60;;9693:1;9690;9683:12;9637:60;9587:116;:::o;9709:137::-;9763:5;9794:6;9788:13;9779:22;;9810:30;9834:5;9810:30;:::i;:::-;9709:137;;;;:::o;9852:345::-;9919:6;9968:2;9956:9;9947:7;9943:23;9939:32;9936:119;;;9974:79;;:::i;:::-;9936:119;10094:1;10119:61;10172:7;10163:6;10152:9;10148:22;10119:61;:::i;:::-;10109:71;;10065:125;9852:345;;;;:::o;10203:332::-;10324:4;10362:2;10351:9;10347:18;10339:26;;10375:71;10443:1;10432:9;10428:17;10419:6;10375:71;:::i;:::-;10456:72;10524:2;10513:9;10509:18;10500:6;10456:72;:::i;:::-;10203:332;;;;;:::o;10541:442::-;10690:4;10728:2;10717:9;10713:18;10705:26;;10741:71;10809:1;10798:9;10794:17;10785:6;10741:71;:::i;:::-;10822:72;10890:2;10879:9;10875:18;10866:6;10822:72;:::i;:::-;10904;10972:2;10961:9;10957:18;10948:6;10904:72;:::i;:::-;10541:442;;;;;;:::o;10989:410::-;11029:7;11052:20;11070:1;11052:20;:::i;:::-;11047:25;;11086:20;11104:1;11086:20;:::i;:::-;11081:25;;11141:1;11138;11134:9;11163:30;11181:11;11163:30;:::i;:::-;11152:41;;11342:1;11333:7;11329:15;11326:1;11323:22;11303:1;11296:9;11276:83;11253:139;;11372:18;;:::i;:::-;11253:139;11037:362;10989:410;;;;:::o;11405:180::-;11453:77;11450:1;11443:88;11550:4;11547:1;11540:15;11574:4;11571:1;11564:15;11591:185;11631:1;11648:20;11666:1;11648:20;:::i;:::-;11643:25;;11682:20;11700:1;11682:20;:::i;:::-;11677:25;;11721:1;11711:35;;11726:18;;:::i;:::-;11711:35;11768:1;11765;11761:9;11756:14;;11591:185;;;;:::o;11782:191::-;11822:3;11841:20;11859:1;11841:20;:::i;:::-;11836:25;;11875:20;11893:1;11875:20;:::i;:::-;11870:25;;11918:1;11915;11911:9;11904:16;;11939:3;11936:1;11933:10;11930:36;;;11946:18;;:::i;:::-;11930:36;11782:191;;;;:::o

Swarm Source

ipfs://e1def82cdc41380338caf0ba3a482dcfeddbf75d15bbdfefcfc348e0fb9f21f6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.