Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- Utilities
- Optimization enabled
- true
- Compiler version
- v0.8.20+commit.a1b79de6
- Optimization runs
- 200
- EVM Version
- paris
- Verified at
- 2025-08-15T06:07:18.475008Z
contracts/Utilities.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
interface IDEXRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function WPLS() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable returns (uint256[] memory amounts);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);
}
interface IDEXPair {
event Approval(address indexed owner, address indexed spender, uint256 value);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Mint(address indexed sender, uint256 amount0, uint256 amount1);
event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function mint(address to) external returns (uint256 liquidity);
function burn(address to) external returns (uint256 amount0, uint256 amount1);
function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IDEXFactory {
function createPair(address tokenA, address tokenB) external returns (address pair);
function getPair(address tokenA, address tokenB) external view returns (address pair);
}
/**
* Standard SafeMath, stripped down to just add/sub/mul/div
*/
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
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;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
}
interface ILPTOKEN {
function burn(uint256 amount) external;
}
interface INetworkProposal {
function isAdmin(address adminAddress) external view returns (bool);
function admin() external view returns (address);
function getVoters() external view returns (address[] memory);
}
interface VPLSMinter {
function deposit() external payable;
function minDeposit() external returns (uint256);
}
interface IWPLS {
function deposit() external payable;
function withdraw(uint wad) external;
}
interface IVPLS {
function burn(uint256 amount) external;
}
interface IVouch {
function totalSupply() external view returns (uint256);
function burn(uint256 amount) external;
}
interface IDaoDistributor {
function setDistributionCriteria(
uint256 _minVouchPeriod,
uint256 _minVouchDistribution,
uint256 _minVplsPeriod,
uint256 _minVplsDistribution,
uint256 _minPlsPeriod,
uint256 _minPlsDistribution
) external;
function setDistributionThresholds(
uint256 _vouchForDistributionThreshold,
uint256 _vplsForDistributionThreshold,
uint256 _plsForDistributionThreshold,
uint256 _swapThresholdForTokens,
uint256 _plsSendThreshold,
uint256 _liquidityDistributionThreshold
) external;
function setDistributionAmounts(
uint256[9] calldata feeParams
) external;
function setVouchRewards(
uint256 _vouchHoldersPercent,
uint256 _validatorsPercent,
uint256 _votersPercent,
uint256 _stakersPercent,
uint256 _burnPercent
) external;
function setVplsRewards(
uint256 _vouchHoldersPercent,
uint256 _validatorsPercent,
uint256 _votersPercent,
uint256 _stakersPercent,
uint256 _burnPercent
) external;
function setPlsRewards(
uint256 _vouchHoldersPercent,
uint256 _validatorsPercent,
uint256 _votersPercent,
uint256 _stakersPercent
) external;
function setRecipientAddresses(
address _validators,
address _masterValidator,
address _feePool,
address _safu,
address _daoTreasury,
address _voters,
address _stakers
) external;
function setDistributorSettings(uint256 _vouchGas, uint256 _vplsGas, uint256 _plsGas) external;
function setShare(address shareholder, uint256 amount) external;
function processVouch(uint256 gas) external;
function processVpls(uint256 gas) external;
function processPls(uint256 gas) external;
function claimDividend() external;
function getUnpaidVouchEarnings(address shareholder) external view returns (uint256);
function getUnpaidVplsEarnings(address shareholder) external view returns (uint256);
function getUnpaidPlsEarnings(address shareholder) external view returns (uint256);
function setVouchAddress(address _vouchAddress) external;
function depositFromVouch() external payable;
function depositFromValidators() external payable;
}
library Utilities {
address public constant pulseRouterV1Address = 0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02;
address public constant pulseRouterV2Address = 0x165C3410fC91EF562C50559f7d2289fEbed552d9;
address public constant nineinchRouterAddress = 0xeB45a3c4aedd0F47F345fB4c8A1802BB5740d725;
function getBestRouter(uint256 amountIn, address[] memory path) public view returns (address bestRouter) {
address[] memory routers = new address[](3);
routers[0] = pulseRouterV1Address;
routers[1] = pulseRouterV2Address;
routers[2] = nineinchRouterAddress;
uint256 bestAmountOut = 0;
bestRouter = pulseRouterV2Address;
for (uint256 i = 0; i < routers.length; i++) {
try IDEXRouter(routers[i]).getAmountsOut(amountIn, path) returns (uint256[] memory amountsOut) {
uint256 amountOut = amountsOut[amountsOut.length - 1];
if (amountOut > bestAmountOut) {
bestAmountOut = amountOut;
bestRouter = routers[i];
}
} catch {
continue;
}
}
}
}
Compiler Settings
{"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}},"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"paris"}
Contract ABI
[{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"bestRouter","internalType":"address"}],"name":"getBestRouter","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"nineinchRouterAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pulseRouterV1Address","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pulseRouterV2Address","inputs":[]}]
Contract Creation Code
0x61059861003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c80636400d2fa1461005b578063903ec6c114610092578063e67b5593146100ad578063ee3b1256146100c0575b600080fd5b61007673eb45a3c4aedd0f47f345fb4c8a1802bb5740d72581565b6040516001600160a01b03909116815260200160405180910390f35b61007673165c3410fc91ef562c50559f7d2289febed552d981565b6100766100bb366004610364565b6100db565b6100767398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0281565b60408051600380825260808201909252600091829190602082016060803683370190505090507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc02816000815181106101295761012961041c565b60200260200101906001600160a01b031690816001600160a01b03168152505073165c3410fc91ef562c50559f7d2289febed552d9816001815181106101715761017161041c565b60200260200101906001600160a01b031690816001600160a01b03168152505073eb45a3c4aedd0f47f345fb4c8a1802bb5740d725816002815181106101b9576101b961041c565b60200260200101906001600160a01b031690816001600160a01b031681525050600073165c3410fc91ef562c50559f7d2289febed552d9925060005b82518110156102f0578281815181106102105761021061041c565b60200260200101516001600160a01b031663d06ca61f87876040518363ffffffff1660e01b8152600401610245929190610432565b600060405180830381865afa92505050801561028357506040513d6000823e601f3d908101601f191682016040526102809190810190610489565b60015b156102de57600081600183516102999190610530565b815181106102a9576102a961041c565b60200260200101519050838111156102db578093508483815181106102d0576102d061041c565b602002602001015195505b50505b806102e881610549565b9150506101f5565b50505092915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610338576103386102f9565b604052919050565b600067ffffffffffffffff82111561035a5761035a6102f9565b5060051b60200190565b6000806040838503121561037757600080fd5b8235915060208084013567ffffffffffffffff81111561039657600080fd5b8401601f810186136103a757600080fd5b80356103ba6103b582610340565b61030f565b81815260059190911b820183019083810190888311156103d957600080fd5b928401925b8284101561040d5783356001600160a01b03811681146103fe5760008081fd5b825292840192908401906103de565b80955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b6000604082018483526020604081850152818551808452606086019150828701935060005b8181101561047c5784516001600160a01b031683529383019391830191600101610457565b5090979650505050505050565b6000602080838503121561049c57600080fd5b825167ffffffffffffffff8111156104b357600080fd5b8301601f810185136104c457600080fd5b80516104d26103b582610340565b81815260059190911b820183019083810190878311156104f157600080fd5b928401925b8284101561050f578351825292840192908401906104f6565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105435761054361051a565b92915050565b60006001820161055b5761055b61051a565b506001019056fea2646970667358221220d187cda2a19fda8c79de3dc0ec997a8720eff7fc665888b30292d46794e53c1264736f6c63430008140033
Deployed ByteCode
0x73e2ac858c675a3ed81ab8042eb62cb81cd34c587830146080604052600436106100565760003560e01c80636400d2fa1461005b578063903ec6c114610092578063e67b5593146100ad578063ee3b1256146100c0575b600080fd5b61007673eb45a3c4aedd0f47f345fb4c8a1802bb5740d72581565b6040516001600160a01b03909116815260200160405180910390f35b61007673165c3410fc91ef562c50559f7d2289febed552d981565b6100766100bb366004610364565b6100db565b6100767398bf93ebf5c380c0e6ae8e192a7e2ae08edacc0281565b60408051600380825260808201909252600091829190602082016060803683370190505090507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc02816000815181106101295761012961041c565b60200260200101906001600160a01b031690816001600160a01b03168152505073165c3410fc91ef562c50559f7d2289febed552d9816001815181106101715761017161041c565b60200260200101906001600160a01b031690816001600160a01b03168152505073eb45a3c4aedd0f47f345fb4c8a1802bb5740d725816002815181106101b9576101b961041c565b60200260200101906001600160a01b031690816001600160a01b031681525050600073165c3410fc91ef562c50559f7d2289febed552d9925060005b82518110156102f0578281815181106102105761021061041c565b60200260200101516001600160a01b031663d06ca61f87876040518363ffffffff1660e01b8152600401610245929190610432565b600060405180830381865afa92505050801561028357506040513d6000823e601f3d908101601f191682016040526102809190810190610489565b60015b156102de57600081600183516102999190610530565b815181106102a9576102a961041c565b60200260200101519050838111156102db578093508483815181106102d0576102d061041c565b602002602001015195505b50505b806102e881610549565b9150506101f5565b50505092915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610338576103386102f9565b604052919050565b600067ffffffffffffffff82111561035a5761035a6102f9565b5060051b60200190565b6000806040838503121561037757600080fd5b8235915060208084013567ffffffffffffffff81111561039657600080fd5b8401601f810186136103a757600080fd5b80356103ba6103b582610340565b61030f565b81815260059190911b820183019083810190888311156103d957600080fd5b928401925b8284101561040d5783356001600160a01b03811681146103fe5760008081fd5b825292840192908401906103de565b80955050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b6000604082018483526020604081850152818551808452606086019150828701935060005b8181101561047c5784516001600160a01b031683529383019391830191600101610457565b5090979650505050505050565b6000602080838503121561049c57600080fd5b825167ffffffffffffffff8111156104b357600080fd5b8301601f810185136104c457600080fd5b80516104d26103b582610340565b81815260059190911b820183019083810190878311156104f157600080fd5b928401925b8284101561050f578351825292840192908401906104f6565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105435761054361051a565b92915050565b60006001820161055b5761055b61051a565b506001019056fea2646970667358221220d187cda2a19fda8c79de3dc0ec997a8720eff7fc665888b30292d46794e53c1264736f6c63430008140033