faucet/src/server.js

113 lines
3.7 KiB
JavaScript

const express = require('express')
const bodyParser = require('body-parser')
const url = require('url')
const HDWalletProvider = require('truffle-hdwallet-provider')
const Web3 = require('web3')
const abi = require('./abi/token')
const { connection } = require('./db')
require('dotenv').config()
const infura_apikey = process.env.INFURA_NODE_ID
const provider = new HDWalletProvider(
process.env.SEED_PHRASE,
'https://rinkeby.infura.io/v3/' + infura_apikey
)
const web3 = new Web3(provider)
const app = express()
app.use(bodyParser.urlencoded({ extended: false }))
const template = (err, message, transactionHash) => `
<html>
<head>
<title>Rinkeby OCEAN Faucet</title>
</head>
<body>
<h1>Rinkeby test OCEAN Faucet</h1>
<h4>Give me your address and I'll give you .001 ether!</h4>
<form action="/send">
<label>My Address:</label>
<input name="address" />
<button>Submit</button>
<span style="display: none" class="loader loader--style1" title="0">
<svg version="1.1" id="loader-1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
<path opacity="0.2" fill="#000" d="M20.201,5.169c-8.254,0-14.946,6.692-14.946,14.946c0,8.255,6.692,14.946,14.946,14.946
s14.946-6.691,14.946-14.946C35.146,11.861,28.455,5.169,20.201,5.169z M20.201,31.749c-6.425,0-11.634-5.208-11.634-11.634
c0-6.425,5.209-11.634,11.634-11.634c6.425,0,11.633,5.209,11.633,11.634C31.834,26.541,26.626,31.749,20.201,31.749z"/>
<path fill="#000" d="M26.013,10.047l1.654-2.866c-2.198-1.272-4.743-2.012-7.466-2.012h0v3.312h0
C22.32,8.481,24.301,9.057,26.013,10.047z">
<animateTransform attributeType="xml"
attributeName="transform"
type="rotate"
from="0 20 20"
to="360 20 20"
dur="0.5s"
repeatCount="indefinite"/>
</path>
</svg>
</span>
</form>
<h3 style="color: red">${err || ''}</h3>
<h3>${message || ''}</h3>
<p>
${transactionHash
? `If you're curious, here is your transaction id: ${transactionHash}`
: ''}
</p>
</body>
<script>
var button = document.querySelector('button')
button.addEventListener('click', function() {
button.style.display = 'none'
document.querySelector('.loader').style.display = 'inline'
})
</script>
</html>
`
app.get('/', (req, res) => {
res.send(template())
})
app.get('/send', (req, res) => {
console.log(`ip address - `, req.headers['x-forwarded-for'] || req.connection.remoteAddress)
const url_parts = url.parse(req.url, true)
const query = url_parts.query
const from = process.env.FROM
const to = query.address
const value = web3.utils.toWei('1', 'ether')
//create token instance from abi and contract address
const tokenInstance = new web3.eth.Contract(abi, process.env.TOKEN_CONTRACT_ADDRESS)
tokenInstance.methods.transfer(to, value).send({ from }, function (error, txHash) {
if (!error) {
console.log(txHash)
res.send(
template('', 'Great, test OCEANs are on the way!', txHash)
)
} else {
console.error(err)
}
})
/*web3.eth
.sendTransaction({ from, to, value })
.then(tx => {
console.log(tx)
res.send(
template('', 'Great, coins are on the way!', tx.transactionHash)
)
})
.catch(err => res.send(template(err))) */
})
const port = process.env.PORT || 4000
app.listen(port, async () => {
await connection()
console.log('Listening on port - ', port)
})