diff --git a/README.md b/README.md index 0eae7fa..07422db 100644 --- a/README.md +++ b/README.md @@ -21,3 +21,13 @@ Path: `./assets/javascripts/config.json` } } ``` + +## Building from source + +1) `npm install` + +2) `npm run sass` + +3) `npm run coffee` + +4) `npm start` \ No newline at end of file diff --git a/assets/javascripts/application.js b/assets/javascripts/application.js old mode 100644 new mode 100755 index dda72ab..6d9521a --- 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);console.log(i),console.log("0x"+n),console.log(r),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(){function n(e,t){$.getJSON("./assets/javascripts/config.json",function(e){t(e)})}function r(e,t,n){if(1==t.length){checkInitialKey(e,"checkInitialKey(address)",t[0].substr(2),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==t.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(function(){o(this,n,function(e){i(h,function(t){s(n,t,e,function(e,n){c(e,n,t)})})})})}function o(t,n,r){$(t).remove(),$("").change(o).appendTo($(".create-keys"));var i=$(t).prop("files")[0],s=new FileReader;s.readAsText(i,"UTF-8"),s.onload=function(t){try{a=JSON.parse(t.target.result)}catch(e){return swal("Error","Invalid key file","error")}var o=JSON.parse(t.target.result),i=o.address;if(!i)return swal("Error","No address in key file","error");checkInitialKey(e,"checkInitialKey(address)",i,n.Ethereum[n.environment].contractAddress,function(e){if(!(e=!!+e))return swal("Error","Initial key is already activated or isn't valid","error");$(".loading-container").show(),setTimeout(function(){r(i)},500)})},s.onerror=function(e){swal("Error","Error in reading file","error")}}function i(e,t){var n=0;for(var r in e)n++;var o=0;generateAddress(function(r,a){o++,e.miningKey={},r.name="miningKey",e.miningKey.miningKeyObject=r,e.miningKey.password=a,o==n&&t(e)}),generateAddress(function(r,a){o++,e.payoutKey={},r.name="payoutKey",e.payoutKey.payoutKeyObject=r,e.payoutKey.password=a,o==n&&t(e)}),generateAddress(function(r,a){o++,e.votingKey={},r.name="votingKey",e.votingKey.votingKeyObject=r,e.votingKey.password=a,o==n&&t(e)})}function s(t,n,r,o){var a={miningKey:"0x"+n.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)",a,r,t.Ethereum[t.environment].contractAddress,function(a,i){if(i)return $(".loading-container").hide(),console.log(i.message),void("REQUEST_REJECTED"!=i.type&&swal("Error","Error in addresses addition to contract","error"));createKeys(e,"createKeys(address,address,address)",n,r,t.Ethereum[t.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(t,r)})})}function c(e,t,n){if(e)return $(".loading-container").hide(),void swal("Error",e.message,"error");var r="0x"+n.payoutKey.payoutKeyObject.address;u(t,function(e){l(function(n){d(t,r,e,function(o){f(o,n,e,function(e){p(o,n,t,r,e)})})})})}function u(t,n){e.eth.getBalance(t,function(e,t){if(e)return console.log(e),void $(".loading-container").hide();n(t)})}function l(t){e.eth.getGasPrice(function(e,n){if(e)return console.log(e),void $(".loading-container").hide();var r=n.c[0];t(r)})}function d(t,n,r,o){estimateGas(e,t,n,null,parseInt(r/2),function(e,t){if(t)return console.log(t),void $(".loading-container").hide();o(e)})}function f(e,t,n,r){var o=n-20*e*t;console.log("ammountToSend: "+o),r(o)}function p(t,n,r,o,a){e.eth.sendTransaction({gas:t,from:r,to:o,value:a},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"+h.miningKey.miningKeyObject.address),$("#payoutKey").text("0x"+h.payoutKey.payoutKeyObject.address),$("#votingKey").text("0x"+h.votingKey.votingKeyObject.address),$("#miningKeyPass").text(h.miningKey.password),$("#payoutKeyPass").text(h.payoutKey.password),$("#votingKeyPass").text(h.votingKey.password),$("#miningKeyDownload").click(function(){download("key_"+h.miningKey.miningKeyObject.address,JSON.stringify(h.miningKey.miningKeyObject))}),$("#payoutKeyDownload").click(function(){download("key_"+h.payoutKey.payoutKeyObject.address,JSON.stringify(h.payoutKey.payoutKeyObject))}),$("#votingKeyDownload").click(function(){download("key_"+h.votingKey.votingKeyObject.address,JSON.stringify(h.votingKey.votingKeyObject))})})})}if($(".loading-container").hide(),t){var h={miningKey:{},payoutKey:{},votingKey:{}};e.eth.getAccounts(function(t,o){if(t)return $(".loading-container").hide(),void swal("Error",t.message,"error");n(t,function(t){r(e,o,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=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("