Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 53 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Open Market | 9542473 | 1830 days ago | IN | 0 ETH | 0.00028168 | ||||
Create Currency | 8806521 | 1951 days ago | IN | 0 ETH | 0.00163549 | ||||
Create Currency | 8082075 | 2064 days ago | IN | 0 ETH | 0.00196136 | ||||
Transfer | 8082043 | 2064 days ago | IN | 0.005 ETH | 0.00005261 | ||||
Transfer | 8082017 | 2064 days ago | IN | 0.005 ETH | 0.0000525 | ||||
Create Currency | 7884944 | 2095 days ago | IN | 0 ETH | 0.00980373 | ||||
Open Market | 7876173 | 2097 days ago | IN | 0 ETH | 0.00010655 | ||||
Open Market | 7874169 | 2097 days ago | IN | 0 ETH | 0.00079912 | ||||
Open Market | 7874153 | 2097 days ago | IN | 0 ETH | 0.00116585 | ||||
Create Currency | 7874140 | 2097 days ago | IN | 0 ETH | 0.0245151 | ||||
Open Market | 7840646 | 2102 days ago | IN | 0 ETH | 0.00058602 | ||||
Open Market | 7840638 | 2102 days ago | IN | 0 ETH | 0.00058602 | ||||
Open Market | 7840638 | 2102 days ago | IN | 0 ETH | 0.00058602 | ||||
Open Market | 7840636 | 2102 days ago | IN | 0 ETH | 0.00058602 | ||||
Open Market | 7840635 | 2102 days ago | IN | 0 ETH | 0.00058602 | ||||
Open Market | 7835076 | 2103 days ago | IN | 0 ETH | 0.00008327 | ||||
Create Currency | 7830251 | 2104 days ago | IN | 0 ETH | 0.00326842 | ||||
Open Market | 7829043 | 2104 days ago | IN | 0 ETH | 0.0000916 | ||||
Create Currency | 7828587 | 2104 days ago | IN | 0 ETH | 0.0022061 | ||||
Open Market | 7625685 | 2136 days ago | IN | 0 ETH | 0.0000916 | ||||
Create Currency | 7625404 | 2136 days ago | IN | 0 ETH | 0.00490666 | ||||
Open Market | 7508237 | 2154 days ago | IN | 0 ETH | 0.0003331 | ||||
Create Currency | 7507880 | 2154 days ago | IN | 0 ETH | 0.00980527 | ||||
Create Currency | 7231411 | 2201 days ago | IN | 0 ETH | 0.00980527 | ||||
Create Currency | 7215273 | 2205 days ago | IN | 0 ETH | 0.00816978 |
Latest 25 internal transactions (View All)
Advanced mode:
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 Source Code Verified (Exact Match)
Contract Name:
CurrencyFactory
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-05-27 */ pragma solidity ^0.4.18; // File: contracts/Ownable.sol /// @title Ownable /// @dev The Ownable contract has an owner address, and provides basic authorization control functions, /// this simplifies the implementation of "user permissions". /// @dev Based on OpenZeppelin's Ownable. contract Ownable { address public owner; address public newOwnerCandidate; event OwnershipRequested(address indexed by, address indexed to); event OwnershipTransferred(address indexed from, address indexed to); /// @dev Constructor sets the original `owner` of the contract to the sender account. function Ownable() public { owner = msg.sender; } /// @dev Reverts if called by any account other than the owner. modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyOwnerCandidate() { require(msg.sender == newOwnerCandidate); _; } /// @dev Proposes to transfer control of the contract to a newOwnerCandidate. /// @param _newOwnerCandidate address The address to transfer ownership to. function requestOwnershipTransfer(address _newOwnerCandidate) external onlyOwner { require(_newOwnerCandidate != address(0)); newOwnerCandidate = _newOwnerCandidate; OwnershipRequested(msg.sender, newOwnerCandidate); } /// @dev Accept ownership transfer. This method needs to be called by the perviously proposed owner. function acceptOwnership() external onlyOwnerCandidate { address previousOwner = owner; owner = newOwnerCandidate; newOwnerCandidate = address(0); OwnershipTransferred(previousOwner, owner); } } // File: contracts/SafeMath.sol /// @title Math operations with safety checks library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; require(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // require(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // require(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } function max64(uint64 a, uint64 b) internal pure returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal pure returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } function toPower2(uint256 a) internal pure returns (uint256) { return mul(a, a); } function sqrt(uint256 a) internal pure returns (uint256) { uint256 c = (a + 1) / 2; uint256 b = a; while (c < b) { b = c; c = (a / c + c) / 2; } return b; } } // File: contracts/ERC20.sol /// @title ERC Token Standard #20 Interface (https://github.com/ethereum/EIPs/issues/20) contract ERC20 { uint public totalSupply; function balanceOf(address _owner) constant public returns (uint balance); function transfer(address _to, uint _value) public returns (bool success); function transferFrom(address _from, address _to, uint _value) public returns (bool success); function approve(address _spender, uint _value) public returns (bool success); function allowance(address _owner, address _spender) public constant returns (uint remaining); event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); } // File: contracts/BasicToken.sol /// @title Basic ERC20 token contract implementation. /// @dev Based on OpenZeppelin's StandardToken. contract BasicToken is ERC20 { using SafeMath for uint256; uint256 public totalSupply; mapping (address => mapping (address => uint256)) allowed; mapping (address => uint256) balances; event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); /// @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. /// @param _spender address The address which will spend the funds. /// @param _value uint256 The amount of tokens to be spent. function approve(address _spender, uint256 _value) public returns (bool) { // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#approve (see NOTE) if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) { revert(); } allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /// @dev Function to check the amount of tokens that an owner allowed to a spender. /// @param _owner address The address which owns the funds. /// @param _spender address The address which will spend the funds. /// @return uint256 specifying the amount of tokens still available for the spender. function allowance(address _owner, address _spender) constant public returns (uint256 remaining) { return allowed[_owner][_spender]; } /// @dev Gets the balance of the specified address. /// @param _owner address The address to query the the balance of. /// @return uint256 representing the amount owned by the passed address. function balanceOf(address _owner) constant public returns (uint256 balance) { return balances[_owner]; } /// @dev Transfer token to a specified address. /// @param _to address The address to transfer to. /// @param _value uint256 The amount to be transferred. function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /// @dev Transfer tokens from one address to another. /// @param _from address The address which you want to send tokens from. /// @param _to address The address which you want to transfer to. /// @param _value uint256 the amount of tokens to be transferred. function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); uint256 _allowance = allowed[_from][msg.sender]; balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } } // File: contracts/ERC223Receiver.sol /// @title ERC223Receiver Interface /// @dev Based on the specs form: https://github.com/ethereum/EIPs/issues/223 contract ERC223Receiver { function tokenFallback(address _sender, uint _value, bytes _data) external returns (bool ok); } // File: contracts/ERC677.sol /// @title ERC Token Standard #677 Interface (https://github.com/ethereum/EIPs/issues/677) contract ERC677 is ERC20 { function transferAndCall(address to, uint value, bytes data) public returns (bool ok); event TransferAndCall(address indexed from, address indexed to, uint value, bytes data); } // File: contracts/Standard677Token.sol /// @title Standard677Token implentation, base on https://github.com/ethereum/EIPs/issues/677 contract Standard677Token is ERC677, BasicToken { /// @dev ERC223 safe token transfer from one address to another /// @param _to address the address which you want to transfer to. /// @param _value uint256 the amount of tokens to be transferred. /// @param _data bytes data that can be attached to the token transation function transferAndCall(address _to, uint _value, bytes _data) public returns (bool) { require(super.transfer(_to, _value)); // do a normal token transfer TransferAndCall(msg.sender, _to, _value, _data); //filtering if the target is a contract with bytecode inside it if (isContract(_to)) return contractFallback(_to, _value, _data); return true; } /// @dev called when transaction target is a contract /// @param _to address the address which you want to transfer to. /// @param _value uint256 the amount of tokens to be transferred. /// @param _data bytes data that can be attached to the token transation function contractFallback(address _to, uint _value, bytes _data) private returns (bool) { ERC223Receiver receiver = ERC223Receiver(_to); require(receiver.tokenFallback(msg.sender, _value, _data)); return true; } /// @dev check if the address is contract /// assemble the given address bytecode. If bytecode exists then the _addr is a contract. /// @param _addr address the address to check function isContract(address _addr) private constant returns (bool is_contract) { // retrieve the size of the code on target address, this needs assembly uint length; assembly { length := extcodesize(_addr) } return length > 0; } } // File: contracts/TokenHolder.sol /// @title Token holder contract. contract TokenHolder is Ownable { /// @dev Allow the owner to transfer out any accidentally sent ERC20 tokens. /// @param _tokenAddress address The address of the ERC20 contract. /// @param _amount uint256 The amount of tokens to be transferred. function transferAnyERC20Token(address _tokenAddress, uint256 _amount) public onlyOwner returns (bool success) { return ERC20(_tokenAddress).transfer(owner, _amount); } } // File: contracts/ColuLocalCurrency.sol /// @title Colu Local Currency contract. /// @author Rotem Lev. contract ColuLocalCurrency is Ownable, Standard677Token, TokenHolder { using SafeMath for uint256; string public name; string public symbol; uint8 public decimals; string public tokenURI; event TokenURIChanged(string newTokenURI); /// @dev cotract to use when issuing a CC (Local Currency) /// @param _name string name for CC token that is created. /// @param _symbol string symbol for CC token that is created. /// @param _decimals uint8 percison for CC token that is created. /// @param _totalSupply uint256 total supply of the CC token that is created. /// @param _tokenURI string the URI may point to a JSON file that conforms to the "Metadata JSON Schema". function ColuLocalCurrency(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply, string _tokenURI) public { require(_totalSupply != 0); require(bytes(_name).length != 0); require(bytes(_symbol).length != 0); totalSupply = _totalSupply; name = _name; symbol = _symbol; decimals = _decimals; tokenURI = _tokenURI; balances[msg.sender] = totalSupply; } /// @dev Sets the tokenURI field, can be called by the owner only /// @param _tokenURI string the URI may point to a JSON file that conforms to the "Metadata JSON Schema". function setTokenURI(string _tokenURI) public onlyOwner { tokenURI = _tokenURI; TokenURIChanged(_tokenURI); } } // File: contracts/Standard223Receiver.sol /// @title Standard ERC223 Token Receiver implementing tokenFallback function and tokenPayable modifier contract Standard223Receiver is ERC223Receiver { Tkn tkn; struct Tkn { address addr; address sender; // the transaction caller uint256 value; } bool __isTokenFallback; modifier tokenPayable { require(__isTokenFallback); _; } /// @dev Called when the receiver of transfer is contract /// @param _sender address the address of tokens sender /// @param _value uint256 the amount of tokens to be transferred. /// @param _data bytes data that can be attached to the token transation function tokenFallback(address _sender, uint _value, bytes _data) external returns (bool ok) { if (!supportsToken(msg.sender)) { return false; } // Problem: This will do a sstore which is expensive gas wise. Find a way to keep it in memory. // Solution: Remove the the data tkn = Tkn(msg.sender, _sender, _value); __isTokenFallback = true; if (!address(this).delegatecall(_data)) { __isTokenFallback = false; return false; } // avoid doing an overwrite to .token, which would be more expensive // makes accessing .tkn values outside tokenPayable functions unsafe __isTokenFallback = false; return true; } function supportsToken(address token) public constant returns (bool); } // File: contracts/TokenOwnable.sol /// @title TokenOwnable /// @dev The TokenOwnable contract adds a onlyTokenOwner modifier as a tokenReceiver with ownable addaptation contract TokenOwnable is Standard223Receiver, Ownable { /// @dev Reverts if called by any account other than the owner for token sending. modifier onlyTokenOwner() { require(tkn.sender == owner); _; } } // File: contracts/EllipseMarketMaker.sol /// @title Ellipse Market Maker contract. /// @dev market maker, using ellipse equation. /// @author Tal Beja. contract EllipseMarketMaker is TokenOwnable { // precision for price representation (as in ether or tokens). uint256 public constant PRECISION = 10 ** 18; // The tokens pair. ERC20 public token1; ERC20 public token2; // The tokens reserves. uint256 public R1; uint256 public R2; // The tokens full suplly. uint256 public S1; uint256 public S2; // State flags. bool public operational; bool public openForPublic; // Library contract address. address public mmLib; /// @dev Constructor calling the library contract using delegate. function EllipseMarketMaker(address _mmLib, address _token1, address _token2) public { require(_mmLib != address(0)); // Signature of the mmLib's constructor function // bytes4 sig = bytes4(keccak256("constructor(address,address,address)")); bytes4 sig = 0x6dd23b5b; // 3 arguments of size 32 uint256 argsSize = 3 * 32; // sig + arguments size uint256 dataSize = 4 + argsSize; bytes memory m_data = new bytes(dataSize); assembly { // Add the signature first to memory mstore(add(m_data, 0x20), sig) // Add the parameters mstore(add(m_data, 0x24), _mmLib) mstore(add(m_data, 0x44), _token1) mstore(add(m_data, 0x64), _token2) } // delegatecall to the library contract require(_mmLib.delegatecall(m_data)); } /// @dev returns true iff token is supperted by this contract (for erc223/677 tokens calls) /// @param token can be token1 or token2 function supportsToken(address token) public constant returns (bool) { return (token1 == token || token2 == token); } /// @dev gets called when no other function matches, delegate to the lib contract. function() public { address _mmLib = mmLib; if (msg.data.length > 0) { assembly { calldatacopy(0xff, 0, calldatasize) let retVal := delegatecall(gas, _mmLib, 0xff, calldatasize, 0, 0x20) switch retVal case 0 { revert(0,0) } default { return(0, 0x20) } } } } } // File: contracts/MarketMaker.sol /// @title Market Maker Interface. /// @author Tal Beja. contract MarketMaker is ERC223Receiver { function getCurrentPrice() public constant returns (uint _price); function change(address _fromToken, uint _amount, address _toToken) public returns (uint _returnAmount); function change(address _fromToken, uint _amount, address _toToken, uint _minReturn) public returns (uint _returnAmount); function change(address _toToken) public returns (uint _returnAmount); function change(address _toToken, uint _minReturn) public returns (uint _returnAmount); function quote(address _fromToken, uint _amount, address _toToken) public constant returns (uint _returnAmount); function openForPublicTrade() public returns (bool success); function isOpenForPublic() public returns (bool success); event Change(address indexed fromToken, uint inAmount, address indexed toToken, uint returnAmount, address indexed account); } // File: contracts/IEllipseMarketMaker.sol /// @title Ellipse Market Maker Interfase /// @author Tal Beja contract IEllipseMarketMaker is MarketMaker { // precision for price representation (as in ether or tokens). uint256 public constant PRECISION = 10 ** 18; // The tokens pair. ERC20 public token1; ERC20 public token2; // The tokens reserves. uint256 public R1; uint256 public R2; // The tokens full suplly. uint256 public S1; uint256 public S2; // State flags. bool public operational; bool public openForPublic; // Library contract address. address public mmLib; function supportsToken(address token) public constant returns (bool); function calcReserve(uint256 _R1, uint256 _S1, uint256 _S2) public pure returns (uint256); function validateReserves() public view returns (bool); function withdrawExcessReserves() public returns (uint256); function initializeAfterTransfer() public returns (bool); function initializeOnTransfer() public returns (bool); function getPrice(uint256 _R1, uint256 _R2, uint256 _S1, uint256 _S2) public constant returns (uint256); } // File: contracts/CurrencyFactory.sol /// @title Colu Local Currency + Market Maker factory contract. /// @author Rotem Lev. contract CurrencyFactory is Standard223Receiver, TokenHolder { struct CurrencyStruct { string name; uint8 decimals; uint256 totalSupply; address owner; address mmAddress; } // map of Market Maker owners: token address => currency struct mapping (address => CurrencyStruct) public currencyMap; // address of the deployed CLN contract (ERC20 Token) address public clnAddress; // address of the deployed elipse market maker contract address public mmLibAddress; address[] public tokens; event MarketOpen(address indexed marketMaker); event TokenCreated(address indexed token, address indexed owner); // modifier to check if called by issuer of the token modifier tokenIssuerOnly(address token, address owner) { require(currencyMap[token].owner == owner); _; } // modifier to only accept transferAndCall from CLN token modifier CLNOnly() { require(msg.sender == clnAddress); _; } /// @dev checks if the instance of market maker contract is closed for public /// @param _token address address of the CC token. modifier marketClosed(address _token) { require(!MarketMaker(currencyMap[_token].mmAddress).isOpenForPublic()); _; } /// @dev checks if the instance of market maker contract is open for public /// @param _token address address of the CC token. modifier marketOpen(address _token) { require(MarketMaker(currencyMap[_token].mmAddress).isOpenForPublic()); _; } /// @dev constructor only reuires the address of the CLN token which must use the ERC20 interface /// @param _mmLib address for the deployed market maker elipse contract /// @param _clnAddress address for the deployed ERC20 CLN token function CurrencyFactory(address _mmLib, address _clnAddress) public { require(_mmLib != address(0)); require(_clnAddress != address(0)); mmLibAddress = _mmLib; clnAddress = _clnAddress; } /// @dev create the MarketMaker and the CC token put all the CC token in the Market Maker reserve /// @param _name string name for CC token that is created. /// @param _symbol string symbol for CC token that is created. /// @param _decimals uint8 percison for CC token that is created. /// @param _totalSupply uint256 total supply of the CC token that is created. /// @param _tokenURI string the URI may point to a JSON file that conforms to the "Metadata JSON Schema". function createCurrency(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply, string _tokenURI) public returns (address) { ColuLocalCurrency subToken = new ColuLocalCurrency(_name, _symbol, _decimals, _totalSupply, _tokenURI); EllipseMarketMaker newMarketMaker = new EllipseMarketMaker(mmLibAddress, clnAddress, subToken); //set allowance require(subToken.transfer(newMarketMaker, _totalSupply)); require(IEllipseMarketMaker(newMarketMaker).initializeAfterTransfer()); currencyMap[subToken] = CurrencyStruct({ name: _name, decimals: _decimals, totalSupply: _totalSupply, mmAddress: newMarketMaker, owner: msg.sender}); tokens.push(subToken); TokenCreated(subToken, msg.sender); return subToken; } /// @dev create the MarketMaker and the CC token put all the CC token in the Market Maker reserve /// @param _name string name for CC token that is created. /// @param _symbol string symbol for CC token that is created. /// @param _decimals uint8 percison for CC token that is created. /// @param _totalSupply uint256 total supply of the CC token that is created. function createCurrency(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply) public returns (address) { return createCurrency(_name, _symbol, _decimals, _totalSupply, ''); } /// @dev normal send cln to the market maker contract, sender must approve() before calling method. can only be called by owner /// @dev sending CLN will return CC from the reserve to the sender. /// @param _token address address of the cc token managed by this factory. /// @param _clnAmount uint256 amount of CLN to transfer into the Market Maker reserve. function insertCLNtoMarketMaker(address _token, uint256 _clnAmount) public tokenIssuerOnly(_token, msg.sender) returns (uint256 _subTokenAmount) { require(_clnAmount > 0); address marketMakerAddress = getMarketMakerAddressFromToken(_token); require(ERC20(clnAddress).transferFrom(msg.sender, this, _clnAmount)); require(ERC20(clnAddress).approve(marketMakerAddress, _clnAmount)); _subTokenAmount = IEllipseMarketMaker(marketMakerAddress).change(clnAddress, _clnAmount, _token); require(ERC20(_token).transfer(msg.sender, _subTokenAmount)); } /// @dev ERC223 transferAndCall, send cln to the market maker contract can only be called by owner (see MarketMaker) /// @dev sending CLN will return CC from the reserve to the sender. /// @param _token address address of the cc token managed by this factory. function insertCLNtoMarketMaker(address _token) public tokenPayable CLNOnly tokenIssuerOnly(_token, tkn.sender) returns (uint256 _subTokenAmount) { address marketMakerAddress = getMarketMakerAddressFromToken(_token); require(ERC20(clnAddress).approve(marketMakerAddress, tkn.value)); _subTokenAmount = IEllipseMarketMaker(marketMakerAddress).change(clnAddress, tkn.value, _token); require(ERC20(_token).transfer(tkn.sender, _subTokenAmount)); } /// @dev normal send cc to the market maker contract, sender must approve() before calling method. can only be called by owner /// @dev sending CC will return CLN from the reserve to the sender. /// @param _token address address of the cc token managed by this factory. /// @param _ccAmount uint256 amount of CC to transfer into the Market Maker reserve. function extractCLNfromMarketMaker(address _token, uint256 _ccAmount) public tokenIssuerOnly(_token, msg.sender) returns (uint256 _clnTokenAmount) { address marketMakerAddress = getMarketMakerAddressFromToken(_token); require(ERC20(_token).transferFrom(msg.sender, this, _ccAmount)); require(ERC20(_token).approve(marketMakerAddress, _ccAmount)); _clnTokenAmount = IEllipseMarketMaker(marketMakerAddress).change(_token, _ccAmount, clnAddress); require(ERC20(clnAddress).transfer(msg.sender, _clnTokenAmount)); } /// @dev ERC223 transferAndCall, send CC to the market maker contract can only be called by owner (see MarketMaker) /// @dev sending CC will return CLN from the reserve to the sender. function extractCLNfromMarketMaker() public tokenPayable tokenIssuerOnly(msg.sender, tkn.sender) returns (uint256 _clnTokenAmount) { address marketMakerAddress = getMarketMakerAddressFromToken(msg.sender); require(ERC20(msg.sender).approve(marketMakerAddress, tkn.value)); _clnTokenAmount = IEllipseMarketMaker(marketMakerAddress).change(msg.sender, tkn.value, clnAddress); require(ERC20(clnAddress).transfer(tkn.sender, _clnTokenAmount)); } /// @dev opens the Market Maker to recvice transactions from all sources. /// @dev Request to transfer ownership of Market Maker contract to Owner instead of factory. /// @param _token address address of the cc token managed by this factory. function openMarket(address _token) public tokenIssuerOnly(_token, msg.sender) returns (bool) { address marketMakerAddress = getMarketMakerAddressFromToken(_token); require(MarketMaker(marketMakerAddress).openForPublicTrade()); Ownable(marketMakerAddress).requestOwnershipTransfer(msg.sender); Ownable(_token).requestOwnershipTransfer(msg.sender); MarketOpen(marketMakerAddress); return true; } /// @dev implementation for standard 223 reciver. /// @param _token address of the token used with transferAndCall. function supportsToken(address _token) public constant returns (bool) { return (clnAddress == _token || currencyMap[_token].totalSupply > 0); } /// @dev sets tokenURI for the given currency, can be used during the sell only /// @param _token address address of the token to update /// @param _tokenURI string the URI may point to a JSON file that conforms to the "Metadata JSON Schema". function setTokenURI(address _token, string _tokenURI) public tokenIssuerOnly(_token, msg.sender) marketClosed(_token) returns (bool) { ColuLocalCurrency(_token).setTokenURI(_tokenURI); return true; } /// @dev helper function to get the market maker address form token /// @param _token address of the token used with transferAndCall. function getMarketMakerAddressFromToken(address _token) public constant returns (address _marketMakerAddress) { _marketMakerAddress = currencyMap[_token].mmAddress; require(_marketMakerAddress != address(0)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"_token","type":"address"}],"name":"supportsToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwnerCandidate","type":"address"}],"name":"requestOwnershipTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"currencyMap","outputs":[{"name":"name","type":"string"},{"name":"decimals","type":"uint8"},{"name":"totalSupply","type":"uint256"},{"name":"owner","type":"address"},{"name":"mmAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"openMarket","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"clnAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mmLibAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"extractCLNfromMarketMaker","outputs":[{"name":"_clnTokenAmount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tokens","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_decimals","type":"uint8"},{"name":"_totalSupply","type":"uint256"},{"name":"_tokenURI","type":"string"}],"name":"createCurrency","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"}],"name":"getMarketMakerAddressFromToken","outputs":[{"name":"_marketMakerAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"insertCLNtoMarketMaker","outputs":[{"name":"_subTokenAmount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"tokenFallback","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"newOwnerCandidate","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_decimals","type":"uint8"},{"name":"_totalSupply","type":"uint256"}],"name":"createCurrency","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_ccAmount","type":"uint256"}],"name":"extractCLNfromMarketMaker","outputs":[{"name":"_clnTokenAmount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_clnAmount","type":"uint256"}],"name":"insertCLNtoMarketMaker","outputs":[{"name":"_subTokenAmount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_mmLib","type":"address"},{"name":"_clnAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"marketMaker","type":"address"}],"name":"MarketOpen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"token","type":"address"},{"indexed":true,"name":"owner","type":"address"}],"name":"TokenCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"by","type":"address"},{"indexed":true,"name":"to","type":"address"}],"name":"OwnershipRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516040806134fa8339810160405280516020909101516003805461010060a860020a0319163361010002179055600160a060020a038216151561005557600080fd5b600160a060020a038116151561006a57600080fd5b60078054600160a060020a03938416600160a060020a03199182161790915560068054929093169116179055613455806100a56000396000f3006080604052600436106200010d5763ffffffff60e060020a600035041663061f76508114620001125780630952c504146200014a578063115bdfe7146200017057806321a4c6c3146200023b578063451cd22d146200025f5780634d68954314620002935780634daadff914620002ab5780634f64b2be14620002d557806379ba509714620002f05780638da5cb5b146200030857806398d7352f1462000320578063a49cc76c146200038a578063ac3c49e01462000472578063b7073d2e1462000496578063c0ee0b8a14620004ba578063d091b55014620004ee578063d8bd47611462000506578063d9eb547b14620005ab578063dc39d06d14620005d2578063e5714ea314620005f9575b600080fd5b3480156200011f57600080fd5b5062000136600160a060020a036004351662000620565b604080519115158252519081900360200190f35b3480156200015757600080fd5b506200016e600160a060020a036004351662000661565b005b3480156200017d57600080fd5b5062000194600160a060020a0360043516620006f3565b6040805160ff8616602080830191909152918101859052600160a060020a0380851660608301528316608082015260a080825287519082015286519091829160c083019189019080838360005b83811015620001fb578181015183820152602001620001e1565b50505050905090810190601f168015620002295780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b3480156200024857600080fd5b5062000136600160a060020a0360043516620007c2565b3480156200026c57600080fd5b5062000277620009af565b60408051600160a060020a039092168252519081900360200190f35b348015620002a057600080fd5b5062000277620009be565b348015620002b857600080fd5b50620002c3620009cd565b60408051918252519081900360200190f35b348015620002e257600080fd5b506200027760043562000bf9565b348015620002fd57600080fd5b506200016e62000c22565b3480156200031557600080fd5b506200027762000cc9565b3480156200032d57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855262000136958335600160a060020a031695369560449491939091019190819084018382808284375094975062000cdd9650505050505050565b3480156200039757600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526200027794369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a893560ff169a8a8301359a9199909850606090910196509194509081019250819084018382808284375094975062000ea49650505050505050565b3480156200047f57600080fd5b5062000277600160a060020a0360043516620012e5565b348015620004a357600080fd5b50620002c3600160a060020a036004351662001310565b348015620004c757600080fd5b506200013660048035600160a060020a031690602480359160443591820191013562001556565b348015620004fb57600080fd5b50620002776200162e565b3480156200051357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526200027794369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050833560ff169450505060209091013590506200163d565b348015620005b857600080fd5b50620002c3600160a060020a036004351660243562001667565b348015620005df57600080fd5b5062000136600160a060020a036004351660243562001914565b3480156200060657600080fd5b50620002c3600160a060020a0360043516602435620019c8565b600654600090600160a060020a0383811691161480620006595750600160a060020a038216600090815260056020526040812060020154115b90505b919050565b6003546101009004600160a060020a031633146200067e57600080fd5b600160a060020a03811615156200069457600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091179182905560405191169033907f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec490600090a350565b60056020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529092918391908301828280156200078e5780601f1062000762576101008083540402835291602001916200078e565b820191906000526020600020905b8154815290600101906020018083116200077057829003601f168201915b505050600184015460028501546003860154600490960154949560ff90921694909350600160a060020a0391821692501685565b600160a060020a038082166000908152600560205260408120600301549091829184913391168114620007f457600080fd5b620007ff85620012e5565b925082600160a060020a031663ec3324886040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156200084057600080fd5b505af115801562000855573d6000803e3d6000fd5b505050506040513d60208110156200086c57600080fd5b505115156200087a57600080fd5b604080517f0952c5040000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a03851691630952c50491602480830192600092919082900301818387803b158015620008db57600080fd5b505af1158015620008f0573d6000803e3d6000fd5b5050604080517f0952c5040000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a0389169350630952c5049250602480830192600092919082900301818387803b1580156200095557600080fd5b505af11580156200096a573d6000803e3d6000fd5b5050604051600160a060020a03861692507fd89dc0ad0949ca0a2fb2c8b9bd54f53eef80290fdbb947a3e778efe61e6fef929150600090a2600193505b505050919050565b600654600160a060020a031681565b600754600160a060020a031681565b600354600090819060ff161515620009e457600080fd5b600154336000818152600560205260409020600301549091600160a060020a039081169116811462000a1557600080fd5b62000a2033620012e5565b600254604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a0384166004820152602481019290925251919450339163095ea7b3916044808201926020929091908290030181600087803b15801562000a9057600080fd5b505af115801562000aa5573d6000803e3d6000fd5b505050506040513d602081101562000abc57600080fd5b5051151562000aca57600080fd5b6002546006546040805160e060020a63de683a7d0281523360048201526024810193909352600160a060020a039182166044840152519085169163de683a7d9160648083019260209291908290030181600087803b15801562000b2c57600080fd5b505af115801562000b41573d6000803e3d6000fd5b505050506040513d602081101562000b5857600080fd5b50516006546001546040805160e060020a63a9059cbb028152600160a060020a03928316600482015260248101859052905193975091169163a9059cbb916044808201926020929091908290030181600087803b15801562000bb957600080fd5b505af115801562000bce573d6000803e3d6000fd5b505050506040513d602081101562000be557600080fd5b5051151562000bf357600080fd5b50505090565b600880548290811062000c0857fe5b600091825260209091200154600160a060020a0316905081565b600454600090600160a060020a0316331462000c3d57600080fd5b506003805460048054600160a060020a0381811661010090810274ffffffffffffffffffffffffffffffffffffffff00198616179586905573ffffffffffffffffffffffffffffffffffffffff199092169092556040519281900482169304169082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b6003546101009004600160a060020a031681565b600160a060020a0380831660009081526005602052604081206003015490918491339116811462000d0d57600080fd5b600160a060020a03808616600090815260056020908152604080832060049081015482517f727d508a00000000000000000000000000000000000000000000000000000000815292518b96919091169463727d508a94848401949093908390030190829087803b15801562000d8157600080fd5b505af115801562000d96573d6000803e3d6000fd5b505050506040513d602081101562000dad57600080fd5b50511562000dba57600080fd5b6040517fe0df5b6f000000000000000000000000000000000000000000000000000000008152602060048201818152875160248401528751600160a060020a038a169363e0df5b6f938a939283926044019185019080838360005b8381101562000e2f57818101518382015260200162000e15565b50505050905090810190601f16801562000e5d5780820380516001836020036101000a031916815260200191505b5092505050600060405180830381600087803b15801562000e7d57600080fd5b505af115801562000e92573d6000803e3d6000fd5b50505050600193505b50505092915050565b6000806000878787878762000eb862001c55565b60ff841660408201526060810183905260a080825286519082015285518190602080830191608084019160c0850191908b019080838360005b8381101562000f0b57818101518382015260200162000ef1565b50505050905090810190601f16801562000f395780820380516001836020036101000a031916815260200191505b5084810383528851815288516020918201918a019080838360005b8381101562000f6e57818101518382015260200162000f54565b50505050905090810190601f16801562000f9c5780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b8381101562000fd157818101518382015260200162000fb7565b50505050905090810190601f16801562000fff5780820380516001836020036101000a031916815260200191505b5098505050505050505050604051809103906000f08015801562001027573d6000803e3d6000fd5b50600754600654919350600160a060020a039081169116836200104962001c66565b600160a060020a03938416815291831660208301529091166040808301919091525190819003606001906000f08015801562001089573d6000803e3d6000fd5b50905081600160a060020a031663a9059cbb82876040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015620010f057600080fd5b505af115801562001105573d6000803e3d6000fd5b505050506040513d60208110156200111c57600080fd5b505115156200112a57600080fd5b80600160a060020a0316638bc0b8876040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156200116957600080fd5b505af11580156200117e573d6000803e3d6000fd5b505050506040513d60208110156200119557600080fd5b50511515620011a357600080fd5b6040805160a08101825289815260ff8816602080830191909152818301889052336060830152600160a060020a0384811660808401528516600090815260058252929092208151805192939192620011ff928492019062001c77565b5060208201516001828101805460ff191660ff909316929092179091556040808401516002840155606084015160038401805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03938416179091556080909501516004909401805486169482169490941790935560088054928301815560009081527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee39092018054909416928616928317909355915133927fd5f9bdf12adf29dab0248c349842c3822d53ae2bb4f36352f301630d018c813991a3509695505050505050565b600160a060020a03808216600090815260056020526040902060040154168015156200065c57600080fd5b600354600090819060ff1615156200132757600080fd5b600654600160a060020a031633146200133f57600080fd5b600154600160a060020a0380851660009081526005602052604090206003015485928216911681146200137157600080fd5b6200137c85620012e5565b600654600254604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a0380861660048301526024820193909352905193965091169163095ea7b3916044808201926020929091908290030181600087803b158015620013f257600080fd5b505af115801562001407573d6000803e3d6000fd5b505050506040513d60208110156200141e57600080fd5b505115156200142c57600080fd5b6006546002546040805160e060020a63de683a7d028152600160a060020a03938416600482015260248101929092528783166044830152519185169163de683a7d916064808201926020929091908290030181600087803b1580156200149157600080fd5b505af1158015620014a6573d6000803e3d6000fd5b505050506040513d6020811015620014bd57600080fd5b50516001546040805160e060020a63a9059cbb028152600160a060020a0392831660048201526024810184905290519296509087169163a9059cbb916044808201926020929091908290030181600087803b1580156200151c57600080fd5b505af115801562001531573d6000803e3d6000fd5b505050506040513d60208110156200154857600080fd5b50511515620009a757600080fd5b6000620015633362000620565b1515620015735750600062001626565b6040805160608101825233808252600160a060020a038816602083018190529183018790526000805473ffffffffffffffffffffffffffffffffffffffff19908116909217905560018054909116909117815560028690556003805460ff191690911790555130908490849080838380828437820191505092505050600060405180830381855af491505015156200161857506003805460ff19169055600062001626565b506003805460ff1916905560015b949350505050565b600454600160a060020a031681565b60006200165e85858585602060405190810160405280600081525062000ea4565b95945050505050565b600160a060020a0380831660009081526005602052604081206003015490918291859133911681146200169957600080fd5b620016a486620012e5565b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890529051919450600160a060020a038816916323b872dd916064808201926020929091908290030181600087803b1580156200171757600080fd5b505af11580156200172c573d6000803e3d6000fd5b505050506040513d60208110156200174357600080fd5b505115156200175157600080fd5b85600160a060020a031663095ea7b384876040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015620017b557600080fd5b505af1158015620017ca573d6000803e3d6000fd5b505050506040513d6020811015620017e157600080fd5b50511515620017ef57600080fd5b6006546040805160e060020a63de683a7d028152600160a060020a03898116600483015260248201899052928316604482015290519185169163de683a7d916064808201926020929091908290030181600087803b1580156200185157600080fd5b505af115801562001866573d6000803e3d6000fd5b505050506040513d60208110156200187d57600080fd5b50516006546040805160e060020a63a9059cbb028152336004820152602481018490529051929650600160a060020a039091169163a9059cbb916044808201926020929091908290030181600087803b158015620018da57600080fd5b505af1158015620018ef573d6000803e3d6000fd5b505050506040513d60208110156200190657600080fd5b5051151562000e9b57600080fd5b6003546000906101009004600160a060020a031633146200193457600080fd5b6003546040805160e060020a63a9059cbb028152610100909204600160a060020a0390811660048401526024830185905290519085169163a9059cbb9160448083019260209291908290030181600087803b1580156200199357600080fd5b505af1158015620019a8573d6000803e3d6000fd5b505050506040513d6020811015620019bf57600080fd5b50519392505050565b600160a060020a038083166000908152600560205260408120600301549091829185913391168114620019fa57600080fd5b6000851162001a0857600080fd5b62001a1386620012e5565b600654604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018990529051929550600160a060020a03909116916323b872dd916064808201926020929091908290030181600087803b15801562001a8a57600080fd5b505af115801562001a9f573d6000803e3d6000fd5b505050506040513d602081101562001ab657600080fd5b5051151562001ac457600080fd5b600654604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152602482018990529151919092169163095ea7b39160448083019260209291908290030181600087803b15801562001b3457600080fd5b505af115801562001b49573d6000803e3d6000fd5b505050506040513d602081101562001b6057600080fd5b5051151562001b6e57600080fd5b6006546040805160e060020a63de683a7d028152600160a060020a03928316600482015260248101889052888316604482015290519185169163de683a7d916064808201926020929091908290030181600087803b15801562001bd057600080fd5b505af115801562001be5573d6000803e3d6000fd5b505050506040513d602081101562001bfc57600080fd5b50516040805160e060020a63a9059cbb028152336004820152602481018390529051919550600160a060020a0388169163a9059cbb916044808201926020929091908290030181600087803b158015620018da57600080fd5b604051610fc18062001d1d83390190565b60405161074c8062002cde83390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062001cba57805160ff191683800117855562001cea565b8280016001018555821562001cea579182015b8281111562001cea57825182559160200191906001019062001ccd565b5062001cf892915062001cfc565b5090565b62001d1991905b8082111562001cf8576000815560010162001d03565b90560060806040523480156200001157600080fd5b5060405162000fc138038062000fc183398101604090815281516020830151918301516060840151608085015160048054600160a060020a03191633179055928501949384019391929091018115156200006a57600080fd5b845115156200007857600080fd5b835115156200008657600080fd5b60018290558451620000a0906006906020880190620000fb565b508351620000b6906007906020870190620000fb565b506008805460ff191660ff85161790558051620000db906009906020840190620000fb565b50506001543360009081526003602052604090205550620001a092505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200013e57805160ff19168380011785556200016e565b828001600101855582156200016e579182015b828111156200016e57825182559160200191906001019062000151565b506200017c92915062000180565b5090565b6200019d91905b808211156200017c576000815560010162000187565b90565b610e1180620001b06000396000f3006080604052600436106100f05763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100f55780630952c5041461017f578063095ea7b3146101a257806318160ddd146101da57806323b872dd14610201578063313ce5671461022b5780633c130d90146102565780634000aea01461026b57806370a08231146102d457806379ba5097146102f55780638da5cb5b1461030a57806395d89b411461033b578063a9059cbb14610350578063d091b55014610374578063dc39d06d14610389578063dd62ed3e146103ad578063e0df5b6f146103d4575b600080fd5b34801561010157600080fd5b5061010a61042d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014457818101518382015260200161012c565b50505050905090810190601f1680156101715780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018b57600080fd5b506101a0600160a060020a03600435166104bb565b005b3480156101ae57600080fd5b506101c6600160a060020a0360043516602435610546565b604080519115158252519081900360200190f35b3480156101e657600080fd5b506101ef6105ea565b60408051918252519081900360200190f35b34801561020d57600080fd5b506101c6600160a060020a03600435811690602435166044356105f0565b34801561023757600080fd5b50610240610712565b6040805160ff9092168252519081900360200190f35b34801561026257600080fd5b5061010a61071b565b34801561027757600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526101c6948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506107769650505050505050565b3480156102e057600080fd5b506101ef600160a060020a036004351661086d565b34801561030157600080fd5b506101a0610888565b34801561031657600080fd5b5061031f610910565b60408051600160a060020a039092168252519081900360200190f35b34801561034757600080fd5b5061010a61091f565b34801561035c57600080fd5b506101c6600160a060020a036004351660243561097a565b34801561038057600080fd5b5061031f610a41565b34801561039557600080fd5b506101c6600160a060020a0360043516602435610a50565b3480156103b957600080fd5b506101ef600160a060020a0360043581169060243516610b0d565b3480156103e057600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101a0943694929360249392840191908190840183828082843750949750610b389650505050505050565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104b35780601f10610488576101008083540402835291602001916104b3565b820191906000526020600020905b81548152906001019060200180831161049657829003601f168201915b505050505081565b600454600160a060020a031633146104d257600080fd5b600160a060020a03811615156104e757600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091179182905560405191169033907f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec490600090a350565b600081158015906105795750336000908152600260209081526040808320600160a060020a038716845290915290205415155b1561058357600080fd5b336000818152600260209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60015481565b600080600160a060020a038416151561060857600080fd5b50600160a060020a03841660008181526002602090815260408083203384528252808320549383526003909152902054610648908463ffffffff610bff16565b600160a060020a03808716600090815260036020526040808220939093559086168152205461067d908463ffffffff610c1416565b600160a060020a0385166000908152600360205260409020556106a6818463ffffffff610bff16565b600160a060020a03808716600081815260026020908152604080832033845282529182902094909455805187815290519288169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3506001949350505050565b60085460ff1681565b6009805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104b35780601f10610488576101008083540402835291602001916104b3565b6000610782848461097a565b151561078d57600080fd5b83600160a060020a031633600160a060020a03167fce8124fd2ae9fd7904103e5a9ebe88b527b9ca0e32a32fd497845c82706542d385856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156108075781810151838201526020016107ef565b50505050905090810190601f1680156108345780820380516001836020036101000a031916815260200191505b50935050505060405180910390a361084b84610c26565b156108625761085b848484610c2e565b9050610866565b5060015b9392505050565b600160a060020a031660009081526003602052604090205490565b600554600090600160a060020a031633146108a257600080fd5b50600480546005805473ffffffffffffffffffffffffffffffffffffffff19808416600160a060020a038381169190911795869055911690915560405191811692169082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b600454600160a060020a031681565b6007805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104b35780601f10610488576101008083540402835291602001916104b3565b6000600160a060020a038316151561099157600080fd5b336000908152600360205260409020546109b1908363ffffffff610bff16565b3360009081526003602052604080822092909255600160a060020a038516815220546109e3908363ffffffff610c1416565b600160a060020a0384166000818152600360209081526040918290209390935580518581529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b600554600160a060020a031681565b600454600090600160a060020a03163314610a6a57600080fd5b60048054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a039283169381019390935260248301859052519085169163a9059cbb9160448083019260209291908290030181600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505050506040513d6020811015610b0457600080fd5b50519392505050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600454600160a060020a03163314610b4f57600080fd5b8051610b62906009906020840190610d4a565b507f2eb900bac6e5b21f659a14cf4e0b4a5689edb16947c549906436bc73b7053d16816040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bc2578181015183820152602001610baa565b50505050905090810190601f168015610bef5780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b600082821115610c0e57600080fd5b50900390565b60008282018381101561086657600080fd5b6000903b1190565b6040517fc0ee0b8a0000000000000000000000000000000000000000000000000000000081523360048201818152602483018590526060604484019081528451606485015284516000948894600160a060020a0386169463c0ee0b8a9491938a938a939160849091019060208501908083838e5b83811015610cba578181015183820152602001610ca2565b50505050905090810190601f168015610ce75780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015610d0857600080fd5b505af1158015610d1c573d6000803e3d6000fd5b505050506040513d6020811015610d3257600080fd5b50511515610d3f57600080fd5b506001949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610d8b57805160ff1916838001178555610db8565b82800160010185558215610db8579182015b82811115610db8578251825591602001919060010190610d9d565b50610dc4929150610dc8565b5090565b610de291905b80821115610dc45760008155600101610dce565b905600a165627a7a723058209639595b3309c99105a7c374771b79578020c23eb8380eebb58de8d7506449130029608060405234801561001057600080fd5b5060405160608061074c8339810160409081528151602083015191909201516003805461010060a860020a0319163361010002179055600080806060600160a060020a038716151561006157600080fd5b60408051606480825260a082019092527f6dd23b5b000000000000000000000000000000000000000000000000000000009550606094509092508260208201610c808038833901905050905083602082015286602482015285604482015284606482015286600160a060020a03168160405180828051906020019080838360005b838110156100fa5781810151838201526020016100e2565b50505050905090810190601f1680156101275780820380516001836020036101000a031916815260200191505b50915050600060405180830381855af4915050151561014557600080fd5b505050505050506105f18061015b6000396000f3006080604052600436106100e55763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663061f765081146101325780630952c504146101675780630a4010861461018a57806325be124e1461019f57806363ddc54d146101d057806365581793146101e55780637826f28f1461020c57806379ba5097146102215780638da5cb5b14610236578063aaf5eb681461024b578063b22dd2ca14610260578063c0ee0b8a14610275578063d091b550146102a6578063d21220a7146102bb578063eff3c4e7146102d0578063fee2cb05146102e5575b3480156100f157600080fd5b50600b54620100009004600160a060020a0316600036111561012f5736600060ff37602060003660ff845af480801561012a5760206000f35b600080fd5b50005b34801561013e57600080fd5b50610153600160a060020a03600435166102fa565b604080519115158252519081900360200190f35b34801561017357600080fd5b50610188600160a060020a036004351661032c565b005b34801561019657600080fd5b506101536103bc565b3480156101ab57600080fd5b506101b46103c5565b60408051600160a060020a039092168252519081900360200190f35b3480156101dc57600080fd5b506101b46103d4565b3480156101f157600080fd5b506101fa6103e9565b60408051918252519081900360200190f35b34801561021857600080fd5b506101fa6103ef565b34801561022d57600080fd5b506101886103f5565b34801561024257600080fd5b506101b461049b565b34801561025757600080fd5b506101fa6104af565b34801561026c57600080fd5b506101fa6104bb565b34801561028157600080fd5b5061015360048035600160a060020a03169060248035916044359182019101356104c1565b3480156102b257600080fd5b506101b4610593565b3480156102c757600080fd5b506101b46105a2565b3480156102dc57600080fd5b506101536105b1565b3480156102f157600080fd5b506101fa6105bf565b600554600090600160a060020a03838116911614806103265750600654600160a060020a038381169116145b92915050565b6003546101009004600160a060020a0316331461034857600080fd5b600160a060020a038116151561035d57600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091179182905560405191169033907f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec490600090a350565b600b5460ff1681565b600654600160a060020a031681565b600b54620100009004600160a060020a031681565b600a5481565b60095481565b600454600090600160a060020a0316331461040f57600080fd5b506003805460048054600160a060020a0381811661010090810274ffffffffffffffffffffffffffffffffffffffff00198616179586905573ffffffffffffffffffffffffffffffffffffffff199092169092556040519281900482169304169082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b6003546101009004600160a060020a031681565b670de0b6b3a764000081565b60075481565b60006104cc336102fa565b15156104da5750600061058b565b6040805160608101825233808252600160a060020a038816602083018190529183018790526000805473ffffffffffffffffffffffffffffffffffffffff19908116909217905560018054909116909117815560028690556003805460ff191690911790555130908490849080838380828437820191505092505050600060405180830381855af4915050151561057d57506003805460ff19169055600061058b565b506003805460ff1916905560015b949350505050565b600454600160a060020a031681565b600554600160a060020a031681565b600b54610100900460ff1681565b600854815600a165627a7a72305820988e41707ba319a85965f953a58b1b4c5bd3240eb4afca0a7731851035ddb50a0029a165627a7a723058201daafcbdd3bfa143178a13f29197811fc4d9f839bb22344767259af627422ae90029000000000000000000000000c70636e0886ec4a4f2b7e42ac57ccd1b976352d00000000000000000000000004162178b78d6985480a308b2190ee5517460406d
Deployed Bytecode
0x6080604052600436106200010d5763ffffffff60e060020a600035041663061f76508114620001125780630952c504146200014a578063115bdfe7146200017057806321a4c6c3146200023b578063451cd22d146200025f5780634d68954314620002935780634daadff914620002ab5780634f64b2be14620002d557806379ba509714620002f05780638da5cb5b146200030857806398d7352f1462000320578063a49cc76c146200038a578063ac3c49e01462000472578063b7073d2e1462000496578063c0ee0b8a14620004ba578063d091b55014620004ee578063d8bd47611462000506578063d9eb547b14620005ab578063dc39d06d14620005d2578063e5714ea314620005f9575b600080fd5b3480156200011f57600080fd5b5062000136600160a060020a036004351662000620565b604080519115158252519081900360200190f35b3480156200015757600080fd5b506200016e600160a060020a036004351662000661565b005b3480156200017d57600080fd5b5062000194600160a060020a0360043516620006f3565b6040805160ff8616602080830191909152918101859052600160a060020a0380851660608301528316608082015260a080825287519082015286519091829160c083019189019080838360005b83811015620001fb578181015183820152602001620001e1565b50505050905090810190601f168015620002295780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b3480156200024857600080fd5b5062000136600160a060020a0360043516620007c2565b3480156200026c57600080fd5b5062000277620009af565b60408051600160a060020a039092168252519081900360200190f35b348015620002a057600080fd5b5062000277620009be565b348015620002b857600080fd5b50620002c3620009cd565b60408051918252519081900360200190f35b348015620002e257600080fd5b506200027760043562000bf9565b348015620002fd57600080fd5b506200016e62000c22565b3480156200031557600080fd5b506200027762000cc9565b3480156200032d57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855262000136958335600160a060020a031695369560449491939091019190819084018382808284375094975062000cdd9650505050505050565b3480156200039757600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526200027794369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a893560ff169a8a8301359a9199909850606090910196509194509081019250819084018382808284375094975062000ea49650505050505050565b3480156200047f57600080fd5b5062000277600160a060020a0360043516620012e5565b348015620004a357600080fd5b50620002c3600160a060020a036004351662001310565b348015620004c757600080fd5b506200013660048035600160a060020a031690602480359160443591820191013562001556565b348015620004fb57600080fd5b50620002776200162e565b3480156200051357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526200027794369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050833560ff169450505060209091013590506200163d565b348015620005b857600080fd5b50620002c3600160a060020a036004351660243562001667565b348015620005df57600080fd5b5062000136600160a060020a036004351660243562001914565b3480156200060657600080fd5b50620002c3600160a060020a0360043516602435620019c8565b600654600090600160a060020a0383811691161480620006595750600160a060020a038216600090815260056020526040812060020154115b90505b919050565b6003546101009004600160a060020a031633146200067e57600080fd5b600160a060020a03811615156200069457600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091179182905560405191169033907f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec490600090a350565b60056020908152600091825260409182902080548351601f600260001961010060018616150201909316929092049182018490048402810184019094528084529092918391908301828280156200078e5780601f1062000762576101008083540402835291602001916200078e565b820191906000526020600020905b8154815290600101906020018083116200077057829003601f168201915b505050600184015460028501546003860154600490960154949560ff90921694909350600160a060020a0391821692501685565b600160a060020a038082166000908152600560205260408120600301549091829184913391168114620007f457600080fd5b620007ff85620012e5565b925082600160a060020a031663ec3324886040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156200084057600080fd5b505af115801562000855573d6000803e3d6000fd5b505050506040513d60208110156200086c57600080fd5b505115156200087a57600080fd5b604080517f0952c5040000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a03851691630952c50491602480830192600092919082900301818387803b158015620008db57600080fd5b505af1158015620008f0573d6000803e3d6000fd5b5050604080517f0952c5040000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a0389169350630952c5049250602480830192600092919082900301818387803b1580156200095557600080fd5b505af11580156200096a573d6000803e3d6000fd5b5050604051600160a060020a03861692507fd89dc0ad0949ca0a2fb2c8b9bd54f53eef80290fdbb947a3e778efe61e6fef929150600090a2600193505b505050919050565b600654600160a060020a031681565b600754600160a060020a031681565b600354600090819060ff161515620009e457600080fd5b600154336000818152600560205260409020600301549091600160a060020a039081169116811462000a1557600080fd5b62000a2033620012e5565b600254604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a0384166004820152602481019290925251919450339163095ea7b3916044808201926020929091908290030181600087803b15801562000a9057600080fd5b505af115801562000aa5573d6000803e3d6000fd5b505050506040513d602081101562000abc57600080fd5b5051151562000aca57600080fd5b6002546006546040805160e060020a63de683a7d0281523360048201526024810193909352600160a060020a039182166044840152519085169163de683a7d9160648083019260209291908290030181600087803b15801562000b2c57600080fd5b505af115801562000b41573d6000803e3d6000fd5b505050506040513d602081101562000b5857600080fd5b50516006546001546040805160e060020a63a9059cbb028152600160a060020a03928316600482015260248101859052905193975091169163a9059cbb916044808201926020929091908290030181600087803b15801562000bb957600080fd5b505af115801562000bce573d6000803e3d6000fd5b505050506040513d602081101562000be557600080fd5b5051151562000bf357600080fd5b50505090565b600880548290811062000c0857fe5b600091825260209091200154600160a060020a0316905081565b600454600090600160a060020a0316331462000c3d57600080fd5b506003805460048054600160a060020a0381811661010090810274ffffffffffffffffffffffffffffffffffffffff00198616179586905573ffffffffffffffffffffffffffffffffffffffff199092169092556040519281900482169304169082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b6003546101009004600160a060020a031681565b600160a060020a0380831660009081526005602052604081206003015490918491339116811462000d0d57600080fd5b600160a060020a03808616600090815260056020908152604080832060049081015482517f727d508a00000000000000000000000000000000000000000000000000000000815292518b96919091169463727d508a94848401949093908390030190829087803b15801562000d8157600080fd5b505af115801562000d96573d6000803e3d6000fd5b505050506040513d602081101562000dad57600080fd5b50511562000dba57600080fd5b6040517fe0df5b6f000000000000000000000000000000000000000000000000000000008152602060048201818152875160248401528751600160a060020a038a169363e0df5b6f938a939283926044019185019080838360005b8381101562000e2f57818101518382015260200162000e15565b50505050905090810190601f16801562000e5d5780820380516001836020036101000a031916815260200191505b5092505050600060405180830381600087803b15801562000e7d57600080fd5b505af115801562000e92573d6000803e3d6000fd5b50505050600193505b50505092915050565b6000806000878787878762000eb862001c55565b60ff841660408201526060810183905260a080825286519082015285518190602080830191608084019160c0850191908b019080838360005b8381101562000f0b57818101518382015260200162000ef1565b50505050905090810190601f16801562000f395780820380516001836020036101000a031916815260200191505b5084810383528851815288516020918201918a019080838360005b8381101562000f6e57818101518382015260200162000f54565b50505050905090810190601f16801562000f9c5780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b8381101562000fd157818101518382015260200162000fb7565b50505050905090810190601f16801562000fff5780820380516001836020036101000a031916815260200191505b5098505050505050505050604051809103906000f08015801562001027573d6000803e3d6000fd5b50600754600654919350600160a060020a039081169116836200104962001c66565b600160a060020a03938416815291831660208301529091166040808301919091525190819003606001906000f08015801562001089573d6000803e3d6000fd5b50905081600160a060020a031663a9059cbb82876040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015620010f057600080fd5b505af115801562001105573d6000803e3d6000fd5b505050506040513d60208110156200111c57600080fd5b505115156200112a57600080fd5b80600160a060020a0316638bc0b8876040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156200116957600080fd5b505af11580156200117e573d6000803e3d6000fd5b505050506040513d60208110156200119557600080fd5b50511515620011a357600080fd5b6040805160a08101825289815260ff8816602080830191909152818301889052336060830152600160a060020a0384811660808401528516600090815260058252929092208151805192939192620011ff928492019062001c77565b5060208201516001828101805460ff191660ff909316929092179091556040808401516002840155606084015160038401805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03938416179091556080909501516004909401805486169482169490941790935560088054928301815560009081527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee39092018054909416928616928317909355915133927fd5f9bdf12adf29dab0248c349842c3822d53ae2bb4f36352f301630d018c813991a3509695505050505050565b600160a060020a03808216600090815260056020526040902060040154168015156200065c57600080fd5b600354600090819060ff1615156200132757600080fd5b600654600160a060020a031633146200133f57600080fd5b600154600160a060020a0380851660009081526005602052604090206003015485928216911681146200137157600080fd5b6200137c85620012e5565b600654600254604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a0380861660048301526024820193909352905193965091169163095ea7b3916044808201926020929091908290030181600087803b158015620013f257600080fd5b505af115801562001407573d6000803e3d6000fd5b505050506040513d60208110156200141e57600080fd5b505115156200142c57600080fd5b6006546002546040805160e060020a63de683a7d028152600160a060020a03938416600482015260248101929092528783166044830152519185169163de683a7d916064808201926020929091908290030181600087803b1580156200149157600080fd5b505af1158015620014a6573d6000803e3d6000fd5b505050506040513d6020811015620014bd57600080fd5b50516001546040805160e060020a63a9059cbb028152600160a060020a0392831660048201526024810184905290519296509087169163a9059cbb916044808201926020929091908290030181600087803b1580156200151c57600080fd5b505af115801562001531573d6000803e3d6000fd5b505050506040513d60208110156200154857600080fd5b50511515620009a757600080fd5b6000620015633362000620565b1515620015735750600062001626565b6040805160608101825233808252600160a060020a038816602083018190529183018790526000805473ffffffffffffffffffffffffffffffffffffffff19908116909217905560018054909116909117815560028690556003805460ff191690911790555130908490849080838380828437820191505092505050600060405180830381855af491505015156200161857506003805460ff19169055600062001626565b506003805460ff1916905560015b949350505050565b600454600160a060020a031681565b60006200165e85858585602060405190810160405280600081525062000ea4565b95945050505050565b600160a060020a0380831660009081526005602052604081206003015490918291859133911681146200169957600080fd5b620016a486620012e5565b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890529051919450600160a060020a038816916323b872dd916064808201926020929091908290030181600087803b1580156200171757600080fd5b505af11580156200172c573d6000803e3d6000fd5b505050506040513d60208110156200174357600080fd5b505115156200175157600080fd5b85600160a060020a031663095ea7b384876040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015620017b557600080fd5b505af1158015620017ca573d6000803e3d6000fd5b505050506040513d6020811015620017e157600080fd5b50511515620017ef57600080fd5b6006546040805160e060020a63de683a7d028152600160a060020a03898116600483015260248201899052928316604482015290519185169163de683a7d916064808201926020929091908290030181600087803b1580156200185157600080fd5b505af115801562001866573d6000803e3d6000fd5b505050506040513d60208110156200187d57600080fd5b50516006546040805160e060020a63a9059cbb028152336004820152602481018490529051929650600160a060020a039091169163a9059cbb916044808201926020929091908290030181600087803b158015620018da57600080fd5b505af1158015620018ef573d6000803e3d6000fd5b505050506040513d60208110156200190657600080fd5b5051151562000e9b57600080fd5b6003546000906101009004600160a060020a031633146200193457600080fd5b6003546040805160e060020a63a9059cbb028152610100909204600160a060020a0390811660048401526024830185905290519085169163a9059cbb9160448083019260209291908290030181600087803b1580156200199357600080fd5b505af1158015620019a8573d6000803e3d6000fd5b505050506040513d6020811015620019bf57600080fd5b50519392505050565b600160a060020a038083166000908152600560205260408120600301549091829185913391168114620019fa57600080fd5b6000851162001a0857600080fd5b62001a1386620012e5565b600654604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018990529051929550600160a060020a03909116916323b872dd916064808201926020929091908290030181600087803b15801562001a8a57600080fd5b505af115801562001a9f573d6000803e3d6000fd5b505050506040513d602081101562001ab657600080fd5b5051151562001ac457600080fd5b600654604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152602482018990529151919092169163095ea7b39160448083019260209291908290030181600087803b15801562001b3457600080fd5b505af115801562001b49573d6000803e3d6000fd5b505050506040513d602081101562001b6057600080fd5b5051151562001b6e57600080fd5b6006546040805160e060020a63de683a7d028152600160a060020a03928316600482015260248101889052888316604482015290519185169163de683a7d916064808201926020929091908290030181600087803b15801562001bd057600080fd5b505af115801562001be5573d6000803e3d6000fd5b505050506040513d602081101562001bfc57600080fd5b50516040805160e060020a63a9059cbb028152336004820152602481018390529051919550600160a060020a0388169163a9059cbb916044808201926020929091908290030181600087803b158015620018da57600080fd5b604051610fc18062001d1d83390190565b60405161074c8062002cde83390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062001cba57805160ff191683800117855562001cea565b8280016001018555821562001cea579182015b8281111562001cea57825182559160200191906001019062001ccd565b5062001cf892915062001cfc565b5090565b62001d1991905b8082111562001cf8576000815560010162001d03565b90560060806040523480156200001157600080fd5b5060405162000fc138038062000fc183398101604090815281516020830151918301516060840151608085015160048054600160a060020a03191633179055928501949384019391929091018115156200006a57600080fd5b845115156200007857600080fd5b835115156200008657600080fd5b60018290558451620000a0906006906020880190620000fb565b508351620000b6906007906020870190620000fb565b506008805460ff191660ff85161790558051620000db906009906020840190620000fb565b50506001543360009081526003602052604090205550620001a092505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200013e57805160ff19168380011785556200016e565b828001600101855582156200016e579182015b828111156200016e57825182559160200191906001019062000151565b506200017c92915062000180565b5090565b6200019d91905b808211156200017c576000815560010162000187565b90565b610e1180620001b06000396000f3006080604052600436106100f05763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde0381146100f55780630952c5041461017f578063095ea7b3146101a257806318160ddd146101da57806323b872dd14610201578063313ce5671461022b5780633c130d90146102565780634000aea01461026b57806370a08231146102d457806379ba5097146102f55780638da5cb5b1461030a57806395d89b411461033b578063a9059cbb14610350578063d091b55014610374578063dc39d06d14610389578063dd62ed3e146103ad578063e0df5b6f146103d4575b600080fd5b34801561010157600080fd5b5061010a61042d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014457818101518382015260200161012c565b50505050905090810190601f1680156101715780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561018b57600080fd5b506101a0600160a060020a03600435166104bb565b005b3480156101ae57600080fd5b506101c6600160a060020a0360043516602435610546565b604080519115158252519081900360200190f35b3480156101e657600080fd5b506101ef6105ea565b60408051918252519081900360200190f35b34801561020d57600080fd5b506101c6600160a060020a03600435811690602435166044356105f0565b34801561023757600080fd5b50610240610712565b6040805160ff9092168252519081900360200190f35b34801561026257600080fd5b5061010a61071b565b34801561027757600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526101c6948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506107769650505050505050565b3480156102e057600080fd5b506101ef600160a060020a036004351661086d565b34801561030157600080fd5b506101a0610888565b34801561031657600080fd5b5061031f610910565b60408051600160a060020a039092168252519081900360200190f35b34801561034757600080fd5b5061010a61091f565b34801561035c57600080fd5b506101c6600160a060020a036004351660243561097a565b34801561038057600080fd5b5061031f610a41565b34801561039557600080fd5b506101c6600160a060020a0360043516602435610a50565b3480156103b957600080fd5b506101ef600160a060020a0360043581169060243516610b0d565b3480156103e057600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101a0943694929360249392840191908190840183828082843750949750610b389650505050505050565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104b35780601f10610488576101008083540402835291602001916104b3565b820191906000526020600020905b81548152906001019060200180831161049657829003601f168201915b505050505081565b600454600160a060020a031633146104d257600080fd5b600160a060020a03811615156104e757600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091179182905560405191169033907f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec490600090a350565b600081158015906105795750336000908152600260209081526040808320600160a060020a038716845290915290205415155b1561058357600080fd5b336000818152600260209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60015481565b600080600160a060020a038416151561060857600080fd5b50600160a060020a03841660008181526002602090815260408083203384528252808320549383526003909152902054610648908463ffffffff610bff16565b600160a060020a03808716600090815260036020526040808220939093559086168152205461067d908463ffffffff610c1416565b600160a060020a0385166000908152600360205260409020556106a6818463ffffffff610bff16565b600160a060020a03808716600081815260026020908152604080832033845282529182902094909455805187815290519288169391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a3506001949350505050565b60085460ff1681565b6009805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104b35780601f10610488576101008083540402835291602001916104b3565b6000610782848461097a565b151561078d57600080fd5b83600160a060020a031633600160a060020a03167fce8124fd2ae9fd7904103e5a9ebe88b527b9ca0e32a32fd497845c82706542d385856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156108075781810151838201526020016107ef565b50505050905090810190601f1680156108345780820380516001836020036101000a031916815260200191505b50935050505060405180910390a361084b84610c26565b156108625761085b848484610c2e565b9050610866565b5060015b9392505050565b600160a060020a031660009081526003602052604090205490565b600554600090600160a060020a031633146108a257600080fd5b50600480546005805473ffffffffffffffffffffffffffffffffffffffff19808416600160a060020a038381169190911795869055911690915560405191811692169082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b600454600160a060020a031681565b6007805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104b35780601f10610488576101008083540402835291602001916104b3565b6000600160a060020a038316151561099157600080fd5b336000908152600360205260409020546109b1908363ffffffff610bff16565b3360009081526003602052604080822092909255600160a060020a038516815220546109e3908363ffffffff610c1416565b600160a060020a0384166000818152600360209081526040918290209390935580518581529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600192915050565b600554600160a060020a031681565b600454600090600160a060020a03163314610a6a57600080fd5b60048054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a039283169381019390935260248301859052519085169163a9059cbb9160448083019260209291908290030181600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505050506040513d6020811015610b0457600080fd5b50519392505050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600454600160a060020a03163314610b4f57600080fd5b8051610b62906009906020840190610d4a565b507f2eb900bac6e5b21f659a14cf4e0b4a5689edb16947c549906436bc73b7053d16816040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bc2578181015183820152602001610baa565b50505050905090810190601f168015610bef5780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b600082821115610c0e57600080fd5b50900390565b60008282018381101561086657600080fd5b6000903b1190565b6040517fc0ee0b8a0000000000000000000000000000000000000000000000000000000081523360048201818152602483018590526060604484019081528451606485015284516000948894600160a060020a0386169463c0ee0b8a9491938a938a939160849091019060208501908083838e5b83811015610cba578181015183820152602001610ca2565b50505050905090810190601f168015610ce75780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b158015610d0857600080fd5b505af1158015610d1c573d6000803e3d6000fd5b505050506040513d6020811015610d3257600080fd5b50511515610d3f57600080fd5b506001949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610d8b57805160ff1916838001178555610db8565b82800160010185558215610db8579182015b82811115610db8578251825591602001919060010190610d9d565b50610dc4929150610dc8565b5090565b610de291905b80821115610dc45760008155600101610dce565b905600a165627a7a723058209639595b3309c99105a7c374771b79578020c23eb8380eebb58de8d7506449130029608060405234801561001057600080fd5b5060405160608061074c8339810160409081528151602083015191909201516003805461010060a860020a0319163361010002179055600080806060600160a060020a038716151561006157600080fd5b60408051606480825260a082019092527f6dd23b5b000000000000000000000000000000000000000000000000000000009550606094509092508260208201610c808038833901905050905083602082015286602482015285604482015284606482015286600160a060020a03168160405180828051906020019080838360005b838110156100fa5781810151838201526020016100e2565b50505050905090810190601f1680156101275780820380516001836020036101000a031916815260200191505b50915050600060405180830381855af4915050151561014557600080fd5b505050505050506105f18061015b6000396000f3006080604052600436106100e55763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663061f765081146101325780630952c504146101675780630a4010861461018a57806325be124e1461019f57806363ddc54d146101d057806365581793146101e55780637826f28f1461020c57806379ba5097146102215780638da5cb5b14610236578063aaf5eb681461024b578063b22dd2ca14610260578063c0ee0b8a14610275578063d091b550146102a6578063d21220a7146102bb578063eff3c4e7146102d0578063fee2cb05146102e5575b3480156100f157600080fd5b50600b54620100009004600160a060020a0316600036111561012f5736600060ff37602060003660ff845af480801561012a5760206000f35b600080fd5b50005b34801561013e57600080fd5b50610153600160a060020a03600435166102fa565b604080519115158252519081900360200190f35b34801561017357600080fd5b50610188600160a060020a036004351661032c565b005b34801561019657600080fd5b506101536103bc565b3480156101ab57600080fd5b506101b46103c5565b60408051600160a060020a039092168252519081900360200190f35b3480156101dc57600080fd5b506101b46103d4565b3480156101f157600080fd5b506101fa6103e9565b60408051918252519081900360200190f35b34801561021857600080fd5b506101fa6103ef565b34801561022d57600080fd5b506101886103f5565b34801561024257600080fd5b506101b461049b565b34801561025757600080fd5b506101fa6104af565b34801561026c57600080fd5b506101fa6104bb565b34801561028157600080fd5b5061015360048035600160a060020a03169060248035916044359182019101356104c1565b3480156102b257600080fd5b506101b4610593565b3480156102c757600080fd5b506101b46105a2565b3480156102dc57600080fd5b506101536105b1565b3480156102f157600080fd5b506101fa6105bf565b600554600090600160a060020a03838116911614806103265750600654600160a060020a038381169116145b92915050565b6003546101009004600160a060020a0316331461034857600080fd5b600160a060020a038116151561035d57600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03838116919091179182905560405191169033907f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec490600090a350565b600b5460ff1681565b600654600160a060020a031681565b600b54620100009004600160a060020a031681565b600a5481565b60095481565b600454600090600160a060020a0316331461040f57600080fd5b506003805460048054600160a060020a0381811661010090810274ffffffffffffffffffffffffffffffffffffffff00198616179586905573ffffffffffffffffffffffffffffffffffffffff199092169092556040519281900482169304169082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b6003546101009004600160a060020a031681565b670de0b6b3a764000081565b60075481565b60006104cc336102fa565b15156104da5750600061058b565b6040805160608101825233808252600160a060020a038816602083018190529183018790526000805473ffffffffffffffffffffffffffffffffffffffff19908116909217905560018054909116909117815560028690556003805460ff191690911790555130908490849080838380828437820191505092505050600060405180830381855af4915050151561057d57506003805460ff19169055600061058b565b506003805460ff1916905560015b949350505050565b600454600160a060020a031681565b600554600160a060020a031681565b600b54610100900460ff1681565b600854815600a165627a7a72305820988e41707ba319a85965f953a58b1b4c5bd3240eb4afca0a7731851035ddb50a0029a165627a7a723058201daafcbdd3bfa143178a13f29197811fc4d9f839bb22344767259af627422ae90029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c70636e0886ec4a4f2b7e42ac57ccd1b976352d00000000000000000000000004162178b78d6985480a308b2190ee5517460406d
-----Decoded View---------------
Arg [0] : _mmLib (address): 0xc70636e0886eC4a4F2B7e42aC57ccD1B976352d0
Arg [1] : _clnAddress (address): 0x4162178B78D6985480A308B2190EE5517460406D
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c70636e0886ec4a4f2b7e42ac57ccd1b976352d0
Arg [1] : 0000000000000000000000004162178b78d6985480a308b2190ee5517460406d
Swarm Source
bzzr://1daafcbdd3bfa143178a13f29197811fc4d9f839bb22344767259af627422ae9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.