Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
OnChainPositionsLens
Compiler Version
v0.8.5+commit.a4f2e591
Optimization Enabled:
Yes with 800 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.5;
import "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol";
import "../libs/LibPosition.sol";
import "../interfaces/IRegistry.sol";
import "../interfaces/IOpiumProxyFactory.sol";
import "../interfaces/IOpiumPositionToken.sol";
interface IERC20Extended is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
}
struct PositionData {
address positionAddress;
string name;
string symbol;
uint256 totalSupply;
LibDerivative.Derivative derivative;
bool isLong;
}
contract OnChainPositionsLens {
using LibDerivative for LibDerivative.Derivative;
using LibPosition for bytes32;
IRegistry public immutable registry;
constructor(address _registry) {
registry = IRegistry(_registry);
}
function predictPositionsAddressesByDerivative(LibDerivative.Derivative calldata _derivative)
external
view
returns (address, address)
{
bytes32 derivativeHash = _derivative.getDerivativeHash();
return _predictPositionsAddressesByDerivativeHash(derivativeHash);
}
function predictPositionsAddressesByDerivativeHash(bytes32 _derivativeHash)
external
view
returns (address, address)
{
return _predictPositionsAddressesByDerivativeHash(_derivativeHash);
}
function getDerivativePositionsData(bytes32 _derivativeHash) external view returns (PositionData[2] memory) {
return _getDerivativePositionsData(_derivativeHash);
}
function getDerivativesPositionsData(bytes32[] calldata _derivativesHash)
external
view
returns (PositionData[2][] memory)
{
PositionData[2][] memory positionsData = new PositionData[2][](_derivativesHash.length);
for (uint256 i = 0; i < _derivativesHash.length; i++) {
positionsData[i] = _getDerivativePositionsData(_derivativesHash[i]);
}
return positionsData;
}
function _getDerivativePositionsData(bytes32 _derivativeHash) private view returns (PositionData[2] memory) {
IOpiumProxyFactory opiumProxyFactory = IOpiumProxyFactory(registry.getProtocolAddresses().opiumProxyFactory);
address longPositionAddress = _derivativeHash.predictDeterministicAddress(
true,
opiumProxyFactory.getImplementationAddress(),
address(opiumProxyFactory)
);
address shortPositionAddress = _derivativeHash.predictDeterministicAddress(
false,
opiumProxyFactory.getImplementationAddress(),
address(opiumProxyFactory)
);
return [
PositionData({
positionAddress: longPositionAddress,
name: IERC20Extended(longPositionAddress).name(),
symbol: IERC20Extended(longPositionAddress).symbol(),
totalSupply: IERC20Extended(longPositionAddress).totalSupply(),
derivative: IOpiumPositionToken(longPositionAddress).getPositionTokenData().derivative,
isLong: true
}),
PositionData({
positionAddress: shortPositionAddress,
name: IERC20Extended(shortPositionAddress).name(),
symbol: IERC20Extended(shortPositionAddress).symbol(),
totalSupply: IERC20Extended(shortPositionAddress).totalSupply(),
derivative: IOpiumPositionToken(shortPositionAddress).getPositionTokenData().derivative,
isLong: false
})
];
}
function _predictPositionsAddressesByDerivativeHash(bytes32 _derivativeHash)
private
view
returns (address, address)
{
address longPositionAddress = _derivativeHash.predictDeterministicAddress(
true,
IOpiumProxyFactory(registry.getProtocolAddresses().opiumProxyFactory).getImplementationAddress(),
registry.getProtocolAddresses().opiumProxyFactory
);
(
true,
IOpiumProxyFactory(registry.getProtocolAddresses().opiumProxyFactory).getImplementationAddress(),
registry.getProtocolAddresses().opiumProxyFactory
);
address shortPositionAddress = _derivativeHash.predictDeterministicAddress(
false,
IOpiumProxyFactory(registry.getProtocolAddresses().opiumProxyFactory).getImplementationAddress(),
registry.getProtocolAddresses().opiumProxyFactory
);
return (longPositionAddress, shortPositionAddress);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)
pragma solidity ^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: agpl-3.0
pragma solidity ^0.8.5;
import "@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol";
library LibPosition {
function predictDeterministicAddress(
bytes32 _derivativeHash,
bool _isLong,
address _positionImplementationAddress,
address _factoryAddress
) internal pure returns (address) {
return _predictDeterministicAddress(_derivativeHash, _isLong, _positionImplementationAddress, _factoryAddress);
}
function predictAndCheckDeterministicAddress(
bytes32 _derivativeHash,
bool _isLong,
address _positionImplementationAddress,
address _factoryAddress
) internal view returns (address, bool) {
address predicted = _predictDeterministicAddress(
_derivativeHash,
_isLong,
_positionImplementationAddress,
_factoryAddress
);
bool isDeployed = _isContract(predicted);
return (predicted, isDeployed);
}
function deployOpiumPosition(
bytes32 _derivativeHash,
bool _isLong,
address _positionImplementationAddress
) internal returns (address) {
bytes32 salt = keccak256(abi.encodePacked(_derivativeHash, _isLong ? "L" : "S"));
return ClonesUpgradeable.cloneDeterministic(_positionImplementationAddress, salt);
}
function _predictDeterministicAddress(
bytes32 _derivativeHash,
bool _isLong,
address _positionImplementationAddress,
address _factoryAddress
) private pure returns (address) {
bytes32 salt = keccak256(abi.encodePacked(_derivativeHash, _isLong ? "L" : "S"));
return ClonesUpgradeable.predictDeterministicAddress(_positionImplementationAddress, salt, _factoryAddress);
}
/// @notice checks whether a contract has already been deployed at a specific address
/// @return bool true if a contract has been deployed at a specific address and false otherwise
function _isContract(address _address) private view returns (bool) {
uint256 size;
assembly {
size := extcodesize(_address)
}
return size > 0;
}
}// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.5;
import "../core/registry/RegistryEntities.sol";
interface IRegistry {
function initialize(address _governor) external;
function setProtocolAddresses(
address _opiumProxyFactory,
address _core,
address _oracleAggregator,
address _syntheticAggregator,
address _tokenSpender
) external;
function setNoDataCancellationPeriod(uint32 _noDataCancellationPeriod) external;
function addToWhitelist(address _whitelisted) external;
function removeFromWhitelist(address _whitelisted) external;
function setProtocolExecutionReserveClaimer(address _protocolExecutionReserveClaimer) external;
function setProtocolRedemptionReserveClaimer(address _protocolRedemptionReserveClaimer) external;
function setProtocolExecutionReservePart(uint32 _protocolExecutionReservePart) external;
function setDerivativeAuthorExecutionFeeCap(uint32 _derivativeAuthorExecutionFeeCap) external;
function setProtocolRedemptionReservePart(uint32 _protocolRedemptionReservePart) external;
function setDerivativeAuthorRedemptionReservePart(uint32 _derivativeAuthorRedemptionReservePart) external;
function pause() external;
function pauseProtocolPositionCreation() external;
function pauseProtocolPositionMinting() external;
function pauseProtocolPositionRedemption() external;
function pauseProtocolPositionExecution() external;
function pauseProtocolPositionCancellation() external;
function pauseProtocolReserveClaim() external;
function unpause() external;
function getProtocolParameters() external view returns (RegistryEntities.ProtocolParametersArgs memory);
function getProtocolAddresses() external view returns (RegistryEntities.ProtocolAddressesArgs memory);
function isRegistryManager(address _address) external view returns (bool);
function isCoreConfigurationUpdater(address _address) external view returns (bool);
function getCore() external view returns (address);
function isCoreSpenderWhitelisted(address _address) external view returns (bool);
function isProtocolPaused() external view returns (bool);
function isProtocolPositionCreationPaused() external view returns (bool);
function isProtocolPositionMintingPaused() external view returns (bool);
function isProtocolPositionRedemptionPaused() external view returns (bool);
function isProtocolPositionExecutionPaused() external view returns (bool);
function isProtocolPositionCancellationPaused() external view returns (bool);
function isProtocolReserveClaimPaused() external view returns (bool);
}// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.5;
import "../libs/LibDerivative.sol";
interface IOpiumProxyFactory {
function getImplementationAddress() external view returns (address);
function initialize(address _registry) external;
function create(
address _buyer,
address _seller,
uint256 _amount,
bytes32 _derivativeHash,
LibDerivative.Derivative calldata _derivative
) external;
function mintPair(
address _buyer,
address _seller,
address _longPositionAddress,
address _shortPositionAddress,
uint256 _amount
) external;
function burn(
address _positionOwner,
address _positionAddress,
uint256 _amount
) external;
function burnPair(
address _positionOwner,
address _longPositionAddress,
address _shortPositionAddress,
uint256 _amount
) external;
}// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.5;
import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
import "../libs/LibDerivative.sol";
interface IOpiumPositionToken is IERC20PermitUpgradeable, IERC20Upgradeable {
struct OpiumPositionTokenParams {
LibDerivative.Derivative derivative;
LibDerivative.PositionType positionType;
bytes32 derivativeHash;
}
function initialize(
bytes32 _derivativeHash,
LibDerivative.PositionType _positionType,
LibDerivative.Derivative calldata _derivative
) external;
function mint(address _positionOwner, uint256 _amount) external;
function burn(address _positionOwner, uint256 _amount) external;
function getFactoryAddress() external view returns (address);
function getPositionTokenData() external view returns (OpiumPositionTokenParams memory opiumPositionTokenParams);
function safeTransfer(
IERC20Upgradeable token,
address to,
uint256 value
) external;
function safeTransferFrom(
IERC20Upgradeable token,
address from,
address to,
uint256 value
) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)
pragma solidity ^0.8.0;
/**
* @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for
* deploying minimal proxy contracts, also known as "clones".
*
* > To simply and cheaply clone contract functionality in an immutable way, this standard specifies
* > a minimal bytecode implementation that delegates all calls to a known, fixed address.
*
* The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`
* (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the
* deterministic method.
*
* _Available since v3.4._
*/
library ClonesUpgradeable {
/**
* @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
*
* This function uses the create opcode, which should never revert.
*/
function clone(address implementation) internal returns (address instance) {
assembly {
let ptr := mload(0x40)
mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
mstore(add(ptr, 0x14), shl(0x60, implementation))
mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
instance := create(0, ptr, 0x37)
}
require(instance != address(0), "ERC1167: create failed");
}
/**
* @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
*
* This function uses the create2 opcode and a `salt` to deterministically deploy
* the clone. Using the same `implementation` and `salt` multiple time will revert, since
* the clones cannot be deployed twice at the same address.
*/
function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {
assembly {
let ptr := mload(0x40)
mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
mstore(add(ptr, 0x14), shl(0x60, implementation))
mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
instance := create2(0, ptr, 0x37, salt)
}
require(instance != address(0), "ERC1167: create2 failed");
}
/**
* @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
*/
function predictDeterministicAddress(
address implementation,
bytes32 salt,
address deployer
) internal pure returns (address predicted) {
assembly {
let ptr := mload(0x40)
mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
mstore(add(ptr, 0x14), shl(0x60, implementation))
mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)
mstore(add(ptr, 0x38), shl(0x60, deployer))
mstore(add(ptr, 0x4c), salt)
mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))
predicted := keccak256(add(ptr, 0x37), 0x55)
}
}
/**
* @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
*/
function predictDeterministicAddress(address implementation, bytes32 salt)
internal
view
returns (address predicted)
{
return predictDeterministicAddress(implementation, salt, address(this));
}
}// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.5;
library RegistryEntities {
struct ProtocolParametersArgs {
// Period of time after which ticker could be canceled if no data was provided to the `oracleId`
uint32 noDataCancellationPeriod;
// Max fee that derivative author can set
// it works as an upper bound for when the derivative authors set their synthetic's fee
uint32 derivativeAuthorExecutionFeeCap;
// Fixed part (percentage) that the derivative author receives for each redemption of market neutral positions
// It is not set by the derivative authors themselves
uint32 derivativeAuthorRedemptionReservePart;
// Represents which part of derivative author reserves originated from derivative executions go to the protocol reserves
uint32 protocolExecutionReservePart;
// Represents which part of derivative author reserves originated from redemption of market neutral positions go to the protocol reserves
uint32 protocolRedemptionReservePart;
/// Initially uninitialized variables to allow some flexibility in case of future changes and upgradeability
uint32 __gapOne;
uint32 __gapTwo;
uint32 __gapThree;
}
struct ProtocolAddressesArgs {
// Address of Opium.Core contract
address core;
// Address of Opium.OpiumProxyFactory contract
address opiumProxyFactory;
// Address of Opium.OracleAggregator contract
address oracleAggregator;
// Address of Opium.SyntheticAggregator contract
address syntheticAggregator;
// Address of Opium.TokenSpender contract
address tokenSpender;
// Address of the recipient of execution protocol reserves
address protocolExecutionReserveClaimer;
// Address of the recipient of redemption protocol reserves
address protocolRedemptionReserveClaimer;
/// Initially uninitialized variables to allow some flexibility in case of future changes and upgradeability
uint32 __gapOne;
uint32 __gapTwo;
}
struct ProtocolPausabilityArgs {
// if true, all the protocol's entry-points are paused
bool protocolGlobal;
// if true, no new positions can be created
bool protocolPositionCreation;
// if true, no new positions can be minted
bool protocolPositionMinting;
// if true, no new positions can be redeemed
bool protocolPositionRedemption;
// if true, no new positions can be executed
bool protocolPositionExecution;
// if true, no new positions can be cancelled
bool protocolPositionCancellation;
// if true, no reserves can be claimed
bool protocolReserveClaim;
/// Initially uninitialized variables to allow some flexibility in case of future changes and upgradeability
bool __gapOne;
bool __gapTwo;
bool __gapThree;
bool __gapFour;
}
}// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.8.5;
/// @title Opium.Lib.LibDerivative contract should be inherited by contracts that use Derivative structure and calculate derivativeHash
library LibDerivative {
enum PositionType {
SHORT,
LONG
}
// Opium derivative structure (ticker) definition
struct Derivative {
// Margin parameter for syntheticId
uint256 margin;
// Maturity of derivative
uint256 endTime;
// Additional parameters for syntheticId
uint256[] params;
// oracleId of derivative
address oracleId;
// Margin token address of derivative
address token;
// syntheticId of derivative
address syntheticId;
}
/// @notice Calculates hash of provided Derivative
/// @param _derivative Derivative Instance of derivative to hash
/// @return derivativeHash bytes32 Derivative hash
function getDerivativeHash(Derivative memory _derivative) internal pure returns (bytes32 derivativeHash) {
derivativeHash = keccak256(
abi.encodePacked(
_derivative.margin,
_derivative.endTime,
_derivative.params,
_derivative.oracleId,
_derivative.token,
_derivative.syntheticId
)
);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*/
interface IERC20PermitUpgradeable {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20Upgradeable {
/**
* @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);
}{
"optimizer": {
"enabled": true,
"runs": 800
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"metadata": {
"useLiteralContent": true
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_registry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes32","name":"_derivativeHash","type":"bytes32"}],"name":"getDerivativePositionsData","outputs":[{"components":[{"internalType":"address","name":"positionAddress","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"components":[{"internalType":"uint256","name":"margin","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256[]","name":"params","type":"uint256[]"},{"internalType":"address","name":"oracleId","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"syntheticId","type":"address"}],"internalType":"struct LibDerivative.Derivative","name":"derivative","type":"tuple"},{"internalType":"bool","name":"isLong","type":"bool"}],"internalType":"struct PositionData[2]","name":"","type":"tuple[2]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_derivativesHash","type":"bytes32[]"}],"name":"getDerivativesPositionsData","outputs":[{"components":[{"internalType":"address","name":"positionAddress","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"components":[{"internalType":"uint256","name":"margin","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256[]","name":"params","type":"uint256[]"},{"internalType":"address","name":"oracleId","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"syntheticId","type":"address"}],"internalType":"struct LibDerivative.Derivative","name":"derivative","type":"tuple"},{"internalType":"bool","name":"isLong","type":"bool"}],"internalType":"struct PositionData[2][]","name":"","type":"tuple[2][]"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"margin","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256[]","name":"params","type":"uint256[]"},{"internalType":"address","name":"oracleId","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"syntheticId","type":"address"}],"internalType":"struct LibDerivative.Derivative","name":"_derivative","type":"tuple"}],"name":"predictPositionsAddressesByDerivative","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_derivativeHash","type":"bytes32"}],"name":"predictPositionsAddressesByDerivativeHash","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"registry","outputs":[{"internalType":"contract IRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60a060405234801561001057600080fd5b506040516118bf3803806118bf83398101604081905261002f91610044565b60601b6001600160601b031916608052610074565b60006020828403121561005657600080fd5b81516001600160a01b038116811461006d57600080fd5b9392505050565b60805160601c6117fd6100c260003960008181609a01528181610259015281816108290152818161092f015281816109d201528181610ad801528181610b780152610c7e01526117fd6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80638de562b9116100505780638de562b9146100d4578063a835b77614610107578063b614f1311461012757600080fd5b806339c08e1d1461006c5780637b10399914610095575b600080fd5b61007f61007a366004611010565b61013a565b60405161008c919061156b565b60405180910390f35b6100bc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161008c565b6100e76100e2366004611010565b610151565b604080516001600160a01b0393841681529290911660208301520161008c565b61011a610115366004610f9b565b610166565b60405161008c9190611509565b6100e76101353660046110bd565b610223565b610142610e7b565b61014b8261024d565b92915050565b60008061015d8361081d565b91509150915091565b606060008267ffffffffffffffff81111561018357610183611799565b6040519080825280602002602001820160405280156101bc57816020015b6101a9610e7b565b8152602001906001900390816101a15790505b50905060005b8381101561021b576101eb8585838181106101df576101df611783565b9050602002013561024d565b8282815181106101fd576101fd611783565b602002602001018190525080806102139061175a565b9150506101c2565b509392505050565b6000808061023861023385611643565b610d27565b90506102438161081d565b9250925050915091565b610255610e7b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a1774da06040518163ffffffff1660e01b81526004016101206040518083038186803b1580156102b157600080fd5b505afa1580156102c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e99190611252565b60200151905060006103706001836001600160a01b0316630cbcae706040518163ffffffff1660e01b815260040160206040518083038186803b15801561032f57600080fd5b505afa158015610343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103679190610f77565b86919085610d74565b905060006103f36000846001600160a01b0316630cbcae706040518163ffffffff1660e01b815260040160206040518083038186803b1580156103b257600080fd5b505afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190610f77565b87919086610d74565b905060405180604001604052806040518060c00160405280856001600160a01b03168152602001856001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b15801561045357600080fd5b505afa158015610467573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261048f9190810190611029565b8152602001856001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156104cd57600080fd5b505afa1580156104e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105099190810190611029565b8152602001856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561054757600080fd5b505afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611308565b8152602001856001600160a01b031663ce21286d6040518163ffffffff1660e01b815260040160006040518083038186803b1580156105bd57600080fd5b505afa1580156105d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105f991908101906110f8565b6000015181526020016001151581525081526020016040518060c00160405280846001600160a01b03168152602001846001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b15801561066157600080fd5b505afa158015610675573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261069d9190810190611029565b8152602001846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156106db57600080fd5b505afa1580156106ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107179190810190611029565b8152602001846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561075557600080fd5b505afa158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611308565b8152602001846001600160a01b031663ce21286d6040518163ffffffff1660e01b815260040160006040518083038186803b1580156107cb57600080fd5b505afa1580156107df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080791908101906110f8565b5181526000602090910152905295945050505050565b60008060006109cc60017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a1774da06040518163ffffffff1660e01b81526004016101206040518083038186803b15801561088157600080fd5b505afa158015610895573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b99190611252565b602001516001600160a01b0316630cbcae706040518163ffffffff1660e01b815260040160206040518083038186803b1580156108f557600080fd5b505afa158015610909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092d9190610f77565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a1774da06040518163ffffffff1660e01b81526004016101206040518083038186803b15801561098757600080fd5b505afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf9190611252565b6020015187929190610d74565b905060017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a1774da06040518163ffffffff1660e01b81526004016101206040518083038186803b158015610a2a57600080fd5b505afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a629190611252565b602001516001600160a01b0316630cbcae706040518163ffffffff1660e01b815260040160206040518083038186803b158015610a9e57600080fd5b505afa158015610ab2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad69190610f77565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a1774da06040518163ffffffff1660e01b81526004016101206040518083038186803b158015610b3057600080fd5b505afa158015610b44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b689190611252565b602001515050506000610d1b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a1774da06040518163ffffffff1660e01b81526004016101206040518083038186803b158015610bd057600080fd5b505afa158015610be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c089190611252565b602001516001600160a01b0316630cbcae706040518163ffffffff1660e01b815260040160206040518083038186803b158015610c4457600080fd5b505afa158015610c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7c9190610f77565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a1774da06040518163ffffffff1660e01b81526004016101206040518083038186803b158015610cd657600080fd5b505afa158015610cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0e9190611252565b6020015188929190610d74565b91959194509092505050565b80516020808301516040808501516060860151608087015160a08801519351600097610d57979096959101611498565b604051602081830303815290604052805190602001209050919050565b6000610d8285858585610d8b565b95945050505050565b6000808585610db357604051806040016040528060018152602001605360f81b815250610dce565b604051806040016040528060018152602001601360fa1b8152505b604051602001610ddf929190611472565b604051602081830303815290604052805190602001209050610e718482856040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9695505050505050565b60405180604001604052806002905b610e92610ea8565b815260200190600190039081610e8a5790505090565b6040518060c0016040528060006001600160a01b03168152602001606081526020016060815260200160008152602001610f2c6040518060c0016040528060008152602001600081526020016060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b8152600060209091015290565b8035610f44816117af565b919050565b8051610f44816117af565b805160028110610f4457600080fd5b805163ffffffff81168114610f4457600080fd5b600060208284031215610f8957600080fd5b8151610f94816117af565b9392505050565b60008060208385031215610fae57600080fd5b823567ffffffffffffffff80821115610fc657600080fd5b818501915085601f830112610fda57600080fd5b813581811115610fe957600080fd5b8660208260051b8501011115610ffe57600080fd5b60209290920196919550909350505050565b60006020828403121561102257600080fd5b5035919050565b60006020828403121561103b57600080fd5b815167ffffffffffffffff8082111561105357600080fd5b818401915084601f83011261106757600080fd5b81518181111561107957611079611799565b61108c601f8201601f19166020016115ee565b91508082528560208285010111156110a357600080fd5b6110b481602084016020860161172a565b50949350505050565b6000602082840312156110cf57600080fd5b813567ffffffffffffffff8111156110e657600080fd5b820160c08185031215610f9457600080fd5b6000602080838503121561110b57600080fd5b825167ffffffffffffffff8082111561112357600080fd5b908401906060828703121561113757600080fd5b61113f61157e565b82518281111561114e57600080fd5b830160c0818903121561116057600080fd5b6111686115a7565b81518152858201518682015260408201518481111561118657600080fd5b82019350601f8401891361119957600080fd5b83516111ac6111a78261161f565b6115ee565b8082825288820191508887018c8a8560051b8a010111156111cc57600080fd5b600097505b838810156111ef5780518352600197909701969189019189016111d1565b50604084015250611204905060608301610f49565b606082015261121560808301610f49565b608082015261122660a08301610f49565b60a0820152825250611239838501610f54565b9381019390935250604090810151908201529392505050565b6000610120828403121561126557600080fd5b61126d6115ca565b61127683610f49565b815261128460208401610f49565b602082015261129560408401610f49565b60408201526112a660608401610f49565b60608201526112b760808401610f49565b60808201526112c860a08401610f49565b60a08201526112d960c08401610f49565b60c08201526112ea60e08401610f63565b60e08201526101006112fd818501610f63565b908201529392505050565b60006020828403121561131a57600080fd5b5051919050565b6000826040808201846000805b6002811015611439578584038952825160c06001600160a01b038251168652602080830151828289015261136483890182611446565b9050888401518882038a8a015261137b8282611446565b915050606080850151818a01526080808601518a8403828c01528584018151855285820151868601528c820151878e870152819750805180835260e08701985087820192508b91505b808210156113e457825189529787019791870191600191909101906113c4565b505050828101516001600160a01b03908116938501939093528181015183169184019190915260a09081015190911691810191909152928301511515969092019590955298890198929092019160010161132e565b5091979650505050505050565b6000815180845261145e81602086016020860161172a565b601f01601f19169290920160200192915050565b8281526000825161148a81602085016020870161172a565b919091016020019392505050565b86815260006020878184015260408301875182890160005b828110156114cc578151845292840192908401906001016114b0565b5050506bffffffffffffffffffffffff19606097881b8116825295871b861660148201529390951b909316602883015250603c0195945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561155e57603f1988860301845261154c858351611321565b94509285019290850190600101611530565b5092979650505050505050565b602081526000610f946020830184611321565b6040516060810167ffffffffffffffff811182821017156115a1576115a1611799565b60405290565b60405160c0810167ffffffffffffffff811182821017156115a1576115a1611799565b604051610120810167ffffffffffffffff811182821017156115a1576115a1611799565b604051601f8201601f1916810167ffffffffffffffff8111828210171561161757611617611799565b604052919050565b600067ffffffffffffffff82111561163957611639611799565b5060051b60200190565b600060c0823603121561165557600080fd5b61165d6115a7565b8235815260208084013581830152604084013567ffffffffffffffff81111561168557600080fd5b840136601f82011261169657600080fd5b80356116a46111a78261161f565b8181528381019083850136600585901b8601870111156116c357600080fd5b600094505b838510156116e65780358352600194909401939185019185016116c8565b506040860152506116fd9250505060608401610f39565b606082015261170e60808401610f39565b608082015261171f60a08401610f39565b60a082015292915050565b60005b8381101561174557818101518382015260200161172d565b83811115611754576000848401525b50505050565b600060001982141561177c57634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146117c457600080fd5b5056fea26469706673582212203d32e021d5915709bdd1a527b225b1072c44053834dbc35503e4ad86723981a364736f6c63430008050033000000000000000000000000bd0e3097f47ceca12407bac42cdd574cf3072f23
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100675760003560e01c80638de562b9116100505780638de562b9146100d4578063a835b77614610107578063b614f1311461012757600080fd5b806339c08e1d1461006c5780637b10399914610095575b600080fd5b61007f61007a366004611010565b61013a565b60405161008c919061156b565b60405180910390f35b6100bc7f000000000000000000000000bd0e3097f47ceca12407bac42cdd574cf3072f2381565b6040516001600160a01b03909116815260200161008c565b6100e76100e2366004611010565b610151565b604080516001600160a01b0393841681529290911660208301520161008c565b61011a610115366004610f9b565b610166565b60405161008c9190611509565b6100e76101353660046110bd565b610223565b610142610e7b565b61014b8261024d565b92915050565b60008061015d8361081d565b91509150915091565b606060008267ffffffffffffffff81111561018357610183611799565b6040519080825280602002602001820160405280156101bc57816020015b6101a9610e7b565b8152602001906001900390816101a15790505b50905060005b8381101561021b576101eb8585838181106101df576101df611783565b9050602002013561024d565b8282815181106101fd576101fd611783565b602002602001018190525080806102139061175a565b9150506101c2565b509392505050565b6000808061023861023385611643565b610d27565b90506102438161081d565b9250925050915091565b610255610e7b565b60007f000000000000000000000000bd0e3097f47ceca12407bac42cdd574cf3072f236001600160a01b031663a1774da06040518163ffffffff1660e01b81526004016101206040518083038186803b1580156102b157600080fd5b505afa1580156102c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e99190611252565b60200151905060006103706001836001600160a01b0316630cbcae706040518163ffffffff1660e01b815260040160206040518083038186803b15801561032f57600080fd5b505afa158015610343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103679190610f77565b86919085610d74565b905060006103f36000846001600160a01b0316630cbcae706040518163ffffffff1660e01b815260040160206040518083038186803b1580156103b257600080fd5b505afa1580156103c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ea9190610f77565b87919086610d74565b905060405180604001604052806040518060c00160405280856001600160a01b03168152602001856001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b15801561045357600080fd5b505afa158015610467573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261048f9190810190611029565b8152602001856001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156104cd57600080fd5b505afa1580156104e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105099190810190611029565b8152602001856001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561054757600080fd5b505afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611308565b8152602001856001600160a01b031663ce21286d6040518163ffffffff1660e01b815260040160006040518083038186803b1580156105bd57600080fd5b505afa1580156105d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105f991908101906110f8565b6000015181526020016001151581525081526020016040518060c00160405280846001600160a01b03168152602001846001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b15801561066157600080fd5b505afa158015610675573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261069d9190810190611029565b8152602001846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156106db57600080fd5b505afa1580156106ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107179190810190611029565b8152602001846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561075557600080fd5b505afa158015610769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078d9190611308565b8152602001846001600160a01b031663ce21286d6040518163ffffffff1660e01b815260040160006040518083038186803b1580156107cb57600080fd5b505afa1580156107df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261080791908101906110f8565b5181526000602090910152905295945050505050565b60008060006109cc60017f000000000000000000000000bd0e3097f47ceca12407bac42cdd574cf3072f236001600160a01b031663a1774da06040518163ffffffff1660e01b81526004016101206040518083038186803b15801561088157600080fd5b505afa158015610895573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b99190611252565b602001516001600160a01b0316630cbcae706040518163ffffffff1660e01b815260040160206040518083038186803b1580156108f557600080fd5b505afa158015610909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092d9190610f77565b7f000000000000000000000000bd0e3097f47ceca12407bac42cdd574cf3072f236001600160a01b031663a1774da06040518163ffffffff1660e01b81526004016101206040518083038186803b15801561098757600080fd5b505afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf9190611252565b6020015187929190610d74565b905060017f000000000000000000000000bd0e3097f47ceca12407bac42cdd574cf3072f236001600160a01b031663a1774da06040518163ffffffff1660e01b81526004016101206040518083038186803b158015610a2a57600080fd5b505afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a629190611252565b602001516001600160a01b0316630cbcae706040518163ffffffff1660e01b815260040160206040518083038186803b158015610a9e57600080fd5b505afa158015610ab2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad69190610f77565b7f000000000000000000000000bd0e3097f47ceca12407bac42cdd574cf3072f236001600160a01b031663a1774da06040518163ffffffff1660e01b81526004016101206040518083038186803b158015610b3057600080fd5b505afa158015610b44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b689190611252565b602001515050506000610d1b60007f000000000000000000000000bd0e3097f47ceca12407bac42cdd574cf3072f236001600160a01b031663a1774da06040518163ffffffff1660e01b81526004016101206040518083038186803b158015610bd057600080fd5b505afa158015610be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c089190611252565b602001516001600160a01b0316630cbcae706040518163ffffffff1660e01b815260040160206040518083038186803b158015610c4457600080fd5b505afa158015610c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7c9190610f77565b7f000000000000000000000000bd0e3097f47ceca12407bac42cdd574cf3072f236001600160a01b031663a1774da06040518163ffffffff1660e01b81526004016101206040518083038186803b158015610cd657600080fd5b505afa158015610cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0e9190611252565b6020015188929190610d74565b91959194509092505050565b80516020808301516040808501516060860151608087015160a08801519351600097610d57979096959101611498565b604051602081830303815290604052805190602001209050919050565b6000610d8285858585610d8b565b95945050505050565b6000808585610db357604051806040016040528060018152602001605360f81b815250610dce565b604051806040016040528060018152602001601360fa1b8152505b604051602001610ddf929190611472565b604051602081830303815290604052805190602001209050610e718482856040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b9695505050505050565b60405180604001604052806002905b610e92610ea8565b815260200190600190039081610e8a5790505090565b6040518060c0016040528060006001600160a01b03168152602001606081526020016060815260200160008152602001610f2c6040518060c0016040528060008152602001600081526020016060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b8152600060209091015290565b8035610f44816117af565b919050565b8051610f44816117af565b805160028110610f4457600080fd5b805163ffffffff81168114610f4457600080fd5b600060208284031215610f8957600080fd5b8151610f94816117af565b9392505050565b60008060208385031215610fae57600080fd5b823567ffffffffffffffff80821115610fc657600080fd5b818501915085601f830112610fda57600080fd5b813581811115610fe957600080fd5b8660208260051b8501011115610ffe57600080fd5b60209290920196919550909350505050565b60006020828403121561102257600080fd5b5035919050565b60006020828403121561103b57600080fd5b815167ffffffffffffffff8082111561105357600080fd5b818401915084601f83011261106757600080fd5b81518181111561107957611079611799565b61108c601f8201601f19166020016115ee565b91508082528560208285010111156110a357600080fd5b6110b481602084016020860161172a565b50949350505050565b6000602082840312156110cf57600080fd5b813567ffffffffffffffff8111156110e657600080fd5b820160c08185031215610f9457600080fd5b6000602080838503121561110b57600080fd5b825167ffffffffffffffff8082111561112357600080fd5b908401906060828703121561113757600080fd5b61113f61157e565b82518281111561114e57600080fd5b830160c0818903121561116057600080fd5b6111686115a7565b81518152858201518682015260408201518481111561118657600080fd5b82019350601f8401891361119957600080fd5b83516111ac6111a78261161f565b6115ee565b8082825288820191508887018c8a8560051b8a010111156111cc57600080fd5b600097505b838810156111ef5780518352600197909701969189019189016111d1565b50604084015250611204905060608301610f49565b606082015261121560808301610f49565b608082015261122660a08301610f49565b60a0820152825250611239838501610f54565b9381019390935250604090810151908201529392505050565b6000610120828403121561126557600080fd5b61126d6115ca565b61127683610f49565b815261128460208401610f49565b602082015261129560408401610f49565b60408201526112a660608401610f49565b60608201526112b760808401610f49565b60808201526112c860a08401610f49565b60a08201526112d960c08401610f49565b60c08201526112ea60e08401610f63565b60e08201526101006112fd818501610f63565b908201529392505050565b60006020828403121561131a57600080fd5b5051919050565b6000826040808201846000805b6002811015611439578584038952825160c06001600160a01b038251168652602080830151828289015261136483890182611446565b9050888401518882038a8a015261137b8282611446565b915050606080850151818a01526080808601518a8403828c01528584018151855285820151868601528c820151878e870152819750805180835260e08701985087820192508b91505b808210156113e457825189529787019791870191600191909101906113c4565b505050828101516001600160a01b03908116938501939093528181015183169184019190915260a09081015190911691810191909152928301511515969092019590955298890198929092019160010161132e565b5091979650505050505050565b6000815180845261145e81602086016020860161172a565b601f01601f19169290920160200192915050565b8281526000825161148a81602085016020870161172a565b919091016020019392505050565b86815260006020878184015260408301875182890160005b828110156114cc578151845292840192908401906001016114b0565b5050506bffffffffffffffffffffffff19606097881b8116825295871b861660148201529390951b909316602883015250603c0195945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561155e57603f1988860301845261154c858351611321565b94509285019290850190600101611530565b5092979650505050505050565b602081526000610f946020830184611321565b6040516060810167ffffffffffffffff811182821017156115a1576115a1611799565b60405290565b60405160c0810167ffffffffffffffff811182821017156115a1576115a1611799565b604051610120810167ffffffffffffffff811182821017156115a1576115a1611799565b604051601f8201601f1916810167ffffffffffffffff8111828210171561161757611617611799565b604052919050565b600067ffffffffffffffff82111561163957611639611799565b5060051b60200190565b600060c0823603121561165557600080fd5b61165d6115a7565b8235815260208084013581830152604084013567ffffffffffffffff81111561168557600080fd5b840136601f82011261169657600080fd5b80356116a46111a78261161f565b8181528381019083850136600585901b8601870111156116c357600080fd5b600094505b838510156116e65780358352600194909401939185019185016116c8565b506040860152506116fd9250505060608401610f39565b606082015261170e60808401610f39565b608082015261171f60a08401610f39565b60a082015292915050565b60005b8381101561174557818101518382015260200161172d565b83811115611754576000848401525b50505050565b600060001982141561177c57634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146117c457600080fd5b5056fea26469706673582212203d32e021d5915709bdd1a527b225b1072c44053834dbc35503e4ad86723981a364736f6c63430008050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000bd0e3097f47ceca12407bac42cdd574cf3072f23
-----Decoded View---------------
Arg [0] : _registry (address): 0xbd0e3097F47cEcA12407bAc42cDD574cf3072F23
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000bd0e3097f47ceca12407bac42cdd574cf3072f23
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.