More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 300 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Token | 20751667 | 114 days ago | IN | 0.0002 ETH | 0.00029276 | ||||
Swap Token | 16496700 | 711 days ago | IN | 0.0002 ETH | 0.0016325 | ||||
Swap Token | 16495706 | 711 days ago | IN | 0.0002 ETH | 0.00156586 | ||||
Swap Token | 16489204 | 712 days ago | IN | 0.0002 ETH | 0.00163084 | ||||
Swap Token | 16476674 | 714 days ago | IN | 0.0002 ETH | 0.0015338 | ||||
Swap Token | 16462942 | 716 days ago | IN | 0.0002 ETH | 0.00150856 | ||||
Swap Token | 16455325 | 717 days ago | IN | 0.0002 ETH | 0.00158555 | ||||
Swap Token | 16455129 | 717 days ago | IN | 0.0002 ETH | 0.00157051 | ||||
Swap Token | 16454763 | 717 days ago | IN | 0.0002 ETH | 0.00165858 | ||||
Swap Token | 16448782 | 718 days ago | IN | 0.0002 ETH | 0.00481387 | ||||
Swap Token | 16411427 | 723 days ago | IN | 0.0002 ETH | 0.00146161 | ||||
Swap Token | 16390741 | 726 days ago | IN | 0.0002 ETH | 0.00200406 | ||||
Swap Token | 16360564 | 730 days ago | IN | 0.0002 ETH | 0.00154144 | ||||
Swap Token | 16359006 | 730 days ago | IN | 0.0002 ETH | 0.00148739 | ||||
Swap Token | 16344588 | 732 days ago | IN | 0.0002 ETH | 0.0019168 | ||||
Swap Token | 16337793 | 733 days ago | IN | 0.0002 ETH | 0.00186377 | ||||
Swap Token | 16332661 | 734 days ago | IN | 0.0002 ETH | 0.00167066 | ||||
Swap Token | 16324335 | 735 days ago | IN | 0.0002 ETH | 0.001712 | ||||
Swap Token | 16323145 | 735 days ago | IN | 0.0002 ETH | 0.00153577 | ||||
Swap Token | 16317772 | 736 days ago | IN | 0.0002 ETH | 0.00144455 | ||||
Swap Token | 16312383 | 737 days ago | IN | 0.0002 ETH | 0.00142067 | ||||
Swap Token | 16311595 | 737 days ago | IN | 0.0002 ETH | 0.00152374 | ||||
Swap Token | 16304548 | 738 days ago | IN | 0.0002 ETH | 0.00156467 | ||||
Set Swap Fee Per... | 16288605 | 740 days ago | IN | 0 ETH | 0.00056641 | ||||
Set Swap Fee Per... | 16288585 | 740 days ago | IN | 0 ETH | 0.00052691 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
20751667 | 114 days ago | 0.0002 ETH | ||||
16496700 | 711 days ago | 0.0002 ETH | ||||
16495706 | 711 days ago | 0.0002 ETH | ||||
16489204 | 712 days ago | 0.0002 ETH | ||||
16476674 | 714 days ago | 0.0002 ETH | ||||
16462942 | 716 days ago | 0.0002 ETH | ||||
16455325 | 717 days ago | 0.0002 ETH | ||||
16455129 | 717 days ago | 0.0002 ETH | ||||
16454763 | 717 days ago | 0.0002 ETH | ||||
16448782 | 718 days ago | 0.0002 ETH | ||||
16411427 | 723 days ago | 0.0002 ETH | ||||
16390741 | 726 days ago | 0.0002 ETH | ||||
16360564 | 730 days ago | 0.0002 ETH | ||||
16359006 | 730 days ago | 0.0002 ETH | ||||
16344588 | 732 days ago | 0.0002 ETH | ||||
16337793 | 733 days ago | 0.0002 ETH | ||||
16332661 | 734 days ago | 0.0002 ETH | ||||
16324335 | 735 days ago | 0.0002 ETH | ||||
16323145 | 735 days ago | 0.0002 ETH | ||||
16317772 | 736 days ago | 0.0002 ETH | ||||
16312383 | 737 days ago | 0.0002 ETH | ||||
16311595 | 737 days ago | 0.0002 ETH | ||||
16304548 | 738 days ago | 0.0002 ETH | ||||
16288576 | 740 days ago | 0.0002 ETH | ||||
16288539 | 740 days ago | 0.0002 ETH |
Loading...
Loading
Contract Name:
AstaSwapBridge
Compiler Version
v0.8.11+commit.d7f03943
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.11; import "./interfaces/IERC20Query.sol"; import "@openzeppelin/contracts/utils/Context.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; contract AstaSwapBridge is Context { using SafeMath for uint256; ERC20Burnable _token; mapping(string => bool) private registeredBEP20; mapping(bytes32 => bool) public filledOtherChainsTx; address payable public owner; address public superAdmin; address payable public feeReceiver; uint256 public swapFee; uint256 public burntPercentage; uint256 public amountDivisonPercentage; uint256 public feePercentageInAsta; uint256 private hunderedPercent = 100000000000000000000; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); event SuperAdminChanged( address indexed previousSuperAdmin, address indexed newSuperAdmin ); event FeeReceiverUpdated( address indexed prevFeeReceiver, address indexed newFeeReceiver ); event SwapPairRegisterFor( address indexed sponsor, address indexed eth20Addr, string name, string symbol, uint8 decimals, string pair ); event SwapStarted( address indexed eth20Addr, address indexed fromAddr, uint256 amount, uint256 feeAmount, uint256 swapAmount, uint256 feeInAsta, uint256 amountToBurn, string chain ); event SwapFilled( address indexed eth20Addr, bytes32 indexed inputTxHash, address indexed toAddress, uint256 swapAmount, uint256 feeInAsta, uint256 amountToBurn ); constructor( uint256 fee_Native, uint256 amount_Division, uint256 fee_PerAsta, address payable fee_Receiver, address super_Admin ) { swapFee = fee_Native; require( amount_Division <= hunderedPercent, "amountDivisonPercentage: SHould be less then 100" ); amountDivisonPercentage = amount_Division; require( fee_PerAsta <= hunderedPercent, "feePercentageInAsta: SHould be less then 100" ); feePercentageInAsta = fee_PerAsta; owner = payable(msg.sender); feeReceiver = fee_Receiver; superAdmin = super_Admin; burntPercentage = hunderedPercent.sub(fee_PerAsta); } /** * Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * Throws if called transferOwnership by any account other than the super admin. */ modifier onlySuperAdmin() { require( superAdmin == _msgSender(), "Super Admin: caller is not the super admin" ); _; } modifier notContract() { require(!isContract(msg.sender), "contract is not allowed to swap"); _; } modifier noProxy() { require(msg.sender == tx.origin, "no proxy is allowed"); _; } function isContract(address addr) internal view returns (bool) { uint256 size; assembly { size := extcodesize(addr) } return size > 0; } /** * Leaves the contract without owner. It will not be possible to call * `onlySuperAdmin` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlySuperAdmin { emit OwnershipTransferred(owner, address(0)); owner = payable(0); } /** * Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address payable newOwner) public onlySuperAdmin { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } /** * Change Super Admin of the contract to a new account (`newSuperAdmin`). * Can only be called by the current super admin. */ function changeSuperAdmin(address newSuperAdmin) public onlySuperAdmin { require( newSuperAdmin != address(0), "Super Admin: new super admin is the zero address" ); emit SuperAdminChanged(superAdmin, newSuperAdmin); superAdmin = newSuperAdmin; } /** * Transfers fee receiver to a new account (`newFeeReceiver`). * Can only be called by the current owner. */ function changeFeeReceiver(address payable newFeeReceiver) public onlySuperAdmin { require( newFeeReceiver != address(0), "Fee Receiver: new fee receiver address is zero " ); emit FeeReceiverUpdated(feeReceiver, newFeeReceiver); feeReceiver = newFeeReceiver; } /** * Returns set minimum swap fee from BEP20 to other chains */ function setSwapFee(uint256 fee) external onlyOwner { swapFee = fee; } /** * Set the percentage to divide for swap and (fee, burn) */ function setSwapAmountToDivASTA(uint256 _amountDiv) external onlyOwner { require( _amountDiv <= hunderedPercent, "amountDivisonPercentage: Greater than 100 %" ); amountDivisonPercentage = _amountDiv; } /** * Returns set minimum swap fee in ASTA from BEP20 to other chains */ function setSwapFeePercentageOfASTA(uint256 _feePerAsta) external onlyOwner { require( _feePerAsta <= hunderedPercent, "amountDivisonPercentage: Greater than 100 %" ); feePercentageInAsta = _feePerAsta; burntPercentage = hunderedPercent.sub(_feePerAsta); } /** * Register swap pair for chain */ function registerSwapPair(address eth20Addr, string calldata chain) external onlyOwner returns (bool) { require( !registeredBEP20[string(abi.encode(eth20Addr, chain))], "already registered" ); string memory name = IERC20Query(eth20Addr).name(); string memory symbol = IERC20Query(eth20Addr).symbol(); uint8 decimals = IERC20Query(eth20Addr).decimals(); require(bytes(name).length > 0, "empty name"); require(bytes(symbol).length > 0, "empty symbol"); registeredBEP20[string(abi.encode(eth20Addr, chain))] = true; emit SwapPairRegisterFor( msg.sender, eth20Addr, name, symbol, decimals, chain ); return true; } // function used to calculate the fee and burn amount function deductFeeAndBurntAmount(uint256 _amount) internal view returns ( uint256, uint256, uint256 ) { require(_amount > 0, "Amount: Amount must be greater then 0"); uint256 amountToSwap; uint256 feeInAsta; uint256 amountToBurn; amountToSwap = _amount.mul(amountDivisonPercentage); amountToSwap = amountToSwap.div(hunderedPercent); uint256 remainingAmount = _amount.sub(amountToSwap); feeInAsta = remainingAmount.mul(feePercentageInAsta); feeInAsta = feeInAsta.div(hunderedPercent); amountToBurn = remainingAmount.sub(feeInAsta); return (amountToSwap, feeInAsta, amountToBurn); } /** * Fill swap by BEP20 */ function fillSwap( bytes32 crossChainTxHash, address eth20Addr, address toAddress, uint256 amount, string calldata chain ) external onlyOwner returns (bool) { require(!filledOtherChainsTx[crossChainTxHash], "tx filled already"); require( registeredBEP20[string(abi.encode(eth20Addr, chain))], "not registered token" ); require(amount > 0, "Amount should be greater than 0"); require( amountDivisonPercentage <= hunderedPercent, "amountDivisonPercentage: Greater than 100 %" ); uint256 swapAmount = amount; uint256 feeInAsta = 0; uint256 amountToBurn = 0; _token = ERC20Burnable(eth20Addr); if (amountDivisonPercentage == hunderedPercent) { _token.transfer(toAddress, swapAmount); } else { (swapAmount, feeInAsta, amountToBurn) = deductFeeAndBurntAmount( amount ); _token.transfer(toAddress, swapAmount); _token.transfer(feeReceiver, feeInAsta); _token.burn(amountToBurn); } filledOtherChainsTx[crossChainTxHash] = true; emit SwapFilled( eth20Addr, crossChainTxHash, toAddress, swapAmount, feeInAsta, amountToBurn ); return true; } /** * Swap BEP20 on other chain */ function swapToken( address eth20Addr, uint256 amount, string calldata chain ) external payable notContract noProxy returns (bool) { require( registeredBEP20[string(abi.encode(eth20Addr, chain))], "not registered token" ); require(msg.value >= swapFee, "swap fee is not enough"); require(amount > 0, "Amount should be greater than 0"); require( amountDivisonPercentage <= hunderedPercent, "amountDivisonPercentage: Greater than 100 %" ); if (msg.value != 0) { owner.transfer(msg.value); } _token = ERC20Burnable(eth20Addr); uint256 swapAmount = amount; uint256 feeInAsta = 0; uint256 amountToBurn = 0; if (amountDivisonPercentage == hunderedPercent) { _token.transferFrom(msg.sender, address(this), swapAmount); } else { (swapAmount, feeInAsta, amountToBurn) = deductFeeAndBurntAmount( amount ); _token.transferFrom(msg.sender, address(this), swapAmount); _token.transferFrom(msg.sender, feeReceiver, feeInAsta); _token.burnFrom(msg.sender, amountToBurn); } emit SwapStarted( eth20Addr, msg.sender, amount, msg.value, swapAmount, feeInAsta, amountToBurn, chain ); return true; } /** * Calculate the values for swap, mint and burn */ function calculateDivisonAmount(uint256 amount) external view returns ( uint256, uint256, uint256 ) { require(amount > 0, "Amount should be greater than 0"); require( amountDivisonPercentage <= hunderedPercent, "amountDivisonPercentage: Greater than 100 %" ); ( uint256 swapAmount, uint256 feeInAsta, uint256 amountToBurn ) = deductFeeAndBurntAmount(amount); return (swapAmount, feeInAsta, amountToBurn); } /** * Check the token pair */ function getRegisteredPairs(address eth20Addr, string calldata chain) external view returns (bool) { return registeredBEP20[string(abi.encode(eth20Addr, chain))]; } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.11; interface IERC20Query { /** * Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * Returns the token decimals. */ function decimals() external view returns (uint8); /** * Returns the token symbol. */ function symbol() external view returns (string memory); /** * Returns the token name. */ function name() external view returns (string memory); /** * Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// 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 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ 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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; import "../ERC20.sol"; import "../../../utils/Context.sol"; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); unchecked { _approve(account, _msgSender(), currentAllowance - amount); } _burn(account, amount); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) 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 `amount` 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 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; import "./extensions/IERC20Metadata.sol"; import "../../utils/Context.sol"; /** * @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}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * 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. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * 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 override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override 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 value {ERC20} uses, unless this function is * 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 override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); 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}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * 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. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` 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. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "london", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"fee_Native","type":"uint256"},{"internalType":"uint256","name":"amount_Division","type":"uint256"},{"internalType":"uint256","name":"fee_PerAsta","type":"uint256"},{"internalType":"address payable","name":"fee_Receiver","type":"address"},{"internalType":"address","name":"super_Admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"prevFeeReceiver","type":"address"},{"indexed":true,"internalType":"address","name":"newFeeReceiver","type":"address"}],"name":"FeeReceiverUpdated","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":"previousSuperAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newSuperAdmin","type":"address"}],"name":"SuperAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"eth20Addr","type":"address"},{"indexed":true,"internalType":"bytes32","name":"inputTxHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"toAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeInAsta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToBurn","type":"uint256"}],"name":"SwapFilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sponsor","type":"address"},{"indexed":true,"internalType":"address","name":"eth20Addr","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"uint8","name":"decimals","type":"uint8"},{"indexed":false,"internalType":"string","name":"pair","type":"string"}],"name":"SwapPairRegisterFor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"eth20Addr","type":"address"},{"indexed":true,"internalType":"address","name":"fromAddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feeInAsta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToBurn","type":"uint256"},{"indexed":false,"internalType":"string","name":"chain","type":"string"}],"name":"SwapStarted","type":"event"},{"inputs":[],"name":"amountDivisonPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burntPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateDivisonAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeReceiver","type":"address"}],"name":"changeFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSuperAdmin","type":"address"}],"name":"changeSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feePercentageInAsta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"crossChainTxHash","type":"bytes32"},{"internalType":"address","name":"eth20Addr","type":"address"},{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"chain","type":"string"}],"name":"fillSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"filledOtherChainsTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"eth20Addr","type":"address"},{"internalType":"string","name":"chain","type":"string"}],"name":"getRegisteredPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"eth20Addr","type":"address"},{"internalType":"string","name":"chain","type":"string"}],"name":"registerSwapPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountDiv","type":"uint256"}],"name":"setSwapAmountToDivASTA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePerAsta","type":"uint256"}],"name":"setSwapFeePercentageOfASTA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"superAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"eth20Addr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"chain","type":"string"}],"name":"swapToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405268056bc75e2d63100000600a553480156200001e57600080fd5b5060405162001d4038038062001d408339810160408190526200004191620001bc565b6006859055600a54841115620000b75760405162461bcd60e51b815260206004820152603060248201527f616d6f756e7444697669736f6e50657263656e746167653a2053486f756c642060448201526f06265206c657373207468656e203130360841b60648201526084015b60405180910390fd5b6008849055600a54831115620001255760405162461bcd60e51b815260206004820152602c60248201527f66656550657263656e74616765496e417374613a2053486f756c64206265206c60448201526b0657373207468656e203130360a41b6064820152608401620000ae565b600983905560038054336001600160a01b0319918216179091556005805482166001600160a01b038581169190911790915560048054909216908316179055600a546200017f90846200018e602090811b6200140e17901c565b600755506200023e9350505050565b60006200019c828462000218565b9392505050565b6001600160a01b0381168114620001b957600080fd5b50565b600080600080600060a08688031215620001d557600080fd5b8551945060208601519350604086015192506060860151620001f781620001a3565b60808701519092506200020a81620001a3565b809150509295509295909350565b6000828210156200023957634e487b7160e01b600052601160045260246000fd5b500390565b611af2806200024e6000396000f3fe60806040526004361061011f5760003560e01c80638e91efb5116100a0578063d0a7f44511610064578063d0a7f44514610325578063eb7b553914610360578063ef0b4f5a14610380578063f2fde38b14610396578063f42986e1146103b657600080fd5b80638e91efb51461029c5780639722be8b146102bc578063a29ca78b146102dc578063a3ce83d1146102ef578063b3f006741461030557600080fd5b806341858c4b116100e757806341858c4b1461020357806354cf2aeb14610223578063715018a6146102475780637c08b9641461025c5780638da5cb5b1461027c57600080fd5b80630be1ea4b1461012457806329575f6a146101695780632a6528e5146101a157806334e19907146101c35780633f6a336f146101e3575b600080fd5b34801561013057600080fd5b5061015461013f366004611524565b60026020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561017557600080fd5b50600454610189906001600160a01b031681565b6040516001600160a01b039091168152602001610160565b3480156101ad57600080fd5b506101c16101bc366004611524565b6103cc565b005b3480156101cf57600080fd5b506101c16101de366004611524565b610439565b3480156101ef57600080fd5b506101546101fe36600461159e565b610468565b34801561020f57600080fd5b506101c161021e36600461161a565b61083c565b34801561022f57600080fd5b5061023960065481565b604051908152602001610160565b34801561025357600080fd5b506101c1610931565b34801561026857600080fd5b506101c161027736600461161a565b6109a5565b34801561028857600080fd5b50600354610189906001600160a01b031681565b3480156102a857600080fd5b506101c16102b7366004611524565b610a99565b3480156102c857600080fd5b506101546102d7366004611637565b610aea565b6101546102ea36600461168c565b610dff565b3480156102fb57600080fd5b5061023960085481565b34801561031157600080fd5b50600554610189906001600160a01b031681565b34801561033157600080fd5b50610345610340366004611524565b61126e565b60408051938452602084019290925290820152606001610160565b34801561036c57600080fd5b5061015461037b366004611637565b6112d4565b34801561038c57600080fd5b5061023960075481565b3480156103a257600080fd5b506101c16103b136600461161a565b611323565b3480156103c257600080fd5b5061023960095481565b6003546001600160a01b031633146103ff5760405162461bcd60e51b81526004016103f6906116e8565b60405180910390fd5b600a548111156104215760405162461bcd60e51b81526004016103f69061171d565b6009819055600a54610433908261140e565b60075550565b6003546001600160a01b031633146104635760405162461bcd60e51b81526004016103f6906116e8565b600655565b6003546000906001600160a01b031633146104955760405162461bcd60e51b81526004016103f6906116e8565b60008781526002602052604090205460ff16156104e85760405162461bcd60e51b815260206004820152601160248201527074782066696c6c656420616c726561647960781b60448201526064016103f6565b60018684846040516020016104ff93929190611791565b60408051601f1981840301815290829052610519916117ef565b9081526040519081900360200190205460ff1661056f5760405162461bcd60e51b81526020600482015260146024820152733737ba103932b3b4b9ba32b932b2103a37b5b2b760611b60448201526064016103f6565b6000841161058f5760405162461bcd60e51b81526004016103f69061180b565b600a5460085411156105b35760405162461bcd60e51b81526004016103f69061171d565b600080546001600160a01b0319166001600160a01b038816178155600a546008548692918291141561065c5760005460405163a9059cbb60e01b81526001600160a01b038a81166004830152602482018690529091169063a9059cbb906044016020604051808303816000875af1158015610632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106569190611842565b506107c0565b61066587611421565b60005460405163a9059cbb60e01b81526001600160a01b038d8116600483015260248201869052949750929550909350919091169063a9059cbb906044016020604051808303816000875af11580156106c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e69190611842565b5060005460055460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb906044016020604051808303816000875af115801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190611842565b50600054604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b1580156107a757600080fd5b505af11580156107bb573d6000803e3d6000fd5b505050505b60008a815260026020908152604091829020805460ff1916600117905581518581529081018490529081018290526001600160a01b03898116918c918c16907f6ca1e5041fcd0e6760eaf2fb58e50031fb9d1b567c71df7f216e8f1f6c9af6a59060600160405180910390a45060019998505050505050505050565b6004546001600160a01b031633146108665760405162461bcd60e51b81526004016103f690611864565b6001600160a01b0381166108d55760405162461bcd60e51b815260206004820152603060248201527f53757065722041646d696e3a206e65772073757065722061646d696e2069732060448201526f746865207a65726f206164647265737360801b60648201526084016103f6565b6004546040516001600160a01b038084169216907f6a7fb6694616d75391385b86c21a1cc2628072753f9c7da9731e7b1b083a55e490600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b0316331461095b5760405162461bcd60e51b81526004016103f690611864565b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b6004546001600160a01b031633146109cf5760405162461bcd60e51b81526004016103f690611864565b6001600160a01b038116610a3d5760405162461bcd60e51b815260206004820152602f60248201527f4665652052656365697665723a206e657720666565207265636569766572206160448201526e032323932b9b99034b9903d32b9379608d1b60648201526084016103f6565b6005546040516001600160a01b038084169216907fa92ff4390fe6943f0b30e8fe715dde86f85ab79b2b2c640a10fc094cc4036cc890600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b03163314610ac35760405162461bcd60e51b81526004016103f6906116e8565b600a54811115610ae55760405162461bcd60e51b81526004016103f69061171d565b600855565b6003546000906001600160a01b03163314610b175760405162461bcd60e51b81526004016103f6906116e8565b6001848484604051602001610b2e93929190611791565b60408051601f1981840301815290829052610b48916117ef565b9081526040519081900360200190205460ff1615610b9d5760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e481c9959da5cdd195c995960721b60448201526064016103f6565b6000846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610bdd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c0591908101906118c4565b90506000856001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c6f91908101906118c4565b90506000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd59190611971565b90506000835111610d155760405162461bcd60e51b815260206004820152600a602482015269656d707479206e616d6560b01b60448201526064016103f6565b6000825111610d555760405162461bcd60e51b815260206004820152600c60248201526b195b5c1d1e481cde5b589bdb60a21b60448201526064016103f6565b600180888888604051602001610d6d93929190611791565b60408051601f1981840301815290829052610d87916117ef565b908152604051908190036020018120805492151560ff19909316929092179091556001600160a01b0388169033907f4b31e969d09d98531e59af7bbe43c1f489998b65fc9d3950500dc79d84ab74dd90610dea908790879087908d908d906119c0565b60405180910390a35060019695505050505050565b6000333b15610e505760405162461bcd60e51b815260206004820152601f60248201527f636f6e7472616374206973206e6f7420616c6c6f77656420746f20737761700060448201526064016103f6565b333214610e955760405162461bcd60e51b81526020600482015260136024820152721b9bc81c1c9bde1e481a5cc8185b1b1bddd959606a1b60448201526064016103f6565b6001858484604051602001610eac93929190611791565b60408051601f1981840301815290829052610ec6916117ef565b9081526040519081900360200190205460ff16610f1c5760405162461bcd60e51b81526020600482015260146024820152733737ba103932b3b4b9ba32b932b2103a37b5b2b760611b60448201526064016103f6565b600654341015610f675760405162461bcd60e51b81526020600482015260166024820152750e6eec2e040cccaca40d2e640dcdee840cadcdeeaced60531b60448201526064016103f6565b60008411610f875760405162461bcd60e51b81526004016103f69061180b565b600a546008541115610fab5760405162461bcd60e51b81526004016103f69061171d565b3415610fec576003546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015610fea573d6000803e3d6000fd5b505b600080546001600160a01b0319166001600160a01b038716178155600a5460085486929182911415611099576000546040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561106f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110939190611842565b50611209565b6110a287611421565b6000546040516323b872dd60e01b81523360048201523060248201526044810185905293965091945092506001600160a01b0316906323b872dd906064016020604051808303816000875af11580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111239190611842565b506000546005546040516323b872dd60e01b81523360048201526001600160a01b039182166024820152604481018590529116906323b872dd906064016020604051808303816000875af115801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a39190611842565b5060005460405163079cc67960e41b8152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b1580156111f057600080fd5b505af1158015611204573d6000803e3d6000fd5b505050505b336001600160a01b0316886001600160a01b03167f3dc5fff1cb65a55dcbf0c61a525b97306a65fac3b065fe67d680d242d7ec189d89348787878d8d6040516112589796959493929190611a0f565b60405180910390a3506001979650505050505050565b60008060008084116112925760405162461bcd60e51b81526004016103f69061180b565b600a5460085411156112b65760405162461bcd60e51b81526004016103f69061171d565b60008060006112c487611421565b9199909850909650945050505050565b600060018484846040516020016112ed93929190611791565b60408051601f1981840301815290829052611307916117ef565b9081526040519081900360200190205460ff1690509392505050565b6004546001600160a01b0316331461134d5760405162461bcd60e51b81526004016103f690611864565b6001600160a01b0381166113b25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103f6565b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b600061141a8284611a64565b9392505050565b60008060008084116114835760405162461bcd60e51b815260206004820152602560248201527f416d6f756e743a20416d6f756e74206d75737420626520677265617465722074604482015264068656e20360dc1b60648201526084016103f6565b600080600061149d6008548861150c90919063ffffffff16565b92506114b4600a548461151890919063ffffffff16565b925060006114c2888561140e565b90506114d96009548261150c90919063ffffffff16565b92506114f0600a548461151890919063ffffffff16565b92506114fc818461140e565b9398929750929550909350505050565b600061141a8284611a7b565b600061141a8284611a9a565b60006020828403121561153657600080fd5b5035919050565b6001600160a01b038116811461155257600080fd5b50565b60008083601f84011261156757600080fd5b50813567ffffffffffffffff81111561157f57600080fd5b60208301915083602082850101111561159757600080fd5b9250929050565b60008060008060008060a087890312156115b757600080fd5b8635955060208701356115c98161153d565b945060408701356115d98161153d565b935060608701359250608087013567ffffffffffffffff8111156115fc57600080fd5b61160889828a01611555565b979a9699509497509295939492505050565b60006020828403121561162c57600080fd5b813561141a8161153d565b60008060006040848603121561164c57600080fd5b83356116578161153d565b9250602084013567ffffffffffffffff81111561167357600080fd5b61167f86828701611555565b9497909650939450505050565b600080600080606085870312156116a257600080fd5b84356116ad8161153d565b935060208501359250604085013567ffffffffffffffff8111156116d057600080fd5b6116dc87828801611555565b95989497509550505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602b908201527f616d6f756e7444697669736f6e50657263656e746167653a204772656174657260408201526a207468616e20313030202560a81b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906117b69083018486611768565b95945050505050565b60005b838110156117da5781810151838201526020016117c2565b838111156117e9576000848401525b50505050565b600082516118018184602087016117bf565b9190910192915050565b6020808252601f908201527f416d6f756e742073686f756c642062652067726561746572207468616e203000604082015260600190565b60006020828403121561185457600080fd5b8151801515811461141a57600080fd5b6020808252602a908201527f53757065722041646d696e3a2063616c6c6572206973206e6f742074686520736040820152693ab832b91030b236b4b760b11b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156118d657600080fd5b815167ffffffffffffffff808211156118ee57600080fd5b818401915084601f83011261190257600080fd5b815181811115611914576119146118ae565b604051601f8201601f19908116603f0116810190838211818310171561193c5761193c6118ae565b8160405282815287602084870101111561195557600080fd5b6119668360208301602088016117bf565b979650505050505050565b60006020828403121561198357600080fd5b815160ff8116811461141a57600080fd5b600081518084526119ac8160208601602086016117bf565b601f01601f19169290920160200192915050565b6080815260006119d36080830188611994565b82810360208401526119e58188611994565b905060ff861660408401528281036060840152611a03818587611768565b98975050505050505050565b87815286602082015285604082015284606082015283608082015260c060a08201526000611a4160c083018486611768565b9998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b600082821015611a7657611a76611a4e565b500390565b6000816000190483118215151615611a9557611a95611a4e565b500290565b600082611ab757634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212207951d2d46f410d6980b05d0d826be586b974fc5cd929a7f89416458f60b87c4864736f6c634300080b00330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b5e3af16b188000000000000000000000000000000000000000000000000000022b1c8c1227a00000000000000000000000000006cb2dd928e61099796bd813bf5510c3b00e8ad1b000000000000000000000000bfd3671a52c985357a90c94b86675df8f3d58829
Deployed Bytecode
0x60806040526004361061011f5760003560e01c80638e91efb5116100a0578063d0a7f44511610064578063d0a7f44514610325578063eb7b553914610360578063ef0b4f5a14610380578063f2fde38b14610396578063f42986e1146103b657600080fd5b80638e91efb51461029c5780639722be8b146102bc578063a29ca78b146102dc578063a3ce83d1146102ef578063b3f006741461030557600080fd5b806341858c4b116100e757806341858c4b1461020357806354cf2aeb14610223578063715018a6146102475780637c08b9641461025c5780638da5cb5b1461027c57600080fd5b80630be1ea4b1461012457806329575f6a146101695780632a6528e5146101a157806334e19907146101c35780633f6a336f146101e3575b600080fd5b34801561013057600080fd5b5061015461013f366004611524565b60026020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561017557600080fd5b50600454610189906001600160a01b031681565b6040516001600160a01b039091168152602001610160565b3480156101ad57600080fd5b506101c16101bc366004611524565b6103cc565b005b3480156101cf57600080fd5b506101c16101de366004611524565b610439565b3480156101ef57600080fd5b506101546101fe36600461159e565b610468565b34801561020f57600080fd5b506101c161021e36600461161a565b61083c565b34801561022f57600080fd5b5061023960065481565b604051908152602001610160565b34801561025357600080fd5b506101c1610931565b34801561026857600080fd5b506101c161027736600461161a565b6109a5565b34801561028857600080fd5b50600354610189906001600160a01b031681565b3480156102a857600080fd5b506101c16102b7366004611524565b610a99565b3480156102c857600080fd5b506101546102d7366004611637565b610aea565b6101546102ea36600461168c565b610dff565b3480156102fb57600080fd5b5061023960085481565b34801561031157600080fd5b50600554610189906001600160a01b031681565b34801561033157600080fd5b50610345610340366004611524565b61126e565b60408051938452602084019290925290820152606001610160565b34801561036c57600080fd5b5061015461037b366004611637565b6112d4565b34801561038c57600080fd5b5061023960075481565b3480156103a257600080fd5b506101c16103b136600461161a565b611323565b3480156103c257600080fd5b5061023960095481565b6003546001600160a01b031633146103ff5760405162461bcd60e51b81526004016103f6906116e8565b60405180910390fd5b600a548111156104215760405162461bcd60e51b81526004016103f69061171d565b6009819055600a54610433908261140e565b60075550565b6003546001600160a01b031633146104635760405162461bcd60e51b81526004016103f6906116e8565b600655565b6003546000906001600160a01b031633146104955760405162461bcd60e51b81526004016103f6906116e8565b60008781526002602052604090205460ff16156104e85760405162461bcd60e51b815260206004820152601160248201527074782066696c6c656420616c726561647960781b60448201526064016103f6565b60018684846040516020016104ff93929190611791565b60408051601f1981840301815290829052610519916117ef565b9081526040519081900360200190205460ff1661056f5760405162461bcd60e51b81526020600482015260146024820152733737ba103932b3b4b9ba32b932b2103a37b5b2b760611b60448201526064016103f6565b6000841161058f5760405162461bcd60e51b81526004016103f69061180b565b600a5460085411156105b35760405162461bcd60e51b81526004016103f69061171d565b600080546001600160a01b0319166001600160a01b038816178155600a546008548692918291141561065c5760005460405163a9059cbb60e01b81526001600160a01b038a81166004830152602482018690529091169063a9059cbb906044016020604051808303816000875af1158015610632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106569190611842565b506107c0565b61066587611421565b60005460405163a9059cbb60e01b81526001600160a01b038d8116600483015260248201869052949750929550909350919091169063a9059cbb906044016020604051808303816000875af11580156106c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e69190611842565b5060005460055460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb906044016020604051808303816000875af115801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190611842565b50600054604051630852cd8d60e31b8152600481018390526001600160a01b03909116906342966c6890602401600060405180830381600087803b1580156107a757600080fd5b505af11580156107bb573d6000803e3d6000fd5b505050505b60008a815260026020908152604091829020805460ff1916600117905581518581529081018490529081018290526001600160a01b03898116918c918c16907f6ca1e5041fcd0e6760eaf2fb58e50031fb9d1b567c71df7f216e8f1f6c9af6a59060600160405180910390a45060019998505050505050505050565b6004546001600160a01b031633146108665760405162461bcd60e51b81526004016103f690611864565b6001600160a01b0381166108d55760405162461bcd60e51b815260206004820152603060248201527f53757065722041646d696e3a206e65772073757065722061646d696e2069732060448201526f746865207a65726f206164647265737360801b60648201526084016103f6565b6004546040516001600160a01b038084169216907f6a7fb6694616d75391385b86c21a1cc2628072753f9c7da9731e7b1b083a55e490600090a3600480546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b0316331461095b5760405162461bcd60e51b81526004016103f690611864565b6003546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600380546001600160a01b0319169055565b6004546001600160a01b031633146109cf5760405162461bcd60e51b81526004016103f690611864565b6001600160a01b038116610a3d5760405162461bcd60e51b815260206004820152602f60248201527f4665652052656365697665723a206e657720666565207265636569766572206160448201526e032323932b9b99034b9903d32b9379608d1b60648201526084016103f6565b6005546040516001600160a01b038084169216907fa92ff4390fe6943f0b30e8fe715dde86f85ab79b2b2c640a10fc094cc4036cc890600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b03163314610ac35760405162461bcd60e51b81526004016103f6906116e8565b600a54811115610ae55760405162461bcd60e51b81526004016103f69061171d565b600855565b6003546000906001600160a01b03163314610b175760405162461bcd60e51b81526004016103f6906116e8565b6001848484604051602001610b2e93929190611791565b60408051601f1981840301815290829052610b48916117ef565b9081526040519081900360200190205460ff1615610b9d5760405162461bcd60e51b8152602060048201526012602482015271185b1c9958591e481c9959da5cdd195c995960721b60448201526064016103f6565b6000846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610bdd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c0591908101906118c4565b90506000856001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c6f91908101906118c4565b90506000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd59190611971565b90506000835111610d155760405162461bcd60e51b815260206004820152600a602482015269656d707479206e616d6560b01b60448201526064016103f6565b6000825111610d555760405162461bcd60e51b815260206004820152600c60248201526b195b5c1d1e481cde5b589bdb60a21b60448201526064016103f6565b600180888888604051602001610d6d93929190611791565b60408051601f1981840301815290829052610d87916117ef565b908152604051908190036020018120805492151560ff19909316929092179091556001600160a01b0388169033907f4b31e969d09d98531e59af7bbe43c1f489998b65fc9d3950500dc79d84ab74dd90610dea908790879087908d908d906119c0565b60405180910390a35060019695505050505050565b6000333b15610e505760405162461bcd60e51b815260206004820152601f60248201527f636f6e7472616374206973206e6f7420616c6c6f77656420746f20737761700060448201526064016103f6565b333214610e955760405162461bcd60e51b81526020600482015260136024820152721b9bc81c1c9bde1e481a5cc8185b1b1bddd959606a1b60448201526064016103f6565b6001858484604051602001610eac93929190611791565b60408051601f1981840301815290829052610ec6916117ef565b9081526040519081900360200190205460ff16610f1c5760405162461bcd60e51b81526020600482015260146024820152733737ba103932b3b4b9ba32b932b2103a37b5b2b760611b60448201526064016103f6565b600654341015610f675760405162461bcd60e51b81526020600482015260166024820152750e6eec2e040cccaca40d2e640dcdee840cadcdeeaced60531b60448201526064016103f6565b60008411610f875760405162461bcd60e51b81526004016103f69061180b565b600a546008541115610fab5760405162461bcd60e51b81526004016103f69061171d565b3415610fec576003546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015610fea573d6000803e3d6000fd5b505b600080546001600160a01b0319166001600160a01b038716178155600a5460085486929182911415611099576000546040516323b872dd60e01b8152336004820152306024820152604481018590526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561106f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110939190611842565b50611209565b6110a287611421565b6000546040516323b872dd60e01b81523360048201523060248201526044810185905293965091945092506001600160a01b0316906323b872dd906064016020604051808303816000875af11580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111239190611842565b506000546005546040516323b872dd60e01b81523360048201526001600160a01b039182166024820152604481018590529116906323b872dd906064016020604051808303816000875af115801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a39190611842565b5060005460405163079cc67960e41b8152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b1580156111f057600080fd5b505af1158015611204573d6000803e3d6000fd5b505050505b336001600160a01b0316886001600160a01b03167f3dc5fff1cb65a55dcbf0c61a525b97306a65fac3b065fe67d680d242d7ec189d89348787878d8d6040516112589796959493929190611a0f565b60405180910390a3506001979650505050505050565b60008060008084116112925760405162461bcd60e51b81526004016103f69061180b565b600a5460085411156112b65760405162461bcd60e51b81526004016103f69061171d565b60008060006112c487611421565b9199909850909650945050505050565b600060018484846040516020016112ed93929190611791565b60408051601f1981840301815290829052611307916117ef565b9081526040519081900360200190205460ff1690509392505050565b6004546001600160a01b0316331461134d5760405162461bcd60e51b81526004016103f690611864565b6001600160a01b0381166113b25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103f6565b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b600061141a8284611a64565b9392505050565b60008060008084116114835760405162461bcd60e51b815260206004820152602560248201527f416d6f756e743a20416d6f756e74206d75737420626520677265617465722074604482015264068656e20360dc1b60648201526084016103f6565b600080600061149d6008548861150c90919063ffffffff16565b92506114b4600a548461151890919063ffffffff16565b925060006114c2888561140e565b90506114d96009548261150c90919063ffffffff16565b92506114f0600a548461151890919063ffffffff16565b92506114fc818461140e565b9398929750929550909350505050565b600061141a8284611a7b565b600061141a8284611a9a565b60006020828403121561153657600080fd5b5035919050565b6001600160a01b038116811461155257600080fd5b50565b60008083601f84011261156757600080fd5b50813567ffffffffffffffff81111561157f57600080fd5b60208301915083602082850101111561159757600080fd5b9250929050565b60008060008060008060a087890312156115b757600080fd5b8635955060208701356115c98161153d565b945060408701356115d98161153d565b935060608701359250608087013567ffffffffffffffff8111156115fc57600080fd5b61160889828a01611555565b979a9699509497509295939492505050565b60006020828403121561162c57600080fd5b813561141a8161153d565b60008060006040848603121561164c57600080fd5b83356116578161153d565b9250602084013567ffffffffffffffff81111561167357600080fd5b61167f86828701611555565b9497909650939450505050565b600080600080606085870312156116a257600080fd5b84356116ad8161153d565b935060208501359250604085013567ffffffffffffffff8111156116d057600080fd5b6116dc87828801611555565b95989497509550505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602b908201527f616d6f756e7444697669736f6e50657263656e746167653a204772656174657260408201526a207468616e20313030202560a81b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906117b69083018486611768565b95945050505050565b60005b838110156117da5781810151838201526020016117c2565b838111156117e9576000848401525b50505050565b600082516118018184602087016117bf565b9190910192915050565b6020808252601f908201527f416d6f756e742073686f756c642062652067726561746572207468616e203000604082015260600190565b60006020828403121561185457600080fd5b8151801515811461141a57600080fd5b6020808252602a908201527f53757065722041646d696e3a2063616c6c6572206973206e6f742074686520736040820152693ab832b91030b236b4b760b11b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156118d657600080fd5b815167ffffffffffffffff808211156118ee57600080fd5b818401915084601f83011261190257600080fd5b815181811115611914576119146118ae565b604051601f8201601f19908116603f0116810190838211818310171561193c5761193c6118ae565b8160405282815287602084870101111561195557600080fd5b6119668360208301602088016117bf565b979650505050505050565b60006020828403121561198357600080fd5b815160ff8116811461141a57600080fd5b600081518084526119ac8160208601602086016117bf565b601f01601f19169290920160200192915050565b6080815260006119d36080830188611994565b82810360208401526119e58188611994565b905060ff861660408401528281036060840152611a03818587611768565b98975050505050505050565b87815286602082015285604082015284606082015283608082015260c060a08201526000611a4160c083018486611768565b9998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b600082821015611a7657611a76611a4e565b500390565b6000816000190483118215151615611a9557611a95611a4e565b500290565b600082611ab757634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212207951d2d46f410d6980b05d0d826be586b974fc5cd929a7f89416458f60b87c4864736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002b5e3af16b188000000000000000000000000000000000000000000000000000022b1c8c1227a00000000000000000000000000006cb2dd928e61099796bd813bf5510c3b00e8ad1b000000000000000000000000bfd3671a52c985357a90c94b86675df8f3d58829
-----Decoded View---------------
Arg [0] : fee_Native (uint256): 0
Arg [1] : amount_Division (uint256): 50000000000000000000
Arg [2] : fee_PerAsta (uint256): 2500000000000000000
Arg [3] : fee_Receiver (address): 0x6cb2Dd928E61099796BD813bf5510c3b00E8ad1b
Arg [4] : super_Admin (address): 0xBFD3671a52c985357a90c94b86675Df8f3D58829
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 000000000000000000000000000000000000000000000002b5e3af16b1880000
Arg [2] : 00000000000000000000000000000000000000000000000022b1c8c1227a0000
Arg [3] : 0000000000000000000000006cb2dd928e61099796bd813bf5510c3b00e8ad1b
Arg [4] : 000000000000000000000000bfd3671a52c985357a90c94b86675df8f3d58829
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.002998 | 1,164,052,325.5431 | $3,489,850.87 |
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.