Feature Tip: Add private address tag to any address under My Name Tag !
Latest 25 from a total of 35,575 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Change Developer... | 17521149 | 977 days ago | IN | 0 ETH | 0.00042438 | ||||
| Invest | 17398207 | 995 days ago | IN | 0 ETH | 0.00157052 | ||||
| Transfer | 17050942 | 1044 days ago | IN | 0.002 ETH | 0.00430961 | ||||
| Transfer | 17050936 | 1044 days ago | IN | 0.001 ETH | 0.00046123 | ||||
| Transfer | 17050932 | 1044 days ago | IN | 0.001 ETH | 0.00053824 | ||||
| Set Nickname | 17050850 | 1044 days ago | IN | 0 ETH | 0.00102589 | ||||
| Change Developer... | 16362393 | 1140 days ago | IN | 0 ETH | 0.04986802 | ||||
| Change Developer... | 16362393 | 1140 days ago | IN | 0 ETH | 0.04986802 | ||||
| Change Developer... | 16362352 | 1140 days ago | IN | 0 ETH | 0.04469023 | ||||
| Transfer | 6832135 | 2635 days ago | IN | 0 ETH | 0.00036 | ||||
| Transfer | 6829588 | 2636 days ago | IN | 0 ETH | 0.00120978 | ||||
| Withdraw Investm... | 6337644 | 2716 days ago | IN | 0 ETH | 0.0014319 | ||||
| Withdraw Investm... | 6337625 | 2716 days ago | IN | 0 ETH | 0.00120077 | ||||
| Withdraw Investm... | 5268734 | 2899 days ago | IN | 0 ETH | 0.00089949 | ||||
| Withdraw Investm... | 5162503 | 2917 days ago | IN | 0 ETH | 0.0000682 | ||||
| Withdraw Investm... | 4916734 | 2959 days ago | IN | 0 ETH | 0.00147969 | ||||
| Withdraw Investm... | 4916731 | 2959 days ago | IN | 0 ETH | 0.00147969 | ||||
| Withdraw Investm... | 4916702 | 2959 days ago | IN | 0 ETH | 0.00147969 | ||||
| Withdraw Investm... | 4916655 | 2959 days ago | IN | 0 ETH | 0.00262268 | ||||
| Withdraw Investm... | 4916654 | 2959 days ago | IN | 0 ETH | 0.00262268 | ||||
| Withdraw Investm... | 4825598 | 2975 days ago | IN | 0 ETH | 0.00007218 | ||||
| Withdraw Investm... | 4731163 | 2991 days ago | IN | 0 ETH | 0.00138915 | ||||
| Transfer | 4729676 | 2992 days ago | IN | 0.05 ETH | 0.009603 | ||||
| Withdraw Investm... | 4721152 | 2993 days ago | IN | 0 ETH | 0.00262453 | ||||
| Withdraw Investm... | 4721095 | 2993 days ago | IN | 0 ETH | 0.00131134 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 4825598 | 2975 days ago | 98.4033986 ETH | ||||
| Transfer | 4731163 | 2991 days ago | 91.90858101 ETH | ||||
| Transfer | 4721152 | 2993 days ago | 109.03215008 ETH | ||||
| Transfer | 4721095 | 2993 days ago | 182.00265136 ETH | ||||
| Transfer | 4721071 | 2993 days ago | 108.58848586 ETH | ||||
| Transfer | 4721044 | 2993 days ago | 163.54512099 ETH | ||||
| Transfer | 4720951 | 2993 days ago | 98.12893507 ETH | ||||
| Transfer | 4569600 | 3018 days ago | 195.35041347 ETH | ||||
| Transfer | 4549300 | 3022 days ago | 91.14005777 ETH | ||||
| Transfer | 4366246 | 3052 days ago | 200.41464462 ETH | ||||
| Transfer | 4366236 | 3052 days ago | 90.86968344 ETH | ||||
| Transfer | 4366236 | 3052 days ago | 90.86968344 ETH | ||||
| Transfer | 4366225 | 3052 days ago | 90.86968344 ETH | ||||
| Transfer | 4366219 | 3052 days ago | 90.86968344 ETH | ||||
| Transfer | 4366211 | 3052 days ago | 90.86968344 ETH | ||||
| Transfer | 4333248 | 3063 days ago | 182.07128202 ETH | ||||
| Transfer | 4333229 | 3063 days ago | 91.06142823 ETH | ||||
| Transfer | 4333177 | 3063 days ago | 91.00132568 ETH | ||||
| Transfer | 4333152 | 3063 days ago | 91.05621662 ETH | ||||
| Transfer | 4333118 | 3063 days ago | 91.00132568 ETH | ||||
| Transfer | 4333118 | 3063 days ago | 91.00132568 ETH | ||||
| Transfer | 4333030 | 3063 days ago | 91.00132568 ETH | ||||
| Transfer | 4333030 | 3063 days ago | 91.00132568 ETH | ||||
| Transfer | 4333003 | 3063 days ago | 91.01211501 ETH | ||||
| Transfer | 4333003 | 3063 days ago | 90.99859506 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Rouleth
Compiler Version
v0.3.5-2016-07-01-48238c9
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2016-09-04
*/
// , ; , .-'"""'-. , ; ,
// \\|/ .' '. \|//
// \-;-/ () () \-;-/
// // ; ; \\
// //__; :. .; ;__\\
// `-----\'.'-.....-'.'/-----'
// '.'.-.-,_.'.'
// '( (..-'
// '-'
// ROULETH
//
// Play the Roulette on ethereum blockchain !
// (or become a member of Rouleth's Decentralized Organisation and contribute to the bankroll.)
//
//
//
// check latest contract address version on the current website interface
// V 2
//
//
//
contract Rouleth
{
//Game and Global Variables, Structure of gambles
address developer;
uint8 blockDelay; //nb of blocks to wait before spin
uint8 blockExpiration; //nb of blocks before bet expiration (due to hash storage limits)
uint256 maxGamble; //max gamble value manually set by config
uint256 minGamble; //min gamble value manually set by config
uint maxBetsPerBlock; //limits the number of bets per blocks to prevent miner cheating
uint nbBetsCurrentBlock; //counts the nb of bets in the block
uint casinoStatisticalLimit; //ratio payroll and max win
//Current gamble value possibly lower than limit auto
uint256 currentMaxGamble;
//Gambles
enum BetTypes{number, color, parity, dozen, column, lowhigh}
struct Gamble
{
address player;
bool spinned; //Was the rouleth spinned ?
bool win;
//Possible bet types
BetTypes betType;
uint8 input; //stores number, color, dozen or oddeven
uint256 wager;
uint256 blockNumber; //block of bet
uint256 blockSpinned; //block of spin
uint8 wheelResult;
}
Gamble[] private gambles;
uint totalGambles;
//Tracking progress of players
mapping (address=>uint) gambleIndex; //current gamble index of the player
//records current status of player
enum Status {waitingForBet, waitingForSpin} mapping (address=>Status) playerStatus;
//**********************************************
// Management & Config FUNCTIONS //
//**********************************************
function Rouleth() private //creation settings
{
developer = msg.sender;
blockDelay=1; //indicates which block after bet will be used for RNG
blockExpiration=200; //delay after which gamble expires
minGamble=50 finney; //configurable min bet
maxGamble=500 finney; //configurable max bet
maxBetsPerBlock=5; // limit of bets per block, to prevent multiple bets per miners
casinoStatisticalLimit=100; //we are targeting at least 400
}
modifier onlyDeveloper()
{
if (msg.sender!=developer) throw;
_
}
function changeDeveloper_only_Dev(address new_dev)
noEthSent
onlyDeveloper
{
developer=new_dev;
}
//Prevents accidental sending of Eth when you shouldn't
modifier noEthSent()
{
if (msg.value>0)
{
throw;
}
_
}
//Activate, Deactivate Betting
enum States{active, inactive} States private contract_state;
function disableBetting_only_Dev()
noEthSent
onlyDeveloper
{
contract_state=States.inactive;
}
function enableBetting_only_Dev()
noEthSent
onlyDeveloper
{
contract_state=States.active;
}
modifier onlyActive()
{
if (contract_state==States.inactive) throw;
_
}
//Change some settings within safety bounds
function changeSettings_only_Dev(uint newCasinoStatLimit, uint newMaxBetsBlock, uint256 newMinGamble, uint256 newMaxGamble, uint16 newMaxInvestor, uint256 newMinInvestment,uint256 newMaxInvestment, uint256 newLockPeriod, uint8 newBlockDelay, uint8 newBlockExpiration)
noEthSent
onlyDeveloper
{
// changes the statistical multiplier that guarantees the long run casino survival
if (newCasinoStatLimit<100) throw;
casinoStatisticalLimit=newCasinoStatLimit;
//Max number of bets per block to prevent miner cheating
maxBetsPerBlock=newMaxBetsBlock;
//MAX BET : limited by payroll/(casinoStatisticalLimit*35)
if (newMaxGamble<newMinGamble) throw;
else { maxGamble=newMaxGamble; }
//Min Bet
if (newMinGamble<0) throw;
else { minGamble=newMinGamble; }
//MAX NB of DAO members (can only increase (within bounds) or stay equal)
//this number of members can only increase after 25k spins on Rouleth
//refuse change of max number of members if less than 25k spins played
if (newMaxInvestor!=setting_maxInvestors && gambles.length<25000) throw;
if ( newMaxInvestor<setting_maxInvestors
|| newMaxInvestor>investors.length) throw;
else { setting_maxInvestors=newMaxInvestor;}
//computes the results of the vote of the VIP members, fees to apply to new members
computeResultVoteExtraInvestFeesRate();
if (newMaxInvestment<newMinInvestment) throw;
//MIN INVEST :
setting_minInvestment=newMinInvestment;
//MAX INVEST :
setting_maxInvestment=newMaxInvestment;
//Invest LOCK PERIOD
//1 year max
//can also serve as a failsafe to shutdown withdraws for a period
if (setting_lockPeriod>360 days) throw;
setting_lockPeriod=newLockPeriod;
//Delay before spin :
blockDelay=newBlockDelay;
if (newBlockExpiration<blockDelay+20) throw;
blockExpiration=newBlockExpiration;
updateMaxBet();
}
//**********************************************
// Nicknames FUNCTIONS //
//**********************************************
//User set nickname
mapping (address => string) nicknames;
function setNickname(string name)
noEthSent
{
if (bytes(name).length >= 2 && bytes(name).length <= 30)
nicknames[msg.sender] = name;
}
function getNickname(address _address) constant returns(string _name) {
_name = nicknames[_address];
}
//**********************************************
// BETTING FUNCTIONS //
//**********************************************
//***//basic betting without Mist or contract call
//activates when the player only sends eth to the contract
//without specifying any type of bet.
function ()
{
//defaut bet : bet on red
betOnColor(true,false);
}
//Admin function that
//recalculates max bet
//updated after each bet and change of bankroll
function updateMaxBet() private
{
//check that setting is still within safety bounds
if (payroll/(casinoStatisticalLimit*35) > maxGamble)
{
currentMaxGamble=maxGamble;
}
else
{
currentMaxGamble = payroll/(casinoStatisticalLimit*35);
}
}
//***//Guarantees that gamble is under max bet and above min.
// returns bet value
function checkBetValue() private returns(uint256 playerBetValue)
{
if (msg.value < minGamble) throw;
if (msg.value > currentMaxGamble) //if above max, send difference back
{
playerBetValue=currentMaxGamble;
}
else
{ playerBetValue=msg.value; }
return;
}
//check number of bets in block (to prevent miner cheating)
modifier checkNbBetsCurrentBlock()
{
if (gambles.length!=0 && block.number==gambles[gambles.length-1].blockNumber) nbBetsCurrentBlock+=1;
else nbBetsCurrentBlock=0;
if (nbBetsCurrentBlock>=maxBetsPerBlock) throw;
_
}
//Function record bet called by all others betting functions
function placeBet(BetTypes betType_, uint8 input_) private
{
// Before we record, we may have to spin the past bet if the croupier bot
// is down for some reason or if the player played again too quickly.
// This would fail though if the player tries too play to quickly (in consecutive block).
// gambles should be spaced by at least a block
// the croupier bot should spin within 2 blocks (~30 secs) after your bet.
// if the bet expires it is added to casino profit, otherwise it would be a way to cheat
if (playerStatus[msg.sender]!=Status.waitingForBet)
{
SpinTheWheel(msg.sender);
}
//Once this is done, we can record the new bet
playerStatus[msg.sender]=Status.waitingForSpin;
gambleIndex[msg.sender]=gambles.length;
totalGambles++;
//adapts wager to casino limits
uint256 betValue = checkBetValue();
gambles.push(Gamble(msg.sender, false, false, betType_, input_, betValue, block.number, 0, 37)); //37 indicates not spinned yet
//refund excess bet (at last step vs re-entry)
if (betValue<msg.value)
{
if (msg.sender.send(msg.value-betValue)==false) throw;
}
}
//***//bet on Number
function betOnNumber(uint8 numberChosen)
onlyActive
checkNbBetsCurrentBlock
{
//check that number chosen is valid and records bet
if (numberChosen>36) throw;
placeBet(BetTypes.number, numberChosen);
}
//***// function betOnColor
//bet type : color
//input : 0 for red
//input : 1 for black
function betOnColor(bool Red, bool Black)
onlyActive
checkNbBetsCurrentBlock
{
uint8 count;
uint8 input;
if (Red)
{
count+=1;
input=0;
}
if (Black)
{
count+=1;
input=1;
}
if (count!=1) throw;
placeBet(BetTypes.color, input);
}
//***// function betOnLow_High
//bet type : lowhigh
//input : 0 for low
//input : 1 for low
function betOnLowHigh(bool Low, bool High)
onlyActive
checkNbBetsCurrentBlock
{
uint8 count;
uint8 input;
if (Low)
{
count+=1;
input=0;
}
if (High)
{
count+=1;
input=1;
}
if (count!=1) throw;
placeBet(BetTypes.lowhigh, input);
}
//***// function betOnOddEven
//bet type : parity
//input : 0 for even
//input : 1 for odd
function betOnOddEven(bool Odd, bool Even)
onlyActive
checkNbBetsCurrentBlock
{
uint8 count;
uint8 input;
if (Even)
{
count+=1;
input=0;
}
if (Odd)
{
count+=1;
input=1;
}
if (count!=1) throw;
placeBet(BetTypes.parity, input);
}
//***// function betOnDozen
// //bet type : dozen
// //input : 0 for first dozen
// //input : 1 for second dozen
// //input : 2 for third dozen
function betOnDozen(bool First, bool Second, bool Third)
{
betOnColumnOrDozen(First,Second,Third, BetTypes.dozen);
}
// //***// function betOnColumn
// //bet type : column
// //input : 0 for first column
// //input : 1 for second column
// //input : 2 for third column
function betOnColumn(bool First, bool Second, bool Third)
{
betOnColumnOrDozen(First, Second, Third, BetTypes.column);
}
function betOnColumnOrDozen(bool First, bool Second, bool Third, BetTypes bet) private
onlyActive
checkNbBetsCurrentBlock
{
uint8 count;
uint8 input;
if (First)
{
count+=1;
input=0;
}
if (Second)
{
count+=1;
input=1;
}
if (Third)
{
count+=1;
input=2;
}
if (count!=1) throw;
placeBet(bet, input);
}
//**********************************************
// Spin The Wheel & Check Result FUNCTIONS//
//**********************************************
event Win(address player, uint8 result, uint value_won, bytes32 bHash, bytes32 sha3Player, uint gambleId);
event Loss(address player, uint8 result, uint value_loss, bytes32 bHash, bytes32 sha3Player, uint gambleId);
//***//function to spin callable
// no eth allowed
function spinTheWheel(address spin_for_player)
noEthSent
{
SpinTheWheel(spin_for_player);
}
function SpinTheWheel(address playerSpinned) private
{
if (playerSpinned==0)
{
playerSpinned=msg.sender; //if no index spins for the sender
}
//check that player has to spin
if (playerStatus[playerSpinned]!=Status.waitingForSpin) throw;
//redundent double check : check that gamble has not been spinned already
if (gambles[gambleIndex[playerSpinned]].spinned==true) throw;
//check that the player waited for the delay before spin
//and also that the bet is not expired
uint playerblock = gambles[gambleIndex[playerSpinned]].blockNumber;
//too early to spin
if (block.number<=playerblock+blockDelay) throw;
//too late, bet expired, player lost
else if (block.number>playerblock+blockExpiration) solveBet(playerSpinned, 255, false, 1, 0, 0) ;
//spin !
else
{
uint8 wheelResult;
//Spin the wheel,
bytes32 blockHash= block.blockhash(playerblock+blockDelay);
//security check that the Hash is not empty
if (blockHash==0) throw;
// generate the hash for RNG from the blockHash and the player's address
bytes32 shaPlayer = sha3(playerSpinned, blockHash);
// get the final wheel result
wheelResult = uint8(uint256(shaPlayer)%37);
//check result against bet and pay if win
checkBetResult(wheelResult, playerSpinned, blockHash, shaPlayer);
}
}
//CHECK BETS FUNCTIONS private
function checkBetResult(uint8 result, address player, bytes32 blockHash, bytes32 shaPlayer) private
{
BetTypes betType=gambles[gambleIndex[player]].betType;
//bet on Number
if (betType==BetTypes.number) checkBetNumber(result, player, blockHash, shaPlayer);
else if (betType==BetTypes.parity) checkBetParity(result, player, blockHash, shaPlayer);
else if (betType==BetTypes.color) checkBetColor(result, player, blockHash, shaPlayer);
else if (betType==BetTypes.lowhigh) checkBetLowhigh(result, player, blockHash, shaPlayer);
else if (betType==BetTypes.dozen) checkBetDozen(result, player, blockHash, shaPlayer);
else if (betType==BetTypes.column) checkBetColumn(result, player, blockHash, shaPlayer);
updateMaxBet(); //at the end, update the Max possible bet
}
// function solve Bet once result is determined : sends to winner, adds loss to profit
function solveBet(address player, uint8 result, bool win, uint8 multiplier, bytes32 blockHash, bytes32 shaPlayer) private
{
//Update status and record spinned
playerStatus[player]=Status.waitingForBet;
gambles[gambleIndex[player]].wheelResult=result;
gambles[gambleIndex[player]].spinned=true;
gambles[gambleIndex[player]].blockSpinned=block.number;
uint bet_v = gambles[gambleIndex[player]].wager;
if (win)
{
gambles[gambleIndex[player]].win=true;
uint win_v = (multiplier-1)*bet_v;
lossSinceChange+=win_v;
Win(player, result, win_v, blockHash, shaPlayer, gambleIndex[player]);
//send win!
//safe send vs potential callstack overflowed spins
if (player.send(win_v+bet_v)==false) throw;
}
else
{
Loss(player, result, bet_v-1, blockHash, shaPlayer, gambleIndex[player]);
profitSinceChange+=bet_v-1;
//send 1 wei to confirm spin if loss
if (player.send(1)==false) throw;
}
}
// checkbeton number(input)
// bet type : number
// input : chosen number
function checkBetNumber(uint8 result, address player, bytes32 blockHash, bytes32 shaPlayer) private
{
bool win;
//win
if (result==gambles[gambleIndex[player]].input)
{
win=true;
}
solveBet(player, result,win,36, blockHash, shaPlayer);
}
// checkbet on oddeven
// bet type : parity
// input : 0 for even, 1 for odd
function checkBetParity(uint8 result, address player, bytes32 blockHash, bytes32 shaPlayer) private
{
bool win;
//win
if (result%2==gambles[gambleIndex[player]].input && result!=0)
{
win=true;
}
solveBet(player,result,win,2, blockHash, shaPlayer);
}
// checkbet on lowhigh
// bet type : lowhigh
// input : 0 low, 1 high
function checkBetLowhigh(uint8 result, address player, bytes32 blockHash, bytes32 shaPlayer) private
{
bool win;
//win
if (result!=0 && ( (result<19 && gambles[gambleIndex[player]].input==0)
|| (result>18 && gambles[gambleIndex[player]].input==1)
) )
{
win=true;
}
solveBet(player,result,win,2, blockHash, shaPlayer);
}
// checkbet on color
// bet type : color
// input : 0 red, 1 black
uint[18] red_list=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36];
function checkBetColor(uint8 result, address player, bytes32 blockHash, bytes32 shaPlayer) private
{
bool red;
//check if red
for (uint8 k; k<18; k++)
{
if (red_list[k]==result)
{
red=true;
break;
}
}
bool win;
//win
if ( result!=0
&& ( (gambles[gambleIndex[player]].input==0 && red)
|| ( gambles[gambleIndex[player]].input==1 && !red) ) )
{
win=true;
}
solveBet(player,result,win,2, blockHash, shaPlayer);
}
// checkbet on dozen
// bet type : dozen
// input : 0 first, 1 second, 2 third
function checkBetDozen(uint8 result, address player, bytes32 blockHash, bytes32 shaPlayer) private
{
bool win;
//win on first dozen
if ( result!=0 &&
( (result<13 && gambles[gambleIndex[player]].input==0)
||
(result>12 && result<25 && gambles[gambleIndex[player]].input==1)
||
(result>24 && gambles[gambleIndex[player]].input==2) ) )
{
win=true;
}
solveBet(player,result,win,3, blockHash, shaPlayer);
}
// checkbet on column
// bet type : column
// input : 0 first, 1 second, 2 third
function checkBetColumn(uint8 result, address player, bytes32 blockHash, bytes32 shaPlayer) private
{
bool win;
//win
if ( result!=0
&& ( (gambles[gambleIndex[player]].input==0 && result%3==1)
|| ( gambles[gambleIndex[player]].input==1 && result%3==2)
|| ( gambles[gambleIndex[player]].input==2 && result%3==0) ) )
{
win=true;
}
solveBet(player,result,win,3, blockHash, shaPlayer);
}
//D.A.O. FUNCTIONS
//total casino payroll
uint256 payroll;
//Profit Loss since last investor change
uint256 profitSinceChange;
uint256 lossSinceChange;
//DAO members struct array (hard capped to 777 members (77 VIP + 700 extra members) )
struct Investor
{
address investor;
uint256 time;
}
Investor[777] private investors; //array of 777 elements (max Rouleth's members nb.)
uint16 setting_maxInvestors = 77; //Initially restricted to 77 VIP Members
//Balances of the DAO members
mapping (address=>uint256) balance;
//lockPeriod
//minimum membership time
uint256 setting_lockPeriod=30 days ;
uint256 setting_minInvestment=100 ether; //min amount to send when using "invest()"
uint256 setting_maxInvestment=200 ether; //max amount to send when using "invest()"
event newInvest(address player, uint invest_v, uint net_invest_v);
//Become a DAO member.
function invest()
{
// update balances before altering the shares
updateBalances();
uint256 netInvest;
uint excess;
// reset the open position counter to values out of bounds
// =999 if full
uint16 openPosition=999;
bool alreadyInvestor;
// loop over array to find if already member,
// and record a potential openPosition
for (uint16 k = 0; k<setting_maxInvestors; k++)
{
// captures an index of an open position
if (investors[k].investor==0) openPosition=k;
// captures if already a member
else if (investors[k].investor==msg.sender)
{
alreadyInvestor=true;
break;
}
}
//new Member
if (!alreadyInvestor)
{
// check that more than min is sent (variable setting)
if (msg.value<setting_minInvestment) throw;
// check that less than max is sent (variable setting)
// otherwise refund
if (msg.value>setting_maxInvestment)
{
excess=msg.value-setting_maxInvestment;
netInvest=setting_maxInvestment;
}
else
{
netInvest=msg.value;
}
//members can't become a VIP member after the initial period
if (setting_maxInvestors >77 && openPosition<77) throw;
//case : array not full, record new member
else if (openPosition!=999) investors[openPosition]=Investor(msg.sender, now);
//case : array full
else
{
throw;
}
}
//already a member
else
{
netInvest=msg.value;
//is already above the max balance allowed or is sending
// too much refuse additional invest
if (balance[msg.sender]+msg.value>setting_maxInvestment)
{
throw;
}
// this additionnal amount should be of at least 1/5 of "setting_minInvestment" (vs spam)
if (msg.value<setting_minInvestment/5) throw;
}
// add to balance of member and to bankroll
// 10% of initial 77 VIP members investment is allocated to
// game developement provider chosen by Rouleth DAO
// 90% to bankroll
//share that will be allocated to game dev
uint256 developmentAllocation;
developmentAllocation=10*netInvest/100;
netInvest-=developmentAllocation;
//send game development allocation to Rouleth DAO or tech provider
if (developer.send(developmentAllocation)==false) throw;
// Apply extra entry fee once casino has been opened to extra members
// that fee will be shared between the VIP members and represents the increment of
// market value of their shares in Rouleth to outsiders
// warning if a VIP adds to its initial invest after the casino has been opened to
// extra members he will pay have to pay this fee.
if (setting_maxInvestors>77)
{
// % of extra member's investment that rewards VIP funders
// Starts at 100%
// is set by a vote and computed when settings are changed
// to allow more investors
uint256 entryExtraCost=voted_extraInvestFeesRate*netInvest/100;
// add to VIP profit (to be shared by later call by dev.)
profitVIP += entryExtraCost;
netInvest-=entryExtraCost;
}
newInvest(msg.sender, msg.value, netInvest);//event log
balance[msg.sender]+=netInvest; //add to balance
payroll+=netInvest; //add to bankroll
updateMaxBet();
//refund potential excess
if (excess>0)
{
if (msg.sender.send(excess)==false) throw;
}
}
//Allows to transfer your DAO account to another address
//target should not be currently a DAO member of rouleth
//enter twice the address to make sure you make no mistake.
//this can't be reversed if you don't own the target account
function transferInvestorAccount(address newInvestorAccountOwner, address newInvestorAccountOwner_confirm)
noEthSent
{
if (newInvestorAccountOwner!=newInvestorAccountOwner_confirm) throw;
if (newInvestorAccountOwner==0) throw;
//retrieve investor ID
uint16 investorID=999;
for (uint16 k = 0; k<setting_maxInvestors; k++)
{
//new address cant be of a current investor
if (investors[k].investor==newInvestorAccountOwner) throw;
//retrieve investor id
if (investors[k].investor==msg.sender)
{
investorID=k;
}
}
if (investorID==999) throw; //stop if not a member
else
//accept and execute change of address
//votes on entryFeesRate are not transfered
//new address should vote again
{
balance[newInvestorAccountOwner]=balance[msg.sender];
balance[msg.sender]=0;
investors[investorID].investor=newInvestorAccountOwner;
}
}
//***// Withdraw function (only after lockPeriod)
// input : amount to withdraw in Wei (leave empty for full withdraw)
// if your withdraw brings your balance under the min required,
// your balance is fully withdrawn
event withdraw(address player, uint withdraw_v);
function withdrawInvestment(uint256 amountToWithdrawInWei)
noEthSent
{
//vs spam withdraw min 1/10 of min
if (amountToWithdrawInWei!=0 && amountToWithdrawInWei<setting_minInvestment/10) throw;
//before withdraw, update balances with the Profit and Loss sinceChange
updateBalances();
//check that amount requested is authorized
if (amountToWithdrawInWei>balance[msg.sender]) throw;
//retrieve member ID
uint16 investorID=999;
for (uint16 k = 0; k<setting_maxInvestors; k++)
{
if (investors[k].investor==msg.sender)
{
investorID=k;
break;
}
}
if (investorID==999) throw; //stop if not a member
//check if investment lock period is over
if (investors[investorID].time+setting_lockPeriod>now) throw;
//if balance left after withdraw is still above min accept partial withdraw
if (balance[msg.sender]-amountToWithdrawInWei>=setting_minInvestment && amountToWithdrawInWei!=0)
{
balance[msg.sender]-=amountToWithdrawInWei;
payroll-=amountToWithdrawInWei;
//send amount to investor (with security if transaction fails)
if (msg.sender.send(amountToWithdrawInWei)==false) throw;
withdraw(msg.sender, amountToWithdrawInWei);
}
else
//if amountToWithdraw=0 : user wants full withdraw
//if balance after withdraw is < min invest, withdraw all and delete member
{
//send amount to member (with security if transaction fails)
uint256 fullAmount=balance[msg.sender];
payroll-=fullAmount;
balance[msg.sender]=0;
//delete member
delete investors[investorID];
if (msg.sender.send(fullAmount)==false) throw;
withdraw(msg.sender, fullAmount);
}
updateMaxBet();
}
//***// updates balances with Profit Losses when there is a withdraw/deposit
// can be called by dev for accounting when there are no more changes
function manualUpdateBalances_only_Dev()
noEthSent
onlyDeveloper
{
updateBalances();
}
function updateBalances() private
{
//split Profits
uint256 profitToSplit;
uint256 lossToSplit;
if (profitSinceChange==0 && lossSinceChange==0)
{ return; }
else
{
// Case : Global profit (more win than losses)
// 20% fees for game development on global profit (if profit>loss)
if (profitSinceChange>lossSinceChange)
{
profitToSplit=profitSinceChange-lossSinceChange;
uint256 developerFees=profitToSplit*20/100;
profitToSplit-=developerFees;
if (developer.send(developerFees)==false) throw;
}
else
{
lossToSplit=lossSinceChange-profitSinceChange;
}
//share the loss and profits between all DAO members
//(proportionnaly. to each one's balance)
uint totalShared;
for (uint16 k=0; k<setting_maxInvestors; k++)
{
address inv=investors[k].investor;
if (inv==0) continue;
else
{
if (profitToSplit!=0)
{
uint profitShare=(profitToSplit*balance[inv])/payroll;
balance[inv]+=profitShare;
totalShared+=profitShare;
}
else if (lossToSplit!=0)
{
uint lossShare=(lossToSplit*balance[inv])/payroll;
balance[inv]-=lossShare;
totalShared+=lossShare;
}
}
}
// update bankroll
// and handle potential very small left overs from integer div.
if (profitToSplit !=0)
{
payroll+=profitToSplit;
balance[developer]+=profitToSplit-totalShared;
}
else if (lossToSplit !=0)
{
payroll-=lossToSplit;
balance[developer]-=lossToSplit-totalShared;
}
profitSinceChange=0; //reset Profit;
lossSinceChange=0; //reset Loss ;
}
}
//VIP Voting on Extra Invest Fees Rate
//mapping records 100 - vote
mapping (address=>uint) hundredminus_extraInvestFeesRate;
// max fee is 99%
// a fee of 100% indicates that the VIP has never voted.
function voteOnNewEntryFees_only_VIP(uint8 extraInvestFeesRate_0_to_99)
noEthSent
{
if (extraInvestFeesRate_0_to_99<1 || extraInvestFeesRate_0_to_99>99) throw;
hundredminus_extraInvestFeesRate[msg.sender]=100-extraInvestFeesRate_0_to_99;
}
uint256 payrollVIP;
uint256 voted_extraInvestFeesRate;
function computeResultVoteExtraInvestFeesRate() private
{
payrollVIP=0;
voted_extraInvestFeesRate=0;
//compute total payroll of the VIPs
//compute vote results among VIPs
for (uint8 k=0; k<77; k++)
{
if (investors[k].investor==0) continue;
else
{
//don't count vote if the VIP never voted
if (hundredminus_extraInvestFeesRate[investors[k].investor]==0) continue;
else
{
payrollVIP+=balance[investors[k].investor];
voted_extraInvestFeesRate+=hundredminus_extraInvestFeesRate[investors[k].investor]*balance[investors[k].investor];
}
}
}
//compute final result
if (payrollVIP!=0)
{
voted_extraInvestFeesRate=100-voted_extraInvestFeesRate/payrollVIP;
}
}
//Split the profits of the VIP members on extra members' contribution
uint profitVIP;
function splitProfitVIP_only_Dev()
noEthSent
onlyDeveloper
{
payrollVIP=0;
//compute total payroll of the VIPs
for (uint8 k=0; k<77; k++)
{
if (investors[k].investor==0) continue;
else
{
payrollVIP+=balance[investors[k].investor];
}
}
//split the profits of the VIP members on extra member's contribution
uint totalSplit;
for (uint8 i=0; i<77; i++)
{
if (investors[i].investor==0) continue;
else
{
uint toSplit=balance[investors[i].investor]*profitVIP/payrollVIP;
balance[investors[i].investor]+=toSplit;
totalSplit+=toSplit;
}
}
//take care of Integer Div remainders, and add to bankroll
balance[developer]+=profitVIP-totalSplit;
payroll+=profitVIP;
//reset var profitVIP
profitVIP=0;
}
//INFORMATION FUNCTIONS
function checkProfitLossSinceInvestorChange() constant returns(uint profit_since_update_balances, uint loss_since_update_balances, uint profit_VIP_since_update_balances)
{
profit_since_update_balances=profitSinceChange;
loss_since_update_balances=lossSinceChange;
profit_VIP_since_update_balances=profitVIP;
return;
}
function checkInvestorBalance(address investor) constant returns(uint balanceInWei)
{
balanceInWei=balance[investor];
return;
}
function getInvestorList(uint index) constant returns(address investor, uint endLockPeriod)
{
investor=investors[index].investor;
endLockPeriod=investors[index].time+setting_lockPeriod;
return;
}
function investmentEntryInfos() constant returns(uint current_max_nb_of_investors, uint investLockPeriod, uint voted_Fees_Rate_on_extra_investments)
{
investLockPeriod=setting_lockPeriod;
voted_Fees_Rate_on_extra_investments=voted_extraInvestFeesRate;
current_max_nb_of_investors=setting_maxInvestors;
return;
}
function getSettings() constant returns(uint maxBet, uint8 blockDelayBeforeSpin)
{
maxBet=currentMaxGamble;
blockDelayBeforeSpin=blockDelay;
return ;
}
function getTotalGambles() constant returns(uint _totalGambles)
{
_totalGambles=totalGambles;
return ;
}
function getPayroll() constant returns(uint payroll_at_last_update_balances)
{
payroll_at_last_update_balances=payroll;
return ;
}
function checkMyBet(address player) constant returns(Status player_status, BetTypes bettype, uint8 input, uint value, uint8 result, bool wheelspinned, bool win, uint blockNb, uint blockSpin, uint gambleID)
{
player_status=playerStatus[player];
bettype=gambles[gambleIndex[player]].betType;
input=gambles[gambleIndex[player]].input;
value=gambles[gambleIndex[player]].wager;
result=gambles[gambleIndex[player]].wheelResult;
wheelspinned=gambles[gambleIndex[player]].spinned;
win=gambles[gambleIndex[player]].win;
blockNb=gambles[gambleIndex[player]].blockNumber;
blockSpin=gambles[gambleIndex[player]].blockSpinned;
gambleID=gambleIndex[player];
return;
}
function getGamblesList(uint256 index) constant returns(address player, BetTypes bettype, uint8 input, uint value, uint8 result, bool wheelspinned, bool win, uint blockNb, uint blockSpin)
{
player=gambles[index].player;
bettype=gambles[index].betType;
input=gambles[index].input;
value=gambles[index].wager;
result=gambles[index].wheelResult;
wheelspinned=gambles[index].spinned;
win=gambles[index].win;
blockNb=gambles[index].blockNumber;
blockSpin=gambles[index].blockSpinned;
return;
}
} //end of contractContract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[{"name":"name","type":"string"}],"name":"setNickname","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"amountToWithdrawInWei","type":"uint256"}],"name":"withdrawInvestment","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"manualUpdateBalances_only_Dev","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"checkProfitLossSinceInvestorChange","outputs":[{"name":"profit_since_update_balances","type":"uint256"},{"name":"loss_since_update_balances","type":"uint256"},{"name":"profit_VIP_since_update_balances","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"extraInvestFeesRate_0_to_99","type":"uint8"}],"name":"voteOnNewEntryFees_only_VIP","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"newInvestorAccountOwner","type":"address"},{"name":"newInvestorAccountOwner_confirm","type":"address"}],"name":"transferInvestorAccount","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"getTotalGambles","outputs":[{"name":"_totalGambles","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"disableBetting_only_Dev","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"Red","type":"bool"},{"name":"Black","type":"bool"}],"name":"betOnColor","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"investmentEntryInfos","outputs":[{"name":"current_max_nb_of_investors","type":"uint256"},{"name":"investLockPeriod","type":"uint256"},{"name":"voted_Fees_Rate_on_extra_investments","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"player","type":"address"}],"name":"checkMyBet","outputs":[{"name":"player_status","type":"uint8"},{"name":"bettype","type":"uint8"},{"name":"input","type":"uint8"},{"name":"value","type":"uint256"},{"name":"result","type":"uint8"},{"name":"wheelspinned","type":"bool"},{"name":"win","type":"bool"},{"name":"blockNb","type":"uint256"},{"name":"blockSpin","type":"uint256"},{"name":"gambleID","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getInvestorList","outputs":[{"name":"investor","type":"address"},{"name":"endLockPeriod","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[],"name":"enableBetting_only_Dev","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"new_dev","type":"address"}],"name":"changeDeveloper_only_Dev","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"getSettings","outputs":[{"name":"maxBet","type":"uint256"},{"name":"blockDelayBeforeSpin","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[],"name":"getPayroll","outputs":[{"name":"payroll_at_last_update_balances","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getNickname","outputs":[{"name":"_name","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"Low","type":"bool"},{"name":"High","type":"bool"}],"name":"betOnLowHigh","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"numberChosen","type":"uint8"}],"name":"betOnNumber","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"Odd","type":"bool"},{"name":"Even","type":"bool"}],"name":"betOnOddEven","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"splitProfitVIP_only_Dev","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"getGamblesList","outputs":[{"name":"player","type":"address"},{"name":"bettype","type":"uint8"},{"name":"input","type":"uint8"},{"name":"value","type":"uint256"},{"name":"result","type":"uint8"},{"name":"wheelspinned","type":"bool"},{"name":"win","type":"bool"},{"name":"blockNb","type":"uint256"},{"name":"blockSpin","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"First","type":"bool"},{"name":"Second","type":"bool"},{"name":"Third","type":"bool"}],"name":"betOnDozen","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"newCasinoStatLimit","type":"uint256"},{"name":"newMaxBetsBlock","type":"uint256"},{"name":"newMinGamble","type":"uint256"},{"name":"newMaxGamble","type":"uint256"},{"name":"newMaxInvestor","type":"uint16"},{"name":"newMinInvestment","type":"uint256"},{"name":"newMaxInvestment","type":"uint256"},{"name":"newLockPeriod","type":"uint256"},{"name":"newBlockDelay","type":"uint8"},{"name":"newBlockExpiration","type":"uint8"}],"name":"changeSettings_only_Dev","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"First","type":"bool"},{"name":"Second","type":"bool"},{"name":"Third","type":"bool"}],"name":"betOnColumn","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"spin_for_player","type":"address"}],"name":"spinTheWheel","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"invest","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"investor","type":"address"}],"name":"checkInvestorBalance","outputs":[{"name":"balanceInWei","type":"uint256"}],"type":"function"},{"inputs":[],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"result","type":"uint8"},{"indexed":false,"name":"value_won","type":"uint256"},{"indexed":false,"name":"bHash","type":"bytes32"},{"indexed":false,"name":"sha3Player","type":"bytes32"},{"indexed":false,"name":"gambleId","type":"uint256"}],"name":"Win","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"result","type":"uint8"},{"indexed":false,"name":"value_loss","type":"uint256"},{"indexed":false,"name":"bHash","type":"bytes32"},{"indexed":false,"name":"sha3Player","type":"bytes32"},{"indexed":false,"name":"gambleId","type":"uint256"}],"name":"Loss","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"invest_v","type":"uint256"},{"indexed":false,"name":"net_invest_v","type":"uint256"}],"name":"newInvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"withdraw_v","type":"uint256"}],"name":"withdraw","type":"event"}]Contract Creation Code
6102a06040819052600160609081526003608052600560a052600760c052600960e052600c61010052600e6101205260106101405260126101605260136101805260156101a05260176101c05260196101e052601b61020052601e61022052602061024052602261026052602461028052600d91601f919083905b8281111561009857825182600050559160200191906001019061007a565b506100b49291505b8082111561017657600081556001016100a0565b5050610634805461ffff1916604d17905562278d006106365568056bc75e2d6310000061063755680ad78ebc5ac6200000610638556000805475c800000000000000000000000000000000000000000060a860020a60ff021960a060020a60ff0219600160a060020a031990931633179290921674010000000000000000000000000000000000000000179190911617905566b1a2bc2ec500006002556706f05b59d3b2000060015560056003819055606490556129108061017a6000396000f35b509056606060405236156101485760e060020a60003504631c5d9faa81146101575780632037fcbf146101aa578063266710ca146101c45780632c6b2c92146101d55780632e0ef395146101e857806333ce7787146101fc578063402e623014610217578063580bdf3c146102215780635b7d47a9146102325780636ad50ed4146102545780636e1b6bcc146102705780636ed43eb01461042c578063750cae6a1461047a5780637c9cd7df1461048b57806385b4bb531461049f578063942385eb146104c5578063adaccd74146104d0578063adf54e0c1461054f578063b400d14914610570578063b738169c14610589578063bb84d362146105aa578063bcb3b5d2146105c3578063bfe8c1071461077f578063c7144269146107ac578063e548cf13146107dd578063e56c8552146107f6578063e8b5e51f1461080a578063f7ae94211461084f575b6108746108dc6001600061023c565b6040805160206004803580820135601f81018490048402850184019095528484526108749491936024939092918401919081908401838280828437509496505050505050506000341115610b2257610002565b6108746004356000600060006000341115610bf957610002565b6108746000341115610e3457610002565b6108de60205460215461063c545b909192565b6108746004356000341115610e5857610002565b610874600435602435600060006000341115610e9d57610002565b6108fc6008545b90565b6108746000341115610fc557610002565b6108746004356024355b600b54600090819060ff1660011415610a5a57610002565b6108de6106345461063b546106365461ffff90921691906101e3565b61090e600435600160a060020a0381166000908152600a602090815260408083205460099092528220546007805460ff9390931693928392839283928392839283928392839291811015610002578154600582026000805160206128f0833981519152015460b060020a900460ff169b50811015610002578154600582026000805160206128f0833981519152015460b860020a900460ff169a50811015610002578154600582027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68901549950811015610002578154600582027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68c015460ff169850811015610002578154600582026000805160206128f0833981519152015460a060020a900460ff169750811015610002578154600582026000805160206128f0833981519152015460a860020a900460ff169650811015610002578154600582026000805160206128d08339815191520154955081101561000257600581027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b01549b9d9a9c50989a979996989597949693959392505050565b61096960043560008060228361030981101561000257506106365460028502820154600160a060020a0316935090846103098110156100025790906002020160005060010154019050915091565b6108746000341115610ff057610002565b610874600435600034111561101857610002565b60005460408051600654815260a060020a90920460ff1660208301528051918290030190f35b6108fc601f5461021e565b61098f60043560408051602081810183526000808352600160a060020a0385168152600c8252835190849020805460026001821615610100026000190190911604601f810184900484028301840190955284825292939092918301828280156110745780601f1061104957610100808354040283529160200191611074565b610874600435602435600b54600090819060ff166001141561108257610002565b610874600435600b5460ff166001141561111d57610002565b610874600435602435600b54600090819060ff166001141561119e57610002565b6108746000600060006000600034111561123957610002565b6109fd60043560006000600060006000600060006000600060076000508a8154811015610002578154828452600582026000805160206128f08339815191520154600160a060020a03169b50811015610002579060005260206000209060050201600050546007805460b060020a90920460ff169950908b90811015610002579060005260206000209060050201600050546007805460b860020a90920460ff169850908b9081101561000257906000526020600020906005020160005060078054600192909201549750908b90811015610002579060005260206000209060050201600050600780546004929092015460ff169650908b90811015610002579060005260206000209060050201600050546007805460a060020a90920460ff169550908b90811015610002579060005260206000209060050201600050546007805460a860020a90920460ff169450908b908110156100025790600052602060002090600502016000506002015460078054919350908b90811015610002575050506005989098027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b01549698959794969395929491939092565b610874600435602435604435610bbf83838360035b600b54600090819060ff1660011415611c4457610002565b61087460043560243560443560643560843560a43560c43560e435610104356101243560003411156113d857610002565b610874600435602435604435610bbf8383836004610794565b610874600435600034111561158d57610002565b61087460006000600060006000600060006115d85b600060006000600060006000600060006020600050546000148015610845575060215481145b15611a7e57611b19565b6108fc600435600160a060020a0381166000908152610635602052604090205461107d565b005b60408051600160a060020a03331681526020810183905281517ff3fef3a3f44f9c277339b67d54f015748bd8d6b77a985b0ab6e71126b018c34a929181900390910190a15b610b1c5b600154600554601f54602390910290041115611c31576001546006555b565b60408051938452602084019290925282820152519081900360600190f35b60408051918252519081900360200190f35b604080519a8b5260208b019990995260ff9788168a8a015260608a019690965293909516608088015290151560a0870152151560c086015260e085019290925261010084019190915261012083015251908190036101400190f35b6040518083600160a060020a031681526020018281526020019250505060405180910390f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156109ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051600160a060020a039a909a168a5260208a019890985260ff968716898901526060890195909552929094166080870152151560a086015291151560c085015260e084019190915261010083015251908190036101200190f35b600754600014801590610a96575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b15610aa957600480546001019055610aaf565b60006004555b60035460045410610abf57610002565b8315610acc575060010160005b8215610ada57506001908101905b60ff8216600114610aea57610002565b610b1c6001825b600160a060020a0333166000908152600a602052604081205460ff1681146118815761188133611592565b50505050565b6002815110158015610b365750601e815111155b15610bc25780600c600050600033600160a060020a031681526020019081526020016000206000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610bc557805160ff19168380011785555b50610bbf9291505b80821115610bf55760008155600101610bab565b50505b50565b82800160010185558215610ba3579182015b82811115610ba3578251826000505591602001919060010190610bd7565b5090565b83600014158015610c10575061063754600a900484105b15610c1a57610002565b610c2261081f565b600160a060020a03331660009081526106356020526040902054841115610c4857610002565b6103e79250600091505b6106345461ffff9081169083161015610c9a57600160a060020a033316602261ffff8416610309811015610002576002020154600160a060020a03161415610cad5781925082505b8261ffff166103e71415610cb957610002565b60019190910190610c52565b610636544290602261ffff8616610309811015610002576002020160005060010154011115610ce757610002565b61063754600160a060020a0333166000908152610635602052604090205485900310801590610d17575083600014155b15610d6557600160a060020a0333166000818152610635602052604080822080548890039055601f8054889003905551869082818181858883f11515909214159250610deb91505057610002565b50600160a060020a0333166000908152610635602052604081208054601f80548290039055919055602261ffff841661030981101561000257600202016000508054600160a060020a03191681556000600191909101819055604051600160a060020a0333169190839082818181858883f1151590921415925061087691505057610002565b60408051600160a060020a03331681526020810186905281517ff3fef3a3f44f9c277339b67d54f015748bd8d6b77a985b0ab6e71126b018c34a929181900390910190a16108bb565b600054600160a060020a039081163390911614610e5057610002565b6108dc61081f565b60018160ff161080610e6d575060638160ff16115b15610e7757610002565b600160a060020a033316600090815261063960205260409020606482900360ff16905550565b600160a060020a0384811690841614610eb557610002565b83600160a060020a031660001415610ecc57610002565b506103e7905060005b6106345461ffff9081169082161015610f1c57600160a060020a038416602261ffff8316610309811015610002576002020154600160a060020a03161415610f2f57610002565b8161ffff166103e71415610f6a57610002565b600160a060020a033316602261ffff8316610309811015610002576002020154600160a060020a03161415610f62579050805b600101610ed5565b600160a060020a03338116600081815261063560205260408082208054948916835290822093909355908152905583602261ffff841661030981101561000257600202018054600160a060020a031916909117905550505050565b600054600160a060020a039081163390911614610fe157610002565b600b805460ff19166001179055565b600054600160a060020a03908116339091161461100c57610002565b600b805460ff19169055565b600054600160a060020a03908116339091161461103457610002565b60008054600160a060020a0319168217905550565b820191906000526020600020905b81548152906001019060200180831161105757829003601f168201915b50939450505050505b919050565b6007546000148015906110be575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b156110d1576004805460010190556110d7565b60006004555b600354600454106110e757610002565b83156110f4575060010160005b821561110257506001908101905b60ff821660011461111257610002565b610b1c600582610af1565b600754600014801590611159575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b1561116c57600480546001019055611172565b60006004555b6003546004541061118257610002565b60248160ff16111561119357610002565b610bc2600082610af1565b6007546000148015906111da575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b156111ed576004805460010190556111f3565b60006004555b6003546004541061120357610002565b8215611210575060010160005b831561121e57506001908101905b60ff821660011461122e57610002565b610b1c600282610af1565b600054600160a060020a03908116339091161461125557610002565b600061063a81905593505b604d8460ff16101561129757602260ff8516610309811015610002576002020154600160a060020a0316600014156112d35761130e565b600091505b604d8260ff16101561131a57602260ff8316610309811015610002576002020154600160a060020a031660001415611355576113cc565b6106356000602260ff8716610309811015610002576002020154600160a060020a03168152602091909152604090205461063a805490910190555b60019390930192611260565b61063c805460008054600160a060020a0316815261063560205260408120805492879003909201909155601f80548354019055905550505050565b61063a5461063c546106356000602260ff871661030981101561000257600202810154600160a060020a0316825260208390526040822054939093029390930493508392909160ff8616610309811015610002576002020154600160a060020a031681526040902080549290920190915550918201915b6001919091019061129c565b600054600160a060020a0390811633909116146113f457610002565b60648a101561140257610002565b60058a905560038990558787101561141957610002565b6001879055600088101561142c57610002565b60028890556106345461ffff80881691161480159061144f57506007546161a890105b1561145957610002565b6106345461ffff9081169087161080611477575061030961ffff8716115b1561148157610002565b610634805461ffff1916871790556114d8600061063a81905561063b8190555b604d8160ff161015611cf357602260ff8216610309811015610002576002020154600160a060020a031660001415611d1357611de7565b848410156114e557610002565b610637859055610638849055610636546301da9c0090111561150657610002565b6106368390556000805474ff0000000000000000000000000000000000000000191660a060020a8481029190911791829055900460ff9081166014018116908216101561155257610002565b6000805475ff000000000000000000000000000000000000000000191660a860020a83021790556115816108bf565b50505050505050505050565b610bc2815b600060006000600084600160a060020a0316600014156115b0573394505b600160a060020a0385166000908152600a602052604090205460ff16600114611def57610002565b6103e79450600092505b6106345461ffff908116908416101561166257602261ffff8416610309811015610002576002020154600160a060020a03166000141561162e5782945084505b600192909201916115e2565b600160a060020a033316602261ffff8516610309811015610002576002020154600160a060020a0316141561162257600193505b83151561167957610637543410156116a757610002565b61063854600160a060020a033316600090815261063560205260409020543498508801111561178557610002565b610638543411156116c3576106385496503487900395506116c7565b3496505b61063454604d61ffff9091161180156116e45750604d8561ffff16105b156116ee57610002565b6103e761ffff8616146117805760408051808201909152338152426020820152602261ffff8716610309811015610002576002029081018054600160a060020a031916331790554260239190910155505b600080546040516064600a8b0204998a9003999450600160a060020a03919091169190849082818181858883f1151590921415925061179991505057610002565b610002565b610637546005900434101561173f57610002565b61063454604d61ffff90911611156117c9575061063b5461063c8054606492890292909204918201905595869003955b60408051600160a060020a033316815234602082015280820189905290517f7acd04125f685c90097481d254317c7cd6b69a6c8eb0d0eb375f6a98ad2687329181900360600190a1600160a060020a033316600090815261063560205260409020805488019055601f8054880190556118406108bf565b600086111561187857604051600160a060020a03331690600090889082818181858883f1151590921415925061187891505057610002565b50505050505050565b600160a060020a0333166000908152600a60209081526040808320805460ff1916600190811790915560075460099093529220556008805490910190556118d360025460009034101561228757610002565b9050600760005080548060010182818154818355818115116119645760008390526119649060059081026000805160206128f0833981519152908101918402015b80821115610bf557805477ffffffffffffffffffffffffffffffffffffffffffffffff1916815560006001820181905560028201819055600382015560048101805460ff19169055600501611914565b5050506000928352506040805160208085206101208301845233808452918301869052928201859052606082018890526080820187905260a082018690524360c0830181905260e083018690526025610100939093018390526005949094029092018054600160a060020a03191690921776ffffff0000000000000000000000000000000000000000191660b060020a88021777ff0000000000000000000000000000000000000000000000191660b860020a87021782556001820185905560028201929092556003810192909255600491909101805460ff1916909117905534811015610bbf57604051600160a060020a03331690600090348490039082818181858883f11515909214159250610bbf91505057610002565b602054602154901115611b2357602054602154600080546040516064939094036014810293909304928390039b50919850600160a060020a039190911691889082818181858883f11515909214159250611b7491505057610002565b60008714611b0e57601f8054889003905560008054600160a060020a03168152610635602052604090208054868903900390555b600060208190556021555b5050505050505050565b6020546021540396505b600093505b6106345461ffff9081169085161015611b7957602261ffff8516610309811015610002576002020154600160a060020a031692506000831415611baf57611c25565b611b2d565b60008814611ada57601f80548901905560008054600160a060020a03168152610635602052604090208054868a03019055611b0e565b60008814611bec57601f54600160a060020a03841660009081526106356020526040902080548a8102929092049182019055948501949150611c25565b60008714611c255750601f54600160a060020a038316600090815261063560205260409020805480890292909204918290039055938401935b60019390930192611b32565b600554601f546023919091029004600655565b600754600014801590611c80575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b15611c9357600480546001019055611c99565b60006004555b60035460045410611ca957610002565b8515611cb6575060010160005b8415611cc457506001908101905b8315611cd1575060010160025b60ff8216600114611ce157610002565b611ceb8382610af1565b505050505050565b61063a54600014610bc25761063a5461063b805491909104606403905550565b6106396000602260ff8416610309811015610002576002020154600160a060020a0316815260209190915260408120541415611d4e57611de7565b6106356000602260ff841661030981101561000257600202810154600160a060020a03168252602083905261063a8054604084205401905560ff841661030981101561000257600202810154600160a060020a0316825260408220549250610639919060ff8516610309811015610002576002020154600160a060020a03168152602091909152604090205461063b8054919092020190555b6001016114a1565b600160a060020a03851660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460a060020a900460ff16151560011415611e4957610002565b600160a060020a0385166000908152600960205260409020546007805490919081101561000257600091825290546005919091026000805160206128d08339815191520154945060a060020a900460ff1684014311611ea757610002565b60005460a860020a900460ff168401431115611ece57611eed8560ff600060018180611fe9565b6000805460a060020a900460ff168501409250821415611ef457610002565b5050505050565b5060408051600160a060020a0386166c01000000000000000000000000028152601481018390529051908190036034019020602581069250611eed83868484600160a060020a0383166000908152600960205260078054604083205490811015610002579082526005026000805160206128f0833981519152015460b060020a900460ff1690811415612357576123e485858585600160a060020a03831660009081526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460ff86811660b860020a909204161415611fde575060015b611eed848683602487875b600160a060020a0386166000908152600a60209081526040808320805460ff191690556009909152600780549183205483928992919081101561000257604084206005919091027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68c01805460ff191693909317909255600160a060020a038a168352805491546001928110156100025760009182526005026000805160206128f0833981519152019050805460a060020a9290920274ff00000000000000000000000000000000000000001992909216919091179055600160a060020a038816600090815260096020526040902054600780544392908110156100025760009182526005026000805160206128f083398151915201905060030155600160a060020a03881660009081526009602052604090205460078054909190811015610002579082526005027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6890154915085156122a257600160a060020a03881660009081526009602052604090205460078054600192908110156100025760009182526005026000805160206128f0833981519152019050805460a860020a9290920275ff00000000000000000000000000000000000000000019929092169190911790555060218054600019860160ff9081168402918201909255600160a060020a038916600081815260096020908152604091829020548251938452948b1690830152818101839052606082018790526080820186905260a0820193909352915190917f2d405b4396de541fd8b7448de00c152385ac44ad14f9eb281de4262f1243a735919081900360c00190a1604051600160a060020a038916906000908385019082818181858883f1151590921415925061235291505057610002565b60065434111561229a575060065461229d565b50345b61021e565b600160a060020a03881660008181526009602090815260409182902054825193845260ff8b1691840191909152600019850183830152606083018790526080830186905260a0830152517f48156d9ccd5f1a9d70cfcbc377888e2b2b5d40f87ce4e3d83708a065a50743d99181900360c00190a1604051602080548401600019019055600160a060020a0389169060009060019082818181858883f11515909214159250611b1991505057610002565b611b19565b60028114156123ec576123e485858585600160a060020a03831660009081526009602052604081205460078054909190811015610002579082526005026000805160206128f08339815191520154600260ff87811691909106811660b860020a909204161480156123cc57508460ff16600014155b156123d5575060015b611eed84868360028787611fe9565b611eed6108bf565b600181141561250b576123e4858585856000600060005b60128260ff161015612432578660ff16600d6000508360ff16601281101561000257015414156128c457600192505b8660ff166000141580156124f35750600160a060020a038616600090815260096020526040902054600780549091908110156100025760009182526005026000805160206128f0833981519152015460b860020a900460ff161480156124955750825b806124f35750600160a060020a03861660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff1660011480156124f3575082155b156124fc575060015b61187886888360028989611fe9565b60058114156125fb576123e48585858560008460ff166000141580156123cc575060138560ff161080156125825750600160a060020a03841681526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460b860020a900460ff1681145b806123cc575060128560ff161180156123cc5750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff16600114156123d557506001611eed84868360028787611fe9565b600381141561275f576123e48585858560008460ff166000141580156127475750600d8560ff161080156126725750600160a060020a03841681526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460b860020a900460ff1681145b806126e45750600c8560ff1611801561268e575060198560ff16105b80156126e45750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166001145b80612747575060188560ff161180156127475750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166002145b15612750575060015b611eed84868360038787611fe9565b60048114156123e4576123e48585858560008460ff166000141580156127475750600160a060020a03841681526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460b860020a900460ff16811480156127dc575060038560ff160660ff166001145b806128455750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166001148015612845575060038560ff160660ff166002145b806127475750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166002148015612747575060038560ff160660ff166000141561275057506001611eed84868360038787611fe9565b6001919091019061240356a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68aa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688
Deployed Bytecode
0x606060405236156101485760e060020a60003504631c5d9faa81146101575780632037fcbf146101aa578063266710ca146101c45780632c6b2c92146101d55780632e0ef395146101e857806333ce7787146101fc578063402e623014610217578063580bdf3c146102215780635b7d47a9146102325780636ad50ed4146102545780636e1b6bcc146102705780636ed43eb01461042c578063750cae6a1461047a5780637c9cd7df1461048b57806385b4bb531461049f578063942385eb146104c5578063adaccd74146104d0578063adf54e0c1461054f578063b400d14914610570578063b738169c14610589578063bb84d362146105aa578063bcb3b5d2146105c3578063bfe8c1071461077f578063c7144269146107ac578063e548cf13146107dd578063e56c8552146107f6578063e8b5e51f1461080a578063f7ae94211461084f575b6108746108dc6001600061023c565b6040805160206004803580820135601f81018490048402850184019095528484526108749491936024939092918401919081908401838280828437509496505050505050506000341115610b2257610002565b6108746004356000600060006000341115610bf957610002565b6108746000341115610e3457610002565b6108de60205460215461063c545b909192565b6108746004356000341115610e5857610002565b610874600435602435600060006000341115610e9d57610002565b6108fc6008545b90565b6108746000341115610fc557610002565b6108746004356024355b600b54600090819060ff1660011415610a5a57610002565b6108de6106345461063b546106365461ffff90921691906101e3565b61090e600435600160a060020a0381166000908152600a602090815260408083205460099092528220546007805460ff9390931693928392839283928392839283928392839291811015610002578154600582026000805160206128f0833981519152015460b060020a900460ff169b50811015610002578154600582026000805160206128f0833981519152015460b860020a900460ff169a50811015610002578154600582027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68901549950811015610002578154600582027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68c015460ff169850811015610002578154600582026000805160206128f0833981519152015460a060020a900460ff169750811015610002578154600582026000805160206128f0833981519152015460a860020a900460ff169650811015610002578154600582026000805160206128d08339815191520154955081101561000257600581027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b01549b9d9a9c50989a979996989597949693959392505050565b61096960043560008060228361030981101561000257506106365460028502820154600160a060020a0316935090846103098110156100025790906002020160005060010154019050915091565b6108746000341115610ff057610002565b610874600435600034111561101857610002565b60005460408051600654815260a060020a90920460ff1660208301528051918290030190f35b6108fc601f5461021e565b61098f60043560408051602081810183526000808352600160a060020a0385168152600c8252835190849020805460026001821615610100026000190190911604601f810184900484028301840190955284825292939092918301828280156110745780601f1061104957610100808354040283529160200191611074565b610874600435602435600b54600090819060ff166001141561108257610002565b610874600435600b5460ff166001141561111d57610002565b610874600435602435600b54600090819060ff166001141561119e57610002565b6108746000600060006000600034111561123957610002565b6109fd60043560006000600060006000600060006000600060076000508a8154811015610002578154828452600582026000805160206128f08339815191520154600160a060020a03169b50811015610002579060005260206000209060050201600050546007805460b060020a90920460ff169950908b90811015610002579060005260206000209060050201600050546007805460b860020a90920460ff169850908b9081101561000257906000526020600020906005020160005060078054600192909201549750908b90811015610002579060005260206000209060050201600050600780546004929092015460ff169650908b90811015610002579060005260206000209060050201600050546007805460a060020a90920460ff169550908b90811015610002579060005260206000209060050201600050546007805460a860020a90920460ff169450908b908110156100025790600052602060002090600502016000506002015460078054919350908b90811015610002575050506005989098027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b01549698959794969395929491939092565b610874600435602435604435610bbf83838360035b600b54600090819060ff1660011415611c4457610002565b61087460043560243560443560643560843560a43560c43560e435610104356101243560003411156113d857610002565b610874600435602435604435610bbf8383836004610794565b610874600435600034111561158d57610002565b61087460006000600060006000600060006115d85b600060006000600060006000600060006020600050546000148015610845575060215481145b15611a7e57611b19565b6108fc600435600160a060020a0381166000908152610635602052604090205461107d565b005b60408051600160a060020a03331681526020810183905281517ff3fef3a3f44f9c277339b67d54f015748bd8d6b77a985b0ab6e71126b018c34a929181900390910190a15b610b1c5b600154600554601f54602390910290041115611c31576001546006555b565b60408051938452602084019290925282820152519081900360600190f35b60408051918252519081900360200190f35b604080519a8b5260208b019990995260ff9788168a8a015260608a019690965293909516608088015290151560a0870152151560c086015260e085019290925261010084019190915261012083015251908190036101400190f35b6040518083600160a060020a031681526020018281526020019250505060405180910390f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156109ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051600160a060020a039a909a168a5260208a019890985260ff968716898901526060890195909552929094166080870152151560a086015291151560c085015260e084019190915261010083015251908190036101200190f35b600754600014801590610a96575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b15610aa957600480546001019055610aaf565b60006004555b60035460045410610abf57610002565b8315610acc575060010160005b8215610ada57506001908101905b60ff8216600114610aea57610002565b610b1c6001825b600160a060020a0333166000908152600a602052604081205460ff1681146118815761188133611592565b50505050565b6002815110158015610b365750601e815111155b15610bc25780600c600050600033600160a060020a031681526020019081526020016000206000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610bc557805160ff19168380011785555b50610bbf9291505b80821115610bf55760008155600101610bab565b50505b50565b82800160010185558215610ba3579182015b82811115610ba3578251826000505591602001919060010190610bd7565b5090565b83600014158015610c10575061063754600a900484105b15610c1a57610002565b610c2261081f565b600160a060020a03331660009081526106356020526040902054841115610c4857610002565b6103e79250600091505b6106345461ffff9081169083161015610c9a57600160a060020a033316602261ffff8416610309811015610002576002020154600160a060020a03161415610cad5781925082505b8261ffff166103e71415610cb957610002565b60019190910190610c52565b610636544290602261ffff8616610309811015610002576002020160005060010154011115610ce757610002565b61063754600160a060020a0333166000908152610635602052604090205485900310801590610d17575083600014155b15610d6557600160a060020a0333166000818152610635602052604080822080548890039055601f8054889003905551869082818181858883f11515909214159250610deb91505057610002565b50600160a060020a0333166000908152610635602052604081208054601f80548290039055919055602261ffff841661030981101561000257600202016000508054600160a060020a03191681556000600191909101819055604051600160a060020a0333169190839082818181858883f1151590921415925061087691505057610002565b60408051600160a060020a03331681526020810186905281517ff3fef3a3f44f9c277339b67d54f015748bd8d6b77a985b0ab6e71126b018c34a929181900390910190a16108bb565b600054600160a060020a039081163390911614610e5057610002565b6108dc61081f565b60018160ff161080610e6d575060638160ff16115b15610e7757610002565b600160a060020a033316600090815261063960205260409020606482900360ff16905550565b600160a060020a0384811690841614610eb557610002565b83600160a060020a031660001415610ecc57610002565b506103e7905060005b6106345461ffff9081169082161015610f1c57600160a060020a038416602261ffff8316610309811015610002576002020154600160a060020a03161415610f2f57610002565b8161ffff166103e71415610f6a57610002565b600160a060020a033316602261ffff8316610309811015610002576002020154600160a060020a03161415610f62579050805b600101610ed5565b600160a060020a03338116600081815261063560205260408082208054948916835290822093909355908152905583602261ffff841661030981101561000257600202018054600160a060020a031916909117905550505050565b600054600160a060020a039081163390911614610fe157610002565b600b805460ff19166001179055565b600054600160a060020a03908116339091161461100c57610002565b600b805460ff19169055565b600054600160a060020a03908116339091161461103457610002565b60008054600160a060020a0319168217905550565b820191906000526020600020905b81548152906001019060200180831161105757829003601f168201915b50939450505050505b919050565b6007546000148015906110be575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b156110d1576004805460010190556110d7565b60006004555b600354600454106110e757610002565b83156110f4575060010160005b821561110257506001908101905b60ff821660011461111257610002565b610b1c600582610af1565b600754600014801590611159575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b1561116c57600480546001019055611172565b60006004555b6003546004541061118257610002565b60248160ff16111561119357610002565b610bc2600082610af1565b6007546000148015906111da575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b156111ed576004805460010190556111f3565b60006004555b6003546004541061120357610002565b8215611210575060010160005b831561121e57506001908101905b60ff821660011461122e57610002565b610b1c600282610af1565b600054600160a060020a03908116339091161461125557610002565b600061063a81905593505b604d8460ff16101561129757602260ff8516610309811015610002576002020154600160a060020a0316600014156112d35761130e565b600091505b604d8260ff16101561131a57602260ff8316610309811015610002576002020154600160a060020a031660001415611355576113cc565b6106356000602260ff8716610309811015610002576002020154600160a060020a03168152602091909152604090205461063a805490910190555b60019390930192611260565b61063c805460008054600160a060020a0316815261063560205260408120805492879003909201909155601f80548354019055905550505050565b61063a5461063c546106356000602260ff871661030981101561000257600202810154600160a060020a0316825260208390526040822054939093029390930493508392909160ff8616610309811015610002576002020154600160a060020a031681526040902080549290920190915550918201915b6001919091019061129c565b600054600160a060020a0390811633909116146113f457610002565b60648a101561140257610002565b60058a905560038990558787101561141957610002565b6001879055600088101561142c57610002565b60028890556106345461ffff80881691161480159061144f57506007546161a890105b1561145957610002565b6106345461ffff9081169087161080611477575061030961ffff8716115b1561148157610002565b610634805461ffff1916871790556114d8600061063a81905561063b8190555b604d8160ff161015611cf357602260ff8216610309811015610002576002020154600160a060020a031660001415611d1357611de7565b848410156114e557610002565b610637859055610638849055610636546301da9c0090111561150657610002565b6106368390556000805474ff0000000000000000000000000000000000000000191660a060020a8481029190911791829055900460ff9081166014018116908216101561155257610002565b6000805475ff000000000000000000000000000000000000000000191660a860020a83021790556115816108bf565b50505050505050505050565b610bc2815b600060006000600084600160a060020a0316600014156115b0573394505b600160a060020a0385166000908152600a602052604090205460ff16600114611def57610002565b6103e79450600092505b6106345461ffff908116908416101561166257602261ffff8416610309811015610002576002020154600160a060020a03166000141561162e5782945084505b600192909201916115e2565b600160a060020a033316602261ffff8516610309811015610002576002020154600160a060020a0316141561162257600193505b83151561167957610637543410156116a757610002565b61063854600160a060020a033316600090815261063560205260409020543498508801111561178557610002565b610638543411156116c3576106385496503487900395506116c7565b3496505b61063454604d61ffff9091161180156116e45750604d8561ffff16105b156116ee57610002565b6103e761ffff8616146117805760408051808201909152338152426020820152602261ffff8716610309811015610002576002029081018054600160a060020a031916331790554260239190910155505b600080546040516064600a8b0204998a9003999450600160a060020a03919091169190849082818181858883f1151590921415925061179991505057610002565b610002565b610637546005900434101561173f57610002565b61063454604d61ffff90911611156117c9575061063b5461063c8054606492890292909204918201905595869003955b60408051600160a060020a033316815234602082015280820189905290517f7acd04125f685c90097481d254317c7cd6b69a6c8eb0d0eb375f6a98ad2687329181900360600190a1600160a060020a033316600090815261063560205260409020805488019055601f8054880190556118406108bf565b600086111561187857604051600160a060020a03331690600090889082818181858883f1151590921415925061187891505057610002565b50505050505050565b600160a060020a0333166000908152600a60209081526040808320805460ff1916600190811790915560075460099093529220556008805490910190556118d360025460009034101561228757610002565b9050600760005080548060010182818154818355818115116119645760008390526119649060059081026000805160206128f0833981519152908101918402015b80821115610bf557805477ffffffffffffffffffffffffffffffffffffffffffffffff1916815560006001820181905560028201819055600382015560048101805460ff19169055600501611914565b5050506000928352506040805160208085206101208301845233808452918301869052928201859052606082018890526080820187905260a082018690524360c0830181905260e083018690526025610100939093018390526005949094029092018054600160a060020a03191690921776ffffff0000000000000000000000000000000000000000191660b060020a88021777ff0000000000000000000000000000000000000000000000191660b860020a87021782556001820185905560028201929092556003810192909255600491909101805460ff1916909117905534811015610bbf57604051600160a060020a03331690600090348490039082818181858883f11515909214159250610bbf91505057610002565b602054602154901115611b2357602054602154600080546040516064939094036014810293909304928390039b50919850600160a060020a039190911691889082818181858883f11515909214159250611b7491505057610002565b60008714611b0e57601f8054889003905560008054600160a060020a03168152610635602052604090208054868903900390555b600060208190556021555b5050505050505050565b6020546021540396505b600093505b6106345461ffff9081169085161015611b7957602261ffff8516610309811015610002576002020154600160a060020a031692506000831415611baf57611c25565b611b2d565b60008814611ada57601f80548901905560008054600160a060020a03168152610635602052604090208054868a03019055611b0e565b60008814611bec57601f54600160a060020a03841660009081526106356020526040902080548a8102929092049182019055948501949150611c25565b60008714611c255750601f54600160a060020a038316600090815261063560205260409020805480890292909204918290039055938401935b60019390930192611b32565b600554601f546023919091029004600655565b600754600014801590611c80575060078054600019810190811015610002576000919091526005026000805160206128d0833981519152015443145b15611c9357600480546001019055611c99565b60006004555b60035460045410611ca957610002565b8515611cb6575060010160005b8415611cc457506001908101905b8315611cd1575060010160025b60ff8216600114611ce157610002565b611ceb8382610af1565b505050505050565b61063a54600014610bc25761063a5461063b805491909104606403905550565b6106396000602260ff8416610309811015610002576002020154600160a060020a0316815260209190915260408120541415611d4e57611de7565b6106356000602260ff841661030981101561000257600202810154600160a060020a03168252602083905261063a8054604084205401905560ff841661030981101561000257600202810154600160a060020a0316825260408220549250610639919060ff8516610309811015610002576002020154600160a060020a03168152602091909152604090205461063b8054919092020190555b6001016114a1565b600160a060020a03851660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460a060020a900460ff16151560011415611e4957610002565b600160a060020a0385166000908152600960205260409020546007805490919081101561000257600091825290546005919091026000805160206128d08339815191520154945060a060020a900460ff1684014311611ea757610002565b60005460a860020a900460ff168401431115611ece57611eed8560ff600060018180611fe9565b6000805460a060020a900460ff168501409250821415611ef457610002565b5050505050565b5060408051600160a060020a0386166c01000000000000000000000000028152601481018390529051908190036034019020602581069250611eed83868484600160a060020a0383166000908152600960205260078054604083205490811015610002579082526005026000805160206128f0833981519152015460b060020a900460ff1690811415612357576123e485858585600160a060020a03831660009081526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460ff86811660b860020a909204161415611fde575060015b611eed848683602487875b600160a060020a0386166000908152600a60209081526040808320805460ff191690556009909152600780549183205483928992919081101561000257604084206005919091027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68c01805460ff191693909317909255600160a060020a038a168352805491546001928110156100025760009182526005026000805160206128f0833981519152019050805460a060020a9290920274ff00000000000000000000000000000000000000001992909216919091179055600160a060020a038816600090815260096020526040902054600780544392908110156100025760009182526005026000805160206128f083398151915201905060030155600160a060020a03881660009081526009602052604090205460078054909190811015610002579082526005027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6890154915085156122a257600160a060020a03881660009081526009602052604090205460078054600192908110156100025760009182526005026000805160206128f0833981519152019050805460a860020a9290920275ff00000000000000000000000000000000000000000019929092169190911790555060218054600019860160ff9081168402918201909255600160a060020a038916600081815260096020908152604091829020548251938452948b1690830152818101839052606082018790526080820186905260a0820193909352915190917f2d405b4396de541fd8b7448de00c152385ac44ad14f9eb281de4262f1243a735919081900360c00190a1604051600160a060020a038916906000908385019082818181858883f1151590921415925061235291505057610002565b60065434111561229a575060065461229d565b50345b61021e565b600160a060020a03881660008181526009602090815260409182902054825193845260ff8b1691840191909152600019850183830152606083018790526080830186905260a0830152517f48156d9ccd5f1a9d70cfcbc377888e2b2b5d40f87ce4e3d83708a065a50743d99181900360c00190a1604051602080548401600019019055600160a060020a0389169060009060019082818181858883f11515909214159250611b1991505057610002565b611b19565b60028114156123ec576123e485858585600160a060020a03831660009081526009602052604081205460078054909190811015610002579082526005026000805160206128f08339815191520154600260ff87811691909106811660b860020a909204161480156123cc57508460ff16600014155b156123d5575060015b611eed84868360028787611fe9565b611eed6108bf565b600181141561250b576123e4858585856000600060005b60128260ff161015612432578660ff16600d6000508360ff16601281101561000257015414156128c457600192505b8660ff166000141580156124f35750600160a060020a038616600090815260096020526040902054600780549091908110156100025760009182526005026000805160206128f0833981519152015460b860020a900460ff161480156124955750825b806124f35750600160a060020a03861660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff1660011480156124f3575082155b156124fc575060015b61187886888360028989611fe9565b60058114156125fb576123e48585858560008460ff166000141580156123cc575060138560ff161080156125825750600160a060020a03841681526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460b860020a900460ff1681145b806123cc575060128560ff161180156123cc5750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff16600114156123d557506001611eed84868360028787611fe9565b600381141561275f576123e48585858560008460ff166000141580156127475750600d8560ff161080156126725750600160a060020a03841681526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460b860020a900460ff1681145b806126e45750600c8560ff1611801561268e575060198560ff16105b80156126e45750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166001145b80612747575060188560ff161180156127475750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166002145b15612750575060015b611eed84868360038787611fe9565b60048114156123e4576123e48585858560008460ff166000141580156127475750600160a060020a03841681526009602052604081205460078054909190811015610002579082526005026000805160206128f0833981519152015460b860020a900460ff16811480156127dc575060038560ff160660ff166001145b806128455750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166001148015612845575060038560ff160660ff166002145b806127475750600160a060020a03841660009081526009602052604090205460078054909190811015610002576000919091526005026000805160206128f0833981519152015460b860020a900460ff166002148015612747575060038560ff160660ff166000141561275057506001611eed84868360038787611fe9565b6001919091019061240356a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68aa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688
Loading...
Loading
Loading...
Loading
Net Worth in USD
$179,797.75
Net Worth in ETH
91.044621
Token Allocations
ETH
99.98%
OMG
0.02%
XDATA
0.00%
Multichain Portfolio | 34 Chains
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.