Address Contract Partially Verified
Address
0x14bca0EBca13e974A4316b7C022C8229e3d2E57F
Balance
0.003829 ETH
Nonce
1
Code Size
9602 bytes
Creator
0xD3Da71Fc...2311 at tx 0x29e66c18...b6e3f1
Indexed Transactions
0
Contract Bytecode
9602 bytes
0x6060604052600436106101f85763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630142f9048114610202578063036a66eb1461023057806306fdde031461024f578063095ea7b3146102d9578063104bff921461030f578063133369c61461036a578063161fc5b3146103ab57806318160ddd146103cc5780631fd86a6a146103df57806323b872dd146103f5578063313ce5671461041d57806333ad94951461044657806333f8845d146104595780633a70eabd1461046c57806349e9cee91461048b5780634bc3df811461049e5780634deb9f47146104a957806356a4e7f9146104c2578063664b885e146104ed578063669d8dff146105095780636e4dd931146105285780636f3165d31461055f57806370a082311461057b5780637bb866c11461059a5780638357417d146105ad57806387b57fa7146105c057806395d89b4114610647578063996f76021461065a5780639f0eed0f1461066d578063a9059cbb14610680578063b4beff8a146106a2578063b99371a0146106c4578063cb68780f146106da578063cc0f65f7146106f0578063d291fa811461074d578063d511beec1461077f578063dd62ed3e14610792578063dee8bd51146107b7578063e0d3558e146107ca578063f7e3c068146107e0578063fec1c41f146107f3575b6003805434019055005b341561020d57600080fd5b61021e60043560243560443561081b565b60405190815260200160405180910390f35b341561023b57600080fd5b61021e600160a060020a0360043516610876565b341561025a57600080fd5b610262610951565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561029e578082015183820152602001610286565b50505050905090810190601f1680156102cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102e457600080fd5b6102fb600160a060020a0360043516602435610988565b604051901515815260200160405180910390f35b341561031a57600080fd5b610331600160a060020a0360043516602435610a1a565b604051808261014080838360005b8381101561035757808201518382015260200161033f565b5050505090500191505060405180910390f35b341561037557600080fd5b610380600435610b2f565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b34156103b657600080fd5b6103ca600160a060020a0360043516610b73565b005b34156103d757600080fd5b61021e610cc4565b34156103ea57600080fd5b6103ca600435610ccb565b341561040057600080fd5b6102fb600160a060020a0360043581169060243516604435610df8565b341561042857600080fd5b610430610f62565b60405160ff909116815260200160405180910390f35b341561045157600080fd5b6103ca610f67565b341561046457600080fd5b61021e610fe6565b341561047757600080fd5b61021e600160a060020a0360043516610fec565b341561049657600080fd5b61021e6110f6565b6103ca6004356110fc565b34156104b457600080fd5b6103ca60ff600435166113cc565b34156104cd57600080fd5b6104d56114eb565b60405191825260208201526040908101905180910390f35b34156104f857600080fd5b6103ca600435602435604435611551565b341561051457600080fd5b6103ca6004356024356044356064356115e1565b341561053357600080fd5b61053b611678565b60405180848152602001838152602001828152602001935050505060405180910390f35b341561056a57600080fd5b6103ca60ff60043516602435611688565b341561058657600080fd5b61021e600160a060020a03600435166117c5565b34156105a557600080fd5b61021e6117e3565b34156105b857600080fd5b6103ca6117e9565b34156105cb57600080fd5b6105e2600160a060020a036004351660243561183f565b604051808361014080838360005b838110156106085780820151838201526020016105f0565b5050505090500182600a60200280838360005b8381101561063357808201518382015260200161061b565b505050509050019250505060405180910390f35b341561065257600080fd5b610262611942565b341561066557600080fd5b61021e611979565b341561067857600080fd5b61021e61197f565b341561068b57600080fd5b6102fb600160a060020a0360043516602435611985565b34156106ad57600080fd5b61053b600160a060020a0360043516602435611a78565b34156106cf57600080fd5b61053b600435611b9c565b34156106e557600080fd5b6104d5600435611bdc565b34156106fb57600080fd5b61070f600160a060020a0360043516611c45565b60405196875260208701959095526040808701949094526060860192909252608085015260a084015260c083019190915260e0909101905180910390f35b341561075857600080fd5b610763600435611cd4565b604051600160a060020a03909116815260200160405180910390f35b341561078a57600080fd5b6103ca611d01565b341561079d57600080fd5b61021e600160a060020a0360043581169060243516611e27565b34156107c257600080fd5b6103ca611e52565b34156107d557600080fd5b61070f600435611f41565b34156107eb57600080fd5b6103ca611fa6565b34156107fe57600080fd5b6103ca60043560243560443560643560843560a43560c43561212c565b600154600090841061082f5750600061086f565b82151561085257506000838152602081905260409020600281015490540261086f565b60008481526020819052604090205461086c9084846122a1565b90505b9392505050565b600160a060020a0381166000908152600d60209081526040808320600019845260028101909252822054825b6001548160ff16101561091f5760ff811660009081526020849052604081205411156109125760ff81166000908152600180850160209081526040808420548783528185205460028901845282862054938690529190942090920154850101026064909101029390930192610917565b61091f565b6001016108a2565b60001960009081526001840160205260409020546008840154620f424091606491820191010285020495945050505050565b60408051908101604052600b81527f5269675761727349646c65000000000000000000000000000000000000000000602082015281565b600160a060020a0333166000908152600d60205260408120600301548211156109b057600080fd5b600160a060020a03338116600081815260116020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b610a22612422565b600080600060095485101515610a3757600080fd5b600092505b600a83108015610a4f5750600954858401105b15610af7578285016000908152600a6020819052604082209350859085908110610a7557fe5b60ff90921660209290920201525060005b8160050154811015610aec5785600160a060020a03168260070182815481101515610aad57fe5b600091825260209091200154600160a060020a03161415610ae45760018484600a8110610ad657fe5b60ff90921660209290920201525b600101610a86565b826001019250610a3c565b600a831015610b265760008484600a8110610b0e57fe5b60ff9092166020929092020152600190920191610af7565b50505092915050565b60008060008060015485101515610b4557600080fd5b5050506000918252506020818152604080832080546001820154600290920154601590945291909320549093565b600160a060020a0333166000908152600d602052604090206004015415610b9957600080fd5b33600160a060020a031681600160a060020a031614151515610bba57600080fd5b600160a060020a033381166000818152600d6020908152604080832042600482015560085460068201558380528252808320600190819055600f80548552600e9093529220805473ffffffffffffffffffffffffffffffffffffffff19169093179092558154019055601054828216911614801590610c415750600160a060020a03811615155b8015610c675750600160a060020a0381166000908152600d602052604090206004015415155b15610cc15733600160a060020a039081166000908152601360209081526040808320805473ffffffffffffffffffffffffffffffffffffffff191694861694909417909355600d8152828220828052905220805460090190555b50565b6012545b90565b600160a060020a0333166000908152600d60205260408120600401541515610cf257600080fd5b60008211610cff57600080fd5b5033600160a060020a0381166000908152600d6020526040902090610d239061233c565b600381015482901015610d3557600080fd5b6003810154610d4a908363ffffffff6123d816565b600382015560085460078054610d7d928592918110610d6557fe5b6000918252602090912001549063ffffffff6123ed16565b6007600854815481101515610d8e57fe5b6000918252602080832090910192909255600160a060020a033316815260058252604080822060085483529092522054610dce908363ffffffff6123ed16565b600160a060020a033316600090815260056020908152604080832060085484529091529020555050565b600160a060020a038084166000908152601160209081526040808320339094168352929052908120548211801590610e385750610e34846117c5565b8211155b1515610e4357600080fd5b600160a060020a0384166000908152600d6020526040902060030154610e6f908363ffffffff6123d816565b600160a060020a038086166000908152600d60205260408082206003908101949094559186168152200154610eaa908363ffffffff6123ed16565b600160a060020a038085166000908152600d6020908152604080832060030194909455878316825260118152838220339093168252919091522054610ef5908363ffffffff6123d816565b600160a060020a03808616600081815260116020908152604080832033861684529091529081902093909355908516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b600881565b600160a060020a0333166000908152600d602052604081206005810154909190819011610f9357600080fd5b60048201541515610fa357600080fd5b506005810180546000909155600160a060020a03331681156108fc0282604051600060405180830381858888f1935050505015610fe257600060058301555b5050565b60015490565b600160a060020a0381166000908152600d60205260408120600481015482908190151561101857600080fd5b6008546006840154111561102b57600080fd5b50506006810154600854601e82820311156110465750601e81015b600093505b6008548210156110ee57600160a060020a033316600090815260056020908152604080832085845290915281205411156110e357600780548390811061108d57fe5b6000918252602080832090910154600160a060020a033316835260058252604080842086855290925291205460068054859081106110c757fe5b906000526020600020900154028115156110dd57fe5b04840193505b81600101915061104b565b505050919050565b600b5490565b600160a060020a0333166000908152600d60205260408120600401548190819081908190151561112b57600080fd5b600954861061113957600080fd5b60008681526016602052604090205442901061115457600080fd5b6000868152600a60205260409020600381015490955034101561117657600080fd5b600093505b84600501548410156111cd5733600160a060020a031685600701858154811015156111a257fe5b600091825260209091200154600160a060020a031614156111c257600080fd5b83600101935061117b565b8460070185600601548154811015156111e257fe5b600091825260208083209190910154600160a060020a03908116808452600d90925260408084203392831685529320600584018054600a346009810291909104909101909155600280546014909204918201905560038054909101815560048a0154908a018054606492810292909204909101905591955091935091506112689061233c565b6112718361233c565b3385600701866006015481548110151561128757fe5b6000918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039490941693909317909255600187015487548252600285019092526040902054106112ff5760018501548554600090815260028401602052604090208054919091039055611313565b845460009081526002830160205260408120555b600285015485546000908152600184016020526040902054106113545760028501548554600090815260018401602052604090208054919091039055611368565b845460009081526001830160205260408120555b60018086015486546000908152600280850160209081526040808420805490950190945590890154895483528585019091529190208054909101905560068601805490910190819055600586015490106113c457600060068601555b505050505050565b6000806001548360ff161015156113e257600080fd5b600060ff8416116113f257600080fd5b60ff831660009081526015602052604090205442901061141157600080fd5b600160a060020a0333166000908152600d6020526040902060040154151561143857600080fd5b600160a060020a0333166000908152600d6020908152604080832060ff8716845291829052909120549092501561146e57600080fd5b60ff6000198401166000908152602083905260408120541161148f57600080fd5b6114983361233c565b5060ff82166000908152602081905260409020600281015490546003830154910290819010156114c757600080fd5b60ff9092166000908152602082905260409020600190556003018054919091039055565b60008080805b600f5482101561154b57506000818152600e6020818152604080842054600160a060020a0316808552600d835290842060038101549486905292909152949091019361153c90610876565b830192508160010191506114f1565b50509091565b60105433600160a060020a0390811691161461156c57600080fd5b600b5483111561157b57600080fd5b600b548310156115a0576000838152601460205260409020544290116115a057600080fd5b6000838152601460209081526040808320611c2042019055600c9091529020828155600101819055600b548314156115dc57600b805460010190555b505050565b60105433600160a060020a039081169116146115fc57600080fd5b60015484111561160b57600080fd5b6001548410156116305760008481526015602052604090205442901161163057600080fd5b6000848152601560209081526040808320611c204201905590829052902083815560018082018490556002909101829055548414156116725760018054810190555b50505050565b6002546003546004549192909190565b6000806001548460ff1610151561169e57600080fd5b600083116116ab57600080fd5b6102008311156116ba57600080fd5b60ff84166000908152601560205260409020544290106116d957600080fd5b600160a060020a0333166000908152600d6020526040902060040154151561170057600080fd5b600160a060020a0333166000908152600d6020908152604080832060ff88168452918290528220549093501161173557600080fd5b60ff84166000908152602083905260409020548301610200101561175857600080fd5b6117613361233c565b60ff84166000908152602081815260408083205491859052909120546117889190856122a1565b90508082600301541015151561179d57600080fd5b60ff909316600090815260208290526040902080549092019091556003018054919091039055565b600160a060020a03166000908152600d602052604090206003015490565b60095490565b60105433600160a060020a0390811691161461180457600080fd5b601054600354600160a060020a039091169080156108fc0290604051600060405180830381858888f193505050501561183d5760006003555b565b61184761244b565b61184f61244b565b600160a060020a0384166000908152600d6020526040902083905b84600a018210801561187d575060015482105b1561193957600160a060020a0386166000908152600d602090815260408083208584529091529020548483600a81106118b257fe5b6020908102919091019190915260001960008181526001808501845260408083205460088701548885528285205460028901885283862054968652838620548a8752978690529290942090920154620f4240950190930160649384019284019290920292019190910202048383600a811061192957fe5b602002015260019091019061186a565b50509250929050565b60408051908101604052600381527f5249470000000000000000000000000000000000000000000000000000000000602082015281565b600f5490565b60085490565b600160a060020a0333166000908152600d60205260408120600301548211156119ad57600080fd5b600160a060020a0333166000908152600d60205260409020600301546119d9908363ffffffff6123d816565b600160a060020a033381166000908152600d60205260408082206003908101949094559186168152200154611a14908363ffffffff6123ed16565b600160a060020a038085166000818152600d602052604090819020600301939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b60008060006008548411151515611a8e57600080fd5b600160a060020a0385166000908152600560209081526040808320878452909152902054600854909350841015611b25576007805485908110611acd57fe5b6000918252602080832090910154600160a060020a03881683526005825260408084208885529092529120546006805487908110611b0757fe5b90600052602060002090015402811515611b1d57fe5b049150611b77565b6007805485908110611b3357fe5b6000918252602080832090910154600160a060020a03881683526005808352604080852089865290935291909220546002549091900402811515611b7357fe5b0491505b50600160a060020a039093166000908152600d60205260409020600601549093909150565b6000806000600b5484101515611bb157600080fd5b5050506000908152600c60209081526040808320805460019091015460149093529220549192909190565b6000806008548311151515611bf057600080fd5b6007805484908110611bfe57fe5b9060005260206000209001549150600854831015611c37576006805484908110611c2457fe5b9060005260206000209001549050611c40565b50600254600590045b915091565b600160a060020a0381166000908152600d602052604081206003810154600490910154909180808080611c7788610876565b600160a060020a03989098166000818152600d602081815260408084206005810154600019865260028201845282862054600183018552928620549690955292909152600790910154999b989a9991989097509195509350915050565b600f546000908210611ce557600080fd5b506000908152600e6020526040902054600160a060020a031690565b600160a060020a0333166000908152600d60205260408120600481015490919081901515611d2e57600080fd5b600854600160a060020a0333166000908152600d602052604090206006015410611d5757600080fd5b50506006810154600854601e8282031115611d725750601e81015b600683018190555b6008548210156115dc57600160a060020a03331660009081526005602090815260408083208584529091528120541115611e1c576007805483908110611dbc57fe5b6000918252602080832090910154600160a060020a03331683526005825260408084208685529092529120546006805485908110611df657fe5b90600052602060002090015402811515611e0c57fe5b6005850180549290910490910190555b816001019150611d7a565b600160a060020a03918216600090815260116020908152604080832093909416825291909152205490565b600160a060020a0333166000908152600d60205260409020600401541515611e7957600080fd5b60045442901115611e8957600080fd5b60025460009011611e9957600080fd5b60006007600854815481101515611eac57fe5b60009182526020909120015411611ec257600080fd5b6201518042016004908155600254046006600854815481101515611ee257fe5b6000918252602090912001556002805460048104900390556006805460018101611f0c8382612473565b5060009182526020822001556007805460018101611f2a8382612473565b506000918252602082200155600880546001019055565b600080600080600080600060095488101515611f5c57600080fd5b50505060009485525050600a602090815260408085208054600182015460028301546003840154600485015460059095015460169097529490982054919890979650929450909291565b600160a060020a0333166000908152600d602052604081206004015481901515611fcf57600080fd5b6007820154600090815260146020526040902054429010611fef57600080fd5b600160a060020a0333166000908152600d60205260409020600b546007820154919350901061201d57600080fd5b6120263361233c565b60078201546000908152600c60205260409020546003830154101561204a57600080fd5b600160a060020a0333811660009081526013602052604090205416156120b15760078201546000908152600c6020908152604080832054600160a060020a0333811685526013845282852054168452600d9092529091206003018054600290920490910190555b5060005b6001548110156120f65760008181526020839052604090205460019011156120ee57600081815260208390526040902080546002900490555b6001016120b5565b50600060038201819055600782018054808352600c60205260409092206001908101546008909401805490940190935591019055565b60105460009033600160a060020a0390811691161461214a57600080fd5b60095488111561215957600080fd5b60095488101561217e5760008881526016602052604090205442901161217e57600080fd5b6000888152601660209081526040808320611c2042019055600a9091528082208981556001810189905560028101889055600381018790556004810186905560058101859055600601919091558290518059106121d85750595b90808252806020026020018201604052506000898152600a6020526040902060070190805161220b929160200190612497565b50600090505b81811015612283576010546000898152600a602052604090206007018054600160a060020a03909216918390811061224557fe5b6000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055600101612211565b600954881415612297576009805460010190555b5050505050505050565b60008080808085116122b257600080fd5b5060059150508084048385018290046122df600283810a8902850290600185850301900a600019016123fd565b935061230683878115156122ef57fe5b068360020a890202856123d890919063ffffffff16565b93506123318386880181151561231857fe5b0684038260020a890202856123d890919063ffffffff16565b979650505050505050565b600160a060020a0381166000908152600d602052604081206004015481908190421161236757600080fd5b600160a060020a0384166000908152600d60205260409020600401541561167257600160a060020a0384166000908152600d602052604090206004810154909350420391506123b584610876565b426004850155905060008111156116725760039290920180549190920201905550565b6000828211156123e757600080fd5b50900390565b81810182811015610a1457600080fd5b818102821580612417575081838281151561241457fe5b04145b1515610a1457600080fd5b610140604051908101604052600a815b6000815260001990910190602001816124325790505090565b610140604051908101604052600a815b600081526020019060019003908161245b5790505090565b8154818355818115116115dc576000838152602090206115dc91810190830161250b565b8280548282559060005260206000209081019282156124fb579160200282015b828111156124fb578251825473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178255602092909201916001909101906124b7565b50612507929150612525565b5090565b610cc891905b808211156125075760008155600101612511565b610cc891905b8082111561250757805473ffffffffffffffffffffffffffffffffffffffff1916815560010161252b5600a165627a7a72305820a665de75b7d6c0db0cc2d7d63edb5fcdb5f7ff0aa414ba7f976ca73884f87ab30029
Verified Source Code Partial Match
Compiler: v0.4.21+commit.dfe3193c
EVM: byzantium
Optimization: Yes (200 runs)
RigIdle.sol 785 lines
pragma solidity ^0.4.18;
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
require(c >= a);
}
function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {
require(b <= a);
c = a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a * b;
require(a == 0 || c / a == b);
}
}
library GeometricSequence
{
using SafeMath for uint256;
function sumOfNGeom(uint256 basePrice, uint256 owned, uint256 count) internal pure returns (uint256 price)
{
require(count > 0);
uint256 multiplier = 5;
uint256 basePower = owned / multiplier;
uint256 endPower = (owned + count) / multiplier;
price = (basePrice * (2**basePower) * multiplier).mul((2**((endPower-basePower)+1))-1);
price = price.sub((basePrice * 2**basePower) * (owned % multiplier));
price = price.sub((basePrice * 2**endPower) * (multiplier - ((owned + count) % multiplier)));
}
}
contract ERC20 {
function totalSupply() public constant returns (uint);
function balanceOf(address tokenOwner) public constant returns (uint balance);
function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
function transfer(address to, uint tokens) public returns (bool success);
function approve(address spender, uint tokens) public returns (bool success);
function transferFrom(address from, address to, uint tokens) public returns (bool success);
event Transfer(address indexed from, address indexed to, uint tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}
//-----------------------------------------------------------------------
contract RigIdle is ERC20 {
using GeometricSequence for uint;
using SafeMath for uint;
struct MinerData
{
// rigs and their upgrades
mapping(uint256=>uint256) rigCount;
mapping(int256=>uint256) rigPctBonus;
mapping(int256=>uint256) rigFlatBonus;
uint256 money;
uint256 lastUpdateTime;
uint256 unclaimedPot;
uint256 lastPotClaimIndex;
uint256 prestigeLevel;
uint256 prestigeBonusPct;
}
struct BoostData
{
int256 rigIndex;
uint256 flatBonus;
uint256 percentBonus;
uint256 priceInWEI;
uint256 priceIncreasePct;
uint256 totalCount;
uint256 currentIndex;
address[] boostHolders;
}
struct RigData
{
uint256 basePrice;
uint256 baseOutput;
uint256 unlockMultiplier;
}
struct PrestigeData
{
uint256 price;
uint256 productionBonusPct;
}
mapping(uint256=>RigData) private rigData;
uint256 private numberOfRigs;
// honey pot variables
uint256 private honeyPotAmount;
uint256 private devFund;
uint256 private nextPotDistributionTime;
mapping(address => mapping(uint256 => uint256)) private minerICOPerCycle;
uint256[] private honeyPotPerCycle;
uint256[] private globalICOPerCycle;
uint256 private cycleCount;
//booster info
uint256 private numberOfBoosts;
mapping(uint256=>BoostData) private boostData;
//prestige info
uint256 private maxPrestige;
mapping(uint256=>PrestigeData) prestigeData;
// miner info
mapping(address => MinerData) private miners;
mapping(uint256 => address) private indexes;
uint256 private topindex;
address private owner;
// ERC20 functionality
mapping(address => mapping(address => uint256)) private allowed;
string public constant name = "RigWarsIdle";
string public constant symbol = "RIG";
uint8 public constant decimals = 8;
uint256 private estimatedSupply;
// referral
mapping(address=>address) referrals;
// Data Store Management
mapping(uint256=>uint256) private prestigeFinalizeTime;
mapping(uint256=>uint256) private rigFinalizeTime;
mapping(uint256=>uint256) private boostFinalizeTime;
// ------------------------------------------------------------------------
// Constructor
// ------------------------------------------------------------------------
function RigIdle() public {
owner = msg.sender;
// price, prod. unlockMultiplier
rigData[0] = RigData(32, 1, 1);
rigData[1] = RigData(256, 4, 1);
rigData[2] = RigData(25600, 64, 2);
rigData[3] = RigData(512000, 512, 1);
rigData[4] = RigData(10240000, 8192, 4);
rigData[5] = RigData(3000000000, 50000, 8);
rigData[6] = RigData(75000000000, 250000, 10);
rigData[7] = RigData(2500000000000, 1500000, 1);
numberOfRigs = 8;
topindex = 0;
honeyPotAmount = 0;
devFund = 0;
nextPotDistributionTime = block.timestamp;
miners[msg.sender].lastUpdateTime = block.timestamp;
miners[msg.sender].rigCount[0] = 1;
indexes[topindex] = msg.sender;
++topindex;
boostData[0] = BoostData(-1, 0, 100, 0.1 ether, 5, 5, 0, new address[](5));
boostData[0].boostHolders[0] = 0xD3Da71Fc2B8fd4b100b420063a0d8eaBA98B2311;
boostData[0].boostHolders[1] = 0xD3Da71Fc2B8fd4b100b420063a0d8eaBA98B2311;
boostData[0].boostHolders[2] = 0xD3Da71Fc2B8fd4b100b420063a0d8eaBA98B2311;
boostData[0].boostHolders[3] = 0xD3Da71Fc2B8fd4b100b420063a0d8eaBA98B2311;
boostData[0].boostHolders[4] = 0xD3Da71Fc2B8fd4b100b420063a0d8eaBA98B2311;
numberOfBoosts = 1;
prestigeData[0] = PrestigeData(25000, 100); // before lvl 3
prestigeData[1] = PrestigeData(25000000, 200); // befroe lvl 5 ~30min with 30k prod
prestigeData[2] = PrestigeData(20000000000, 400); // befroe lvl 7 ~6h with 25-30 lvl6 rig
maxPrestige = 3;
honeyPotPerCycle.push(0);
globalICOPerCycle.push(1);
cycleCount = 0;
estimatedSupply = 1000000000000000000000000000;
}
//--------------------------------------------------------------------------
// Data access functions
//--------------------------------------------------------------------------
function GetTotalMinerCount() public constant returns (uint256 count)
{
count = topindex;
}
function GetMinerAt(uint256 idx) public constant returns (address minerAddr)
{
require(idx < topindex);
minerAddr = indexes[idx];
}
function GetProductionPerSecond(address minerAddr) public constant returns (uint256 personalProduction)
{
MinerData storage m = miners[minerAddr];
personalProduction = 0;
uint256 productionSpeedFlat = m.rigFlatBonus[-1];
for(uint8 j = 0; j < numberOfRigs; ++j)
{
if(m.rigCount[j] > 0)
personalProduction += (rigData[j].baseOutput + productionSpeedFlat + m.rigFlatBonus[j]) * m.rigCount[j] * (100 + m.rigPctBonus[j]);
else
break;
}
personalProduction = (personalProduction * ((100 + m.prestigeBonusPct) * (100 + m.rigPctBonus[-1]))) / 1000000;
}
function GetMinerData(address minerAddr) public constant returns
(uint256 money, uint256 lastupdate, uint256 prodPerSec,
uint256 unclaimedPot, uint256 globalFlat, uint256 globalPct, uint256 prestigeLevel)
{
money = miners[minerAddr].money;
lastupdate = miners[minerAddr].lastUpdateTime;
prodPerSec = GetProductionPerSecond(minerAddr);
unclaimedPot = miners[minerAddr].unclaimedPot;
globalFlat = miners[minerAddr].rigFlatBonus[-1];
globalPct = miners[minerAddr].rigPctBonus[-1];
prestigeLevel = miners[minerAddr].prestigeLevel;
}
function GetMinerRigsCount(address minerAddr, uint256 startIdx) public constant returns (uint256[10] rigs, uint256[10] totalProduction)
{
uint256 i = startIdx;
MinerData storage m = miners[minerAddr];
for(i = startIdx; i < (startIdx+10) && i < numberOfRigs; ++i)
{
rigs[i] = miners[minerAddr].rigCount[i];
totalProduction[i] = (rigData[i].baseOutput + m.rigFlatBonus[-1] + m.rigFlatBonus[int256(i)]) * ((100 + m.rigPctBonus[int256(i)]) *
(100 + m.prestigeBonusPct) * (100 + m.rigPctBonus[-1])) / 1000000;
}
}
function GetTotalRigCount() public constant returns (uint256)
{
return numberOfRigs;
}
function GetRigData(uint256 idx) public constant returns (uint256 _basePrice, uint256 _baseOutput, uint256 _unlockMultiplier, uint256 _lockTime)
{
require(idx < numberOfRigs);
_basePrice = rigData[idx].basePrice;
_baseOutput = rigData[idx].baseOutput;
_unlockMultiplier = rigData[idx].unlockMultiplier;
_lockTime = rigFinalizeTime[idx];
}
function CalculatePriceofRigs(uint256 idx, uint256 owned, uint256 count) public constant returns (uint256)
{
if(idx >= numberOfRigs)
return 0;
if(owned == 0)
return (rigData[idx].basePrice * rigData[idx].unlockMultiplier);
return GeometricSequence.sumOfNGeom(rigData[idx].basePrice, owned, count);
}
function GetMaxPrestigeLevel() public constant returns (uint256)
{
return maxPrestige;
}
function GetPrestigeInfo(uint256 idx) public constant returns (uint256 price, uint256 bonusPct, uint256 _lockTime)
{
require(idx < maxPrestige);
price = prestigeData[idx].price;
bonusPct = prestigeData[idx].productionBonusPct;
_lockTime = prestigeFinalizeTime[idx];
}
function GetPotInfo() public constant returns (uint256 _honeyPotAmount, uint256 _devFunds, uint256 _nextDistributionTime)
{
_honeyPotAmount = honeyPotAmount;
_devFunds = devFund;
_nextDistributionTime = nextPotDistributionTime;
}
function GetGlobalProduction() public constant returns (uint256 globalMoney, uint256 globalHashRate)
{
globalMoney = 0;
globalHashRate = 0;
uint i = 0;
for(i = 0; i < topindex; ++i)
{
MinerData storage m = miners[indexes[i]];
globalMoney += m.money;
globalHashRate += GetProductionPerSecond(indexes[i]);
}
}
function GetBoosterCount() public constant returns (uint256)
{
return numberOfBoosts;
}
function GetBoosterData(uint256 idx) public constant returns (int256 rigIdx, uint256 flatBonus, uint256 ptcBonus,
uint256 currentPrice, uint256 increasePct, uint256 maxNumber, uint256 _lockTime)
{
require(idx < numberOfBoosts);
rigIdx = boostData[idx].rigIndex;
flatBonus = boostData[idx].flatBonus;
ptcBonus = boostData[idx].percentBonus;
currentPrice = boostData[idx].priceInWEI;
increasePct = boostData[idx].priceIncreasePct;
maxNumber = boostData[idx].totalCount;
_lockTime = boostFinalizeTime[idx];
}
function HasBooster(address addr, uint256 startIdx) public constant returns (uint8[10] hasBoost)
{
require(startIdx < numberOfBoosts);
uint j = 0;
for( ;j < 10 && (j + startIdx) < numberOfBoosts; ++j)
{
BoostData storage b = boostData[j + startIdx];
hasBoost[j] = 0;
for(uint i = 0; i < b.totalCount; ++i)
{
if(b.boostHolders[i] == addr)
hasBoost[j] = 1;
}
}
for( ;j < 10; ++j)
{
hasBoost[j] = 0;
}
}
function GetCurrentICOCycle() public constant returns (uint256)
{
return cycleCount;
}
function GetICOData(uint256 idx) public constant returns (uint256 ICOFund, uint256 ICOPot)
{
require(idx <= cycleCount);
ICOFund = globalICOPerCycle[idx];
if(idx < cycleCount)
{
ICOPot = honeyPotPerCycle[idx];
} else
{
ICOPot = honeyPotAmount / 5; // actual day estimate
}
}
function GetMinerICOData(address miner, uint256 idx) public constant returns (uint256 ICOFund, uint256 ICOShare, uint256 lastClaimIndex)
{
require(idx <= cycleCount);
ICOFund = minerICOPerCycle[miner][idx];
if(idx < cycleCount)
{
ICOShare = (honeyPotPerCycle[idx] * minerICOPerCycle[miner][idx]) / globalICOPerCycle[idx];
} else
{
ICOShare = (honeyPotAmount / 5) * minerICOPerCycle[miner][idx] / globalICOPerCycle[idx];
}
lastClaimIndex = miners[miner].lastPotClaimIndex;
}
function GetMinerUnclaimedICOShare(address miner) public constant returns (uint256 unclaimedPot)
{
MinerData storage m = miners[miner];
require(m.lastUpdateTime != 0);
require(m.lastPotClaimIndex <= cycleCount);
uint256 i = m.lastPotClaimIndex;
uint256 limit = cycleCount;
if((limit - i) > 30) // more than 30 iterations(days) afk
limit = i + 30;
unclaimedPot = 0;
for(; i < cycleCount; ++i)
{
if(minerICOPerCycle[msg.sender][i] > 0)
unclaimedPot += (honeyPotPerCycle[i] * minerICOPerCycle[msg.sender][i]) / globalICOPerCycle[i];
}
}
// -------------------------------------------------------------------------
// RigWars game handler functions
// -------------------------------------------------------------------------
function StartNewMiner(address referral) external
{
require(miners[msg.sender].lastUpdateTime == 0);
require(referral != msg.sender);
miners[msg.sender].lastUpdateTime = block.timestamp;
miners[msg.sender].lastPotClaimIndex = cycleCount;
miners[msg.sender].rigCount[0] = 1;
indexes[topindex] = msg.sender;
++topindex;
if(referral != owner && referral != 0 && miners[referral].lastUpdateTime != 0)
{
referrals[msg.sender] = referral;
miners[msg.sender].rigCount[0] += 9;
}
}
function UpgradeRig(uint8 rigIdx, uint256 count) external
{
require(rigIdx < numberOfRigs);
require(count > 0);
require(count <= 512);
require(rigFinalizeTime[rigIdx] < block.timestamp);
require(miners[msg.sender].lastUpdateTime != 0);
MinerData storage m = miners[msg.sender];
require(m.rigCount[rigIdx] > 0);
require(512 >= (m.rigCount[rigIdx] + count));
UpdateMoney(msg.sender);
// the base of geometrical sequence
uint256 price = GeometricSequence.sumOfNGeom(rigData[rigIdx].basePrice, m.rigCount[rigIdx], count);
require(m.money >= price);
m.rigCount[rigIdx] = m.rigCount[rigIdx] + count;
m.money -= price;
}
function UnlockRig(uint8 rigIdx) external
{
require(rigIdx < numberOfRigs);
require(rigIdx > 0);
require(rigFinalizeTime[rigIdx] < block.timestamp);
require(miners[msg.sender].lastUpdateTime != 0);
MinerData storage m = miners[msg.sender];
require(m.rigCount[rigIdx] == 0);
require(m.rigCount[rigIdx-1] > 0);
UpdateMoney(msg.sender);
uint256 price = rigData[rigIdx].basePrice * rigData[rigIdx].unlockMultiplier;
require(m.money >= price);
m.rigCount[rigIdx] = 1;
m.money -= price;
}
function PrestigeUp() external
{
require(miners[msg.sender].lastUpdateTime != 0);
require(prestigeFinalizeTime[m.prestigeLevel] < block.timestamp);
MinerData storage m = miners[msg.sender];
require(m.prestigeLevel < maxPrestige);
UpdateMoney(msg.sender);
require(m.money >= prestigeData[m.prestigeLevel].price);
if(referrals[msg.sender] != 0)
{
miners[referrals[msg.sender]].money += prestigeData[m.prestigeLevel].price / 2;
}
for(uint256 i = 0; i < numberOfRigs; ++i)
{
if(m.rigCount[i] > 1)
m.rigCount[i] = m.rigCount[i] / 2;
}
m.money = 0;
m.prestigeBonusPct += prestigeData[m.prestigeLevel].productionBonusPct;
m.prestigeLevel += 1;
}
function UpdateMoney(address addr) private
{
require(block.timestamp > miners[addr].lastUpdateTime);
if(miners[addr].lastUpdateTime != 0)
{
MinerData storage m = miners[addr];
uint256 diff = block.timestamp - m.lastUpdateTime;
uint256 revenue = GetProductionPerSecond(addr);
m.lastUpdateTime = block.timestamp;
if(revenue > 0)
{
revenue *= diff;
m.money += revenue;
}
}
}
//--------------------------------------------------------------------------
// BOOSTER handlers
//--------------------------------------------------------------------------
function BuyBooster(uint256 idx) external payable
{
require(miners[msg.sender].lastUpdateTime != 0);
require(idx < numberOfBoosts);
require(boostFinalizeTime[idx] < block.timestamp);
BoostData storage b = boostData[idx];
require(msg.value >= b.priceInWEI);
for(uint i = 0; i < b.totalCount; ++i)
if(b.boostHolders[i] == msg.sender)
revert();
address beneficiary = b.boostHolders[b.currentIndex];
MinerData storage m = miners[beneficiary];
MinerData storage m2 = miners[msg.sender];
// distribute the ETH
m.unclaimedPot += (msg.value * 9) / 10;
honeyPotAmount += msg.value / 20;
devFund += msg.value / 20;
// increase price by X%
b.priceInWEI += (b.priceInWEI * b.priceIncreasePct) / 100;
UpdateMoney(msg.sender);
UpdateMoney(beneficiary);
// transfer ownership
b.boostHolders[b.currentIndex] = msg.sender;
// handle booster bonuses
if(m.rigFlatBonus[b.rigIndex] >= b.flatBonus){
m.rigFlatBonus[b.rigIndex] -= b.flatBonus;
} else {
m.rigFlatBonus[b.rigIndex] = 0;
}
if(m.rigPctBonus[b.rigIndex] >= b.percentBonus) {
m.rigPctBonus[b.rigIndex] -= b.percentBonus;
} else {
m.rigPctBonus[b.rigIndex] = 0;
}
m2.rigFlatBonus[b.rigIndex] += b.flatBonus;
m2.rigPctBonus[b.rigIndex] += b.percentBonus;
// increase booster index
b.currentIndex += 1;
if(b.currentIndex >= b.totalCount)
b.currentIndex = 0;
}
//--------------------------------------------------------------------------
// ICO/Pot share functions
//--------------------------------------------------------------------------
function ReleaseICO() external
{
require(miners[msg.sender].lastUpdateTime != 0);
require(nextPotDistributionTime <= block.timestamp);
require(honeyPotAmount > 0);
require(globalICOPerCycle[cycleCount] > 0);
nextPotDistributionTime = block.timestamp + 86400;
honeyPotPerCycle[cycleCount] = honeyPotAmount / 4; // 25% of the pot
honeyPotAmount -= honeyPotAmount / 4;
honeyPotPerCycle.push(0);
globalICOPerCycle.push(0);
cycleCount = cycleCount + 1;
}
function FundICO(uint amount) external
{
require(miners[msg.sender].lastUpdateTime != 0);
require(amount > 0);
MinerData storage m = miners[msg.sender];
UpdateMoney(msg.sender);
require(m.money >= amount);
m.money = (m.money).sub(amount);
globalICOPerCycle[cycleCount] = globalICOPerCycle[cycleCount].add(uint(amount));
minerICOPerCycle[msg.sender][cycleCount] = minerICOPerCycle[msg.sender][cycleCount].add(uint(amount));
}
function WithdrawICOEarnings() external
{
MinerData storage m = miners[msg.sender];
require(miners[msg.sender].lastUpdateTime != 0);
require(miners[msg.sender].lastPotClaimIndex < cycleCount);
uint256 i = m.lastPotClaimIndex;
uint256 limit = cycleCount;
if((limit - i) > 30) // more than 30 iterations(days) afk
limit = i + 30;
m.lastPotClaimIndex = limit;
for(; i < cycleCount; ++i)
{
if(minerICOPerCycle[msg.sender][i] > 0)
m.unclaimedPot += (honeyPotPerCycle[i] * minerICOPerCycle[msg.sender][i]) / globalICOPerCycle[i];
}
}
//--------------------------------------------------------------------------
// Data Storage Management
//--------------------------------------------------------------------------
function AddNewBooster(uint256 idx, int256 _rigType, uint256 _flatBonus, uint256 _pctBonus,
uint256 _ETHPrice, uint256 _priceIncreasePct, uint256 _totalCount) external
{
require(msg.sender == owner);
require(idx <= numberOfBoosts);
if(idx < numberOfBoosts)
require(boostFinalizeTime[idx] > block.timestamp);
boostFinalizeTime[idx] = block.timestamp + 7200;
boostData[idx].rigIndex = _rigType;
boostData[idx].flatBonus = _flatBonus;
boostData[idx].percentBonus = _pctBonus;
boostData[idx].priceInWEI = _ETHPrice;
boostData[idx].priceIncreasePct = _priceIncreasePct;
boostData[idx].totalCount = _totalCount;
boostData[idx].currentIndex = 0;
boostData[idx].boostHolders = new address[](_totalCount);
for(uint256 i = 0; i < _totalCount; ++i)
boostData[idx].boostHolders[i] = owner;
if(idx == numberOfBoosts)
numberOfBoosts += 1;
}
function AddorModifyRig(uint256 idx, uint256 _basePrice, uint256 _baseOutput, uint256 _unlockMultiplier) external
{
require(msg.sender == owner);
require(idx <= numberOfRigs);
if(idx < numberOfRigs)
require(rigFinalizeTime[idx] > block.timestamp);
rigFinalizeTime[idx] = block.timestamp + 7200;
rigData[idx].basePrice = _basePrice;
rigData[idx].baseOutput = _baseOutput;
rigData[idx].unlockMultiplier = _unlockMultiplier;
if(idx == numberOfRigs)
numberOfRigs += 1;
}
function AddNewPrestige(uint256 idx, uint256 _price, uint256 _bonusPct) public
{
require(msg.sender == owner);
require(idx <= maxPrestige);
if(idx < maxPrestige)
require(prestigeFinalizeTime[idx] > block.timestamp);
prestigeFinalizeTime[idx] = block.timestamp + 7200;
prestigeData[idx].price = _price;
prestigeData[idx].productionBonusPct = _bonusPct;
if(idx == maxPrestige)
maxPrestige += 1;
}
//--------------------------------------------------------------------------
// ETH handler functions
//--------------------------------------------------------------------------
function WithdrawPotShare() public
{
MinerData storage m = miners[msg.sender];
require(m.unclaimedPot > 0);
require(m.lastUpdateTime != 0);
uint256 amntToSend = m.unclaimedPot;
m.unclaimedPot = 0;
if(msg.sender.send(amntToSend))
{
m.unclaimedPot = 0;
}
}
function WithdrawDevFunds() public
{
require(msg.sender == owner);
if(owner.send(devFund))
{
devFund = 0;
}
}
// fallback payment to pot
function() public payable {
devFund += msg.value;
}
//--------------------------------------------------------------------------
// ERC20 support
//--------------------------------------------------------------------------
function totalSupply() public constant returns(uint256) {
return estimatedSupply;
}
function balanceOf(address miner) public constant returns(uint256) {
return miners[miner].money;
}
function transfer(address recipient, uint256 amount) public returns (bool) {
require(amount <= miners[msg.sender].money);
miners[msg.sender].money = (miners[msg.sender].money).sub(amount);
miners[recipient].money = (miners[recipient].money).add(amount);
emit Transfer(msg.sender, recipient, amount);
return true;
}
function transferFrom(address miner, address recipient, uint256 amount) public returns (bool) {
require(amount <= allowed[miner][msg.sender] && amount <= balanceOf(miner));
miners[miner].money = (miners[miner].money).sub(amount);
miners[recipient].money = (miners[recipient].money).add(amount);
allowed[miner][msg.sender] = (allowed[miner][msg.sender]).sub(amount);
emit Transfer(miner, recipient, amount);
return true;
}
function approve(address approvee, uint256 amount) public returns (bool){
require(amount <= miners[msg.sender].money);
allowed[msg.sender][approvee] = amount;
emit Approval(msg.sender, approvee, amount);
return true;
}
function allowance(address miner, address approvee) public constant returns(uint256){
return allowed[miner][approvee];
}
}
Read Contract
CalculatePriceofRigs 0x0142f904 → uint256
GetBoosterCount 0x7bb866c1 → uint256
GetBoosterData 0xe0d3558e → int256, uint256, uint256, uint256, uint256, uint256, uint256
GetCurrentICOCycle 0x9f0eed0f → uint256
GetGlobalProduction 0x56a4e7f9 → uint256, uint256
GetICOData 0xcb68780f → uint256, uint256
GetMaxPrestigeLevel 0x49e9cee9 → uint256
GetMinerAt 0xd291fa81 → address
GetMinerData 0xcc0f65f7 → uint256, uint256, uint256, uint256, uint256, uint256, uint256
GetMinerICOData 0xb4beff8a → uint256, uint256, uint256
GetMinerRigsCount 0x87b57fa7 → uint256[10], uint256[10]
GetMinerUnclaimedICOShare 0x3a70eabd → uint256
GetPotInfo 0x6e4dd931 → uint256, uint256, uint256
GetPrestigeInfo 0xb99371a0 → uint256, uint256, uint256
GetProductionPerSecond 0x036a66eb → uint256
GetRigData 0x133369c6 → uint256, uint256, uint256, uint256
GetTotalMinerCount 0x996f7602 → uint256
GetTotalRigCount 0x33f8845d → uint256
HasBooster 0x104bff92 → uint8[10]
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
name 0x06fdde03 → string
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
Write Contract 16 functions
These functions modify contract state and require a wallet transaction to execute.
AddNewBooster 0xfec1c41f
uint256 idx
int256 _rigType
uint256 _flatBonus
uint256 _pctBonus
uint256 _ETHPrice
uint256 _priceIncreasePct
uint256 _totalCount
AddNewPrestige 0x664b885e
uint256 idx
uint256 _price
uint256 _bonusPct
AddorModifyRig 0x669d8dff
uint256 idx
uint256 _basePrice
uint256 _baseOutput
uint256 _unlockMultiplier
BuyBooster 0x4bc3df81
uint256 idx
FundICO 0x1fd86a6a
uint256 amount
PrestigeUp 0xf7e3c068
No parameters
ReleaseICO 0xdee8bd51
No parameters
StartNewMiner 0x161fc5b3
address referral
UnlockRig 0x4deb9f47
uint8 rigIdx
UpgradeRig 0x6f3165d3
uint8 rigIdx
uint256 count
WithdrawDevFunds 0x8357417d
No parameters
WithdrawICOEarnings 0xd511beec
No parameters
WithdrawPotShare 0x33ad9495
No parameters
approve 0x095ea7b3
address approvee
uint256 amount
returns: bool
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address miner
address recipient
uint256 amount
returns: bool
Recent Transactions
No transactions found for this address