Commit 22f15da0 authored by wq's avatar wq

Y

parents
build/*
node_modules/*
test/*
.idea/*
## 说明
本项目通过reed 大佬的 [fomo3d_clone](https://github.com/reedhong/fomo3d_clone) 项目改造而成, 感谢 reed 大佬!!!
经过本人吐血试验折腾, 弄好了一次性编译部署 (没啥必要, 但我就是喜欢死磕)
## 本地部署指南
#### 部署合约:
```
truffle compile
truffle migrate --reset # 执行后 复制 fomo3dLong 后跟的地址
```
#### 部署前端:
```
cd src/js
sed -i "" 's/{{address}}/0xe80662701fe17ebf9332b6a1bbf762ed1efa5ec7/g' bundle.js # 非 mac 去除 -i 后的 ""
cd ../../
npm install & npm run dev
```
>PS: 前端路径 由于没有 采用专业的后端服务器, 所以 /play /xxx 直接访问均报错, 请再访问出错后, 删除后缀, 重新载入, 等待 loading
\ No newline at end of file
{
"server": {
"baseDir": [
"./src",
"./build/contracts"
]
},
"middleware": {
"0": null
}
}
pragma solidity ^0.4.24;
contract F3Devents {
// fired whenever a player registers a name
event onNewName
(
uint256 indexed playerID,
address indexed playerAddress,
bytes32 indexed playerName,
bool isNewPlayer,
uint256 affiliateID,
address affiliateAddress,
bytes32 affiliateName,
uint256 amountPaid,
uint256 timeStamp
);
// fired at end of buy or reload
event onEndTx
(
uint256 compressedData,
uint256 compressedIDs,
bytes32 playerName,
address playerAddress,
uint256 ethIn,
uint256 keysBought,
address winnerAddr,
bytes32 winnerName,
uint256 amountWon,
uint256 newPot,
uint256 P3DAmount,
uint256 genAmount,
uint256 potAmount,
uint256 airDropPot
);
// fired whenever theres a withdraw
event onWithdraw
(
uint256 indexed playerID,
address playerAddress,
bytes32 playerName,
uint256 ethOut,
uint256 timeStamp
);
// fired whenever a withdraw forces end round to be ran
event onWithdrawAndDistribute
(
address playerAddress,
bytes32 playerName,
uint256 ethOut,
uint256 compressedData,
uint256 compressedIDs,
address winnerAddr,
bytes32 winnerName,
uint256 amountWon,
uint256 newPot,
uint256 P3DAmount,
uint256 genAmount
);
// (fomo3d long only) fired whenever a player tries a buy after round timer
// hit zero, and causes end round to be ran.
event onBuyAndDistribute
(
address playerAddress,
bytes32 playerName,
uint256 ethIn,
uint256 compressedData,
uint256 compressedIDs,
address winnerAddr,
bytes32 winnerName,
uint256 amountWon,
uint256 newPot,
uint256 P3DAmount,
uint256 genAmount
);
// (fomo3d long only) fired whenever a player tries a reload after round timer
// hit zero, and causes end round to be ran.
event onReLoadAndDistribute
(
address playerAddress,
bytes32 playerName,
uint256 compressedData,
uint256 compressedIDs,
address winnerAddr,
bytes32 winnerName,
uint256 amountWon,
uint256 newPot,
uint256 P3DAmount,
uint256 genAmount
);
// fired whenever an affiliate is paid
event onAffiliatePayout
(
uint256 indexed affiliateID,
address affiliateAddress,
bytes32 affiliateName,
uint256 indexed roundID,
uint256 indexed buyerID,
uint256 amount,
uint256 timeStamp
);
// received pot swap deposit
event onPotSwapDeposit
(
uint256 roundID,
uint256 amountAddedToPot
);
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
pragma solidity ^0.4.23;
contract Migrations {
address public owner;
uint public last_completed_migration;
constructor() public {
owner = msg.sender;
}
modifier restricted() {
if (msg.sender == owner) _;
}
function setCompleted(uint completed) public restricted {
last_completed_migration = completed;
}
function upgrade(address new_address) public restricted {
Migrations upgraded = Migrations(new_address);
upgraded.setCompleted(last_completed_migration);
}
}
This diff is collapsed.
This diff is collapsed.
pragma solidity ^0.4.24;
interface DiviesInterface {
function deposit() external payable;
}
\ No newline at end of file
pragma solidity ^0.4.24;
interface PlayerBookInterface {
function getPlayerID(address _addr) external returns (uint256);
function getPlayerName(uint256 _pID) external view returns (bytes32);
function getPlayerLAff(uint256 _pID) external view returns (uint256);
function getPlayerAddr(uint256 _pID) external view returns (address);
function getNameFee() external view returns (uint256);
function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256);
function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256);
function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256);
function isDev(address _who) external view returns(bool);
}
\ No newline at end of file
pragma solidity ^0.4.24;
interface PlayerBookReceiverInterface {
function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external;
function receivePlayerNameList(uint256 _pID, bytes32 _name) external;
}
pragma solidity ^0.4.24;
interface TeamJustInterface {
function requiredSignatures() external view returns(uint256);
function requiredDevSignatures() external view returns(uint256);
function adminCount() external view returns(uint256);
function devCount() external view returns(uint256);
function adminName(address _who) external view returns(bytes32);
function isAdmin(address _who) external view returns(bool);
function isDev(address _who) external view returns(bool);
}
\ No newline at end of file
pragma solidity ^0.4.24;
import './SafeMath.sol';
//==============================================================================
// | _ _ _ | _ .
// |<(/_\/ (_(_||(_ .
//=======/======================================================================
library F3DKeysCalcLong {
using SafeMath for *;
/**
* @dev calculates number of keys received given X eth
* @param _curEth current amount of eth in contract
* @param _newEth eth being spent
* @return amount of ticket purchased
*/
function keysRec(uint256 _curEth, uint256 _newEth)
internal
pure
returns (uint256)
{
return(keys((_curEth).add(_newEth)).sub(keys(_curEth)));
}
/**
* @dev calculates amount of eth received if you sold X keys
* @param _curKeys current amount of keys that exist
* @param _sellKeys amount of keys you wish to sell
* @return amount of eth received
*/
function ethRec(uint256 _curKeys, uint256 _sellKeys)
internal
pure
returns (uint256)
{
return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys))));
}
/**
* @dev calculates how many keys would exist with given an amount of eth
* @param _eth eth "in contract"
* @return number of keys that would exist
*/
function keys(uint256 _eth)
internal
pure
returns(uint256)
{
return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000);
}
/**
* @dev calculates how much eth would be in contract given a number of keys
* @param _keys number of keys "in contract"
* @return eth that would exists
*/
function eth(uint256 _keys)
internal
pure
returns(uint256)
{
return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq());
}
}
\ No newline at end of file
pragma solidity ^0.4.24;
//==============================================================================
// __|_ _ __|_ _ .
// _\ | | |_|(_ | _\ .
//==============================================================================
library F3Ddatasets {
//compressedData key
// [76-33][32][31][30][29][28-18][17][16-6][5-3][2][1][0]
// 0 - new player (bool)
// 1 - joined round (bool)
// 2 - new leader (bool)
// 3-5 - air drop tracker (uint 0-999)
// 6-16 - round end time
// 17 - winnerTeam
// 18 - 28 timestamp
// 29 - team
// 30 - 0 = reinvest (round), 1 = buy (round), 2 = buy (ico), 3 = reinvest (ico)
// 31 - airdrop happened bool
// 32 - airdrop tier
// 33 - airdrop amount won
//compressedIDs key
// [77-52][51-26][25-0]
// 0-25 - pID
// 26-51 - winPID
// 52-77 - rID
struct EventReturns {
uint256 compressedData;
uint256 compressedIDs;
address winnerAddr; // winner address
bytes32 winnerName; // winner name
uint256 amountWon; // amount won
uint256 newPot; // amount in new pot
uint256 P3DAmount; // amount distributed to p3d
uint256 genAmount; // amount distributed to gen
uint256 potAmount; // amount added to pot
}
struct Player {
address addr; // player address
bytes32 name; // player name
uint256 win; // winnings vault
uint256 gen; // general vault
uint256 aff; // affiliate vault
uint256 lrnd; // last round played
uint256 laff; // last affiliate id used
}
struct PlayerRounds {
uint256 eth; // eth player has added to round (used for eth limiter)
uint256 keys; // keys
uint256 mask; // player mask
uint256 ico; // ICO phase investment
}
struct Round {
uint256 plyr; // pID of player in lead
uint256 team; // tID of team in lead
uint256 end; // time ends/ended
bool ended; // has round end function been ran
uint256 strt; // time round started
uint256 keys; // keys
uint256 eth; // total eth in
uint256 pot; // eth to pot (during round) / final amount paid to winner (after round ends)
uint256 mask; // global mask
uint256 ico; // total eth sent in during ICO phase
uint256 icoGen; // total eth for gen during ICO phase
uint256 icoAvg; // average key price for ICO phase
}
struct TeamFee {
uint256 gen; // % of buy in thats paid to key holders of current round
uint256 p3d; // % of buy in thats paid to p3d holders
}
struct PotSplit {
uint256 gen; // % of pot thats paid to key holders of current round
uint256 p3d; // % of pot thats paid to p3d holders
}
}
\ No newline at end of file
This diff is collapsed.
pragma solidity ^0.4.24;
/**
* @title -Name Filter- v0.1.9
* ┌┬┐┌─┐┌─┐┌┬┐ ╦╦ ╦╔═╗╔╦╗ ┌─┐┬─┐┌─┐┌─┐┌─┐┌┐┌┌┬┐┌─┐
* │ ├┤ ├─┤│││ ║║ ║╚═╗ ║ ├─┘├┬┘├┤ └─┐├┤ │││ │ └─┐
* ┴ └─┘┴ ┴┴ ┴ ╚╝╚═╝╚═╝ ╩ ┴ ┴└─└─┘└─┘└─┘┘└┘ ┴ └─┘
* _____ _____
* (, / /) /) /) (, / /) /)
* ┌─┐ / _ (/_ // // / _ // _ __ _(/
* ├─┤ ___/___(/_/(__(_/_(/_(/_ ___/__/_)_(/_(_(_/ (_(_(_
* ┴ ┴ / / .-/ _____ (__ /
* (__ / (_/ (, / /)™
* / __ __ __ __ _ __ __ _ _/_ _ _(/
* ┌─┐┬─┐┌─┐┌┬┐┬ ┬┌─┐┌┬┐ /__/ (_(__(_)/ (_/_)_(_)/ (_(_(_(__(/_(_(_
* ├─┘├┬┘│ │ │││ ││ │ (__ / .-/ © Jekyll Island Inc. 2018
* ┴ ┴└─└─┘─┴┘└─┘└─┘ ┴ (_/
* _ __ _ ____ ____ _ _ _____ ____ ___
*=============| |\ | / /\ | |\/| | |_ =====| |_ | | | | | | | |_ | |_)==============*
*=============|_| \| /_/--\ |_| | |_|__=====|_| |_| |_|__ |_| |_|__ |_| \==============*
*
* ╔═╗┌─┐┌┐┌┌┬┐┬─┐┌─┐┌─┐┌┬┐ ╔═╗┌─┐┌┬┐┌─┐ ┌──────────┐
* ║ │ ││││ │ ├┬┘├─┤│ │ ║ │ │ ││├┤ │ Inventor │
* ╚═╝└─┘┘└┘ ┴ ┴└─┴ ┴└─┘ ┴ ╚═╝└─┘─┴┘└─┘ └──────────┘
*/
library NameFilter {
/**
* @dev filters name strings
* -converts uppercase to lower case.
* -makes sure it does not start/end with a space
* -makes sure it does not contain multiple spaces in a row
* -cannot be only numbers
* -cannot start with 0x
* -restricts characters to A-Z, a-z, 0-9, and space.
* @return reprocessed string in bytes32 format
*/
function nameFilter(string _input)
internal
pure
returns(bytes32)
{
bytes memory _temp = bytes(_input);
uint256 _length = _temp.length;
//sorry limited to 32 characters
require (_length <= 32 && _length > 0, "string must be between 1 and 32 characters");
// make sure it doesnt start with or end with space
require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, "string cannot start or end with space");
// make sure first two characters are not 0x
if (_temp[0] == 0x30)
{
require(_temp[1] != 0x78, "string cannot start with 0x");
require(_temp[1] != 0x58, "string cannot start with 0X");
}
// create a bool to track if we have a non number character
bool _hasNonNumber;
// convert & check
for (uint256 i = 0; i < _length; i++)
{
// if its uppercase A-Z
if (_temp[i] > 0x40 && _temp[i] < 0x5b)
{
// convert to lower case a-z
_temp[i] = byte(uint(_temp[i]) + 32);
// we have a non number
if (_hasNonNumber == false)
_hasNonNumber = true;
} else {
require
(
// require character is a space
_temp[i] == 0x20 ||
// OR lowercase a-z
(_temp[i] > 0x60 && _temp[i] < 0x7b) ||
// or 0-9
(_temp[i] > 0x2f && _temp[i] < 0x3a),
"string contains invalid characters"
);
// make sure theres not 2x spaces in a row
if (_temp[i] == 0x20)
require( _temp[i+1] != 0x20, "string cannot contain consecutive spaces");
// see if we have a character other than a number
if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39))
_hasNonNumber = true;
}
}
require(_hasNonNumber == true, "string cannot be only numbers");
bytes32 _ret;
assembly {
_ret := mload(add(_temp, 32))
}
return (_ret);
}
}
\ No newline at end of file
pragma solidity ^0.4.24;
/**
* @title SafeMath v0.1.9
* @dev Math operations with safety checks that throw on error
* change notes: original SafeMath library from OpenZeppelin modified by Inventor
* - added sqrt
* - added sq
* - added pwr
* - changed asserts to requires with error log outputs
* - removed div, its useless
*/
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b)
internal
pure
returns (uint256 c)
{
if (a == 0) {
return 0;
}
c = a * b;
require(c / a == b, "SafeMath mul failed");
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b)
internal
pure
returns (uint256)
{
require(b <= a, "SafeMath sub failed");
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b)
internal
pure
returns (uint256 c)
{
c = a + b;
require(c >= a, "SafeMath add failed");
return c;
}
/**
* @dev gives square root of given x.
*/
function sqrt(uint256 x)
internal
pure
returns (uint256 y)
{
uint256 z = ((add(x,1)) / 2);
y = x;
while (z < y)
{
y = z;
z = ((add((x / z),z)) / 2);
}
}
/**
* @dev gives square. multiplies x by x
*/
function sq(uint256 x)
internal
pure
returns (uint256)
{
return (mul(x,x));
}
/**
* @dev x to the power of y
*/
function pwr(uint256 x, uint256 y)
internal
pure
returns (uint256)
{
if (x==0)
return (0);
else if (y==0)
return (1);
else
{
uint256 z = x;
for (uint256 i=1; i < y; i++)
z = mul(z,x);
return (z);
}
}
}
\ No newline at end of file
pragma solidity ^0.4.24;
import "./SafeMath.sol";
/**
* @title -UintCompressor- v0.1.9
* ┌┬┐┌─┐┌─┐┌┬┐ ╦╦ ╦╔═╗╔╦╗ ┌─┐┬─┐┌─┐┌─┐┌─┐┌┐┌┌┬┐┌─┐
* │ ├┤ ├─┤│││ ║║ ║╚═╗ ║ ├─┘├┬┘├┤ └─┐├┤ │││ │ └─┐
* ┴ └─┘┴ ┴┴ ┴ ╚╝╚═╝╚═╝ ╩ ┴ ┴└─└─┘└─┘└─┘┘└┘ ┴ └─┘
* _____ _____
* (, / /) /) /) (, / /) /)
* ┌─┐ / _ (/_ // // / _ // _ __ _(/
* ├─┤ ___/___(/_/(__(_/_(/_(/_ ___/__/_)_(/_(_(_/ (_(_(_
* ┴ ┴ / / .-/ _____ (__ /
* (__ / (_/ (, / /)™
* / __ __ __ __ _ __ __ _ _/_ _ _(/
* ┌─┐┬─┐┌─┐┌┬┐┬ ┬┌─┐┌┬┐ /__/ (_(__(_)/ (_/_)_(_)/ (_(_(_(__(/_(_(_
* ├─┘├┬┘│ │ │││ ││ │ (__ / .-/ © Jekyll Island Inc. 2018
* ┴ ┴└─└─┘─┴┘└─┘└─┘ ┴ (_/
* _ _ __ __ _ ____ ___ __ _ _ ____ ____ ____ ____ ____ __ ____
*===/ )( \ ( ) ( ( \(_ _)===/ __) / \ ( \/ )( _ \( _ \( __)/ ___)/ ___) / \ ( _ \===*
* ) \/ ( )( / / )( ( (__ ( O )/ \/ \ ) __/ ) / ) _) \___ \\___ \( O ) ) /
*===\____/ (__) \_)__) (__)====\___) \__/ \_)(_/(__) (__\_)(____)(____/(____/ \__/ (__\_)===*
*
* ╔═╗┌─┐┌┐┌┌┬┐┬─┐┌─┐┌─┐┌┬┐ ╔═╗┌─┐┌┬┐┌─┐ ┌──────────┐
* ║ │ ││││ │ ├┬┘├─┤│ │ ║ │ │ ││├┤ │ Inventor │
* ╚═╝└─┘┘└┘ ┴ ┴└─┴ ┴└─┘ ┴ ╚═╝└─┘─┴┘└─┘ └──────────┘
*/
library UintCompressor {
using SafeMath for *;
function insert(uint256 _var, uint256 _include, uint256 _start, uint256 _end)
internal
pure
returns(uint256)
{
// check conditions
require(_end < 77 && _start < 77, "start/end must be less than 77");
require(_end >= _start, "end must be >= start");
// format our start/end points
_end = exponent(_end).mul(10);
_start = exponent(_start);
// check that the include data fits into its segment
require(_include < (_end / _start));
// build middle
if (_include > 0)
_include = _include.mul(_start);
return((_var.sub((_var / _start).mul(_start))).add(_include).add((_var / _end).mul(_end)));
}
function extract(uint256 _input, uint256 _start, uint256 _end)
internal
pure
returns(uint256)
{
// check conditions
require(_end < 77 && _start < 77, "start/end must be less than 77");
require(_end >= _start, "end must be >= start");
// format our start/end points
_end = exponent(_end).mul(10);
_start = exponent(_start);
// return requested section
return((((_input / _start).mul(_start)).sub((_input / _end).mul(_end))) / _start);
}
function exponent(uint256 _position)
private
pure
returns(uint256)
{
return((10).pwr(_position));
}
}
\ No newline at end of file
var Migrations = artifacts.require("./Migrations.sol");
module.exports = function(deployer) {
deployer.deploy(Migrations);
};
var FoMo3Dlong = artifacts.require("./FoMo3Dlong.sol");
var SafeMath = artifacts.require("./library/SafeMath.sol");
var F3Ddatasets = artifacts.require("./library/F3Ddatasets.sol");
var MSFun = artifacts.require("./library/MSFun.sol");
var NameFilter = artifacts.require("./library/NameFilter.sol");
var UintCompressor = artifacts.require("./library/UintCompressor.sol");
var F3DKeysCalcLong = artifacts.require("./library/F3DKeysCalcLong.sol");
var F3Devents = artifacts.require("./F3Devents.sol");
var PlayerBook = artifacts.require("./PlayerBook.sol");
var TeamJust = artifacts.require("./TeamJust.sol");
module.exports = function (deployer) {
deployer.deploy(SafeMath);
deployer.deploy(F3Ddatasets);
deployer.deploy(MSFun);
deployer.deploy(NameFilter);
deployer.deploy(UintCompressor);
deployer.deploy(F3DKeysCalcLong);
deployer.deploy(F3Devents);
deployer.link(SafeMath, [TeamJust, PlayerBook, FoMo3Dlong]);
deployer.link(NameFilter, [TeamJust, PlayerBook, FoMo3Dlong]);
deployer.link(MSFun, [TeamJust, PlayerBook, FoMo3Dlong]);
deployer.link(F3DKeysCalcLong, FoMo3Dlong);
deployer.link(F3Ddatasets, FoMo3Dlong);
deployer.deploy(TeamJust);
deployer.deploy(PlayerBook);
deployer.deploy(FoMo3Dlong);
var team, player;
deployer.then(function () {
return TeamJust.deployed();
}).then(function (teamJust) {
team = teamJust;
return PlayerBook.deployed();
}).then(function (playerBook) {
player = playerBook;
player.setTeam(team.address);
return FoMo3Dlong.deployed();
}).then(function (fomo) {
fomo.setPlayerBook(player.address);
});
};
{
"name": "genePet",
"version": "1.0.0",
"description": "",
"main": "truffle.js",
"directories": {
"test": "test"
},
"scripts": {
"dev": "lite-server",
"test": "echo \"Error: no test specified\" && exit 1",
"flat": "sh ./flattener.sh"
},
"author": "",
"license": "ISC",
"devDependencies": {
"lite-server": "^2.3.0"
},
"dependencies": {
"zeppelin-solidity": "^1.4.0"
}
}
File added
.alertify-logs>* {
padding: 12px 24px;
color: #fff;
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, .2);
border-radius: 1px
}
.alertify-logs>*,
.alertify-logs>.default {
background: rgba(0, 0, 0, .8)
}
.alertify-logs>.error {
background: rgba(244, 67, 54, .8)
}
.alertify-logs>.success {
background: rgba(76, 175, 80, .9)
}
.alertify {
position: fixed;
background-color: rgba(0, 0, 0, .3);
left: 0;
right: 0;
top: 0;
bottom: 0;
width: 100%;
height: 100%;
z-index: 1
}
.alertify.hide {
opacity: 0;
pointer-events: none
}
.alertify,
.alertify.show {
box-sizing: border-box;
transition: all .33s cubic-bezier(.25, .8, .25, 1)
}
.alertify,
.alertify * {
box-sizing: border-box
}
.alertify .dialog {
padding: 12px
}
.alertify .alert,
.alertify .dialog {
width: 100%;
margin: 0 auto;
position: relative;
top: 50%;
transform: translateY(-50%)
}
.alertify .alert>*,
.alertify .dialog>* {
width: 400px;
max-width: 95%;
margin: 0 auto;
text-align: center;
padding: 12px;
background: #fff;
box-shadow: 0 2px 4px -1px rgba(0, 0, 0, .14), 0 4px 5px 0 rgba(0, 0, 0, .098), 0 1px 10px 0 rgba(0, 0, 0, .084)
}
.alertify .alert .msg,
.alertify .dialog .msg {
padding: 12px;
margin-bottom: 12px;
margin: 0;
text-align: left
}
.alertify .alert input:not(.form-control),
.alertify .dialog input:not(.form-control) {
margin-bottom: 15px;
width: 100%;
font-size: 100%;
padding: 12px
}
.alertify .alert input:not(.form-control):focus,
.alertify .dialog input:not(.form-control):focus {
outline-offset: -2px
}
.alertify .alert nav,
.alertify .dialog nav {
text-align: right
}
.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button),
.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button) {
background: transparent;
box-sizing: border-box;
color: rgba(0, 0, 0, .87);
position: relative;
outline: 0;
border: 0;
display: inline-block;
-ms-flex-align: center;
-ms-grid-row-align: center;
align-items: center;
padding: 0 6px;
margin: 6px 8px;
line-height: 36px;
min-height: 36px;
white-space: nowrap;
min-width: 88px;
text-align: center;
text-transform: uppercase;
font-size: 14px;
text-decoration: none;
cursor: pointer;
border: 1px solid transparent;
border-radius: 2px
}
.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):active,
.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):hover,
.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):active,
.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):hover {
background-color: rgba(0, 0, 0, .05)
}
.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):focus,
.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):focus {
border: 1px solid rgba(0, 0, 0, .1)
}
.alertify .alert nav button.btn,
.alertify .dialog nav button.btn {
margin: 6px 4px
}
.alertify-logs {
position: fixed;
z-index: 1
}
.alertify-logs.bottom,
.alertify-logs:not(.top) {
bottom: 16px
}
.alertify-logs.left,
.alertify-logs:not(.right) {
left: 16px
}
.alertify-logs.left>*,
.alertify-logs:not(.right)>* {
float: left;
transform: translateZ(0);
height: auto
}
.alertify-logs.left>.show,
.alertify-logs:not(.right)>.show {
left: 0
}
.alertify-logs.left>*,
.alertify-logs.left>.hide,
.alertify-logs:not(.right)>*,
.alertify-logs:not(.right)>.hide {
left: -110%
}
.alertify-logs.right {
right: 16px
}
.alertify-logs.right>* {
float: right;
transform: translateZ(0)
}
.alertify-logs.right>.show {
right: 0;
opacity: 1
}
.alertify-logs.right>*,
.alertify-logs.right>.hide {
right: -110%;
opacity: 0
}
.alertify-logs.top {
top: 0
}
.alertify-logs>* {
box-sizing: border-box;
transition: all .4s cubic-bezier(.25, .8, .25, 1);
position: relative;
clear: both;
backface-visibility: hidden;
perspective: 1000;
max-height: 0;
margin: 0;
padding: 0;
overflow: hidden;
opacity: 0;
pointer-events: none
}
.alertify-logs>.show {
margin-top: 12px;
opacity: 1;
max-height: 1000px;
padding: 12px;
pointer-events: auto
}
\ No newline at end of file
.ethglitch {
font-weight: bold; }
.headtimer {
display: block;
font-size: 34px; }
.headtimer a {
text-decoration: underline;
color: #f8f9fa;
font-weight: 400; }
[type=reset], [type=submit], button, html [type=button] {
-webkit-appearance: initial !important; }
#quotes {
display: none; }
#quotes.active {
display: block; }
.cprogress {
display: none; }
.cprogress .active {
display: initial; }
.distribution {
text-align: center; }
.distribution .lead {
font-size: 15px; }
.distribution .team {
border-right: 2px #565656 solid; }
.distribution .team:last-child {
border-right: 0; }
.distribution .team img {
width: 75%; }
.distribution .team p {
font-size: 12px; }
.skills {
font-size: 10px;
display: block;
text-align: left;
float: left;
width: 100%;
background: rgba(80, 88, 97, 0.62); }
.skills .perc {
float: right;
padding-right: 2px; }
.skills .label {
padding-left: 2px;
float: left; }
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
@import url(https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600);
.ghostframe {
background: #ededeb;
}
.ghostframe .title {
width: 600px;
margin: 0 auto;
text-align: center;
}
.ghostframe .title h1 {
margin: 30px 0px 0px 0px;
/* font-family: 'Source Sans Pro', sans-serif; */
font-weight: 400;
color: #3d3d3d;
}
.ghostframe .title h2 {
margin: 10px 0px 0px 0px;
font-size: 18px;
color: #8b8b8b;
font-weight: 400;
/* font-family: 'Source Sans Pro', sans-serif; */
}
.ghostframe .ui {
width: 900px;
margin: 0 auto;
margin-top: 50px;
/* font-family: 'Source Sans Pro', sans-serif; */
color: white;
box-shadow: none;
}
.ghostframe .ui ul {
margin: 0px 30px 10px 0px;
padding: 0;
list-style-type: none;
font-size: .8rem;
font-weight: 400;
line-height: 20px;
}
.ghostframe .ui .drop {
opacity: 0;
width: 300px;
height: 8rem;
background: #448f72;
position: absolute;
color: white;
/*! bottom: 200px; */
padding: 12px 30px 21px 30px;
transition-property: top, opacity;
transition-duration: 1s,1s;
top: 0rem;
}
.ghostframe .ui .drop p {
color: #f8fbfa;
}
.ghostframe .ui .drop-container {
opacity: 0;
width: 300px;
height: 10rem;
background: #448f72;
position: absolute;
color: white;
/*! bottom: 200px; */
padding: 12px 30px 21px 30px;
transition-property: top, opacity;
transition-duration: 1s;
top: 4rem;
}
.ghostframe .ui .drop-container p {
color: #f8fbfa;
}
.ghostframe .ui_box {
width: 300px;
height: 19rem;
position: relative;
background: #343a40;
float: left;
box-shadow: -1px 0px rgba(255, 255, 255, 0.07);
cursor: pointer;
transform: scale(1);
transition-property: transform, background;
transition-duration: 0.3s;
}
.ghostframe .ui_box__inner {
padding: 25px;
}
.ghostframe .ui_box__inner span {
font-size: 36px;
font-weight: 700;
}
.ghostframe .ui_box__inner .progress {
width: 100%;
margin-top: 10px;
height: 6px;
background: rgba(0, 0, 0, 0.3);
margin-bottom: 15px;
}
.ghostframe .ui_box__inner .progress_graph {
float: right;
border-bottom: 1px solid rgba(255, 255, 255, 0.09);
width: 85px;
text-align: center;
position: relative;
padding-left: 20px;
top: 24px;
}
.ghostframe .ui_box__inner .progress_graph__bar--1 {
width: 10px;
height: 20px;
background: #00a42a;
float: left;
margin-right: 10px;
position: relative;
bottom: -10px;
-webkit-animation: graph 1s;
}
.ghostframe .ui_box__inner .progress_graph__bar--2 {
width: 10px;
-webkit-animation: graph2 1s;
height: 30px;
float: left;
margin-right: 10px;
background: #00a42a;
}
.ghostframe .ui_box__inner .progress_graph__bar--3 {
width: 10px;
height: 24px;
margin-right: 10px;
-webkit-animation: graph3 1s;
background: #00a42a;
float: left;
position: relative;
bottom: -6px;
}
.ghostframe .ui_box__inner .progress_graph__bar--4 {
width: 10px;
height: 14px;
-webkit-animation: graph4 1s;
bottom: -16px;
position: relative;
background: #00a42a;
float: left;
}
.ghostframe .ui_box__inner .progress_bar {
height: 6px;
float: left;
width: 10%;
background: #00a42a;
-webkit-animation: bar 2s;
}
.ghostframe .ui_box__inner .progress_bar--two {
height: 6px;
float: left;
width: 78%;
background: #00a42a;
-webkit-animation: bar2 2s;
}
.ghostframe .ui_box h2 {
font-weight: normal;
font-size: 16px;
margin: -4px 0px 3px 0px;
}
.ghostframe .ui_box p {
font-size: 1rem;
color: #b6b6b6;
clear: left;
font-weight: 300;
/* width: 160px; */
margin: 2px 0px 15px 0px;
}
.ghostframe .ui_box i {
font-size: 3rem;
}
.ghostframe .ui_box span {
font-size: 3rem;
}
.ghostframe .ui_box:hover {
background: #4ba361;
transform: scale(1.1);
transition-property: transform, background;
transition-duration: 0.3s;
position: relative;
z-index: 1;
}
.ui_box:hover > .ui_box__inner p {
color: #b3dacb;
}
.ui_box:hover > .drop {
transition-property: top, opacity;
transition-duration: 1s,1s;
top: -7.8rem;
opacity: 1;
}
.ui_box:hover > .drop .droptext {
filter: text-shadow(0 0 2px #190019) drop-shadow(0 0 1px #494949) ;
-webkit-filter: text-shadow(0 0 2px #190019) drop-shadow(0 0 1px #494949) ;
}
.ui_box:hover > .drop .arrow {
transition-property: transform;
transition-duration: 1s;
transform: rotate(765deg);
}
.ui_box:hover > .ui_box__inner .progress_graph > div {
background: white;
}
.ui_box:hover > .ui_box__inner .progress .progress_bar, .ui_box:hover > .ui_box__inner .progress .progress_bar--two {
background: white;
}
.stat_left {
float: left;
}
.arrow {
width: 4px;
height: 4px;
transition-property: transform;
transition-duration: 1s;
transform: rotate(45deg);
-webkit-transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
border-top: 1px solid #cdead3;
border-right: 1px solid #cdead3;
float: right;
position: relative;
top: -24px;
right: 0px;
}
@keyframes bar {
from {
width: 0px;
}
to {
width: 58%;
}
}
@keyframes bar2 {
from {
width: 0px;
}
to {
width: 78%;
}
}
@keyframes graph {
from {
height: 0px;
}
to {
height: 20px;
}
}
@keyframes graph2 {
from {
height: 0px;
}
to {
height: 30px;
}
}
@keyframes graph3 {
from {
height: 0px;
}
to {
height: 24px;
}
}
@keyframes graph4 {
from {
height: 0px;
}
to {
height: 13px;
}
}
.ghosttron-spacing {
padding:0rem 0rem;
margin-bottom:0rem;
background-color:rgba(0, 0, 0, 0.0);
border-radius:.0;
}
<!doctype html>
<html lang="en">
<head>
<!-- metatags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#343a40">
<!-- SEO related -->
<meta name="description" content="Welcome to blockchain development. Your ICO is over, hype is drying up. Take the private keys, drain everything.">
<meta name="keywords" content="Ethereum, F3D+, Fomo3D, Proof of Weak Hands, P3D, PoWH3D, Cryptocurrency, ICO, Parody, Satire, Gambling, Jackpot, Lottery, Referral, Passive Income, UBI">
<meta name="author" content="Team JUST">
<!-- open graph -->
<meta property="og:title" content="F3D+: Your Personal Exit Scam">
<meta property="og:description" content="Welcome to blockchain development. Your ICO is over, hype is drying up. Take the private keys, drain everything.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://exitscam.me/">
<meta property="og:image" content="https://exitscam.me/img/og_logo.png">
<meta property="og:image:width" content="400">
<meta property="og:iamge:height" content="400">
<!-- icons -->
<link rel="apple-touch-icon" sizes="114x114" href="../img/apple-114.png">
<link rel="apple-touch-icon" sized="72x72" href="../img/apple-72.png">
<link rel="apple-touch-icon" href="../img/apple.png">
<!-- css -->
<link rel="stylesheet" href="./css/bootstrap.min.css">
<link rel="stylesheet" href="./css/custom.css">
<link rel="stylesheet" href="./css/alertify.css">
<link rel="stylesheet" href="./css/base.css">
<link rel="stylesheet" href="./css/ghostframe.css">
<link href="https://fonts.googleapis.com/css?family=Poppins:200,400" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.2.0.min.js"></script>
<!--
.d888 .d8888b. 888
d88P" d88P Y88b 888
888 .d88P 888
888888 .d88b. 88888b.d88b. .d88b. 8888" .d88888
888 d88""88b888 "888 "88bd88""88b "Y8b.d88" 888
888 888 888888 888 888888 888888 888888 888
888 Y88..88P888 888 888Y88..88PY88b d88PY88b 888
888 "Y88P" 888 888 888 "Y88P" "Y8888P" "Y88888
-->
<title>F3D Go</title>
</head>
<body>
<module-bash>
</module-bash>
<!-- <div class="blurryboy"></div> -->
<div id="main-wrapper">
<!-- navigation -->
<header class="topbar fixed-top">
<module-navbar>
</module-navbar>
</header>
<!-- /navigation -->
<!-- noscript message -->
<noscript>
<div class="row">
<div class="col">
<div class="alert alert-purp pulse text-center text-light" role="alert" style="margin-top:8rem;">Please enable Javascript to play F3D+</div>
</div>
</div>
</noscript>
<!-- /noscript -->
<!-- modal loading -->
<!-- toggle with jQuery('#loading').modal({backdrop: 'static', keyboard: false})
this makes it impossible to close modal by clicking outside the box -->
<div class="modal fade" id="loading" tabindex="-1" role="dialog" aria-hidden="true" style="z-index: 99999999;">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content bg-dark text-light">
<div class="modal-body" style="padding-top:1.5rem; padding-bottom:1.5rem;">
<div class="row justify-content-between">
<div class="col-auto">
Please check your Metamask...
</div>
<div class="col-2">
<div class="miniloader"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- /modal loading -->
<!-- modal vanity -->
<div class="modal fade" id="vanity" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content bg-dark text-light">
<div class="modal-body" style="padding-top:1.5rem; padding-bottom:1.5rem;">
<!-- Name chooser -->
<div class="row">
<div class="col">
<p class="lead nomarginb">Graffiti your name on the Blockchain</p>
</div>
<div class="col-auto">
<p class="text-right nomarginb">
<a href="#" class="closemodal">
<i class="fas fa-times"></i>
</a>
</p>
</div>
</div>
<hr>
<div class="row">
<div class="col">
<div class="row">
<div class="col">
<div class="input-group mb-3">
<div class="input-group-prepend">
<button class="btn btn-outline-yel" type="button" id="randomName">
Random
</button>
</div>
<input class="form-control text-center" type="text" placeholder="type here" id="nameInput">
</div>
</div>
</div>
<p class="small">
<br>
Names must follow these rules:<br>
-Must be unique<br>
-32 Characters or Less<br>
-A-Z (lowercase)<br>
-Name cannot be <i>just</i> numbers, but numbers are allowed<br>
-No special characters<br>
-No more than one space between characters<br>
<br>
If the transaction fails, one of these criteria was not met properly. <br>
<br>
Names are yours permanently (for vanity URLS). But only your most recent name will show up on the leaderboard/game UI. You can own as many names as you'd like.<br><br>
Make it good.
</p>
</div>
</div>
<div class="row">
<div class="col">
<button class="btn btn-purp btn-block btn-lg" id="namePurchase"><i class="fab fa-ethereum"></i> Purchase for 0.01 ETH</button>
<p style="font-size:0.7rem;color:#afafaf"> The fee is distributed across community members who made this game possible.</p>
</div>
</div>
<!-- /Name chooser -->
</div>
</div>
</div>
</div>
<!-- /modal vanity -->
<!--
<div id="quotes" class="topbar fixed-top text-light bg-dark jumboshade" style="z-index:99;">
<div class="container">
<div class="row">
<div class="col-auto">
<i class="fas fa-stopwatch"></i> <span class="boxtimer lead small">00:00:00</span>
</div>
<div class="col-auto yourkeys">
<i class="fas fa-key"></i> <span class="lead small">0000</span>
</div>
<div class="col col-2 yourrank">
<i class="fas fa-list-ol"></i> <span></span>
</div>
<div class="col afflink" if={$this.isCEO}>
<i class="fas fa-link"></i> <span class="lead small"></span>
</div>
<div class="col text-right">
<span class="lead small qTarget">Loading Memes</span>
</div>
</div>
</div> -->
</div>
<div id="spacer" class="spacer"></div>
<!-- main content (exchangeable) -->
<module-template>
</module-template>
<module-airdrop>
</module-airdrop>
<module-modal>
</module-modal>
<!-- /main content -->
</div>
<!-- phishing warning -->
<div class="modal" role="dialog" id="phishingWarning">
<div class="modal-dialog" role="document">
<div class="modal-content bg-dark text-light">
<div class="modal-header">
<h5 class="modal-title">Tips!</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<p>This is the short version of Fomo3D.</p>
<p>We designed a more exciting rules and the limitation of game duration is just 10 minutes.</p>
<p>And we do not reward the p3d holders.</p>
<hr>
<p>这里是Fomo3D短时间版本。</p>
<p>我们提供了更刺激的玩法,上限时间仅10分钟。</p>
<p>且我们将p3d持有者的奖励全部返还到奖池中。</p>
<p><a href="https://hackmd.io/s/ryFTfx-Em#">官方中文简易指南 https://hackmd.io/s/ryFTfx-Em</a> (Author: maojk#6803)</p>
<hr>
<p><a href="https://etherscan.io/address/0x0f90ef4e2526e3d1791862574f9fb26a0f39ec86#code">Contract Code</a></p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-block btn-lg btn-secondary btn-purp" data-dismiss="modal">Got it!</button>
</div>
</div>
</div>
</div>
<!-- owo -->
<div class="animation">
<img src="img/snorting_in_progress_pepe.png" height="150px">
</div>
<script src="https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js"></script>
<script src="js/alertify.js"></script>
<script src="js/bootstrap.bundle.js"></script>
<!-- <script src="js/bootstrap.min.js"></script> -->
<script src="js/fontawesome-all.min.js"></script>
<script>
if(!localStorage.getItem("seenWarning")){
// Start phishing warning on load
jQuery("#phishingWarning").modal()
localStorage.setItem("seenWarning", true)
}
// Vanity modal
jQuery(".vanity").click(function(){
jQuery('#vanity').modal()
})
jQuery(".closemodal").click(function(){
jQuery('#vanity').modal('hide')
})
// Random Name generator
jQuery('#randomName').click(function(){
jQuery('#nameInput').val(namegen.generate());
})
/* Switch for low graphics mode
if(window.localStorage.length > 0){
if(localStorage['fancy'] == "false"){
jQuery("#fancyswitch").prop("checked", false);
var toggled = false
}
else{
jQuery("#fancyswitch").prop("checked", true);
var toggled = true
}
}
function graphicslow(){
jQuery('#hdgraphics').toggle();
toggled = !toggled
localStorage.setItem('fancy', toggled);
}
// Switch to toggle tutorials
if(window.localStorage.length > 0){
if(localStorage['tutorials'] == "false"){
jQuery("#tutorialswitch").prop("checked", false);
var toggled2 = false
}
else{
jQuery("#tutorialswitch").prop("checked", true);
var toggled2 = true
}
}*/
</script>
<script src="js/bundle.js"></script >
</body>
</html>
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545,
gas: 75000000,
network_id: "*" // Match any network id
}
},
solc: {
optimizer: {
enabled: true,
runs: 200
}
}
};
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment