Fix build

This commit is contained in:
Boris Kubiak 2020-10-14 17:33:38 +02:00
parent 75920ba142
commit 60a8ed7af2
5 changed files with 2465 additions and 1661 deletions

View file

@ -1,6 +1,6 @@
language: node_js
node_js:
- "node"
- "lts/*"
install: npm i

View file

@ -1,29 +1,200 @@
<!doctype html>
<!DOCTYPE html>
<html lang="en_US">
<head>
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Vanity ETH | Ethereum vanity address generator</title>
<meta property="og:title" content="Vanity ETH" />
<meta property="og:locale" content="en_US" />
<meta property="og:title" content="Vanity ETH">
<meta property="og:locale" content="en_US">
<meta name="description" content="Vanity-ETH is an open source generator using your web browser to generate Ethereum
vanity addresses. You can get a custom ETH vanity address right now without the need to install any software.
Vanity-ETH provides an encrypted keystore compatible with MyEtherWallet, MetaMask, Mist, and geth." />
Vanity-ETH provides an encrypted keystore compatible with MyEtherWallet, MetaMask, Mist, and geth.">
<meta property="og:description" content="Vanity-ETH is an open source generator using your web browser to generate Ethereum
vanity addresses. You can get a custom ETH vanity address right now without the need to install any software.
Vanity-ETH provides an encrypted keystore compatible with MyEtherWallet, MetaMask, Mist, and geth." />
<link rel="canonical" href="https://vanity-eth.tk/" />
<meta property="og:url" content="https://vanity-eth.tk/" />
<meta property="og:site_name" content="Vanity ETH" />
<meta name="google-site-verification" content="DFWJVWz9IRrh-wjBxn0Y8ith5FTqMeJTSUtuJ595BEs" />
<link rel="stylesheet" href="dist/style.css" />
<link rel="icon" type="image/x-icon" href="dist/favicon.ico" />
<script async defer data-domain="vanity-eth.tk" src="https://metrics.vanity-eth.tk/js/plausible.js"></script>
</head>
<body>
<div id="app"></div>
<script src="dist/index.js"></script>
</body>
</html>
Vanity-ETH provides an encrypted keystore compatible with MyEtherWallet, MetaMask, Mist, and geth.">
<link rel="canonical" href="https://vanity-eth.tk/">
<meta property="og:url" content="https://vanity-eth.tk/">
<meta property="og:site_name" content="Vanity ETH">
<meta name="google-site-verification" content="DFWJVWz9IRrh-wjBxn0Y8ith5FTqMeJTSUtuJ595BEs">
<link rel="stylesheet" href="dist/style.css">
<link rel="icon" type="image/x-icon" href="dist/favicon.ico">
<script async="" defer="" data-domain="vanity-eth.tk" src="https://metrics.vanity-eth.tk/js/plausible.js"></script>
</head>
<body>
<div id="app" class="remodal-bg prerender remodal-is-closed">
<div id="content" class="container">
<div data-v-105bd278>
<h1 data-v-105bd278>VANITY-ETH</h1>
<p data-v-105bd278>ETH vanity address generator</p>
</div>
<div class="row">
<div class="col-md-12">
<div data-v-e4a11f84 class="panel">
<p data-v-e4a11f84>
Vanity-ETH is an open source tool using your web browser to generate Ethereum vanity addresses.<br data-v-e4a11f84>
Enter a short prefix/suffix of your choice, and click generate to start.
</p>
<div data-v-e4a11f84 class="shortcut"><button data-v-e4a11f84 type="button" class="button-large">Start now</button></div>
<h2 data-v-e4a11f84>What's a vanity address?</h2>
<p data-v-e4a11f84>
A vanity address is an address which part of it is chosen by yourself, making it look less random.<br data-v-e4a11f84>
Examples: <span data-v-e4a11f84 class="monospace">0xc0ffee254729296a45a3885639AC7E10F9d54979</span>, or
<span data-v-e4a11f84 class="monospace">0x999999cf1046e68e36E1aA2E0E07105eDDD1f08E</span></p>
<h2 data-v-e4a11f84>How it works</h2>
<p data-v-e4a11f84>
Enter the prefix/suffix of your choice, and click generate to start. Your browser will generate lots of random
addresses until one matches your input.<br data-v-e4a11f84>
Once an address is found, you can reveal the private key, or click the 'save' button to download
a password-encrypted keystore file.<br data-v-e4a11f84>
You can increase the number of working threads to reach higher speeds, or decrease it if you computer
struggles.<br data-v-e4a11f84></p>
<h2 data-v-e4a11f84>Security</h2>
<p data-v-e4a11f84>
As explained above, everything is computed only in your browser. Nothing ever leaves your machine, or even
your browser tab. There is no database, no server-side code. Everything vanishes when you close your tab.<br data-v-e4a11f84><br data-v-e4a11f84> <b data-v-e4a11f84>Vanity-ETH cannot and will never store your private key</b>, and if you don't trust it, you have 3 ways to ensure
your key remains private:<br data-v-e4a11f84>
&nbsp;-&nbsp;Once the web page is loaded, you can turn off the internet and continue playing, it will work seamlessly<br data-v-e4a11f84>
&nbsp;-&nbsp;You can also download the latest build of Vanity-ETH
<a data-v-e4a11f84 href="https://git.io/veth-dl" target="_blank">here</a> and use it on a completely offline computer<br data-v-e4a11f84>
&nbsp;-&nbsp;The code is 100% open source and available on
<a data-v-e4a11f84 href="https://github.com/bokub/vanity-eth" target="_blank">Github</a>. You can review it as much as you want before using it<br data-v-e4a11f84> <br data-v-e4a11f84>
Vanity-ETH uses a cryptographically secure pseudorandom number generator (CSPRNG) to generate
Ethereum addresses.<br data-v-e4a11f84>
The keystore file is encrypted with a AES-128-CTR cipher using the BKDF2-SHA256 derivation function with 65536 hashing rounds.
</p>
<h2 data-v-e4a11f84>Performance</h2>
<p data-v-e4a11f84>
For some reason, the performance of Vanity-ETH can vary a lot from a browser to another.
Currently, Chrome provides the best results.<br data-v-e4a11f84>
Using Vanity-ETH on your phone or tablet will work, but don't expect to reach the speed of a good old computer.
</p>
<h2 data-v-e4a11f84>Compatibility</h2>
<p data-v-e4a11f84>
Any address generated with Vanity-ETH is ERC-20 compatible, which means you can use it for an ICO, an
airdrop, or just to withdraw your funds from an exchange.<br data-v-e4a11f84>
The keystore file is 100% compatible with MyEtherWallet, MetaMask, Mist, and geth.
</p>
</div>
</div>
</div>
<!---->
<div class="row">
<div class="col-md-6">
<div data-v-9eac7f80 id="input-panel" class="panel">
<form data-v-9eac7f80 class="">
<div data-v-9eac7f80 class="error-text">Numbers and letters from A to F only</div> <input data-v-9eac7f80 type="text" id="input" placeholder="Prefix" class="text-input-large">
<div data-v-9eac7f80 class="row justify-content-center hide-render">
<div data-v-9eac7f80 class="spinner">
<div data-v-9eac7f80></div>
<div data-v-9eac7f80></div>
<div data-v-9eac7f80></div>
<div data-v-9eac7f80></div>
</div>
</div>
<div data-v-9eac7f80 class="example hide-prerender">
E.g.&nbsp;
<span data-v-9eac7f80 class="monospace">
0x<b data-v-9eac7f80></b><span data-v-9eac7f80>f5bB3Ec3CBAe7A838B289CAE55DEd5C0daD22293</span>
<!----></span></div>
<div data-v-9eac7f80 class="row controls hide-prerender">
<div data-v-9eac7f80 class="col-12 col-sm-6 col-md-12 col-lg-6"><label data-v-9eac7f80 class="checkbox"><input data-v-9eac7f80 type="checkbox" name="checkbox" checked="checked"> <i data-v-9eac7f80 class="left"></i>
Case-sensitive
</label></div>
<div data-v-9eac7f80 class="col-12 col-sm-6 col-md-12 col-lg-6"><span data-v-9eac7f80>Prefix</span> <label data-v-9eac7f80 class="switch"><input data-v-9eac7f80 type="checkbox"> <span data-v-9eac7f80 class="slider"></span></label> <span data-v-9eac7f80>Suffix</span></div>
</div>
<div data-v-9eac7f80 class="threads hide-prerender"><input data-v-9eac7f80 type="button" value="-" class="square-btn button-large"> <input data-v-9eac7f80 type="button" value="+" class="square-btn arrow button-large">
<h4 data-v-9eac7f80>4</h4> <span data-v-9eac7f80>threads</span> <span data-v-9eac7f80>(recommended)</span>
</div>
<div data-v-9eac7f80 class="row">
<div data-v-9eac7f80 class="col-lg-6 col-sm-12"><input data-v-9eac7f80 type="button" value="Generate" disabled="disabled" class="button-large hide-render"> <input data-v-9eac7f80 type="button" value="Generate" class="button-large hide-prerender"></div>
<div data-v-9eac7f80 class="col-lg-6 col-sm-12"><input data-v-9eac7f80 type="button" value="Stop" disabled="disabled" class="button-large"></div>
</div>
</form>
</div>
</div>
<div class="col-md-6">
<div data-v-3e599529 class="panel">
<div data-v-3e599529>Difficulty: <span data-v-3e599529 class="output">1</span></div>
<div data-v-3e599529>Generated: <span data-v-3e599529 class="output">0 addresses</span></div>
<div data-v-3e599529>50% probability: <span data-v-3e599529 class="output">0 addresses</span></div>
<div data-v-3e599529>Speed: <span data-v-3e599529 class="output">0 addr/s</span></div>
<div data-v-3e599529>Status: <span data-v-3e599529 class="output">Waiting</span></div>
<div data-v-3e599529 class="probability">
<div data-v-3e599529 class="probability-bar" style="width: 0%;"></div>
</div>
<div data-v-3e599529 class="percentage">
<h4 data-v-3e599529>0%</h4>
<div data-v-3e599529>Probability</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div data-v-043d611f class="panel result">
<div data-v-043d611f class="row">
<div data-v-043d611f id="identicon" class="float-left"></div>
<div data-v-043d611f class="col">
<div data-v-043d611f>Address: <span data-v-043d611f class="output"></span></div>
<div data-v-043d611f>Private key:
<!---->
</div>
</div>
<div data-v-043d611f class="col-lg-2 col-12"><button data-v-043d611f data-remodal-target="modal" disabled="disabled" class="save button-large"><i data-v-043d611f class="icon-lock"></i>&nbsp;&nbsp;&nbsp;Save
</button></div>
</div>
</div>
</div>
</div>
</div>
<footer data-v-8ff20304>
<div data-v-8ff20304 class="container">
<div data-v-8ff20304 class="row">
<div data-v-8ff20304 class="col-12 col-lg-6 address">
Tips:
<a data-v-8ff20304 href="https://etherscan.io/address/0xAceBabe64807cb045505b268ef253D8fC2FeF5Bc#tokentxns" target="_blank">0xAceBabe64807cb045505b268ef253D8fC2FeF5Bc</a></div>
<div data-v-8ff20304 class="col-12 col-lg-6 links"><a data-v-8ff20304 href="https://etherdonation.com/d?to=0xAceBabe64807cb045505b268ef253D8fC2FeF5Bc" target="_blank"><i data-v-8ff20304 class="icon-ethereum"></i>&nbsp;&nbsp;&nbsp;Donate
</a> <a data-v-8ff20304 href="https://github.com/bokub/vanity-eth" target="_blank"><i data-v-8ff20304 class="icon-star"></i>&nbsp;&nbsp;&nbsp;Star&nbsp;me
</a> <a data-v-8ff20304 href="https://github.com/bokub/vanity-eth/wiki/download-Vanity-ETH" target="_blank"><i data-v-8ff20304 class="icon-download"></i>&nbsp;&nbsp;&nbsp;Download
</a></div>
</div>
</div>
</footer> <a data-v-887f6dee href="https://github.com/bokub/vanity-eth" target="_blank" aria-label="View source on Github"><svg data-v-887f6dee width="80" height="80" viewBox="0 0 250 250" aria-hidden="true" style="fill: rgb(21, 21, 19); color: rgb(255, 255, 255); position: absolute; top: 0px; border: 0px; right: 0px;">
<defs data-v-887f6dee>
<mask data-v-887f6dee id="octomask">
<path data-v-887f6dee fill="white" d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
<path data-v-887f6dee fill="black" d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" class="octo-arm" style="transform-origin: 130px 106px;"></path>
<path data-v-887f6dee d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="black" class="octo-body"></path>
</mask>
</defs>
<rect data-v-887f6dee fill="white" width="100%" height="100%" mask="url(#octomask)" class="filler"></rect>
</svg></a>
</div>
<script src="dist/index.js"></script>
<div class="remodal-overlay remodal-is-closed" style="display: none;"></div>
<div class="remodal-wrapper remodal-is-closed" style="display: none;">
</div>
<div class="remodal-wrapper remodal-is-closed" style="display: none;">
<div data-remodal-id="modal" data-remodal-options="hashTracking: false" class="remodal remodal-is-initialized remodal-is-closed" tabindex="-1"><button data-remodal-action="close" class="remodal-close"></button>
<h3 class="title">Create encrypted keystore file (UTC / JSON)</h3>
<form>
<div><input type="text" autocomplete="username" class="hidden"> <input type="password" autocomplete="new-password" placeholder="Password" class="text-input-large"></div>
<div><button type="button" disabled="disabled" class="button-large">Download</button></div>
</form>
</div>
</div>
<div class="remodal-wrapper remodal-is-closed" style="display: none;">
<div data-remodal-id="modal" data-remodal-options="hashTracking: false" class="remodal remodal-is-initialized remodal-is-closed" tabindex="-1"><button data-remodal-action="close" class="remodal-close"></button>
<h3 class="title">Create encrypted keystore file (UTC / JSON)</h3>
<form>
<div><input type="text" autocomplete="username" class="hidden"> <input type="password" autocomplete="new-password" placeholder="Password" class="text-input-large"></div>
<div><button type="button" disabled="disabled" class="button-large">Download</button></div>
</form>
</div>
</div>
</body>
</html>

3725
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -24,20 +24,20 @@
"extract-text-webpack-plugin": "^3.0.2",
"file-loader": "^1.1.6",
"html-webpack-plugin": "^3.2.0",
"keccak": "^1.4.0",
"node-sass": "^4.5.3",
"keccak": "^3.0.1",
"node-sass": "^4.14.1",
"pretty": "^2.0.0",
"randombytes": "^2.0.6",
"remodal": "^1.1.1",
"sass-loader": "^6.0.6",
"secp256k1": "^3.5.0",
"secp256k1": "^3.8.0",
"url-loader": "^0.6.2",
"vue": "^2.5.11",
"vue-eslint-parser": "^3.2.2",
"vue-loader": "^13.0.5",
"vue-template-compiler": "^2.4.4",
"webpack": "^3.6.0",
"webpack-dev-server": "^2.9.1",
"webpack": "^3.12.0",
"webpack-dev-server": "^2.11.5",
"webpack-subresource-integrity": "^1.1.0-rc.5",
"worker-loader": "^1.1.0"
},

View file

@ -7,104 +7,104 @@ const SriPlugin = require('webpack-subresource-integrity');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: {
index: './src/main.js'
},
output: {
crossOriginLoading: 'anonymous',
path: path.resolve(__dirname, './dist'),
publicPath: '/dist/',
filename: '[name].js'
},
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: {extractCSS: process.env.NODE_ENV === 'production'}
},
{
test: /vanity\.js$/,
loader: 'worker-loader',
exclude: /node_modules/,
options: {
inline: true,
name: 'vanity.js'
}
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.(png|woff|woff2)/,
exclude: /node_modules/,
loader: 'url-loader'
}
]
},
resolve: {
alias: {
vue$: 'vue/dist/vue.esm.js'
},
extensions: ['*', '.js', '.vue', '.json']
},
devServer: {
historyApiFallback: true,
noInfo: true,
overlay: true
},
performance: {
hints: false
},
plugins: [
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify(process.env.NODE_ENV),
TID: JSON.stringify(process.env.TID)
}
}),
new CopyWebpackPlugin([{
from: 'src/assets/images/favicon.ico',
to: '.',
toType: 'dir'
}])
]
entry: {
index: './src/main.js'
},
output: {
crossOriginLoading: 'anonymous',
path: path.resolve(__dirname, './dist'),
publicPath: '/dist/',
filename: '[name].js'
},
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: {extractCSS: process.env.NODE_ENV === 'production'}
},
{
test: /vanity\.js$/,
loader: 'worker-loader',
exclude: /node_modules/,
options: {
inline: true,
name: 'vanity.js'
}
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules(?!\/keccak)/
},
{
test: /\.(png|woff|woff2)/,
exclude: /node_modules/,
loader: 'url-loader'
}
]
},
resolve: {
alias: {
vue$: 'vue/dist/vue.esm.js'
},
extensions: ['*', '.js', '.vue', '.json']
},
devServer: {
historyApiFallback: true,
noInfo: true,
overlay: true
},
performance: {
hints: false
},
plugins: [
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify(process.env.NODE_ENV),
TID: JSON.stringify(process.env.TID)
}
}),
new CopyWebpackPlugin([{
from: 'src/assets/images/favicon.ico',
to: '.',
toType: 'dir'
}])
]
};
if (process.env.NODE_ENV === 'production') {
module.exports.plugins = module.exports.plugins.concat([
new ExtractTextPlugin('style.css'),
new webpack.optimize.UglifyJsPlugin({
sourceMap: false,
compress: {
warnings: false
}
}),
new HtmlWebpackPlugin({
template: 'index.html',
filename: '../index.html',
inject: false
}),
]);
module.exports.plugins = module.exports.plugins.concat([
new ExtractTextPlugin('style.css'),
new webpack.optimize.UglifyJsPlugin({
sourceMap: false,
compress: {
warnings: false
}
}),
new HtmlWebpackPlugin({
template: 'index.html',
filename: '../index.html',
inject: false
}),
]);
}
if (process.env.DEPLOY) {
const SpaPlugin = require('prerender-spa-plugin');
const SpaPlugin = require('prerender-spa-plugin');
module.exports.plugins = module.exports.plugins.concat([
new SriPlugin({
hashFuncNames: ['sha256', 'sha384']
hashFuncNames: ['sha256', 'sha384']
}),
new SpaPlugin({
staticDir: path.join(__dirname),
routes: ['/'],
postProcess(renderedRoute) {
renderedRoute.html = pretty(renderedRoute.html, {ocd: true})
.replace('render', 'prerender')
.replace(/(data-v-[0-9a-f]+)=""/gm, '$1');
return renderedRoute;
}
staticDir: path.join(__dirname),
routes: ['/'],
postProcess(renderedRoute) {
renderedRoute.html = pretty(renderedRoute.html, {ocd: true})
.replace('render', 'prerender')
.replace(/(data-v-[0-9a-f]+)=""/gm, '$1');
return renderedRoute;
}
})
]);
}