Amoy Testnet

Contract

0x9346cc39b1DeF4661CD9A933f91D2b21106180d9

Overview

POL Balance

Polygon PoS Chain Amoy LogoPolygon PoS Chain Amoy LogoPolygon PoS Chain Amoy Logo0 POL

Token Holdings

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Lock LP168054732025-01-13 10:39:2364 days ago1736764763IN
0x9346cc39...1106180d9
3.0202299 POL0.04699323143
Lock LP166821732025-01-10 9:40:0367 days ago1736502003IN
0x9346cc39...1106180d9
0.72588567 POL0.0062655837.25964002
Lock LP166777112025-01-10 7:02:0167 days ago1736492521IN
0x9346cc39...1106180d9
0.72588567 POL0.006198637.95
Lock LP166768522025-01-10 6:31:3767 days ago1736490697IN
0x9346cc39...1106180d9
0.72588567 POL0.0058805236.00000006
Lock LP166589822025-01-09 19:55:5767 days ago1736452557IN
0x9346cc39...1106180d9
13.9886989 POL0.00977330.17701403
Lock LP166235312025-01-08 21:26:3968 days ago1736371599IN
0x9346cc39...1106180d9
16.16425481 POL0.0120039836.00000001
Lock LP165673112025-01-07 12:15:1770 days ago1736252117IN
0x9346cc39...1106180d9
0.72588567 POL0.0064817739.67788002
Lock LP164792342025-01-05 8:15:4372 days ago1736064943IN
0x9346cc39...1106180d9
0.72588567 POL0.0050101630.67625
Lock LP164709282025-01-05 3:21:3372 days ago1736047293IN
0x9346cc39...1106180d9
0.72588567 POL0.0048640230.67625
Lock LP163789662025-01-02 21:03:5574 days ago1735851835IN
0x9346cc39...1106180d9
0.72588567 POL0.0050101630.67625
Lock LP163573062025-01-02 8:16:3175 days ago1735805791IN
0x9346cc39...1106180d9
0.72588567 POL0.0062631638.34531249
Lock LP162633942024-12-31 0:49:5777 days ago1735606197IN
0x9346cc39...1106180d9
0.72588567 POL0.0046133929.10000001
Lock LP162242392024-12-30 1:43:0378 days ago1735522983IN
0x9346cc39...1106180d9
0.72588567 POL0.0044111727.82442019
Lock LP162241402024-12-30 1:39:3378 days ago1735522773IN
0x9346cc39...1106180d9
0.72588567 POL0.0163091997
Lock LP161783362024-12-28 22:37:0379 days ago1735425423IN
0x9346cc39...1106180d9
0.72588567 POL0.0080166349.0806334
Lock LP161783312024-12-28 22:36:5179 days ago1735425411IN
0x9346cc39...1106180d9
0.72588567 POL0.0080166349.0806334
Lock LP161457532024-12-28 3:22:5180 days ago1735356171IN
0x9346cc39...1106180d9
0.72588567 POL0.0079902150.40000001
Lock LP161347792024-12-27 20:54:0980 days ago1735332849IN
0x9346cc39...1106180d9
0.72588567 POL0.0049213231.04
Lock LP161124012024-12-27 7:41:3181 days ago1735285291IN
0x9346cc39...1106180d9
0.72588567 POL0.0058805236.00000001
Lock LP160310132024-12-25 7:38:3583 days ago1735112315IN
0x9346cc39...1106180d9
2.86879225 POL0.0116576636.00000006
Lock LP158680122024-12-21 7:03:3587 days ago1734764615IN
0x9346cc39...1106180d9
2.99433196 POL0.0088725227
Lock LP157891382024-12-19 8:29:4189 days ago1734596981IN
0x9346cc39...1106180d9
0.72588567 POL0.0066538140.74
Lock LP157632442024-12-18 17:12:3389 days ago1734541953IN
0x9346cc39...1106180d9
0.72588567 POL0.0061981437.94999999
Lock LP157630292024-12-18 17:04:5789 days ago1734541497IN
0x9346cc39...1106180d9
2.78028127 POL0.0118300336.00000001
Lock LP157512462024-12-18 10:07:3390 days ago1734516453IN
0x9346cc39...1106180d9
2.78028127 POL0.0123636537.62387501
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
168054732025-01-13 10:39:2364 days ago1736764763
0x9346cc39...1106180d9
3.0202299 POL
166821732025-01-10 9:40:0367 days ago1736502003
0x9346cc39...1106180d9
0.72588567 POL
166777112025-01-10 7:02:0167 days ago1736492521
0x9346cc39...1106180d9
0.72588567 POL
166768522025-01-10 6:31:3767 days ago1736490697
0x9346cc39...1106180d9
0.72588567 POL
166589822025-01-09 19:55:5767 days ago1736452557
0x9346cc39...1106180d9
13.9886989 POL
166235312025-01-08 21:26:3968 days ago1736371599
0x9346cc39...1106180d9
16.16425481 POL
165673112025-01-07 12:15:1770 days ago1736252117
0x9346cc39...1106180d9
0.72588567 POL
164792342025-01-05 8:15:4372 days ago1736064943
0x9346cc39...1106180d9
0.72588567 POL
164709282025-01-05 3:21:3372 days ago1736047293
0x9346cc39...1106180d9
0.72588567 POL
163789662025-01-02 21:03:5574 days ago1735851835
0x9346cc39...1106180d9
0.72588567 POL
163573062025-01-02 8:16:3175 days ago1735805791
0x9346cc39...1106180d9
0.72588567 POL
162633942024-12-31 0:49:5777 days ago1735606197
0x9346cc39...1106180d9
0.72588567 POL
162242392024-12-30 1:43:0378 days ago1735522983
0x9346cc39...1106180d9
0.72588567 POL
162241402024-12-30 1:39:3378 days ago1735522773
0x9346cc39...1106180d9
0.72588567 POL
161783362024-12-28 22:37:0379 days ago1735425423
0x9346cc39...1106180d9
0.72588567 POL
161783312024-12-28 22:36:5179 days ago1735425411
0x9346cc39...1106180d9
0.72588567 POL
161457532024-12-28 3:22:5180 days ago1735356171
0x9346cc39...1106180d9
0.72588567 POL
161347792024-12-27 20:54:0980 days ago1735332849
0x9346cc39...1106180d9
0.72588567 POL
161124012024-12-27 7:41:3181 days ago1735285291
0x9346cc39...1106180d9
0.72588567 POL
160310132024-12-25 7:38:3583 days ago1735112315
0x9346cc39...1106180d9
2.86879225 POL
158680122024-12-21 7:03:3587 days ago1734764615
0x9346cc39...1106180d9
2.99433196 POL
157891382024-12-19 8:29:4189 days ago1734596981
0x9346cc39...1106180d9
0.72588567 POL
157632442024-12-18 17:12:3389 days ago1734541953
0x9346cc39...1106180d9
0.72588567 POL
157630292024-12-18 17:04:5789 days ago1734541497
0x9346cc39...1106180d9
2.78028127 POL
157512462024-12-18 10:07:3390 days ago1734516453
0x9346cc39...1106180d9
2.78028127 POL
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LockLPLightChain

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 11 : LockLP_Lightchain.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.24;

import "../lightChains/Owned.sol";
import "../lightChains/MixinResolver.sol";
import "../interfaces/ISynthrBridgeLightChain.sol";
import "../interfaces/IERC20.sol";
import "../interfaces/ISystemStatus.sol";

contract LockLPLightChain is MixinResolver, Owned {
    // ========== STATE VARIABLES ==========
    address public lpToken;
    bytes32 public constant CONTRACT_NAME = "LockLP";
    bytes32 private constant CONTRACT_SYSTEMSTATUS = "SystemStatus";
    uint16 internal constant PT_LOCK_LP = 16;

    modifier systemActive() {
        _systemActive();
        _;
    }

    event LPLocked(address indexed account, bytes32 bridgeName, uint256 amount);
    event LPUnlocked(address indexed account, uint256 amount);

    constructor(
        address _owner,
        address _resolver,
        address _lpToken
    ) Owned(_owner) MixinResolver(_resolver) {
        lpToken = _lpToken;
    }

    // Note: use public visibility so that it can be invoked in a subclass
    function resolverAddressesRequired() public pure override returns (bytes32[] memory addresses) {
        addresses = new bytes32[](1);
        addresses[0] = CONTRACT_SYSTEMSTATUS;
    }

    function _systemActive() private view {
        systemStatus().requireSystemActive();
    }

    function systemStatus() internal view returns (ISystemStatus) {
        return ISystemStatus(requireAndGetAddress(CONTRACT_SYSTEMSTATUS));
    }

    function synthrBridge(bytes32 bridgeName) internal view returns (ISynthrBridge) {
        return ISynthrBridge(resolver.getAvailableBridge(bridgeName));
    }

    function getLockLPgasFee(
        address _account,
        uint256 _amount,
        bytes32 _bridgeName,
        uint16 _destChainId
    ) external view returns (uint256) {
        bytes memory lzPayload = abi.encode(PT_LOCK_LP, abi.encodePacked(_account), _amount);
        return synthrBridge(_bridgeName).calcFee(lzPayload, PT_LOCK_LP, _destChainId);
    }

    function lockLP(
        uint256 _amount,
        bytes32 _bridgeName,
        bool _erc20Payment
    ) external payable systemActive {
        require(
            IERC20(lpToken).transferFrom(msg.sender, address(this), _amount),
            "LP token transfer failed"
        );
        require(msg.value > 0, "LockLP: msg.value must be greater than 0");

        synthrBridge(_bridgeName).sendLockLP{value: msg.value}(msg.sender, _amount, _erc20Payment);

        emit LPLocked(msg.sender, _bridgeName, _amount);
    }

    function unlockLP(address _to, uint256 _amount) external onlySynthrBridge {
        IERC20(lpToken).transfer(_to, _amount);
        emit LPUnlocked(_to, _amount);
    }

    function setLpToken(address _lpToken) external onlyOwner {
        lpToken = _lpToken;
    }

    modifier onlySynthrBridge() {
        require(
            resolver.isBridge(msg.sender),
            "LockLP: Only the SynthrBridge contract can perform this action"
        );
        _;
    }
}

File 2 of 11 : IAddressResolver.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.24;

interface IAddressResolver {
    function getAddress(bytes32 name) external view returns (address);

    function getSynth(bytes32 key) external view returns (address);

    function getAvailableBridge(bytes32 bridgeName) external view returns (address);

    function getBridgeList() external view returns (bytes32[] memory);

    function requireAndGetAddress(
        bytes32 name,
        string calldata reason
    ) external view returns (address);
}

File 3 of 11 : IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.24;

interface IERC20 {
    // ERC20 Optional Views
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    // Views
    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    // Mutative functions
    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    // Events
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 4 of 11 : IExchanger.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.24;

interface IExchanger {
    struct ExchangeEntrySettlement {
        bytes32 src;
        uint256 amount;
        bytes32 dest;
        uint256 reclaim;
        uint256 rebate;
        uint256 srcRoundIdAtPeriodEnd;
        uint256 destRoundIdAtPeriodEnd;
        uint256 timestamp;
    }

    struct ExchangeEntry {
        uint256 sourceRate;
        uint256 destinationRate;
        uint256 destinationAmount;
        uint256 exchangeFeeRate;
        uint256 exchangeDynamicFeeRate;
        uint256 roundIdForSrc;
        uint256 roundIdForDest;
    }

    struct ExchangeArgs {
        address fromAccount;
        address destAccount;
        bytes32 sourceCurrencyKey;
        bytes32 destCurrencyKey;
        uint256 sourceAmount;
        uint256 destAmount;
        uint256 fee;
        uint256 reclaimed;
        uint256 refunded;
        uint16 destChainId;
        bool erc20Payment;
    }

    // Views
    function calculateAmountAfterSettlement(
        address from,
        bytes32 currencyKey,
        uint256 amount,
        uint256 refunded
    ) external view returns (uint256 amountAfterSettlement);

    function isSynthRateInvalid(bytes32 currencyKey) external view returns (bool);

    function maxSecsLeftInWaitingPeriod(
        address account,
        bytes32 currencyKey
    ) external view returns (uint256);

    function settlementOwing(
        address account,
        bytes32 currencyKey
    ) external view returns (uint256 reclaimAmount, uint256 rebateAmount, uint256 numEntries);

    // function hasWaitingPeriodOrSettlementOwing(address account, bytes32 currencyKey) external view returns (bool);

    function feeRateForExchange(
        bytes32 sourceCurrencyKey,
        bytes32 destinationCurrencyKey
    ) external view returns (uint256);

    function dynamicFeeRateForExchange(
        bytes32 sourceCurrencyKey,
        bytes32 destinationCurrencyKey
    ) external view returns (uint256 feeRate, bool tooVolatile);

    function getAmountsForExchange(
        uint256 sourceAmount,
        bytes32 sourceCurrencyKey,
        bytes32 destinationCurrencyKey
    ) external view returns (uint256 amountReceived, uint256 fee, uint256 exchangeFeeRate);

    // function priceDeviationThresholdFactor() external view returns (uint256);

    // function waitingPeriodSecs() external view returns (uint256);

    // function lastExchangeRate(bytes32 currencyKey) external view returns (uint256);

    // Mutative functions
    function exchange(
        ExchangeArgs calldata args,
        bytes32 bridgeName
    ) external payable returns (uint256 amountReceived);

    function exchangeAtomically(
        uint256 minAmount,
        ExchangeArgs calldata args,
        bytes32 bridgeName
    ) external payable returns (uint256 amountReceived);

    function settle(
        address from,
        bytes32 currencyKey
    ) external returns (uint256 reclaimed, uint256 refunded, uint256 numEntries);

    function suspendSynthWithInvalidRate(bytes32 currencyKey) external;

    function updateDestinationForExchange(
        address recipient,
        bytes32 destinationKey,
        uint256 destinationAmount
    ) external;
}

File 5 of 11 : IIssuer.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.24;

import "../interfaces/ISynth.sol";

interface IIssuer {
    // Views

    function allNetworksDebtInfo() external view returns (uint256 debt, uint256 sharesSupply);

    function availableCurrencyKeys() external view returns (bytes32[] memory);

    function availableSynthCount() external view returns (uint256);

    function availableSynths(uint256 index) external view returns (ISynth);

    function canBurnSynths(address account) external view returns (bool);

    function collateral(address account) external view returns (uint256);

    function collateralisationRatio(address issuer) external view returns (uint256);

    function collateralisationRatioAndAnyRatesInvalid(
        address _issuer
    ) external view returns (uint256 cratio, bool anyRateIsInvalid);

    function debtBalanceOf(address issuer) external view returns (uint256 debtBalance);

    function issuanceRatio() external view returns (uint256);

    function lastIssueEvent(address account) external view returns (uint256);

    function maxIssuableSynths(address issuer) external view returns (uint256 maxIssuable);

    function minimumStakeTime() external view returns (uint256);

    function remainingIssuableSynths(
        address issuer
    ) external view returns (uint256 maxIssuable, uint256 alreadyIssued, uint256 totalSystemDebt);

    function synths(bytes32 currencyKey) external view returns (ISynth);

    function getSynths(bytes32[] calldata currencyKeys) external view returns (ISynth[] memory);

    function synthsByAddress(address synthAddress) external view returns (bytes32);

    function totalIssuedSynths(bytes32 currencyKey) external view returns (uint256);

    function checkFreeCollateral(
        address _issuer,
        bytes32 _collateralKey,
        uint16 _chainId
    ) external view returns (uint256 withdrawableSynthr);

    function issueSynths(
        address from,
        uint256 amount,
        uint256 destChainId
    ) external returns (uint256 synthAmount, uint256 debtShare);

    function issueMaxSynths(
        address from,
        uint256 destChainId
    ) external returns (uint256 synthAmount, uint256 debtShare);

    function burnSynths(
        address from,
        bytes32 synthKey,
        uint256 amount
    )
        external
        returns (uint256 synthAmount, uint256 debtShare, uint256 reclaimed, uint256 refunded);

    function burnSynthsToTarget(
        address from,
        bytes32 synthKey
    )
        external
        returns (uint256 synthAmount, uint256 debtShare, uint256 reclaimed, uint256 refunded);

    function burnForRedemption(
        address deprecatedSynthProxy,
        address account,
        uint256 balance
    ) external;

    function burnSynthsWithoutDebt(
        bytes32 currencyKey,
        address from,
        uint amount
    ) external returns (uint256 burnAmount);

    function synthIssueFromSynthrSwap(
        address _account,
        bytes32 _synthKey,
        uint256 _synthAmount
    ) external;

    function liquidateAccount(
        address account,
        bytes32 collateralKey,
        uint16 chainId,
        bool isSelfLiquidation
    ) external returns (uint256 totalRedeemed, uint256 amountToLiquidate, uint256 sharesToRemove);

    function destIssue(address _account, bytes32 _synthKey, uint256 _synthAmount) external;

    function destBurn(
        address _account,
        bytes32 _synthKey,
        uint256 _synthAmount
    ) external returns (uint256);

    function transferMargin(address account, uint256 marginDelta) external returns (uint256);

    function destTransferMargin(
        address _account,
        uint256 _marginDelta,
        bytes32 _marketKey
    ) external returns (bool);

    function setCurrentPeriodId(uint128 periodId) external;
}

File 6 of 11 : ISynth.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.24;

interface ISynth {
    // Views
    function balanceOf(address _account) external view returns (uint256);

    function currencyKey() external view returns (bytes32);

    function transferableSynths(address account) external view returns (uint256);

    // Mutative functions
    function transferAndSettle(address to, uint256 value) external payable returns (bool);

    function transferFromAndSettle(
        address from,
        address to,
        uint256 value
    ) external payable returns (bool);

    function burn(address account, uint256 amount) external;

    function issue(address account, uint256 amount) external;
}

File 7 of 11 : ISynthrBridgeLightChain.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.24;

import "./IExchanger.sol";

interface ISynthrBridge {
    /* ========== MUTATIVE FUNCTIONS ========== */
    function sendDepositCollateral(
        address account,
        bytes32 collateralKey,
        uint256 amount,
        bool erc20Payment
    ) external payable;

    function sendBurn(
        address account,
        bytes32 synthKey,
        uint256 amount,
        bool erc20Payment
    ) external payable;

    function sendExchange(
        address account,
        bytes32 srcSynthKey,
        bytes32 dstSynthKey,
        uint256 srcAmount,
        uint256 dstAmount,
        uint256 reclaimed,
        uint256 refunded,
        uint256 fee,
        uint16 dstChainId,
        bool erc20Payment
    ) external payable;

    // function sendBridgeSyToken(
    //     address account,
    //     bytes32 synthKey,
    //     uint256 amount,
    //     uint16 dstChainId,
    //     bool erc20Payment
    // ) external payable;

    function sendTransferMargin(
        address account,
        uint256 amount,
        bytes32 marketKey,
        bool erc20Payment
    ) external payable;

    function sendCrossSwapSyAssetToNative(
        address account,
        bytes32 srcKey,
        uint256 srcAmount,
        bytes32 dstKey,
        uint256 dstAmount,
        uint16 dstChainId,
        uint256 fee,
        bytes calldata dexPayload,
        address dexAddress,
        bool erc20Payment
    ) external payable;

    function sendCrossSwapNativeToSyAsset(
        address account,
        bytes32 srcKey,
        uint256 srcAmount,
        bytes32 dstKey,
        uint256 dstAmount,
        uint16 dstChainId,
        uint256 fee,
        bool erc20Payment
    ) external payable;

    function sendCrossSwapNativeToNative(
        address account,
        bytes32 srcKey,
        uint256 srcAmount,
        bytes32 dstKey,
        uint256 dstAmount,
        uint16 dstChainId,
        uint256 fee,
        address dexAddress,
        bytes calldata dexPayload,
        bool erc20Payment
    ) external payable;

    function sendCrossSwapSyAssetToNativeWithDex(
        address account,
        bytes32 srcKey,
        uint256 srcAmount,
        bytes32 dstKey,
        uint256 dstAmount,
        uint16 dstChainId,
        uint256 fee,
        bool erc20Payment
    ) external payable;

    function sendCrossSwapNativeToNativeWithDex(
        address account,
        bytes32 srcKey,
        uint256 srcAmount,
        bytes32 dstKey,
        uint256 dstAmount,
        uint16 dstChainId,
        uint256 fee,
        bool erc20Payment
    ) external payable;

    // function sendExchange(IExchanger.ExchangeArgs calldata args) external payable;

    function calcFee(
        bytes memory lzPayload,
        uint16 packetType,
        uint16 dstChainId
    ) external view returns (uint256 lzFee);

    function sendLockLP(address account, uint256 amount, bool erc20Payment) external payable;
}

File 8 of 11 : ISystemStatus.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.24;

interface ISystemStatus {
    struct Status {
        bool canSuspend;
        bool canResume;
    }

    struct Suspension {
        bool suspended;
        // reason is an integer code,
        // 0 => no reason, 1 => upgrading, 2+ => defined by system usage
        uint248 reason;
    }

    // Views
    function accessControl(
        bytes32 section,
        address account
    ) external view returns (bool canSuspend, bool canResume);

    function requireSystemActive() external view;

    function systemSuspended() external view returns (bool);

    function requireIssuanceActive() external view;

    function requireExchangeActive() external view;

    function requireFuturesActive() external view;

    function requireFuturesMarketActive(bytes32 marketKey) external view;

    function requireExchangeBetweenSynthsAllowed(
        bytes32 sourceCurrencyKey,
        bytes32 destinationCurrencyKey
    ) external view;

    function requireSynthActive(bytes32 currencyKey) external view;

    function synthSuspended(bytes32 currencyKey) external view returns (bool);

    function requireSynthsActive(
        bytes32 sourceCurrencyKey,
        bytes32 destinationCurrencyKey
    ) external view;

    function systemSuspension() external view returns (bool suspended, uint248 reason);

    function issuanceSuspension() external view returns (bool suspended, uint248 reason);

    function exchangeSuspension() external view returns (bool suspended, uint248 reason);

    function futuresSuspension() external view returns (bool suspended, uint248 reason);

    function synthExchangeSuspension(
        bytes32 currencyKey
    ) external view returns (bool suspended, uint248 reason);

    function synthSuspension(
        bytes32 currencyKey
    ) external view returns (bool suspended, uint248 reason);

    function futuresMarketSuspension(
        bytes32 marketKey
    ) external view returns (bool suspended, uint248 reason);

    function getSynthExchangeSuspensions(
        bytes32[] calldata synths
    ) external view returns (bool[] memory exchangeSuspensions, uint256[] memory reasons);

    function getSynthSuspensions(
        bytes32[] calldata synths
    ) external view returns (bool[] memory suspensions, uint256[] memory reasons);

    function getFuturesMarketSuspensions(
        bytes32[] calldata marketKeys
    ) external view returns (bool[] memory suspensions, uint256[] memory reasons);

    // Restricted functions
    function suspendIssuance(uint256 reason) external;

    function suspendSynth(bytes32 currencyKey, uint256 reason) external;

    function suspendFuturesMarket(bytes32 marketKey, uint256 reason) external;

    function updateAccessControl(
        bytes32 section,
        address account,
        bool canSuspend,
        bool canResume
    ) external;
}

File 9 of 11 : AddressResolverLightChain.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.24;

// Inheritance
import "./Owned.sol";
import "../interfaces/IAddressResolver.sol";

// Internal references
import "../interfaces/IIssuer.sol";
import "./MixinResolver.sol";

contract AddressResolverLightChain is Owned, IAddressResolver {
    mapping(bytes32 => address) public repository;
    mapping(bytes32 => address) public availableBridge;
    mapping(address => bool) public isBridge;

    bytes32[] public bridgeList;

    constructor(address _owner) Owned(_owner) {}

    /* ========== RESTRICTED FUNCTIONS ========== */

    function importAddresses(
        bytes32[] calldata names,
        address[] calldata destinations
    ) external onlyOwner {
        require(names.length == destinations.length, "Input lengths must match");

        for (uint256 i = 0; i < names.length; i++) {
            bytes32 name = names[i];
            address destination = destinations[i];
            repository[name] = destination;
            emit AddressImported(name, destination);
        }
    }

    function addAvailableBridge(bytes32 bridgeName, address bridgeAddress) external onlyOwner {
        _addAvailableBridge(bridgeName, bridgeAddress);
    }

    function removeAvailableBridge(bytes32 bridgeName) external onlyOwner {
        _removeAvailableBridge(bridgeName);
    }

    /* ========= PUBLIC FUNCTIONS ========== */

    function rebuildCaches(MixinResolver[] calldata destinations) external {
        for (uint256 i = 0; i < destinations.length; i++) {
            destinations[i].rebuildCache();
        }
    }

    /* ========== PRIVATE FUNCTIONS ========== */
    function _addAvailableBridge(bytes32 bridgeName, address bridgeAddress) private {
        if (availableBridge[bridgeName] != address(0)) {
            _removeAvailableBridge(bridgeName);
        }
        availableBridge[bridgeName] = bridgeAddress;
        isBridge[bridgeAddress] = true;
        bridgeList.push(bridgeName);
        emit AddBridge(bridgeName, bridgeAddress);
    }

    function _removeAvailableBridge(bytes32 bridgeName) private {
        require(availableBridge[bridgeName] != address(0), "The bridge no exist.");
        uint lastBridgeNumber = bridgeList.length - 1;
        for (uint ii = 0; ii <= lastBridgeNumber; ii++) {
            if (bridgeList[ii] == bridgeName) {
                bridgeList[ii] = bridgeList[lastBridgeNumber];
                bridgeList.pop();
                break;
            }
        }
        address bridgeToRemove = availableBridge[bridgeName];
        delete availableBridge[bridgeName];
        delete isBridge[bridgeToRemove];
        emit RemoveBridge(bridgeName, bridgeToRemove);
    }

    /* ========== VIEWS ========== */

    function areAddressesImported(
        bytes32[] calldata names,
        address[] calldata destinations
    ) external view returns (bool) {
        for (uint256 i = 0; i < names.length; i++) {
            if (repository[names[i]] != destinations[i]) {
                return false;
            }
        }
        return true;
    }

    function getAddress(bytes32 name) external view returns (address) {
        return repository[name];
    }

    function requireAndGetAddress(
        bytes32 name,
        string calldata reason
    ) external view returns (address) {
        address _foundAddress = repository[name];
        require(_foundAddress != address(0), reason);
        return _foundAddress;
    }

    function getSynth(bytes32 key) external view returns (address) {
        IIssuer issuer = IIssuer(repository["Issuer"]);
        require(address(issuer) != address(0), "Cannot find Issuer address");
        return address(issuer.synths(key));
    }

    function getAvailableBridge(bytes32 bridgeName) external view returns (address) {
        return availableBridge[bridgeName];
    }

    function getBridgeList() external view returns (bytes32[] memory) {
        return bridgeList;
    }

    /* ========== EVENTS ========== */

    event AddressImported(bytes32 name, address destination);
    event AddBridge(bytes32 indexed bridgeName, address bridgeAddress);
    event RemoveBridge(bytes32 indexed bridgeName, address bridgeAddress);
}

File 10 of 11 : MixinResolver.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.24;

// Internal references
import "./AddressResolverLightChain.sol";

contract MixinResolver {
    AddressResolverLightChain public resolver;

    mapping(bytes32 => address) private addressCache;

    constructor(address _resolver) {
        resolver = AddressResolverLightChain(_resolver);
    }

    /* ========== INTERNAL FUNCTIONS ========== */

    function combineArrays(
        bytes32[] memory first,
        bytes32[] memory second
    ) internal pure returns (bytes32[] memory combination) {
        combination = new bytes32[](first.length + second.length);

        for (uint256 i = 0; i < first.length; i++) {
            combination[i] = first[i];
        }

        for (uint256 j = 0; j < second.length; j++) {
            combination[first.length + j] = second[j];
        }
    }

    /* ========== PUBLIC FUNCTIONS ========== */

    // Note: this function is public not external in order for it to be overridden and invoked via super in subclasses
    function resolverAddressesRequired() public view virtual returns (bytes32[] memory addresses) {}

    function rebuildCache() public {
        bytes32[] memory requiredAddresses = resolverAddressesRequired();
        // The resolver must call this function whenver it updates its state
        for (uint256 i = 0; i < requiredAddresses.length; i++) {
            bytes32 name = requiredAddresses[i];
            // Note: can only be invoked once the resolver has all the targets needed added
            address destination = resolver.requireAndGetAddress(
                name,
                string(abi.encodePacked("Resolver missing target: ", name))
            );
            addressCache[name] = destination;
            emit CacheUpdated(name, destination);
        }
    }

    /* ========== VIEWS ========== */

    function isResolverCached() external view returns (bool) {
        bytes32[] memory requiredAddresses = resolverAddressesRequired();
        for (uint256 i = 0; i < requiredAddresses.length; i++) {
            bytes32 name = requiredAddresses[i];
            // false if our cache is invalid or if the resolver doesn't have the required address
            if (
                resolver.getAddress(name) != addressCache[name] || addressCache[name] == address(0)
            ) {
                return false;
            }
        }

        return true;
    }

    /* ========== INTERNAL FUNCTIONS ========== */

    function requireAndGetAddress(bytes32 name) internal view returns (address) {
        address _foundAddress = addressCache[name];
        require(_foundAddress != address(0), string(abi.encodePacked("Missing address: ", name)));
        return _foundAddress;
    }

    /* ========== EVENTS ========== */

    event CacheUpdated(bytes32 name, address destination);
}

File 11 of 11 : Owned.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.24;

contract Owned {
    address public owner;
    address public nominatedOwner;

    constructor(address _owner) {
        require(_owner != address(0), "Owner address cannot be 0");
        owner = _owner;
        emit OwnerChanged(address(0), _owner);
    }

    function nominateNewOwner(address _owner) external onlyOwner {
        nominatedOwner = _owner;
        emit OwnerNominated(_owner);
    }

    function acceptOwnership() external {
        require(
            msg.sender == nominatedOwner,
            "You must be nominated before you can accept ownership"
        );
        emit OwnerChanged(owner, nominatedOwner);
        owner = nominatedOwner;
        nominatedOwner = address(0);
    }

    modifier onlyOwner() {
        _onlyOwner();
        _;
    }

    function _onlyOwner() private view {
        require(msg.sender == owner, "Only the contract owner may perform this action");
    }

    event OwnerNominated(address newOwner);
    event OwnerChanged(address oldOwner, address newOwner);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_resolver","type":"address"},{"internalType":"address","name":"_lpToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"name","type":"bytes32"},{"indexed":false,"internalType":"address","name":"destination","type":"address"}],"name":"CacheUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bytes32","name":"bridgeName","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LPLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LPUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"inputs":[],"name":"CONTRACT_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_bridgeName","type":"bytes32"},{"internalType":"uint16","name":"_destChainId","type":"uint16"}],"name":"getLockLPgasFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isResolverCached","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_bridgeName","type":"bytes32"},{"internalType":"bool","name":"_erc20Payment","type":"bool"}],"name":"lockLP","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"lpToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebuildCache","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resolver","outputs":[{"internalType":"contract AddressResolverLightChain","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resolverAddressesRequired","outputs":[{"internalType":"bytes32[]","name":"addresses","type":"bytes32[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"}],"name":"setLpToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unlockLP","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5060405161117d38038061117d83398101604081905261002f91610141565b600080546001600160a01b0319166001600160a01b0384811691909117909155839081166100a35760405162461bcd60e51b815260206004820152601960248201527f4f776e657220616464726573732063616e6e6f74206265203000000000000000604482015260640160405180910390fd5b600280546001600160a01b0319166001600160a01b038316908117909155604080516000815260208101929092527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a150600480546001600160a01b0319166001600160a01b0392909216919091179055506101849050565b80516001600160a01b038116811461013c57600080fd5b919050565b60008060006060848603121561015657600080fd5b61015f84610125565b925061016d60208501610125565b915061017b60408501610125565b90509250925092565b610fea806101936000396000f3fe6080604052600436106100dd5760003560e01c8063741853601161007f5780638da5cb5b116100595780638da5cb5b1461023d5780639ee933b51461025d578063c155a8e21461027d578063fa97b9221461029d57600080fd5b806374185360146101f157806379ba509714610206578063899ffef41461021b57600080fd5b80632af64bd3116100bb5780632af64bd31461016f57806353a47bb7146101945780635fcbd285146101b4578063614d08f8146101d457600080fd5b806304f3bcec146100e257806312534c161461011f5780631627540c1461014d575b600080fd5b3480156100ee57600080fd5b50600054610102906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561012b57600080fd5b5061013f61013a366004610d4a565b6102b0565b604051908152602001610116565b34801561015957600080fd5b5061016d610168366004610d9b565b610389565b005b34801561017b57600080fd5b506101846103e5565b6040519015158152602001610116565b3480156101a057600080fd5b50600354610102906001600160a01b031681565b3480156101c057600080fd5b50600454610102906001600160a01b031681565b3480156101e057600080fd5b5061013f6504c6f636b4c560d41b81565b3480156101fd57600080fd5b5061016d6104ea565b34801561021257600080fd5b5061016d610663565b34801561022757600080fd5b50610230610752565b6040516101169190610dbf565b34801561024957600080fd5b50600254610102906001600160a01b031681565b34801561026957600080fd5b5061016d610278366004610d9b565b6107a6565b34801561028957600080fd5b5061016d610298366004610e03565b6107d0565b61016d6102ab366004610e3d565b61096f565b60408051606086901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820190925260009182916102f4916010918890605401610ebc565b604051602081830303815290604052905061030e84610b56565b6001600160a01b0316632bb821bd826010866040518463ffffffff1660e01b815260040161033e93929190610ee9565b602060405180830381865afa15801561035b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037f9190610f17565b9695505050505050565b610391610bc9565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229060200160405180910390a150565b6000806103f0610752565b905060005b81518110156104e157600082828151811061041257610412610f30565b60209081029190910181015160008181526001909252604080832054925490516321f8a72160e01b8152600481018390529193506001600160a01b039283169216906321f8a72190602401602060405180830381865afa15801561047a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049e9190610f46565b6001600160a01b03161415806104c957506000818152600160205260409020546001600160a01b0316155b156104d8576000935050505090565b506001016103f5565b50600191505090565b60006104f4610752565b905060005b815181101561065f57600082828151811061051657610516610f30565b6020026020010151905060008060009054906101000a90046001600160a01b03166001600160a01b031663dacb2d01838460405160200161058391907f5265736f6c766572206d697373696e67207461726765743a20000000000000008152601981019190915260390190565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016105af929190610f63565b602060405180830381865afa1580156105cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f09190610f46565b60008381526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251868152918201529192507f88a93678a3692f6789d9546fc621bf7234b101ddb7d4fe479455112831b8aa68910160405180910390a150506001016104f9565b5050565b6003546001600160a01b031633146106e05760405162461bcd60e51b815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527402063616e20616363657074206f776e65727368697605c1b60648201526084015b60405180910390fd5b600254600354604080516001600160a01b0393841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a160038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b604080516001808252818301909252606091602080830190803683370190505090506b53797374656d53746174757360a01b8160008151811061079757610797610f30565b60200260200101818152505090565b6107ae610bc9565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600054604051633933006760e11b81523360048201526001600160a01b039091169063726600ce90602401602060405180830381865afa158015610818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083c9190610f84565b6108ae5760405162461bcd60e51b815260206004820152603e60248201527f4c6f636b4c503a204f6e6c79207468652053796e74687242726964676520636f60448201527f6e74726163742063616e20706572666f726d207468697320616374696f6e000060648201526084016106d7565b6004805460405163a9059cbb60e01b81526001600160a01b03858116938201939093526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610903573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109279190610f84565b50816001600160a01b03167f2eab39e96175731c01c457424b5afe77321256924558c30352fca0eb622a9c7e8260405161096391815260200190565b60405180910390a25050565b610977610c3d565b600480546040516323b872dd60e01b81523392810192909252306024830152604482018590526001600160a01b0316906323b872dd906064016020604051808303816000875af11580156109cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f39190610f84565b610a3f5760405162461bcd60e51b815260206004820152601860248201527f4c5020746f6b656e207472616e73666572206661696c6564000000000000000060448201526064016106d7565b60003411610aa05760405162461bcd60e51b815260206004820152602860248201527f4c6f636b4c503a206d73672e76616c7565206d75737420626520677265617465604482015267072207468616e20360c41b60648201526084016106d7565b610aa982610b56565b60405163e60a8b4b60e01b81523360048201526024810185905282151560448201526001600160a01b03919091169063e60a8b4b9034906064016000604051808303818588803b158015610afc57600080fd5b505af1158015610b10573d6000803e3d6000fd5b505060408051868152602081018890523394507fbe50c0b712540d175145f047335615d983ed6379c41afec4f3d96672cd9670ca935001905060405180910390a2505050565b6000805460405162c8ac9760e41b8152600481018490526001600160a01b0390911690630c8ac97090602401602060405180830381865afa158015610b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc39190610f46565b92915050565b6002546001600160a01b03163314610c3b5760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201526e37b936903a3434b99030b1ba34b7b760891b60648201526084016106d7565b565b610c45610c97565b6001600160a01b031663086dabd16040518163ffffffff1660e01b815260040160006040518083038186803b158015610c7d57600080fd5b505afa158015610c91573d6000803e3d6000fd5b50505050565b6000610cb16b53797374656d53746174757360a01b610cb6565b905090565b600081815260016020908152604080832054905170026b4b9b9b4b7339030b2323932b9b99d1607d1b92810192909252603182018490526001600160a01b0316908115159060510160405160208183030381529060405290610d2b5760405162461bcd60e51b81526004016106d79190610fa1565b5092915050565b6001600160a01b0381168114610d4757600080fd5b50565b60008060008060808587031215610d6057600080fd5b8435610d6b81610d32565b93506020850135925060408501359150606085013561ffff81168114610d9057600080fd5b939692955090935050565b600060208284031215610dad57600080fd5b8135610db881610d32565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610df757835183529284019291840191600101610ddb565b50909695505050505050565b60008060408385031215610e1657600080fd5b8235610e2181610d32565b946020939093013593505050565b8015158114610d4757600080fd5b600080600060608486031215610e5257600080fd5b83359250602084013591506040840135610e6b81610e2f565b809150509250925092565b6000815180845260005b81811015610e9c57602081850181015186830182015201610e80565b506000602082860101526020601f19601f83011685010191505092915050565b61ffff84168152606060208201526000610ed96060830185610e76565b9050826040830152949350505050565b606081526000610efc6060830186610e76565b61ffff94851660208401529290931660409091015292915050565b600060208284031215610f2957600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610f5857600080fd5b8151610db881610d32565b828152604060208201526000610f7c6040830184610e76565b949350505050565b600060208284031215610f9657600080fd5b8151610db881610e2f565b602081526000610db86020830184610e7656fea26469706673582212203028f6acb4f15247793f0ff3e79dcc8f7c69f4b0cb1d1574e299a581cdca2b1964736f6c634300081800330000000000000000000000007802edc1ae4c39ed9f3dd2759007b9cb31b347a3000000000000000000000000a996800258629fe4064fa98758e122ad677206130000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106100dd5760003560e01c8063741853601161007f5780638da5cb5b116100595780638da5cb5b1461023d5780639ee933b51461025d578063c155a8e21461027d578063fa97b9221461029d57600080fd5b806374185360146101f157806379ba509714610206578063899ffef41461021b57600080fd5b80632af64bd3116100bb5780632af64bd31461016f57806353a47bb7146101945780635fcbd285146101b4578063614d08f8146101d457600080fd5b806304f3bcec146100e257806312534c161461011f5780631627540c1461014d575b600080fd5b3480156100ee57600080fd5b50600054610102906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561012b57600080fd5b5061013f61013a366004610d4a565b6102b0565b604051908152602001610116565b34801561015957600080fd5b5061016d610168366004610d9b565b610389565b005b34801561017b57600080fd5b506101846103e5565b6040519015158152602001610116565b3480156101a057600080fd5b50600354610102906001600160a01b031681565b3480156101c057600080fd5b50600454610102906001600160a01b031681565b3480156101e057600080fd5b5061013f6504c6f636b4c560d41b81565b3480156101fd57600080fd5b5061016d6104ea565b34801561021257600080fd5b5061016d610663565b34801561022757600080fd5b50610230610752565b6040516101169190610dbf565b34801561024957600080fd5b50600254610102906001600160a01b031681565b34801561026957600080fd5b5061016d610278366004610d9b565b6107a6565b34801561028957600080fd5b5061016d610298366004610e03565b6107d0565b61016d6102ab366004610e3d565b61096f565b60408051606086901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820190925260009182916102f4916010918890605401610ebc565b604051602081830303815290604052905061030e84610b56565b6001600160a01b0316632bb821bd826010866040518463ffffffff1660e01b815260040161033e93929190610ee9565b602060405180830381865afa15801561035b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037f9190610f17565b9695505050505050565b610391610bc9565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229060200160405180910390a150565b6000806103f0610752565b905060005b81518110156104e157600082828151811061041257610412610f30565b60209081029190910181015160008181526001909252604080832054925490516321f8a72160e01b8152600481018390529193506001600160a01b039283169216906321f8a72190602401602060405180830381865afa15801561047a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061049e9190610f46565b6001600160a01b03161415806104c957506000818152600160205260409020546001600160a01b0316155b156104d8576000935050505090565b506001016103f5565b50600191505090565b60006104f4610752565b905060005b815181101561065f57600082828151811061051657610516610f30565b6020026020010151905060008060009054906101000a90046001600160a01b03166001600160a01b031663dacb2d01838460405160200161058391907f5265736f6c766572206d697373696e67207461726765743a20000000000000008152601981019190915260390190565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016105af929190610f63565b602060405180830381865afa1580156105cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f09190610f46565b60008381526001602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251868152918201529192507f88a93678a3692f6789d9546fc621bf7234b101ddb7d4fe479455112831b8aa68910160405180910390a150506001016104f9565b5050565b6003546001600160a01b031633146106e05760405162461bcd60e51b815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527402063616e20616363657074206f776e65727368697605c1b60648201526084015b60405180910390fd5b600254600354604080516001600160a01b0393841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a160038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b604080516001808252818301909252606091602080830190803683370190505090506b53797374656d53746174757360a01b8160008151811061079757610797610f30565b60200260200101818152505090565b6107ae610bc9565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b600054604051633933006760e11b81523360048201526001600160a01b039091169063726600ce90602401602060405180830381865afa158015610818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083c9190610f84565b6108ae5760405162461bcd60e51b815260206004820152603e60248201527f4c6f636b4c503a204f6e6c79207468652053796e74687242726964676520636f60448201527f6e74726163742063616e20706572666f726d207468697320616374696f6e000060648201526084016106d7565b6004805460405163a9059cbb60e01b81526001600160a01b03858116938201939093526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610903573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109279190610f84565b50816001600160a01b03167f2eab39e96175731c01c457424b5afe77321256924558c30352fca0eb622a9c7e8260405161096391815260200190565b60405180910390a25050565b610977610c3d565b600480546040516323b872dd60e01b81523392810192909252306024830152604482018590526001600160a01b0316906323b872dd906064016020604051808303816000875af11580156109cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f39190610f84565b610a3f5760405162461bcd60e51b815260206004820152601860248201527f4c5020746f6b656e207472616e73666572206661696c6564000000000000000060448201526064016106d7565b60003411610aa05760405162461bcd60e51b815260206004820152602860248201527f4c6f636b4c503a206d73672e76616c7565206d75737420626520677265617465604482015267072207468616e20360c41b60648201526084016106d7565b610aa982610b56565b60405163e60a8b4b60e01b81523360048201526024810185905282151560448201526001600160a01b03919091169063e60a8b4b9034906064016000604051808303818588803b158015610afc57600080fd5b505af1158015610b10573d6000803e3d6000fd5b505060408051868152602081018890523394507fbe50c0b712540d175145f047335615d983ed6379c41afec4f3d96672cd9670ca935001905060405180910390a2505050565b6000805460405162c8ac9760e41b8152600481018490526001600160a01b0390911690630c8ac97090602401602060405180830381865afa158015610b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc39190610f46565b92915050565b6002546001600160a01b03163314610c3b5760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201526e37b936903a3434b99030b1ba34b7b760891b60648201526084016106d7565b565b610c45610c97565b6001600160a01b031663086dabd16040518163ffffffff1660e01b815260040160006040518083038186803b158015610c7d57600080fd5b505afa158015610c91573d6000803e3d6000fd5b50505050565b6000610cb16b53797374656d53746174757360a01b610cb6565b905090565b600081815260016020908152604080832054905170026b4b9b9b4b7339030b2323932b9b99d1607d1b92810192909252603182018490526001600160a01b0316908115159060510160405160208183030381529060405290610d2b5760405162461bcd60e51b81526004016106d79190610fa1565b5092915050565b6001600160a01b0381168114610d4757600080fd5b50565b60008060008060808587031215610d6057600080fd5b8435610d6b81610d32565b93506020850135925060408501359150606085013561ffff81168114610d9057600080fd5b939692955090935050565b600060208284031215610dad57600080fd5b8135610db881610d32565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610df757835183529284019291840191600101610ddb565b50909695505050505050565b60008060408385031215610e1657600080fd5b8235610e2181610d32565b946020939093013593505050565b8015158114610d4757600080fd5b600080600060608486031215610e5257600080fd5b83359250602084013591506040840135610e6b81610e2f565b809150509250925092565b6000815180845260005b81811015610e9c57602081850181015186830182015201610e80565b506000602082860101526020601f19601f83011685010191505092915050565b61ffff84168152606060208201526000610ed96060830185610e76565b9050826040830152949350505050565b606081526000610efc6060830186610e76565b61ffff94851660208401529290931660409091015292915050565b600060208284031215610f2957600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215610f5857600080fd5b8151610db881610d32565b828152604060208201526000610f7c6040830184610e76565b949350505050565b600060208284031215610f9657600080fd5b8151610db881610e2f565b602081526000610db86020830184610e7656fea26469706673582212203028f6acb4f15247793f0ff3e79dcc8f7c69f4b0cb1d1574e299a581cdca2b1964736f6c63430008180033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007802edc1ae4c39ed9f3dd2759007b9cb31b347a3000000000000000000000000a996800258629fe4064fa98758e122ad677206130000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _owner (address): 0x7802EdC1Ae4c39ED9f3dd2759007b9Cb31B347A3
Arg [1] : _resolver (address): 0xA996800258629fE4064fA98758E122aD67720613
Arg [2] : _lpToken (address): 0x0000000000000000000000000000000000000000

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007802edc1ae4c39ed9f3dd2759007b9cb31b347a3
Arg [1] : 000000000000000000000000a996800258629fe4064fa98758e122ad67720613
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.