diff --git a/assets/javascripts/application.js b/assets/javascripts/application.js index f797a42..dda72ab 100644 --- a/assets/javascripts/application.js +++ b/assets/javascripts/application.js @@ -1,9 +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,a){SHA3Encrypt(e,t,function(t){var i=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))),c="0x"+toUnifiedLengthRight(toHexString(toUTF8Array(n.streetName))),u="0x"+toUnifiedLengthRight(toHexString(toUTF8Array(n.state))),l=224,d=l+32*countRows(s),f=d+32*countRows(c),p=i+toUnifiedLengthLeft(n.miningKey)+toUnifiedLengthLeft(n.zip.toString(16))+toUnifiedLengthLeft(n.licenseID.toString(16))+toUnifiedLengthLeft(n.licenseExpiredAt.toString(16))+toUnifiedLengthLeft(l.toString(16))+toUnifiedLengthLeft(d.toString(16))+toUnifiedLengthLeft(f.toString(16))+toUnifiedLengthLeft(bytesCount(n.fullName).toString(16))+s.substring(2)+toUnifiedLengthLeft(bytesCount(n.streetName).toString(16))+c.substring(2)+toUnifiedLengthLeft(bytesCount(n.state).toString(16))+u.substring(2);estimateGas(e,r,o,p,null,function(t,n){if(n)return void a(null,n);t+=1e5,sendTx(e,r,o,p,null,t,function(e,t){if(t)return void a(e,t);a(e)})})})}function SHA3Encrypt(e,t,n){n(e.sha3(t))}function estimateGas(e,t,n,r,o,a){var i;i=o?{from:t,value:o,data:null,to:n}:{from:t,data:r,to:n},e.eth.estimateGas(i,function(e,t){console.log(e),console.log(t),a(t)})}function sendTx(e,t,n,r,o,a,i){var s;s=o?{from:t,value:o,to:n,gas:a}:{from:t,data:r,to:n,gas:a},e.eth.sendTransaction(s,function(e,t){i(t,e)})}function call(e,t,n,r,o){var a;a=t?{from:t,data:r,to:n}:{data:r,to:n},e.eth.call(a,function(e,t){o(t)})}function checkInitialKey(e,t,n,r,o){SHA3Encrypt(e,t,function(t){var a=t.substring(0,10),i=a+toUnifiedLengthLeft(n);call(e,"0x"+n,r,i,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,a){SHA3Encrypt(e,t,function(t){var i=t.substring(0,10),s=i+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 a(e,t);a(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 aren't connected to Ethereum. Please, switch on Parity or MetaMask client and refresh the page. Check Oracles network wiki for more info.","warning"),e(t,!1)}else{var t=new Web3(window.web3.currentProvider);t.eth.defaultAccount=window.web3.eth.defaultAccount,checkNetworkVersion(t,function(n){e(t,n)})}}function checkNetworkVersion(e,t){var n="You aren't connected to Oracles network. Please, switch on Parity or MetaMask client and choose Oracles network. Check Oracles network wiki for more info.";e.version.getNetwork(function(e,r){switch(e&&console.log(e),console.log("netId: "+r),r){case"1":console.log("This is mainnet"),swal("Warning",n,"warning"),t(!1);break;case"2":console.log("This is the deprecated Morden test network."),swal("Warning",n,"warning"),t(!1);break;case"3":console.log("This is the ropsten test network."),swal("Warning",n,"warning"),t(!1);break;case"12648430":console.log("This is Oracles from Metamask"),t(!0);break;default:console.log("This is an unknown network."),swal("Warning",n,"warning"),t(!1)}})}function startDapp(e,t){$(function(){if($(".loading-container").hide(),t){var n,r={miningKey:{},payoutKey:{},votingKey:{}};e.eth.getAccounts(function(t,o){console.log(o),$.getJSON("./assets/javascripts/config.json",function(t){function i(){$(this).remove(),$("").change(i).appendTo($(".create-keys"));var t=$(this).prop("files")[0],r=new FileReader;r.readAsText(t,"UTF-8"),r.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,n.Ethereum[n.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(){n?s(e,n,o):$.getJSON("./assets/javascripts/config.json",function(t){n=t,s(e,n,o)})},500)})},r.onerror=function(e){swal("Error","Error in reading file","error")}}function s(e,t,n){var o=0;for(var a in r)o++;var i=0;generateAddress(function(e,t){i++,r.miningKey={},e.name="miningKey",r.miningKey.miningKeyObject=e,r.miningKey.password=t,i==o&&c(r,n)}),generateAddress(function(e,t){i++,r.payoutKey={},e.name="payoutKey",r.payoutKey.payoutKeyObject=e,r.payoutKey.password=t,i==o&&c(r,n)}),generateAddress(function(e,t){i++,r.votingKey={},e.name="votingKey",r.votingKey.votingKeyObject=e,r.votingKey.password=t,i==o&&c(r,n)})}function c(t,r){var o={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)",o,r,n.Ethereum[n.environment].contractAddress,function(o,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,r,n.Ethereum[n.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"));u(r,t)})})}function u(t,n){if(n)return $(".loading-container").hide(),void swal("Error",n.message,"error");e.eth.getBalance(t,function(n,o){if(n)return console.log(n),void $(".loading-container").hide();var a="0x"+r.payoutKey.payoutKeyObject.address;e.eth.getGasPrice(function(n,i){if(n)return console.log(n),void $(".loading-container").hide();var s=i.c[0];estimateGas(e,t,a,null,parseInt(o/2),function(n,i){if(i)return console.log(i),void $(".loading-container").hide();var c=o-20*n*s;console.log("ammountToSend: "+c),e.eth.sendTransaction({gas:n,from:t,to:a,value:c},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"+r.miningKey.miningKeyObject.address),$("#payoutKey").text("0x"+r.payoutKey.payoutKeyObject.address),$("#votingKey").text("0x"+r.votingKey.votingKeyObject.address),$("#miningKeyPass").text(r.miningKey.password),$("#payoutKeyPass").text(r.payoutKey.password),$("#votingKeyPass").text(r.votingKey.password),$("#miningKeyDownload").click(function(){download("key_"+r.miningKey.miningKeyObject.address,JSON.stringify(r.miningKey.miningKeyObject))}),$("#payoutKeyDownload").click(function(){download("key_"+r.payoutKey.payoutKeyObject.address,JSON.stringify(r.payoutKey.payoutKeyObject))}),$("#votingKeyDownload").click(function(){download("key_"+r.votingKey.votingKeyObject.address,JSON.stringify(r.votingKey.votingKeyObject))})})})})})})}if(n=t,1==o.length){var l=o[0].substr(2);checkInitialKey(e,"checkInitialKey(address)",l,n.Ethereum[n.environment].contractAddress,function(e){(e=!!+e)||swal("Warning","Current key isn't valid initial key. Please, choose your initial key in MetaMask and reload the page. Check Oracles network wiki for more info.","warning")})}else 0==o.length&&swal("Warning","You haven't chosen any account in MetaMask. Please, choose your initial key in MetaMask and reload the page. Check Oracles network wiki for more info.","warning");$(".create-keys-button").click(function(){$("#initialKeySource").click()}),$("#initialKeySource").change(i)})})}})}!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=ae.type(e);return"function"!==n&&!ae.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e,t,n){if(ae.isFunction(t))return ae.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return ae.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(me.test(t))return ae.filter(t,e,n);t=ae.filter(t,e)}return ae.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 a(e){var t={};return ae.each(e.match(xe)||[],function(e,n){t[n]=!0}),t}function i(){J.removeEventListener("DOMContentLoaded",i),e.removeEventListener("load",i),ae.ready()}function s(){this.expando=ae.expando+s.uid++}function c(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Ce,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:Se.test(n)?ae.parseJSON(n):n)}catch(e){}Te.set(e,t,n)}else n=void 0;return n}function u(e,t,n,r){var o,a=1,i=20,s=r?function(){return r.cur()}:function(){return ae.css(e,t,"")},c=s(),u=n&&n[3]||(ae.cssNumber[t]?"":"px"),l=(ae.cssNumber[t]||"px"!==u&&+c)&&De.exec(ae.css(e,t));if(l&&l[3]!==u){u=u||l[3],n=n||[],l=+c||1;do{a=a||".5",l/=a,ae.style(e,t,l+u)}while(a!==(a=s()/c)&&1!==a&&--i)}return n&&(l=+l||+c||0,o=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=u,r.start=l,r.end=o)),o}function l(e,t){var n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&ae.nodeName(e,t)?ae.merge([e],n):n}function d(e,t){for(var n=0,r=e.length;r>n;n++)Ae.set(e[n],"globalEval",!t||Ae.get(t[n],"globalEval"))}function f(e,t,n,r,o){for(var a,i,s,c,u,f,p=t.createDocumentFragment(),h=[],m=0,y=e.length;y>m;m++)if((a=e[m])||0===a)if("object"===ae.type(a))ae.merge(h,a.nodeType?[a]:a);else if(Ie.test(a)){for(i=i||p.appendChild(t.createElement("div")),s=(Pe.exec(a)||["",""])[1].toLowerCase(),c=Fe[s]||Fe._default,i.innerHTML=c[1]+ae.htmlPrefilter(a)+c[2],f=c[0];f--;)i=i.lastChild;ae.merge(h,i.childNodes),i=p.firstChild,i.textContent=""}else h.push(t.createTextNode(a));for(p.textContent="",m=0;a=h[m++];)if(r&&ae.inArray(a,r)>-1)o&&o.push(a);else if(u=ae.contains(a.ownerDocument,a),i=l(p.appendChild(a),"script"),u&&d(i),n)for(f=0;a=i[f++];)Re.test(a.type||"")&&n.push(a);return p}function p(){return!0}function h(){return!1}function m(){try{return J.activeElement}catch(e){}}function y(e,t,n,r,o,a){var i,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)y(e,s,n,r,t[s],a);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===a&&(i=o,o=function(e){return ae().off(e),i.apply(this,arguments)},o.guid=i.guid||(i.guid=ae.guid++)),e.each(function(){ae.event.add(this,t,o,r,n)})}function g(e,t){return ae.nodeName(e,"table")&&ae.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function b(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function v(e){var t=We.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function x(e,t){var n,r,o,a,i,s,c,u;if(1===t.nodeType){if(Ae.hasData(e)&&(a=Ae.access(e),i=Ae.set(t,a),u=a.events)){delete i.handle,i.events={};for(o in u)for(n=0,r=u[o].length;r>n;n++)ae.event.add(t,o,u[o][n])}Te.hasData(e)&&(s=Te.access(e),c=ae.extend({},s),Te.set(t,c))}}function w(e,t){var n=t.nodeName.toLowerCase();"input"===n&&Oe.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function k(e,t,n,r){t=Q.apply([],t);var o,a,i,s,c,u,d=0,p=e.length,h=p-1,m=t[0],y=ae.isFunction(m);if(y||p>1&&"string"==typeof m&&!re.checkClone&&Ue.test(m))return e.each(function(o){var a=e.eq(o);y&&(t[0]=m.call(this,o,a.html())),k(a,t,n,r)});if(p&&(o=f(t,e[0].ownerDocument,!1,e,r),a=o.firstChild,1===o.childNodes.length&&(o=a),a||r)){for(i=ae.map(l(o,"script"),b),s=i.length;p>d;d++)c=o,d!==h&&(c=ae.clone(c,!0,!0),s&&ae.merge(i,l(c,"script"))),n.call(e[d],c,d);if(s)for(u=i[i.length-1].ownerDocument,ae.map(i,v),d=0;s>d;d++)c=i[d],Re.test(c.type||"")&&!Ae.access(c,"globalEval")&&ae.contains(u,c)&&(c.src?ae._evalUrl&&ae._evalUrl(c.src):ae.globalEval(c.textContent.replace(ze,"")))}return e}function _(e,t,n){for(var r,o=t?ae.filter(t,e):e,a=0;null!=(r=o[a]);a++)n||1!==r.nodeType||ae.cleanData(l(r)),r.parentNode&&(n&&ae.contains(r.ownerDocument,r)&&d(l(r,"script")),r.parentNode.removeChild(r));return e}function A(e,t){var n=ae(t.createElement(e)).appendTo(t.body),r=ae.css(n[0],"display");return n.detach(),r}function T(e){var t=J,n=Ke[e];return n||(n=A(e,t),"none"!==n&&n||($e=($e||ae("