├── tron ├── tronbox-config.js ├── migrations │ ├── 1_initial_migration.js │ └── 2_deploy_contracts.js ├── tronWeb.js ├── contracts │ ├── Migrations.sol │ └── TRXED.sol └── tronbox.js ├── .idea ├── encodings.xml ├── misc.xml ├── modules.xml └── ProvablyFairTRX.iml ├── socket-io-server ├── .idea │ ├── encodings.xml │ ├── misc.xml │ ├── modules.xml │ ├── socket-io-server.iml │ └── workspace.xml ├── routes │ └── index.js ├── utils │ └── index.js ├── package.json ├── app.js └── package-lock.json ├── components ├── styles.css ├── FacebookSVG.js ├── TelegramSVG.js ├── TwitterSVG.js ├── LeaderBoard.js ├── DownArrowSVG.js ├── TrxIcon.js ├── AppBarCustom.js ├── AnimatedNum.js ├── BetAmountField.js ├── MainGrid.js ├── TableComponent.js ├── KenoIcon.js └── FistIcon.js ├── compile.js ├── server.js ├── package.json └── pages └── index.js /tron/tronbox-config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 3 | }; 4 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /socket-io-server/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /tron/migrations/1_initial_migration.js: -------------------------------------------------------------------------------- 1 | var Migrations = artifacts.require("./Migrations.sol"); 2 | 3 | module.exports = function(deployer) { 4 | deployer.deploy(Migrations); 5 | }; 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /socket-io-server/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /socket-io-server/routes/index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const router = express.Router(); 3 | router.get("/", (req, res) => { 4 | res.send({ response: "I am alive" }).status(200); 5 | }); 6 | module.exports = router; 7 | 8 | -------------------------------------------------------------------------------- /tron/tronWeb.js: -------------------------------------------------------------------------------- 1 | const TronWeb = require('tronweb') 2 | 3 | const tronWeb = new TronWeb( 4 | "http://127.0.0.1:8090", 5 | "http://127.0.0.1:8091", 6 | "http://127.0.0.1:8092", 7 | 'da146374a75310b9666e834ee4ad0866d6f4035967bfc76217c5a495fff9f0d0', 8 | ) -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /tron/migrations/2_deploy_contracts.js: -------------------------------------------------------------------------------- 1 | var TRXED = artifacts.require("./TRXED.sol"); 2 | 3 | module.exports = function(deployer) { 4 | deployer.deploy(TRXED); 5 | }; 6 | 7 | /* 8 | * TRXED: 9 | (base58) TPeEcxcNMvpbcnecjHo3mBpM9CMkzyA6gV 10 | (hex) 4195fb358afbf48450b4ce52aa76891c7adc808efa 11 | 12 | * */ -------------------------------------------------------------------------------- /socket-io-server/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /socket-io-server/utils/index.js: -------------------------------------------------------------------------------- 1 | 2 | const utils = { 3 | tronWeb: false, 4 | contract: false, 5 | 6 | async setTronWeb(tronWeb, contractAddress) { 7 | console.log('contractAddress', contractAddress) 8 | this.tronWeb = tronWeb; 9 | this.contract = await tronWeb.contract().at(contractAddress) 10 | }, 11 | 12 | }; 13 | 14 | export default utils; 15 | 16 | -------------------------------------------------------------------------------- /components/styles.css: -------------------------------------------------------------------------------- 1 | .App { 2 | font-family: sans-serif; 3 | text-align: center; 4 | } 5 | 6 | * { 7 | font-family: "Avenir", Helvetica, Arial, sans-serif; 8 | } 9 | 10 | span { 11 | font-size: 50px; 12 | } 13 | 14 | button { 15 | border: none; 16 | margin-left: 20px; 17 | padding: 10px; 18 | border-radius: 100px; 19 | } 20 | button:focus { 21 | outline: none; 22 | } 23 | -------------------------------------------------------------------------------- /socket-io-server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "socket-io-server", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.18.0", 13 | "express": "^4.16.4", 14 | "socket.io": "^2.2.0", 15 | "socket.io-client": "^2.2.0", 16 | "tronweb": "^2.1.31" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.idea/ProvablyFairTRX.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /socket-io-server/.idea/socket-io-server.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /compile.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const solc = require('solc'); 3 | const fs = require('fs-extra'); 4 | 5 | const buildPath = path.resolve(__dirname, 'build'); 6 | fs.removeSync(buildPath); 7 | 8 | const rollPath = path.resolve(__dirname, 'contracts', 'TRXED.sol'); 9 | const source = fs.readFileSync(rollPath, 'utf8'); 10 | const output = solc.compile(source, 1).contracts; 11 | 12 | fs.ensureDirSync(buildPath); 13 | 14 | for (let contract in output) { 15 | fs.outputJsonSync( 16 | path.resolve(buildPath, contract.replace(':', '') + '.json'), 17 | output[contract] 18 | ); 19 | } -------------------------------------------------------------------------------- /tron/contracts/Migrations.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.23; 2 | 3 | contract Migrations { 4 | address public owner; 5 | uint public last_completed_migration; 6 | 7 | constructor() public { 8 | owner = msg.sender; 9 | } 10 | 11 | modifier restricted() { 12 | if (msg.sender == owner) _; 13 | } 14 | 15 | function setCompleted(uint completed) public restricted { 16 | last_completed_migration = completed; 17 | } 18 | 19 | function upgrade(address new_address) public restricted { 20 | Migrations upgraded = Migrations(new_address); 21 | upgraded.setCompleted(last_completed_migration); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | const app = require('express')() 2 | const server = require('http').Server(app) 3 | const io = require('socket.io')(server) 4 | const next = require('next') 5 | 6 | const dev = process.env.NODE_ENV !=='production' 7 | const nextApp= next({dev}); 8 | const nextHandler = nextApp.getRequestHandler(); 9 | 10 | let port = 3001; 11 | 12 | io.on('connect', socket =>{ 13 | socket.emit('now', { 14 | message: 'zeit' 15 | }) 16 | }) 17 | 18 | nextApp.prepare().then(() => { 19 | 20 | app.get('*', (req, res)=>{ 21 | return nextHandler(req,res) 22 | }) 23 | 24 | server.listen(port, (err) ={ 25 | if(err){ 26 | 27 | console.log(`> Ready on http://localhost:${port}`) 28 | throw err 29 | } 30 | }) 31 | 32 | }) -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ProvablyFairTRX", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "dev": "node server.js", 9 | "build": "next dev" 10 | }, 11 | "start": "ng serve --host 0.0.0.0", 12 | "keywords": [], 13 | "author": "", 14 | "license": "ISC", 15 | "dependencies": { 16 | "@material-ui/core": "^3.8.3", 17 | "@material-ui/icons": "^3.0.2", 18 | "animated-number-react": "0.0.2", 19 | "express": "^4.16.4", 20 | "fs-extra": "^7.0.1", 21 | "material-ui": "^0.20.2", 22 | "next": "^7.0.2", 23 | "react": "^16.7.0", 24 | "react-dom": "^16.7.0", 25 | "socket.io": "^2.2.0", 26 | "socket.io-client": "^2.2.0", 27 | "solc": "^0.5.3", 28 | "styled-jsx": "^3.1.3", 29 | "tronbox": "^2.3.12", 30 | "tronweb": "^2.1.31" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /components/FacebookSVG.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | class FacebookIcon extends Component{ 3 | 4 | state= { 5 | color: "#bbcecc" 6 | }; 7 | 8 | 9 | mouseEnter = ()=>{ 10 | this.setState({color:"#37f1e2"}); 11 | }; 12 | 13 | mouseLeave = ()=>{ 14 | this.setState({color:'#bbcecc'}); 15 | }; 16 | 17 | render(){ 18 | return ( 19 | 28 | Facebook icon 29 | 30 | 31 | )}} 32 | 33 | export default FacebookIcon; -------------------------------------------------------------------------------- /tron/tronbox.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | networks: { 3 | development: { 4 | privateKey: '0bed40c9021ded4ac8ab1e42b36aa203df2fa0738b6da6afe6efdee5f57978be', 5 | consume_user_resource_percent: 30, 6 | fee_limit: 100000000, 7 | fullNode: "http://127.0.0.1:9090", 8 | solidityNode: "http://127.0.0.1:9090", 9 | eventServer: "http://127.0.0.1:9090", 10 | 11 | network_id: "*" 12 | }, 13 | mainnet: { 14 | // Don't put your private key here: 15 | privateKey: process.env.PK, 16 | consume_user_resource_percent: 30, 17 | fee_limit: 100000000, 18 | fullNode: "https://api.trongrid.io", 19 | solidityNode: "https://api.trongrid.io", 20 | eventServer: "https://api.trongrid.io", 21 | 22 | network_id: "*" 23 | }, 24 | shasta: { 25 | privateKey: '0bed40c9021ded4ac8ab1e42b36aa203df2fa0738b6da6afe6efdee5f57978be', 26 | consume_user_resource_percent: 30, 27 | fee_limit: 100000000, 28 | fullNode: "https://api.shasta.trongrid.io", 29 | solidityNode: "https://api.shasta.trongrid.io", 30 | eventServer: "https://api.shasta.trongrid.io", 31 | 32 | network_id: "*" 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /components/TelegramSVG.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | class TelegramIcon extends Component{ 3 | 4 | state= { 5 | color: "#bbcecc" 6 | }; 7 | 8 | 9 | mouseEnter = ()=>{ 10 | this.setState({color:"#37f1e2"}); 11 | }; 12 | 13 | mouseLeave = ()=>{ 14 | this.setState({color:'#bbcecc'}); 15 | }; 16 | 17 | render(){ 18 | return ( 19 | 28 | 29 | Telegram icon 30 | 31 | 32 | 33 | 35 | 36 | 37 | )}} 38 | 39 | export default TelegramIcon; 40 | -------------------------------------------------------------------------------- /components/TwitterSVG.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | class TwitterIcon extends Component{ 3 | 4 | state= { 5 | color: "#bbcecc" 6 | }; 7 | 8 | 9 | mouseEnter = ()=>{ 10 | this.setState({color:"#37f1e2"}); 11 | }; 12 | 13 | mouseLeave = ()=>{ 14 | this.setState({color:'#bbcecc'}); 15 | }; 16 | 17 | render(){ 18 | return ( 19 | 26 | Twitter icon 27 | 28 | 29 | )}} 30 | 31 | export default TwitterIcon; -------------------------------------------------------------------------------- /components/LeaderBoard.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const styles={ 4 | tableContainer:{}, 5 | table:{}, 6 | tableHover:{}, 7 | tableStriped:{} 8 | 9 | } 10 | 11 | 12 | function LeaderBoard() { 13 | return( 14 |
15 | 21 |

Global Leaderboard

22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
#Player NameWagered
1StormTRX1500 TRX
2JessieTRX1400 TRX
1BobbyTRX1250 TRX
49 |
50 | ) 51 | 52 | } 53 | 54 | export default LeaderBoard; -------------------------------------------------------------------------------- /components/DownArrowSVG.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | import Index from '../pages/index'; 3 | class DownArrowSVG extends Component{ 4 | 5 | 6 | constructor(props) { 7 | super(props); 8 | this.state= { 9 | rectHeight:this.props.arrowSize, 10 | 11 | }; 12 | 13 | } 14 | x=30; 15 | 16 | arrowStyle={ 17 | width:this.x, 18 | height:this.props.arrowSize+30, 19 | display: 'block', 20 | marginLeft: 'auto', 21 | marginRight: 'auto'} 22 | 23 | 24 | 25 | triangle ={ 26 | fill: 'transparent', 27 | stroke: 'white', 28 | strokeWidth: 8, 29 | transition: 'all 0.8s ease-in-out', 30 | } 31 | 32 | 33 | 34 | 35 | render(){ 36 | return( 37 |
42 |
43 | 44 | 45 | Sorry, your browser does not support inline SVG. 46 |
47 |
48 | 49 | 50 | Sorry, your browser does not support inline SVG. 51 | 52 |
53 |
54 | 55 | ) 56 | } 57 | } 58 | 59 | 60 | export default DownArrowSVG; -------------------------------------------------------------------------------- /components/TrxIcon.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const getViewBox = name => { 4 | switch (name) { 5 | case "phone": 6 | return "0 0 32 33"; 7 | case "message": 8 | return "0 0 38 34"; 9 | case "envelope": 10 | return "0 0 40 26"; 11 | case "trash": 12 | return "0 0 13.5 17.5"; 13 | case "wifi": 14 | return "0 0 12 9"; 15 | case "trx": 16 | return "0 0 236.1 271"; 17 | default: 18 | return "0 0 32 32"; 19 | } 20 | }; 21 | 22 | const styles = { 23 | st0: {fill:'none',stroke:'#ffffff',strokeWidth:15,strokeLinecap:'round',strokeMiterlimit:10}, 24 | st1: {fill:'none',stroke:'#ffffff',strokeWidth:17,strokeLinecap:'round',strokeMiterlimit:10}, 25 | 26 | } 27 | 28 | const TrxIcon = ({ 29 | name = "", 30 | style = {}, 31 | fill = "#ffffff", 32 | viewBox = "0 0 236.1 271", 33 | width = "100%", 34 | className = "", 35 | height = "100%" 36 | }) => ( 37 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | ); 56 | 57 | export default TrxIcon; -------------------------------------------------------------------------------- /components/AppBarCustom.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | import * as Colors from 'material-ui/styles/colors'; 3 | import MuiThemeProvider from '@material-ui/core/styles/MuiThemeProvider'; 4 | import createMuiTheme from '@material-ui/core/styles/createMuiTheme'; 5 | import AppBar from '@material-ui/core/AppBar'; 6 | import Typography from '@material-ui/core/Typography' 7 | import TrxIcon from '../components/TrxIcon'; 8 | import CarIcon from '../components/CarIcon'; 9 | import FistIcon from '../components/FistIcon'; 10 | import FacebookIcon from '../components/FacebookSVG'; 11 | import TwitterIcon from '../components/TwitterSVG'; 12 | import TelegramIcon from '../components/TelegramSVG'; 13 | import KenoIcon from '../components/KenoIcon'; 14 | const muiTheme = createMuiTheme ({ 15 | palette: { 16 | textColor: Colors.darkBlack, 17 | primary1Color: Colors.white, 18 | primary2Color: Colors.yellow50, 19 | accent1Color: Colors.redA200, 20 | pickerHeaderColor: Colors.darkBlack, 21 | alternateTextColor: Colors.redA200 22 | }, 23 | appBar: { 24 | height: 60, 25 | }, 26 | typography: { 27 | useNextVariants: true, 28 | }, 29 | }); 30 | 31 | export default (props) =>{ 32 | return( 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | Contract Balance = {Math.round(props.contractValue/1000000)} TRX 43 | 44 | 45 | 46 | 47 | 48 | {props.children} 49 | 50 | ); 51 | }; -------------------------------------------------------------------------------- /components/AnimatedNum.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import ReactDOM from "react-dom"; 3 | import AnimatedNumber from "animated-number-react"; 4 | 5 | import "./styles.css"; 6 | 7 | class App extends Component { 8 | state = { 9 | value: 150, 10 | duration: 300 11 | }; 12 | handleChangeValue = ({ target: { value } }) => { 13 | this.setState({ value }); 14 | }; 15 | handleChangeDuration = ({ target: { value } }) => { 16 | this.setState({ duration: value }); 17 | }; 18 | formatValue = value => `$ ${Number(value).toFixed(2)}`; 19 | render() { 20 | return ( 21 |
22 |
23 | 24 | 29 |
30 |
31 | 32 | 37 |
38 |
39 | 44 |
45 | 52 | 59 |
60 |
61 | ); 62 | } 63 | } 64 | 65 | const rootElement = document.getElementById("root"); 66 | ReactDOM.render(, rootElement); 67 | -------------------------------------------------------------------------------- /components/BetAmountField.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles} from '@material-ui/core/styles'; 4 | 5 | import TextField from '@material-ui/core/TextField'; 6 | 7 | import blueGrey from '@material-ui/core/colors/blueGrey'; 8 | 9 | 10 | const styles = theme => ({ 11 | container: { 12 | display: 'flex', 13 | flexWrap: 'wrap', 14 | width:300, 15 | float:'left' 16 | }, 17 | margin: { 18 | margin: theme.spacing.unit, 19 | }, 20 | cssLabel: { 21 | color:'white', 22 | '&$cssFocused': { 23 | color: 'grey', 24 | }, 25 | }, 26 | cssFocused: {}, 27 | cssUnderline: { 28 | '&:after': { 29 | borderBottomColor: 'grey', 30 | }, 31 | }, 32 | cssOutlinedInput: { 33 | '&$cssFocused $notchedOutline': { 34 | fontColor: 'white', 35 | borderColor: 'grey', 36 | }, 37 | }, 38 | notchedOutline: { borderColor: 'white'}, 39 | 40 | }); 41 | let value; 42 | class BetAmountField extends React.Component { 43 | constructor(props){ 44 | super(props) 45 | 46 | } 47 | 48 | 49 | 50 | 51 | render(){ 52 | const { classes } = this.props; 53 | 54 | return ( 55 | 56 |
57 | 65 | 87 |
88 | ); 89 | } 90 | } 91 | 92 | 93 | BetAmountField.propTypes = { 94 | onChange: PropTypes.func.isRequired, 95 | 96 | classes: PropTypes.object.isRequired, 97 | }; 98 | 99 | 100 | export default withStyles(styles)(BetAmountField); -------------------------------------------------------------------------------- /components/MainGrid.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | import {Paper,Button} from '@material-ui/core'; 3 | import DownArrowSVG from './DownArrowSVG.js' 4 | import Index from '../pages/index'; 5 | 6 | 7 | class MainGrid extends Component{ 8 | 9 | constructor(props) { 10 | super(props); 11 | this.state= { 12 | style:{ 13 | backgroundColor:'transparent', 14 | border: `2px solid ${this.props.mainColor}`, 15 | padding:20, 16 | marginTop: '8.98%', 17 | marginBottom:'8.98%', 18 | marginLeft:'16%', 19 | color:this.props.mainColor, 20 | width:'53.38%', 21 | transition: '0.3s', 22 | fontSize: 'x-large', 23 | pointerEvents: `${this.props.pointerEvent}` 24 | }, 25 | pointerEvents: `${this.props.pointerEvent}`, 26 | rand: 0, 27 | 28 | 29 | } 30 | 31 | } 32 | 33 | 34 | componentDidMount() { 35 | // if (this.state.pointerEvents === 'none'){ 36 | // let style = Object.assign({}, this.state.style); 37 | // style.pointerEvents = "all" 38 | // style.backgroundColor = this.props.mainColor; 39 | // style.color = 'black'; 40 | // this.setState({style}); 41 | // } else if (this.state.pointerEvents === 'all'){ 42 | // let style = Object.assign({}, this.state.style); 43 | // style.backgroundColor = 'transparent'; 44 | // style.color = this.props.mainColor; 45 | // this.setState({style}); 46 | // } 47 | 48 | } 49 | 50 | mouseEnter = ()=>{ 51 | let style = Object.assign({}, this.state.style); 52 | style.backgroundColor = this.props.mainColor; 53 | style.color = 'black'; 54 | this.setState({style}); 55 | } 56 | 57 | mouseLeave = ()=>{ 58 | let style = Object.assign({}, this.state.style); 59 | style.backgroundColor = 'transparent'; 60 | style.color = this.props.mainColor; 61 | this.setState({style}); 62 | } 63 | 64 | mouseClick = ()=>{ 65 | let style = Object.assign({}, this.state.style); 66 | style.pointerEvents = 'none'; 67 | this.setState({rand:0}) 68 | const min = 30; 69 | const max = 270; 70 | this.setState({rand:min + Math.random() * (max - min)}) 71 | this.props.callbackFromParent(this.props.value, false, this.state.pointerEvents,this.state.style.pointerEvents); 72 | 73 | 74 | } 75 | 76 | 77 | render(){ 78 | 79 | return( 80 | 85 | {this.props.value}x 86 | )} 87 | } 88 | export default MainGrid; 89 | 90 | 91 | -------------------------------------------------------------------------------- /components/TableComponent.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import Table from '@material-ui/core/Table'; 5 | import TableBody from '@material-ui/core/TableBody'; 6 | import TableCell from '@material-ui/core/TableCell'; 7 | import TableHead from '@material-ui/core/TableHead'; 8 | import TableRow from '@material-ui/core/TableRow'; 9 | import Paper from '@material-ui/core/Paper'; 10 | 11 | const styles = theme => ({ 12 | root: { 13 | width: '70%', 14 | marginTop: theme.spacing.unit * 3, 15 | // overflowX: 'auto', 16 | backgroundColor: 'transparent', 17 | borderColor:'transparent', 18 | margin: '0px auto', 19 | boxShadow: 'none' 20 | 21 | }, 22 | table: { 23 | minWidth: 50, 24 | fontFamily: 'cursive', 25 | fontSize: '100%', 26 | fontWeight: 'bold', 27 | color:'yellow' 28 | 29 | }, 30 | LetsTest:{ 31 | display: 'table-cell', 32 | padding: '0', 33 | textAlign: 'left', 34 | borderBottom: '0px', 35 | verticalAlign: 'inherit', 36 | color:'yellow' 37 | }, 38 | }); 39 | let id = 0; 40 | class SimpleTable extends Component{ 41 | constructor(props){ 42 | super(props); 43 | this.state ={ 44 | rows:props.values 45 | } 46 | } 47 | 48 | 49 | createData = (name, amount, color) => { 50 | id += 1; 51 | return { id, name, amount,color}; 52 | } 53 | 54 | rowData = ()=>{ 55 | if (this.state.rows === undefined || this.state.rows === null){ 56 | return( 57 | 58 | ) 59 | } else{ 60 | return (this.state.rows.map(row => ( 61 | 62 | 63 | {row.name} 64 | 65 | {row.betValue} 66 | 67 | ))) 68 | 69 | } 70 | } 71 | 72 | // render() { 73 | // 74 | // 75 | // } 76 | render(){ 77 | const { classes } = this.props; 78 | const rows = [ 79 | this.createData('StormTRX', 500, 'yellow'), 80 | this.createData('JoTRX', 1000, 'yellow'), 81 | this.createData('JessieTRX', 25,'yellow'), 82 | ]; 83 | 84 | 85 | return ( 86 | 87 | 88 | 89 | 90 | {/*{this.state.rows.map(row => (*/} 91 | {/**/} 92 | {/**/} 93 | {/*{row.name}*/} 94 | {/**/} 95 | {/*{row.betValue}*/} 96 | {/**/} 97 | {/*))}*/} 98 | {this.rowData} 99 | 100 |
101 |
102 | ); 103 | 104 | } 105 | 106 | } 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | // function SimpleTable(props) { 117 | // const { classes } = props; 118 | // {/**/} 122 | // return ( 123 | // 124 | // 125 | // 126 | // 127 | // {rows.map(row => ( 128 | // 129 | // 130 | // {row.name} 131 | // 132 | // {row.amount} 133 | // 134 | // ))} 135 | // 136 | //
137 | //
138 | // ); 139 | // } 140 | 141 | SimpleTable.propTypes = { 142 | classes: PropTypes.object.isRequired, 143 | }; 144 | 145 | export default withStyles(styles)(SimpleTable); -------------------------------------------------------------------------------- /tron/contracts/TRXED.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.20; 2 | contract TRXED { 3 | uint public lastBlock; 4 | uint winningNum; 5 | address[] accounts; 6 | mapping(string => uint) luckyNum; 7 | mapping(address => uint) balances; 8 | address[] twoMultiplyer; 9 | address[] threeMultiplyer; 10 | address[] fiveMultiplyer; 11 | address[] fiftyMultiplyer; 12 | address[] allBets; 13 | 14 | struct betType{ 15 | uint betChosen; 16 | uint256 value; 17 | } 18 | mapping (uint => bool) twoMultiplyerValue; 19 | mapping (uint => bool) threeMultiplyerValue; 20 | mapping (uint => bool) fiveMultiplyerValue; 21 | mapping (uint => bool) fiftyMultiplyerValue; 22 | mapping(address => betType[]) userBets; 23 | 24 | event Transfer(address indexed from, address indexed to, uint256 value); 25 | event RandResult(uint256 value, string color); 26 | 27 | constructor()public{ //Runs only at creation 28 | for (uint i = 1;i<52;i++){ 29 | if(i % 2 ==0){ 30 | twoMultiplyerValue[i] = true; 31 | } 32 | } 33 | 34 | fiftyMultiplyerValue[0] =true; 35 | fiftyMultiplyerValue[52] =true; 36 | for ( i = 1;i<52;i+=10){ 37 | fiveMultiplyerValue[i] = true; 38 | } 39 | for ( i = 7;i<52;i+=10){ 40 | fiveMultiplyerValue[i] = true; 41 | } 42 | for (i = 1;i<52;i++){ 43 | if(!((twoMultiplyerValue[i]==true) || (fiveMultiplyerValue[i]==true) || (fiftyMultiplyerValue[i]==true))){ 44 | threeMultiplyerValue[i] =true; 45 | } 46 | 47 | } 48 | 49 | 50 | lastBlock = block.number; 51 | } 52 | 53 | function PlaceBet(uint256 _betAmount,uint _betChosen) public payable{ 54 | require(msg.value == _betAmount); 55 | betType memory placeBet = betType({ 56 | betChosen: _betChosen, 57 | value: _betAmount 58 | }); 59 | if(_betChosen == 2){ 60 | twoMultiplyer.push(msg.sender); 61 | 62 | } else if(_betChosen == 3){ 63 | threeMultiplyer.push(msg.sender); 64 | 65 | } else if(_betChosen == 5){ 66 | fiveMultiplyer.push(msg.sender); 67 | 68 | } else if(_betChosen == 50){ 69 | fiftyMultiplyer.push(msg.sender); 70 | 71 | } 72 | allBets.push(msg.sender); 73 | userBets[msg.sender].push(placeBet); 74 | 75 | } 76 | //3000000000000000000 77 | function _generateRandNum()private returns (uint){ 78 | uint randomnumber = uint(sha256(abi.encodePacked(now, msg.sender, lastBlock))) % 76; 79 | lastBlock++; 80 | if(randomnumber >52){ 81 | lastBlock++; 82 | uint randomnumber2 = uint(sha256(abi.encodePacked(now, msg.sender, lastBlock))) % 76; 83 | 84 | if(randomnumber2>52){ 85 | if(randomnumber>randomnumber2){ 86 | randomnumber = randomnumber - randomnumber2; 87 | } else{ 88 | randomnumber = randomnumber2 - randomnumber; 89 | } 90 | return(randomnumber); 91 | } else{ 92 | return(randomnumber2); 93 | } 94 | } 95 | 96 | return(randomnumber); 97 | } 98 | 99 | function generateRandNum() public returns(uint, string){ 100 | winningNum = _generateRandNum(); 101 | string memory color; 102 | if(twoMultiplyerValue[winningNum]){ 103 | color = "Grey"; 104 | }else if(threeMultiplyerValue[winningNum]){ 105 | color = "Red"; 106 | } else if(fiveMultiplyerValue[winningNum]){ 107 | color = "Blue"; 108 | }else if(fiftyMultiplyerValue[winningNum]){ 109 | color = "Gold"; 110 | } 111 | return (winningNum, color) ; 112 | } 113 | 114 | function payWinners() public returns (uint){ 115 | uint i; 116 | uint j; 117 | if (twoMultiplyerValue[winningNum]){ 118 | for( i = 0; i0); 164 | } 165 | 166 | function returnContractBalance () public view returns(uint256){ 167 | return address(this).balance; 168 | } 169 | 170 | 171 | } -------------------------------------------------------------------------------- /socket-io-server/.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 42 | 43 | 44 | 51 | 52 | 53 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 1548241655635 92 | 103 | 104 | 105 | 106 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | -------------------------------------------------------------------------------- /components/KenoIcon.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | 3 | 4 | class KenoIcon extends Component{ 5 | 6 | 7 | render(){ 8 | return ( 9 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | )}} 35 | 36 | export default KenoIcon; -------------------------------------------------------------------------------- /socket-io-server/app.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const http = require("http"); 3 | const socketIo = require("socket.io"); 4 | const axios = require("axios"); 5 | const port = process.env.PORT || 4001; 6 | const index = require("./routes/index"); 7 | const app = express(); 8 | app.use(index); 9 | const server = http.createServer(app); 10 | const io = socketIo(server); 11 | const contractAdd = 'TRkUGYSyKp2NUsHGZUvSEWTc63Atbv8i7G'; 12 | const TronWeb = require("tronweb") ; 13 | const Utils = { 14 | tronWeb: false, 15 | contract: false, 16 | 17 | async setTronWeb(tronWeb, contractAddress) { 18 | console.log('contractAddress', contractAddress) 19 | this.tronWeb = tronWeb; 20 | this.contract = await tronWeb.contract().at(contractAddress) 21 | }, 22 | 23 | }; 24 | /* TRXED: 25 | (base58) TRkUGYSyKp2NUsHGZUvSEWTc63Atbv8i7G 26 | (hex) 41ad195969012e704db0485e5e69683773af86b7a9 27 | */ 28 | 29 | 30 | let timer = 10; 31 | let randColor ; 32 | let randNumber; 33 | let newArray= []; 34 | const min = 30; 35 | const max = 267; 36 | let availJoin; 37 | let num; 38 | let timerInterval; 39 | let readyClient = 0 40 | const TRONGRID_API = "https://api.shasta.trongrid.io"; 41 | 42 | 43 | // function getNum(){ 44 | // io.sockets.emit('FromAPI', 'Preparing') 45 | // return Utils.contract.generateRandNum().send({ 46 | // shouldPollResponse: true, 47 | // callValue:0 48 | // }) 49 | // } 50 | async function getNum(){ 51 | const min = 30; 52 | const max = 267; 53 | 54 | await await Utils.contract.generateRandNum().send({ 55 | shouldPollResponse: true, 56 | callValue:0 57 | }).then(res => { 58 | randColor = res[1].toString(); 59 | console.log(randColor); 60 | if(randColor === "Grey"){ 61 | randNumber = 1; 62 | }else if (randColor === "Red"){ 63 | randNumber = 2; 64 | }else if (randColor === "Blue"){ 65 | randNumber = 3; 66 | } else if (randColor === "Gold"){ 67 | randNumber = 4; 68 | } 69 | 70 | if(randNumber === 1){ 71 | newArray[0]=267; 72 | newArray[1]=min + Math.random() * (max - min); 73 | newArray[2]=min + Math.random() * (max - min); 74 | newArray[3]=min + Math.random() * (max - min); 75 | } else if (randNumber === 2){ 76 | newArray[0]=min + Math.random() * (max - min); 77 | newArray[1]=267; 78 | newArray[2]=min + Math.random() * (max - min); 79 | newArray[3]=min + Math.random() * (max - min); 80 | }else if (randNumber === 3){ 81 | newArray[0]=min + Math.random() * (max - min); 82 | newArray[1]=min + Math.random() * (max - min); 83 | newArray[2]=267; 84 | newArray[3]=min + Math.random() * (max - min); 85 | }else if (randNumber === 4){ 86 | newArray[0]=min + Math.random() * (max - min); 87 | newArray[1]=min + Math.random() * (max - min); 88 | newArray[2]=min + Math.random() * (max - min); 89 | newArray[3]=267; 90 | } 91 | }) 92 | } 93 | async function payWinners(){ 94 | await Utils.contract.payWinners().send({ 95 | shouldPollResponse:true, 96 | callValue:0 97 | }).then(res =>{ 98 | console.log(res) 99 | } ) 100 | } 101 | async function start(){ 102 | availJoin = false 103 | const HttpProvider = TronWeb.providers.HttpProvider; 104 | const fullNode = new HttpProvider(TRONGRID_API); // Full node http endpoint 105 | const solidityNode = new HttpProvider(TRONGRID_API); // Solidity node http endpoint 106 | const eventServer = new HttpProvider(TRONGRID_API); // Contract events http endpoint 107 | const privateKey = '0bed40c9021ded4ac8ab1e42b36aa203df2fa0738b6da6afe6efdee5f57978be'; 108 | const tronWeb = new TronWeb( 109 | fullNode, 110 | solidityNode, 111 | eventServer, 112 | privateKey 113 | ); 114 | 115 | await Utils.setTronWeb(tronWeb, contractAdd).then(() => { 116 | getNum().then(async () => { 117 | timerInterval = setInterval( 118 | async() => { 119 | await timerGo() 120 | },20); 121 | }); 122 | }); 123 | io.on("connection", socket => { 124 | console.log("connection") 125 | socket.on('done', async() => { 126 | console.log(readyClient) 127 | readyClient++; 128 | if(readyClient === 1){ 129 | await payWinners().then(() =>{ 130 | io.sockets.emit('Reset'); 131 | getNum().then(() =>{ 132 | timer = 10 133 | timerInterval = setInterval( 134 | async() => { 135 | await timerGo() 136 | },20); 137 | }); 138 | }) 139 | 140 | 141 | } 142 | }) 143 | }) 144 | 145 | //.then(res =>(console.log(res))); 146 | 147 | 148 | 149 | // io.on("connection",async socket => { 150 | // 151 | // 152 | // 153 | // 154 | // 155 | // 156 | // 157 | // let luckyNum = await getLuckyNum(); 158 | // await luckyNum.then((result) => { 159 | // console.log(result); 160 | // 161 | // }); 162 | // 163 | // console.log('connected') 164 | // const timerT = setInterval( 165 | // () => 166 | // timerGo(socket), 167 | // 10 168 | // ); 169 | // socket.on("Go",()=> { LetsDoIt(socket)}); 170 | // 171 | // io.emit('broadcast', newArray,true)}); 172 | // Utils.tronWeb.getEventResult(contractAdd, { 173 | // eventName:'RandResult', 174 | // page: 2 175 | // }).then(result => { 176 | // socket.emit("FromAPI", result); 177 | // }) 178 | // socket.on("disconnect", () => console.log("Client disconnected")); 179 | // }); 180 | } 181 | 182 | const timerStopTronGo = async () => { 183 | clearInterval(timerInterval); 184 | io.sockets.emit('GotNums', newArray, true); 185 | 186 | // socket.on("done", () => { 187 | // timer = 10; 188 | // timerInterval = setInterval( 189 | // async() => { 190 | // await timerGo() 191 | // },20); 192 | // }) 193 | //console.log(num); 194 | 195 | }; 196 | 197 | const timerGo = async() => { 198 | 199 | try { 200 | 201 | if (timer === 0 || timer < 0) { 202 | io.sockets.emit('FromAPI',true); 203 | timerStopTronGo(); 204 | 205 | 206 | } 207 | 208 | else { 209 | readyClient = 0 210 | timer = timer - 0.01; 211 | console.log(timer.toFixed(2)) 212 | io.sockets.emit('FromAPI', timer.toFixed(2),true) 213 | 214 | } 215 | } catch (error) { 216 | console.error(`Error: ${error.code}`); 217 | } 218 | }; 219 | const LetsGo = async() => { 220 | 221 | await Utils.contract.generateRandNum().send({ 222 | shouldPollResponse: true, 223 | callValue:0 224 | }).then(res=>{ 225 | // let complete = res[0].toNumber() + ' '+res[1].toString(); 226 | randColor = res[1].toString(); 227 | if(randColor === "Grey"){ 228 | randNumber = 1; 229 | }else if (randColor === "Red"){ 230 | randNumber = 2; 231 | }else if (randColor === "Blue"){ 232 | randNumber = 3; 233 | } else if (randColor === "Gold"){ 234 | randNumber = 4; 235 | } 236 | 237 | if(randNumber === 1){ 238 | newArray[0]=267; 239 | newArray[1]=min + Math.random() * (max - min); 240 | newArray[2]=min + Math.random() * (max - min); 241 | newArray[3]=min + Math.random() * (max - min); 242 | } else if (randNumber === 2){ 243 | newArray[0]=min + Math.random() * (max - min); 244 | newArray[1]=267; 245 | newArray[2]=min + Math.random() * (max - min); 246 | newArray[3]=min + Math.random() * (max - min); 247 | }else if (randNumber === 3){ 248 | newArray[0]=min + Math.random() * (max - min); 249 | newArray[1]=min + Math.random() * (max - min); 250 | newArray[2]=267; 251 | newArray[3]=min + Math.random() * (max - min); 252 | }else if (randNumber === 4){ 253 | newArray[0]=min + Math.random() * (max - min); 254 | newArray[1]=min + Math.random() * (max - min); 255 | newArray[2]=min + Math.random() * (max - min); 256 | newArray[3]=267; 257 | } 258 | 259 | //socket.emit("LuckyWinner", newArray, true); 260 | 261 | }).catch(err =>{ 262 | console.log(err) 263 | }); 264 | 265 | } 266 | 267 | start(); 268 | server.listen(port,'0.0.0.0', () => console.log(`Listening on port ${port}`)); 269 | 270 | -------------------------------------------------------------------------------- /pages/index.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | import {Grid,Divider} from "@material-ui/core"; 3 | import MainGrid from '../components/MainGrid'; 4 | import DownArrowSVG from '../components/DownArrowSVG' 5 | import People from '@material-ui/icons/People'; 6 | import AppBarCustom from "../components/AppBarCustom"; 7 | import TrxIcon from '../components/TrxIcon'; 8 | import Typography from "@material-ui/core/Typography"; 9 | import BetAmountField from '../components/BetAmountField'; 10 | import socketIOClient from "socket.io-client"; 11 | import Utils from '../utils/index'; 12 | import AnimatedNumber from "animated-number-react"; 13 | 14 | const styles = { 15 | Paper: {padding:20, marginTop: 10, marginBottom:10, marginLeft:10}, 16 | GridCon: { height:'52vh', width: '100%'}, 17 | imgStyle:{display: 'block', 18 | marginLeft: 'auto', 19 | marginRight: 'auto', 20 | width:160, 21 | height:160 22 | } 23 | }; 24 | 25 | 26 | const FOUNDATION_ADDRESS = 'TLYw2bgCDqHrMFVAcv6GnYMXPwfwcbhxLs'; 27 | 28 | const socket = socketIOClient("http://192.168.0.138:4001"); 29 | const dimStyle = { 30 | width: '100%', 31 | pointerEvents: 'none', 32 | filter: 'brightness(50%)', 33 | transition: '0.3s' 34 | }; 35 | const normStyle = { 36 | width: '100%', 37 | transition: '0.3s' 38 | } 39 | const contractAddress = 'TRkUGYSyKp2NUsHGZUvSEWTc63Atbv8i7G'; 40 | const constColor = 'rgb(152, 152, 152)'; 41 | const winColor = 'lime'; 42 | const looseColor = '#ff5d5d'; 43 | 44 | let balanceBefore; 45 | let balacnceAfter; 46 | let didPlay; 47 | class Index extends Component{ 48 | 49 | constructor(props) { 50 | super(props); 51 | this.state= { 52 | buttonStyle:normStyle, 53 | betAmount: '', 54 | whiteArrow:0, 55 | redArrow:0, 56 | blueArrow:0, 57 | yellowArrow: 0, 58 | arrowColor1: 'lime', 59 | arrowColor2: 'lime', 60 | arrowColor3: 'lime', 61 | arrowColor4: 'lime', 62 | arrayData:[0,0,0,0], 63 | response: false, 64 | endpoint: "http://127.0.0.1:4001", 65 | functionRun:false, 66 | randWinner: '', 67 | payWinners: false, 68 | tronwebaddress:'', 69 | tronWeb: { 70 | installed: false, 71 | loggedIn: false, 72 | trxBalance: 0, 73 | contractValue:0, 74 | balanceColor:constColor 75 | } 76 | }; 77 | this.ArrowCallback = this.ArrowCallback.bind(this); 78 | this.PlaceBet = this.PlaceBet.bind(this); 79 | } 80 | 81 | async componentDidMount() { 82 | //TRONLINK TRX 83 | //------------------------------------------------------------------------------------------------------------- 84 | 85 | let TRX_BAL = 0; 86 | this.setState({loading:true}) 87 | await new Promise(resolve => { 88 | const tronWebState = { 89 | installed: !!window.tronWeb, 90 | loggedIn: window.tronWeb && window.tronWeb.ready 91 | }; 92 | 93 | if(tronWebState.installed) { 94 | this.setState({ 95 | tronWeb: 96 | tronWebState 97 | }); 98 | 99 | return resolve(); 100 | } 101 | 102 | let tries = 0; 103 | 104 | const timer = setInterval(() => { 105 | if(tries >= 10) { 106 | const TRONGRID_API = "https://api.shasta.trongrid.io"; 107 | 108 | window.tronWeb = TronWeb( 109 | TRONGRID_API, 110 | TRONGRID_API, 111 | TRONGRID_API 112 | ); 113 | 114 | this.setState({ 115 | tronWeb: { 116 | installed: false, 117 | loggedIn: false 118 | } 119 | }); 120 | 121 | clearInterval(timer); 122 | return resolve(); 123 | } 124 | 125 | tronWebState.installed = !!window.tronWeb; 126 | tronWebState.loggedIn = window.tronWeb && window.tronWeb.ready; 127 | 128 | if(!tronWebState.installed) 129 | return tries++; 130 | 131 | this.setState({ 132 | tronWeb: tronWebState 133 | }); 134 | 135 | resolve(); 136 | }, 100); 137 | }); 138 | 139 | if(!this.state.tronWeb.loggedIn) { 140 | // Set default address (foundation address) used for contract calls 141 | // Directly overwrites the address object as TronLink disabled the 142 | // function call 143 | window.tronWeb.defaultAddress = { 144 | hex: window.tronWeb.address.toHex(FOUNDATION_ADDRESS), 145 | base58: FOUNDATION_ADDRESS 146 | }; 147 | 148 | window.tronWeb.on('addressChanged', async() => { 149 | const tmp_tronwebaddress = Utils.tronWeb.address.fromHex(((await Utils.tronWeb.trx.getAccount()).address).toString()) 150 | await this.setState({tronwebaddress : tmp_tronwebaddress}); 151 | 152 | // console.log("tmp_tronwebaddress", tmp_tronwebaddress); 153 | TRX_BAL =await Utils.tronWeb.trx.getBalance(tmp_tronwebaddress); 154 | await this.setState({trxBalance: TRX_BAL}); 155 | if(this.state.tronWeb.loggedIn) 156 | return; 157 | 158 | this.setState({ 159 | tronWeb: { 160 | installed: true, 161 | loggedIn: true 162 | } 163 | }); 164 | }); 165 | } 166 | 167 | await Utils.setTronWeb(window.tronWeb, contractAddress); 168 | const tmp_tronwebaddress = Utils.tronWeb.address.fromHex(((await Utils.tronWeb.trx.getAccount()).address).toString()) 169 | await this.setState({tronwebaddress : tmp_tronwebaddress}); 170 | 171 | console.log("tmp_tronwebaddress", tmp_tronwebaddress); 172 | // -------------------------------------------------------------------------------------------------------------------- 173 | TRX_BAL =await Utils.tronWeb.trx.getBalance(tmp_tronwebaddress); 174 | await this.setState({trxBalance: TRX_BAL}); 175 | console.log(TRX_BAL); 176 | 177 | let CONTRACT_BAL = await tronWeb.trx.getBalance("TRkUGYSyKp2NUsHGZUvSEWTc63Atbv8i7G"); 178 | await this.setState({contractValue: CONTRACT_BAL}); 179 | console.log(CONTRACT_BAL); 180 | 181 | // const { endpoint } = this.state; 182 | // const socket = socketIOClient(endpoint); 183 | socket.on("FromAPI", (data,dim) =>{ 184 | this.setState({ response: data }); 185 | 186 | if(dim === true){ 187 | this.setState({buttonStyle : normStyle}); 188 | this.setState({balanceColor: constColor}); 189 | } 190 | if (this.state.response=== true ){ 191 | this.setState({response: "Lets Race!"}) 192 | this.setState({buttonStyle : dimStyle}); 193 | } 194 | }); 195 | 196 | // socket.on("GotNums", data => this.setState({ arrayData: data })); 197 | // socket.on("FromAPI", (data) => {console.log(data)}) 198 | socket.on("GotNums", (data,bool) => { 199 | this.setState({ arrayData: data, functionRun: bool }); 200 | console.log(data, bool) 201 | if(bool){ 202 | this.ArrowCallback(socket); 203 | } 204 | }); 205 | socket.on('Reset', async () => { 206 | // TRX_BAL = Utils.tronWeb.trx.getBalance(tmp_tronwebaddress); 207 | // this.setState({trxBalance: TRX_BAL}); 208 | console.log('reset') 209 | TRX_BAL =await Utils.tronWeb.trx.getBalance(tmp_tronwebaddress); 210 | console.log(balanceBefore) 211 | console.log(TRX_BAL); 212 | if(didPlay){ 213 | if(balanceBefore> TRX_BAL){ 214 | this.setState({balanceColor: looseColor}); 215 | } else{ 216 | this.setState({balanceColor:winColor }); 217 | } 218 | } 219 | await this.setState({trxBalance: TRX_BAL}); 220 | CONTRACT_BAL = await tronWeb.trx.getBalance("TRkUGYSyKp2NUsHGZUvSEWTc63Atbv8i7G"); 221 | await this.setState({contractValue: CONTRACT_BAL}); 222 | console.log(CONTRACT_BAL) 223 | this.setState({response: "Preparing"}); 224 | balanceBefore=0; 225 | balacnceAfter=0; 226 | didPlay=false; 227 | clearInterval(this.intervalW);clearInterval(this.intervalR);clearInterval(this.intervalB);clearInterval(this.intervalY); 228 | this.setState({arrowColor1:'lime',arrowColor2:'lime',arrowColor3:'lime',arrowColor4:'lime'}); 229 | this.setState({whiteArrow:0,redArrow:0,blueArrow:0,yellowArrow:0}); 230 | }) 231 | 232 | 233 | 234 | } 235 | 236 | randNum(socket){ 237 | // let newArray=[]; 238 | // const min = 30; 239 | // const max = 267; 240 | // let randWinner; 241 | // console.log(this.state.randWinner); 242 | // if(this.state.randWinner === "Grey"){ 243 | // randWinner = 1; 244 | // }else if (this.state.randWinner === "Red"){ 245 | // randWinner = 2; 246 | // }else if (this.state.randWinner === "Blue"){ 247 | // randWinner = 3; 248 | // } else if (this.state.randWinner === "Gold"){ 249 | // randWinner = 4; 250 | // } 251 | // 252 | // if(randWinner === 1){ 253 | // newArray[0]=267; 254 | // newArray[1]=min + Math.random() * (max - min); 255 | // newArray[2]=min + Math.random() * (max - min); 256 | // newArray[3]=min + Math.random() * (max - min); 257 | // } else if (randWinner === 2){ 258 | // newArray[0]=min + Math.random() * (max - min); 259 | // newArray[1]=267; 260 | // newArray[2]=min + Math.random() * (max - min); 261 | // newArray[3]=min + Math.random() * (max - min); 262 | // }else if (randWinner === 3){ 263 | // newArray[0]=min + Math.random() * (max - min); 264 | // newArray[1]=min + Math.random() * (max - min); 265 | // newArray[2]=267; 266 | // newArray[3]=min + Math.random() * (max - min); 267 | // }else if (randWinner === 4){ 268 | // newArray[0]=min + Math.random() * (max - min); 269 | // newArray[1]=min + Math.random() * (max - min); 270 | // newArray[2]=min + Math.random() * (max - min); 271 | // newArray[3]=267; 272 | // } 273 | 274 | 275 | //this.setState({arrayData:newArray}); 276 | this.intervalW = setInterval(() =>this.tickWhite(this.state.whiteArrow, 265,'whiteArrow', socket),50); 277 | this.intervalR = setInterval(() =>this.tickRed(this.state.redArrow, 115,'redArrow', socket),50); 278 | this.intervalB = setInterval(() =>this.tickBlue(this.state.blueArrow, 180,'blueArrow', socket),50); 279 | this.intervalY = setInterval(() =>this.tickYellow(this.state.yellowArrow, 245,'yellowArrow', socket),50) 280 | } 281 | 282 | tickWhite(arrow,data,name, socket){ 283 | if (this.state.arrayData[0]>arrow){ 284 | this.setState({[name]:arrow+2}); 285 | }else{ 286 | if(this.state.arrayData[0] !== 267){ 287 | this.setState({arrowColor1:'#ff5d5d'}) 288 | } 289 | if(this.state.arrayData[0] === 267){ 290 | 291 | socket.emit('done') 292 | this.setState({payWinners: false}) 293 | console.log('done done') 294 | 295 | console.log("done") 296 | } 297 | clearInterval(this.intervalW); 298 | 299 | } 300 | } 301 | tickRed(arrow,data,name, socket){ 302 | if (this.state.arrayData[1]>arrow){ 303 | this.setState({[name]:arrow+2}); 304 | }else{ 305 | if(this.state.arrayData[1] !== 267){ 306 | this.setState({arrowColor2:'#ff5d5d'}) 307 | } 308 | if(this.state.arrayData[1] === 267){ 309 | 310 | socket.emit('done') 311 | this.setState({payWinners: false}) 312 | console.log('done done') 313 | 314 | 315 | console.log("done") 316 | } 317 | clearInterval(this.intervalR); 318 | 319 | } 320 | } 321 | tickBlue(arrow,data,name, socket){ 322 | if (this.state.arrayData[2]>arrow){ 323 | this.setState({[name]:arrow+2}); 324 | }else{ 325 | if(this.state.arrayData[2] !== 267){ 326 | this.setState({arrowColor3:'#ff5d5d'}) 327 | } 328 | if(this.state.arrayData[2] === 267){ 329 | socket.emit('done') 330 | this.setState({payWinners: false}) 331 | console.log('done done') 332 | 333 | 334 | console.log("done") 335 | } 336 | clearInterval(this.intervalB); 337 | 338 | } 339 | } 340 | tickYellow(arrow,data,name, socket){ 341 | if (this.state.arrayData[3]>arrow){ 342 | this.setState({[name]:arrow+2}); 343 | 344 | }else{ 345 | if(this.state.arrayData[3] !== 267){ 346 | this.setState({arrowColor4:'#ff5d5d'}) 347 | } 348 | if(this.state.arrayData[3] === 267){ 349 | socket.emit('done') 350 | this.setState({payWinners: false}) 351 | console.log('done done') 352 | 353 | 354 | console.log("done") 355 | } 356 | clearInterval(this.intervalY); 357 | 358 | } 359 | } 360 | 361 | ArrowCallback(socket){ 362 | this.setState({arrowColor1:'lime',arrowColor2:'lime',arrowColor3:'lime',arrowColor4:'lime'}); 363 | clearInterval(this.intervalW); 364 | clearInterval(this.intervalR); 365 | clearInterval(this.intervalB); 366 | clearInterval(this.intervalY); 367 | this.setState({whiteArrow:0,redArrow:0,blueArrow:0,yellowArrow:0}); 368 | this.randNum(socket); 369 | this.setState({functionRun: false}) 370 | } 371 | handleOnChange = event => { 372 | console.log(event.target.value); 373 | let value = event.target.value; 374 | this.setState({betAmount: value }) 375 | }; 376 | 377 | async PlaceBet(value){ 378 | try { 379 | balanceBefore = this.state.trxBalance; 380 | didPlay = true; 381 | await Utils.contract.PlaceBet(this.state.betAmount * 1000000,value).send({ 382 | shouldPollResponse:true, 383 | callValue:this.state.betAmount * 1000000 384 | }).then(res => {console.log("Bet Complete")}); 385 | }catch (e) { 386 | didPlay = false; 387 | console.log("Error while placing BET") 388 | } 389 | 390 | //this.setState({buttonStyle : normStyle}); 391 | } 392 | formatValue = value => `${Number(value/1000000).toFixed(2)} TRX` 393 | render(){ 394 | const { response } = this.state; 395 | 396 | return( 397 | 398 | 399 | 404 | 405 |
406 | 407 | 408 |
418 | 419 |
420 |
421 |
422 | 423 |
433 | 434 |
435 | 436 |
437 | 438 |
448 | 449 |
450 |
451 | 452 |
462 | 463 |
464 |
465 |
466 |
467 | 468 | 469 | 474 | 475 | 476 | 477 |
480 | {response 481 | ?

482 | {response} 483 |

484 | :

Loading...

} 485 |
486 |
487 | 488 | 489 | 491 | 492 | 498 | 499 | 500 | 502 | 503 | 509 | 510 | 511 | 513 | 514 | 520 | 521 | 522 | 524 | 525 | 531 | 532 | 533 |
534 | 535 |
536 | 537 | 538 | ) 539 | } 540 | } 541 | 542 | 543 | export default Index; 544 | 545 | -------------------------------------------------------------------------------- /socket-io-server/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "socket-io-server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/runtime": { 8 | "version": "7.3.1", 9 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.1.tgz", 10 | "integrity": "sha512-7jGW8ppV0ant637pIqAcFfQDDH1orEPGJb8aXfUozuCU3QqX7rX4DA8iwrbPrR1hcH0FTTHz47yQnk+bl5xHQA==", 11 | "requires": { 12 | "regenerator-runtime": "^0.12.0" 13 | } 14 | }, 15 | "@types/node": { 16 | "version": "10.12.26", 17 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.26.tgz", 18 | "integrity": "sha512-nMRqS+mL1TOnIJrL6LKJcNZPB8V3eTfRo9FQA2b5gDvrHurC8XbSA86KNe0dShlEL7ReWJv/OU9NL7Z0dnqWTg==" 19 | }, 20 | "accepts": { 21 | "version": "1.3.5", 22 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", 23 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", 24 | "requires": { 25 | "mime-types": "~2.1.18", 26 | "negotiator": "0.6.1" 27 | } 28 | }, 29 | "aes-js": { 30 | "version": "3.0.0", 31 | "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", 32 | "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" 33 | }, 34 | "after": { 35 | "version": "0.8.2", 36 | "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", 37 | "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" 38 | }, 39 | "array-flatten": { 40 | "version": "1.1.1", 41 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 42 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 43 | }, 44 | "arraybuffer.slice": { 45 | "version": "0.0.7", 46 | "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", 47 | "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" 48 | }, 49 | "async-limiter": { 50 | "version": "1.0.0", 51 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", 52 | "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" 53 | }, 54 | "axios": { 55 | "version": "0.18.0", 56 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", 57 | "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", 58 | "requires": { 59 | "follow-redirects": "^1.3.0", 60 | "is-buffer": "^1.1.5" 61 | } 62 | }, 63 | "babel-runtime": { 64 | "version": "6.26.0", 65 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 66 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 67 | "requires": { 68 | "core-js": "^2.4.0", 69 | "regenerator-runtime": "^0.11.0" 70 | }, 71 | "dependencies": { 72 | "regenerator-runtime": { 73 | "version": "0.11.1", 74 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", 75 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" 76 | } 77 | } 78 | }, 79 | "backo2": { 80 | "version": "1.0.2", 81 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 82 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" 83 | }, 84 | "base64-arraybuffer": { 85 | "version": "0.1.5", 86 | "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", 87 | "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" 88 | }, 89 | "base64id": { 90 | "version": "1.0.0", 91 | "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", 92 | "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" 93 | }, 94 | "better-assert": { 95 | "version": "1.0.2", 96 | "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", 97 | "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", 98 | "requires": { 99 | "callsite": "1.0.0" 100 | } 101 | }, 102 | "bignumber.js": { 103 | "version": "7.2.1", 104 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", 105 | "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" 106 | }, 107 | "blob": { 108 | "version": "0.0.5", 109 | "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", 110 | "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" 111 | }, 112 | "bn.js": { 113 | "version": "4.11.8", 114 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", 115 | "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" 116 | }, 117 | "body-parser": { 118 | "version": "1.18.3", 119 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 120 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 121 | "requires": { 122 | "bytes": "3.0.0", 123 | "content-type": "~1.0.4", 124 | "debug": "2.6.9", 125 | "depd": "~1.1.2", 126 | "http-errors": "~1.6.3", 127 | "iconv-lite": "0.4.23", 128 | "on-finished": "~2.3.0", 129 | "qs": "6.5.2", 130 | "raw-body": "2.3.3", 131 | "type-is": "~1.6.16" 132 | }, 133 | "dependencies": { 134 | "debug": { 135 | "version": "2.6.9", 136 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 137 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 138 | "requires": { 139 | "ms": "2.0.0" 140 | } 141 | } 142 | } 143 | }, 144 | "brorand": { 145 | "version": "1.1.0", 146 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 147 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" 148 | }, 149 | "bytes": { 150 | "version": "3.0.0", 151 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 152 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 153 | }, 154 | "callsite": { 155 | "version": "1.0.0", 156 | "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", 157 | "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" 158 | }, 159 | "component-bind": { 160 | "version": "1.0.0", 161 | "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", 162 | "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" 163 | }, 164 | "component-emitter": { 165 | "version": "1.2.1", 166 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 167 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" 168 | }, 169 | "component-inherit": { 170 | "version": "0.0.3", 171 | "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", 172 | "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" 173 | }, 174 | "content-disposition": { 175 | "version": "0.5.2", 176 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 177 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 178 | }, 179 | "content-type": { 180 | "version": "1.0.4", 181 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 182 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 183 | }, 184 | "cookie": { 185 | "version": "0.3.1", 186 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 187 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 188 | }, 189 | "cookie-signature": { 190 | "version": "1.0.6", 191 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 192 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 193 | }, 194 | "core-js": { 195 | "version": "2.6.4", 196 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.4.tgz", 197 | "integrity": "sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A==" 198 | }, 199 | "debug": { 200 | "version": "3.1.0", 201 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 202 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 203 | "requires": { 204 | "ms": "2.0.0" 205 | } 206 | }, 207 | "depd": { 208 | "version": "1.1.2", 209 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 210 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 211 | }, 212 | "destroy": { 213 | "version": "1.0.4", 214 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 215 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 216 | }, 217 | "ee-first": { 218 | "version": "1.1.1", 219 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 220 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 221 | }, 222 | "elliptic": { 223 | "version": "6.4.1", 224 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", 225 | "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", 226 | "requires": { 227 | "bn.js": "^4.4.0", 228 | "brorand": "^1.0.1", 229 | "hash.js": "^1.0.0", 230 | "hmac-drbg": "^1.0.0", 231 | "inherits": "^2.0.1", 232 | "minimalistic-assert": "^1.0.0", 233 | "minimalistic-crypto-utils": "^1.0.0" 234 | } 235 | }, 236 | "encodeurl": { 237 | "version": "1.0.2", 238 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 239 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 240 | }, 241 | "engine.io": { 242 | "version": "3.3.2", 243 | "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz", 244 | "integrity": "sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==", 245 | "requires": { 246 | "accepts": "~1.3.4", 247 | "base64id": "1.0.0", 248 | "cookie": "0.3.1", 249 | "debug": "~3.1.0", 250 | "engine.io-parser": "~2.1.0", 251 | "ws": "~6.1.0" 252 | } 253 | }, 254 | "engine.io-client": { 255 | "version": "3.3.2", 256 | "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", 257 | "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", 258 | "requires": { 259 | "component-emitter": "1.2.1", 260 | "component-inherit": "0.0.3", 261 | "debug": "~3.1.0", 262 | "engine.io-parser": "~2.1.1", 263 | "has-cors": "1.1.0", 264 | "indexof": "0.0.1", 265 | "parseqs": "0.0.5", 266 | "parseuri": "0.0.5", 267 | "ws": "~6.1.0", 268 | "xmlhttprequest-ssl": "~1.5.4", 269 | "yeast": "0.1.2" 270 | } 271 | }, 272 | "engine.io-parser": { 273 | "version": "2.1.3", 274 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", 275 | "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", 276 | "requires": { 277 | "after": "0.8.2", 278 | "arraybuffer.slice": "~0.0.7", 279 | "base64-arraybuffer": "0.1.5", 280 | "blob": "0.0.5", 281 | "has-binary2": "~1.0.2" 282 | } 283 | }, 284 | "escape-html": { 285 | "version": "1.0.3", 286 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 287 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 288 | }, 289 | "etag": { 290 | "version": "1.8.1", 291 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 292 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 293 | }, 294 | "ethers": { 295 | "version": "4.0.25", 296 | "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.25.tgz", 297 | "integrity": "sha512-nxpszD7e1+cXwi/DuaBFmAit0M/+9Suy8nImpiv41nT3tNg8bBKA9mz8VdQbg0X/NT6e5icqdeQpz3FHcy58wg==", 298 | "requires": { 299 | "@types/node": "^10.3.2", 300 | "aes-js": "3.0.0", 301 | "bn.js": "^4.4.0", 302 | "elliptic": "6.3.3", 303 | "hash.js": "1.1.3", 304 | "js-sha3": "0.5.7", 305 | "scrypt-js": "2.0.4", 306 | "setimmediate": "1.0.4", 307 | "uuid": "2.0.1", 308 | "xmlhttprequest": "1.8.0" 309 | }, 310 | "dependencies": { 311 | "elliptic": { 312 | "version": "6.3.3", 313 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", 314 | "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", 315 | "requires": { 316 | "bn.js": "^4.4.0", 317 | "brorand": "^1.0.1", 318 | "hash.js": "^1.0.0", 319 | "inherits": "^2.0.1" 320 | } 321 | }, 322 | "hash.js": { 323 | "version": "1.1.3", 324 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", 325 | "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", 326 | "requires": { 327 | "inherits": "^2.0.3", 328 | "minimalistic-assert": "^1.0.0" 329 | } 330 | }, 331 | "js-sha3": { 332 | "version": "0.5.7", 333 | "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", 334 | "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" 335 | } 336 | } 337 | }, 338 | "eventemitter3": { 339 | "version": "3.1.0", 340 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", 341 | "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" 342 | }, 343 | "express": { 344 | "version": "4.16.4", 345 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", 346 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", 347 | "requires": { 348 | "accepts": "~1.3.5", 349 | "array-flatten": "1.1.1", 350 | "body-parser": "1.18.3", 351 | "content-disposition": "0.5.2", 352 | "content-type": "~1.0.4", 353 | "cookie": "0.3.1", 354 | "cookie-signature": "1.0.6", 355 | "debug": "2.6.9", 356 | "depd": "~1.1.2", 357 | "encodeurl": "~1.0.2", 358 | "escape-html": "~1.0.3", 359 | "etag": "~1.8.1", 360 | "finalhandler": "1.1.1", 361 | "fresh": "0.5.2", 362 | "merge-descriptors": "1.0.1", 363 | "methods": "~1.1.2", 364 | "on-finished": "~2.3.0", 365 | "parseurl": "~1.3.2", 366 | "path-to-regexp": "0.1.7", 367 | "proxy-addr": "~2.0.4", 368 | "qs": "6.5.2", 369 | "range-parser": "~1.2.0", 370 | "safe-buffer": "5.1.2", 371 | "send": "0.16.2", 372 | "serve-static": "1.13.2", 373 | "setprototypeof": "1.1.0", 374 | "statuses": "~1.4.0", 375 | "type-is": "~1.6.16", 376 | "utils-merge": "1.0.1", 377 | "vary": "~1.1.2" 378 | }, 379 | "dependencies": { 380 | "debug": { 381 | "version": "2.6.9", 382 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 383 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 384 | "requires": { 385 | "ms": "2.0.0" 386 | } 387 | } 388 | } 389 | }, 390 | "finalhandler": { 391 | "version": "1.1.1", 392 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 393 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 394 | "requires": { 395 | "debug": "2.6.9", 396 | "encodeurl": "~1.0.2", 397 | "escape-html": "~1.0.3", 398 | "on-finished": "~2.3.0", 399 | "parseurl": "~1.3.2", 400 | "statuses": "~1.4.0", 401 | "unpipe": "~1.0.0" 402 | }, 403 | "dependencies": { 404 | "debug": { 405 | "version": "2.6.9", 406 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 407 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 408 | "requires": { 409 | "ms": "2.0.0" 410 | } 411 | } 412 | } 413 | }, 414 | "follow-redirects": { 415 | "version": "1.6.1", 416 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", 417 | "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", 418 | "requires": { 419 | "debug": "=3.1.0" 420 | } 421 | }, 422 | "forwarded": { 423 | "version": "0.1.2", 424 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 425 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 426 | }, 427 | "fresh": { 428 | "version": "0.5.2", 429 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 430 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 431 | }, 432 | "has-binary2": { 433 | "version": "1.0.3", 434 | "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", 435 | "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", 436 | "requires": { 437 | "isarray": "2.0.1" 438 | } 439 | }, 440 | "has-cors": { 441 | "version": "1.1.0", 442 | "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", 443 | "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" 444 | }, 445 | "hash.js": { 446 | "version": "1.1.7", 447 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 448 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 449 | "requires": { 450 | "inherits": "^2.0.3", 451 | "minimalistic-assert": "^1.0.1" 452 | } 453 | }, 454 | "hmac-drbg": { 455 | "version": "1.0.1", 456 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 457 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 458 | "requires": { 459 | "hash.js": "^1.0.3", 460 | "minimalistic-assert": "^1.0.0", 461 | "minimalistic-crypto-utils": "^1.0.1" 462 | } 463 | }, 464 | "http-errors": { 465 | "version": "1.6.3", 466 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 467 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 468 | "requires": { 469 | "depd": "~1.1.2", 470 | "inherits": "2.0.3", 471 | "setprototypeof": "1.1.0", 472 | "statuses": ">= 1.4.0 < 2" 473 | } 474 | }, 475 | "iconv-lite": { 476 | "version": "0.4.23", 477 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 478 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 479 | "requires": { 480 | "safer-buffer": ">= 2.1.2 < 3" 481 | } 482 | }, 483 | "indexof": { 484 | "version": "0.0.1", 485 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 486 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" 487 | }, 488 | "inherits": { 489 | "version": "2.0.3", 490 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 491 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 492 | }, 493 | "ipaddr.js": { 494 | "version": "1.8.0", 495 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", 496 | "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" 497 | }, 498 | "is-buffer": { 499 | "version": "1.1.6", 500 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 501 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 502 | }, 503 | "isarray": { 504 | "version": "2.0.1", 505 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", 506 | "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" 507 | }, 508 | "js-sha3": { 509 | "version": "0.8.0", 510 | "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", 511 | "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" 512 | }, 513 | "jssha": { 514 | "version": "2.3.1", 515 | "resolved": "https://registry.npmjs.org/jssha/-/jssha-2.3.1.tgz", 516 | "integrity": "sha1-FHshJTaQNcpLL30hDcU58Amz3po=" 517 | }, 518 | "media-typer": { 519 | "version": "0.3.0", 520 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 521 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 522 | }, 523 | "merge-descriptors": { 524 | "version": "1.0.1", 525 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 526 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 527 | }, 528 | "methods": { 529 | "version": "1.1.2", 530 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 531 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 532 | }, 533 | "mime": { 534 | "version": "1.4.1", 535 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 536 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 537 | }, 538 | "mime-db": { 539 | "version": "1.37.0", 540 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", 541 | "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" 542 | }, 543 | "mime-types": { 544 | "version": "2.1.21", 545 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", 546 | "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", 547 | "requires": { 548 | "mime-db": "~1.37.0" 549 | } 550 | }, 551 | "minimalistic-assert": { 552 | "version": "1.0.1", 553 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 554 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" 555 | }, 556 | "minimalistic-crypto-utils": { 557 | "version": "1.0.1", 558 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 559 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" 560 | }, 561 | "ms": { 562 | "version": "2.0.0", 563 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 564 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 565 | }, 566 | "negotiator": { 567 | "version": "0.6.1", 568 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 569 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 570 | }, 571 | "object-component": { 572 | "version": "0.0.3", 573 | "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", 574 | "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" 575 | }, 576 | "on-finished": { 577 | "version": "2.3.0", 578 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 579 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 580 | "requires": { 581 | "ee-first": "1.1.1" 582 | } 583 | }, 584 | "parseqs": { 585 | "version": "0.0.5", 586 | "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", 587 | "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", 588 | "requires": { 589 | "better-assert": "~1.0.0" 590 | } 591 | }, 592 | "parseuri": { 593 | "version": "0.0.5", 594 | "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", 595 | "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", 596 | "requires": { 597 | "better-assert": "~1.0.0" 598 | } 599 | }, 600 | "parseurl": { 601 | "version": "1.3.2", 602 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 603 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 604 | }, 605 | "path-to-regexp": { 606 | "version": "0.1.7", 607 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 608 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 609 | }, 610 | "proxy-addr": { 611 | "version": "2.0.4", 612 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", 613 | "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", 614 | "requires": { 615 | "forwarded": "~0.1.2", 616 | "ipaddr.js": "1.8.0" 617 | } 618 | }, 619 | "qs": { 620 | "version": "6.5.2", 621 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 622 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 623 | }, 624 | "range-parser": { 625 | "version": "1.2.0", 626 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 627 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 628 | }, 629 | "raw-body": { 630 | "version": "2.3.3", 631 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 632 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 633 | "requires": { 634 | "bytes": "3.0.0", 635 | "http-errors": "1.6.3", 636 | "iconv-lite": "0.4.23", 637 | "unpipe": "1.0.0" 638 | } 639 | }, 640 | "regenerator-runtime": { 641 | "version": "0.12.1", 642 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", 643 | "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" 644 | }, 645 | "safe-buffer": { 646 | "version": "5.1.2", 647 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 648 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 649 | }, 650 | "safer-buffer": { 651 | "version": "2.1.2", 652 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 653 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 654 | }, 655 | "scrypt-js": { 656 | "version": "2.0.4", 657 | "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", 658 | "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" 659 | }, 660 | "send": { 661 | "version": "0.16.2", 662 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 663 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 664 | "requires": { 665 | "debug": "2.6.9", 666 | "depd": "~1.1.2", 667 | "destroy": "~1.0.4", 668 | "encodeurl": "~1.0.2", 669 | "escape-html": "~1.0.3", 670 | "etag": "~1.8.1", 671 | "fresh": "0.5.2", 672 | "http-errors": "~1.6.2", 673 | "mime": "1.4.1", 674 | "ms": "2.0.0", 675 | "on-finished": "~2.3.0", 676 | "range-parser": "~1.2.0", 677 | "statuses": "~1.4.0" 678 | }, 679 | "dependencies": { 680 | "debug": { 681 | "version": "2.6.9", 682 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 683 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 684 | "requires": { 685 | "ms": "2.0.0" 686 | } 687 | } 688 | } 689 | }, 690 | "serve-static": { 691 | "version": "1.13.2", 692 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 693 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 694 | "requires": { 695 | "encodeurl": "~1.0.2", 696 | "escape-html": "~1.0.3", 697 | "parseurl": "~1.3.2", 698 | "send": "0.16.2" 699 | } 700 | }, 701 | "setimmediate": { 702 | "version": "1.0.4", 703 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", 704 | "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" 705 | }, 706 | "setprototypeof": { 707 | "version": "1.1.0", 708 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 709 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 710 | }, 711 | "socket.io": { 712 | "version": "2.2.0", 713 | "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz", 714 | "integrity": "sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==", 715 | "requires": { 716 | "debug": "~4.1.0", 717 | "engine.io": "~3.3.1", 718 | "has-binary2": "~1.0.2", 719 | "socket.io-adapter": "~1.1.0", 720 | "socket.io-client": "2.2.0", 721 | "socket.io-parser": "~3.3.0" 722 | }, 723 | "dependencies": { 724 | "debug": { 725 | "version": "4.1.1", 726 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 727 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 728 | "requires": { 729 | "ms": "^2.1.1" 730 | } 731 | }, 732 | "ms": { 733 | "version": "2.1.1", 734 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 735 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 736 | } 737 | } 738 | }, 739 | "socket.io-adapter": { 740 | "version": "1.1.1", 741 | "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", 742 | "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" 743 | }, 744 | "socket.io-client": { 745 | "version": "2.2.0", 746 | "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", 747 | "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", 748 | "requires": { 749 | "backo2": "1.0.2", 750 | "base64-arraybuffer": "0.1.5", 751 | "component-bind": "1.0.0", 752 | "component-emitter": "1.2.1", 753 | "debug": "~3.1.0", 754 | "engine.io-client": "~3.3.1", 755 | "has-binary2": "~1.0.2", 756 | "has-cors": "1.1.0", 757 | "indexof": "0.0.1", 758 | "object-component": "0.0.3", 759 | "parseqs": "0.0.5", 760 | "parseuri": "0.0.5", 761 | "socket.io-parser": "~3.3.0", 762 | "to-array": "0.1.4" 763 | } 764 | }, 765 | "socket.io-parser": { 766 | "version": "3.3.0", 767 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", 768 | "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", 769 | "requires": { 770 | "component-emitter": "1.2.1", 771 | "debug": "~3.1.0", 772 | "isarray": "2.0.1" 773 | } 774 | }, 775 | "statuses": { 776 | "version": "1.4.0", 777 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 778 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 779 | }, 780 | "to-array": { 781 | "version": "0.1.4", 782 | "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", 783 | "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" 784 | }, 785 | "tronweb": { 786 | "version": "2.1.31", 787 | "resolved": "https://registry.npmjs.org/tronweb/-/tronweb-2.1.31.tgz", 788 | "integrity": "sha512-4Sz3NbYjz+ZEOV8emIWJljbSNRf5JsA4TpXKEtPrVzA/PtHmWFwPqAWbJbNxzZ5L5iuKqLL/fK2LSLUnHi4DDA==", 789 | "requires": { 790 | "@babel/runtime": "^7.0.0", 791 | "axios": "^0.18.0", 792 | "babel-runtime": "^6.26.0", 793 | "bignumber.js": "^7.2.1", 794 | "elliptic": "^6.4.1", 795 | "ethers": "^4.0.7", 796 | "eventemitter3": "^3.1.0", 797 | "js-sha3": "^0.8.0", 798 | "jssha": "^2.3.1", 799 | "validator": "^10.7.1" 800 | } 801 | }, 802 | "type-is": { 803 | "version": "1.6.16", 804 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", 805 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", 806 | "requires": { 807 | "media-typer": "0.3.0", 808 | "mime-types": "~2.1.18" 809 | } 810 | }, 811 | "unpipe": { 812 | "version": "1.0.0", 813 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 814 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 815 | }, 816 | "utils-merge": { 817 | "version": "1.0.1", 818 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 819 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 820 | }, 821 | "uuid": { 822 | "version": "2.0.1", 823 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", 824 | "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" 825 | }, 826 | "validator": { 827 | "version": "10.11.0", 828 | "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", 829 | "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" 830 | }, 831 | "vary": { 832 | "version": "1.1.2", 833 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 834 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 835 | }, 836 | "ws": { 837 | "version": "6.1.2", 838 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", 839 | "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", 840 | "requires": { 841 | "async-limiter": "~1.0.0" 842 | } 843 | }, 844 | "xmlhttprequest": { 845 | "version": "1.8.0", 846 | "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", 847 | "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" 848 | }, 849 | "xmlhttprequest-ssl": { 850 | "version": "1.5.5", 851 | "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", 852 | "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" 853 | }, 854 | "yeast": { 855 | "version": "0.1.2", 856 | "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", 857 | "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" 858 | } 859 | } 860 | } 861 | -------------------------------------------------------------------------------- /components/FistIcon.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | const FistIcon = () => ( 3 | 12 | 13 | 15 | 16 | 17 | 19 | 20 | 21 | 23 | 24 | 25 | 27 | 28 | 29 | 31 | 32 | 33 | 34 | ); 35 | 36 | export default FistIcon; --------------------------------------------------------------------------------