Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 22 internal transactions
Advanced mode:
| Parent Transaction Hash | Block | From | To | ||||
|---|---|---|---|---|---|---|---|
| 16992002 | 30 hrs ago | 0 ETH | |||||
| 16992002 | 30 hrs ago | 0 ETH | |||||
| 16989626 | 31 hrs ago | 0 ETH | |||||
| 16989626 | 31 hrs ago | 0 ETH | |||||
| 16982276 | 33 hrs ago | 0 ETH | |||||
| 16982276 | 33 hrs ago | 0 ETH | |||||
| 16981500 | 33 hrs ago | 0 ETH | |||||
| 16981500 | 33 hrs ago | 0 ETH | |||||
| 16967773 | 37 hrs ago | 0 ETH | |||||
| 16967773 | 37 hrs ago | 0 ETH | |||||
| 16962720 | 39 hrs ago | 0 ETH | |||||
| 16962720 | 39 hrs ago | 0 ETH | |||||
| 16961157 | 39 hrs ago | 0 ETH | |||||
| 16961157 | 39 hrs ago | 0 ETH | |||||
| 16960063 | 39 hrs ago | 0 ETH | |||||
| 16960063 | 39 hrs ago | 0 ETH | |||||
| 16782244 | 3 days ago | 0 ETH | |||||
| 16782244 | 3 days ago | 0 ETH | |||||
| 16709972 | 4 days ago | 0 ETH | |||||
| 16709972 | 4 days ago | 0 ETH | |||||
| 16708975 | 4 days ago | 0 ETH | |||||
| 16708975 | 4 days ago | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
AvKATPriceFeed
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 50 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.28;
import { IERC4626 } from "@openzeppelin/contracts/interfaces/IERC4626.sol";
import { KATPriceFeed } from "./KATPriceFeed.sol";
import { IncorrectTokenAddress, ZeroAddress } from "../../../utils/Helpers.sol";
contract AvKATPriceFeed is KATPriceFeed {
struct AvKATPriceFeedConfig {
IERC4626 avKATVault;
}
bytes32 constant AV_KAT_PRICE_FEED_CONFIG_STORAGE_SLOT = keccak256("av.kat.price.feed.config");
constructor(address katToken, address avKATVault) KATPriceFeed(katToken) {
if (avKATVault == address(0)) revert ZeroAddress();
AvKATPriceFeedConfig storage config = _getAvKATPriceFeedConfig();
config.avKATVault = IERC4626(avKATVault);
}
function _getTokenBalanceInUSD(address src, uint256 value) internal view override returns (uint256) {
AvKATPriceFeedConfig storage config = _getAvKATPriceFeedConfig();
KATPriceFeedConfig storage katConfig = _getKATPriceFeedConfig();
if (src == address(config.avKATVault)) {
uint256 avKATInKAT = _convertTokenBalance(src, katConfig.katToken, value);
return super._getTokenBalanceInUSD(katConfig.katToken, avKATInKAT);
}
return super._getTokenBalanceInUSD(src, value);
}
function _convertTokenBalance(address src, address dst, uint256 value) internal view override returns (uint256) {
AvKATPriceFeedConfig storage config = _getAvKATPriceFeedConfig();
KATPriceFeedConfig storage katConfig = _getKATPriceFeedConfig();
if (src == address(config.avKATVault)) {
uint256 avKATInKAT = config.avKATVault.convertToAssets(value);
return super._convertTokenBalance(katConfig.katToken, dst, avKATInKAT);
} else if (dst == address(config.avKATVault)) {
uint256 valueInKAT = super._convertTokenBalance(src, katConfig.katToken, value);
return config.avKATVault.convertToShares(valueInKAT);
}
return super._convertTokenBalance(src, dst, value);
}
function _getAvKATPriceFeedConfig() internal view returns (AvKATPriceFeedConfig storage config) {
bytes32 slot = AV_KAT_PRICE_FEED_CONFIG_STORAGE_SLOT;
assembly {
config.slot := slot
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC4626.sol)
pragma solidity >=0.6.2;
import {IERC20} from "../token/ERC20/IERC20.sol";
import {IERC20Metadata} from "../token/ERC20/extensions/IERC20Metadata.sol";
/**
* @dev Interface of the ERC-4626 "Tokenized Vault Standard", as defined in
* https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].
*/
interface IERC4626 is IERC20, IERC20Metadata {
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);
event Withdraw(
address indexed sender,
address indexed receiver,
address indexed owner,
uint256 assets,
uint256 shares
);
/**
* @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.
*
* - MUST be an ERC-20 token contract.
* - MUST NOT revert.
*/
function asset() external view returns (address assetTokenAddress);
/**
* @dev Returns the total amount of the underlying asset that is “managed” by Vault.
*
* - SHOULD include any compounding that occurs from yield.
* - MUST be inclusive of any fees that are charged against assets in the Vault.
* - MUST NOT revert.
*/
function totalAssets() external view returns (uint256 totalManagedAssets);
/**
* @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal
* scenario where all the conditions are met.
*
* - MUST NOT be inclusive of any fees that are charged against assets in the Vault.
* - MUST NOT show any variations depending on the caller.
* - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.
* - MUST NOT revert.
*
* NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the
* “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and
* from.
*/
function convertToShares(uint256 assets) external view returns (uint256 shares);
/**
* @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal
* scenario where all the conditions are met.
*
* - MUST NOT be inclusive of any fees that are charged against assets in the Vault.
* - MUST NOT show any variations depending on the caller.
* - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.
* - MUST NOT revert.
*
* NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the
* “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and
* from.
*/
function convertToAssets(uint256 shares) external view returns (uint256 assets);
/**
* @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,
* through a deposit call.
*
* - MUST return a limited value if receiver is subject to some deposit limit.
* - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.
* - MUST NOT revert.
*/
function maxDeposit(address receiver) external view returns (uint256 maxAssets);
/**
* @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given
* current on-chain conditions.
*
* - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit
* call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called
* in the same transaction.
* - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the
* deposit would be accepted, regardless if the user has enough tokens approved, etc.
* - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.
* - MUST NOT revert.
*
* NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in
* share price or some other type of condition, meaning the depositor will lose assets by depositing.
*/
function previewDeposit(uint256 assets) external view returns (uint256 shares);
/**
* @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.
*
* - MUST emit the Deposit event.
* - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the
* deposit execution, and are accounted for during deposit.
* - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not
* approving enough underlying tokens to the Vault contract, etc).
*
* NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.
*/
function deposit(uint256 assets, address receiver) external returns (uint256 shares);
/**
* @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.
* - MUST return a limited value if receiver is subject to some mint limit.
* - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.
* - MUST NOT revert.
*/
function maxMint(address receiver) external view returns (uint256 maxShares);
/**
* @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given
* current on-chain conditions.
*
* - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call
* in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the
* same transaction.
* - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint
* would be accepted, regardless if the user has enough tokens approved, etc.
* - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.
* - MUST NOT revert.
*
* NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in
* share price or some other type of condition, meaning the depositor will lose assets by minting.
*/
function previewMint(uint256 shares) external view returns (uint256 assets);
/**
* @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.
*
* - MUST emit the Deposit event.
* - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint
* execution, and are accounted for during mint.
* - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not
* approving enough underlying tokens to the Vault contract, etc).
*
* NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.
*/
function mint(uint256 shares, address receiver) external returns (uint256 assets);
/**
* @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the
* Vault, through a withdraw call.
*
* - MUST return a limited value if owner is subject to some withdrawal limit or timelock.
* - MUST NOT revert.
*/
function maxWithdraw(address owner) external view returns (uint256 maxAssets);
/**
* @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,
* given current on-chain conditions.
*
* - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw
* call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if
* called
* in the same transaction.
* - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though
* the withdrawal would be accepted, regardless if the user has enough shares, etc.
* - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.
* - MUST NOT revert.
*
* NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in
* share price or some other type of condition, meaning the depositor will lose assets by depositing.
*/
function previewWithdraw(uint256 assets) external view returns (uint256 shares);
/**
* @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.
*
* - MUST emit the Withdraw event.
* - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the
* withdraw execution, and are accounted for during withdraw.
* - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner
* not having enough shares, etc).
*
* Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.
* Those methods should be performed separately.
*/
function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);
/**
* @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,
* through a redeem call.
*
* - MUST return a limited value if owner is subject to some withdrawal limit or timelock.
* - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.
* - MUST NOT revert.
*/
function maxRedeem(address owner) external view returns (uint256 maxShares);
/**
* @dev Allows an on-chain or off-chain user to simulate the effects of their redemption at the current block,
* given current on-chain conditions.
*
* - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call
* in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the
* same transaction.
* - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the
* redemption would be accepted, regardless if the user has enough shares, etc.
* - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.
* - MUST NOT revert.
*
* NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in
* share price or some other type of condition, meaning the depositor will lose assets by redeeming.
*/
function previewRedeem(uint256 shares) external view returns (uint256 assets);
/**
* @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.
*
* - MUST emit the Withdraw event.
* - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the
* redeem execution, and are accounted for during redeem.
* - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner
* not having enough shares, etc).
*
* NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.
* Those methods should be performed separately.
*/
function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.28;
import { IPriceFeed } from "../../../interfaces/shared/IPriceFeed.sol";
import { IncorrectTokenAddress, ZeroAddress } from "../../../utils/Helpers.sol";
contract KATPriceFeed is IPriceFeed {
struct KATPriceFeedConfig {
address katToken;
}
bytes32 constant KAT_PRICE_FEED_CONFIG_STORAGE_SLOT = keccak256("kat.price.feed.config");
constructor(address katToken) {
if (katToken == address(0)) revert ZeroAddress();
KATPriceFeedConfig storage config = _getKATPriceFeedConfig();
config.katToken = katToken;
}
/// @dev For now KAT Token is pegged to USD
function _getTokenBalanceInUSD(address src, uint256 value) internal view virtual override returns (uint256) {
KATPriceFeedConfig storage config = _getKATPriceFeedConfig();
if (src != config.katToken) revert IncorrectTokenAddress(src);
return value;
}
function _getKATPriceFeedConfig() internal view returns (KATPriceFeedConfig storage config) {
bytes32 slot = KAT_PRICE_FEED_CONFIG_STORAGE_SLOT;
assembly {
config.slot := slot
}
}
}// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.28; // common errors error IncorrectTypeID(uint256 _typeId, address _sender); error NegativePriceError(); error PriceStaleError(); error CallFailed(); error NotDepositContract(address _address); error NotExecutor(address _address); error NotStrategyContract(address _address); error IncorrectTokenAddress(address _tokenAddress); error IncorrectValue(); error IncorrectMessageAddress(address _sender); error ZeroAddress(); error ZeroAmount(); error ZeroValue(); error MinimumDustAmountError(); error NonPayableFunction(); error DivideByZeroError(); error PermissionDenied(); error InvalidLendingThreshold(); error NotImplemented(); // common events //deposit events //deposit
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)
pragma solidity >=0.4.16;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
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);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity >=0.6.2;
import {IERC20} from "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC-20 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);
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.28;
abstract contract IPriceFeed {
error TokenPairMissing();
// Gets token price in USD (WAD)
function _getTokenBalanceInUSD(address src, uint256 value) internal view virtual returns (uint256);
// Converts token src to token dst
function _convertTokenBalance(address src, address dst, uint256 value) internal view virtual returns (uint256) {
if (src == dst || value == 0) return value;
revert TokenPairMissing();
}
function getTokenBalanceInUSD(address src, uint256 value) external view returns (uint256) {
return _getTokenBalanceInUSD(src, value);
}
// Converts token src to token dst
function convertTokenBalance(address src, address dst, uint256 value) external view returns (uint256) {
return _convertTokenBalance(src, dst, value);
}
}{
"remappings": [
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"@spectra-core/src/=lib/spectra-core/src/",
"@pythnetwork/pyth-sdk-solidity/=node_modules/@pythnetwork/pyth-sdk-solidity/",
"hardhat/=node_modules/hardhat/",
"@morpho-blue/=lib/morpho-blue/",
"ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
"morpho-blue/=lib/morpho-blue/",
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"openzeppelin-erc20-basic/=lib/spectra-core/lib/openzeppelin-contracts/contracts/token/ERC20/",
"openzeppelin-erc20-extensions/=lib/spectra-core/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/",
"openzeppelin-erc20/=lib/spectra-core/lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/",
"openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/",
"openzeppelin-math/=lib/spectra-core/lib/openzeppelin-contracts/contracts/utils/math/",
"openzeppelin-proxy/=lib/spectra-core/lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/",
"openzeppelin-utils/=lib/spectra-core/lib/openzeppelin-contracts/contracts/utils/",
"solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/",
"spectra-core/=lib/spectra-core/",
"v3-core/=lib/v3-core/"
],
"optimizer": {
"enabled": true,
"runs": 50
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": false
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"katToken","type":"address"},{"internalType":"address","name":"avKATVault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"IncorrectTokenAddress","type":"error"},{"inputs":[],"name":"TokenPairMissing","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"convertTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"getTokenBalanceInUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561000f575f5ffd5b5060405161057438038061057483398101604081905261002e91610112565b816001600160a01b0381166100565760405163d92e233d60e01b815260040160405180910390fd5b5f7f7d85b196e2a5d7e58523c2530876c70e3e545ce9851f6fa0b1423434feef950b80546001600160a01b0319166001600160a01b039384161790555081166100b25760405163d92e233d60e01b815260040160405180910390fd5b7fa364d35cd96e30552069991f0c6ba114a4bfb06188134e6701624fce88d9667080546001600160a01b0319166001600160a01b039290921691909117905550610143565b80516001600160a01b038116811461010d575f5ffd5b919050565b5f5f60408385031215610123575f5ffd5b61012c836100f7565b915061013a602084016100f7565b90509250929050565b610424806101505f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063c2d4eda014610038578063f35cc24e1461005d575b5f5ffd5b61004b610046366004610375565b610070565b60405190815260200160405180910390f35b61004b61006b36600461039d565b610084565b5f61007b838361009a565b90505b92915050565b5f610090848484610115565b90505b9392505050565b5f5f6100a461027d565b90505f6100af6102a1565b82549091506001600160a01b03908116908616036101025780545f906100e09087906001600160a01b031687610115565b82549091506100f8906001600160a01b0316826102c5565b935050505061007e565b61010c85856102c5565b95945050505050565b5f5f61011f61027d565b90505f61012a6102a1565b82549091506001600160a01b03908116908716036101cf5781546040516303d1689d60e11b8152600481018690525f916001600160a01b0316906307a2d13a90602401602060405180830381865afa158015610188573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ac91906103d7565b82549091506101c5906001600160a01b03168783610316565b9350505050610093565b81546001600160a01b03908116908616036102685780545f906101fd9088906001600160a01b031687610316565b83546040516363737ac960e11b8152600481018390529192506001600160a01b03169063c6e6f59290602401602060405180830381865afa158015610244573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101c591906103d7565b610273868686610316565b9695505050505050565b7fa364d35cd96e30552069991f0c6ba114a4bfb06188134e6701624fce88d9667090565b7f7d85b196e2a5d7e58523c2530876c70e3e545ce9851f6fa0b1423434feef950b90565b5f5f6102cf6102a1565b80549091506001600160a01b0385811691161461030e57604051636a2e6fbf60e01b81526001600160a01b038516600482015260240160405180910390fd5b509092915050565b5f826001600160a01b0316846001600160a01b03161480610335575081155b15610341575080610093565b604051630afe52a960e01b815260040160405180910390fd5b80356001600160a01b0381168114610370575f5ffd5b919050565b5f5f60408385031215610386575f5ffd5b61038f8361035a565b946020939093013593505050565b5f5f5f606084860312156103af575f5ffd5b6103b88461035a565b92506103c66020850161035a565b929592945050506040919091013590565b5f602082840312156103e7575f5ffd5b505191905056fea2646970667358221220191af97ac39646d916286aa30f1d78e5d3fd5b5009fda1c69b322015248a0b5064736f6c634300081c0033000000000000000000000000cd6863bb697d7cee5b7ed8dea7d803374f7e4aa6000000000000000000000000297612c171fc8adce32ac333085a9ee1f2bcc1da
Deployed Bytecode
0x608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063c2d4eda014610038578063f35cc24e1461005d575b5f5ffd5b61004b610046366004610375565b610070565b60405190815260200160405180910390f35b61004b61006b36600461039d565b610084565b5f61007b838361009a565b90505b92915050565b5f610090848484610115565b90505b9392505050565b5f5f6100a461027d565b90505f6100af6102a1565b82549091506001600160a01b03908116908616036101025780545f906100e09087906001600160a01b031687610115565b82549091506100f8906001600160a01b0316826102c5565b935050505061007e565b61010c85856102c5565b95945050505050565b5f5f61011f61027d565b90505f61012a6102a1565b82549091506001600160a01b03908116908716036101cf5781546040516303d1689d60e11b8152600481018690525f916001600160a01b0316906307a2d13a90602401602060405180830381865afa158015610188573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101ac91906103d7565b82549091506101c5906001600160a01b03168783610316565b9350505050610093565b81546001600160a01b03908116908616036102685780545f906101fd9088906001600160a01b031687610316565b83546040516363737ac960e11b8152600481018390529192506001600160a01b03169063c6e6f59290602401602060405180830381865afa158015610244573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101c591906103d7565b610273868686610316565b9695505050505050565b7fa364d35cd96e30552069991f0c6ba114a4bfb06188134e6701624fce88d9667090565b7f7d85b196e2a5d7e58523c2530876c70e3e545ce9851f6fa0b1423434feef950b90565b5f5f6102cf6102a1565b80549091506001600160a01b0385811691161461030e57604051636a2e6fbf60e01b81526001600160a01b038516600482015260240160405180910390fd5b509092915050565b5f826001600160a01b0316846001600160a01b03161480610335575081155b15610341575080610093565b604051630afe52a960e01b815260040160405180910390fd5b80356001600160a01b0381168114610370575f5ffd5b919050565b5f5f60408385031215610386575f5ffd5b61038f8361035a565b946020939093013593505050565b5f5f5f606084860312156103af575f5ffd5b6103b88461035a565b92506103c66020850161035a565b929592945050506040919091013590565b5f602082840312156103e7575f5ffd5b505191905056fea2646970667358221220191af97ac39646d916286aa30f1d78e5d3fd5b5009fda1c69b322015248a0b5064736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cd6863bb697d7cee5b7ed8dea7d803374f7e4aa6000000000000000000000000297612c171fc8adce32ac333085a9ee1f2bcc1da
-----Decoded View---------------
Arg [0] : katToken (address): 0xCD6863bB697d7CEE5b7Ed8deA7D803374F7e4Aa6
Arg [1] : avKATVault (address): 0x297612c171fc8ADce32ac333085a9Ee1F2BCC1Da
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000cd6863bb697d7cee5b7ed8dea7d803374f7e4aa6
Arg [1] : 000000000000000000000000297612c171fc8adce32ac333085a9ee1f2bcc1da
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.