Source Code
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BootstrapPool
Compiler Version
v0.8.25+commit.b61c2a91
Optimization Enabled:
Yes with 1000 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.8.25;
import { IERC20 } from "@openzeppelin/contracts/interfaces/IERC20.sol";
import { ReentrancyGuard } from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
interface ILiquidityManager {
function owner() external view returns (address);
}
contract BootstrapPool is ReentrancyGuard {
address public immutable owner;
uint256 public immutable fee;
IERC20 public immutable agentToken;
IERC20 public immutable currencyToken;
uint256 public phantomAmount;
uint256 public currencyTokenFeeEarned;
uint256 public agentTokenFeeEarned;
bool public killed;
modifier notKilled() {
if (killed) revert BootstrapPoolKilled();
_;
}
modifier onlyOwner() {
if (msg.sender != owner) revert NotOwner();
_;
}
constructor(
IERC20 _currencyToken,
IERC20 _agentToken,
uint256 _initialPrice,
uint256 _bootstrapAmount,
uint256 _fee
) {
owner = msg.sender;
fee = 10_000 - _fee; // TODO: why?
currencyToken = _currencyToken;
agentToken = _agentToken;
phantomAmount = _initialPrice * _bootstrapAmount / 1e18;
}
function buy(uint256 _amountIn) external returns (uint256) {
return buy(_amountIn, msg.sender);
}
function buy(uint256 _amountIn, address _recipient) public nonReentrant notKilled returns (uint256) {
uint256 _amountOut = getAmountOut(_amountIn, address(currencyToken));
currencyTokenFeeEarned += _amountIn - (_amountIn * fee) / 10_000;
currencyToken.transferFrom(msg.sender, address(this), _amountIn);
agentToken.transfer(_recipient, _amountOut);
emit Swap(msg.sender, _amountIn, 0, 0, _amountOut, _recipient);
return _amountOut;
}
function sell(uint256 _amountIn) external returns (uint256) {
return sell(_amountIn, msg.sender);
}
function sell(uint256 _amountIn, address _recipient) public nonReentrant notKilled returns (uint256) {
uint256 _amountOut = getAmountOut(_amountIn, address(agentToken));
agentTokenFeeEarned += _amountIn - (_amountIn * fee) / 10_000;
agentToken.transferFrom(msg.sender, address(this), _amountIn);
currencyToken.transfer(_recipient, _amountOut);
require(currencyToken.balanceOf(address(this)) >= currencyTokenFeeEarned, "INSUFFICIENT_LIQUIDITY");
emit Swap(msg.sender, 0, _amountIn, _amountOut, 0, _recipient);
return _amountOut;
}
function kill() external nonReentrant onlyOwner {
_sweepFees();
killed = true;
agentToken.transfer(owner, agentToken.balanceOf(address(this)));
currencyToken.transfer(owner, currencyToken.balanceOf(address(this)));
}
function getPrice() external view notKilled returns (uint256 _price) {
(uint256 _reserveCurrencyToken, uint256 _reserveAgentToken) = getReserves();
_price = _reserveCurrencyToken * 1e18 / _reserveAgentToken;
}
function getReserves() public view returns (uint256 _reserveCurrencyToken, uint256 _reserveAgentToken) {
_reserveCurrencyToken = phantomAmount + currencyToken.balanceOf(address(this)) - currencyTokenFeeEarned;
_reserveAgentToken = agentToken.balanceOf(address(this)) - agentTokenFeeEarned;
}
function getAmountOut(uint256 _amountIn, address _tokenIn) public view notKilled returns (uint256 _amountOut) {
uint256 _reserveIn;
uint256 _reserveOut;
if (_tokenIn == address(currencyToken)) {
(_reserveIn, _reserveOut) = getReserves();
} else if (_tokenIn == address(agentToken)) {
(_reserveOut, _reserveIn) = getReserves();
}
require(_amountIn > 0 && _reserveIn > 0 && _reserveOut > 0); // INSUFFICIENT_INPUT_AMOUNT/INSUFFICIENT_LIQUIDITY
uint256 _amountInWithFee = _amountIn * fee;
uint256 _numerator = _amountInWithFee * _reserveOut;
uint256 _denominator = (_reserveIn * 10_000) + _amountInWithFee;
_amountOut = _numerator / _denominator;
}
function getAmountIn(uint256 _amountOut, address _tokenOut) public view notKilled returns (uint256 _amountIn) {
uint256 _reserveIn;
uint256 _reserveOut;
if (_tokenOut == address(agentToken)) {
(_reserveIn, _reserveOut) = getReserves();
} else if (_tokenOut == address(currencyToken)) {
(_reserveOut, _reserveIn) = getReserves();
}
require(_amountOut > 0 && _reserveIn > 0 && _reserveOut > 0); // INSUFFICIENT_INPUT_AMOUNT/INSUFFICIENT_LIQUIDITY
uint256 _numerator = _amountOut * _reserveIn * 10_000;
uint256 _denominator = (_reserveOut - _amountOut) * fee;
_amountIn = _numerator / _denominator;
}
function maxSwapAmount(address _tokenIn) public view returns (uint256 _amountIn) {
if (_tokenIn==address(currencyToken)) _amountIn = type(uint256).max;
else if (_tokenIn==address(agentToken)) _amountIn = getAmountIn(currencyToken.balanceOf(address(this)) - currencyTokenFeeEarned, address(currencyToken));
}
function sweepFees() public nonReentrant {
_sweepFees();
}
function _sweepFees() internal {
address feeTo = ILiquidityManager(owner).owner();
currencyToken.transfer(feeTo, currencyTokenFeeEarned);
agentToken.transfer(feeTo, agentTokenFeeEarned);
currencyTokenFeeEarned = 0;
agentTokenFeeEarned = 0;
}
function token0() external view returns (address) {
return address(currencyToken);
}
function token1() external view returns (address) {
return address(agentToken);
}
error BootstrapPoolKilled();
error NotOwner();
/// @notice Emitted when there is a swap in the pool
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)
pragma solidity ^0.8.20;
import {IERC20} from "../token/ERC20/IERC20.sol";// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
* consider using {ReentrancyGuardTransient} instead.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant NOT_ENTERED = 1;
uint256 private constant ENTERED = 2;
uint256 private _status;
/**
* @dev Unauthorized reentrant call.
*/
error ReentrancyGuardReentrantCall();
constructor() {
_status = NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be NOT_ENTERED
if (_status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
// Any calls to nonReentrant after this point will fail
_status = ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == ENTERED;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @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);
}{
"remappings": [
"@chainlink/=node_modules/@chainlink/",
"@eth-optimism/=node_modules/@eth-optimism/",
"@openzeppelin/=node_modules/@openzeppelin/",
"@prb/test/=node_modules/dev-fraxswap/node_modules/@prb/test/",
"@uniswap/=node_modules/@uniswap/",
"dev-fraxswap/=node_modules/dev-fraxswap/",
"ds-test/=node_modules/ds-test/",
"forge-std/=node_modules/forge-std/",
"frax-standard-solidity/=node_modules/frax-standard-solidity/",
"frax-std/=node_modules/dev-fraxswap/node_modules/frax-standard-solidity/src/",
"solidity-bytes-utils/=node_modules/solidity-bytes-utils/"
],
"optimizer": {
"enabled": true,
"runs": 1000
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "none",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "shanghai",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC20","name":"_currencyToken","type":"address"},{"internalType":"contract IERC20","name":"_agentToken","type":"address"},{"internalType":"uint256","name":"_initialPrice","type":"uint256"},{"internalType":"uint256","name":"_bootstrapAmount","type":"uint256"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BootstrapPoolKilled","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"inputs":[],"name":"agentToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"agentTokenFeeEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"buy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"buy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currencyToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currencyTokenFeeEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountOut","type":"uint256"},{"internalType":"address","name":"_tokenOut","type":"address"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address","name":"_tokenIn","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"_amountOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint256","name":"_reserveCurrencyToken","type":"uint256"},{"internalType":"uint256","name":"_reserveAgentToken","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"killed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"}],"name":"maxSwapAmount","outputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phantomAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"sell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"sell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sweepFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
610100604052348015610010575f80fd5b506040516116f53803806116f583398101604081905261002f9161009f565b60015f5533608052610043816127106100fd565b60a0526001600160a01b0380861660e052841660c052670de0b6b3a764000061006c8385610116565b610076919061012d565b6001555061014c9350505050565b80516001600160a01b038116811461009a575f80fd5b919050565b5f805f805f60a086880312156100b3575f80fd5b6100bc86610084565b94506100ca60208701610084565b6040870151606088015160809098015196999198509695945092505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610110576101106100e9565b92915050565b8082028115828204841417610110576101106100e9565b5f8261014757634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c05160e05161149d6102585f395f818161019601528181610237015281816103990152818161052b01528181610761015281816107e401528181610af501528181610c5401528181610cf201528181610ed501528181610f7201528181610fe70152818161103a015261124301525f81816102b2015281816102de0152818161043d015281816104e00152818161062a015281816106c8015281816109c801528181610d8b01528181610f160152818161108501526112d801525f818161031a015281816105ac0152818161065801528181610c8201526110f001525f818161027a0152818161093d015281816109f101528181610b260152611198015261149d5ff3fe608060405234801561000f575f80fd5b506004361061016e575f3560e01c80638da5cb5b116100d2578063d21220a711610088578063e4849b3211610063578063e4849b321461033c578063e78810111461034f578063f140a35a14610362575f80fd5b8063d21220a7146102dc578063d96a094a14610302578063ddca3f4314610315575f80fd5b806398d5fdca116100b857806398d5fdca146102a5578063b05707e9146102ad578063d113b95c146102d4575f80fd5b80638da5cb5b1461027557806395939cb11461029c575f80fd5b80634189a68e116101275780636b2fa3741161010d5780636b2fa374146102325780636f691c9d146102595780637deb602514610262575f80fd5b80634189a68e1461021557806341c0e1b514610228575f80fd5b80631125f13f116101575780631125f13f146101ce5780631f3a0e41146101ef578063353b8f6d1461020c575f80fd5b80630902f1ac146101725780630dfe168114610194575b5f80fd5b61017a610375565b604080519283526020830191909152015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b03909116815260200161018b565b6101e16101dc366004611368565b6104b6565b60405190815260200161018b565b6004546101fc9060ff1681565b604051901515815260200161018b565b6101e160025481565b6101e1610223366004611368565b6105f6565b61023061092a565b005b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b6101e160035481565b6101e1610270366004611368565b610c20565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b6101e160015481565b6101e1610e4a565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b610230610ea3565b7f00000000000000000000000000000000000000000000000000000000000000006101b6565b6101e1610310366004611396565b610ebc565b6101e17f000000000000000000000000000000000000000000000000000000000000000081565b6101e161034a366004611396565b610ec7565b6101e161035d3660046113ad565b610ed2565b6101e1610370366004611368565b611010565b6002546040516370a0823160e01b81523060048201525f9182916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156103de573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061040291906113cf565b60015461040f91906113fa565b610419919061140d565b6003546040516370a0823160e01b8152306004820152919350906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610482573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a691906113cf565b6104b0919061140d565b90509091565b6004545f9060ff16156104dc576040516310e630fb60e31b815260040160405180910390fd5b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316036105295761051f610375565b909250905061056f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03160361056f5761056a610375565b925090505b5f8511801561057d57505f82115b801561058857505f81115b610590575f80fd5b5f61059b8387611420565b6105a790612710611420565b90505f7f00000000000000000000000000000000000000000000000000000000000000006105d5888561140d565b6105df9190611420565b90506105eb8183611437565b979650505050505050565b5f6105ff611154565b60045460ff1615610623576040516310e630fb60e31b815260040160405180910390fd5b5f61064e847f0000000000000000000000000000000000000000000000000000000000000000611010565b905061271061067d7f000000000000000000000000000000000000000000000000000000000000000086611420565b6106879190611437565b610691908561140d565b60035f8282546106a191906113fa565b90915550506040516323b872dd60e01b8152336004820152306024820152604481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303815f875af1158015610716573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061073a9190611456565b5060405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af11580156107a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107cb9190611456565b506002546040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610831573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085591906113cf565b10156108c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f4c495155494449545900000000000000000000604482015260640160405180910390fd5b604080515f8082526020820187905291810183905260608101919091526001600160a01b0384169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822906080015b60405180910390a3905061092460015f55565b92915050565b610932611154565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610994576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61099c611195565b6004805460ff191660011781556040516370a0823160e01b815230918101919091526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb907f00000000000000000000000000000000000000000000000000000000000000009083906370a0823190602401602060405180830381865afa158015610a37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5b91906113cf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610abb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610adf9190611456565b506040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb907f00000000000000000000000000000000000000000000000000000000000000009083906370a0823190602401602060405180830381865afa158015610b6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9091906113cf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610bf0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c149190611456565b50610c1e60015f55565b565b5f610c29611154565b60045460ff1615610c4d576040516310e630fb60e31b815260040160405180910390fd5b5f610c78847f0000000000000000000000000000000000000000000000000000000000000000611010565b9050612710610ca77f000000000000000000000000000000000000000000000000000000000000000086611420565b610cb19190611437565b610cbb908561140d565b60025f828254610ccb91906113fa565b90915550506040516323b872dd60e01b8152336004820152306024820152604481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303815f875af1158015610d40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d649190611456565b5060405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015610dd1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610df59190611456565b50604080518581525f6020820181905291810191909152606081018290526001600160a01b0384169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82290608001610911565b6004545f9060ff1615610e70576040516310e630fb60e31b815260040160405180910390fd5b5f80610e7a610375565b909250905080610e9283670de0b6b3a7640000611420565b610e9c9190611437565b9250505090565b610eab611154565b610eb3611195565b610c1e60015f55565b5f6109248233610c20565b5f61092482336105f6565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610f1457505f19919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361100b576002546040516370a0823160e01b815230600482015261092491906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610fb7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fdb91906113cf565b610fe5919061140d565b7f00000000000000000000000000000000000000000000000000000000000000006104b6565b919050565b6004545f9060ff1615611036576040516310e630fb60e31b815260040160405180910390fd5b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03160361108357611079610375565b90925090506110c9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316036110c9576110c4610375565b925090505b5f851180156110d757505f82115b80156110e257505f81115b6110ea575f80fd5b5f6111157f000000000000000000000000000000000000000000000000000000000000000087611420565b90505f6111228383611420565b90505f8261113286612710611420565b61113c91906113fa565b90506111488183611437565b98975050505050505050565b60025f540361118f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111f2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112169190611475565b60025460405163a9059cbb60e01b81526001600160a01b03808416600483015260248201929092529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015611289573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ad9190611456565b5060035460405163a9059cbb60e01b81526001600160a01b03838116600483015260248201929092527f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611320573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113449190611456565b50505f6002819055600355565b6001600160a01b0381168114611365575f80fd5b50565b5f8060408385031215611379575f80fd5b82359150602083013561138b81611351565b809150509250929050565b5f602082840312156113a6575f80fd5b5035919050565b5f602082840312156113bd575f80fd5b81356113c881611351565b9392505050565b5f602082840312156113df575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610924576109246113e6565b81810381811115610924576109246113e6565b8082028115828204841417610924576109246113e6565b5f8261145157634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611466575f80fd5b815180151581146113c8575f80fd5b5f60208284031215611485575f80fd5b81516113c88161135156fea164736f6c6343000819000a0000000000000000000000006efb84bda519726fa1c65558e520b92b517121010000000000000000000000006efb84bda519726fa1c65558e520b92b51712101000000000000000000000000000000000000000000000000002c68af0bb1400000000000000000000000000000000000000000000000003635c9adc5dea000000000000000000000000000000000000000000000000000000000000000000064
Deployed Bytecode
0x608060405234801561000f575f80fd5b506004361061016e575f3560e01c80638da5cb5b116100d2578063d21220a711610088578063e4849b3211610063578063e4849b321461033c578063e78810111461034f578063f140a35a14610362575f80fd5b8063d21220a7146102dc578063d96a094a14610302578063ddca3f4314610315575f80fd5b806398d5fdca116100b857806398d5fdca146102a5578063b05707e9146102ad578063d113b95c146102d4575f80fd5b80638da5cb5b1461027557806395939cb11461029c575f80fd5b80634189a68e116101275780636b2fa3741161010d5780636b2fa374146102325780636f691c9d146102595780637deb602514610262575f80fd5b80634189a68e1461021557806341c0e1b514610228575f80fd5b80631125f13f116101575780631125f13f146101ce5780631f3a0e41146101ef578063353b8f6d1461020c575f80fd5b80630902f1ac146101725780630dfe168114610194575b5f80fd5b61017a610375565b604080519283526020830191909152015b60405180910390f35b7f0000000000000000000000006efb84bda519726fa1c65558e520b92b517121015b6040516001600160a01b03909116815260200161018b565b6101e16101dc366004611368565b6104b6565b60405190815260200161018b565b6004546101fc9060ff1681565b604051901515815260200161018b565b6101e160025481565b6101e1610223366004611368565b6105f6565b61023061092a565b005b6101b67f0000000000000000000000006efb84bda519726fa1c65558e520b92b5171210181565b6101e160035481565b6101e1610270366004611368565b610c20565b6101b67f00000000000000000000000083acd7b94e1504bcb03d2d30f1d3516ee484166481565b6101e160015481565b6101e1610e4a565b6101b67f0000000000000000000000006efb84bda519726fa1c65558e520b92b5171210181565b610230610ea3565b7f0000000000000000000000006efb84bda519726fa1c65558e520b92b517121016101b6565b6101e1610310366004611396565b610ebc565b6101e17f00000000000000000000000000000000000000000000000000000000000026ac81565b6101e161034a366004611396565b610ec7565b6101e161035d3660046113ad565b610ed2565b6101e1610370366004611368565b611010565b6002546040516370a0823160e01b81523060048201525f9182916001600160a01b037f0000000000000000000000006efb84bda519726fa1c65558e520b92b5171210116906370a0823190602401602060405180830381865afa1580156103de573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061040291906113cf565b60015461040f91906113fa565b610419919061140d565b6003546040516370a0823160e01b8152306004820152919350906001600160a01b037f0000000000000000000000006efb84bda519726fa1c65558e520b92b5171210116906370a0823190602401602060405180830381865afa158015610482573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a691906113cf565b6104b0919061140d565b90509091565b6004545f9060ff16156104dc576040516310e630fb60e31b815260040160405180910390fd5b5f807f0000000000000000000000006efb84bda519726fa1c65558e520b92b517121016001600160a01b0316846001600160a01b0316036105295761051f610375565b909250905061056f565b7f0000000000000000000000006efb84bda519726fa1c65558e520b92b517121016001600160a01b0316846001600160a01b03160361056f5761056a610375565b925090505b5f8511801561057d57505f82115b801561058857505f81115b610590575f80fd5b5f61059b8387611420565b6105a790612710611420565b90505f7f00000000000000000000000000000000000000000000000000000000000026ac6105d5888561140d565b6105df9190611420565b90506105eb8183611437565b979650505050505050565b5f6105ff611154565b60045460ff1615610623576040516310e630fb60e31b815260040160405180910390fd5b5f61064e847f0000000000000000000000006efb84bda519726fa1c65558e520b92b51712101611010565b905061271061067d7f00000000000000000000000000000000000000000000000000000000000026ac86611420565b6106879190611437565b610691908561140d565b60035f8282546106a191906113fa565b90915550506040516323b872dd60e01b8152336004820152306024820152604481018590527f0000000000000000000000006efb84bda519726fa1c65558e520b92b517121016001600160a01b0316906323b872dd906064016020604051808303815f875af1158015610716573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061073a9190611456565b5060405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390527f0000000000000000000000006efb84bda519726fa1c65558e520b92b51712101169063a9059cbb906044016020604051808303815f875af11580156107a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107cb9190611456565b506002546040516370a0823160e01b81523060048201527f0000000000000000000000006efb84bda519726fa1c65558e520b92b517121016001600160a01b0316906370a0823190602401602060405180830381865afa158015610831573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085591906113cf565b10156108c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f494e53554646494349454e545f4c495155494449545900000000000000000000604482015260640160405180910390fd5b604080515f8082526020820187905291810183905260608101919091526001600160a01b0384169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822906080015b60405180910390a3905061092460015f55565b92915050565b610932611154565b336001600160a01b037f00000000000000000000000083acd7b94e1504bcb03d2d30f1d3516ee48416641614610994576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61099c611195565b6004805460ff191660011781556040516370a0823160e01b815230918101919091526001600160a01b037f0000000000000000000000006efb84bda519726fa1c65558e520b92b51712101169063a9059cbb907f00000000000000000000000083acd7b94e1504bcb03d2d30f1d3516ee48416649083906370a0823190602401602060405180830381865afa158015610a37573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5b91906113cf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610abb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610adf9190611456565b506040516370a0823160e01b81523060048201527f0000000000000000000000006efb84bda519726fa1c65558e520b92b517121016001600160a01b03169063a9059cbb907f00000000000000000000000083acd7b94e1504bcb03d2d30f1d3516ee48416649083906370a0823190602401602060405180830381865afa158015610b6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9091906113cf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610bf0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c149190611456565b50610c1e60015f55565b565b5f610c29611154565b60045460ff1615610c4d576040516310e630fb60e31b815260040160405180910390fd5b5f610c78847f0000000000000000000000006efb84bda519726fa1c65558e520b92b51712101611010565b9050612710610ca77f00000000000000000000000000000000000000000000000000000000000026ac86611420565b610cb19190611437565b610cbb908561140d565b60025f828254610ccb91906113fa565b90915550506040516323b872dd60e01b8152336004820152306024820152604481018590527f0000000000000000000000006efb84bda519726fa1c65558e520b92b517121016001600160a01b0316906323b872dd906064016020604051808303815f875af1158015610d40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d649190611456565b5060405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390527f0000000000000000000000006efb84bda519726fa1c65558e520b92b51712101169063a9059cbb906044016020604051808303815f875af1158015610dd1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610df59190611456565b50604080518581525f6020820181905291810191909152606081018290526001600160a01b0384169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82290608001610911565b6004545f9060ff1615610e70576040516310e630fb60e31b815260040160405180910390fd5b5f80610e7a610375565b909250905080610e9283670de0b6b3a7640000611420565b610e9c9190611437565b9250505090565b610eab611154565b610eb3611195565b610c1e60015f55565b5f6109248233610c20565b5f61092482336105f6565b5f7f0000000000000000000000006efb84bda519726fa1c65558e520b92b517121016001600160a01b0316826001600160a01b031603610f1457505f19919050565b7f0000000000000000000000006efb84bda519726fa1c65558e520b92b517121016001600160a01b0316826001600160a01b03160361100b576002546040516370a0823160e01b815230600482015261092491906001600160a01b037f0000000000000000000000006efb84bda519726fa1c65558e520b92b5171210116906370a0823190602401602060405180830381865afa158015610fb7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fdb91906113cf565b610fe5919061140d565b7f0000000000000000000000006efb84bda519726fa1c65558e520b92b517121016104b6565b919050565b6004545f9060ff1615611036576040516310e630fb60e31b815260040160405180910390fd5b5f807f0000000000000000000000006efb84bda519726fa1c65558e520b92b517121016001600160a01b0316846001600160a01b03160361108357611079610375565b90925090506110c9565b7f0000000000000000000000006efb84bda519726fa1c65558e520b92b517121016001600160a01b0316846001600160a01b0316036110c9576110c4610375565b925090505b5f851180156110d757505f82115b80156110e257505f81115b6110ea575f80fd5b5f6111157f00000000000000000000000000000000000000000000000000000000000026ac87611420565b90505f6111228383611420565b90505f8261113286612710611420565b61113c91906113fa565b90506111488183611437565b98975050505050505050565b60025f540361118f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b5f7f00000000000000000000000083acd7b94e1504bcb03d2d30f1d3516ee48416646001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111f2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112169190611475565b60025460405163a9059cbb60e01b81526001600160a01b03808416600483015260248201929092529192507f0000000000000000000000006efb84bda519726fa1c65558e520b92b51712101169063a9059cbb906044016020604051808303815f875af1158015611289573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ad9190611456565b5060035460405163a9059cbb60e01b81526001600160a01b03838116600483015260248201929092527f0000000000000000000000006efb84bda519726fa1c65558e520b92b517121019091169063a9059cbb906044016020604051808303815f875af1158015611320573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113449190611456565b50505f6002819055600355565b6001600160a01b0381168114611365575f80fd5b50565b5f8060408385031215611379575f80fd5b82359150602083013561138b81611351565b809150509250929050565b5f602082840312156113a6575f80fd5b5035919050565b5f602082840312156113bd575f80fd5b81356113c881611351565b9392505050565b5f602082840312156113df575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610924576109246113e6565b81810381811115610924576109246113e6565b8082028115828204841417610924576109246113e6565b5f8261145157634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611466575f80fd5b815180151581146113c8575f80fd5b5f60208284031215611485575f80fd5b81516113c88161135156fea164736f6c6343000819000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006efb84bda519726fa1c65558e520b92b517121010000000000000000000000006efb84bda519726fa1c65558e520b92b51712101000000000000000000000000000000000000000000000000002c68af0bb1400000000000000000000000000000000000000000000000003635c9adc5dea000000000000000000000000000000000000000000000000000000000000000000064
-----Decoded View---------------
Arg [0] : _currencyToken (address): 0x6EFB84bda519726Fa1c65558e520B92b51712101
Arg [1] : _agentToken (address): 0x6EFB84bda519726Fa1c65558e520B92b51712101
Arg [2] : _initialPrice (uint256): 12500000000000000
Arg [3] : _bootstrapAmount (uint256): 1000000000000000000000
Arg [4] : _fee (uint256): 100
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000006efb84bda519726fa1c65558e520b92b51712101
Arg [1] : 0000000000000000000000006efb84bda519726fa1c65558e520b92b51712101
Arg [2] : 000000000000000000000000000000000000000000000000002c68af0bb14000
Arg [3] : 00000000000000000000000000000000000000000000003635c9adc5dea00000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000064
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 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.