More Info
Private Name Tags
ContractCreator
Funded By
N/A
Latest 25 from a total of 1,756 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Kill | 8109658 | 2054 days ago | IN | 0 ETH | 0.00046346 | ||||
Withdraw | 8109233 | 2054 days ago | IN | 0 ETH | 0.00102106 | ||||
Withdraw | 8109231 | 2054 days ago | IN | 0 ETH | 0.00132106 | ||||
Withdraw | 8109133 | 2054 days ago | IN | 0 ETH | 0.00132106 | ||||
Withdraw | 8109133 | 2054 days ago | IN | 0 ETH | 0.00132106 | ||||
Withdraw | 8109133 | 2054 days ago | IN | 0 ETH | 0.00132362 | ||||
Withdraw | 8109133 | 2054 days ago | IN | 0 ETH | 0.00132106 | ||||
Withdraw | 8109133 | 2054 days ago | IN | 0 ETH | 0.00132106 | ||||
Withdraw | 8109133 | 2054 days ago | IN | 0 ETH | 0.00132106 | ||||
Withdraw | 8109133 | 2054 days ago | IN | 0 ETH | 0.00132106 | ||||
Withdraw | 8109133 | 2054 days ago | IN | 0 ETH | 0.00132106 | ||||
Withdraw | 8109133 | 2054 days ago | IN | 0 ETH | 0.00132106 | ||||
Withdraw | 8109133 | 2054 days ago | IN | 0 ETH | 0.00132106 | ||||
Withdraw | 8109130 | 2054 days ago | IN | 0 ETH | 0.00132106 | ||||
Withdraw | 8109130 | 2054 days ago | IN | 0 ETH | 0.00132106 | ||||
Withdraw | 8109063 | 2054 days ago | IN | 0 ETH | 0.00051181 | ||||
Withdraw | 8109063 | 2054 days ago | IN | 0 ETH | 0.00066117 | ||||
Withdraw | 8109063 | 2054 days ago | IN | 0 ETH | 0.00066181 | ||||
Withdraw | 8109063 | 2054 days ago | IN | 0 ETH | 0.00066181 | ||||
Withdraw | 8109063 | 2054 days ago | IN | 0 ETH | 0.00066181 | ||||
Withdraw | 8109063 | 2054 days ago | IN | 0 ETH | 0.00066181 | ||||
Withdraw | 8109063 | 2054 days ago | IN | 0 ETH | 0.00066181 | ||||
Withdraw | 8109063 | 2054 days ago | IN | 0 ETH | 0.00066181 | ||||
Withdraw | 8109063 | 2054 days ago | IN | 0 ETH | 0.00066181 | ||||
Withdraw | 8109063 | 2054 days ago | IN | 0 ETH | 0.00066181 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
8109658 | 2054 days ago | 0 ETH |
Loading...
Loading
Contract Self Destruct called at Txn Hash 0x87da053db143150b96a5cde13a4c7c3b4c18413c897369bc0c346bcff565a5bf
Contract Source Code Verified (Exact Match)
Contract Name:
BankrollLending
Compiler Version
v0.4.21+commit.dfe3193c
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-12-03 */ /** * Allows EDG token holders to lend the Edgeless Casino tokens for the bankroll. * Users may pay in their tokens at any time, but they will only be used for the bankroll * begining from the next cycle. When the cycle is closed (at the end of the month), they may * withdraw their stake of the bankroll. The casino may decide to limit the number of tokens * used for the bankroll. The user will be able to withdraw the remaining tokens along with the * bankroll tokens once per cycle. * author: Julia Altenried * */ pragma solidity ^0.4.21; contract Token { function transfer(address receiver, uint amount) public returns(bool); function transferFrom(address sender, address receiver, uint amount) public returns(bool); function balanceOf(address holder) public view returns(uint); } contract Casino { mapping(address => bool) public authorized; } contract Owned { address public owner; modifier onlyOwner { require(msg.sender == owner); _; } function Owned() public { owner = msg.sender; } function changeOwner(address newOwner) onlyOwner public { owner = newOwner; } } contract SafeMath { function safeSub(uint a, uint b) pure internal returns(uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) pure internal returns(uint) { uint c = a + b; assert(c >= a && c >= b); return c; } function safeMul(uint a, uint b) pure internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } } contract BankrollLending is Owned, SafeMath { /** The set of lending contracts state phases **/ enum StatePhases { deposit, bankroll, update, withdraw } /** The number of the current cycle. Increases by 1 each month.**/ uint public cycle; /** The address of the casino contract.**/ Casino public casino; /** The Edgeless casino token contract **/ Token public token; /** The sum of the initial stakes per cycle **/ mapping(uint => uint) public initialStakes; /** The sum of the final stakes per cycle **/ mapping(uint => uint) public finalStakes; /** The sum of the user stakes currently on the contract **/ uint public totalStakes; //note: uint is enough because the Edgeless Token Contract has 0 decimals and a total supply of 132,046,997 EDG /** the number of stake holders **/ uint public numHolders; /** List of all stakeholders **/ address[] public stakeholders; /** Stake per user address **/ mapping(address => uint) public stakes; /** the gas cost if the casino helps the user with the deposit in full EDG **/ uint8 public depositGasCost; /** the gas cost if the casino helps the user with the withdrawal in full EDG **/ uint8 public withdrawGasCost; /** the gas cost for balance update at the end of the cycle per user in EDG with 2 decimals * (updates are made for all users at once, so it's possible to subtract all gas costs from the paid back tokens before * setting the final stakes of the cycle.) **/ uint public updateGasCost; /** The minimum staking amount required **/ uint public minStakingAmount; /** The maximum number of addresses to process in one batch of stake updates **/ uint public maxUpdates; /** The maximum number of addresses that can be assigned in one batch **/ uint public maxBatchAssignment; /** remembers the last index updated per cycle **/ mapping(uint => uint) lastUpdateIndex; /** notifies listeners about a stake update **/ event StakeUpdate(address holder, uint stake); /** * Constructor. * @param tokenAddr the address of the edgeless token contract * casinoAddr the address of the edgeless casino contract * */ function BankrollLending(address tokenAddr, address casinoAddr) public { token = Token(tokenAddr); casino = Casino(casinoAddr); maxUpdates = 200; maxBatchAssignment = 200; cycle = 1; } /** * Sets the casino contract address. * @param casinoAddr the new casino contract address * */ function setCasinoAddress(address casinoAddr) public onlyOwner { casino = Casino(casinoAddr); } /** * Sets the deposit gas cost. * @param gasCost the new deposit gas cost * */ function setDepositGasCost(uint8 gasCost) public onlyAuthorized { depositGasCost = gasCost; } /** * Sets the withdraw gas cost. * @param gasCost the new withdraw gas cost * */ function setWithdrawGasCost(uint8 gasCost) public onlyAuthorized { withdrawGasCost = gasCost; } /** * Sets the update gas cost. * @param gasCost the new update gas cost * */ function setUpdateGasCost(uint gasCost) public onlyAuthorized { updateGasCost = gasCost; } /** * Sets the maximum number of user stakes to update at once * @param newMax the new maximum * */ function setMaxUpdates(uint newMax) public onlyAuthorized{ maxUpdates = newMax; } /** * Sets the minimum amount of user stakes * @param amount the new minimum * */ function setMinStakingAmount(uint amount) public onlyAuthorized { minStakingAmount = amount; } /** * Sets the maximum number of addresses that can be assigned at once * @param newMax the new maximum * */ function setMaxBatchAssignment(uint newMax) public onlyAuthorized { maxBatchAssignment = newMax; } /** * Allows the user to deposit funds, where the sender address and max allowed value have to be signed together with the cycle * number by the casino. The method verifies the signature and makes sure, the deposit was made in time, before updating * the storage variables. * @param value the number of tokens to deposit * allowedMax the maximum deposit allowed this cycle * v, r, s the signature of an authorized casino wallet * */ function deposit(uint value, uint allowedMax, uint8 v, bytes32 r, bytes32 s) public depositPhase { require(verifySignature(msg.sender, allowedMax, v, r, s)); if (addDeposit(msg.sender, value, numHolders, allowedMax)) numHolders = safeAdd(numHolders, 1); totalStakes = safeSub(safeAdd(totalStakes, value), depositGasCost); } /** * Allows an authorized casino wallet to assign some tokens held by the lending contract to the given addresses. * Only allows to assign token which do not already belong to any other user. * Caller needs to make sure that the number of assignments can be processed in a single batch! * @param to array containing the addresses of the holders * value array containing the number of tokens per address * */ function batchAssignment(address[] to, uint[] value) public onlyAuthorized depositPhase { require(to.length == value.length); require(to.length <= maxBatchAssignment); uint newTotalStakes = totalStakes; uint numSH = numHolders; for (uint8 i = 0; i < to.length; i++) { newTotalStakes = safeSub(safeAdd(newTotalStakes, value[i]), depositGasCost); if(addDeposit(to[i], value[i], numSH, 0)) numSH = safeAdd(numSH, 1);//save gas costs by increasing a memory variable instead of the storage variable per iteration } numHolders = numSH; //rollback if more tokens have been assigned than the contract possesses assert(newTotalStakes < tokenBalance()); totalStakes = newTotalStakes; } /** * updates the stake of an address. * @param to the address * value the value to add to the stake * numSH the number of stakeholders * allowedMax the maximum amount a user may stake (0 in case the casino is making the assignment) * */ function addDeposit(address to, uint value, uint numSH, uint allowedMax) internal returns (bool newHolder) { require(value > 0); uint newStake = safeSub(safeAdd(stakes[to], value), depositGasCost); require(newStake >= minStakingAmount); if(allowedMax > 0){//if allowedMax > 0 the caller is the user himself require(newStake <= allowedMax); assert(token.transferFrom(to, address(this), value)); } if(stakes[to] == 0){ addHolder(to, numSH); newHolder = true; } stakes[to] = newStake; emit StakeUpdate(to, newStake); } /** * Transfers the total stakes to the casino contract to be used as bankroll. * Callabe only once per cycle and only after a cycle was started. * */ function useAsBankroll() public onlyAuthorized depositPhase { initialStakes[cycle] = totalStakes; totalStakes = 0; //withdrawals are unlocked until this value is > 0 again and the final stakes have been set assert(token.transfer(address(casino), initialStakes[cycle])); } /** * Initiates the next cycle. Callabe only once per cycle and only after the last one was closed. * */ function startNextCycle() public onlyAuthorized { // make sure the last cycle was closed, can be called in update or withdraw phase require(finalStakes[cycle] > 0); cycle = safeAdd(cycle, 1); } /** * Sets the final sum of user stakes for history and profit computation. Callable only once per cycle. * The token balance of the contract may not be set as final stake, because there might have occurred unapproved deposits. * @param value the number of EDG tokens that were transfered from the bankroll * */ function closeCycle(uint value) public onlyAuthorized bankrollPhase { require(tokenBalance() >= value); finalStakes[cycle] = safeSub(value, safeMul(updateGasCost, numHolders)/100);//updateGasCost is using 2 decimals } /** * Updates the user shares depending on the difference between final and initial stake. * For doing so, it iterates over the array of stakeholders, while it processes max 500 addresses at once. * If the array length is bigger than that, the contract remembers the position to start with on the next invocation. * Therefore, this method might need to be called multiple times. * It does consider the gas costs and subtracts them from the final stakes before computing the profit/loss. * As soon as the last stake has been updated, withdrawals are unlocked by setting the totalStakes to the height of final stakes of the cycle. * */ function updateUserShares() public onlyAuthorized updatePhase { uint limit = safeAdd(lastUpdateIndex[cycle], maxUpdates); if(limit >= numHolders) { limit = numHolders; totalStakes = finalStakes[cycle]; //enable withdrawals after this method call was processed if (cycle > 1) { lastUpdateIndex[cycle - 1] = 0; } } address holder; uint newStake; for(uint i = lastUpdateIndex[cycle]; i < limit; i++){ holder = stakeholders[i]; newStake = computeFinalStake(stakes[holder]); stakes[holder] = newStake; emit StakeUpdate(holder, newStake); } lastUpdateIndex[cycle] = limit; } /** * In case something goes wrong above, enable the users to withdraw their tokens. * Should never be necessary. * @param value the number of tokens to release **/ function unlockWithdrawals(uint value) public onlyOwner { require(value <= tokenBalance()); totalStakes = value; } /** * If withdrawals are unlocked (final stakes of the cycle > 0 and totalStakes > 0), this function withdraws tokens from the sender’s balance to * the specified address. If no balance remains, the user is removed from the stakeholder array. * @param to the receiver * value the number of tokens * index the index of the message sender in the stakeholder array (save gas costs by not looking it up on the contract) * */ function withdraw(address to, uint value, uint index) public withdrawPhase{ makeWithdrawal(msg.sender, to, value, index); } /** * An authorized casino wallet may use this function to make a withdrawal for the user. * The value is subtracted from the signer’s balance and transferred to the specified address. * If no balance remains, the signer is removed from the stakeholder array. * @param to the receiver * value the number of tokens * index the index of the signer in the stakeholder array (save gas costs by not looking it up on the contract) * v, r, s the signature of the stakeholder * */ function withdrawFor(address to, uint value, uint index, uint8 v, bytes32 r, bytes32 s) public onlyAuthorized withdrawPhase{ address from = ecrecover(keccak256(to, value, cycle), v, r, s); makeWithdrawal(from, to, value, index); } /** * internal method for processing the withdrawal. * @param from the stakeholder * to the receiver * value the number of tokens * index the index of the message sender in the stakeholder array (save gas costs by not looking it up on the contract) * */ function makeWithdrawal(address from, address to, uint value, uint index) internal{ if(value == stakes[from]){ stakes[from] = 0; removeHolder(from, index); emit StakeUpdate(from, 0); } else{ uint newStake = safeSub(stakes[from], value); require(newStake >= minStakingAmount); stakes[from] = newStake; emit StakeUpdate(from, newStake); } totalStakes = safeSub(totalStakes, value); assert(token.transfer(to, safeSub(value, withdrawGasCost))); } /** * Allows the casino to withdraw tokens which do not belong to any stakeholder. * This is the case for gas-payback-tokens and if people send their tokens directly to the contract * without the approval of the casino. * */ function withdrawExcess() public onlyAuthorized { uint value = safeSub(tokenBalance(), totalStakes); token.transfer(owner, value); } /** * Closes the contract in state of emergency or on contract update. * Transfers all tokens held by the contract to the owner before doing so. **/ function kill() public onlyOwner { assert(token.transfer(owner, tokenBalance())); selfdestruct(owner); } /** * @return the current token balance of the contract. * */ function tokenBalance() public view returns(uint) { return token.balanceOf(address(this)); } /** * Adds a new stakeholder to the list. * @param holder the address of the stakeholder * numSH the current number of stakeholders **/ function addHolder(address holder, uint numSH) internal{ if(numSH < stakeholders.length) stakeholders[numSH] = holder; else stakeholders.push(holder); } /** * Removes a stakeholder from the list. * @param holder the address of the stakeholder * index the index of the holder **/ function removeHolder(address holder, uint index) internal{ require(stakeholders[index] == holder); numHolders = safeSub(numHolders, 1); stakeholders[index] = stakeholders[numHolders]; } /** * computes the final stake. * @param initialStake the initial number of tokens the user invested * @return finalStake the final number of tokens the user receives * */ function computeFinalStake(uint initialStake) internal view returns(uint) { return safeMul(initialStake, finalStakes[cycle]) / initialStakes[cycle]; } /** * verifies if the withdrawal request was signed by an authorized wallet * @param to the receiver address * value the number of tokens * v, r, s the signature of an authorized wallet * */ function verifySignature(address to, uint value, uint8 v, bytes32 r, bytes32 s) internal view returns(bool) { address signer = ecrecover(keccak256(to, value, cycle), v, r, s); return casino.authorized(signer); } /** * computes state based on the initial, total and final stakes of the current cycle. * @return current state phase * */ function getPhase() internal view returns (StatePhases) { if (initialStakes[cycle] == 0) { return StatePhases.deposit; } else if (finalStakes[cycle] == 0) { return StatePhases.bankroll; } else if (totalStakes == 0) { return StatePhases.update; } return StatePhases.withdraw; } //check if the sender is an authorized casino wallet modifier onlyAuthorized { require(casino.authorized(msg.sender)); _; } // deposit phase: initialStakes[cycle] == 0 modifier depositPhase { require(getPhase() == StatePhases.deposit); _; } // bankroll phase: initialStakes[cycle] > 0 and finalStakes[cycle] == 0 modifier bankrollPhase { require(getPhase() == StatePhases.bankroll); _; } // update phase: finalStakes[cycle] > 0 and totalStakes == 0 modifier updatePhase { require(getPhase() == StatePhases.update); _; } // withdraw phase: finalStakes[cycle] > 0 and totalStakes > 0 modifier withdrawPhase { require(getPhase() == StatePhases.withdraw); _; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"index","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"withdrawFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"stakes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"stakeholders","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minStakingAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"updateUserShares","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address[]"},{"name":"value","type":"uint256[]"}],"name":"batchAssignment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"closeCycle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"startNextCycle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"gasCost","type":"uint256"}],"name":"setUpdateGasCost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"setMinStakingAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cycle","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"updateGasCost","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"finalStakes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"unlockWithdrawals","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxUpdates","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"},{"name":"allowedMax","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"deposit","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":"newMax","type":"uint256"}],"name":"setMaxUpdates","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"casino","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"withdrawGasCost","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxBatchAssignment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"index","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalStakes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawExcess","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"numHolders","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"gasCost","type":"uint8"}],"name":"setDepositGasCost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"gasCost","type":"uint8"}],"name":"setWithdrawGasCost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"depositGasCost","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"initialStakes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newMax","type":"uint256"}],"name":"setMaxBatchAssignment","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"useAsBankroll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"casinoAddr","type":"address"}],"name":"setCasinoAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"tokenAddr","type":"address"},{"name":"casinoAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"holder","type":"address"},{"indexed":false,"name":"stake","type":"uint256"}],"name":"StakeUpdate","type":"event"}]
Contract Creation Code
6060604052341561000f57600080fd5b604051604080611ba1833981016040528080519190602001805160008054600160a060020a03338116600160a060020a03199283161790925560038054968316968216969096179095556002805491909216941693909317909255505060c8600d819055600e5560018055611b18806100896000396000f3006060604052600436106101a85763ffffffff60e060020a600035041663061e584481146101ad57806316934fc4146101e05780631d6b8b721461021157806325c065b1146102435780632da392391461025657806334e98037146102695780633f6fff4e146102f857806341c0e1b51461030e578063450e2ed3146103215780635113101714610334578063612d669e1461034a5780636190c9d51461036057806361d439711461037357806369334eeb146103865780636a90ac631461039c578063773b5b5e146103b25780637e34dbe0146103c55780638da5cb5b146103ea57806390e2160a146103fd5780639403e8dd146104135780639e1a4d1914610426578063a6f9dae114610439578063ac22cec814610458578063ae5a4a7f14610481578063b5c5f67214610494578063bf9befb1146104b9578063c264a063146104cc578063cc642cc2146104df578063d0dd38ad146104f2578063d53537921461050b578063df203ff714610524578063e7dbc90314610537578063ee1fae7f1461054d578063eecb700514610563578063fc0c546a14610576578063ff55e2ee14610589575b600080fd5b34156101b857600080fd5b6101de600160a060020a036004351660243560443560ff6064351660843560a4356105a8565b005b34156101eb57600080fd5b6101ff600160a060020a03600435166106f0565b60405190815260200160405180910390f35b341561021c57600080fd5b610227600435610702565b604051600160a060020a03909116815260200160405180910390f35b341561024e57600080fd5b6101ff61072a565b341561026157600080fd5b6101de610730565b341561027457600080fd5b6101de6004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496506108ff95505050505050565b341561030357600080fd5b6101de600435610a77565b341561031957600080fd5b6101de610b54565b341561032c57600080fd5b6101de610c00565b341561033f57600080fd5b6101de600435610ca0565b341561035557600080fd5b6101de600435610d17565b341561036b57600080fd5b6101ff610d8e565b341561037e57600080fd5b6101ff610d94565b341561039157600080fd5b6101ff600435610d9a565b34156103a757600080fd5b6101de600435610dac565b34156103bd57600080fd5b6101ff610de0565b34156103d057600080fd5b6101de60043560243560ff60443516606435608435610de6565b34156103f557600080fd5b610227610e5a565b341561040857600080fd5b6101de600435610e69565b341561041e57600080fd5b610227610ee0565b341561043157600080fd5b6101ff610eef565b341561044457600080fd5b6101de600160a060020a0360043516610f5e565b341561046357600080fd5b61046b610fa8565b60405160ff909116815260200160405180910390f35b341561048c57600080fd5b6101ff610fb6565b341561049f57600080fd5b6101de600160a060020a0360043516602435604435610fbc565b34156104c457600080fd5b6101ff610fec565b34156104d757600080fd5b6101de610ff2565b34156104ea57600080fd5b6101ff6110f4565b34156104fd57600080fd5b6101de60ff600435166110fa565b341561051657600080fd5b6101de60ff60043516611182565b341561052f57600080fd5b61046b611210565b341561054257600080fd5b6101ff600435611219565b341561055857600080fd5b6101de60043561122b565b341561056e57600080fd5b6101de6112a2565b341561058157600080fd5b6102276113d8565b341561059457600080fd5b6101de600160a060020a03600435166113e7565b600254600090600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156105fb57600080fd5b5af1151561060857600080fd5b50505060405180519050151561061d57600080fd5b6003610627611431565b600381111561063257fe5b1461063c57600080fd5b60018787600154604051600160a060020a03939093166c010000000000000000000000000283526014830191909152603482015260540160405180910390208585856040516000815260200160405260405193845260ff9092166020808501919091526040808501929092526060840192909252608090920191516020810390808403906000865af115156106d057600080fd5b50506020604051035190506106e781888888611488565b50505050505050565b60096020526000908152604090205481565b600880548290811061071057fe5b600091825260209091200154600160a060020a0316905081565b600c5481565b600254600090819081908190600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561078957600080fd5b5af1151561079657600080fd5b5050506040518051905015156107ab57600080fd5b60026107b5611431565b60038111156107c057fe5b146107ca57600080fd5b6001546000908152600f6020526040902054600d546107e9919061162e565b600754909450841061082f576007546001805460008181526005602052604090205460065591955090111561082f57600154600019016000908152600f60205260408120555b506001546000908152600f60205260409020545b838110156108e557600880548290811061085957fe5b6000918252602080832090910154600160a060020a0316808352600990915260409091205490935061088a90611652565b600160a060020a03841660009081526009602052604090819020829055909250600080516020611acd833981519152908490849051600160a060020a03909216825260208201526040908101905180910390a1600101610843565b50506001546000908152600f602052604090209190915550565b60025460009081908190600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561095657600080fd5b5af1151561096357600080fd5b50505060405180519050151561097857600080fd5b6000610982611431565b600381111561098d57fe5b1461099757600080fd5b83518551146109a557600080fd5b600e54855111156109b557600080fd5b505060065460075490915060005b84518160ff161015610a59576109ff6109f484868460ff16815181106109e557fe5b9060200190602002015161162e565b600a5460ff1661168a565b9250610a3e858260ff1681518110610a1357fe5b90602001906020020151858360ff1681518110610a2c57fe5b9060200190602002015184600061169c565b15610a5157610a4e82600161162e565b91505b6001016109c3565b6007829055610a66610eef565b8310610a6e57fe5b50506006555050565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ac757600080fd5b5af11515610ad457600080fd5b505050604051805190501515610ae957600080fd5b6001610af3611431565b6003811115610afe57fe5b14610b0857600080fd5b80610b11610eef565b1015610b1c57600080fd5b610b3f816064610b30600b54600754611803565b811515610b3957fe5b0461168a565b60015460009081526005602052604090205550565b60005433600160a060020a03908116911614610b6f57600080fd5b600354600054600160a060020a039182169163a9059cbb9116610b90610eef565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610bd357600080fd5b5af11515610be057600080fd5b505050604051805190501515610bf257fe5b600054600160a060020a0316ff5b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610c5057600080fd5b5af11515610c5d57600080fd5b505050604051805190501515610c7257600080fd5b60015460009081526005602052604081205411610c8e57600080fd5b610c9b600154600161162e565b600155565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610cf057600080fd5b5af11515610cfd57600080fd5b505050604051805190501515610d1257600080fd5b600b55565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610d6757600080fd5b5af11515610d7457600080fd5b505050604051805190501515610d8957600080fd5b600c55565b60015481565b600b5481565b60056020526000908152604090205481565b60005433600160a060020a03908116911614610dc757600080fd5b610dcf610eef565b811115610ddb57600080fd5b600655565b600d5481565b6000610df0611431565b6003811115610dfb57fe5b14610e0557600080fd5b610e123385858585611824565b1515610e1d57600080fd5b610e2b33866007548761169c565b15610e4157610e3d600754600161162e565b6007555b610e506109f46006548761162e565b6006555050505050565b600054600160a060020a031681565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610eb957600080fd5b5af11515610ec657600080fd5b505050604051805190501515610edb57600080fd5b600d55565b600254600160a060020a031681565b600354600090600160a060020a03166370a082313060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f4257600080fd5b5af11515610f4f57600080fd5b50505060405180519150505b90565b60005433600160a060020a03908116911614610f7957600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600a54610100900460ff1681565b600e5481565b6003610fc6611431565b6003811115610fd157fe5b14610fdb57600080fd5b610fe733848484611488565b505050565b60065481565b600254600090600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561104557600080fd5b5af1151561105257600080fd5b50505060405180519050151561106757600080fd5b61107a611072610eef565b60065461168a565b600354600054919250600160a060020a039081169163a9059cbb91168360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156110da57600080fd5b5af115156110e757600080fd5b5050506040518051505050565b60075481565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561114a57600080fd5b5af1151561115757600080fd5b50505060405180519050151561116c57600080fd5b600a805460ff191660ff92909216919091179055565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111d257600080fd5b5af115156111df57600080fd5b5050506040518051905015156111f457600080fd5b600a805460ff9092166101000261ff0019909216919091179055565b600a5460ff1681565b60046020526000908152604090205481565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561127b57600080fd5b5af1151561128857600080fd5b50505060405180519050151561129d57600080fd5b600e55565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156112f257600080fd5b5af115156112ff57600080fd5b50505060405180519050151561131457600080fd5b600061131e611431565b600381111561132957fe5b1461133357600080fd5b60068054600180546000908152600460205260408082209390935592839055600354600254915484529282902054600160a060020a039384169363a9059cbb939216915160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156113b757600080fd5b5af115156113c457600080fd5b5050506040518051905015156113d657fe5b565b600354600160a060020a031681565b60005433600160a060020a0390811691161461140257600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600090815260046020526040812054151561145157506000610f5b565b600154600090815260056020526040902054151561147157506001610f5b565b600654151561148257506002610f5b565b50600390565b600160a060020a03841660009081526009602052604081205483141561150357600160a060020a0385166000908152600960205260408120556114cb8583611938565b600080516020611acd833981519152856000604051600160a060020a03909216825260208201526040908101905180910390a1611589565b600160a060020a038516600090815260096020526040902054611526908461168a565b600c5490915081101561153857600080fd5b600160a060020a03851660009081526009602052604090819020829055600080516020611acd833981519152908690839051600160a060020a03909216825260208201526040908101905180910390a15b6115956006548461168a565b600655600354600a54600160a060020a039091169063a9059cbb9086906115c5908790610100900460ff1661168a565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561160857600080fd5b5af1151561161557600080fd5b50505060405180519050151561162757fe5b5050505050565b60008282018381108015906116435750828110155b151561164b57fe5b9392505050565b600154600090815260046020908152604080832054600590925282205461167a908490611803565b81151561168357fe5b0492915050565b60008282111561169657fe5b50900390565b6000808085116116ab57600080fd5b600160a060020a0386166000908152600960205260409020546116d2906109f4908761162e565b600c549091508110156116e457600080fd5b600083111561177c57828111156116fa57600080fd5b600354600160a060020a03166323b872dd87308860405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561175d57600080fd5b5af1151561176a57600080fd5b50505060405180519050151561177c57fe5b600160a060020a03861660009081526009602052604090205415156117aa576117a586856119f1565b600191505b600160a060020a03861660009081526009602052604090819020829055600080516020611acd833981519152908790839051600160a060020a03909216825260208201526040908101905180910390a150949350505050565b6000828202831580611643575082848281151561181c57fe5b041461164b57fe5b60008060018787600154604051600160a060020a03939093166c010000000000000000000000000283526014830191909152603482015260540160405180910390208686866040516000815260200160405260405193845260ff9092166020808501919091526040808501929092526060840192909252608090920191516020810390808403906000865af115156118bb57600080fd5b505060206040510351600254909150600160a060020a031663b91816118260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561191757600080fd5b5af1151561192457600080fd5b505050604051805198975050505050505050565b81600160a060020a031660088281548110151561195157fe5b600091825260209091200154600160a060020a03161461197057600080fd5b61197d600754600161168a565b600781905560088054909190811061199157fe5b60009182526020909120015460088054600160a060020a0390921691839081106119b757fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555050565b600854811015611a465781600882815481101515611a0b57fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055611a8b565b6008805460018101611a588382611a8f565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384161790555b5050565b815481835581811511610fe757600083815260209020610fe7918101908301610f5b91905b80821115611ac85760008155600101611ab4565b5090560089dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd78a165627a7a723058207e6fb911f1d3c5f91b340558efb06f3abbdf4407758862ba24f1fa2dbad6745a002900000000000000000000000008711d3b02c8758f2fb3ab4e80228418a7f8e39c00000000000000000000000091f273b7a28f5169fd7b7995a54b767ca797bc63
Deployed Bytecode
0x6060604052600436106101a85763ffffffff60e060020a600035041663061e584481146101ad57806316934fc4146101e05780631d6b8b721461021157806325c065b1146102435780632da392391461025657806334e98037146102695780633f6fff4e146102f857806341c0e1b51461030e578063450e2ed3146103215780635113101714610334578063612d669e1461034a5780636190c9d51461036057806361d439711461037357806369334eeb146103865780636a90ac631461039c578063773b5b5e146103b25780637e34dbe0146103c55780638da5cb5b146103ea57806390e2160a146103fd5780639403e8dd146104135780639e1a4d1914610426578063a6f9dae114610439578063ac22cec814610458578063ae5a4a7f14610481578063b5c5f67214610494578063bf9befb1146104b9578063c264a063146104cc578063cc642cc2146104df578063d0dd38ad146104f2578063d53537921461050b578063df203ff714610524578063e7dbc90314610537578063ee1fae7f1461054d578063eecb700514610563578063fc0c546a14610576578063ff55e2ee14610589575b600080fd5b34156101b857600080fd5b6101de600160a060020a036004351660243560443560ff6064351660843560a4356105a8565b005b34156101eb57600080fd5b6101ff600160a060020a03600435166106f0565b60405190815260200160405180910390f35b341561021c57600080fd5b610227600435610702565b604051600160a060020a03909116815260200160405180910390f35b341561024e57600080fd5b6101ff61072a565b341561026157600080fd5b6101de610730565b341561027457600080fd5b6101de6004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496506108ff95505050505050565b341561030357600080fd5b6101de600435610a77565b341561031957600080fd5b6101de610b54565b341561032c57600080fd5b6101de610c00565b341561033f57600080fd5b6101de600435610ca0565b341561035557600080fd5b6101de600435610d17565b341561036b57600080fd5b6101ff610d8e565b341561037e57600080fd5b6101ff610d94565b341561039157600080fd5b6101ff600435610d9a565b34156103a757600080fd5b6101de600435610dac565b34156103bd57600080fd5b6101ff610de0565b34156103d057600080fd5b6101de60043560243560ff60443516606435608435610de6565b34156103f557600080fd5b610227610e5a565b341561040857600080fd5b6101de600435610e69565b341561041e57600080fd5b610227610ee0565b341561043157600080fd5b6101ff610eef565b341561044457600080fd5b6101de600160a060020a0360043516610f5e565b341561046357600080fd5b61046b610fa8565b60405160ff909116815260200160405180910390f35b341561048c57600080fd5b6101ff610fb6565b341561049f57600080fd5b6101de600160a060020a0360043516602435604435610fbc565b34156104c457600080fd5b6101ff610fec565b34156104d757600080fd5b6101de610ff2565b34156104ea57600080fd5b6101ff6110f4565b34156104fd57600080fd5b6101de60ff600435166110fa565b341561051657600080fd5b6101de60ff60043516611182565b341561052f57600080fd5b61046b611210565b341561054257600080fd5b6101ff600435611219565b341561055857600080fd5b6101de60043561122b565b341561056e57600080fd5b6101de6112a2565b341561058157600080fd5b6102276113d8565b341561059457600080fd5b6101de600160a060020a03600435166113e7565b600254600090600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156105fb57600080fd5b5af1151561060857600080fd5b50505060405180519050151561061d57600080fd5b6003610627611431565b600381111561063257fe5b1461063c57600080fd5b60018787600154604051600160a060020a03939093166c010000000000000000000000000283526014830191909152603482015260540160405180910390208585856040516000815260200160405260405193845260ff9092166020808501919091526040808501929092526060840192909252608090920191516020810390808403906000865af115156106d057600080fd5b50506020604051035190506106e781888888611488565b50505050505050565b60096020526000908152604090205481565b600880548290811061071057fe5b600091825260209091200154600160a060020a0316905081565b600c5481565b600254600090819081908190600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561078957600080fd5b5af1151561079657600080fd5b5050506040518051905015156107ab57600080fd5b60026107b5611431565b60038111156107c057fe5b146107ca57600080fd5b6001546000908152600f6020526040902054600d546107e9919061162e565b600754909450841061082f576007546001805460008181526005602052604090205460065591955090111561082f57600154600019016000908152600f60205260408120555b506001546000908152600f60205260409020545b838110156108e557600880548290811061085957fe5b6000918252602080832090910154600160a060020a0316808352600990915260409091205490935061088a90611652565b600160a060020a03841660009081526009602052604090819020829055909250600080516020611acd833981519152908490849051600160a060020a03909216825260208201526040908101905180910390a1600101610843565b50506001546000908152600f602052604090209190915550565b60025460009081908190600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561095657600080fd5b5af1151561096357600080fd5b50505060405180519050151561097857600080fd5b6000610982611431565b600381111561098d57fe5b1461099757600080fd5b83518551146109a557600080fd5b600e54855111156109b557600080fd5b505060065460075490915060005b84518160ff161015610a59576109ff6109f484868460ff16815181106109e557fe5b9060200190602002015161162e565b600a5460ff1661168a565b9250610a3e858260ff1681518110610a1357fe5b90602001906020020151858360ff1681518110610a2c57fe5b9060200190602002015184600061169c565b15610a5157610a4e82600161162e565b91505b6001016109c3565b6007829055610a66610eef565b8310610a6e57fe5b50506006555050565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ac757600080fd5b5af11515610ad457600080fd5b505050604051805190501515610ae957600080fd5b6001610af3611431565b6003811115610afe57fe5b14610b0857600080fd5b80610b11610eef565b1015610b1c57600080fd5b610b3f816064610b30600b54600754611803565b811515610b3957fe5b0461168a565b60015460009081526005602052604090205550565b60005433600160a060020a03908116911614610b6f57600080fd5b600354600054600160a060020a039182169163a9059cbb9116610b90610eef565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610bd357600080fd5b5af11515610be057600080fd5b505050604051805190501515610bf257fe5b600054600160a060020a0316ff5b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610c5057600080fd5b5af11515610c5d57600080fd5b505050604051805190501515610c7257600080fd5b60015460009081526005602052604081205411610c8e57600080fd5b610c9b600154600161162e565b600155565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610cf057600080fd5b5af11515610cfd57600080fd5b505050604051805190501515610d1257600080fd5b600b55565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610d6757600080fd5b5af11515610d7457600080fd5b505050604051805190501515610d8957600080fd5b600c55565b60015481565b600b5481565b60056020526000908152604090205481565b60005433600160a060020a03908116911614610dc757600080fd5b610dcf610eef565b811115610ddb57600080fd5b600655565b600d5481565b6000610df0611431565b6003811115610dfb57fe5b14610e0557600080fd5b610e123385858585611824565b1515610e1d57600080fd5b610e2b33866007548761169c565b15610e4157610e3d600754600161162e565b6007555b610e506109f46006548761162e565b6006555050505050565b600054600160a060020a031681565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610eb957600080fd5b5af11515610ec657600080fd5b505050604051805190501515610edb57600080fd5b600d55565b600254600160a060020a031681565b600354600090600160a060020a03166370a082313060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f4257600080fd5b5af11515610f4f57600080fd5b50505060405180519150505b90565b60005433600160a060020a03908116911614610f7957600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600a54610100900460ff1681565b600e5481565b6003610fc6611431565b6003811115610fd157fe5b14610fdb57600080fd5b610fe733848484611488565b505050565b60065481565b600254600090600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561104557600080fd5b5af1151561105257600080fd5b50505060405180519050151561106757600080fd5b61107a611072610eef565b60065461168a565b600354600054919250600160a060020a039081169163a9059cbb91168360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156110da57600080fd5b5af115156110e757600080fd5b5050506040518051505050565b60075481565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561114a57600080fd5b5af1151561115757600080fd5b50505060405180519050151561116c57600080fd5b600a805460ff191660ff92909216919091179055565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111d257600080fd5b5af115156111df57600080fd5b5050506040518051905015156111f457600080fd5b600a805460ff9092166101000261ff0019909216919091179055565b600a5460ff1681565b60046020526000908152604090205481565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561127b57600080fd5b5af1151561128857600080fd5b50505060405180519050151561129d57600080fd5b600e55565b600254600160a060020a031663b91816113360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156112f257600080fd5b5af115156112ff57600080fd5b50505060405180519050151561131457600080fd5b600061131e611431565b600381111561132957fe5b1461133357600080fd5b60068054600180546000908152600460205260408082209390935592839055600354600254915484529282902054600160a060020a039384169363a9059cbb939216915160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156113b757600080fd5b5af115156113c457600080fd5b5050506040518051905015156113d657fe5b565b600354600160a060020a031681565b60005433600160a060020a0390811691161461140257600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600090815260046020526040812054151561145157506000610f5b565b600154600090815260056020526040902054151561147157506001610f5b565b600654151561148257506002610f5b565b50600390565b600160a060020a03841660009081526009602052604081205483141561150357600160a060020a0385166000908152600960205260408120556114cb8583611938565b600080516020611acd833981519152856000604051600160a060020a03909216825260208201526040908101905180910390a1611589565b600160a060020a038516600090815260096020526040902054611526908461168a565b600c5490915081101561153857600080fd5b600160a060020a03851660009081526009602052604090819020829055600080516020611acd833981519152908690839051600160a060020a03909216825260208201526040908101905180910390a15b6115956006548461168a565b600655600354600a54600160a060020a039091169063a9059cbb9086906115c5908790610100900460ff1661168a565b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561160857600080fd5b5af1151561161557600080fd5b50505060405180519050151561162757fe5b5050505050565b60008282018381108015906116435750828110155b151561164b57fe5b9392505050565b600154600090815260046020908152604080832054600590925282205461167a908490611803565b81151561168357fe5b0492915050565b60008282111561169657fe5b50900390565b6000808085116116ab57600080fd5b600160a060020a0386166000908152600960205260409020546116d2906109f4908761162e565b600c549091508110156116e457600080fd5b600083111561177c57828111156116fa57600080fd5b600354600160a060020a03166323b872dd87308860405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561175d57600080fd5b5af1151561176a57600080fd5b50505060405180519050151561177c57fe5b600160a060020a03861660009081526009602052604090205415156117aa576117a586856119f1565b600191505b600160a060020a03861660009081526009602052604090819020829055600080516020611acd833981519152908790839051600160a060020a03909216825260208201526040908101905180910390a150949350505050565b6000828202831580611643575082848281151561181c57fe5b041461164b57fe5b60008060018787600154604051600160a060020a03939093166c010000000000000000000000000283526014830191909152603482015260540160405180910390208686866040516000815260200160405260405193845260ff9092166020808501919091526040808501929092526060840192909252608090920191516020810390808403906000865af115156118bb57600080fd5b505060206040510351600254909150600160a060020a031663b91816118260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561191757600080fd5b5af1151561192457600080fd5b505050604051805198975050505050505050565b81600160a060020a031660088281548110151561195157fe5b600091825260209091200154600160a060020a03161461197057600080fd5b61197d600754600161168a565b600781905560088054909190811061199157fe5b60009182526020909120015460088054600160a060020a0390921691839081106119b757fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555050565b600854811015611a465781600882815481101515611a0b57fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055611a8b565b6008805460018101611a588382611a8f565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384161790555b5050565b815481835581811511610fe757600083815260209020610fe7918101908301610f5b91905b80821115611ac85760008155600101611ab4565b5090560089dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd78a165627a7a723058207e6fb911f1d3c5f91b340558efb06f3abbdf4407758862ba24f1fa2dbad6745a0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000008711d3b02c8758f2fb3ab4e80228418a7f8e39c00000000000000000000000091f273b7a28f5169fd7b7995a54b767ca797bc63
-----Decoded View---------------
Arg [0] : tokenAddr (address): 0x08711D3B02C8758F2FB3ab4e80228418a7F8e39c
Arg [1] : casinoAddr (address): 0x91f273b7A28F5169FD7B7995A54B767cA797BC63
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000008711d3b02c8758f2fb3ab4e80228418a7f8e39c
Arg [1] : 00000000000000000000000091f273b7a28f5169fd7b7995a54b767ca797bc63
Swarm Source
bzzr://7e6fb911f1d3c5f91b340558efb06f3abbdf4407758862ba24f1fa2dbad6745a
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.