diff --git a/assets/javascripts/application.js b/assets/javascripts/application.js old mode 100644 new mode 100755 index 09b2bd6..c63585a --- a/assets/javascripts/application.js +++ b/assets/javascripts/application.js @@ -1,16 +1,9 @@ -function generateAddress(e){var t={keyBytes:32,ivBytes:16};keythereum.create(t);keythereum.create(t,function(t){var n={},r=generatePassword();keythereum.dump(r,t.privateKey,t.salt,t.iv,n,function(t){console.log(t),console.log(JSON.stringify(t)),e(t,r)})})}function generatePassword(){for(var e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",t="",n=0,r=e.length;n<8;++n)t+=e.charAt(Math.floor(Math.random()*r));return t}function addValidator(e,t,n,r,o,i){SHA3Encrypt(e,t,function(t){var a=t.substring(0,10);n.miningKey.indexOf("0x")>-1&&(n.miningKey=n.miningKey.substr(2)),n.miningKey=n.miningKey.toLowerCase();var s="0x"+toUnifiedLengthRight(toHexString(toUTF8Array(n.fullName))),u="0x"+toUnifiedLengthRight(toHexString(toUTF8Array(n.streetName))),c="0x"+toUnifiedLengthRight(toHexString(toUTF8Array(n.state))),f=224,l=f+32*countRows(s),d=l+32*countRows(u),p=a+toUnifiedLengthLeft(n.miningKey)+toUnifiedLengthLeft(n.zip.toString(16))+toUnifiedLengthLeft(n.licenseID.toString(16))+toUnifiedLengthLeft(n.licenseExpiredAt.toString(16))+toUnifiedLengthLeft(f.toString(16))+toUnifiedLengthLeft(l.toString(16))+toUnifiedLengthLeft(d.toString(16))+toUnifiedLengthLeft(bytesCount(n.fullName).toString(16))+s.substring(2)+toUnifiedLengthLeft(bytesCount(n.streetName).toString(16))+u.substring(2)+toUnifiedLengthLeft(bytesCount(n.state).toString(16))+c.substring(2);estimateGas(e,r,o,p,null,function(t,n){if(n)return void i(null,n);t+=1e5,sendTx(e,r,o,p,null,t,function(e,t){if(t)return void i(e,t);i(e)})})})}function SHA3Encrypt(e,t,n){n(e.sha3(t))}function estimateGas(e,t,n,r,o,i){var a;a=o?{from:t,value:o,data:null,to:n}:{from:t,data:r,to:n},e.eth.estimateGas(a,function(e,t){console.log(e),console.log(t),i(t)})}function sendTx(e,t,n,r,o,i,a){var s;s=o?{from:t,value:o,to:n,gas:i}:{from:t,data:r,to:n,gas:i},e.eth.sendTransaction(s,function(e,t){a(t,e)})}function call(e,t,n,r,o){var i;i=t?{from:t,data:r,to:n}:{data:r,to:n},e.eth.call(i,function(e,t){o(t)})}function checkInitialKey(e,t,n,r,o){SHA3Encrypt(e,t,function(t){var i=t.substring(0,10),a=i+toUnifiedLengthLeft(n);call(e,"0x"+n,r,a,function(e){console.log(e),o(parseInt(e,16))})})}function toUnifiedLengthLeft(e){for(var t="",n=0;n<64-e.length;n++)t+="0";return t+=e}function countRows(e){return e.length%64>0?parseInt(e.length/64)+1:parseInt(e.length/64)}function toUnifiedLengthRight(e){var t="";t+=e;for(var n=countRows(e),r=0;r<64*n-e.length;r++)t+="0";return t}function toUTF8Array(e){for(var t=[],n=0;n>6,128|63&r):r<55296||r>=57344?t.push(224|r>>12,128|r>>6&63,128|63&r):(n++,r=65536+((1023&r)<<10|1023&e.charCodeAt(n)),t.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|63&r))}return t}function toHexString(e){return e.map(function(e){return("0"+(255&e).toString(16)).slice(-2)}).join("")}function bytesCount(e){return encodeURI(e).split(/%..|./).length-1}function createKeys(e,t,n,r,o,i){SHA3Encrypt(e,t,function(t){var a=t.substring(0,10),s=a+toUnifiedLengthLeft(n.miningKey.miningKeyObject.address)+toUnifiedLengthLeft(n.payoutKey.payoutKeyObject.address)+toUnifiedLengthLeft(n.votingKey.votingKeyObject.address);estimateGas(e,r,o,s,null,function(t){t+=1e5,sendTx(e,r,o,s,null,t,function(e,t){if(t)return void i(e,t);i(e)})})})}function download(e,t){var n=document.createElement("a");n.setAttribute("href","data:application/json;charset=utf-8,"+encodeURIComponent(t)),n.setAttribute("download",e),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n)}function getWeb3(e){if(void 0===window.web3){console.error("Please use a web3 browser");swal("Warning","You are not connected to Ethereum. Please, switch on Parity or MetaMask client and refresh the page.","warning")}else{var t=new Web3(window.web3.currentProvider);t.eth.defaultAccount=window.web3.eth.defaultAccount,checkNetworkVersion(t),e(t)}}function checkNetworkVersion(e){var t="You are not connected to Oracles network. Please, switch on Parity or MetaMask client and refresh the page.";e.version.getNetwork(function(e,n){switch(console.log(n),n){case"1":console.log("This is mainnet"),swal("Warning",t,"warning");break;case"2":console.log("This is the deprecated Morden test network."),swal("Warning",t,"warning");break;case"3":console.log("This is the ropsten test network."),swal("Warning",t,"warning");break;case"8995":console.log("This is Oracles from Metamask");break;default:console.log("This is an unknown network."),swal("Warning",t,"warning")}})}function startDapp(e){$(function(){function t(){$(this).remove(),$("").change(t).appendTo($(".create-keys"));var r=$(this).prop("files")[0],o=new FileReader;o.readAsText(r,"UTF-8"),o.onload=function(t){try{a=JSON.parse(t.target.result)}catch(e){return swal("Error","Invalid key file","error")}var r=JSON.parse(t.target.result),o=r.address;if(!o)return swal("Error","No address in key file","error");checkInitialKey(e,"checkInitialKey(address)",o,i.Ethereum[i.environment].contractAddress,function(t){if(!(t=!!+t))return swal("Error","Initial key is already activated or isn't valid","error");$(".loading-container").show(),setTimeout(function(){i?n(e,i,o):$.getJSON("./assets/javascripts/config.json",function(t){i=t,n(e,i,o)})},500)})},o.onerror=function(e){swal("Error","Error in reading file","error")}}function n(e,t,n){var o=0;for(var i in s)o++;var a=0;generateAddress(function(e,t){a++,s.miningKey={},e.name="miningKey",s.miningKey.miningKeyObject=e,s.miningKey.password=t,a==o&&r(s,n)}),generateAddress(function(e,t){a++,s.payoutKey={},e.name="payoutKey",s.payoutKey.payoutKeyObject=e,s.payoutKey.password=t,a==o&&r(s,n)}),generateAddress(function(e,t){a++,s.votingKey={},e.name="votingKey",s.votingKey.votingKeyObject=e,s.votingKey.password=t,a==o&&r(s,n)})}function r(t,n){var r={miningKey:"0x"+t.miningKey.miningKeyObject.address,fullName:$("#full-name").val(),streetName:$("#address").val(),state:$("#state").val(),zip:$("#zip").val(),licenseID:$("#license-id").val(),licenseExpiredAt:new Date($("#license-expiration").val()).getTime()/1e3};addValidator(e,"addValidator(address,uint256,uint256,uint256,string,string,string)",r,n,i.Ethereum[i.environment].contractAddress,function(r,a){if(a)return $(".loading-container").hide(),console.log(a.message),void("REQUEST_REJECTED"!=a.type&&swal("Error","Error in addresses addition to contract","error"));createKeys(e,"createKeys(address,address,address)",t,n,i.Ethereum[i.environment].contractAddress,function(e,t){if(t)return $(".loading-container").hide(),console.log(t.message),void("REQUEST_REJECTED"!=t.type&&swal("Error","Error in addresses addition to contract","error"));o(n,t)})})}function o(t,n){if(n)return $(".loading-container").hide(),void swal("Error",n.message,"error");e.eth.getBalance(t,function(n,r){if(n)return console.log(n),void $(".loading-container").hide();var o="0x"+s.payoutKey.payoutKeyObject.address;e.eth.getGasPrice(function(n,i){if(n)return console.log(n),void $(".loading-container").hide();var a=i.c[0];estimateGas(e,t,o,null,parseInt(r/2),function(n,i){if(i)return console.log(i),void $(".loading-container").hide();var u=r-10*n*a;console.log("ammountToSend: "+u),e.eth.sendTransaction({gas:n,from:t,to:o,value:u},function(e,t){if(e)return console.log(e),void $(".loading-container").hide();$(".loading-container").hide(),swal("Sucess","Keys are created","success"),$(".content").empty(),$(".content").load("./keys.html",function(){$("#miningKey").text("0x"+s.miningKey.miningKeyObject.address),$("#payoutKey").text("0x"+s.payoutKey.payoutKeyObject.address),$("#votingKey").text("0x"+s.votingKey.votingKeyObject.address),$("#miningKeyPass").text(s.miningKey.password),$("#payoutKeyPass").text(s.payoutKey.password),$("#votingKeyPass").text(s.votingKey.password),$("#miningKeyDownload").click(function(){download("key_"+s.miningKey.miningKeyObject.address,JSON.stringify(s.miningKey.miningKeyObject))}),$("#payoutKeyDownload").click(function(){download("key_"+s.payoutKey.payoutKeyObject.address,JSON.stringify(s.payoutKey.payoutKeyObject))}),$("#votingKeyDownload").click(function(){download("key_"+s.votingKey.votingKeyObject.address,JSON.stringify(s.votingKey.votingKeyObject))})})})})})})}$(".loading-container").hide();var i,s={miningKey:{},payoutKey:{},votingKey:{}};$.getJSON("./assets/javascripts/config.json",function(e){i=e}),$(".create-keys-button").click(function(){$("#initialKeySource").click()}),$("#initialKeySource").change(t)})}!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t=!!e&&"length"in e&&e.length,n=ie.type(e);return"function"!==n&&!ie.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e,t,n){if(ie.isFunction(t))return ie.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return ie.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(ye.test(t))return ie.filter(t,e,n);t=ie.filter(t,e)}return ie.grep(e,function(e){return Z.call(t,e)>-1!==n})}function o(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function i(e){var t={};return ie.each(e.match(_e)||[],function(e,n){t[n]=!0}),t}function a(){J.removeEventListener("DOMContentLoaded",a),e.removeEventListener("load",a),ie.ready()}function s(){this.expando=ie.expando+s.uid++}function u(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Oe,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Se.test(n)?ie.parseJSON(n):n)}catch(e){}Te.set(e,t,n)}else n=void 0;return n}function c(e,t,n,r){var o,i=1,a=20,s=r?function(){return r.cur()}:function(){return ie.css(e,t,"")},u=s(),c=n&&n[3]||(ie.cssNumber[t]?"":"px"),f=(ie.cssNumber[t]||"px"!==c&&+u)&&Ce.exec(ie.css(e,t));if(f&&f[3]!==c){c=c||f[3],n=n||[],f=+u||1;do{i=i||".5",f/=i,ie.style(e,t,f+c)}while(i!==(i=s()/u)&&1!==i&&--a)}return n&&(f=+f||+u||0,o=n[1]?f+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=f,r.end=o)),o}function f(e,t){var n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&ie.nodeName(e,t)?ie.merge([e],n):n}function l(e,t){for(var n=0,r=e.length;r>n;n++)Ae.set(e[n],"globalEval",!t||Ae.get(t[n],"globalEval"))}function d(e,t,n,r,o){for(var i,a,s,u,c,d,p=t.createDocumentFragment(),h=[],y=0,m=e.length;m>y;y++)if((i=e[y])||0===i)if("object"===ie.type(i))ie.merge(h,i.nodeType?[i]:i);else if(Me.test(i)){for(a=a||p.appendChild(t.createElement("div")),s=(De.exec(i)||["",""])[1].toLowerCase(),u=je[s]||je._default,a.innerHTML=u[1]+ie.htmlPrefilter(i)+u[2],d=u[0];d--;)a=a.lastChild;ie.merge(h,a.childNodes),a=p.firstChild,a.textContent=""}else h.push(t.createTextNode(i));for(p.textContent="",y=0;i=h[y++];)if(r&&ie.inArray(i,r)>-1)o&&o.push(i);else if(c=ie.contains(i.ownerDocument,i),a=f(p.appendChild(i),"script"),c&&l(a),n)for(d=0;i=a[d++];)Re.test(i.type||"")&&n.push(i);return p}function p(){return!0}function h(){return!1}function y(){try{return J.activeElement}catch(e){}}function m(e,t,n,r,o,i){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)m(e,s,n,r,t[s],i);return e}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&("string"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),!1===o)o=h;else if(!o)return e;return 1===i&&(a=o,o=function(e){return ie().off(e),a.apply(this,arguments)},o.guid=a.guid||(a.guid=ie.guid++)),e.each(function(){ie.event.add(this,t,o,r,n)})}function v(e,t){return ie.nodeName(e,"table")&&ie.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function g(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function b(e){var t=We.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _(e,t){var n,r,o,i,a,s,u,c;if(1===t.nodeType){if(Ae.hasData(e)&&(i=Ae.access(e),a=Ae.set(t,i),c=i.events)){delete a.handle,a.events={};for(o in c)for(n=0,r=c[o].length;r>n;n++)ie.event.add(t,o,c[o][n])}Te.hasData(e)&&(s=Te.access(e),u=ie.extend({},s),Te.set(t,u))}}function x(e,t){var n=t.nodeName.toLowerCase();"input"===n&&Ne.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function w(e,t,n,r){t=X.apply([],t);var o,i,a,s,u,c,l=0,p=e.length,h=p-1,y=t[0],m=ie.isFunction(y);if(m||p>1&&"string"==typeof y&&!re.checkClone&&Ue.test(y))return e.each(function(o){var i=e.eq(o);m&&(t[0]=y.call(this,o,i.html())),w(i,t,n,r)});if(p&&(o=d(t,e[0].ownerDocument,!1,e,r),i=o.firstChild,1===o.childNodes.length&&(o=i),i||r)){for(a=ie.map(f(o,"script"),g),s=a.length;p>l;l++)u=o,l!==h&&(u=ie.clone(u,!0,!0),s&&ie.merge(a,f(u,"script"))),n.call(e[l],u,l);if(s)for(c=a[a.length-1].ownerDocument,ie.map(a,b),l=0;s>l;l++)u=a[l],Re.test(u.type||"")&&!Ae.access(u,"globalEval")&&ie.contains(c,u)&&(u.src?ie._evalUrl&&ie._evalUrl(u.src):ie.globalEval(u.textContent.replace(ze,"")))}return e}function k(e,t,n){for(var r,o=t?ie.filter(t,e):e,i=0;null!=(r=o[i]);i++)n||1!==r.nodeType||ie.cleanData(f(r)),r.parentNode&&(n&&ie.contains(r.ownerDocument,r)&&l(f(r,"script")),r.parentNode.removeChild(r));return e}function A(e,t){var n=ie(t.createElement(e)).appendTo(t.body),r=ie.css(n[0],"display");return n.detach(),r}function T(e){var t=J,n=$e[e];return n||(n=A(e,t),"none"!==n&&n||(Ge=(Ge||ie("