Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 1 from a total of 1 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Init | 16840521 | 1086 days ago | IN | 0 ETH | 0.00066048 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
InitMint
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 1000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/*
SPDX-License-Identifier: MIT
*/
pragma solidity =0.7.6;
pragma experimental ABIEncoderV2;
import "../../C.sol";
/**
* @author Publius
* @title InitMint mints Beans
**/
contract InitMint {
function init(address payee, uint256 amount) external {
C.bean().mint(payee, amount);
}
}/*
SPDX-License-Identifier: MIT
*/
pragma solidity =0.7.6;
pragma experimental ABIEncoderV2;
import "./interfaces/IBean.sol";
import "./interfaces/ICurve.sol";
import "./interfaces/IFertilizer.sol";
import "./interfaces/IProxyAdmin.sol";
import "./libraries/Decimal.sol";
/**
* @author Publius
* @title C holds the contracts for Beanstalk.
**/
library C {
using Decimal for Decimal.D256;
using SafeMath for uint256;
// Constants
uint256 private constant PERCENT_BASE = 1e18;
uint256 private constant PRECISION = 1e18;
// Chain
uint256 private constant CHAIN_ID = 1; // Mainnet
// Season
uint256 private constant CURRENT_SEASON_PERIOD = 3600; // 1 hour
uint256 private constant BASE_ADVANCE_INCENTIVE = 100e6; // 100 beans
uint256 private constant SOP_PRECISION = 1e24;
// Sun
uint256 private constant FERTILIZER_DENOMINATOR = 3;
uint256 private constant HARVEST_DENOMINATOR = 2;
uint256 private constant SOIL_COEFFICIENT_HIGH = 0.5e18;
uint256 private constant SOIL_COEFFICIENT_LOW = 1.5e18;
// Weather
uint256 private constant POD_RATE_LOWER_BOUND = 0.05e18; // 5%
uint256 private constant OPTIMAL_POD_RATE = 0.15e18; // 15%
uint256 private constant POD_RATE_UPPER_BOUND = 0.25e18; // 25%
uint32 private constant STEADY_SOW_TIME = 60; // 1 minute
uint256 private constant DELTA_POD_DEMAND_LOWER_BOUND = 0.95e18; // 95%
uint256 private constant DELTA_POD_DEMAND_UPPER_BOUND = 1.05e18; // 105%
// Silo
uint256 private constant SEEDS_PER_BEAN = 2;
uint256 private constant STALK_PER_BEAN = 10000;
uint256 private constant ROOTS_BASE = 1e12;
// Exploit
uint256 private constant UNRIPE_LP_PER_DOLLAR = 1884592; // 145_113_507_403_282 / 77_000_000
uint256 private constant ADD_LP_RATIO = 866616;
uint256 private constant INITIAL_HAIRCUT = 185564685220298701; // SET
// Contracts
address private constant BEAN = 0xBEA0000029AD1c77D3d5D23Ba2D8893dB9d1Efab;
address private constant CURVE_BEAN_METAPOOL = 0xc9C32cd16Bf7eFB85Ff14e0c8603cc90F6F2eE49;
address private constant CURVE_3_POOL = 0xbEbc44782C7dB0a1A60Cb6fe97d0b483032FF1C7;
address private constant THREE_CRV = 0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490;
address private constant UNRIPE_BEAN = 0x1BEA0050E63e05FBb5D8BA2f10cf5800B6224449;
address private constant UNRIPE_LP = 0x1BEA3CcD22F4EBd3d37d731BA31Eeca95713716D;
address private constant FERTILIZER = 0x402c84De2Ce49aF88f5e2eF3710ff89bFED36cB6;
address private constant FERTILIZER_ADMIN = 0xfECB01359263C12Aa9eD838F878A596F0064aa6e;
address private constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
address private constant TRI_CRYPTO = 0xc4AD29ba4B3c580e6D59105FFf484999997675Ff;
address private constant TRI_CRYPTO_POOL = 0xD51a44d3FaE010294C616388b506AcdA1bfAAE46;
address private constant CURVE_ZAP = 0xA79828DF1850E8a3A3064576f380D90aECDD3359;
address private constant UNRIPE_CURVE_BEAN_LUSD_POOL = 0xD652c40fBb3f06d6B58Cb9aa9CFF063eE63d465D;
address private constant UNRIPE_CURVE_BEAN_METAPOOL = 0x3a70DfA7d2262988064A2D051dd47521E43c9BdD;
/**
* Getters
**/
function getSeasonPeriod() internal pure returns (uint256) {
return CURRENT_SEASON_PERIOD;
}
function getAdvanceIncentive() internal pure returns (uint256) {
return BASE_ADVANCE_INCENTIVE;
}
function getFertilizerDenominator() internal pure returns (uint256) {
return FERTILIZER_DENOMINATOR;
}
function getHarvestDenominator() internal pure returns (uint256) {
return HARVEST_DENOMINATOR;
}
function getChainId() internal pure returns (uint256) {
return CHAIN_ID;
}
function getOptimalPodRate() internal pure returns (Decimal.D256 memory) {
return Decimal.ratio(OPTIMAL_POD_RATE, PERCENT_BASE);
}
function getUpperBoundPodRate() internal pure returns (Decimal.D256 memory) {
return Decimal.ratio(POD_RATE_UPPER_BOUND, PERCENT_BASE);
}
function getLowerBoundPodRate() internal pure returns (Decimal.D256 memory) {
return Decimal.ratio(POD_RATE_LOWER_BOUND, PERCENT_BASE);
}
function getUpperBoundDPD() internal pure returns (Decimal.D256 memory) {
return Decimal.ratio(DELTA_POD_DEMAND_UPPER_BOUND, PERCENT_BASE);
}
function getLowerBoundDPD() internal pure returns (Decimal.D256 memory) {
return Decimal.ratio(DELTA_POD_DEMAND_LOWER_BOUND, PERCENT_BASE);
}
function getSteadySowTime() internal pure returns (uint32) {
return STEADY_SOW_TIME;
}
function getSeedsPerBean() internal pure returns (uint256) {
return SEEDS_PER_BEAN;
}
function getStalkPerBean() internal pure returns (uint256) {
return STALK_PER_BEAN;
}
function getRootsBase() internal pure returns (uint256) {
return ROOTS_BASE;
}
function getSopPrecision() internal pure returns (uint256) {
return SOP_PRECISION;
}
function beanAddress() internal pure returns (address) {
return BEAN;
}
function curveMetapoolAddress() internal pure returns (address) {
return CURVE_BEAN_METAPOOL;
}
function unripeLPPool1() internal pure returns (address) {
return UNRIPE_CURVE_BEAN_METAPOOL;
}
function unripeLPPool2() internal pure returns (address) {
return UNRIPE_CURVE_BEAN_LUSD_POOL;
}
function unripeBeanAddress() internal pure returns (address) {
return UNRIPE_BEAN;
}
function unripeLPAddress() internal pure returns (address) {
return UNRIPE_LP;
}
function unripeBean() internal pure returns (IERC20) {
return IERC20(UNRIPE_BEAN);
}
function unripeLP() internal pure returns (IERC20) {
return IERC20(UNRIPE_LP);
}
function bean() internal pure returns (IBean) {
return IBean(BEAN);
}
function usdc() internal pure returns (IERC20) {
return IERC20(USDC);
}
function curveMetapool() internal pure returns (ICurvePool) {
return ICurvePool(CURVE_BEAN_METAPOOL);
}
function curve3Pool() internal pure returns (I3Curve) {
return I3Curve(CURVE_3_POOL);
}
function curveZap() internal pure returns (ICurveZap) {
return ICurveZap(CURVE_ZAP);
}
function curveZapAddress() internal pure returns (address) {
return CURVE_ZAP;
}
function curve3PoolAddress() internal pure returns (address) {
return CURVE_3_POOL;
}
function threeCrv() internal pure returns (IERC20) {
return IERC20(THREE_CRV);
}
function fertilizer() internal pure returns (IFertilizer) {
return IFertilizer(FERTILIZER);
}
function fertilizerAddress() internal pure returns (address) {
return FERTILIZER;
}
function fertilizerAdmin() internal pure returns (IProxyAdmin) {
return IProxyAdmin(FERTILIZER_ADMIN);
}
function triCryptoPoolAddress() internal pure returns (address) {
return TRI_CRYPTO_POOL;
}
function triCrypto() internal pure returns (IERC20) {
return IERC20(TRI_CRYPTO);
}
function unripeLPPerDollar() internal pure returns (uint256) {
return UNRIPE_LP_PER_DOLLAR;
}
function dollarPerUnripeLP() internal pure returns (uint256) {
return 1e12/UNRIPE_LP_PER_DOLLAR;
}
function exploitAddLPRatio() internal pure returns (uint256) {
return ADD_LP_RATIO;
}
function precision() internal pure returns (uint256) {
return PRECISION;
}
function initialRecap() internal pure returns (uint256) {
return INITIAL_HAIRCUT;
}
function soilCoefficientHigh() internal pure returns (uint256) {
return SOIL_COEFFICIENT_HIGH;
}
function soilCoefficientLow() internal pure returns (uint256) {
return SOIL_COEFFICIENT_LOW;
}
}/**
* SPDX-License-Identifier: MIT
**/
pragma solidity =0.7.6;
pragma experimental ABIEncoderV2;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
/**
* @author Publius
* @title Bean Interface
**/
abstract contract IBean is IERC20 {
function burn(uint256 amount) public virtual;
function burnFrom(address account, uint256 amount) public virtual;
function mint(address account, uint256 amount) public virtual;
}// SPDX-License-Identifier: MIT
pragma experimental ABIEncoderV2;
pragma solidity =0.7.6;
interface ICurvePool {
function A_precise() external view returns (uint256);
function get_balances() external view returns (uint256[2] memory);
function totalSupply() external view returns (uint256);
function add_liquidity(uint256[2] memory amounts, uint256 min_mint_amount) external returns (uint256);
function remove_liquidity_one_coin(uint256 _token_amount, int128 i, uint256 min_amount) external returns (uint256);
function balances(int128 i) external view returns (uint256);
function fee() external view returns (uint256);
function coins(uint256 i) external view returns (address);
function get_virtual_price() external view returns (uint256);
function calc_token_amount(uint256[2] calldata amounts, bool deposit) external view returns (uint256);
function calc_withdraw_one_coin(uint256 _token_amount, int128 i) external view returns (uint256);
function exchange(int128 i, int128 j, uint256 dx, uint256 min_dy) external returns (uint256);
function exchange_underlying(int128 i, int128 j, uint256 dx, uint256 min_dy) external returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
}
interface ICurveZap {
function add_liquidity(address _pool, uint256[4] memory _deposit_amounts, uint256 _min_mint_amount) external returns (uint256);
function calc_token_amount(address _pool, uint256[4] memory _amounts, bool _is_deposit) external returns (uint256);
}
interface ICurvePoolR {
function exchange(int128 i, int128 j, uint256 dx, uint256 min_dy, address receiver) external returns (uint256);
function exchange_underlying(int128 i, int128 j, uint256 dx, uint256 min_dy, address receiver) external returns (uint256);
function remove_liquidity_one_coin(uint256 _token_amount, int128 i, uint256 min_amount, address receiver) external returns (uint256);
}
interface ICurvePool2R {
function add_liquidity(uint256[2] memory amounts, uint256 min_mint_amount, address reciever) external returns (uint256);
function remove_liquidity(uint256 _burn_amount, uint256[2] memory _min_amounts, address reciever) external returns (uint256[2] calldata);
function remove_liquidity_imbalance(uint256[2] memory _amounts, uint256 _max_burn_amount, address reciever) external returns (uint256);
}
interface ICurvePool3R {
function add_liquidity(uint256[3] memory amounts, uint256 min_mint_amount, address reciever) external returns (uint256);
function remove_liquidity(uint256 _burn_amount, uint256[3] memory _min_amounts, address reciever) external returns (uint256[3] calldata);
function remove_liquidity_imbalance(uint256[3] memory _amounts, uint256 _max_burn_amount, address reciever) external returns (uint256);
}
interface ICurvePool4R {
function add_liquidity(uint256[4] memory amounts, uint256 min_mint_amount, address reciever) external returns (uint256);
function remove_liquidity(uint256 _burn_amount, uint256[4] memory _min_amounts, address reciever) external returns (uint256[4] calldata);
function remove_liquidity_imbalance(uint256[4] memory _amounts, uint256 _max_burn_amount, address reciever) external returns (uint256);
}
interface I3Curve {
function get_virtual_price() external view returns (uint256);
}
interface ICurveFactory {
function get_coins(address _pool) external view returns (address[4] calldata);
function get_underlying_coins(address _pool) external view returns (address[8] calldata);
}
interface ICurveCryptoFactory {
function get_coins(address _pool) external view returns (address[8] calldata);
}
interface ICurvePoolC {
function exchange(uint256 i, uint256 j, uint256 dx, uint256 min_dy) external returns (uint256);
}
interface ICurvePoolNoReturn {
function exchange(uint256 i, uint256 j, uint256 dx, uint256 min_dy) external;
function add_liquidity(uint256[3] memory amounts, uint256 min_mint_amount) external;
function remove_liquidity(uint256 _burn_amount, uint256[3] memory _min_amounts) external;
function remove_liquidity_imbalance(uint256[3] memory _amounts, uint256 _max_burn_amount) external;
function remove_liquidity_one_coin(uint256 _token_amount, uint256 i, uint256 min_amount) external;
}
interface ICurvePoolNoReturn128 {
function exchange(int128 i, int128 j, uint256 dx, uint256 min_dy) external;
function remove_liquidity_one_coin(uint256 _token_amount, int128 i, uint256 min_amount) external;
}// SPDX-License-Identifier: MIT
pragma experimental ABIEncoderV2;
pragma solidity =0.7.6;
interface IFertilizer {
struct Balance {
uint128 amount;
uint128 lastBpf;
}
function beanstalkUpdate(
address account,
uint256[] memory ids,
uint128 bpf
) external returns (uint256);
function beanstalkMint(address account, uint256 id, uint128 amount, uint128 bpf) external;
function balanceOfFertilized(address account, uint256[] memory ids) external view returns (uint256);
function balanceOfUnfertilized(address account, uint256[] memory ids) external view returns (uint256);
function lastBalanceOf(address account, uint256 id) external view returns (Balance memory);
function lastBalanceOfBatch(address[] memory account, uint256[] memory id) external view returns (Balance[] memory);
function setURI(string calldata newuri) external;
}// SPDX-License-Identifier: MIT
pragma experimental ABIEncoderV2;
pragma solidity =0.7.6;
interface IProxyAdmin {
function upgrade(address proxy, address implementation) external;
}/*
SPDX-License-Identifier: MIT
*/
pragma solidity =0.7.6;
pragma experimental ABIEncoderV2;
import { SafeMath } from "@openzeppelin/contracts/math/SafeMath.sol";
/**
* @title Decimal
* @author dYdX
*
* Library that defines a fixed-point number with 18 decimal places.
*/
library Decimal {
using SafeMath for uint256;
// ============ Constants ============
uint256 constant BASE = 10**18;
// ============ Structs ============
struct D256 {
uint256 value;
}
// ============ Static Functions ============
function zero()
internal
pure
returns (D256 memory)
{
return D256({ value: 0 });
}
function one()
internal
pure
returns (D256 memory)
{
return D256({ value: BASE });
}
function from(
uint256 a
)
internal
pure
returns (D256 memory)
{
return D256({ value: a.mul(BASE) });
}
function ratio(
uint256 a,
uint256 b
)
internal
pure
returns (D256 memory)
{
return D256({ value: getPartial(a, BASE, b) });
}
// ============ Self Functions ============
function add(
D256 memory self,
uint256 b
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.add(b.mul(BASE)) });
}
function sub(
D256 memory self,
uint256 b
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.sub(b.mul(BASE)) });
}
function sub(
D256 memory self,
uint256 b,
string memory reason
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.sub(b.mul(BASE), reason) });
}
function mul(
D256 memory self,
uint256 b
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.mul(b) });
}
function div(
D256 memory self,
uint256 b
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.div(b) });
}
function pow(
D256 memory self,
uint256 b
)
internal
pure
returns (D256 memory)
{
if (b == 0) {
return one();
}
D256 memory temp = D256({ value: self.value });
for (uint256 i = 1; i < b; ++i) {
temp = mul(temp, self);
}
return temp;
}
function add(
D256 memory self,
D256 memory b
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.add(b.value) });
}
function sub(
D256 memory self,
D256 memory b
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.sub(b.value) });
}
function sub(
D256 memory self,
D256 memory b,
string memory reason
)
internal
pure
returns (D256 memory)
{
return D256({ value: self.value.sub(b.value, reason) });
}
function mul(
D256 memory self,
D256 memory b
)
internal
pure
returns (D256 memory)
{
return D256({ value: getPartial(self.value, b.value, BASE) });
}
function div(
D256 memory self,
D256 memory b
)
internal
pure
returns (D256 memory)
{
return D256({ value: getPartial(self.value, BASE, b.value) });
}
function equals(D256 memory self, D256 memory b) internal pure returns (bool) {
return self.value == b.value;
}
function greaterThan(D256 memory self, D256 memory b) internal pure returns (bool) {
return compareTo(self, b) == 2;
}
function lessThan(D256 memory self, D256 memory b) internal pure returns (bool) {
return compareTo(self, b) == 0;
}
function greaterThanOrEqualTo(D256 memory self, D256 memory b) internal pure returns (bool) {
return compareTo(self, b) > 0;
}
function lessThanOrEqualTo(D256 memory self, D256 memory b) internal pure returns (bool) {
return compareTo(self, b) < 2;
}
function isZero(D256 memory self) internal pure returns (bool) {
return self.value == 0;
}
function asUint256(D256 memory self) internal pure returns (uint256) {
return self.value.div(BASE);
}
// ============ Core Methods ============
function getPartial(
uint256 target,
uint256 numerator,
uint256 denominator
)
private
pure
returns (uint256)
{
return target.mul(numerator).div(denominator);
}
function compareTo(
D256 memory a,
D256 memory b
)
private
pure
returns (uint256)
{
if (a.value == b.value) {
return 1;
}
return a.value > b.value ? 2 : 0;
}
}// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <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
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
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) {
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) {
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) {
// 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) {
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) {
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) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @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) {
require(b <= a, "SafeMath: subtraction overflow");
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) {
if (a == 0) return 0;
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @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. 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) internal pure returns (uint256) {
require(b > 0, "SafeMath: division by zero");
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) {
require(b > 0, "SafeMath: modulo by zero");
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) {
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.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryDiv}.
*
* 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) {
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) {
require(b > 0, errorMessage);
return a % b;
}
}{
"optimizer": {
"enabled": true,
"runs": 1000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50610174806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063399ae72414610030575b600080fd5b61004361003e3660046100d5565b610045565b005b61004d6100bd565b73ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401610087929190610118565b600060405180830381600087803b1580156100a157600080fd5b505af11580156100b5573d6000803e3d6000fd5b505050505050565b73bea0000029ad1c77d3d5d23ba2d8893db9d1efab90565b600080604083850312156100e7578182fd5b823573ffffffffffffffffffffffffffffffffffffffff8116811461010a578283fd5b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff92909216825260208201526040019056fea2646970667358221220e18c8923e08ebe6fcf3b5c72bf876451765d401b7daa00626963dfe2b64f26ce64736f6c63430007060033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063399ae72414610030575b600080fd5b61004361003e3660046100d5565b610045565b005b61004d6100bd565b73ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401610087929190610118565b600060405180830381600087803b1580156100a157600080fd5b505af11580156100b5573d6000803e3d6000fd5b505050505050565b73bea0000029ad1c77d3d5d23ba2d8893db9d1efab90565b600080604083850312156100e7578182fd5b823573ffffffffffffffffffffffffffffffffffffffff8116811461010a578283fd5b946020939093013593505050565b73ffffffffffffffffffffffffffffffffffffffff92909216825260208201526040019056fea2646970667358221220e18c8923e08ebe6fcf3b5c72bf876451765d401b7daa00626963dfe2b64f26ce64736f6c63430007060033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.