Merge pull request #62 from rstormsf/core

(Feature) Automatically save all keys with its passwords
This commit is contained in:
Victor Baranov 2018-01-24 14:00:41 +03:00 committed by GitHub
commit db23e47a88
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 117 additions and 28 deletions

1
.nvmrc Normal file
View File

@ -0,0 +1 @@
v8.3.0

108
package-lock.json generated
View File

@ -3613,6 +3613,11 @@
"schema-utils": "0.3.0"
}
},
"file-saver": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.3.tgz",
"integrity": "sha1-zdTETTqiZOrC9o7BZbx5HDSvEjI="
},
"file-type": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
@ -4577,6 +4582,14 @@
}
}
},
"string_decoder": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
"integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
"requires": {
"safe-buffer": "5.0.1"
}
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
@ -4587,14 +4600,6 @@
"strip-ansi": "3.0.1"
}
},
"string_decoder": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
"integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
"requires": {
"safe-buffer": "5.0.1"
}
},
"stringstream": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
@ -5388,6 +5393,11 @@
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
"integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA=="
},
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
},
"import-local": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-0.1.1.tgz",
@ -6388,6 +6398,48 @@
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz",
"integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE="
},
"jszip": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz",
"integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==",
"requires": {
"core-js": "2.3.0",
"es6-promise": "3.0.2",
"lie": "3.1.1",
"pako": "1.0.6",
"readable-stream": "2.0.6"
},
"dependencies": {
"core-js": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz",
"integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU="
},
"es6-promise": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz",
"integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y="
},
"readable-stream": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
"integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "1.0.7",
"string_decoder": "0.10.31",
"util-deprecate": "1.0.2"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
}
}
},
"keccak": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/keccak/-/keccak-1.2.0.tgz",
@ -6480,6 +6532,14 @@
"type-check": "0.3.2"
}
},
"lie": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
"integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
"requires": {
"immediate": "3.0.6"
}
},
"load-json-file": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
@ -10205,6 +10265,14 @@
}
}
},
"string_decoder": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
"integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
"requires": {
"safe-buffer": "5.0.1"
}
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
@ -10215,14 +10283,6 @@
"strip-ansi": "3.0.1"
}
},
"string_decoder": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
"integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
"requires": {
"safe-buffer": "5.0.1"
}
},
"stringstream": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
@ -11310,6 +11370,14 @@
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
"integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
},
"string_decoder": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
"requires": {
"safe-buffer": "5.1.1"
}
},
"string-length": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz",
@ -11338,14 +11406,6 @@
"function-bind": "1.1.1"
}
},
"string_decoder": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
"requires": {
"safe-buffer": "5.1.1"
}
},
"stringstream": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",

View File

@ -5,7 +5,9 @@
"homepage": "https://poanetwork.github.io/",
"dependencies": {
"clipboard": "^1.7.1",
"file-saver": "^1.3.3",
"gh-pages": "^1.1.0",
"jszip": "^3.1.5",
"keythereum": "^1.0.2",
"node-sass-chokidar": "0.0.3",
"npm-run-all": "^4.1.2",

View File

@ -7,6 +7,8 @@ import './index/index.css';
import ReactDOM from 'react-dom';
import { error } from 'util';
import addressGenerator from './addressGenerator'
import JSzip from 'jszip';
import FileSaver from 'file-saver';
function generateElement(msg){
let errorNode = document.createElement("div");
@ -33,6 +35,9 @@ class App extends Component {
constructor(props){
super(props);
this.onClick = this.onClick.bind(this);
this.saveFile = (blob) => {
FileSaver.saveAs(blob, `poa_network_validator_keys.zip`);
};
this.state = {
web3Config: {},
mining: null,
@ -58,13 +63,19 @@ class App extends Component {
}
componentDidMount(){
if(window.location.hash.indexOf('just-generate-keys') !== -1) {
this.generateKeys();
this.setState({loading:true});
setTimeout(async () => {
const {mining, voting, payout} = await this.generateKeys();
this.setState({loading:false});
await this.generateZip({mining, voting, payout, netIdName: "manualCreation"});
}, 150)
}
}
async generateKeys() {
async generateKeys(cb) {
const mining = await addressGenerator();
const voting = await addressGenerator();
const payout = await addressGenerator();
const netIdName = this.state.web3Config.netIdName;
this.setState({
mining,
voting,
@ -75,6 +86,20 @@ class App extends Component {
mining, voting, payout
}
}
async generateZip({mining, voting, payout, netIdName}){
const zip = new JSzip();
zip.file(`${netIdName}_keys/mining_key_${mining.jsonStore.address}.json`, JSON.stringify(mining.jsonStore));
zip.file(`${netIdName}_keys/mining_password_${mining.jsonStore.address}.txt`, mining.password);
zip.file(`${netIdName}_keys/voting_key_${voting.jsonStore.address}.json`, JSON.stringify(voting.jsonStore));
zip.file(`${netIdName}_keys/voting_password_${voting.jsonStore.address}.txt`, voting.password);
zip.file(`${netIdName}_keys/payout_key_${payout.jsonStore.address}.json`, JSON.stringify(payout.jsonStore));
zip.file(`${netIdName}_keys/payout_password_${payout.jsonStore.address}.txt`, payout.password);
zip.generateAsync({type:"blob"}).then((blob) => {
FileSaver.saveAs(blob, `poa_network_validator_keys.zip`);
});
}
async onClick() {
this.setState({loading:true});
const initialKey = window.web3.eth.defaultAccount;
@ -101,10 +126,11 @@ class App extends Component {
voting: voting.jsonStore.address,
payout: payout.jsonStore.address,
sender: initialKey
}).then((receipt) => {
}).then(async (receipt) => {
console.log(receipt);
this.setState({loading: false})
swal("Congratulations!", "Your keys are generated!", "success");
await this.generateZip({mining, voting, payout});
}).catch((error) => {
console.error(error.message);
this.setState({loading: false, keysGenerated: false})

View File

@ -3,7 +3,7 @@ const CORE_ADDRESSES = {
}
const SOKOL_ADDRESSES = {
KEYS_MANAGER_ADDRESS: "0xD480319659AFe5044FB09e2B92d10c987044DE4B",
KEYS_MANAGER_ADDRESS: "0x1aa02bd52fe418ac70263351282f66f1dacf898c",
}
module.exports = (netId) => {