diff --git a/.DS_Store b/.DS_Store index e1f907c..a702111 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Extension.zip b/Extension.zip index d4e0024..5a25119 100644 Binary files a/Extension.zip and b/Extension.zip differ diff --git a/extension/.DS_Store b/extension/.DS_Store index b1aba95..75ba696 100644 Binary files a/extension/.DS_Store and b/extension/.DS_Store differ diff --git a/extension/Resources/wallet/account.min.js b/extension/Resources/wallet/account.min.js index 2689120..00a34e4 100644 --- a/extension/Resources/wallet/account.min.js +++ b/extension/Resources/wallet/account.min.js @@ -1 +1 @@ -var AccountSettings=new function(){function b(o){var n=o.lastIndexOf("@");var m=o.lastIndexOf(".");return(n0&&o.indexOf("@@")==-1&&m>2&&(o.length-m)>2)}function c(m){try{var n=window.applicationCache;console.log("Clear Cache Manifest");n.addEventListener("updateready",function(p){n.swapCache();if(m){m()}},false);n.addEventListener("noupdate",function(p){if(m){m()}},false);n.addEventListener("error",function(p){if(m){m()}},false);n.update()}catch(o){console.log(o);if(m){m()}}}function j(n,r,p,q,o,m){p=$.trim(p);if(p.length==0){MyWallet.makeNotice("error","misc-error",n+": Invalid value");return}if(p.length==0){MyWallet.makeNotice("error",r+"-error",data.responseText);if(o){o()}return}MyWallet.setLoadingText(n);if(!m){m=""}MyWallet.securePost("wallet"+m,{length:(p+"").length,payload:p+"",method:r},function(s){MyWallet.makeNotice("success",r+"-success",s);if(q){q()}},function(s){MyWallet.makeNotice("error",r+"-error",s.responseText);if(o){o()}})}function i(){if(MyWallet.getDoubleEncryption()){$(".double-encryption-off").hide();$(".double-encryption-on").show()}else{$(".double-encryption-on").hide();$(".double-encryption-off").show()}$("#double-password").val("");$("#double-password2").val("")}function l(){$("#password_mnemonic1").find("span").empty();$("#password_mnemonic2").find("span").empty()}function g(){l();var n=$("#password_mnemonic1");var m=$("#password_mnemonic2");loadScript("wallet/mnemonic",function(){MyWallet.getMainPassword(function(o){MyWallet.getSecondPassword(function(p){try{mn_encode_pass({password:o,guid:MyWallet.getGuid()},function(r){n.show().find("span").text(r)},function(r){MyWallet.makeNotice("error","misc-error",r)});if(p){mn_encode_pass({password:p},function(r){m.show().find("span").text(r)},function(r){MyWallet.makeNotice("error","misc-error",r)})}else{m.hide()}}catch(q){console.log(q);f()}},function(){f()})},function(){f()})})}this.bind=function(n,m){i();e();a(n,m)};this.init=function(m,o,n){MyWallet.setLoadingText("Loading Account Settings");if(!m.is(":empty")){AccountSettings.bind(o,n);o();return}$.ajax({type:"GET",url:root+"wallet/account-settings-template",data:{format:"plain"},success:function(p){try{m.html(p);AccountSettings.bind(o,n);o()}catch(q){console.log(q);n()}},error:function(p){MyWallet.makeNotice("error","misc-error","Error Downloading Account Settings Template");n()}})};function a(n,m){$('a[data-toggle="tab"]').unbind().on("show",function(o){$(o.target.hash).trigger("show")});MyWallet.setLoadingText("Getting Wallet Info");MyWallet.securePost("wallet",{method:"get-info",format:"json"},function(u){if(u.email!=null){$("#wallet-email").val(u.email);$(".my-email").text(u.email)}$("#wallet-phrase").val(u.phrase);$("#two-factor-select").val(u.auth_type);$(".two-factor").hide();$(".two-factor.t"+u.auth_type).show(200);var v=$("#notifications-type");v.find(":checkbox").prop("checked",false);v.find('[class^="type"]').hide();for(var w in u.notifications_type){var x=u.notifications_type[w];v.find(':checkbox[value="'+x+'"]').prop("checked",true);v.find(".type-"+x).show()}$(".logl").hide();$(".logl.l"+u.logging_level).show();$("#logging-level").val(u.logging_level);$("#notifications-confirmations").val(u.notifications_confirmations);$("#notifications-on").val(u.notifications_on);$("#pbkdf2-iterations").val(MyWallet.getPbkdf2Iterations());if(u.alias!=null&&u.alias.length>0){$("#wallet-alias").val(u.alias);$(".alias").text("https://blockchain.info/wallet/"+u.alias);$(".alias").show(200)}var p=$("#local_currency").empty();for(var y in u.currencies){var C=u.currencies[y];p.append('")}p.val(u.currency);var z=$("#btc_currency").empty();for(var y in u.btc_currencies){var C=u.btc_currencies[y];z.append('")}z.val(u.btc_currency);var s=$("#language_select").empty();for(var t in u.languages){var B=u.languages[t];s.append('")}s.val(u.language);$("#auto-email-backup").prop("checked",u.auto_email_backup==1?true:false);$("#never-save-auth-type").prop("checked",u.never_save_auth_type==1?true:false);$("#wallet-http-url").val(u.http_url);$("#wallet-skype").val(u.skype_username);$("#wallet-boxcar").val(u.boxcar_email);$("#wallet-yubikey").val(u.yubikey);if(u.password_hint1){$("#password-hint1").val(u.password_hint1)}if(u.password_hint2){$("#password-hint2").val(u.password_hint2)}$("#ip-lock").val(u.ip_lock);$("#my-ip").text(u.my_ip);$("#ip-lock-on").prop("checked",u.ip_lock_on==1?true:false);$("#block-tor-ips").prop("checked",u.block_tor_ips==1?true:false);$('input[name="fee-policy"]').each(function(){if(parseInt($(this).val())==MyWallet.getFeePolicy()){$(this).prop("checked",true)}});$('input[name="always-keep-local-backup"]').prop("checked",MyWallet.getAlwaysKeepLocalBackup()?true:false);$('input[name="inactivity-logout-time"]').each(function(){if(parseInt($(this).val())==MyWallet.getLogoutTime()){$(this).prop("checked",true)}});if(u.email_verified==0){$(".email-unverified").show();$(".email-verified").hide()}else{$(".email-unverified").hide();$(".email-verified").show()}$("#my-ip").text(u.my_ip);var o="1";if(u.sms_number){var r=u.sms_number.split(" ");if(u.sms_number[0]=="+"&&r.length>1){o=r[0].substring(1);$(".wallet-sms").val(r[1])}else{$(".wallet-sms").val(u.sms_number)}}if(u.sms_verified==0){$(".sms-unverified").show();$(".sms-verified").hide()}else{$(".sms-verified").show().trigger("show");$(".sms-unverified").hide()}$.ajax({type:"GET",url:resource+"wallet/country_codes.html",success:function(D){$('select[class="wallet-sms-country-codes"]').html(D).val(o)},error:function(){MyWallet.makeNotice("error","misc-error","Error Downloading SMS Country Codes")}});var A=function(H,E,F){try{if(window.webkitNotifications&&navigator.userAgent.indexOf("Chrome")>-1){var D=webkitNotifications.checkPermission();if(D==1&&F){webkitNotifications.requestPermission(A)}else{if(D==0){H()}else{E()}}}else{if(window.Notification){if(Notification.permissionLevel()==="default"&&F){Notification.requestPermission(A)}else{if(window.Notification.permissionLevel()=="granted"){H()}else{E()}}}else{E()}}}catch(G){console.log(G);E()}};var q=$("#html5-notifications-checkbox");q.unbind().change(function(){if($(this).is(":checked")){A(function(){MyWallet.makeNotice("success","misc-success","HTML5 Notifications Enabled");MyWallet.setHTML5Notifications(true);MyWallet.backupWallet()},function(){MyWallet.makeNotice("error","misc-error","Error Enabling HTML5 Notifications");MyWallet.setHTML5Notifications(false);MyWallet.backupWallet()},true)}else{MyWallet.setHTML5Notifications(false);MyWallet.backupWallet()}});if(MyWallet.getHTML5Notifications()){q.prop("checked",true)}else{q.prop("checked",false)}},function(o){if(o.responseText){MyWallet.makeNotice("error","misc-error",o.responseText)}else{MyWallet.makeNotice("error","misc-error","Error Downloading Account Settings")}if(m){m()}})}function k(){f();var m=$("#update-password-modal");m.modal({keyboard:true,backdrop:"static",show:true});m.center();m.find(".btn.btn-primary").unbind().click(function(){m.modal("hide");var n=$.trim($("#password").val());var o=$.trim($("#password2").val());if(n!=o){MyWallet.makeNotice("error","misc-error","Passwords do not match.");return false}if(n.length==0||n.length<10||n.length>255){MyWallet.makeNotice("error","misc-error","Password length must be between least 10 & 255 characters");return false}MyWallet.setMainPassword(n)});m.find(".btn.btn-secondary").unbind().click(function(){m.modal("hide")})}function f(){$(".accordion-body").collapse("hide")}function h(){MyWallet.setDoubleEncryption(false,null,function(){i()})}function d(){var m=$("#double-password").val();var n=$("#double-password2").val();if(m==null||m.length==0||m.length<4||m.length>255){MyWallet.makeNotice("error","misc-error","Password must be 4 characters or more in length");return}if(m!=n){MyWallet.makeNotice("error","misc-error","Passwords do not match.");return}if(MyWallet.isCorrectMainPassword(m)){MyWallet.makeNotice("error","misc-error","Second password should not be the same as your main password.");return}MyWallet.setDoubleEncryption(true,m,function(){i()})}function e(){var m=$("#notifications-type");m.find(":checkbox").unbind().change(function(){var p=[];m.find(":checkbox:checked").each(function(){p.push($(this).val())});if(!p.length){p.push(0)}j("Updating Notifications Type","update-notifications-type",p.join("|"));m.find(".type-"+$(this).val()).toggle();MyWallet.get_history()});$("input[name=fee-policy]").unbind().change(function(){MyWallet.setFeePolicy($("input[name=fee-policy]:checked").val());MyWallet.backupWallet()});$('input[name="always-keep-local-backup"]').unbind().change(function(){MyWallet.setAlwaysKeepLocalBackup($(this).is(":checked"));try{localStorage.removeItem("payload")}catch(p){}MyWallet.backupWallet()});$("input[name=inactivity-logout-time]").unbind().change(function(){MyWallet.setLogoutTime(parseInt($(this).val()));MyWallet.backupWallet()});$("#password_mnemonic").unbind().on("show",function(){g()}).on("hide",function(){l()});$("#pairing_code").unbind().on("show",function(){MyWallet.makePairingQRCode(function(p){$("#pairing-code-v0").html(p)},0);MyWallet.makePairingQRCode(function(p){$("#pairing-code-v1").html(p)},1);setTimeout(function(){f()},30000)}).on("hide",function(){$("#pairing-code-v1").empty();$("#pairing-code-v0").empty()});$("#update-password-btn").unbind().click(function(){k()});$("#password-hint1").unbind().change(function(){j("Updating Main Password Hint","update-password-hint1",$(this).val())});$("#password-hint2").unbind().change(function(){j("Updating Second Password Hint","update-password-hint2",$(this).val())});$("#ip-lock-on").unbind().change(function(){j("Updating IP Lock","update-ip-lock-on",$(this).is(":checked"))});$("#ip-lock").unbind().change(function(){j("Updating Locked Ip Addresses","update-ip-lock",$(this).val())});$("#notifications-on").unbind().change(function(){j("Updating Notifications Settings","update-notifications-on",$(this).val())});$("#auto-email-backup").unbind().change(function(){j("Updating Auto Backup Settings","update-auto-email-backup",$(this).is(":checked"))});$("#never-save-auth-type").unbind().change(function(){j("Updating Auth Saving Settings","update-never-save-auth-type",$(this).is(":checked"))});$("#wallet-google-qr-code").unbind().change(function(){var p=$(this).val();j("Updating Two Factor Authentication","update-auth-type",4,function(){$(".two-factor.t4").children().hide().eq(0).show();MyWallet.setRealAuthType(4)},null,"?code="+p)});$("#two-factor-select").unbind().change(function(){var r=parseInt($(this).val());try{localStorage.removeItem("payload")}catch(q){}var p=$(".two-factor.t"+r);if(r==4){p.children().hide().eq(1).show();MyWallet.securePost("wallet",{method:"generate-google-secret"},function(s){if(s!=null&&s.length>0){loadScript("wallet/jquery.qrcode",function(){$("#wallet-google-qr").empty().qrcode({width:300,height:300,text:s})})}},function(s){MyWallet.makeNotice("error","misc-error",s.responseText)})}else{j("Updating Two Factor Authentication","update-auth-type",r,function(){MyWallet.setRealAuthType(r)})}$(".two-factor").hide(200);p.show(200)});var n="";$("#wallet-email-send").click(function(){n="";$("#wallet-email").trigger("change")});$("#wallet-email").unbind().change(function(q){var p=$.trim($(this).val());if(p.length==0){return}if(n==p){return}if(!b(p)){MyWallet.makeNotice("error","misc-error","Email address is not valid");return}j("Updating Email","update-email",p,function(){n=p},function(){n=""});n=p;$(".email-unverified").show(200);$(".email-verified").hide()});$("#wallet-double-encryption-enable").unbind().click(function(p){f();d()});$("#wallet-double-encryption-disable").unbind().click(function(p){f();h()});$("#wallet-email-code").unbind().change(function(q){var p=$.trim($(this).val());if(p.length==0||p.length>255){MyWallet.makeNotice("error","misc-error","You must enter a code to verify");return}MyWallet.setLoadingText("Verifying Email");MyWallet.securePost("wallet",{payload:p,length:p.length,method:"verify-email"},function(r){MyWallet.makeNotice("success","misc-success",r);$(".email-unverified").hide();$(".email-verified").show(200)},function(r){MyWallet.makeNotice("error","misc-error",r.responseText);$(".email-unverified").show(200);$(".email-verified").hide()})});$(".wallet-sms-code").unbind().change(function(q){var p=$.trim($(this).val());if(p.length==0||p.length>255){MyWallet.makeNotice("error","misc-error","You must enter an SMS code to verify");return}MyWallet.setLoadingText("Verifying SMS Code");MyWallet.securePost("wallet",{payload:p,length:p.length,method:"verify-sms"},function(r){MyWallet.makeNotice("success","misc-success",r);$(".sms-unverified").hide();$(".sms-verified").show(200).trigger("show")},function(r){MyWallet.makeNotice("error","misc-error",r.responseText);$(".sms-verified").hide();$(".sms-unverified").show(200)})});var o="";$(".send-code").unbind().click(function(){o="";$(this).parent().find(".wallet-sms").trigger("change")});$('select[class="wallet-sms-country-codes"]').unbind().change(function(){o="";$(".wallet-sms").trigger("change")});$(".wallet-sms").unbind().change(function(){var p=$.trim($(this).val());if(p==null||p.length==0){return}if(p.charAt(0)!="+"){p="+"+$(".wallet-sms-country-codes").val()+p}if(o==p){return}o=p;j("Updating Cell Number","update-sms",p,function(){$(".sms-unverified").show(200);$(".sms-verified").hide()})});$("#run-key-check").unbind().click(function(){MyWallet.getSecondPassword(function(){try{MyWallet.checkAllKeys(true);MyWallet.backupWallet()}catch(p){MyWallet.makeNotice("error","misc-error",p)}})});$("#local_currency").unbind().change(function(){if(symbol!=symbol_local){toggleSymbol()}j("Updating Local Currency","update-currency",$(this).val(),function(){MyWallet.get_history()})});$("#btc_currency").unbind().change(function(){if(symbol!=symbol_btc){toggleSymbol()}j("Updating BTC Currency","update-btc-currency",$(this).val(),function(){MyWallet.get_history()})});$("#language_select").unbind().change(function(){var p=$(this).val();j("Updating Language","update-language",p,function(){if(isExtension){try{localStorage.setItem("language",p)}catch(q){}window.location.href="/index.html"}else{c(function(){window.location.reload()})}})});$("#notifications-confirmations").unbind().change(function(p){j("Updating Notification Confirmations","update-notifications-confirmations",$(this).val())});$("#account-logging").unbind().on("show",function(){var q=$(this).find("table").hide();var p=q.find("tbody");MyWallet.securePost("wallet",{method:"list-logs",format:"json"},function(v){try{q.show();p.empty();if(v==null){throw"Failed to get backups"}var t=v.results;if(t.length==0){throw"No logs found"}for(var s in t){var r=t[s];p.append(''+dateToString(new Date(r.time))+''+r.action+''+r.ip_address+""+r.user_agent+"")}}catch(u){MyWallet.makeNotice("error","misc-error",u)}},function(r){MyWallet.makeNotice("error","misc-error",r.responseText)})});$("#logging-level").unbind().change(function(p){$(".logl").hide();$(".logl.l"+$(this).val()).show();j("Updating Logging Level","update-logging-level",$(this).val(),function(){$("#account-logging").trigger("show")})});$("#block-tor-ips").unbind().change(function(p){j("Updating TOR ip block","update-block-tor-ips",$(this).is(":checked")?1:0)});$("#wallet-yubikey").unbind().change(function(p){j("Updating Yubikey","update-yubikey",$(this).val())});$("#wallet-skype").unbind().change(function(p){j("Updating Skype Username","update-skype",$(this).val())});$("#wallet-boxcar").unbind().change(function(p){j("Updating Boxcar Email","update-boxcar",$(this).val())});$("#wallet-http-url").unbind().change(function(p){j("Updating HTTP url","update-http-url",$(this).val())});$("#wallet-phrase").unbind().change(function(q){var p=$.trim($(this).val());if(p==null||p.length==0||p.length>255){MyWallet.makeNotice("error","misc-error","You must enter a secret phrase");return}j("Updating Secret Phrase","update-phrase",p)});$("#wallet-alias").unbind().change(function(s){var r=$(this);var p=$.trim(r.val());r.val(r.val().replace(/[\.,\/ #!$%\^&\*;:{}=`~()]/g,""));var q=$.trim(r.val());if(q.length>0){$(".alias").fadeIn(200);$(".alias").text("https://blockchain.info/wallet/"+q)}j("Updating Alias","update-alias",q,null,function(){r.val(p)})})}}; \ No newline at end of file +var AccountSettings=new function(){function b(o){var n=o.lastIndexOf("@");var m=o.lastIndexOf(".");return(n0&&o.indexOf("@@")==-1&&m>2&&(o.length-m)>2)}function c(m){try{var n=window.applicationCache;console.log("Clear Cache Manifest");n.addEventListener("updateready",function(p){n.swapCache();if(m){m()}},false);n.addEventListener("noupdate",function(p){if(m){m()}},false);n.addEventListener("error",function(p){if(m){m()}},false);n.update()}catch(o){console.log(o);if(m){m()}}}function j(n,r,p,q,o,m){p=$.trim(p);if(p.length==0){MyWallet.makeNotice("error","misc-error",n+": Invalid value");return}if(p.length==0){MyWallet.makeNotice("error",r+"-error",data.responseText);if(o){o()}return}MyWallet.setLoadingText(n);if(!m){m=""}MyWallet.securePost("wallet"+m,{length:(p+"").length,payload:p+"",method:r},function(s){MyWallet.makeNotice("success",r+"-success",s);if(q){q()}},function(s){MyWallet.makeNotice("error",r+"-error",s.responseText);if(o){o()}})}function i(){if(MyWallet.getDoubleEncryption()){$(".double-encryption-off").hide();$(".double-encryption-on").show()}else{$(".double-encryption-on").hide();$(".double-encryption-off").show()}$("#double-password").val("");$("#double-password2").val("")}function l(){$("#password_mnemonic1").find("span").empty();$("#password_mnemonic2").find("span").empty()}function g(){l();var n=$("#password_mnemonic1");var m=$("#password_mnemonic2");loadScript("wallet/mnemonic",function(){MyWallet.getMainPassword(function(o){MyWallet.getSecondPassword(function(p){try{mn_encode_pass({password:o,guid:MyWallet.getGuid()},function(r){n.show().find("span").text(r)},function(r){MyWallet.makeNotice("error","misc-error",r)});if(p){mn_encode_pass({password:p},function(r){m.show().find("span").text(r)},function(r){MyWallet.makeNotice("error","misc-error",r)})}else{m.hide()}}catch(q){console.log(q);f()}},function(){f()})},function(){f()})})}this.bind=function(n,m){i();e();a(n,m)};this.init=function(m,o,n){MyWallet.setLoadingText("Loading Account Settings");if(!m.is(":empty")){AccountSettings.bind(o,n);o();return}$.ajax({type:"GET",url:root+"wallet/account-settings-template",data:{format:"plain",language:MyWallet.getLanguage()},success:function(p){try{m.html(p);AccountSettings.bind(o,n);o()}catch(q){console.log(q);n()}},error:function(p){MyWallet.makeNotice("error","misc-error","Error Downloading Account Settings Template");n()}})};function a(n,m){$('a[data-toggle="tab"]').unbind().on("show",function(o){$(o.target.hash).trigger("show")});MyWallet.setLoadingText("Getting Wallet Info");MyWallet.securePost("wallet",{method:"get-info",format:"json"},function(u){if(u.email!=null){$("#wallet-email").val(u.email);$(".my-email").text(u.email)}$("#wallet-phrase").val(u.phrase);$("#two-factor-select").val(u.auth_type);$(".two-factor").hide();$(".two-factor.t"+u.auth_type).show(200);var v=$("#notifications-type");v.find(":checkbox").prop("checked",false);v.find('[class^="type"]').hide();for(var w in u.notifications_type){var x=u.notifications_type[w];v.find(':checkbox[value="'+x+'"]').prop("checked",true);v.find(".type-"+x).show()}$(".logl").hide();$(".logl.l"+u.logging_level).show();$("#logging-level").val(u.logging_level);$("#notifications-confirmations").val(u.notifications_confirmations);$("#notifications-on").val(u.notifications_on);$("#pbkdf2-iterations").val(MyWallet.getPbkdf2Iterations());if(u.alias!=null&&u.alias.length>0){$("#wallet-alias").val(u.alias);$(".alias").text("https://blockchain.info/wallet/"+u.alias);$(".alias").show(200)}var p=$("#local_currency").empty();for(var y in u.currencies){var C=u.currencies[y];p.append('")}p.val(u.currency);var z=$("#btc_currency").empty();for(var y in u.btc_currencies){var C=u.btc_currencies[y];z.append('")}z.val(u.btc_currency);var s=$("#language_select").empty();for(var t in u.languages){var B=u.languages[t];s.append('")}s.val(u.language);$("#auto-email-backup").prop("checked",u.auto_email_backup==1?true:false);$("#never-save-auth-type").prop("checked",u.never_save_auth_type==1?true:false);$("#wallet-http-url").val(u.http_url);$("#wallet-skype").val(u.skype_username);$("#wallet-boxcar").val(u.boxcar_email);$("#wallet-yubikey").val(u.yubikey);if(u.password_hint1){$("#password-hint1").val(u.password_hint1)}if(u.password_hint2){$("#password-hint2").val(u.password_hint2)}$("#ip-lock").val(u.ip_lock);$("#my-ip").text(u.my_ip);$("#ip-lock-on").prop("checked",u.ip_lock_on==1?true:false);$("#block-tor-ips").prop("checked",u.block_tor_ips==1?true:false);$('input[name="fee-policy"]').each(function(){if(parseInt($(this).val())==MyWallet.getFeePolicy()){$(this).prop("checked",true)}});$('input[name="always-keep-local-backup"]').prop("checked",MyWallet.getAlwaysKeepLocalBackup()?true:false);$('input[name="inactivity-logout-time"]').each(function(){if(parseInt($(this).val())==MyWallet.getLogoutTime()){$(this).prop("checked",true)}});if(u.email_verified==0){$(".email-unverified").show();$(".email-verified").hide()}else{$(".email-unverified").hide();$(".email-verified").show()}$("#my-ip").text(u.my_ip);var o="1";if(u.sms_number){var r=u.sms_number.split(" ");if(u.sms_number[0]=="+"&&r.length>1){o=r[0].substring(1);$(".wallet-sms").val(r[1])}else{$(".wallet-sms").val(u.sms_number)}}if(u.sms_verified==0){$(".sms-unverified").show();$(".sms-verified").hide()}else{$(".sms-verified").show().trigger("show");$(".sms-unverified").hide()}$.ajax({type:"GET",url:resource+"wallet/country_codes.html",success:function(D){$('select[class="wallet-sms-country-codes"]').html(D).val(o)},error:function(){MyWallet.makeNotice("error","misc-error","Error Downloading SMS Country Codes")}});var A=function(H,E,F){try{if(window.webkitNotifications&&navigator.userAgent.indexOf("Chrome")>-1){var D=webkitNotifications.checkPermission();if(D==1&&F){webkitNotifications.requestPermission(A)}else{if(D==0){H()}else{E()}}}else{if(window.Notification){if(Notification.permissionLevel()==="default"&&F){Notification.requestPermission(A)}else{if(window.Notification.permissionLevel()=="granted"){H()}else{E()}}}else{E()}}}catch(G){console.log(G);E()}};var q=$("#html5-notifications-checkbox");q.unbind().change(function(){if($(this).is(":checked")){A(function(){MyWallet.makeNotice("success","misc-success","HTML5 Notifications Enabled");MyWallet.setHTML5Notifications(true);MyWallet.backupWallet()},function(){MyWallet.makeNotice("error","misc-error","Error Enabling HTML5 Notifications");MyWallet.setHTML5Notifications(false);MyWallet.backupWallet()},true)}else{MyWallet.setHTML5Notifications(false);MyWallet.backupWallet()}});if(MyWallet.getHTML5Notifications()){q.prop("checked",true)}else{q.prop("checked",false)}},function(o){if(o.responseText){MyWallet.makeNotice("error","misc-error",o.responseText)}else{MyWallet.makeNotice("error","misc-error","Error Downloading Account Settings")}if(m){m()}})}function k(){f();var m=$("#update-password-modal");m.modal({keyboard:true,backdrop:"static",show:true});m.center();m.find(".btn.btn-primary").unbind().click(function(){m.modal("hide");var n=$.trim($("#password").val());var o=$.trim($("#password2").val());if(n!=o){MyWallet.makeNotice("error","misc-error","Passwords do not match.");return false}if(n.length==0||n.length<10||n.length>255){MyWallet.makeNotice("error","misc-error","Password length must be between least 10 & 255 characters");return false}MyWallet.setMainPassword(n)});m.find(".btn.btn-secondary").unbind().click(function(){m.modal("hide")})}function f(){$(".accordion-body").collapse("hide")}function h(){MyWallet.setDoubleEncryption(false,null,function(){i()})}function d(){var m=$("#double-password").val();var n=$("#double-password2").val();if(m==null||m.length==0||m.length<4||m.length>255){MyWallet.makeNotice("error","misc-error","Password must be 4 characters or more in length");return}if(m!=n){MyWallet.makeNotice("error","misc-error","Passwords do not match.");return}if(MyWallet.isCorrectMainPassword(m)){MyWallet.makeNotice("error","misc-error","Second password should not be the same as your main password.");return}MyWallet.setDoubleEncryption(true,m,function(){i()})}function e(){var m=$("#notifications-type");m.find(":checkbox").unbind().change(function(){var p=[];m.find(":checkbox:checked").each(function(){p.push($(this).val())});if(!p.length){p.push(0)}j("Updating Notifications Type","update-notifications-type",p.join("|"));m.find(".type-"+$(this).val()).toggle();MyWallet.get_history()});$("input[name=fee-policy]").unbind().change(function(){MyWallet.setFeePolicy($("input[name=fee-policy]:checked").val());MyWallet.backupWallet()});$('input[name="always-keep-local-backup"]').unbind().change(function(){MyWallet.setAlwaysKeepLocalBackup($(this).is(":checked"));MyStore.remove("payload");MyWallet.backupWallet()});$("input[name=inactivity-logout-time]").unbind().change(function(){MyWallet.setLogoutTime(parseInt($(this).val()));MyWallet.backupWallet()});$("#password_mnemonic").unbind().on("show",function(){g()}).on("hide",function(){l()});$("#pairing_code").unbind().on("show",function(){MyWallet.makePairingQRCode(function(p){$("#pairing-code-v0").html(p)},0);MyWallet.makePairingQRCode(function(p){$("#pairing-code-v1").html(p)},1);setTimeout(function(){f()},30000)}).on("hide",function(){$("#pairing-code-v1").empty();$("#pairing-code-v0").empty()});$("#update-password-btn").unbind().click(function(){k()});$("#password-hint1").unbind().change(function(){j("Updating Main Password Hint","update-password-hint1",$(this).val())});$("#password-hint2").unbind().change(function(){j("Updating Second Password Hint","update-password-hint2",$(this).val())});$("#ip-lock-on").unbind().change(function(){j("Updating IP Lock","update-ip-lock-on",$(this).is(":checked"))});$("#ip-lock").unbind().change(function(){j("Updating Locked Ip Addresses","update-ip-lock",$(this).val())});$("#notifications-on").unbind().change(function(){j("Updating Notifications Settings","update-notifications-on",$(this).val())});$("#auto-email-backup").unbind().change(function(){j("Updating Auto Backup Settings","update-auto-email-backup",$(this).is(":checked"))});$("#never-save-auth-type").unbind().change(function(){j("Updating Auth Saving Settings","update-never-save-auth-type",$(this).is(":checked"))});$("#wallet-google-qr-code").unbind().change(function(){var p=$(this).val();j("Updating Two Factor Authentication","update-auth-type",4,function(){$(".two-factor.t4").children().hide().eq(0).show();MyWallet.setRealAuthType(4)},null,"?code="+p)});$("#two-factor-select").unbind().change(function(){var q=parseInt($(this).val());MyStore.remove("payload");var p=$(".two-factor.t"+q);if(q==4){p.children().hide().eq(1).show();MyWallet.securePost("wallet",{method:"generate-google-secret"},function(r){if(r!=null&&r.length>0){loadScript("wallet/jquery.qrcode",function(){$("#wallet-google-qr").empty().qrcode({width:300,height:300,text:r})})}},function(r){MyWallet.makeNotice("error","misc-error",r.responseText)})}else{j("Updating Two Factor Authentication","update-auth-type",q,function(){MyWallet.setRealAuthType(q)})}$(".two-factor").hide(200);p.show(200)});var n="";$("#wallet-email-send").click(function(){n="";$("#wallet-email").trigger("change")});$("#wallet-email").unbind().change(function(q){var p=$.trim($(this).val());if(p.length==0){return}if(n==p){return}if(!b(p)){MyWallet.makeNotice("error","misc-error","Email address is not valid");return}j("Updating Email","update-email",p,function(){n=p},function(){n=""});n=p;$(".email-unverified").show(200);$(".email-verified").hide()});$("#wallet-double-encryption-enable").unbind().click(function(p){f();d()});$("#wallet-double-encryption-disable").unbind().click(function(p){f();h()});$("#wallet-email-code").unbind().change(function(q){var p=$.trim($(this).val());if(p.length==0||p.length>255){MyWallet.makeNotice("error","misc-error","You must enter a code to verify");return}MyWallet.setLoadingText("Verifying Email");MyWallet.securePost("wallet",{payload:p,length:p.length,method:"verify-email"},function(r){MyWallet.makeNotice("success","misc-success",r);$(".email-unverified").hide();$(".email-verified").show(200)},function(r){MyWallet.makeNotice("error","misc-error",r.responseText);$(".email-unverified").show(200);$(".email-verified").hide()})});$(".wallet-sms-code").unbind().change(function(q){var p=$.trim($(this).val());if(p.length==0||p.length>255){MyWallet.makeNotice("error","misc-error","You must enter an SMS code to verify");return}MyWallet.setLoadingText("Verifying SMS Code");MyWallet.securePost("wallet",{payload:p,length:p.length,method:"verify-sms"},function(r){MyWallet.makeNotice("success","misc-success",r);$(".sms-unverified").hide();$(".sms-verified").show(200).trigger("show")},function(r){MyWallet.makeNotice("error","misc-error",r.responseText);$(".sms-verified").hide();$(".sms-unverified").show(200)})});var o="";$(".send-code").unbind().click(function(){o="";$(this).parent().find(".wallet-sms").trigger("change")});$('select[class="wallet-sms-country-codes"]').unbind().change(function(){o="";$(".wallet-sms").trigger("change")});$(".wallet-sms").unbind().change(function(){var p=$.trim($(this).val());if(p==null||p.length==0){return}if(p.charAt(0)!="+"){p="+"+$(".wallet-sms-country-codes").val()+p}if(o==p){return}o=p;j("Updating Cell Number","update-sms",p,function(){$(".sms-unverified").show(200);$(".sms-verified").hide()})});$("#run-key-check").unbind().click(function(){MyWallet.getSecondPassword(function(){try{MyWallet.checkAllKeys(true);MyWallet.backupWallet()}catch(p){MyWallet.makeNotice("error","misc-error",p)}})});$("#run-compressed-check").unbind().click(function(){MyWallet.getSecondPassword(function(){try{MyWallet.runCompressedCheck(true)}catch(p){MyWallet.makeNotice("error","misc-error",p)}})});$("#register-uri-handler").unbind().click(function(){if(navigator&&navigator.registerProtocolHandler){try{navigator.registerProtocolHandler("bitcoin",window.location.protocol+"//"+window.location.hostname+"/wallet/login#%s","Blockchain.info")}catch(p){MyWallet.makeNotice("error","misc-error",p)}}else{MyWallet.makeNotice("error","misc-error","Your browser does not support bitcoin links. Try google chrome.")}});$("#local_currency").unbind().change(function(){if(symbol!=symbol_local){toggleSymbol()}j("Updating Local Currency","update-currency",$(this).val(),function(){MyWallet.get_history()})});$("#btc_currency").unbind().change(function(){if(symbol!=symbol_btc){toggleSymbol()}j("Updating BTC Currency","update-btc-currency",$(this).val(),function(){MyWallet.get_history()})});$("#language_select").unbind().change(function(){var p=$(this).val();j("Updating Language","update-language",p,function(){if(isExtension){MyStore.put("language",p);window.location.href="/index.html"}else{c(function(){window.location.reload()})}})});$("#notifications-confirmations").unbind().change(function(p){j("Updating Notification Confirmations","update-notifications-confirmations",$(this).val())});$("#account-logging").unbind().on("show",function(){var q=$(this).find("table").hide();var p=q.find("tbody");MyWallet.securePost("wallet",{method:"list-logs",format:"json"},function(v){try{q.show();p.empty();if(v==null){throw"Failed to get backups"}var t=v.results;if(t.length==0){throw"No logs found"}for(var s in t){var r=t[s];p.append(''+dateToString(new Date(r.time))+''+r.action+''+r.ip_address+""+r.user_agent+"")}}catch(u){MyWallet.makeNotice("error","misc-error",u)}},function(r){MyWallet.makeNotice("error","misc-error",r.responseText)})});$("#logging-level").unbind().change(function(p){$(".logl").hide();$(".logl.l"+$(this).val()).show();j("Updating Logging Level","update-logging-level",$(this).val(),function(){$("#account-logging").trigger("show")})});$("#block-tor-ips").unbind().change(function(p){j("Updating TOR ip block","update-block-tor-ips",$(this).is(":checked")?1:0)});$("#wallet-yubikey").unbind().change(function(p){j("Updating Yubikey","update-yubikey",$(this).val())});$("#wallet-skype").unbind().change(function(p){j("Updating Skype Username","update-skype",$(this).val())});$("#wallet-boxcar").unbind().change(function(p){j("Updating Boxcar Email","update-boxcar",$(this).val())});$("#wallet-http-url").unbind().change(function(p){j("Updating HTTP url","update-http-url",$(this).val())});$("#wallet-phrase").unbind().change(function(q){var p=$.trim($(this).val());if(p==null||p.length==0||p.length>255){MyWallet.makeNotice("error","misc-error","You must enter a secret phrase");return}j("Updating Secret Phrase","update-phrase",p)});$("#wallet-alias").unbind().change(function(s){var r=$(this);var p=$.trim(r.val());r.val(r.val().replace(/[\.,\/ #!$%\^&\*;:{}=`~()]/g,""));var q=$.trim(r.val());if(q.length>0){$(".alias").fadeIn(200);$(".alias").text("https://blockchain.info/wallet/"+q)}j("Updating Alias","update-alias",q,null,function(){r.val(p)})})}}; \ No newline at end of file diff --git a/extension/Resources/wallet/address_modal.min.js b/extension/Resources/wallet/address_modal.min.js index 8311b3a..a1d9894 100644 --- a/extension/Resources/wallet/address_modal.min.js +++ b/extension/Resources/wallet/address_modal.min.js @@ -1 +1 @@ -function showAddressModalQRCode(a){var b=$("#qr-code-modal");b.modal({keyboard:true,backdrop:"static",show:true});loadScript("wallet/jquery.qrcode",function(){b.find(".address-qr-code").empty().qrcode({width:300,height:300,text:a})});b.find(".address").text(a);b.find(".btn.btn-secondary").unbind().click(function(){b.modal("hide")})}function verifyMessageModal(){var d=$("#verify-message-modal");d.modal({keyboard:true,backdrop:"static",show:true});d.find(".address-result").hide();var b=d.find('input[name="address"]');var a=d.find('textarea[name="message"]');var c=d.find('textarea[name="signature"]');d.find(".btn.btn-secondary").unbind().click(function(){d.modal("hide")});d.find("textarea").bind("change",function(){d.find(".address-result").hide()});d.find(".btn.btn-primary").unbind().click(function(){try{var g=$.trim(b.val());if(!g||g.length==0){throw"Please enter a Bitcoin Address"}try{new Bitcoin.Address(g)}catch(i){throw"Invalid Bitcoin Address"}var h=$.trim(a.val());if(!h||h.length==0){throw"You Must Enter A Message To Verify"}var f=$.trim(c.val());if(!f||f.length==0){throw"You Must Enter A Signature To Verify"}if(Bitcoin.Message.verifyMessage(g,f,h)){d.find(".address-result-txt").html('Message Successfully Verified')}else{d.find(".address-result-txt").html('Error Verifying Message!')}d.find(".address-result").show(200)}catch(i){MyWallet.makeNotice("error","misc-error","Error Verifying Message"+i);d.modal("hide");return}})}function showAddressModalSignMessage(a){MyWallet.getSecondPassword(function(){var c=$("#sign-message-modal");c.modal({keyboard:true,backdrop:"static",show:true});c.find(".signature").hide();var b=c.find('textarea[name="message"]');c.find(".address").text(a);c.find(".btn.btn-secondary").unbind().click(function(){c.modal("hide")});b.bind("change",function(){c.find(".signature").hide()});c.find(".btn.btn-primary").unbind().click(function(){var e=$.trim(b.val());if(!e||e.length==0){MyWallet.makeNotice("error","misc-error","You Must Enter A Message To Sign");return}var d=MyWallet.signmessage(a,e);c.find(".signature").show(200);c.find(".signature-result").text(d)})})}function showLabelAddressModal(c){var a=$("#label-address-modal");a.modal({keyboard:true,backdrop:"static",show:true});var b=a.find('input[name="label"]');a.find(".address").text(c);b.val("");a.find(".btn.btn-primary").unbind().click(function(){a.modal("hide");var d=$.trim($("
"+b.val()+"
").text());if(d.length==0){MyWallet.makeNotice("error","misc-error","You must enter a label for the address");return false}if(d.indexOf('"')!=-1){MyWallet.makeNotice("error","misc-error","Label cannot contain double quotes");return false}MyWallet.setLabel(c,d)});a.find(".btn.btn-secondary").unbind().click(function(){a.modal("hide")})}; \ No newline at end of file +function showAddressModalQRCode(a){var b=$("#qr-code-modal");b.modal({keyboard:true,backdrop:"static",show:true});loadScript("wallet/jquery.qrcode",function(){b.find(".address-qr-code").empty().qrcode({width:300,height:300,text:a})});b.find(".address").text(a);b.find(".btn.btn-secondary").unbind().click(function(){b.modal("hide")})}function verifyMessageModal(){var d=$("#verify-message-modal");d.modal({keyboard:true,backdrop:"static",show:true});d.find(".address-result").hide();var b=d.find('input[name="address"]');var a=d.find('textarea[name="message"]');var c=d.find('textarea[name="signature"]');d.find(".btn.btn-secondary").unbind().click(function(){d.modal("hide")});d.find("textarea").bind("change",function(){d.find(".address-result").hide()});d.find(".btn.btn-primary").unbind().click(function(){try{var g=$.trim(b.val());if(!g||g.length==0){throw"Please enter a Bitcoin Address"}try{new Bitcoin.Address(g)}catch(i){throw"Invalid Bitcoin Address"}var h=$.trim(a.val());if(!h||h.length==0){throw"You Must Enter A Message To Verify"}var f=$.trim(c.val());if(!f||f.length==0){throw"You Must Enter A Signature To Verify"}if(Bitcoin.Message.verifyMessage(g,f,h)){d.find(".address-result-txt").html('Message Successfully Verified')}else{d.find(".address-result-txt").html('Error Verifying Message!')}d.find(".address-result").show(200)}catch(i){MyWallet.makeNotice("error","misc-error","Error Verifying Message"+i);d.modal("hide");return}})}function showAddressModalSignMessage(a){MyWallet.getSecondPassword(function(){var c=$("#sign-message-modal");c.modal({keyboard:true,backdrop:"static",show:true});c.find(".signature").hide();var b=c.find('textarea[name="message"]');c.find(".address").text(a);c.find(".btn.btn-secondary").unbind().click(function(){c.modal("hide")});b.bind("change",function(){c.find(".signature").hide()});c.find(".btn.btn-primary").unbind().click(function(){var e=$.trim(b.val());if(!e||e.length==0){MyWallet.makeNotice("error","misc-error","You Must Enter A Message To Sign");return}var d=MyWallet.signmessage(a,e);c.find(".signature").show(200);c.find(".signature-result").text(d)})})}function showLabelAddressModal(c){var a=$("#label-address-modal");a.modal({keyboard:true,backdrop:"static",show:true});var b=a.find('input[name="label"]');a.find(".address").text(c);b.val("");a.find(".btn.btn-primary").unbind().click(function(){a.modal("hide");var d=stripHTML(b.val());if(d.length==0){MyWallet.makeNotice("error","misc-error","You must enter a label for the address");return false}if(d.indexOf('"')!=-1){MyWallet.makeNotice("error","misc-error","Label cannot contain double quotes");return false}MyWallet.setLabel(c,d)});a.find(".btn.btn-secondary").unbind().click(function(){a.modal("hide")})}; \ No newline at end of file diff --git a/extension/Resources/wallet/blockchainapi.min.js b/extension/Resources/wallet/blockchainapi.min.js index bb71738..dd0341d 100644 --- a/extension/Resources/wallet/blockchainapi.min.js +++ b/extension/Resources/wallet/blockchainapi.min.js @@ -1 +1 @@ -var BlockchainAPI=new function(){var a=this;this.get_history=function(e,b,d,c){MyWallet.setLoadingText("Loading transactions");$.ajax({type:"POST",dataType:"json",url:root+"multiaddr",data:{active:MyWallet.getActiveAddresses().join("|"),format:"json",filter:d,offset:c*50},success:function(f){if(f.error!=null){MyWallet.makeNotice("error","misc-error",f.error)}try{try{if(c==0&&d==0){localStorage.setItem("multiaddr",JSON.stringify(f))}}catch(g){}e(f)}catch(g){MyWallet.makeNotice("error","misc-error",g);b()}},error:function(f){if(f.responseText){MyWallet.makeNotice("error","misc-error",f.responseText)}else{MyWallet.makeNotice("error","misc-error","Error Downloading Wallet Balance")}b()}})};this.get_balances=function(d,c,b){MyWallet.setLoadingText("Getting Balances");$.ajax({type:"POST",url:root+"multiaddr",dataType:"json",data:{active:d.join("|"),simple:true,format:"json"},success:function(f){for(var e in f){if(MyWallet.addressExists(e)){MyWallet.setAddressBalance(e,f[e].final_balance)}}c(f)},error:function(f){b(f.responseText)}})};this.get_balance=function(d,c,b){MyWallet.setLoadingText("Getting Balance");this.get_balances(d,function(g){var f=0;for(var e in g){f+=g[e].final_balance}c(f)},b)};this.get_ticker=function(){MyWallet.setLoadingText("Getting Ticker Data");$.ajax({type:"GET",dataType:"json",url:root+"ticker",data:{format:"json"},success:function(d){var b=$("#send-ticker ul").empty();for(var c in d){b.append('
  • '+c+'
    =d[c]["24h"])?"up_green.png":"down_red.png")+');width:14px;background-position:0px">'+d[c]["15m"]+"
  • ")}},error:function(b){console.log(b)}})};this.resolve_firstbits=function(d,c,b){MyWallet.setLoadingText("Querying Firstbits");$.ajax({type:"GET",url:root+"q/resolvefirstbits/"+d,data:{format:"plain"},success:function(e){if(e==null||e.length==0){b()}else{c(e)}},error:function(f){b(f.responseText)}})};this.get_rejection_reason=function(d,c,b){MyWallet.setLoadingText("Querying Rejection Reason");$.ajax({type:"GET",url:root+"q/rejected/"+d,data:{format:"plain"},success:function(e){if(e==null||e.length==0){b()}else{c(e)}},error:function(f){b(f.responseText)}})};this.push_tx=function(g,j,m,k){try{MyWallet.setLoadingText("Pushing Transaction");var o=MyWallet.getTransactions();if(o.length>0){var h=o[0].txIndex}var q=g.serialize();var n=Crypto.util.bytesToHex(Crypto.SHA256(Crypto.SHA256(q,{asBytes:true}),{asBytes:true}).reverse());function p(){m();function e(){MyWallet.get_history(function(){if(o.length==0||o[0].txIndex==h){a.get_rejection_reason(n,function(r){MyWallet.makeNotice("error","tx-error",r)},function(){if(o.length==0||o[0].txIndex==h){MyWallet.makeNotice("error","tx-error","Unknown Error Pushing Transaction")}})}else{playSound("beep")}},function(){MyWallet.makeNotice("error","tx-error","Unable to determine if transaction was submitted. Please re-login.")})}if(!window.WebSocket||ws==null||ws.readyState!=WebSocket.OPEN){e()}else{setTimeout(function(){if(o.length==0||o[0].txIndex==h){e()}},2000)}}function l(){var e=Crypto.util.bytesToHex(q);var r={format:"plain",tx:e,hash:n};if(j){r.note=j}$.ajax({type:"POST",url:root+"pushtx",data:r,success:function(){p()},error:function(s){k(s?s.responseText:null)}})}try{var f=new ArrayBuffer(q.length);var c=new Int8Array(f);c.set(q);var b=new Blob([f],{type:"application/octet-stream"});if(b.size!=q.length){throw"Inconsistent Data Sizes (blob : "+b.size+" s : "+q.length+" buffer : "+f.byteLength+")"}var d=new FormData();d.append("txbytes",b);if(j){d.append("note",j)}d.append("format","plain");d.append("hash",n);$.ajax({url:root+"pushtx",data:d,processData:false,contentType:false,type:"POST",success:function(){p()},error:function(r){if(!r.responseText||r.responseText.indexOf("Parse:")==0){l()}else{k(r?r.responseText:null)}}})}catch(i){console.log(i);l()}}catch(i){console.log(i);k(i)}};this.get_unspent=function(c,d,b){MyWallet.setLoadingText("Getting Unspent Outputs");$.ajax({type:"POST",dataType:"json",url:root+"unspent",data:{active:c.join("|"),format:"json"},success:function(g){try{if(g.error!=null){throw g.error}if(g.notice!=null){MyWallet.makeNotice("notice","misc-notice",g.notice)}try{localStorage.setItem("unspent",data)}catch(f){}d(g)}catch(f){b(f)}},error:function(g){try{try{var f=localStorage.getItem("unspent");if(f!=null){var i=$.parseJSON(f);d(i);return}}catch(h){console.log(h)}if(g.responseText){throw g.responseText}else{throw"Error Contacting Server. No unspent outputs available in cache."}}catch(h){b(h)}}})}}; \ No newline at end of file +var BlockchainAPI=new function(){var a=this;this.get_history=function(e,b,d,c){MyWallet.setLoadingText("Loading transactions");$.ajax({type:"POST",dataType:"json",url:root+"multiaddr",data:{active:MyWallet.getActiveAddresses().join("|"),format:"json",filter:d,offset:c*50},success:function(f){if(f.error!=null){MyWallet.makeNotice("error","misc-error",f.error)}try{if(c==0&&d==0){MyStore.put("multiaddr",JSON.stringify(f))}e(f)}catch(g){MyWallet.makeNotice("error","misc-error",g);b()}},error:function(f){if(f.responseText){MyWallet.makeNotice("error","misc-error",f.responseText)}else{MyWallet.makeNotice("error","misc-error","Error Downloading Wallet Balance")}b()}})};this.get_balances=function(d,c,b){MyWallet.setLoadingText("Getting Balances");$.ajax({type:"POST",url:root+"multiaddr",dataType:"json",data:{active:d.join("|"),simple:true,format:"json"},success:function(f){for(var e in f){if(MyWallet.addressExists(e)){MyWallet.setAddressBalance(e,f[e].final_balance)}}c(f)},error:function(f){b(f.responseText)}})};this.get_balance=function(d,c,b){MyWallet.setLoadingText("Getting Balance");this.get_balances(d,function(g){var f=0;for(var e in g){f+=g[e].final_balance}c(f)},b)};this.get_ticker=function(){MyWallet.setLoadingText("Getting Ticker Data");$.ajax({type:"GET",dataType:"json",url:root+"ticker",data:{format:"json"},success:function(d){var b=$("#send-ticker ul").empty();for(var c in d){b.append('
  • '+c+'
    =d[c]["24h"])?"up_green.png":"down_red.png")+');width:14px;background-position:0px">'+d[c]["15m"]+"
  • ")}},error:function(b){console.log(b)}})};this.resolve_firstbits=function(d,c,b){MyWallet.setLoadingText("Querying Firstbits");$.ajax({type:"GET",url:root+"q/resolvefirstbits/"+d,data:{format:"plain"},success:function(e){if(e==null||e.length==0){b()}else{c(e)}},error:function(f){b(f.responseText)}})};this.get_rejection_reason=function(e,b,c,d){MyWallet.setLoadingText("Querying Rejection Reason");$.ajax({type:"GET",url:root+"q/rejected/"+e,data:{format:"plain"},success:function(f){if(f==null||f.length==0){d()}else{b(f)}},error:function(f){if(f.status==404){c()}else{d(f.responseText)}}})};this.push_tx=function(g,j,m,k){try{MyWallet.setLoadingText("Pushing Transaction");var o=MyWallet.getTransactions();if(o.length>0){var h=o[0].txIndex}var q=g.serialize();var n=Crypto.util.bytesToHex(Crypto.SHA256(Crypto.SHA256(q,{asBytes:true}),{asBytes:true}).reverse());function p(){m();function e(){MyWallet.get_history(function(){if(o.length==0||o[0].txIndex==h){a.get_rejection_reason(n,function(r){MyWallet.makeNotice("error","tx-error",r)},function(){if(o.length==0||o[0].txIndex==h){MyWallet.get_history()}},function(){if(o.length==0||o[0].txIndex==h){MyWallet.makeNotice("error","tx-error","Unknown Error Pushing Transaction")}})}else{playSound("beep")}},function(){MyWallet.makeNotice("error","tx-error","Unable to determine if transaction was submitted. Please re-login.")})}setTimeout(function(){if(o.length==0||o[0].txIndex==h){e()}},3000)}function l(){var e=Crypto.util.bytesToHex(q);var r={format:"plain",tx:e,hash:n};if(j){r.note=j}$.ajax({type:"POST",url:root+"pushtx",data:r,success:function(){p()},error:function(s){k(s?s.responseText:null)}})}try{var f=new ArrayBuffer(q.length);var c=new Int8Array(f);c.set(q);var b=new Blob([f],{type:"application/octet-stream"});if(b.size!=q.length){throw"Inconsistent Data Sizes (blob : "+b.size+" s : "+q.length+" buffer : "+f.byteLength+")"}var d=new FormData();d.append("txbytes",b);if(j){d.append("note",j)}d.append("format","plain");d.append("hash",n);$.ajax({url:root+"pushtx",data:d,processData:false,contentType:false,type:"POST",success:function(){p()},error:function(r){if(!r.responseText||r.responseText.indexOf("Parse:")==0){l()}else{k(r?r.responseText:null)}}})}catch(i){console.log(i);l()}}catch(i){console.log(i);k(i)}};this.get_unspent=function(c,d,b){MyWallet.setLoadingText("Getting Unspent Outputs");$.ajax({type:"POST",dataType:"json",url:root+"unspent",data:{active:c.join("|"),format:"json"},success:function(g){try{if(g.error!=null){throw g.error}if(g.notice!=null){MyWallet.makeNotice("notice","misc-notice",g.notice)}MyStore.put("unspent",JSON.stringify(g));d(g)}catch(f){b(f)}},error:function(e){MyStore.get("unspent",function(f){try{if(f!=null){var h=$.parseJSON(f);d(h)}else{if(e.responseText){throw e.responseText}else{throw"Error Contacting Server. No unspent outputs available in cache."}}}catch(g){b(g)}})}})}}; \ No newline at end of file diff --git a/extension/Resources/wallet/chrome.js b/extension/Resources/wallet/chrome.js index 829f4e4..fe425da 100644 --- a/extension/Resources/wallet/chrome.js +++ b/extension/Resources/wallet/chrome.js @@ -1,4 +1,5 @@ isExtension = true; +APP_NAME = 'javascript_chrome'; $(document).ready(function() { var body = $(document.body); diff --git a/extension/Resources/wallet/country_codes.html b/extension/Resources/wallet/country_codes.html index 33c9b23..5df0e80 100644 --- a/extension/Resources/wallet/country_codes.html +++ b/extension/Resources/wallet/country_codes.html @@ -211,8 +211,8 @@ - - + + diff --git a/extension/Resources/wallet/dicegames.min.js b/extension/Resources/wallet/dicegames.min.js index 368af9a..8826b20 100644 --- a/extension/Resources/wallet/dicegames.min.js +++ b/extension/Resources/wallet/dicegames.min.js @@ -1 +1 @@ -function _DICEGame(){function b(e){MyWallet.setLoadingText("Calculating Profit / Loss");var d=e.find('input[name="send-to-address"]');var c=[];$(d).each(function(){c.push($(this).val())});if(c.length==0){return}$.ajax({type:"GET",dataType:"json",url:root+"walletprofitloss",data:{input_address:MyWallet.getActiveAddresses().join("|"),output_address:c.join("|"),format:"plain"},success:function(h){var f=e.find(".profit-loss").show(200);f.find(".n-bets").text(h.n_sent);var g=h.result;if(g>0){f.find(".winnings").html(''+formatMoney(g,true)+"")}else{if(g<0){f.find(".winnings").html(''+formatMoney(g,true)+"")}else{f.find(".winnings").html(formatMoney(g,true))}}f.find(".refresh").unbind().click(function(){b(e)})}})}function a(f,e,c){var d=$('');$("body").append(d);d.modal({keyboard:true,backdrop:"static",show:true});d.find(".times").text(f);d.center();d.find(".btn.btn-primary").unbind().click(function(){d.modal("hide");d.remove();if(e){e()}});d.find(".btn.btn-secondary").unbind().click(function(){d.modal("hide");d.remove();if(c){c()}})}this.init=function(d){var c=d.find(".recipient-container");if(!c.is(":empty")){return}$.ajax({type:"GET",dataType:"json",url:root+"dicegames",data:{game:d.data("name"),format:"plain"},success:function(l){c.empty();var f=$('

    Enter the amounts you wish to bet below:

    ');c.append(f);for(var h in l){var g=l[h];if(g.popular){c.append('
    '+symbol_btc.symbol+'No Bet
    ')}}function k(e){if(e.val()>0){e.parent().find(".send-win-amount").html("Win Amount: "+formatPrecision((parseFloat(e.val())*parseFloat(e.data("multiplier")))))}else{e.parent().find(".send-win-amount").html("No Bet")}}c.find('input[name="send-value"]').bind("change",function(){var i=parseFloat($(this).val());var e=precisionFromBTC($(this).data("maxbet"));var m=precisionFromBTC($(this).data("minbet"));if(i>e){$(this).val(e);MyWallet.makeNotice("error","misc-error","The Maximum Bet is "+formatPrecision(e))}if(i==0){$(this).val("")}else{if(i1){a(m,function(){loadScript("wallet/signer",function(){n()})})}else{loadScript("wallet/signer",function(){n()})}});try{b(d)}catch(j){console.log(j)}},error:function(f){MyWallet.makeNotice("error","misc-error",f.responseText)}})}}var DICEGame=new _DICEGame(); \ No newline at end of file +function _DICEGame(){function b(e){MyWallet.setLoadingText("Calculating Profit / Loss");var d=e.find('input[name="send-to-address"]');var c=[];$(d).each(function(){c.push($(this).val())});if(c.length==0){return}$.ajax({type:"GET",dataType:"json",url:root+"walletprofitloss",data:{input_address:MyWallet.getActiveAddresses().join("|"),output_address:c.join("|"),format:"plain"},success:function(h){var f=e.find(".profit-loss").show(200);f.find(".n-bets").text(h.n_sent);var g=h.result;if(g>0){f.find(".winnings").html(''+formatMoney(g,true)+"")}else{if(g<0){f.find(".winnings").html(''+formatMoney(g,true)+"")}else{f.find(".winnings").html(formatMoney(g,true))}}f.find(".refresh").unbind().click(function(){b(e)})}})}function a(f,e,c){var d=$('');$("body").append(d);d.modal({keyboard:true,backdrop:"static",show:true});d.find(".times").text(f);d.center();d.find(".btn.btn-primary").unbind().click(function(){d.modal("hide");d.remove();if(e){e()}});d.find(".btn.btn-secondary").unbind().click(function(){d.modal("hide");d.remove();if(c){c()}})}this.init=function(d){var c=d.find(".recipient-container");if(!c.is(":empty")){return}$.ajax({type:"GET",dataType:"json",url:root+"dicegames",data:{game:d.data("name"),format:"plain"},success:function(l){c.empty();var f=$('

    Enter the amounts you wish to bet below:

    ');c.append(f);for(var h in l){var g=l[h];if(g.popular){c.append('
    '+symbol_btc.symbol+'No Bet
    ')}}function k(e){if(e.val()>0){e.parent().find(".send-win-amount").html("Win Amount: "+formatPrecision((parseFloat(e.val())*parseFloat(e.data("multiplier")))))}else{e.parent().find(".send-win-amount").html("No Bet")}}c.find('input[name="send-value"]').bind("change",function(){var i=parseFloat($(this).val());var e=precisionFromBTC($(this).data("maxbet"));var m=precisionFromBTC($(this).data("minbet"));if(i>e){$(this).val(e);MyWallet.makeNotice("error","misc-error","The Maximum Bet is "+formatPrecision(e))}if(i==0){$(this).val("")}else{if(i1){a(m,function(){loadScript("wallet/signer",function(){n()})})}else{loadScript("wallet/signer",function(){n()})}});try{b(d)}catch(j){console.log(j)}},error:function(f){MyWallet.makeNotice("error","misc-error",f.responseText)}})}}var DICEGame=new _DICEGame(); \ No newline at end of file diff --git a/extension/Resources/wallet/import-export.min.js b/extension/Resources/wallet/import-export.min.js index df7d294..7db1946 100644 --- a/extension/Resources/wallet/import-export.min.js +++ b/extension/Resources/wallet/import-export.min.js @@ -1 +1 @@ -function _ImportExport(){this.init=function(i,k,j){MyWallet.setLoadingText("Loading Import Export View");if(!i.is(":empty")){h();k();return}$.ajax({type:"GET",url:root+"wallet/import-export-template",data:{format:"plain"},success:function(l){try{i.html(l);h();k()}catch(m){console.log(m);j()}},error:function(){MyWallet.makeNotice("error","misc-error","Error Downloading Import Export Template");j()}})};function d(i,k){var j=$("#watch-only-modal");j.modal({keyboard:true,backdrop:"static",show:true});j.center();j.find(".address").text(i);j.find(".btn.btn-secondary").unbind().click(function(){j.modal("hide")});j.find(".btn.btn-primary").unbind().click(function(){k();j.modal("hide")})}function h(){$('a[data-toggle="tab"]').unbind().on("show",function(i){$(i.target.hash).trigger("show")});$("#import-json-btn").unbind().click(function(){$(this).prop("disabled",true);f($("#import-json"));$(this).prop("disabled",false)});$("#import-address-btn").unbind().click(function(){var j=$.trim($("#import-address-address").val());if(j.length=0){MyWallet.makeNotice("error","misc-error","You must enter an address to import");return}try{var i=new Bitcoin.Address(j);if(i.toString()!=j){throw"Inconsistency between addresses"}$("#import-address-address").val("");d(j,function(){try{if(MyWallet.addWatchOnlyAddress(j)){MyWallet.makeNotice("success","added-address","Successfully Added Address "+i);try{ws.send('{"op":"addr_sub", "addr":"'+i+'"}')}catch(l){}MyWallet.backupWallet("update",function(){MyWallet.get_history()})}else{throw"Wallet Full Or Addresses Exists"}}catch(l){MyWallet.makeNotice("error","misc-error",l)}})}catch(k){MyWallet.makeNotice("error","misc-error","Error importing address: "+k);return}});$("#import-private-scan").unbind().click(function(){MyWallet.getSecondPassword(function(){loadScript("wallet/signer",function(){showPrivateKeyModal(function(i){if(MyWallet.addPrivateKey(i)){MyWallet.backupWallet("update",function(){MyWallet.get_history()});MyWallet.makeNotice("success","added-address","Imported Bitcoin Address "+i.getBitcoinAddress())}else{throw"Unable to add private key for bitcoin address "+i.getBitcoinAddress()}},function(i){MyWallet.makeNotice("error","misc-error",i)},"Any Private Key")})})});$("#import-private-btn").unbind().click(function(){var i=$("#import-private-key");try{c($.trim(i.val()))}catch(j){MyWallet.makeNotice("error","misc-error","Error importing private key: "+j)}i.val("")});$("#import-brain-wallet-btn").unbind().click(function(){var k=$("#import-brain-wallet");var i=$.trim(k.val());if(i.length<15){MyWallet.makeNotice("error","misc-error","The passphrase must be at least 15 characters long");return}var j=Crypto.SHA256(i,{asBytes:true});try{c(Bitcoin.Base58.encode(j),"Brain Wallet")}catch(l){MyWallet.makeNotice("error","misc-error","Error importing private key: "+l)}k.val("")});$("#export-priv-format").change(function(i){$("#json-unencrypted-export").val(MyWallet.makeWalletJSON($("#export-priv-format").val()))});$("#export-crypted").on("show",function(){$("#json-crypted-export").val(MyWallet.getEncryptedWalletData())});$("#export-unencrypted").on("show",function(){MyWallet.getSecondPassword(function(){$("#export-priv-format").val("base58");$("#json-unencrypted-export").val(MyWallet.makeWalletJSON($("#export-priv-format").val()))})});$("#import-backup").on("show",function(){var i=this;a($(i))});$(".paper-wallet-btn").unbind().click(function(){loadScript("wallet/paper-wallet",function(){PaperWallet.showModal()})})}this.importJSON=function(l,j,t,p){try{var k=0;if(l==null||l.length==0){throw"No import data provided!"}var n=null;try{n=$.parseJSON(l);if(n==null){throw"null input_text"}}catch(o){MyWallet.decrypt(l,j.main_password,MyWallet.getDefaultPbkdf2Iterations(),function(u){try{n=$.parseJSON(u);return(n!=null)}catch(v){return false}})}var r=0;var m=function(){try{var u=n.keys[r];var y=u.addr;if(y!=null&&y.length>0&&y!="undefined"){try{if(u.reserve){throw"Ignoring Reserve Key"}var D=u.priv;if(!D){D=u.sec}if(D!=null){var z=MyWallet.getDefaultPbkdf2Iterations();if(n.options&&n.options.pbkdf2_iterations){z=n.options.pbkdf2_iterations}if(n.double_encryption){if(j.second_password){var C=MyWallet.decrypt(D,n.sharedKey+j.second_password,z,MyWallet.isBase58);if(C==null){throw"Error decrypting private key for address "+y}D=C}else{MyWallet.getPassword($("#import-second-password-modal"),function(E){j.second_password=E;ImportExport.importJSON(l,j,t,p)});return}}var A=MyWallet.detectPrivateKeyFormat(D);var B=MyWallet.privateKeyStringToKey(D,A);if(B.getBitcoinAddress().toString()==y||B.getBitcoinAddressCompressed().toString()==y){try{MyWallet.addPrivateKey(B,A=="compsipa")}catch(x){}++k}else{throw"Not importing "+y+" because it is inconsistent with the decoded address "}}if(MyWallet.addressExists(y)){if(u.label&&$.trim(u.label.length)>0){MyWallet.setAddressLabel(y,$.trim(u.label))}if(u.tag){MyWallet.setAddressTag(y,u.tag)}else{if(u.reserve){MyWallet.setAddressTag(y,2)}else{MyWallet.setAddressTag(y,1)}}}}catch(x){console.log(x)}}if(r0){t()}else{throw"No Private Keys Imported. Unknown Format Incorrect Password"}}catch(x){console.log(x);try{p(x)}catch(x){}}};if(n==null){k=b(l);$("#import-input_text").val("");if(k>0){t()}else{throw"No Private Keys Imported. Unknown Format or Incorrect Password"}}else{if(n!=null&&n.keys!=null&&n.keys.length>0){if(n.keys.length>1000){MyWallet.makeNotice("info","keys-skipped","Some keys may have been skipped");var s=0;var q=[];var i=function(){try{for(;s0)){BlockchainAPI.get_balances(q,function(x){try{for(var z in x){if(x[z].final_balance==0){for(var y=0;y1){n.keys.splice(y,1)}--s}}}}setTimeout(i,10)}catch(A){console.log(A);try{p(A)}catch(A){}}},function(x){console.log(x);try{p(x)}catch(x){}});q=[];return}}}catch(v){console.log(v);try{p(v)}catch(v){}}m()};i()}else{m()}}else{throw"Unknown Format"}}}catch(o){console.log(o);try{p(o)}catch(o){}}};function b(l){var n=l.split(/\W+/g);try{var k=0;for(var m in n){var j=n[m];try{var q=MyWallet.detectPrivateKeyFormat(j);var r=MyWallet.privateKeyStringToKey(j,q);var o=q=="compsipa";try{MyWallet.addPrivateKey(r,o)}catch(p){}++k}catch(p){}}return k}catch(p){MyWallet.makeNotice("error","misc-error",p)}return false}function f(i){MyWallet.getMainPassword(function(j){MyWallet.getSecondPassword(function(k){ImportExport.importJSON(i.val(),{main_password:j,second_password:k},function(){MyWallet.backupWallet("update",function(){MyWallet.get_history()})},function(l){MyWallet.makeNotice("error","misc-error",l)})})})}function g(k,i){var j=$("#compressed-private-key-modal");j.modal({keyboard:true,backdrop:"static",show:true});j.center();j.find(".btn.btn-secondary").unbind().click(function(){k();j.modal("hide")});j.find(".btn.btn-primary").unbind().click(function(){i();j.modal("hide")})}function e(i){MyWallet.setLoadingText("Importing Backup");MyWallet.securePost("wallet",{method:"get-backup",id:i,format:"json"},function(l){try{var k=l.payload;MyWallet.getMainPassword(function(m){MyWallet.getSecondPassword(function(n){ImportExport.importJSON(k,{main_password:m,second_password:n},function(){MyWallet.backupWallet("update",function(){MyWallet.get_history()})},function(o){MyWallet.makeNotice("error","misc-error",o)})})})}catch(j){MyWallet.makeNotice("error","misc-error",j)}},function(j){MyWallet.makeNotice("error","misc-error",j.responseText)})}function a(i){MyWallet.setLoadingText("Loading Backup List");MyWallet.securePost("wallet",{method:"list-backups",format:"json"},function(p){try{if(p==null){throw"Failed to get backups"}var k=i.find("table tbody").empty();var m=p.results;if(m.length==0){throw"No backups found"}for(var l in m){var j=m[l];var n=$(""+j.name+""+dateToString(new Date(j.last_modified))+""+j.size+'Import');(function(q){n.find(".act-import").click(function(){e(q.id)})})(j);k.append(n)}}catch(o){MyWallet.makeNotice("error","misc-error",o)}},function(j){MyWallet.makeNotice("error","misc-error",j.responseText)})}function c(j,i,k){MyWallet.getSecondPassword(function(){try{if(!j||j.length==0){throw"You must enter a private key to import"}var n=MyWallet.detectPrivateKeyFormat(j);var l=MyWallet.privateKeyStringToKey(j,n);if(n=="compsipa"){var o=l.getBitcoinAddressCompressed().toString();g(function(){if(o==null||o.length==0||o=="undefined"){throw"Unable to decode bitcoin addresses from private key"}if(MyWallet.addPrivateKey(l,true)){if(i&&i.length>0){MyWallet.setAddressLabel(o,i)}MyWallet.backupWallet("update",function(){MyWallet.get_history()});if(k){k()}MyWallet.makeNotice("success","added","Added Bitcoin Address "+o)}},function(){loadScript("wallet/signer",function(){var p=l.getBitcoinAddress().toString();BlockchainAPI.get_balance([p],function(q){var r=initNewTx();r.fee=r.base_fee;r.to_addresses.push({address:new Bitcoin.Address(MyWallet.getPreferredAddress()),value:BigInteger.valueOf(q).subtract(r.fee)});r.from_addresses=[p];r.extra_private_keys[p]=B58.encode(l.priv);r.start()},function(){MyWallet.makeNotice("error","misc-error","Error Getting Address Balance")})})})}else{var o=l.getBitcoinAddress().toString();if(o==null||o.length==0||o=="undefined"){throw"Unable to decode bitcoin addresses from private key"}if(MyWallet.addPrivateKey(l,false)){if(i&&i.length>0){MyWallet.setAddressLabel(o,i)}MyWallet.backupWallet("update",function(){MyWallet.get_history()});if(k){k()}MyWallet.makeNotice("success","added-adress","Added bitcoin address "+o)}else{throw"Unable to add private key for bitcoin address "+o}}}catch(m){MyWallet.makeNotice("error","misc-error","Error importing private key: "+m)}})}}var ImportExport=new _ImportExport(); \ No newline at end of file +function _ImportExport(){this.init=function(l,n,m){MyWallet.setLoadingText("Loading Import Export View");if(!l.is(":empty")){d();n();return}$.ajax({type:"GET",url:root+"wallet/import-export-template",data:{format:"plain",language:MyWallet.getLanguage()},success:function(o){try{l.html(o);d();n()}catch(p){console.log(p);m()}},error:function(){MyWallet.makeNotice("error","misc-error","Error Downloading Import Export Template");m()}})};function e(l,n){var m=$("#watch-only-modal");m.modal({keyboard:true,backdrop:"static",show:true});m.center();m.find(".address").text(l);m.find(".btn.btn-secondary").unbind().click(function(){m.modal("hide")});m.find(".btn.btn-primary").unbind().click(function(){n();m.modal("hide")})}function f(l,m,o){var n=$("#import-private-key-warning-modal");n.modal({keyboard:true,backdrop:"static",show:true});n.center();n.find(".address").text(l);BlockchainAPI.get_balance([l],function(p){n.find(".address").text(l+" - "+formatBTC(p))},function(p){MyWallet.makeNotice("error","misc-error",p)});n.find(".btn.btn-secondary").unbind().click(function(){m();n.modal("hide")});n.find(".btn.btn-primary").unbind().click(function(){o();n.modal("hide")})}function d(){$('a[data-toggle="tab"]').unbind().on("show",function(l){$(l.target.hash).trigger("show")});$("#import-json-btn").unbind().click(function(){$(this).prop("disabled",true);i($("#import-json"));$(this).prop("disabled",false)});$("#import-address-btn").unbind().click(function(){var m=$.trim($("#import-address-address").val());if(m.length=0){MyWallet.makeNotice("error","misc-error","You must enter an address to import");return}try{var l=new Bitcoin.Address(m);if(l.toString()!=m){throw"Inconsistency between addresses"}$("#import-address-address").val("");e(m,function(){try{if(MyWallet.addWatchOnlyAddress(m)){MyWallet.makeNotice("success","added-address","Successfully Added Address "+l);try{ws.send('{"op":"addr_sub", "addr":"'+l+'"}')}catch(o){}MyWallet.backupWallet("update",function(){MyWallet.get_history()})}else{throw"Wallet Full Or Addresses Exists"}}catch(o){MyWallet.makeNotice("error","misc-error",o)}})}catch(n){MyWallet.makeNotice("error","misc-error","Error importing address: "+n);return}});$("#import-private-scan").unbind().click(function(){MyWallet.getSecondPassword(function(){loadScript("wallet/signer",function(){showPrivateKeyModal(function(l){if(MyWallet.addPrivateKey(l,{compressed:false,app_name:IMPORTED_APP_NAME,app_version:IMPORTED_APP_VERSION})){MyWallet.backupWallet("update",function(){MyWallet.get_history()});MyWallet.makeNotice("success","added-address","Imported Bitcoin Address "+l.getBitcoinAddress())}else{throw"Unable to add private key for bitcoin address "+l.getBitcoinAddress()}},function(l){MyWallet.makeNotice("error","misc-error",l)},"Any Private Key")})})});$("#import-private-btn").unbind().click(function(){var l=$("#import-private-key");try{a($.trim(l.val()))}catch(m){MyWallet.makeNotice("error","misc-error","Error importing private key: "+m)}l.val("")});$("#import-brain-wallet-btn").unbind().click(function(){var n=$("#import-brain-wallet");var l=$.trim(n.val());if(l.length<15){MyWallet.makeNotice("error","misc-error","The passphrase must be at least 15 characters long");return}var m=Crypto.SHA256(l,{asBytes:true});try{a(Bitcoin.Base58.encode(m),"Brain Wallet","brain_wallet")}catch(o){MyWallet.makeNotice("error","misc-error","Error importing private key: "+o)}n.val("")});$("#export-priv-format").change(function(l){$("#json-unencrypted-export").val(MyWallet.makeWalletJSON($("#export-priv-format").val()))});$("#export-crypted").on("show",function(){$("#json-crypted-export").val(MyWallet.getEncryptedWalletData())});$("#export-unencrypted").on("show",function(){MyWallet.getSecondPassword(function(){$("#export-priv-format").val("base58");$("#json-unencrypted-export").val(MyWallet.makeWalletJSON($("#export-priv-format").val()))})});$("#import-backup").on("show",function(){var l=this;k($(l))});$(".paper-wallet-btn").unbind().click(function(){loadScript("wallet/paper-wallet",function(){PaperWallet.showModal()})})}this.importJSON=function(o,m,w,s){try{var n=0;if(o==null||o.length==0){throw"No import data provided!"}var q=null;try{q=$.parseJSON(o);if(q==null){throw"null input_text"}}catch(r){MyWallet.decrypt(o,m.main_password,MyWallet.getDefaultPbkdf2Iterations(),function(x){try{q=$.parseJSON(x);return(q!=null)}catch(y){return false}})}var u=0;var p=function(){try{var x=q.keys[u];var B=x.addr;if(B!=null&&B.length>0&&B!="undefined"){try{if(x.reserve){throw"Ignoring Reserve Key"}var G=x.priv;if(!G){G=x.sec}if(G!=null){var C=MyWallet.getDefaultPbkdf2Iterations();if(q.options&&q.options.pbkdf2_iterations){C=q.options.pbkdf2_iterations}if(q.double_encryption){if(m.second_password){var F=MyWallet.decrypt(G,q.sharedKey+m.second_password,C,MyWallet.isBase58);if(F==null){throw"Error decrypting private key for address "+B}G=F}else{MyWallet.getPassword($("#import-second-password-modal"),function(H){m.second_password=H;ImportExport.importJSON(o,m,w,s)});return}}var D=MyWallet.detectPrivateKeyFormat(G);var E=MyWallet.privateKeyStringToKey(G,D);if(E.getBitcoinAddress().toString()==B||E.getBitcoinAddressCompressed().toString()==B){try{MyWallet.addPrivateKey(E,{compressed:D=="compsipa",app_name:q.created_device_name?q.created_device_name:IMPORTED_APP_NAME,app_version:q.created_device_version?q.created_device_version:IMPORTED_APP_VERSION,created_time:q.created_time?q.created_time:0})}catch(A){}++n}else{throw"Not importing "+B+" because it is inconsistent with the decoded address "}}if(MyWallet.addressExists(B)){if(x.label&&$.trim(x.label.length)>0){MyWallet.setAddressLabel(B,$.trim(x.label))}if(x.tag){MyWallet.setAddressTag(B,x.tag)}else{if(x.reserve){MyWallet.setAddressTag(B,2)}else{MyWallet.setAddressTag(B,1)}}}}catch(A){console.log(A)}}if(u0){w()}else{throw"No Private Keys Imported. Unknown Format Incorrect Password"}}catch(A){console.log(A);try{s(A)}catch(A){}}};if(q==null){n=c(o);$("#import-input_text").val("");if(n>0){w()}else{throw"No Private Keys Imported. Unknown Format or Incorrect Password"}}else{if(q!=null&&q.keys!=null&&q.keys.length>0){if(q.keys.length>1000){MyWallet.makeNotice("info","keys-skipped","Some keys may have been skipped");var v=0;var t=[];var l=function(){try{for(;v0)){BlockchainAPI.get_balances(t,function(A){try{for(var C in A){if(A[C].final_balance==0){for(var B=0;B1){q.keys.splice(B,1)}--v}}}}setTimeout(l,10)}catch(D){console.log(D);try{s(D)}catch(D){}}},function(A){console.log(A);try{s(A)}catch(A){}});t=[];return}}}catch(y){console.log(y);try{s(y)}catch(y){}}p()};l()}else{p()}}else{throw"Unknown Format"}}}catch(r){console.log(r);try{s(r)}catch(r){}}};function c(n){var p=n.split(/\W+/g);try{var m=0;for(var o in p){var l=p[o];try{var s=MyWallet.detectPrivateKeyFormat(l);var t=MyWallet.privateKeyStringToKey(l,s);var q=s=="compsipa";try{MyWallet.addPrivateKey(t,{compressed:q,app_name:IMPORTED_APP_NAME,app_version:IMPORTED_APP_VERSION})}catch(r){}++m}catch(r){}}return m}catch(r){MyWallet.makeNotice("error","misc-error",r)}return false}function i(l){MyWallet.getMainPassword(function(m){MyWallet.getSecondPassword(function(n){ImportExport.importJSON(l.val(),{main_password:m,second_password:n},function(){MyWallet.backupWallet("update",function(){MyWallet.get_history()})},function(o){MyWallet.makeNotice("error","misc-error",o)})})})}function b(n,l){var m=$("#compressed-private-key-modal");m.modal({keyboard:true,backdrop:"static",show:true});m.center();m.find(".btn.btn-secondary").unbind().click(function(){n();m.modal("hide")});m.find(".btn.btn-primary").unbind().click(function(){l();m.modal("hide")})}function h(l){MyWallet.setLoadingText("Importing Backup");MyWallet.securePost("wallet",{method:"get-backup",id:l,format:"json"},function(o){try{var n=o.payload;MyWallet.getMainPassword(function(p){MyWallet.getSecondPassword(function(q){ImportExport.importJSON(n,{main_password:p,second_password:q},function(){MyWallet.backupWallet("update",function(){MyWallet.get_history()})},function(r){MyWallet.makeNotice("error","misc-error",r)})})})}catch(m){MyWallet.makeNotice("error","misc-error",m)}},function(m){MyWallet.makeNotice("error","misc-error",m.responseText)})}function k(l){MyWallet.setLoadingText("Loading Backup List");MyWallet.securePost("wallet",{method:"list-backups",format:"json"},function(s){try{if(s==null){throw"Failed to get backups"}var n=l.find("table tbody").empty();var p=s.results;if(p.length==0){throw"No backups found"}for(var o in p){var m=p[o];var q=$(""+m.name+""+dateToString(new Date(m.last_modified))+""+m.size+'Import');(function(t){q.find(".act-import").click(function(){h(t.id)})})(m);n.append(q)}}catch(r){MyWallet.makeNotice("error","misc-error",r)}},function(m){MyWallet.makeNotice("error","misc-error",m.responseText)})}function a(n,l,o,m){MyWallet.getSecondPassword(function(){try{if(!n||n.length==0){throw"You must enter a private key to import"}function q(w,v){if(MyWallet.addPrivateKey(w,{compressed:v,app_name:m?m:IMPORTED_APP_NAME,app_version:IMPORTED_APP_VERSION})){var x=v?w.getBitcoinAddressCompressed().toString():w.getBitcoinAddress().toString();if(l&&l.length>0){MyWallet.setAddressLabel(x,l)}MyWallet.backupWallet("update",function(){MyWallet.get_history()});if(o){o()}MyWallet.makeNotice("success","added","Added Bitcoin Address "+x)}}var t=MyWallet.detectPrivateKeyFormat(n);if(t=="bip38"){MyWallet.getPassword($("#import-private-key-password"),function(v){ImportExport.parseBIP38toECKey(n,v,function(w,x){q(w,x)},function(w){MyWallet.makeNotice("error","misc-error",w)})});return}var p=MyWallet.privateKeyStringToKey(n,t);var u=null;if(t=="compsipa"){u=p.getBitcoinAddressCompressed().toString()}else{u=p.getBitcoinAddress().toString()}if(u==null||u.length==0||u=="undefined"){throw"Unable to decode bitcoin addresses from private key"}if(MyWallet.addressExists(u)&&!MyWallet.isWatchOnly(u)){throw"Address already exists in the wallet"}function r(){loadScript("wallet/signer",function(){BlockchainAPI.get_balance([u],function(v){var w=initNewTx();w.fee=w.base_fee;w.to_addresses.push({address:new Bitcoin.Address(MyWallet.getPreferredAddress()),value:BigInteger.valueOf(v).subtract(w.fee)});w.from_addresses=[u];w.extra_private_keys[u]=B58.encode(p.priv);w.start()},function(){MyWallet.makeNotice("error","misc-error","Error Getting Address Balance")})})}f(u,function(){if(t=="compsipa"){b(function(){q(p,true)},function(){r()})}else{if(MyWallet.addPrivateKey(p,{compressed:false,app_name:m?m:IMPORTED_APP_NAME,app_version:IMPORTED_APP_VERSION})){q(p,false)}else{throw"Unable to add private key for bitcoin address "+u}}},function(){r()})}catch(s){MyWallet.makeNotice("error","misc-error","Error importing private key: "+s)}})}this.parseBIP38toECKey=function(n,B,x,u){var p;try{p=Bitcoin.Base58.decode(n)}catch(r){u("Invalid Private Key");return}if(p.length!=43){u("Invalid Private Key");return}else{if(p[0]!=1){u("Invalid Private Key");return}}var t=p.slice(-4);p=p.slice(0,-4);var s=Crypto.SHA256(Crypto.SHA256(p,{asBytes:true}),{asBytes:true});if(s[0]!=t[0]||s[1]!=t[1]||s[2]!=t[2]||s[3]!=t[3]){u("Invalid Private Key");return}var v=false;var q=false;var o=false;if(p[1]==66){if(p[2]==224){v=true}else{if(p[2]!=192){u("Invalid Private Key");return}}}else{if(p[1]==67){q=true;v=(p[2]&32)!=0;o=(p[2]&4)!=0;if((p[2]&36)!=p[2]){u("Invalid Private Key");return}}else{u("Invalid Private Key");return}}var w;var A={mode:new Crypto.mode.ECB(Crypto.pad.NoPadding),asBytes:true};var z=function(){var D=new Bitcoin.ECKey(w);var C=v?D.getBitcoinAddressCompressed():D.getBitcoinAddress();s=Crypto.SHA256(Crypto.SHA256(C.toString(),{asBytes:true}),{asBytes:true});if(s[0]!=p[3]||s[1]!=p[4]||s[2]!=p[5]||s[3]!=p[6]){u("Incorrect Passphrase");return}x(D,v)};if(!q){var l=p.slice(3,7);ImportExport.Crypto_scrypt(B,l,16384,8,8,64,function(E){var D=E.slice(32,32+32);w=Crypto.AES.decrypt(p.slice(7,7+32),D,A);for(var C=0;C<32;C++){w[C]^=E[C]}z()})}else{var m=p.slice(7,7+8);var y=!o?m:m.slice(0,4);ImportExport.Crypto_scrypt(B,y,16384,8,8,32,function(E){var I;if(!o){I=E}else{var D=E.concat(m);I=Crypto.SHA256(Crypto.SHA256(D,{asBytes:true}),{asBytes:true})}var G=new Bitcoin.ECKey(I);var C=G.getPubCompressed();var F=p.slice(23,23+16);var H=p.slice(3,3+12);ImportExport.Crypto_scrypt(C,H,1024,1,1,64,function(K){var M=K.slice(32);var Q=Crypto.AES.decrypt(F,M,A);for(var N=0;N<16;N++){Q[N]^=K[N+16]}var L=p.slice(15,15+8).concat(Q.slice(0,0+8));var R=Crypto.AES.decrypt(L,M,A);for(var N=0;N<16;N++){R[N]^=K[N]}var P=R.slice(0,0+16).concat(Q.slice(8,8+8));var O=Crypto.SHA256(Crypto.SHA256(P,{asBytes:true}),{asBytes:true});var J=secp256k1();var S=BigInteger.fromByteArrayUnsigned(I).multiply(BigInteger.fromByteArrayUnsigned(O)).remainder(J.getN());w=S.toByteArrayUnsigned();z()})})}};var j=2147483647;var g=null;this.Crypto_scrypt=function(q,v,x,m,o,C,z){if(x==0||(x&(x-1))!=0){throw Error("N must be > 0 and a power of 2")}if(x>j/128/m){throw Error("Parameter N is too large")}if(m>j/128/o){throw Error("Parameter r is too large")}var t={iterations:1,hasher:Crypto.SHA256,asBytes:true};var n=Crypto.PBKDF2(q,v,o*128*m,t);try{var u=0;var A=0;var y=function(){if(!g){var r="("+s.toString()+")()";var p;try{p=new Blob([r],{type:"text/javascript"})}catch(B){window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder;p=new BlobBuilder();p.append(r);p=p.getBlob("text/javascript")}g=URL.createObjectURL(p)}var D=new Worker(g);D.onmessage=function(I){var F=I.data[0],J=I.data[1];A++;if(u1){l[1].postMessage([x,m,o,n,u++])}}catch(w){window.setTimeout(function(){s();z(Crypto.PBKDF2(q,n,C,t))},0)}function s(){var E=[],p=[];if(typeof n==="undefined"){onmessage=function(O){var P=O.data;var S=P[0],M=P[1],Q=P[2],T=P[3],L=P[4];var R=[];H(T,L*128*M,R,0,128*M);J(R,0,M,S,p,E);postMessage([L,R])}}else{for(var D=0;D>>(32-L))}function G(P){var O=new Array(32);var L=new Array(32);var N;for(N=0;N<16;N++){O[N]=(P[N*4+0]&255)<<0;O[N]|=(P[N*4+1]&255)<<8;O[N]|=(P[N*4+2]&255)<<16;O[N]|=(P[N*4+3]&255)<<24}F(O,0,L,0,16);for(N=8;N>0;N-=2){L[4]^=B(L[0]+L[12],7);L[8]^=B(L[4]+L[0],9);L[12]^=B(L[8]+L[4],13);L[0]^=B(L[12]+L[8],18);L[9]^=B(L[5]+L[1],7);L[13]^=B(L[9]+L[5],9);L[1]^=B(L[13]+L[9],13);L[5]^=B(L[1]+L[13],18);L[14]^=B(L[10]+L[6],7);L[2]^=B(L[14]+L[10],9);L[6]^=B(L[2]+L[14],13);L[10]^=B(L[6]+L[2],18);L[3]^=B(L[15]+L[11],7);L[7]^=B(L[3]+L[15],9);L[11]^=B(L[7]+L[3],13);L[15]^=B(L[11]+L[7],18);L[1]^=B(L[0]+L[3],7);L[2]^=B(L[1]+L[0],9);L[3]^=B(L[2]+L[1],13);L[0]^=B(L[3]+L[2],18);L[6]^=B(L[5]+L[4],7);L[7]^=B(L[6]+L[5],9);L[4]^=B(L[7]+L[6],13);L[5]^=B(L[4]+L[7],18);L[11]^=B(L[10]+L[9],7);L[8]^=B(L[11]+L[10],9);L[9]^=B(L[8]+L[11],13);L[10]^=B(L[9]+L[8],18);L[12]^=B(L[15]+L[14],7);L[13]^=B(L[12]+L[15],9);L[14]^=B(L[13]+L[12],13);L[15]^=B(L[14]+L[13],18)}for(N=0;N<16;++N){O[N]=L[N]+O[N]}for(N=0;N<16;N++){var M=N*4;P[M+0]=(O[N]>>0&255);P[M+1]=(O[N]>>8&255);P[M+2]=(O[N]>>16&255);P[M+3]=(O[N]>>24&255)}}function K(N,O,Q,P,L){var M=L>>6;while(M--){Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++];Q[P++]^=N[O++]}}function I(O,L,M){var N;L+=(2*M-1)*64;N=(O[L+0]&255)<<0;N|=(O[L+1]&255)<<8;N|=(O[L+2]&255)<<16;N|=(O[L+3]&255)<<24;return N}function F(P,N,M,L,O){while(O--){M[L++]=P[N++]}}function H(Q,O,M,L,P){var N=P>>5;while(N--){M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++];M[L++]=Q[O++]}}}}}var ImportExport=new _ImportExport(); \ No newline at end of file diff --git a/extension/Resources/wallet/shared.min.js b/extension/Resources/wallet/shared.min.js index a0e1d6a..916b0a4 100644 --- a/extension/Resources/wallet/shared.min.js +++ b/extension/Resources/wallet/shared.min.js @@ -1 +1 @@ -var satoshi=100000000;var show_adv=false;var adv_rule;var symbol_btc={code:"BTC",symbol:"BTC",name:"Bitcoin",conversion:satoshi,symbolAppearsAfter:true,local:false};var symbol_local;var symbol=symbol_btc;var root="/";var resource="/Resources/";var war_checksum;var min=true;var isExtension=false;function setLocalSymbol(a){if(!a){return}if(symbol===symbol_local){symbol_local=a;symbol=symbol_local;calcMoney()}else{symbol_local=a}}function setBTCSymbol(a){if(!a){return}if(symbol===symbol_btc){symbol_btc=a;symbol=symbol_btc;calcMoney()}else{symbol_btc=a}}$.fn.center=function(){scrollTo(0,0);this.css("top",Math.max(($(window).height()/2)-(this.height()/2),0)+"px");this.css("left",Math.max(($(window).width()/2)-(this.width()/2),0)+"px");return this};if(!window.console){var names=["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];window.console={};for(var i=0;i';if(this.note){g+='
    '+this.note+"
    "}g+='
    ';if(this.time>0){var c=new Date(this.time*1000);g+=dateToString(c)}var l;if(n<0){l='class="txtd hidden-phone"'}else{l='class="txtd"'}g+='
    ";if(this.inputs.length>0){for(var f=0;f"}else{g+=formatOutput(input.prev_out,k,h)}}}else{g+="No inputs, transaction probably sent from self.
    "}g+='
    ';if(n==null){n=0;for(var f=0;f0){b="btn btn-success cb";g+=''}else{if(n<0){b="btn btn-danger cb";g+=''}else{b="btn cb";g+=" "}}if(n>=0){l='class="txtd hidden-phone"'}else{l='class="txtd"'}g+="";var j=null;var d=null;for(var f=0;f0&&!e.spent&&j==null){var m=k[e.addr];if(m==null){m=k[e.addr2]}if(m==null){m=k[e.addr3]}if(m!=null&&m.priv!=null){j=f;d=m}}g+=formatOutput(e,k,h)}g+='';for(var f=0;f'+formatMoney(output.value,true)+"
    "}g+='
    ';if(this.confirmations==null){g+=' '}else{if(this.confirmations==0){g+=' '}else{if(this.confirmations>0){g+=' "}}}g+='";if(this.double_spend==true){g+=' '}g+="";return g}}}Date.prototype.sameDayAs=function(a){return((this.getFullYear()==a.getFullYear())&&(this.getMonth()==a.getMonth())&&(this.getDate()==a.getDate()))};function padStr(a){return(a<10)?"0"+a:""+a}function dateToString(a){if(a.sameDayAs(new Date())){return"Today "+padStr(a.getHours())+":"+padStr(a.getMinutes())+":"+padStr(a.getSeconds())}else{return padStr(a.getFullYear())+"-"+padStr(1+a.getMonth())+"-"+padStr(a.getDate())+" "+padStr(a.getHours())+":"+padStr(a.getMinutes())+":"+padStr(a.getSeconds())}}function formatSatoshi(d,a,c){if(!d){return"0.00"}var f="";if(d<0){d=-d;f="-"}if(!a){a=0}d=""+parseInt(d);var e=(d.length>(8-a)?d.substr(0,d.length-(8-a)):"0");if(!c){e=e.replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1,")}var b=d.length>(8-a)?d.substr(d.length-(8-a)):d;if(b&&b!=0){while(b.length<(8-a)){b="0"+b}b=b.replace(/0*$/,"");while(b.length<2){b+="0"}return f+e+"."+b}return f+e}function convert(a,b){return(a/b).toFixed(2).toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1,")}function formatBTC(a){return formatSymbol(a,symbol_btc)}function sShift(a){return(satoshi/a.conversion).toString().length-1}function formatSymbol(a,c,b){var d;if(c!==symbol_btc){d=convert(a,c.conversion)}else{d=formatSatoshi(a,sShift(c))}if(b){d=d.replace(/([1-9]\d*\.\d{2}?)(.*)/,'$1$2')}if(c.symbolAppearsAfter){d+=" "+c.symbol}else{d=c.symbol+" "+d}return d}function formatMoney(a,b){var c=formatSymbol(a,symbol);if(b){c=''+c+""}return c}function formatOutput(b,e,a){function c(j,f){var h=null;if(e!=null){h=e[j]}if(h!=null){if(h.label!=null){return h.label}else{return j}}else{if(a&&a[j]){return''+a[j]+""}else{if(f.addr_tag){var g="";if(f.addr_tag_link){g=' '}return''+j+' ('+f.addr_tag+g+")"}else{return''+j+""}}}}var d="";if(b.type==0){}else{if(b.type==1||b.type==2||b.type==3){d='(Escrow '+b.type+" of "}else{d='Strange '}}if(b.addr!=null){d+=c(b.addr,b)}if(b.addr2!=null){d+=", "+c(b.addr2,b)}if(b.addr3!=null){d+=", "+c(b.addr3,b)}if(b.type==1||b.type==2||b.type==3){d+=")"}d+="
    ";return d}function toggleAdv(){setAdv(!show_adv)}function setAdv(a){show_adv=a;if(adv_rule!=null){adv_rule.remove()}if(show_adv){adv_rule=$("").appendTo("head");$("a[class=show_adv]").text("Show Basic")}else{adv_rule=$("").appendTo("head");$("a[class=show_adv]").text("Show Advanced")}}function calcMoney(){$("span[data-c]").each(function(a){$(this).text(formatMoney($(this).data("c")))})}function toggleSymbol(){if(symbol_local&&symbol===symbol_btc){symbol=symbol_local;SetCookie("local","true")}else{symbol=symbol_btc;SetCookie("local","false")}$("#currencies").val(symbol.code);calcMoney()}var _sounds={};function playSound(b){try{if(!_sounds[b]){_sounds[b]=new Audio(resource+b+".wav")}_sounds[b].play()}catch(a){}}function setupSymbolToggle(){$(".cb").unbind().click(function(){toggleSymbol()})}function setupToggle(){$("[class=show_adv]").unbind().click(function(){toggleAdv()})}function updateQueryString(b,d,a){if(!a){a=window.location.href}var c=new RegExp("([?|&])"+b+"=.*?(&|#|$)(.*)","gi");if(c.test(a)){if(typeof d!=="undefined"&&d!==null){return a.replace(c,"$1"+b+"="+d+"$2$3")}else{return a.replace(c,"$1$3").replace(/(&|\?)$/,"")}}else{if(typeof d!=="undefined"&&d!==null){var f=a.indexOf("?")!==-1?"&":"?",e=a.split("#");a=e[0]+f+b+"="+d;if(e[1]){a+="#"+e[1]}return a}else{return a}}}$(document).ready(function(){var d=$(".footer");var c=d.data("symbol-local");if(c){symbol_local=c}var b=d.data("symbol-btc");if(b){symbol_btc=b}if(symbol_local&&getCookie("local")=="true"){symbol=symbol_local}else{symbol=symbol_btc}war_checksum=$(document.body).data("war-checksum");show_adv=getCookie("show_adv");try{$("#currencies").change(function(){var e=$(this).val();if(symbol==null||e!=symbol.symbol){if(symbol_local!=null&&e==symbol_local.code){toggleSymbol()}else{if(symbol_btc!=null&&e==symbol_btc.code){toggleSymbol()}else{document.location.href=updateQueryString("currency",e,document.location.href)}}}});setupSymbolToggle();setupToggle();setAdv(show_adv)}catch(a){}});function loadScript(h,g,a){h=resource+h+(min?".min.js":".js")+"?"+war_checksum;console.log("Load "+h);if($('script[src="'+h+'"]').length>0){g();return}var d=false;var c=document.createElement("script");c.type="text/javascript";c.async=true;c.src=h;try{c.addEventListener("error",function(j){d=true;if(a){a("Error Loading Script. Are You Offline?")}},false);c.addEventListener("load",function(j){if(!d){g()}},false)}catch(f){setTimeout(function(){if(!d){g()}},2000)}var b=document.getElementsByTagName("head")[0];b.appendChild(c)}function SetCookie(a,b){document.cookie=a+"="+encodeURI(b.toString())+"; path=/; domain=blockchain.info; max-age="+(60*60*24*365)}function getCookie(a){if(document.cookie.length>0){c_start=document.cookie.indexOf(a+"=");if(c_start!=-1){c_start=c_start+a.length+1;c_end=document.cookie.indexOf(";",c_start);if(c_end==-1){c_end=document.cookie.length}return decodeURI(document.cookie.substring(c_start,c_end))}}return""}; \ No newline at end of file +var satoshi=100000000;var show_adv=false;var adv_rule;var symbol_btc={code:"BTC",symbol:"BTC",name:"Bitcoin",conversion:satoshi,symbolAppearsAfter:true,local:false};var symbol_local;var symbol=symbol_btc;var root="/";var resource="/Resources/";var war_checksum;var min=true;var isExtension=false;var APP_VERSION="1.0";var APP_NAME="javascript_web";var IMPORTED_APP_NAME="external";var IMPORTED_APP_VERSION="0";function stripHTML(a){return $.trim($("
    "+a.replace(/(<([^>]+)>)/ig,"")+"
    ").text())}function setLocalSymbol(a){if(!a){return}if(symbol===symbol_local){symbol_local=a;symbol=symbol_local;calcMoney()}else{symbol_local=a}}function setBTCSymbol(a){if(!a){return}if(symbol===symbol_btc){symbol_btc=a;symbol=symbol_btc;calcMoney()}else{symbol_btc=a}}$.fn.center=function(){scrollTo(0,0);this.css("top",Math.max(($(window).height()/2)-(this.height()/2),0)+"px");this.css("left",Math.max(($(window).width()/2)-(this.width()/2),0)+"px");return this};if(!window.console){var names=["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];window.console={};for(var i=0;i';if(this.note){g+='
    '+this.note+"
    "}g+='
    ';if(this.time>0){var c=new Date(this.time*1000);g+=dateToString(c)}var l;if(n<0){l='class="txtd hidden-phone"'}else{l='class="txtd"'}g+='
    ";if(this.inputs.length>0){for(var f=0;f"}else{g+=formatOutput(input.prev_out,k,h)}}}else{g+="No inputs, transaction probably sent from self.
    "}g+='
    ';if(n==null){n=0;for(var f=0;f0){b="btn btn-success cb";g+=''}else{if(n<0){b="btn btn-danger cb";g+=''}else{b="btn cb";g+=" "}}if(n>=0){l='class="txtd hidden-phone"'}else{l='class="txtd"'}g+="";var j=null;var d=null;for(var f=0;f0&&!e.spent&&j==null){var m=k[e.addr];if(m==null){m=k[e.addr2]}if(m==null){m=k[e.addr3]}if(m!=null&&m.priv!=null){j=f;d=m}}g+=formatOutput(e,k,h)}g+='';for(var f=0;f'+formatMoney(output.value,true)+"
    "}g+='
    ';if(this.confirmations==null){g+=' '}else{if(this.confirmations==0){g+=' '}else{if(this.confirmations>0){g+=' "}}}g+='";if(this.double_spend==true){g+=' '}g+="";return g}}}Date.prototype.sameDayAs=function(a){return((this.getFullYear()==a.getFullYear())&&(this.getMonth()==a.getMonth())&&(this.getDate()==a.getDate()))};function padStr(a){return(a<10)?"0"+a:""+a}function dateToString(a){if(a.sameDayAs(new Date())){return"Today "+padStr(a.getHours())+":"+padStr(a.getMinutes())+":"+padStr(a.getSeconds())}else{return padStr(a.getFullYear())+"-"+padStr(1+a.getMonth())+"-"+padStr(a.getDate())+" "+padStr(a.getHours())+":"+padStr(a.getMinutes())+":"+padStr(a.getSeconds())}}function formatSatoshi(d,a,c){if(!d){return"0.00"}var f="";if(d<0){d=-d;f="-"}if(!a){a=0}d=""+parseInt(d);var e=(d.length>(8-a)?d.substr(0,d.length-(8-a)):"0");if(!c){e=e.replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1,")}var b=d.length>(8-a)?d.substr(d.length-(8-a)):d;if(b&&b!=0){while(b.length<(8-a)){b="0"+b}b=b.replace(/0*$/,"");while(b.length<2){b+="0"}return f+e+"."+b}return f+e}function convert(a,b){return(a/b).toFixed(2).toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1,")}function formatBTC(a){return formatSymbol(a,symbol_btc)}function sShift(a){return(satoshi/a.conversion).toString().length-1}function formatSymbol(a,c,b){var d;if(c!==symbol_btc){d=convert(a,c.conversion)}else{d=formatSatoshi(a,sShift(c))}if(b){d=d.replace(/([1-9]\d*\.\d{2}?)(.*)/,'$1$2')}if(c.symbolAppearsAfter){d+=" "+c.symbol}else{d=c.symbol+" "+d}return d}function formatMoney(a,b){var c=formatSymbol(a,symbol);if(b){c=''+c+""}return c}function formatOutput(b,e,a){function c(j,f){var h=null;if(e!=null){h=e[j]}if(h!=null){if(h.label!=null){return h.label}else{return j}}else{if(a&&a[j]){return''+a[j]+""}else{if(f.addr_tag){var g="";if(f.addr_tag_link){g=' '}return''+j+' ('+f.addr_tag+g+")"}else{return''+j+""}}}}var d="";if(b.type==0){}else{if(b.type==1||b.type==2||b.type==3){d='(Escrow '+b.type+" of "}else{d='Strange '}}if(b.addr!=null){d+=c(b.addr,b)}if(b.addr2!=null){d+=", "+c(b.addr2,b)}if(b.addr3!=null){d+=", "+c(b.addr3,b)}if(b.type==1||b.type==2||b.type==3){d+=")"}d+="
    ";return d}function toggleAdv(){setAdv(!show_adv)}function setAdv(a){show_adv=a;if(adv_rule!=null){adv_rule.remove()}if(show_adv){adv_rule=$("").appendTo("head");$("a[class=show_adv]").text("Show Basic")}else{adv_rule=$("").appendTo("head");$("a[class=show_adv]").text("Show Advanced")}}function calcMoney(){$("span[data-c]").each(function(a){$(this).text(formatMoney($(this).data("c")))})}function toggleSymbol(){if(symbol_local&&symbol===symbol_btc){symbol=symbol_local;SetCookie("local","true")}else{symbol=symbol_btc;SetCookie("local","false")}$("#currencies").val(symbol.code);calcMoney()}var _sounds={};function playSound(b){try{if(!_sounds[b]){_sounds[b]=new Audio(resource+b+".wav")}_sounds[b].play()}catch(a){}}function setupSymbolToggle(){$(".cb").unbind().click(function(){toggleSymbol()})}function setupToggle(){$("[class=show_adv]").unbind().click(function(){toggleAdv()})}function updateQueryString(b,d,a){if(!a){a=window.location.href}var c=new RegExp("([?|&])"+b+"=.*?(&|#|$)(.*)","gi");if(c.test(a)){if(typeof d!=="undefined"&&d!==null){return a.replace(c,"$1"+b+"="+d+"$2$3")}else{return a.replace(c,"$1$3").replace(/(&|\?)$/,"")}}else{if(typeof d!=="undefined"&&d!==null){var f=a.indexOf("?")!==-1?"&":"?",e=a.split("#");a=e[0]+f+b+"="+d;if(e[1]){a+="#"+e[1]}return a}else{return a}}}$(document).ready(function(){var d=$(".footer");var c=d.data("symbol-local");if(c){symbol_local=c}var b=d.data("symbol-btc");if(b){symbol_btc=b}if(symbol_local&&getCookie("local")=="true"){symbol=symbol_local}else{symbol=symbol_btc}war_checksum=$(document.body).data("war-checksum");show_adv=getCookie("show_adv");try{$("#currencies").change(function(){var e=$(this).val();if(symbol==null||e!=symbol.symbol){if(symbol_local!=null&&e==symbol_local.code){toggleSymbol()}else{if(symbol_btc!=null&&e==symbol_btc.code){toggleSymbol()}else{document.location.href=updateQueryString("currency",e,document.location.href)}}}});setupSymbolToggle();setupToggle();setAdv(show_adv)}catch(a){}});function loadScript(h,g,a){h=resource+h+(min?".min.js":".js")+"?"+war_checksum;console.log("Load "+h);if($('script[src="'+h+'"]').length>0){g();return}var d=false;var c=document.createElement("script");c.type="text/javascript";c.async=true;c.src=h;try{c.addEventListener("error",function(j){d=true;if(a){a("Error Loading Script. Are You Offline?")}},false);c.addEventListener("load",function(j){if(!d){g()}},false)}catch(f){setTimeout(function(){if(!d){g()}},2000)}var b=document.getElementsByTagName("head")[0];b.appendChild(c)}function SetCookie(a,b){document.cookie=a+"="+encodeURI(b.toString())+"; path=/; domain=blockchain.info; max-age="+(60*60*24*365)}function getCookie(a){if(document.cookie.length>0){c_start=document.cookie.indexOf(a+"=");if(c_start!=-1){c_start=c_start+a.length+1;c_end=document.cookie.indexOf(";",c_start);if(c_end==-1){c_end=document.cookie.length}return decodeURI(document.cookie.substring(c_start,c_end))}}return""}var MyStore=new function(){this.put=function(a,b){try{localStorage.setItem(a,b)}catch(c){console.log(c)}};this.get=function(a,c){try{c(localStorage.getItem(a))}catch(b){console.log(b);c()}};this.remove=function(a){try{localStorage.removeItem(a)}catch(b){console.log(b)}};this.clear=function(){try{localStorage.clear()}catch(a){console.log(a)}}}; \ No newline at end of file diff --git a/extension/Resources/wallet/signer.min.js b/extension/Resources/wallet/signer.min.js index a1b8ef1..5127ce8 100644 --- a/extension/Resources/wallet/signer.min.js +++ b/extension/Resources/wallet/signer.min.js @@ -1 +1 @@ -function exceptionToString(b){var a="";for(var c in b){a+="property: "+c+" value: ["+b[c]+"]\n"}return"toString(): value: ["+b.toString()+"]"}function generateNewMiniPrivateKey(){while(true){var c=new Bitcoin.ECKey(false);var b="S"+Bitcoin.Base58.encode(c.priv).substr(0,21);var f=Crypto.SHA256(b+"?",{asBytes:true});if(f[0]==0){var a=Crypto.SHA256(b,{asBytes:true});var d=new Bitcoin.ECKey(a);if(MyWallet.addPrivateKey(d)){return{key:d,miniKey:b}}}}}function IsCanonicalSignature(c){if(c.length<9){throw"Non-canonical signature: too short"}if(c.length>73){throw"Non-canonical signature: too long"}var b=c[c.length-1]&(~(SIGHASH_ANYONECANPAY));if(bSIGHASH_SINGLE){throw"Non-canonical signature: unknown hashtype byte"}if(c[0]!=48){throw"Non-canonical signature: wrong type"}if(c[1]!=c.length-3){throw"Non-canonical signature: wrong length marker"}var a=c[3];if(5+a>=c.length){throw"Non-canonical signature: S length misplaced"}var f=c[5+a];if(a+f+7!=c.length){throw"Non-canonical signature: R+S length mismatch"}var d=4;if(c[d-2]!=2){throw"Non-canonical signature: R value type mismatch"}if(a==0){throw"Non-canonical signature: R length is zero"}if(c[d+0]&128){throw"Non-canonical signature: R value negative"}if(a>1&&(c[d+0]==0)&&!(c[d+1]&128)){throw"Non-canonical signature: R value excessively padded"}var d=6+a;if(c[d-2]!=2){throw"Non-canonical signature: S value type mismatch"}if(f==0){throw"Non-canonical signature: S length is zero"}if(c[d+0]&128){throw"Non-canonical signature: S value negative"}if(f>1&&(c[d+0]==0)&&!(c[d+1]&128)){throw"Non-canonical signature: S value excessively padded"}return true}try{if(typeof window=="undefined"||!window){self.addEventListener("message",function(d){var c=d.data;switch(c.cmd){case"load_resource":importScripts(c.path);break;case"sign_input":try{var a=new Bitcoin.Transaction(c.tx);var b=new Bitcoin.Script(c.connected_script);var f=signInput(a,c.outputN,c.priv_to_use,b);if(f){self.postMessage({cmd:"on_sign",script:f,outputN:c.outputN})}else{throw"Unknown Error Signing Script "+c.outputN}}catch(d){self.postMessage({cmd:"on_error",e:exceptionToString(d)})}break;default:self.postMessage({cmd:"on_error",e:"Unknown Command"})}},false)}}catch(e){}function showPrivateKeyModal(g,a,h){var c=$("#private-key-modal");c.modal({keyboard:true,backdrop:"static",show:true});c.center();c.find(".address").text(h);var d=null;var b=null;var f=c.find('input[name="key"]');f.val("");c.find(".qrcodeicon span").click(function(){c.modal("hide");MyWallet.scanQRCode(function(i){console.log("Scanned "+i);try{d=MyWallet.privateKeyStringToKey(i,MyWallet.detectPrivateKeyFormat(i));if(d==null){b="Error decoding private key"}}catch(j){b="Error decoding private key "+j}c.modal("show");f.val(i)},function(i){c.modal("show");MyWallet.makeNotice("error","misc-error",i)})});c.find(".btn.btn-primary").unbind().click(function(){var i=$.trim(f.val());try{if(i.length==0){throw"You must enter a private key to import"}d=MyWallet.privateKeyStringToKey(i,MyWallet.detectPrivateKeyFormat(i));if(d==null){throw"Could not decode private key"}}catch(j){b="Error importing private key "+j}c.modal("hide");if(d){g(d)}else{a(b)}});c.find(".btn.btn-secondary").unbind().click(function(){c.modal("hide");a("User Cancelled")})}function resolveAddress(a){a=$.trim(a);try{return new Bitcoin.Address(a).toString()}catch(f){}a=a.toLowerCase();var h=MyWallet.getAddressBook();for(var c in h){var d=MyWallet.getAddressBookLabel(c);if(d.toLowerCase()==a){return $.trim(c)}}var g=MyWallet.getAllAddresses();for(var b=0;bprecisionFromBTC(10)){if(j=="email"||j=="sms"){throw"Cannot Send More Than 10 BTC via email or sms"}else{if(j=="quick"){j="custom";d=false}}}else{if(j=="shared"&&gprecisionFromBTC(250)){throw"The Maximum Amount You Can Send Shared is "+formatPrecision(precisionFromBTC(250))}}}if(MyWallet.getMixerFee()<0&&(j=="custom"||j=="quick")&&g>=precisionFromBTC(5)&&getCookie("shared-never-ask")!="true"&&!c){var i=getCookie("shared-accepted-time");if(!i||parseInt(i)');o.find(".btn.btn-secondary").unbind().click(function(){n.cancel();o.modal("hide")});o.find(".btn.btn-primary").unbind().click(function(){o.modal("hide");try{MyWallet.securePost("send-via",{type:"email",to:n.email_data.email,priv:n.email_data.priv,hash:Crypto.util.bytesToHex(n.tx.getHash().reverse())},function(u){n.send()},function(u){n.error(u?u.responseText:null)})}catch(t){n.error(t)}})}catch(r){o.modal("hide");n.error(r)}},function(q){o.modal("hide");n.error("Error Getting Account Data")})}catch(p){o.modal("hide");n.error(p)}}}}}}f.insufficient_funds=function(p,n,s,r){var o=this;if(o.modal){o.modal.modal("hide")}var q=$("#insufficient-funds");q.find(".amount-required").text(formatBTC(p));q.find(".amount-available").text(formatBTC(n));q.modal({keyboard:false,backdrop:"static",show:true});q.find(".btn.btn-primary").unbind().click(function(){q.modal("hide");s()});q.find(".btn.btn-secondary").unbind().click(function(){q.modal("hide");r()});q.unbind().on("hidden",function(){if(o.modal){o.modal.modal("show")}})};f.ask_for_private_key=function(p,o,q){var n=this;if(n.modal){n.modal.modal("hide")}showPrivateKeyModal(function(r){if(n.modal){n.modal.modal("show")}p(r)},function(r){if(n.modal){n.modal.modal("show")}o(r)},q)};f.type=j;if(MyWallet.getFeePolicy()==1){f.base_fee=BigInteger.valueOf(100000);f.fee=BigInteger.valueOf(100000)}else{if(MyWallet.getFeePolicy()==-1){f.base_fee=BigInteger.valueOf(10000);f.ask_for_fee=function(o,n){n()}}}MyWallet.getSecondPassword(function(){try{var o=a.find('select[name="from"]');var t=o.val();if(t==null||t=="any"){f.from_addresses=MyWallet.getActiveAddresses()}else{if(o.attr("multiple")=="multiple"){f.from_addresses=t}else{f.from_addresses=[t]}}var w=a.find('textarea[name="public-note"]').val();if(w!=null&&w.length>0){if(w.length>255){throw"Notes are restricted to 255 characters in length"}f.note=w}var s=$.trim(a.find('select[name="change"]').val());if(s.length>0){if(s=="new"){var x=MyWallet.generateNewKey();var q=x.getBitcoinAddress();f.change_address=q;f.generated_addresses.push(q.toString())}else{if(s!="any"){try{f.change_address=new Bitcoin.Address(s)}catch(v){throw"Invalid change address: "+v}}}}var n=precisionToSatoshiBN(a.find('input[name="fees"]').val());if(n.compareTo(BigInteger.ZERO)>0){f.fee=n}var p=a.find(".recipient");if(p.length==0){throw"A transaction must have at least one recipient"}var u=p.length;var r=function(){if(u==0){f.error("Nothing to send.");return}if(f.to_addresses.lengthu){f.error("We seem to have more recipients than required. Unknown error");return}f.start()};p.each(function(){try{var z=$(this);var A=z.find('input[name="send-value"]');var L=z.find('input[name="send-to-address"]');var G=z.find('input[name="send-to-email"]');var B=z.find('input[name="send-to-sms"]');var I=0;try{I=precisionToSatoshiBN(A.val());if(I==null||I.compareTo(BigInteger.ZERO)<=0){throw"You must enter a value greater than zero"}}catch(E){if(A.data("optional")==true){--u;return true}else{throw"Invalid send amount"}}if(L.length>0){var C=$.trim(L.val()).replace(/[\u200B-\u200D\uFEFF]/g,"");if(C==null||C.length==0){throw"You must enter a bitcoin address for each recipient"}else{var H=resolveAddress(C);if(j=="shared"){if(!H){throw"Invalid Bitcoin Address"}MyWallet.setLoadingText("Creating Forwarding Address");MyWallet.securePost("forwarder",{action:"create-mix",address:H,shared:true,format:"json"},function(N){try{if(N.destination!=H){throw"Mismatch between requested and returned destination address"}if(N.fee_percent!=MyWallet.getMixerFee()){MyWallet.get_history();throw"The mixer fee may have changed"}f.to_addresses.push({address:new Bitcoin.Address(N.input_address),value:I});r()}catch(M){f.error(M)}},function(M){f.error(M?M.responseText:null)})}else{if(H){f.to_addresses.push({address:new Bitcoin.Address(H),value:I})}else{if(C.length<10){BlockchainAPI.resolve_firstbits(C,function(M){try{f.to_addresses.push({address:new Bitcoin.Address(M),value:I});r()}catch(N){f.error(N)}},function(){f.error("Invalid to address: "+C)});return false}else{f.error("Invalid to address: "+C)}}}}}else{if(B.length>0){var D=$.trim(B.val());if(D.charAt(0)=="0"){D=D.substring(1)}if(D.charAt(0)!="+"){D="+"+z.find('select[name="sms-country-code"]').val()+D}var F=generateNewMiniPrivateKey();var H=F.key.getBitcoinAddress().toString();MyWallet.setAddressTag(H,2);MyWallet.setAddressLabel(H,D+" (Sent Via SMS)");f.generated_addresses.push(H);f.to_addresses.push({address:new Bitcoin.Address(H),value:I});if(f.sms_data){throw"Cannot send to more than one SMS recipient at a time"}f.sms_data={number:D,miniKey:F.miniKey}}else{if(G.length>0){var K=$.trim(G.val());function y(O){var N=O.lastIndexOf("@");var M=O.lastIndexOf(".");return(N0&&O.indexOf("@@")==-1&&M>2&&(O.length-M)>2)}if(y(K)){var J=MyWallet.generateNewKey();var H=J.getBitcoinAddress().toString();MyWallet.setAddressTag(H,2);MyWallet.setAddressLabel(H,K+" (Sent Via Email)");f.generated_addresses.push(H);f.to_addresses.push({address:new Bitcoin.Address(H),value:I});if(f.email_data){throw"Cannot send to more than one email recipient at a time"}f.email_data={email:K,priv:B58.encode(J.priv),amount:I}}else{throw"Invalid Email Address"}}}}}catch(E){console.log(E);f.error(E)}});r()}catch(v){f.error(v)}},function(){f.error()})}catch(h){f.error(h)}return f}function readVarInt(c){var a,b;a=c.splice(0,1)[0];if(a<253){b=[a]}else{if(a==253){b=c.splice(0,2)}else{if(a==254){b=c.splice(0,4)}else{b=c.splice(0,8)}}}return new BigInteger(b)}function readUInt32(a){return new BigInteger(a.splice(0,4).reverse()).intValue()}function signInput(i,c,b,l){var a=l.simpleOutPubKeyHash();var d=new Bitcoin.Address(a).toString();var m=new Bitcoin.ECKey(b);var j;if(m.getBitcoinAddress().toString()==d.toString()){j=false}else{if(m.getBitcoinAddressCompressed().toString()==d.toString()){j=true}else{throw"Private key does not match bitcoin address "+d.toString()+" = "+m.getBitcoinAddress().toString()+" | "+m.getBitcoinAddressCompressed().toString()}}var h=i.hashTransactionForSignature(l,c,SIGHASH_ALL);var g=m.sign(h);var f=Bitcoin.ECDSA.serializeSig(g.r,g.s);f.push(SIGHASH_ALL);if(!IsCanonicalSignature(f)){throw"IsCanonicalSignature returned false"}var k;if(j){k=Bitcoin.Script.createInputScript(f,m.getPubCompressed())}else{k=Bitcoin.Script.createInputScript(f,m.getPub())}if(k==null){throw"Error creating input script"}return k}function formatAddresses(b,f,a){var g="";if(f.length==1){var c=f[0].toString();if(a&&MyWallet.addressExists(c)&&MyWallet.getAddressLabel(c)){g=MyWallet.getAddressLabel(c)}else{if(a&&MyWallet.getAddressBookLabel(c)){g=MyWallet.getAddressBookLabel(c)}else{g=c}}}else{g="Escrow (";for(var d=0;d - "+b+" Required)"}return g}function setReviewTransactionContent(r,u,a){$("#rtc-hash").html(Crypto.util.bytesToHex(u.getHash()));$("#rtc-version").html(u.version);$("#rtc-from").html("");$("#rtc-to").html("");var v=BigInteger.ZERO;var t=BigInteger.ZERO;var n=BigInteger.ZERO;var g="send ";var q=true;var c=BigInteger.ZERO;for(var o=0;o'+formatBTC(k.outpoint.value.toString())+"
    ")}var j=true;for(var o=0;o'+formatBTC(w.toString())+"
    ");v=v.add(w);t=t.subtract(w);if(h.length>1){if(!j){g+=" and "}g+=""+formatBTC(w.toString())+" to "+formatAddresses(l,h,true);q=false;n=n.subtract(w)}else{if(h.length>0){var b=h[0].toString();if(!MyWallet.addressExists(b)||MyWallet.getAddressTag(b)==2){if(w.compareTo(BigInteger.ZERO)==0){continue}if(!j){g+=" and "}if(a&&a=="shared"){g+=""+formatBTC(w.toString())+" Shared"}else{g+=""+formatBTC(w.toString())+" to "+formatAddresses(1,[b],true)}q=false}else{n=n.subtract(w);c=c.add(w)}}}j=false}if(t.compareTo(BigInteger.valueOf(1).multiply(BigInteger.valueOf(satoshi)))>=0){alert("Warning fees are very high for this transaction. Please double check each output!")}if(q==true){g="move "+formatBTC(v.toString())+" between your own bitcoin addresses"}$("#rtc-basic-summary").html(g);$("#rtc-effect").html("-"+formatBTC(n.toString()));$("#rtc-fees").html(formatBTC(t.toString()));$("#rtc-value").html(formatBTC(v.toString()))}function initNewTx(){var b={generated_addresses:[],to_addresses:[],fee:BigInteger.ZERO,extra_private_keys:[],listeners:[],is_cancelled:false,ask_to_send_shared:false,base_fee:BigInteger.valueOf(50000),min_free_output_size:BigInteger.valueOf(1000000),ready_to_send_header:"Transaction Ready to Send.",addListener:function(c){this.listeners.push(c)},invoke:function(c,f,g){for(var d in this.listeners){if(this.listeners[d][c]){this.listeners[d][c].call(this,f,g)}}},start:function(){var c=this;try{c.invoke("on_start");BlockchainAPI.get_unspent(c.from_addresses,function(k){try{if(c.is_cancelled){throw"Transaction Cancelled"}if(k.unspent_outputs==null||k.unspent_outputs.length==0){throw"No Free Outputs To Spend"}c.unspent=[];for(var h=0;h=0){o.selected_outputs=[p.input];A[r]=null;d=[p.addr];x=s.value*s.confirmations;f=s.value;break}else{o.selected_outputs.push(p.input);A[r]=null;d.push(p.addr);x+=s.value*s.confirmations;f=f.add(s.value);if(f.compareTo(k)==0||f.compareTo(k.add(o.min_free_output_size))>=0){break}}}catch(v){MyWallet.makeNotice("info","tx-error",v)}}if(f.compareTo(k)>=0){break}if(w){break}w=true}function j(){o.error("Insufficient funds. Value Needed "+formatBTC(k.toString())+". Available amount "+formatBTC(f.toString()))}var y=f.subtract(k);if(y.compareTo(BigInteger.ZERO)<0){if(o.to_addresses.length==1&&f.compareTo(BigInteger.ZERO)>0){o.insufficient_funds(k,f,function(){if(o.to_addresses[0].value.add(y).compareTo(BigInteger.ZERO)>0){o.to_addresses[0].value=o.to_addresses[0].value.add(y);o.makeTransaction();return}else{j()}},function(){j()})}else{j()}return}if(o.selected_outputs.length==0){o.error("No Available Outputs To Spend.");return}var h=new Bitcoin.Transaction();for(var r=0;r0){if(o.change_address!=null){h.addOutput(o.change_address,u)}else{if(d.length>0){h.addOutput(new Bitcoin.Address(d[Math.floor(Math.random()*d.length)]),u)}else{h.addOutput(new Bitcoin.Address(MyWallet.getPreferredAddress()),u)}}if(u.compareTo(o.min_free_output_size)<0){m=true}}var c=h.serialize(h).length+(114*h.ins.length);x/=c;var g=Math.ceil(parseFloat(c/1024));var z=(!o.fee||o.fee.compareTo(o.base_fee)<0);if(z&&(m||g>1)){o.fee=o.base_fee.multiply(BigInteger.valueOf(g+1));o.makeTransaction()}else{if(z&&(x<77600000||t||q)){o.ask_for_fee(function(){o.fee=o.base_fee.multiply(BigInteger.valueOf(g+1));o.makeTransaction()},function(){o.tx=h;o.determinePrivateKeys(function(){o.signInputs()})})}else{o.tx=h;o.determinePrivateKeys(function(){o.signInputs()})}}}catch(v){this.error(v)}},ask_for_fee:function(d,c){d()},insufficient_funds:function(d,c,g,f){f()},determinePrivateKeys:function(l){var c=this;try{if(c.is_cancelled){throw"Transaction Cancelled"}var j={};for(var f in c.selected_outputs){var d=c.selected_outputs[f].script;if(d.priv_to_use==null){var h=d.simpleOutPubKeyHash();var g=new Bitcoin.Address(h).toString();if(j[g]){d.priv_to_use=j[g]}else{if(c.extra_private_keys[g]){d.priv_to_use=Bitcoin.Base58.decode(c.extra_private_keys[g])}else{if(MyWallet.addressExists(g)&&!MyWallet.isWatchOnly(g)){try{d.priv_to_use=MyWallet.decodePK(MyWallet.getPrivateKey(g))}catch(k){console.log(k)}}}}if(d.priv_to_use==null){c.ask_for_private_key(function(i){try{if(g==i.getBitcoinAddress().toString()||g==i.getBitcoinAddressCompressed().toString()){c.extra_private_keys[g]=Bitcoin.Base58.encode(i.priv);c.determinePrivateKeys(l)}else{throw"The private key you entered does not match the bitcoin address"}}catch(m){c.error(m)}},function(i){c.from_addresses=$.grep(c.from_addresses,function(m){return m!=g});c.makeTransaction()},g);return false}else{j[g]=d.priv_to_use}}}l()}catch(k){c.error(k)}},signWebWorker:function(m,l){var c=false;var j=function(i){if(!c){l(i);c=true}};try{var o=this;var g=0;var n=Math.min(3,o.tx.ins.length);o.worker=[];for(var d=0;d0){c.has_saved_addresses=true;MyWallet.backupWallet("update",function(){c.pushTx()},function(){c.error("Error Backing Up Wallet. Cannot Save Newly Generated Keys.")})}else{c.pushTx()}},pushTx:function(){var c=this;if(c.is_cancelled){return}c.has_pushed=true;BlockchainAPI.push_tx(c.tx,c.note,function(d){c.success(d)},function(d){c.error(d)})},ask_for_private_key:function(d,c){c("Cannot ask for private key without user interaction disabled")},ask_to_send:function(){this.send()},error:function(c){if(this.is_cancelled){return}this.is_cancelled=true;if(!this.has_pushed&&this.generated_addresses.length>0){for(var d in this.generated_addresses){MyWallet.deleteAddress(this.generated_addresses[d])}if(this.has_saved_addresses){MyWallet.backupWallet()}}this.invoke("on_error",c)},success:function(){this.invoke("on_success")}};var a={on_error:function(c){if(c){MyWallet.makeNotice("error","tx-error",c)}$(".send-value,.send-value-usd,.send").removeAttr("disabled")},on_success:function(c){$(".send-value,.send-value-usd,.send").removeAttr("disabled")},on_start:function(c){$(".send-value,.send-value-usd,.send").prop("disabled",true)},on_begin_signing:function(){this.start=new Date().getTime()},on_finish_signing:function(){console.log("Took "+(new Date().getTime()-this.start)+"ms")}};b.addListener(a);return b}; \ No newline at end of file +function exceptionToString(b){var a="";for(var c in b){a+="property: "+c+" value: ["+b[c]+"]\n"}return"toString(): value: ["+b.toString()+"]"}function generateNewMiniPrivateKey(){while(true){var c=new Bitcoin.ECKey(false);var b="S"+Bitcoin.Base58.encode(c.priv).substr(0,21);var f=Crypto.SHA256(b+"?",{asBytes:true});if(f[0]==0){var a=Crypto.SHA256(b,{asBytes:true});var d=new Bitcoin.ECKey(a);if(MyWallet.addPrivateKey(d)){return{key:d,miniKey:b}}}}}function IsCanonicalSignature(c){if(c.length<9){throw"Non-canonical signature: too short"}if(c.length>73){throw"Non-canonical signature: too long"}var b=c[c.length-1]&(~(SIGHASH_ANYONECANPAY));if(bSIGHASH_SINGLE){throw"Non-canonical signature: unknown hashtype byte"}if(c[0]!=48){throw"Non-canonical signature: wrong type"}if(c[1]!=c.length-3){throw"Non-canonical signature: wrong length marker"}var a=c[3];if(5+a>=c.length){throw"Non-canonical signature: S length misplaced"}var f=c[5+a];if(a+f+7!=c.length){throw"Non-canonical signature: R+S length mismatch"}var d=4;if(c[d-2]!=2){throw"Non-canonical signature: R value type mismatch"}if(a==0){throw"Non-canonical signature: R length is zero"}if(c[d+0]&128){throw"Non-canonical signature: R value negative"}if(a>1&&(c[d+0]==0)&&!(c[d+1]&128)){throw"Non-canonical signature: R value excessively padded"}var d=6+a;if(c[d-2]!=2){throw"Non-canonical signature: S value type mismatch"}if(f==0){throw"Non-canonical signature: S length is zero"}if(c[d+0]&128){throw"Non-canonical signature: S value negative"}if(f>1&&(c[d+0]==0)&&!(c[d+1]&128)){throw"Non-canonical signature: S value excessively padded"}return true}try{if(typeof window=="undefined"||!window){self.addEventListener("message",function(g){var f=g.data;switch(f.cmd){case"seed":var b=Crypto.util.bytesToWords(Crypto.util.hexToBytes(f.seed));for(var d in b){rng_seed_int(b[d])}break;case"load_resource":importScripts(f.path);break;case"sign_input":try{var a=new Bitcoin.Transaction(f.tx);var c=new Bitcoin.Script(f.connected_script);var h=signInput(a,f.outputN,f.priv_to_use,c);if(h){self.postMessage({cmd:"on_sign",script:h,outputN:f.outputN})}else{throw"Unknown Error Signing Script "+f.outputN}}catch(g){self.postMessage({cmd:"on_error",e:exceptionToString(g)})}break;default:self.postMessage({cmd:"on_error",e:"Unknown Command"})}},false)}}catch(e){}function showPrivateKeyModal(g,a,h){var c=$("#private-key-modal");c.modal({keyboard:true,backdrop:"static",show:true});c.center();c.find(".address").text(h);var d=null;var b=null;var f=c.find('input[name="key"]');f.val("");c.find(".qrcodeicon span").click(function(){c.modal("hide");MyWallet.scanQRCode(function(i){console.log("Scanned "+i);try{d=MyWallet.privateKeyStringToKey(i,MyWallet.detectPrivateKeyFormat(i));if(d==null){b="Error decoding private key"}}catch(j){b="Error decoding private key "+j}c.modal("show");f.val(i)},function(i){c.modal("show");MyWallet.makeNotice("error","misc-error",i)})});c.find(".btn.btn-primary").unbind().click(function(){var i=$.trim(f.val());try{if(i.length==0){throw"You must enter a private key to import"}d=MyWallet.privateKeyStringToKey(i,MyWallet.detectPrivateKeyFormat(i));if(d==null){throw"Could not decode private key"}}catch(j){b="Error importing private key "+j}c.modal("hide");if(d){g(d)}else{a(b)}});c.find(".btn.btn-secondary").unbind().click(function(){c.modal("hide");a("User Cancelled")})}function resolveAddress(a){a=$.trim(a);try{return new Bitcoin.Address(a).toString()}catch(f){}a=a.toLowerCase();var h=MyWallet.getAddressBook();for(var c in h){var d=MyWallet.getAddressBookLabel(c);if(d.toLowerCase()==a){return $.trim(c)}}var g=MyWallet.getAllAddresses();for(var b=0;bprecisionFromBTC(10)){if(j=="email"||j=="sms"){throw"Cannot Send More Than 10 BTC via email or sms"}else{if(j=="quick"){j="custom";d=false}}}else{if(j=="shared"&&gprecisionFromBTC(250)){throw"The Maximum Amount You Can Send Shared is "+formatPrecision(precisionFromBTC(250))}}}if(MyWallet.getMixerFee()<0&&(j=="custom"||j=="quick")&&g>=precisionFromBTC(5)&&getCookie("shared-never-ask")!="true"&&!c){var i=getCookie("shared-accepted-time");if(!i||parseInt(i)');o.find(".btn.btn-secondary").unbind().click(function(){n.cancel();o.modal("hide")});o.find(".btn.btn-primary").unbind().click(function(){o.modal("hide");try{MyWallet.securePost("send-via",{type:"email",to:n.email_data.email,priv:n.email_data.priv,hash:Crypto.util.bytesToHex(n.tx.getHash().reverse())},function(u){n.send()},function(u){n.error(u?u.responseText:null)})}catch(t){n.error(t)}})}catch(r){o.modal("hide");n.error(r)}},function(q){o.modal("hide");n.error("Error Getting Account Data")})}catch(p){o.modal("hide");n.error(p)}}}}}}f.insufficient_funds=function(p,n,s,r){var o=this;if(o.modal){o.modal.modal("hide")}var q=$("#insufficient-funds");q.find(".amount-required").text(formatBTC(p));q.find(".amount-available").text(formatBTC(n));q.modal({keyboard:false,backdrop:"static",show:true});q.find(".btn.btn-primary").unbind().click(function(){q.modal("hide");s()});q.find(".btn.btn-secondary").unbind().click(function(){q.modal("hide");r()});q.unbind().on("hidden",function(){if(o.modal){o.modal.modal("show")}})};f.ask_for_private_key=function(p,o,q){var n=this;if(n.modal){n.modal.modal("hide")}showPrivateKeyModal(function(r){if(n.modal){n.modal.modal("show")}p(r)},function(r){if(n.modal){n.modal.modal("show")}o(r)},q)};f.type=j;if(MyWallet.getFeePolicy()==1){f.base_fee=BigInteger.valueOf(100000);f.fee=BigInteger.valueOf(100000)}else{if(MyWallet.getFeePolicy()==-1){f.base_fee=BigInteger.valueOf(10000);f.ask_for_fee=function(o,n){n()}}}MyWallet.getSecondPassword(function(){try{var o=a.find('select[name="from"]');var t=o.val();if(t==null||t=="any"){f.from_addresses=MyWallet.getActiveAddresses()}else{if(o.attr("multiple")=="multiple"){f.from_addresses=t}else{f.from_addresses=[t]}}var w=a.find('textarea[name="public-note"]').val();if(w!=null&&w.length>0){if(w.length>255){throw"Notes are restricted to 255 characters in length"}f.note=w}var s=$.trim(a.find('select[name="change"]').val());if(s.length>0){if(s=="new"){var x=MyWallet.generateNewKey();var q=x.getBitcoinAddress();f.change_address=q;f.generated_addresses.push(q.toString())}else{if(s!="any"){try{f.change_address=new Bitcoin.Address(s)}catch(v){throw"Invalid change address: "+v}}}}var n=precisionToSatoshiBN(a.find('input[name="fees"]').val());if(n.compareTo(BigInteger.ZERO)>0){f.fee=n}var p=a.find(".recipient");if(p.length==0){throw"A transaction must have at least one recipient"}var u=p.length;var r=function(){if(u==0){f.error("Nothing to send.");return}if(f.to_addresses.lengthu){f.error("We seem to have more recipients than required. Unknown error");return}f.start()};p.each(function(){try{var z=$(this);var A=z.find('input[name="send-value"]');var L=z.find('input[name="send-to-address"]');var G=z.find('input[name="send-to-email"]');var B=z.find('input[name="send-to-sms"]');var I=0;try{I=precisionToSatoshiBN(A.val());if(I==null||I.compareTo(BigInteger.ZERO)<=0){throw"You must enter a value greater than zero"}}catch(E){if(A.data("optional")==true){--u;return true}else{throw"Invalid send amount"}}if(L.length>0){var C=$.trim(L.val()).replace(/[\u200B-\u200D\uFEFF]/g,"");if(C==null||C.length==0){throw"You must enter a bitcoin address for each recipient"}else{var H=resolveAddress(C);if(j=="shared"){if(!H){throw"Invalid Bitcoin Address"}MyWallet.setLoadingText("Creating Forwarding Address");MyWallet.securePost("forwarder",{action:"create-mix",address:H,shared:true,format:"json"},function(N){try{if(N.destination!=H){throw"Mismatch between requested and returned destination address"}if(N.fee_percent!=MyWallet.getMixerFee()){MyWallet.get_history();throw"The mixer fee may have changed"}f.to_addresses.push({address:new Bitcoin.Address(N.input_address),value:I});r()}catch(M){f.error(M)}},function(M){f.error(M?M.responseText:null)})}else{if(H){f.to_addresses.push({address:new Bitcoin.Address(H),value:I})}else{if(C.length<10){BlockchainAPI.resolve_firstbits(C,function(M){try{f.to_addresses.push({address:new Bitcoin.Address(M),value:I});r()}catch(N){f.error(N)}},function(){f.error("Invalid to address: "+C)});return false}else{f.error("Invalid to address: "+C)}}}}}else{if(B.length>0){var D=$.trim(B.val());if(D.charAt(0)=="0"){D=D.substring(1)}if(D.charAt(0)!="+"){D="+"+z.find('select[name="sms-country-code"]').val()+D}var F=generateNewMiniPrivateKey();var H=F.key.getBitcoinAddress().toString();MyWallet.setAddressTag(H,2);MyWallet.setAddressLabel(H,D+" (Sent Via SMS)");f.generated_addresses.push(H);f.to_addresses.push({address:new Bitcoin.Address(H),value:I});if(f.sms_data){throw"Cannot send to more than one SMS recipient at a time"}f.sms_data={number:D,miniKey:F.miniKey}}else{if(G.length>0){var K=$.trim(G.val());function y(O){var N=O.lastIndexOf("@");var M=O.lastIndexOf(".");return(N0&&O.indexOf("@@")==-1&&M>2&&(O.length-M)>2)}if(y(K)){var J=MyWallet.generateNewKey();var H=J.getBitcoinAddress().toString();MyWallet.setAddressTag(H,2);MyWallet.setAddressLabel(H,K+" (Sent Via Email)");f.generated_addresses.push(H);f.to_addresses.push({address:new Bitcoin.Address(H),value:I});if(f.email_data){throw"Cannot send to more than one email recipient at a time"}f.email_data={email:K,priv:B58.encode(J.priv),amount:I}}else{throw"Invalid Email Address"}}}}}catch(E){console.log(E);f.error(E)}});r()}catch(v){f.error(v)}},function(){f.error()})}catch(h){f.error(h)}return f}function readVarInt(c){var a,b;a=c.splice(0,1)[0];if(a<253){b=[a]}else{if(a==253){b=c.splice(0,2)}else{if(a==254){b=c.splice(0,4)}else{b=c.splice(0,8)}}}return new BigInteger(b)}function readUInt32(a){return new BigInteger(a.splice(0,4).reverse()).intValue()}function signInput(i,c,b,l){var a=l.simpleOutPubKeyHash();var d=new Bitcoin.Address(a).toString();var m=new Bitcoin.ECKey(b);var j;if(m.getBitcoinAddress().toString()==d.toString()){j=false}else{if(m.getBitcoinAddressCompressed().toString()==d.toString()){j=true}else{throw"Private key does not match bitcoin address "+d.toString()+" = "+m.getBitcoinAddress().toString()+" | "+m.getBitcoinAddressCompressed().toString()}}var h=i.hashTransactionForSignature(l,c,SIGHASH_ALL);var g=m.sign(h);var f=Bitcoin.ECDSA.serializeSig(g.r,g.s);f.push(SIGHASH_ALL);if(!IsCanonicalSignature(f)){throw"IsCanonicalSignature returned false"}var k;if(j){k=Bitcoin.Script.createInputScript(f,m.getPubCompressed())}else{k=Bitcoin.Script.createInputScript(f,m.getPub())}if(k==null){throw"Error creating input script"}return k}function formatAddresses(b,f,a){var g="";if(f.length==1){var c=f[0].toString();if(a&&MyWallet.addressExists(c)&&MyWallet.getAddressLabel(c)){g=MyWallet.getAddressLabel(c)}else{if(a&&MyWallet.getAddressBookLabel(c)){g=MyWallet.getAddressBookLabel(c)}else{g=c}}}else{g="Escrow (";for(var d=0;d - "+b+" Required)"}return g}function setReviewTransactionContent(r,u,a){$("#rtc-hash").html(Crypto.util.bytesToHex(u.getHash()));$("#rtc-version").html(u.version);$("#rtc-from").html("");$("#rtc-to").html("");var v=BigInteger.ZERO;var t=BigInteger.ZERO;var n=BigInteger.ZERO;var g="send ";var q=true;var c=BigInteger.ZERO;for(var o=0;o'+formatBTC(k.outpoint.value.toString())+"
    ")}var j=true;for(var o=0;o'+formatBTC(w.toString())+"
    ");v=v.add(w);t=t.subtract(w);if(h.length>1){if(!j){g+=" and "}g+=""+formatBTC(w.toString())+" to "+formatAddresses(l,h,true);q=false;n=n.subtract(w)}else{if(h.length>0){var b=h[0].toString();if(!MyWallet.addressExists(b)||MyWallet.getAddressTag(b)==2){if(w.compareTo(BigInteger.ZERO)==0){continue}if(!j){g+=" and "}if(a&&a=="shared"){g+=""+formatBTC(w.toString())+" Shared"}else{g+=""+formatBTC(w.toString())+" to "+formatAddresses(1,[b],true)}q=false}else{n=n.subtract(w);c=c.add(w)}}}j=false}if(t.compareTo(BigInteger.valueOf(1).multiply(BigInteger.valueOf(satoshi)))>=0){alert("Warning fees are very high for this transaction. Please double check each output!")}if(q==true){g="move "+formatBTC(v.toString())+" between your own bitcoin addresses"}$("#rtc-basic-summary").html(g);$("#rtc-effect").html("-"+formatBTC(n.toString()));$("#rtc-fees").html(formatBTC(t.toString()));$("#rtc-value").html(formatBTC(v.toString()))}function initNewTx(){var b={generated_addresses:[],to_addresses:[],fee:BigInteger.ZERO,extra_private_keys:{},listeners:[],is_cancelled:false,ask_to_send_shared:false,base_fee:BigInteger.valueOf(50000),min_free_output_size:BigInteger.valueOf(1000000),allow_adjust:true,ready_to_send_header:"Transaction Ready to Send.",addListener:function(c){this.listeners.push(c)},invoke:function(c,f,g){for(var d in this.listeners){if(this.listeners[d][c]){this.listeners[d][c].call(this,f,g)}}},start:function(){var c=this;try{c.invoke("on_start");BlockchainAPI.get_unspent(c.from_addresses,function(k){try{if(c.is_cancelled){throw"Transaction Cancelled"}if(k.unspent_outputs==null||k.unspent_outputs.length==0){throw"No Free Outputs To Spend"}c.unspent=[];for(var h=0;h=0){o.selected_outputs=[p.input];A[r]=null;d=[p.addr];x=s.value*s.confirmations;f=s.value;break}else{o.selected_outputs.push(p.input);A[r]=null;d.push(p.addr);x+=s.value*s.confirmations;f=f.add(s.value);if(f.compareTo(k)==0||f.compareTo(k.add(o.min_free_output_size))>=0){break}}}catch(v){MyWallet.makeNotice("info","tx-error",v)}}if(f.compareTo(k)>=0){break}if(w){break}w=true}function j(){o.error("Insufficient funds. Value Needed "+formatBTC(k.toString())+". Available amount "+formatBTC(f.toString()))}var y=f.subtract(k);if(y.compareTo(BigInteger.ZERO)<0){if(o.to_addresses.length==1&&f.compareTo(BigInteger.ZERO)>0&&o.allow_adjust){o.insufficient_funds(k,f,function(){var i=o.to_addresses[0].value.add(y);if(i.compareTo(BigInteger.ZERO)>0&&i.compareTo(k)<=0){o.to_addresses[0].value=i;o.makeTransaction();return}else{j()}},function(){j()})}else{j()}return}if(o.selected_outputs.length==0){o.error("No Available Outputs To Spend.");return}var h=new Bitcoin.Transaction();for(var r=0;r0){if(o.change_address!=null){h.addOutput(o.change_address,u)}else{if(d.length>0){h.addOutput(new Bitcoin.Address(d[Math.floor(Math.random()*d.length)]),u)}else{h.addOutput(new Bitcoin.Address(MyWallet.getPreferredAddress()),u)}}if(u.compareTo(o.min_free_output_size)<0){m=true}}var c=h.serialize(h).length+(114*h.ins.length);x/=c;var g=Math.max(1,Math.ceil(parseFloat(c/1024)));var z=(!o.fee||o.fee.compareTo(o.base_fee)<0);if(z&&(m||g>1)){o.fee=o.base_fee.multiply(BigInteger.valueOf(g));o.makeTransaction()}else{if(z&&(x<77600000||t||q)){o.ask_for_fee(function(){o.fee=o.base_fee.multiply(BigInteger.valueOf(g));o.makeTransaction()},function(){o.tx=h;o.determinePrivateKeys(function(){o.signInputs()})})}else{o.tx=h;o.determinePrivateKeys(function(){o.signInputs()})}}}catch(v){this.error(v)}},ask_for_fee:function(d,c){d()},insufficient_funds:function(d,c,g,f){f()},determinePrivateKeys:function(l){var c=this;try{if(c.is_cancelled){throw"Transaction Cancelled"}var j={};for(var f in c.selected_outputs){var d=c.selected_outputs[f].script;if(d.priv_to_use==null){var h=d.simpleOutPubKeyHash();var g=new Bitcoin.Address(h).toString();if(j[g]){d.priv_to_use=j[g]}else{if(c.extra_private_keys[g]){d.priv_to_use=Bitcoin.Base58.decode(c.extra_private_keys[g])}else{if(MyWallet.addressExists(g)&&!MyWallet.isWatchOnly(g)){try{d.priv_to_use=MyWallet.decodePK(MyWallet.getPrivateKey(g))}catch(k){console.log(k)}}}}if(d.priv_to_use==null){c.ask_for_private_key(function(i){try{if(g==i.getBitcoinAddress().toString()||g==i.getBitcoinAddressCompressed().toString()){c.extra_private_keys[g]=Bitcoin.Base58.encode(i.priv);c.determinePrivateKeys(l)}else{throw"The private key you entered does not match the bitcoin address"}}catch(m){c.error(m)}},function(i){c.from_addresses=$.grep(c.from_addresses,function(m){return m!=g});c.makeTransaction()},g);return false}else{j[g]=d.priv_to_use}}}l()}catch(k){c.error(k)}},signWebWorker:function(o,n){var c=false;var l=function(i){if(!c){n(i);c=true}};try{var q=this;var j=0;var p=Math.min(3,q.tx.ins.length);var d=new SecureRandom();q.worker=[];for(var f=0;f0){c.has_saved_addresses=true;MyWallet.backupWallet("update",function(){c.pushTx()},function(){c.error("Error Backing Up Wallet. Cannot Save Newly Generated Keys.")})}else{c.pushTx()}},pushTx:function(){var c=this;if(c.is_cancelled){return}c.has_pushed=true;BlockchainAPI.push_tx(c.tx,c.note,function(d){c.success(d)},function(d){c.error(d)})},ask_for_private_key:function(d,c){c("Cannot ask for private key without user interaction disabled")},ask_to_send:function(){this.send()},error:function(c){if(this.is_cancelled){return}this.is_cancelled=true;if(!this.has_pushed&&this.generated_addresses.length>0){for(var d in this.generated_addresses){MyWallet.deleteAddress(this.generated_addresses[d])}if(this.has_saved_addresses){MyWallet.backupWallet()}}this.invoke("on_error",c)},success:function(){this.invoke("on_success")}};var a={on_error:function(c){console.log(c);if(c){MyWallet.makeNotice("error","tx-error",c)}$(".send-value,.send-value-usd,.send").removeAttr("disabled")},on_success:function(c){$(".send-value,.send-value-usd,.send").removeAttr("disabled")},on_start:function(c){$(".send-value,.send-value-usd,.send").prop("disabled",true)},on_begin_signing:function(){this.start=new Date().getTime()},on_finish_signing:function(){console.log("Took "+(new Date().getTime()-this.start)+"ms")}};b.addListener(a);return b}; \ No newline at end of file diff --git a/extension/Resources/wallet/wallet.min.js b/extension/Resources/wallet/wallet.min.js index 1a92e21..4db4986 100644 --- a/extension/Resources/wallet/wallet.min.js +++ b/extension/Resources/wallet/wallet.min.js @@ -1 +1 @@ -function precisionToSatoshiBN(a){return Bitcoin.Util.parseValue(a).divide(BigInteger.valueOf(Math.pow(10,sShift(symbol_btc)).toString()))}function precisionToBTC(a){return Bitcoin.Util.formatValue(precisionToSatoshiBN(a))}function precisionFromBTC(a){return Bitcoin.Util.formatValue(Bitcoin.Util.parseValue(a).multiply(BigInteger.valueOf(Math.pow(10,sShift(symbol_btc)))))}function formatPrecision(a){return formatBTC(precisionToSatoshiBN(a).toString())}var MyWallet=new function(){var h=this;this.skip_init=false;var D="abcaa314-6f67-6705-b384-5d47fbe9d7cc";var af;var M;var j;var aC;var ah;var w;var d;var at=0;var Q=0;var an=0;var K=0;var aM=0;var aA;var g={};var E=[];var F=false;var aq=0;var am=0;var aw=1000;var I={};var au;var aj;var x=0.5;var ac=10;var b={};var aH=0;var q;var S;var V=[];var B;var N=60000;var A=false;var W;var al=false;var s={pbkdf2_iterations:10,fee_policy:0,html5_notifications:false,logout_time:600000,tx_display:0,always_keep_local_backup:false};this.setEncryptedWalletData=function(aO){if(!aO||aO.length==0){af=null;au=null;return}af=aO;au=ad();try{if(aH==0||s.always_keep_local_backup){localStorage.setItem("payload",af)}}catch(aP){console.log(aP)}};this.setRealAuthType=function(aO){this.real_auth_type=aO};this.addEventListener=function(aO){V.push(aO)};this.getLogoutTime=function(){return s.logout_time};this.getDefaultPbkdf2Iterations=function(){return ac};this.getPbkdf2Iterations=function(){return s.pbkdf2_iterations};this.setLogoutTime=function(aO){s.logout_time=aO;clearInterval(S);S=setTimeout(h.logout,h.getLogoutTime())};this.getDoubleEncryption=function(){return F};this.getEncryptedWalletData=function(){return af};this.getFeePolicy=function(){return s.fee_policy};this.setFeePolicy=function(aO){s.fee_policy=parseInt(aO)};this.setAlwaysKeepLocalBackup=function(aO){s.always_keep_local_backup=aO};this.getAlwaysKeepLocalBackup=function(){return s.always_keep_local_backup};this.getGuid=function(){return M};this.getHTML5Notifications=function(){return s.html5_notifications};this.setHTML5Notifications=function(aO){s.html5_notifications=aO};this.getTransactions=function(){return E};this.addressExists=function(aO){return I[aO]!=null};this.getAddressTag=function(aO){return I[aO].tag};this.setAddressTag=function(aP,aO){I[aP].tag=aO};this.getAddressBook=function(){return g};this.getAddressLabel=function(aO){return I[aO].label};this.setAddressLabel=function(aO,aP){I[aO].label=aP};this.setAddressBalance=function(aO,aP){I[aO].balance=aP};this.getAddressBookLabel=function(aO){return g[aO]};this.isWatchOnly=function(aO){return I[aO].priv==null};this.getAddressBalance=function(aO){return I[aO].balance};this.getMixerFee=function(){return x};this.deleteAddress=function(aO){delete I[aO]};this.addAddressBookEntry=function(aP,aO){g[aP]=aO};this.getPrivateKey=function(aO){return I[aO].priv};this.setLabel=function(aO,aP){I[aO].label=aP;ae();c()};this.securePost=function(aP,aQ,aR,aO){var aS=jQuery.extend({},aQ);if(d==null||d.length==0||d.length!=36){throw"Shared key is invalid"}aS.sharedKey=d;aS.guid=M;aS.format=aQ.format?aQ.format:"plain";$.ajax({dataType:aQ.format?aQ.format:"text",type:"POST",url:root+aP,data:aS,success:function(aT){aR(aT)},error:function(aT){aO(aT)}})};this.isCorrectMainPassword=function(aO){return aC==aO};function aa(aP,aR){var aO=Crypto.SHA256(aP,{asBytes:true});for(var aQ=1;aQ-1){if(webkitNotifications.checkPermission()==0){webkitNotifications.createNotification(a2.iconUrl,a2.title,a2.body).show()}}else{if(window.Notification){if(Notification.permissionLevel()=="granted"){new Notification(a2.title,a2).show()}}}}catch(a3){}};try{aS({title:a1>0?"Payment Received":"Payment Sent",body:"Transaction Value "+formatBTC(a1),iconUrl:resource+"cube48.png"})}catch(aW){console.log(aW)}}aU.result=a1;at+=a1;K++;aU.setConfirmations(0);playSound("beep");if(am==0&&aq==0){E.unshift(aU);var aY=false;if(E.length>50){E.pop();aY=true}}var aQ=T();if("my-transactions"==aQ){if(am==0&&aq==0){$("#no-transactions").hide();if(s.tx_display==0){var aP=$("#transactions-compact").show();aJ($(C(aU,I,g)),aU).prependTo(aP.find("tbody")).find("div").hide().slideDown("slow");if(aY){aP.find("tbody tr:last-child").remove()}}else{var aP=$("#transactions-detailed").show();aP.prepend(aU.getHTML(I,g));if(aY){aP.find("div:last-child").remove()}setupSymbolToggle()}}}else{c()}}else{if(aT.op=="block"){for(var aR=0;aR');aO.text(""+aR);if($("#"+aS).length>0){aO.attr("id",aS);return}$("#notices").append(aO).hide().fadeIn(200);if(aQ>0){(function(){var aT=aO;setTimeout(function(){aT.fadeOut(250,function(){$(this).remove()})},aQ)})()}};this.pkBytesToSipa=function(aO,aS){var aP=new Bitcoin.ECKey(aO);while(aO.length<32){aO.unshift(0)}aO.unshift(128);if(aP.getBitcoinAddress().toString()==aS){}else{if(aP.getBitcoinAddressCompressed().toString()==aS){aO.push(1)}else{throw"Private Key does not match bitcoin address"+aS}}var aQ=Crypto.SHA256(Crypto.SHA256(aO,{asBytes:true}),{asBytes:true});aO=aO.concat(aQ.slice(0,4));var aR=B58.encode(aO);return aR};function az(aO){return aO}function ap(aO){return h.decryptPK(aO)}function Y(aO){var aP=h.decodePK(aO);return Crypto.util.bytesToBase64(aP)}function k(aO){var aP=h.decodePK(aO);return Crypto.util.bytesToHex(aP)}this.base58ToSipa=function(aO,aP){return this.pkBytesToSipa(h.decodePK(aO),aP)};this.makeWalletJSON=function(aO){return h.makeCustomWalletJSON(aO,M,d)};this.makeCustomWalletJSON=function(aS,aP,aU){var aR=az;if(aS=="base64"){aR=Y}else{if(aS=="hex"){aR=k}else{if(aS=="sipa"){aR=h.base58ToSipa}else{if(aS=="base58"){aR=ap}}}}var aO='{\n "guid" : "'+aP+'",\n "sharedKey" : "'+aU+'",\n';if(F&&w!=null&&aR==az){aO+=' "double_encryption" : '+F+',\n "dpasswordhash" : "'+w+'",\n'}if(s){aO+=' "options" : '+JSON.stringify(s)+",\n"}aO+=' "keys" : [\n';for(var aQ in I){var aT=I[aQ];aO+=' {"addr" : "'+aT.addr+'"';if(aT.priv!=null){aO+=',\n "priv" : "'+aR(aT.priv,aT.addr)+'"'}if(aT.tag==2){aO+=',\n "tag" : '+aT.tag}if(aT.label!=null){aO+=',\n "label" : "'+aT.label+'"'}aO+="},\n";atLeastOne=true}if(atLeastOne){aO=aO.substring(0,aO.length-2)}aO+="\n ]";if(ay(g)>0){aO+=',\n "address_book" : [\n';for(var aQ in g){aO+=' {"addr" : "'+aQ+'",\n';aO+=' "label" : "'+g[aQ]+'"},\n'}aO=aO.substring(0,aO.length-2);aO+="\n ]"}if(ay(b)>0){aO+=',\n "tx_notes" : '+JSON.stringify(b)}aO+="\n}";return aO};this.get_history=function(aP,aO){BlockchainAPI.get_history(function(aQ){H(aQ,false);c();if(aP){aP()}},function(){if(aO){aO()}},am,aq)};this.deleteAddressBook=function(aO){delete g[aO];ae();$("#send-coins").find(".tab-pane").trigger("show",true)};function u(aO){$("#send-coins").find(".tab-pane.active").trigger("show",aO);if(aO){BlockchainAPI.get_ticker();$(".send").prop("disabled",false)}}function l(aO,aP,aT){var aS=aO.val();aO.empty();for(var aR in I){var aU=I[aR];if(!aU||aU.tag==2){continue}var aQ=aU.label;if(!aQ){aQ=aU.addr.substring(0,15)+"..."}if(aP||aU.balance>0){aO.prepend('")}}aO.prepend('');if(!aT&&aS){aO.val(aS)}}function r(aQ,aR){l(aQ.find('select[name="from"]'),false,aR);l(aQ.find('select[name="change"]'),true,aR);aQ.find('select[name="change"]').prepend('');aQ.find(".local-symbol").text(symbol_local.symbol);aQ.find(".btc-symbol").text(symbol_btc.symbol);if(aR){aQ.find("input").val("");aQ.find(".send-value-usd").text(formatSymbol(0,symbol_local)).val("");aQ.find(".amount-needed").text(0)}var aP=aQ.find(".recipient-container");if(aR){var aT=aP.find(".recipient:first-child").clone();aP.empty().append(aT)}function aO(){var aU=BigInteger.ZERO;aQ.find('input[name="send-value"]').each(function(){aU=aU.add(precisionToSatoshiBN($(this).val()))});return aU}function aS(aU){aU.find('input[name="send-to-address"]').val("").typeahead({source:av()}).next().click(function(){var aV=$(this).prev();h.scanQRCode(function(aW){console.log(aW);try{new Bitcoin.Address(aW);aV.val(aW)}catch(aX){loadScript("wallet/jsuri-1.1.1",function(){try{var aY=new Uri(aW);aV.val(aY.host());aU.find('input[name="send-value"]').val(aY.getQueryParamValue("amount"))}catch(aZ){h.makeNotice("error","error","Invalid Bitcoin Address or URI")}},function(){h.makeNotice("error","error","Invalid Bitcoin Address or URI")})}},function(aW){h.makeNotice("error","misc-error",aW)})});aU.find('input[name="send-value"]').val("").bind("keyup change",function(aV){if(aV.keyCode=="9"){return}aQ.find(".amount-needed").text(formatBTC(aO().toString()));aU.find(".send-value-usd").val(convert($(this).val()*symbol_btc.conversion,symbol_local.conversion)).text(formatSymbol($(this).val()*symbol_btc.conversion,symbol_local))});aU.find(".send-value-usd").val("").text(formatSymbol(0,symbol_local)).bind("keyup change",function(aV){if(aV.keyCode=="9"){return}aU.find('input[name="send-value"]').val(formatSatoshi(parseFloat($(this).val())*symbol_local.conversion,sShift(symbol_btc),true))})}aP.find(".recipient").each(function(){aS($(this))});aQ.find(".remove-recipient").unbind().click(function(){var aU=aP.find(".recipient").length;if(aU>1){if(aU==2){$(this).hide(200)}aP.find(".recipient:last-child").remove()}});aQ.find(".add-recipient").unbind().click(function(){var aU=aP.find(".recipient:first-child").clone();aU.appendTo(aP);aS(aU);aQ.find(".remove-recipient").show(200)})}this.getAllAddresses=function(){var aP=[];for(var aO in I){aP.push(aO)}return aP};this.getPreferredAddress=function(){var aP=null;for(var aO in I){var aQ=I[aO];if(aP==null){aP=aQ}if(aQ.priv!=null){if(aP==null){aP=aQ}if(aQ.tag==null||aQ.tag==0){aP=aQ;break}}}return aP.addr};function aL(){console.log("backupInstructionsModal");var aO=$("#restore-backup-modal");aO.modal({keyboard:true,backdrop:"static",show:true});aO.find(".btn.btn-secondary").unbind().click(function(){aO.modal("hide")})}this.scanQRCode=function(aQ,aO){var aP=$("#qr-code-reader-modal");aP.modal({keyboard:false,backdrop:"static",show:true});loadScript("wallet/qr.code.reader",function(){QRCodeReader.init(aP,function(aR){aP.modal("hide");aQ(aR)},function(aR){aP.modal("hide");aO(aR)})},aO);aP.find(".btn.btn-secondary").unbind().click(function(){QRCodeReader.stop();aP.modal("hide");aO()})};this.getActiveAddresses=function(){var aQ=[];for(var aO in I){var aP=I[aO];if(aP.tag!=2){aQ.push(aP.addr)}}return aQ};this.getArchivedAddresses=function(){var aQ=[];for(var aO in I){var aP=I[aO];if(aP.tag==2){aQ.push(aP.addr)}}return aQ};function ar(aR){if(aR!=null){aA=aR;for(var aP in E){var aO=E[aP];if(aO.blockHeight!=null&&aO.blockHeight>0){var aQ=aA.height-aO.blockHeight+1;if(aQ<=100){aO.setConfirmations(aA.height-aO.blockHeight+1)}else{aO.setConfirmations(null)}}else{aO.setConfirmations(0)}}}}function z(aP,aO){loadScript("wallet/frame-modal",function(){showFrameModal({title:"Transaction Summary",description:"",src:root+"tx-summary/"+aP+"?result="+aO+"&guid="+M})})}this.deleteNote=function(aO){delete b[aO];c();ae()};function m(aO,aP){(function(aR,aT){aR=$(aR);if(!aR.data("popover")){aR.popover({title:'Add Note ',trigger:"manual",content:'
    '})}else{if(aR.data("popover").tip().is(":visible")){return}}aR.popover("show");aR.mouseleave(function(){if(!aR.__timeout){aR.__timeout=setTimeout(function(){aR.popover("hide")},250)}});function aQ(){if(aR.__timeout){clearTimeout(aR.__timeout);aR.__timeout=null}}var aS=aR.data("popover").tip().mouseenter(aQ);aS.find("textarea").focus(aQ);aS.mouseleave(function(){aR.__timeout=setTimeout(function(){aR.popover("hide")},250)});aS.find("i").unbind().click(function(){aR.popover("hide")});aS.find("button").click(function(){var aU=$.trim($("
    "+aS.find("textarea").val()+"
    ").text().replace(/'/g,"").replace(/"/g,""));if(aU.length>0){b[aT]=aU;ae()}c()})})(aO,aP)}function aE(aO,aP,aQ){(function(aR,aS,aU){aR=$(aR);if(!aR.data("popover")){var aV="Note";if(b[aU]){aV+=' '}$(aR).popover({title:aV,trigger:"manual",content:aS})}else{if(aR.data("popover").tip().is(":visible")){return}}aR.popover("show");aR.mouseleave(function(){if(!aR.__timeout){aR.__timeout=setTimeout(function(){aR.popover("hide")},250)}});var aT=aR.data("popover").tip().mouseenter(function(){if(aR.__timeout){clearTimeout(aR.__timeout);aR.__timeout=null}});aT.find("img").unbind().click(function(){h.deleteNote(aU)});aT.mouseleave(function(){aR.__timeout=setTimeout(function(){aR.popover("hide")},250)})})(aO,aP,aQ)}function C(aR,aW,aT){var aX=aR.result;var aS='
      ';var aP=true;if(aX>=0){for(var aQ=0;aQNewly Generated Coins'}else{var aU=aW[aO.addr];if(aU){continue}aP=false;aS+=formatOutput(aO,aW,aT)}}}else{if(aX<0){for(var aQ=0;aQMoved Between Wallet'}aS+="
    ";var aV=aR.note?aR.note:b[aR.hash];if(aV){aS+=' '}else{aS+=' '}if(aR.time>0){aS+=dateToString(new Date(aR.time*1000))}if(aR.confirmations==0){aS+=' Unconfirmed Transaction! '}else{if(aR.confirmations>0){aS+=' '+aR.confirmations+" Confirmations "}}aS+="
    ";if(aX>0){aS+='
    '+formatMoney(aX,true)+"
    "}else{if(aX<0){aS+='
    '+formatMoney(aX,true)+"
    "}else{aS+="
    "+formatMoney(aX,true)+"
    "}}if(aR.balance==null){aS+=""}else{aS+='
    '+formatMoney(aR.balance)+"
    "}return aS}function T(){L();if(at==null){$("#balance").html("Loading...")}else{$("#balance").html(formatSymbol(at,symbol,true));$("#balance2").html(formatSymbol(at,(symbol===symbol_local)?symbol_btc:symbol_local),true)}return j.attr("id")}function c(aO){var aP=T();if("send-coins"==aP){u(aO)}else{if("home-intro"==aP){f(aO)}else{if("receive-coins"==aP){aN(aO)}else{if("my-transactions"==aP){U(aO)}}}}}function f(aO){$("#summary-n-tx").html(K);$("#summary-received").html(formatMoney(an,true));$("#summary-sent").html(formatMoney(Q,true));$("#summary-balance").html(formatMoney(at,symbol));var aQ=h.getPreferredAddress();$("#tweet-for-btc").unbind().click(function(){window.open("https://twitter.com/share?url=https://blockchain.info/wallet&hashtags=tweet4btc,bitcoin,"+aQ+"&text=Sign Up For a Free Bitcoin Wallet @ Blockchain.info","","toolbar=0, status=0, width=650, height=360")});$(".paper-wallet-btn").unbind().click(function(){loadScript("wallet/paper-wallet",function(){PaperWallet.showModal()})});if(h.isWatchOnly(aQ)){$(".no-watch-only").hide()}else{$(".no-watch-only").show();var aP=$("#my-primary-address");if(aP.text()!=aQ){aP.text(aQ);loadScript("wallet/jquery.qrcode",function(){$("#my-primary-addres-qr-code").empty().qrcode({width:125,height:125,text:aQ})})}}}function R(){var aO=$("#export-warning").show();var aP=$("#import-export-content").hide();$("#show-import-export").unbind().click(function(){h.getMainPassword(function(){aO.hide();loadScript("wallet/import-export",function(){ImportExport.init(aP,function(){aP.show()},function(){ab($("#home-intro"))})},function(aQ){h.makeNotice("error","misc-error",aQ);ab($("#home-intro"))})},function(){ab($("#home-intro"))})})}function U(){var aP=null;var aR=0;if(aP!=null){clearInterval(aP);aP=null}var aO;if(s.tx_display==0){$("#transactions-detailed").hide();aO=$("#transactions-compact").show().find("tbody").empty()}else{$("#transactions-compact").hide();aO=$("#transactions-detailed").empty().show()}if(E.length==0){$("#transactions-detailed, #transactions-compact").hide();$("#no-transactions").show();return}else{$("#no-transactions").hide()}var aQ=function(){for(var aV=aR;aV0){aW=""}aT.append($('
  • ← Previous
  • ').click(function(){h.setPage(aq-1)}));for(var aV=0;aV'+aX+"").click(function(){h.setPage(aX)}))})(aV)}var aW=" disabled";if(aqNext →').click(function(){h.setPage(aq+1)}))}};aQ()}this.setPage=function(aO){aq=aO;scroll(0,0);h.get_history()};function v(){loadScript("wallet/frame-modal",function(){showFrameModal({title:"Export History",description:"",src:root+"export-history?active="+h.getActiveAddresses().join("|")+"&archived="+h.getArchivedAddresses().join("|")})})}function H(aR,aQ){if(!aQ&&aR.mixer_fee){x=aR.mixer_fee}if(aR.disable_mixer){$("#shared-addresses,#send-shared").hide()}E.length=0;if(aR.wallet==null){an=0;Q=0;at=0;K=0;aM=0;return}an=aR.wallet.total_received;Q=aR.wallet.total_sent;at=aR.wallet.final_balance;K=aR.wallet.n_tx;aM=aR.wallet.n_tx_filtered;for(var aP=0;aP0){aP.checksum=au}$.ajax({type:"GET",url:root+"wallet/wallet.aes.json",data:aP,success:function(aR){if(aR==null||aR.length==0||aR=="Not modified"){return}console.log("Wallet data modified");h.setEncryptedWalletData(aR);if(X()){h.get_history();c()}else{window.location.reload()}}})}function X(){try{if(af==null||af.length==0){h.makeNotice("error","misc-error","No Wallet Data To Decrypt");return false}var aR=null;h.decrypt(af,aC,h.getDefaultPbkdf2Iterations(),function(aS){try{aR=$.parseJSON(aS);return(aR!=null)}catch(aT){return false}});if(aR==null){throw"Error Decrypting Wallet. Please check your password is correct."}if(aR.double_encryption&&aR.dpasswordhash){F=aR.double_encryption;w=aR.dpasswordhash}if(aR.options){$.extend(s,aR.options)}I={};for(var aP=0;aP").qrcode({width:300,height:300,text:"1|"+M+"|"+h.encrypt(d+"|"+Crypto.util.bytesToHex(UTF8.stringToBytes(aC)),aR,ac)}))},function(aR){h.makeNotice("error","misc-error",aR)})}else{if(aO==0){aP($("
    ").qrcode({width:300,height:300,text:M+"|"+d+"|"+aC}))}}}catch(aQ){h.makeNotice("error","misc-error",aQ)}})},function(){h.logout()})};this.getMainPassword=function(aP,aO){if(B>new Date().getTime()-N){return aP(aC)}h.getPassword($("#main-password-modal"),function(aQ){if(aC==aQ){B=new Date().getTime();if(aP){try{aP(aC)}catch(aR){h.makeNotice("error","misc-error",aR)}}}else{h.makeNotice("error","misc-error","Password incorrect.");if(aO){try{aO()}catch(aR){h.makeNotice("error","misc-error",aR)}}}},aO)};this.getSecondPassword=function(aQ,aO){if(!F||ah!=null){if(aQ){try{aQ(ah)}catch(aP){h.makeNotice("error","misc-error",aP)}}return}h.getPassword($("#second-password-modal"),function(aR){try{if(aD(aR)){if(aQ){try{aQ(aR)}catch(aS){console.log(aS);h.makeNotice("error","misc-error",aS)}}}else{h.makeNotice("error","misc-error","Password incorrect.");if(aO){try{aO()}catch(aS){h.makeNotice("error","misc-error",aS)}}}}catch(aS){if(aO){try{aO()}catch(aS){h.makeNotice("error","misc-error",aS)}}}},aO)};function a(){if(A){return}var aO=$("#restore-password");aC=aO.val();aO.val("");B=new Date().getTime();if(af==null||af.length==0){h.setLoadingText("Validating Authentication key");var aP=$.trim($(".auth-"+q).find(".code").val());if(aP.length==0||aP.length>255){h.makeNotice("error","misc-error","You must enter a Two Factor Authentication code");return false}$.ajax({type:"POST",url:root+"wallet",data:{guid:M,payload:aP,length:aP.length,method:"get-wallet",format:"plain"},success:function(aQ){try{if(aQ==null||aQ.length==0){h.makeNotice("error","misc-error","Server Return Empty Wallet Data");return}h.setEncryptedWalletData(aQ);$(".auth-"+q).hide();$(".auth-0").show();if(X()){n();aF()}}catch(aR){h.makeNotice("error","misc-error",aR)}},error:function(aQ){h.makeNotice("error","misc-error",aQ.responseText)}})}else{if(X()){n();aF()}}return true}function O(){$("#not-synced-warning-modal").modal("show").find(".btn.btn-danger").unbind().click(function(){$(this).modal("hide");al=true;c()})}function e(){ao("error");webSocketConnect(y);A=true;$("#tech-faq").hide();$("#intro-text").hide();$("#large-summary").show()}this.quickSendNoUI=function(aQ,aP,aO){loadScript("wallet/signer",function(){h.getSecondPassword(function(){try{var aS=initNewTx();aS.from_addresses=h.getActiveAddresses();aS.to_addresses.push({address:new Bitcoin.Address(aQ),value:Bitcoin.Util.parseValue(aP)});aS.addListener(aO);aS.start()}catch(aR){aO.on_error(aR)}},function(aR){aO.on_error(aR)})})};function G(){h.setLoadingText("Sending email backup");$.ajax({type:"POST",url:root+"wallet",data:{guid:M,sharedKey:d,method:"email-backup",format:"plain"},success:function(aO){h.makeNotice("success","backup-success",aO)},error:function(aO){h.makeNotice("error","misc-error",aO.responseText)}})}function ae(aR,aQ,aP,aO){if(aj){clearInterval(aj);aj=null}aj=setTimeout(function(){h.backupWallet(aR,aQ,aP,aO)},3000)}this.backupWallet=function(aV,aU,aO){if(aj){clearInterval(aj);aj=null}try{if(aV==null){aV="update"}if(ay(I)==0){return}var aQ=h.makeWalletJSON();var aT=h.encrypt(aQ,aC,ac);if(aT.length==0){throw"Error encrypting the JSON output"}var aS=null;h.decrypt(aT,aC,h.getDefaultPbkdf2Iterations(),function(aW){try{aS=$.parseJSON(aW);return(aS!=null)}catch(aX){return false}});if(aS==null){throw"Error Decrypting Previously encrypted JSON. Not Saving Wallet."}var aP=au;h.setLoadingText("Saving wallet");h.setEncryptedWalletData(aT);$.ajax({type:"POST",url:root+"wallet",data:{guid:M,length:aT.length,payload:aT,sharedKey:d,checksum:au,old_checksum:aP,method:aV},converters:{"* text":window.String,"text html":true,"text json":window.String,"text xml":window.String},success:function(aX){var aZ=false;for(var aW in I){var aY=I[aW];if(aY.tag==1){aY.tag=null;aZ=true}}h.makeNotice("success","misc-success",aX);c();if(aU!=null){aU()}},error:function(aX){for(var aW in I){var aY=I[aW];if(aY.tag==1){O();break}}if(aX.responseText==null){h.makeNotice("error","misc-error","Error Saving Wallet",10000)}else{h.makeNotice("error","misc-error",aX.responseText,10000)}c();if(aO!=null){aO()}}})}catch(aR){h.makeNotice("error","misc-error","Error Saving Wallet: "+aR,10000);c();if(aO!=null){aO(aR)}else{throw aR}}};function aG(aO){if(F){if(ah==null){throw"Cannot encrypt private key without a password"}return h.encrypt(aO,d+ah,s.pbkdf2_iterations)}else{return aO}return null}this.isBase58=function(aQ,aP){for(var aO=0;aO58){return false}}return true};this.encrypt=function(aQ,aP,aO){return Crypto.AES.encrypt(aQ,aP,{mode:new Crypto.mode.CBC(Crypto.pad.iso10126),iterations:aO})};this.decrypt=function(aS,aR,aP,aU,aQ){try{var aO=Crypto.AES.decrypt(aS,aR,{mode:new Crypto.mode.CBC(Crypto.pad.iso10126),iterations:aP});if(aO!=null&&aO.length>0){if(aU(aO)){return aO}}}catch(aT){console.log(aT)}if(aP!=10){try{var aO=Crypto.AES.decrypt(aS,aR,{mode:new Crypto.mode.CBC(Crypto.pad.iso10126),iterations:10});if(aO!=null&&aO.length>0){if(aU(aO)){return aO}}}catch(aT){console.log(aT)}}try{var aO=Crypto.AES.decrypt(aS,aR);if(aO!=null&&aO.length>0){if(aU(aO)){return aO}}}catch(aT){console.log(aT)}try{var aO=Crypto.AES.decrypt(aS,aR,{mode:new Crypto.mode.OFB(Crypto.pad.iso7816),iterations:1});if(aO!=null&&aO.length>0){if(aU(aO)){return aO}}}catch(aT){console.log(aT)}try{var aO=Crypto.AES.decrypt(aS,aR,{mode:new Crypto.mode.CBC(Crypto.pad.iso10126),iterations:1});if(aO!=null&&aO.length>0){if(aU(aO)){return aO}}}catch(aT){console.log(aT)}if(aQ!=null){aQ()}return null};this.setGUID=function(aR,aP){console.log("Set GUID "+aR);if(A){throw"Cannot Set GUID Once Initialized"}h.setLoadingText("Changing Wallet Identifier");$("#initial_error,#initial_success").remove();try{var aO=localStorage.getItem("guid")}catch(aS){}var aQ=$("#restore-wallet-continue");aQ.prop("disabled",true);$.ajax({type:"GET",dataType:"json",url:root+"wallet/"+aR,data:{format:"json",resend_code:aP},success:function(aU){aQ.prop("disabled",false);$(".auth-"+q).hide();W=aU.extra_seed;M=aU.guid;q=aU.auth_type;aH=aU.real_auth_type;h.setEncryptedWalletData(aU.payload);war_checksum=aU.war_checksum;setLocalSymbol(aU.symbol_local);$("#restore-guid").val(M);$(".auth-"+q).show();$(".recover-wallet-btn").prop("disabled",false).click(function(){window.location=root+"wallet/forgot-password?guid="+M});$("#reset-two-factor-btn").prop("disabled",false).show().click(function(){window.location=root+"wallet/reset-two-factor?guid="+M});if(aU.initial_error){h.makeNotice("error","misc-error",aU.initial_error)}if(aU.initial_success){h.makeNotice("success","misc-success",aU.initial_success)}try{if(aO!=M){localStorage.clear();if(M!=D){localStorage.setItem("guid",M)}}}catch(aT){}},error:function(aU){console.log("Set GUID Success");aQ.prop("disabled",false);if(aO==aR&&af){h.makeNotice("error","misc-error","Error Contacting Server. Using Local Wallet Cache.");M=aO;au=ad();q=0;$("#restore-guid").val(M);$(".auth-"+q).show();return}try{var aT=$.parseJSON(aU.responseText);if(aT.initial_error){h.makeNotice("error","misc-error",aT.initial_error);return}}catch(aU){}if(aU.responseText){h.makeNotice("error","misc-error",aU.responseText)}else{h.makeNotice("error","misc-error","Error changing wallet identifier")}}})};function i(aO){var aP=B58.encode(aO);return aG(aP)}this.decryptPK=function(aO){if(F){if(ah==null){throw"Cannot decrypt private key without a password"}return h.decrypt(aO,d+ah,s.pbkdf2_iterations,h.isBase58)}else{return aO}return null};this.decodePK=function(aP){var aO=h.decryptPK(aP);if(aO!=null){return B58.decode(aO)}return null};this.signmessage=function(aO,aQ){var aS=I[aO];var aR=h.decodePK(aS.priv);var aP=new Bitcoin.ECKey(aR);return Bitcoin.Message.signMessage(aP,aQ,aS.addr)};function aD(aP){var aO=Crypto.SHA256(d+aP,{asBytes:true});var aS=aa(aO,s.pbkdf2_iterations-1);if(aS==w){ah=aP;return true}if(s.pbkdf2_iterations!=10){var aQ=aa(aO,10-1);if(aQ==w){ah=aP;w=aS;return true}}if(Crypto.util.bytesToHex(aO)==w){ah=aP;w=aS;return true}var aR=Crypto.SHA256(aP);if(aR==w){ah=aP;w=aS;return true}return false}this.checkAllKeys=function(aO){for(var aP in I){var aT=I[aP];if(aT.addr==null){throw"Null Address Found in wallet "+aP}if(aT.addr.toString()==null){throw"Error decoding wallet address "+aT.addr}if(aT.priv!=null){var aS=h.decodePK(aT.priv);var aR=new Bitcoin.ECKey(aS);var aQ=aR.getBitcoinAddress().toString();if(aQ!=aT.addr&&aR.getBitcoinAddressCompressed().toString()!=aT.addr){throw"Private key does not match bitcoin address "+aT.addr+" != "+aQ}if(aO){aT.priv=i(aS)}}}h.makeNotice("success","wallet-success","Wallet verified.")};this.setMainPassword=function(aO){h.getMainPassword(function(){aC=aO;h.backupWallet("update",function(){h.logout()},function(){h.logout()})})};function ab(aO){if(aO===j){return}if(j!=null){if($("#"+j.attr("id")+"-btn").length>0){$("#"+j.attr("id")+"-btn").parent().attr("class","")}j.hide()}j=aO;j.show();if($("#"+j.attr("id")+"-btn").length>0){$("#"+j.attr("id")+"-btn").parent().attr("class","active")}c(true)}function ay(aQ){var aP=0,aO;for(aO in aQ){aP++}return aP}function Z(aO){I[aO].priv=null}function ag(){if(ay(I)>=aw){h.makeNotice("error","misc-error","We currently support a maximum of "+aw+" private keys, please remove some unused ones.");return true}return false}function aK(aQ,aO){var aP=I[aQ];if(!aP||aP.length==0){I[aQ]={addr:aQ,priv:aO,balance:0};return true}else{if(!aP.priv&&aO){aP.priv=aO;return true}}return false}function o(){var aQ=$("#add-address-book-entry-modal");aQ.modal({keyboard:true,backdrop:"static",show:true});var aO=aQ.find('input[name="label"]');var aP=aQ.find('input[name="address"]');aO.val("");aP.val("");aQ.find(".btn.btn-primary").unbind().click(function(){aQ.modal("hide");var aS=$.trim($("
    "+aO.val()+"
    ").text());var aR=$.trim(aP.val());if(aS.length==0){h.makeNotice("error","misc-error","You must enter a label for the address book entry");return false}if(aS.indexOf('"')!=-1){h.makeNotice("error","misc-error","Label cannot contain double quotes");return false}if(aR.length==0){h.makeNotice("error","misc-error","You must enter a bitcoin address for the address book entry");return false}var aU;try{aU=new Bitcoin.Address(aR);if(aU==null){throw"Null address"}}catch(aT){h.makeNotice("error","misc-error","Bitcoin address invalid, please make sure you entered it correctly");return false}if(g[aR]!=null){h.makeNotice("error","misc-error","Bitcoin address already exists");return false}h.makeNotice("success","misc-success","Added Address book entry");h.addAddressBookEntry(aR,aS);ae();$("#send-coins").find(".tab-pane").trigger("show",true)});aQ.find(".btn.btn-secondary").unbind().click(function(){aQ.modal("hide")})}this.logout=function(){if(S){clearTimeout(S)}if(M==D){window.location=root+"wallet/logout"}else{$.ajax({type:"GET",url:root+"wallet/logout",data:{format:"plain"},success:function(aO){window.location.reload()},error:function(){window.location.reload()}})}};function ak(aU){var aW=$("#delete-address-modal");aW.modal({keyboard:true,backdrop:"static",show:true});aW.find(".btn.btn-primary").hide();aW.find(".btn.btn-danger").hide();$("#change-mind").hide();aW.find("#to-delete-address").html(aU.join(" "));aW.find("#delete-balance").empty();var aQ=aW.find("#delete-balance");var aO=[];for(var aT in aU){var aV=aU[aT];if(I[aV]&&I[aV].priv){aO.push(aU[aT])}}BlockchainAPI.get_balance(aO,function(aX){aW.find(".btn.btn-primary").show(200);aW.find(".btn.btn-danger").show(200);aQ.html("Balance "+formatBTC(aX));if(aX>0){aQ.css("color","red")}else{aQ.css("color","black")}},function(){aW.find(".btn.btn-primary").show(200);aW.find(".btn.btn-danger").show(200);aQ.text("Error Fetching Balance")});var aR=false;var aT=0;var aP=null;var aS=10;changeMind=function(){$("#change-mind").show();$("#change-mind-time").text(aS-aT)};aW.find(".btn.btn-primary").unbind().click(function(){changeMind();aW.find(".btn.btn-primary").hide();aW.find(".btn.btn-danger").hide();aP=setInterval(function(){if(aR){return}++aT;changeMind();if(aT==aS){$("#delete-address-modal").modal("hide");h.makeNotice("warning","warning-deleted","Private Key Removed From Wallet");for(var aX in aU){Z(aU[aX])}c();h.backupWallet();clearInterval(aP)}},1000)});aW.find(".btn.btn-danger").unbind().click(function(){changeMind();aW.find(".btn.btn-primary").hide();aW.find(".btn.btn-danger").hide();aP=setInterval(function(){if(aR){return}++aT;changeMind();if(aT==aS){try{$("#delete-address-modal").modal("hide");h.makeNotice("warning","warning-deleted","Address & Private Key Removed From Wallet");for(var aX in aU){h.deleteAddress(aU[aX])}c();h.backupWallet("update",function(){h.get_history()})}finally{clearInterval(aP)}}},1000)});aW.unbind().on("hidden",function(){if(aP){aR=true;clearInterval(aP);aP=null}});aW.find(".btn.btn-secondary").unbind().click(function(){aW.modal("hide")})}function av(){var aQ=[];for(var aO in g){aQ.push(g[aO])}for(var aO in I){var aP=I[aO];if(aP.tag!=2&&aP.label){aQ.push(aP.label)}}return aQ}function P(aO){h.getSecondPassword(function(){var aQ=$("#sweep-address-modal");aQ.modal("show");BlockchainAPI.get_balance(aO,function(aR){aQ.find(".balance").text("Amount: "+formatBTC(aR))},function(){aQ.find(".balance").text("Error Fetching Balance")});var aP=aQ.find('select[name="change"]');l(aP,true);aQ.find(".btn.btn-primary").unbind().click(function(){loadScript("wallet/signer",function(){BlockchainAPI.get_balance(aO,function(aR){var aS=initNewTx();aS.fee=aS.base_fee;aS.to_addresses.push({address:new Bitcoin.Address($.trim(aP.val())),value:BigInteger.valueOf(aR).subtract(aS.fee)});aS.from_addresses=aO;aS.start()},function(){h.makeNotice("error","misc-error","Error Getting Address Balance")})});aQ.modal("hide")});aQ.find(".btn.btn-secondary").unbind().click(function(){aQ.modal("hide")})})}function ax(){try{$(".pop").popover({offset:10,placement:"bottom"})}catch(aO){}}function n(){$("#add-address-book-entry-btn").click(function(){o()});$("#home-intro-btn").click(function(){ab($("#home-intro"))});$("#my-transactions-btn").click(function(){ab($("#my-transactions"))});$("#send-coins-btn").click(function(){ab($("#send-coins"))});$("#import-export-btn").click(function(){ab($("#import-export"));R()});$("#chord-diagram").click(function(){window.open(root+"taint/"+h.getActiveAddresses().join("|"),null,"width=850,height=850")});$("#verify-message").click(function(){loadScript("wallet/address_modal",function(){verifyMessageModal()})});$("#generate-cold-storage").click(function(){loadScript("wallet/paper-wallet",function(){PaperWallet.showColdStorageModal()},null,true)});$("#group-received").click(function(){loadScript("wallet/taint_grouping",function(){try{loadTaintData()}catch(aO){h.makeNotice("error","misc-error","Unable To Load Taint Grouping Data")}})});$("#my-account-btn").click(function(){ab($("#my-account"));var aO=$("#account-settings-warning").show();var aP=$("#my-account-content").hide();$("#show-account-settings").unbind().click(function(){h.getMainPassword(function(){aO.hide();loadScript("wallet/account",function(){AccountSettings.init(aP,function(){aP.show()},function(){ab($("#home-intro"))})},function(aQ){h.makeNotice("error","misc-error",aQ);ab($("#home-intro"))})},function(){ab($("#home-intro"))})})});$("#enable_archived_checkbox").change(function(){var aO=$(this).is(":checked");$(".archived_checkbox").prop("checked",false);$(".archived_checkbox").prop("disabled",!aO);$("#archived-sweep").prop("disabled",!aO);$("#archived-delete").prop("disabled",!aO)});$("#shared-addresses").on("show",function(){var aO=$(this);loadScript("wallet/shared-addresses",function(){buildSharedTable(aO)})});$("#active-addresses").on("show",function(){var aU=$(this).find("table:first");aU.find("tbody:gt(0)").remove();var aR=aU.find("tbody").empty();for(var aT in I){var aV=I[aT];if(aV.tag==2||(aV.tag==1&&!al)){continue}var aS="";if(aV.tag==1){aS=' (Not Synced)'}else{if(aV.priv==null){aS=' (Watch Only)'}}var aO="";var aQ=aV.addr;if(aV.label!=null){aQ=aV.label;aO=' - '+aV.addr+""}var aP=$('
    '+aQ+""+aO+" "+aS+'
    '+formatMoney(aV.balance,true)+' ');(function(aW){aP.find(".act-archive").click(function(){h.archiveAddr(aW)});aP.find(".act-label").click(function(){loadScript("wallet/address_modal",function(){showLabelAddressModal(aW)})});aP.find(".act-qr").click(function(){loadScript("wallet/address_modal",function(){showAddressModalQRCode(aW)})});aP.find(".act-pubkey").click(function(){h.getSecondPassword(function(){var aX=h.getPrivateKey(aW);if(aX==null){h.makeNotice("eror","misc-error","Public Key Unknown");return}var aY=new Bitcoin.ECKey(h.decodePK(aX));if(aY.getBitcoinAddressCompressed().toString()==aW){var aZ=aY.getPubCompressed()}else{var aZ=aY.getPub()}h.makeNotice("success","pub-key","Public Key of "+aW+" is "+Crypto.util.bytesToHex(aZ),20000)})});aP.find(".act-sign").click(function(){loadScript("wallet/address_modal",function(){showAddressModalSignMessage(aW)})});aP.find(".act-request").click(function(){loadScript("wallet/frame-modal",function(){showFrameModal({title:"Create Payment Request",description:"Request Payment into address "+aW+"",src:root+"payment_request?address="+aW})})})})(aV.addr);if(aV.balance>0&&aV.priv){aU.prepend(aP)}else{aU.append(aP)}}ax()});$("#archived-addresses").on("show",function(){$("#enable_archived_checkbox").prop("checked",false);$("#archived-delete").prop("disabled",true);$("#archived-sweep").prop("disabled",true);$("#archived-addr tbody").empty();var aP=$(this).find("tbody");var aO=h.getArchivedAddresses();var aQ=function(){aP.empty();for(var aU in aO){var aW=I[aO[aU]];if(aW.tag!=2||(aW.tag==1&&!al)){continue}var aT="";if(aW.priv==null){aT=' (Watch Only)'}var aR="";var aS=aW.addr;if(aW.label!=null){aS=aW.label;aR=' - '+aW.addr+""}var aV=$('
    '+aS+""+aR+" "+aT+'
    '+formatBTC(aW.balance)+'');(function(aX){aV.find(".act-unarchive").click(function(){h.unArchiveAddr(aX)})})(aW.addr);if(aW.balance>0&&aW.priv){aP.prepend(aV)}else{aP.append(aV)}}};aQ();BlockchainAPI.get_balances(aO,function(aR){aQ()},function(aR){h.makeNotice("error","misc-error",aR)})});$("#archived-sweep").click(function(){var aO=[];$(".archived_checkbox:checked").each(function(){var aP=I[$(this).val()];if(aP.priv==null){h.makeNotice("error","misc-error","Cannot Sweep Watch Only Address");return}aO.push(aP.addr)});if(aO.length==0){return}P(aO)});$("#archived-delete").click(function(){var aO=[];$(".archived_checkbox:checked").each(function(){aO.push($(this).val())});if(aO.length==0){return}ak(aO)});$("#shared-never-ask").click(function(){SetCookie("shared-never-ask",$(this).is(":checked"))});$(".deposit-btn").click(function(){var aQ=$(this);var aP=h.getPreferredAddress();var aO=aQ.data("extra");if(aO==null){aO=""}loadScript("wallet/frame-modal",function(){showFrameModal({title:aQ.data("title"),description:"Deposit into address "+aP+"",top_right:'Have Questions? Read How It Works',src:root+"deposit?address="+aP+"&ptype="+aQ.data("type")+"&guid="+M+"&sharedKey="+d+aO})})});$(".withdraw-btn").click(function(){var aO=$(this);h.getSecondPassword(function(){var aP=h.getPreferredAddress();loadScript("wallet/frame-modal",function(){showFrameModal({title:aO.data("title"),description:"Your Wallet Balance is "+formatBTC(at)+"",src:root+"withdraw?method="+aO.data("type")+"&address="+aP+"&balance="+at+"&guid="+M+"&sharedKey="+d})})})});$("#logout").click(h.logout);$("#refresh").click(function(){J();h.get_history()});$("#summary-n-tx-chart").click(function(){window.open(root+"charts/n-transactions?show_header=false&address="+h.getActiveAddresses().join("|"),null,"scroll=0,status=0,location=0,toolbar=0,width=1000,height=700")});$("#summary-received-chart").click(function(){window.open(root+"charts/received-per-day?show_header=false&address="+h.getActiveAddresses().join("|"),null,"scroll=0,status=0,location=0,toolbar=0,width=1000,height=700")});$("#summary-balance-chart").click(function(){window.open(root+"charts/balance?show_header=false&address="+h.getActiveAddresses().join("|"),null,"scroll=0,status=0,location=0,toolbar=0,width=1000,height=700")});$("#new-addr").click(function(){try{h.getSecondPassword(function(){var aQ=h.generateNewKey();if(!aQ){return}var aP=aQ.getBitcoinAddress().toString();h.backupWallet("update",function(){h.makeNotice("info","new-address","Generated new Bitcoin Address "+aP);loadScript("wallet/address_modal",function(){showLabelAddressModal(aP)})})})}catch(aO){h.makeNotice("error","misc-error",aO)}});$(".tx_filter a").click(function(){aq=0;am=$(this).data("value");h.get_history()});$(".tx_display a").click(function(){var aO=$(this).data("value");if(aO=="export"){v();return}s.tx_display=aO;c();ae()});$("#email-backup-btn").click(function(){G()});$("#dropbox-backup-btn").click(function(){window.open(root+"wallet/dropbox-login?guid="+M+"&sharedKey="+d)});$("#gdrive-backup-btn").click(function(){window.open(root+"wallet/gdrive-login?guid="+M+"&sharedKey="+d)});$("#large-summary").click(function(){toggleSymbol();c()});$("#send-quick").on("show",function(aQ,aP){var aO=$(this);r(aO,aP);aO.find(".send").unbind().click(function(){loadScript("wallet/signer",function(){startTxUI(aO,"quick",initNewTx())})})});$("#send-email").on("show",function(aQ,aP){var aO=$(this);r(aO,aP);aO.find(".send").unbind().click(function(){loadScript("wallet/signer",function(){startTxUI(aO,"email",initNewTx())})})});$("#send-shared").on("show",function(aQ,aP){var aO=$(this);r(aO,aP);aO.find(".mixer_fee").text(x);aO.find(".fees,.free,.bonus").show();if(x<0){aO.find(".fees,.free").hide()}else{if(x==0){aO.find(".fees,.bonus").hide()}else{aO.find(".free,.bonus").hide()}}aO.find(".send").unbind().click(function(){loadScript("wallet/signer",function(){startTxUI(aO,"shared",initNewTx())})});aO.find(".shared-fees").text("0.00");aO.find('input[name="send-before-fees"]').unbind().bind("keyup change",function(){var aS=parseFloat($(this).val());var aR=0;if(aS>0){if(x>0){aR=parseFloat(aS+((aS/100)*x))}else{aR=parseFloat(aS);aO.find(".bonus-value").text(formatPrecision((Math.min(aS,precisionFromBTC(200))/100)*x))}}if(precisionToBTC(aS)<0.1||precisionToBTC(aS)>250){aO.find(".shared-fees").text("0.00");aO.find(".send").prop("disabled",true)}else{aO.find(".shared-fees").text(formatBTC(aR*symbol_btc.conversion));aO.find(".send").prop("disabled",false)}aO.find('input[name="send-value"]').val(aR).trigger("keyup")})});$("#send-custom").on("show",function(aQ,aP){var aO=$(this);r(aO,aP);aO.find(".send").unbind().click(function(){loadScript("wallet/signer",function(){startTxUI(aO,"custom",initNewTx())})});aO.find('select[name="from"]').unbind().change(function(){var aT=0;var aR=$(this).val();for(var aS in aR){if(aR[aS]=="any"){$(this).val("any");aT=at;break}else{var aU=I[aR[aS]];if(aU&&aU.balance){aT+=aU.balance}}}aO.find(".amount-available").text(formatBTC(aT))}).trigger("change");aO.find(".reset").unbind().click(function(){r(aO,true);aO.find('select[name="from"]').trigger("change")})});$("#send-satoshi-dice,#send-btcdice-dice").on("show",function(aQ,aP){var aO=this;loadScript("wallet/dicegames",function(){try{DICEGame.init($(aO))}catch(aR){h.makeNotice("error","misc-error","Unable To Load Dice Bets")}},function(aR){h.makeNotice("error","misc-error",aR)})});$("#send-sms").on("show",function(aQ,aP){if(aP){return}var aO=$(this);r(aO);$.ajax({type:"GET",url:resource+"wallet/country_codes.html",success:function(aR){aO.find('select[name="sms-country-code"]').html(aR)},error:function(){h.makeNotice("error","misc-error","Error Downloading SMS Country Codes")}});aO.find(".send").unbind().click(function(){loadScript("wallet/signer",function(){var aR=initNewTx();startTxUI(aO,"sms",aR)})})});$("#address-book").on("show",function(){var aP=$("#address-book-tbl tbody");if(ay(g)>0){aP.empty();for(var aO in g){var aQ=$(""+g[aO]+'
    '+aO+'
    ');(function(aR){aQ.find(".act-delete").click(function(){h.deleteAddressBook(aR)})})(aO);aP.append(aQ)}}});$('a[data-toggle="tab"]').unbind().on("show",function(aO){$(aO.target.hash).trigger("show")});$("#receive-coins-btn").click(function(){ab($("#receive-coins"))});$(".show_adv").click(function(){$(".modal:visible").center()});$(".download-backup-btn").show();ax()}function p(){$(".resend-code").click(function(){h.setGUID(M,true)});$(".download-backup-btn").toggle(af!=null).click(function(){$(this).attr("download","wallet.aes.json");if(!af){h.makeNotice("error","error","No Wallet Data to Download");return}var aP=("download" in document.createElement("a"));if(window.Blob&&window.URL&&aP){var aQ=new Blob([af]);var aR=window.URL.createObjectURL(aQ);$(this).attr("href",aR)}else{var aO=window.open(null,null,"width=700,height=800,toolbar=0");aO.document.write('
    '+af+"
    ")}aL()});$(".auth-0,.auth-1,.auth-2,.auth-3,.auth-4,.auth-5").unbind().keypress(function(aO){if(aO.keyCode==13){aO.preventDefault();$("#restore-wallet-continue").click()}});$("#restore-wallet-continue").unbind().click(function(aP){aP.preventDefault();var aO=$.trim($("#restore-guid").val());if(aO.length==0){return}if(M!=aO){h.setGUID(aO,false)}else{a()}});$(".modal").on("show",function(){L();$(this).center()}).on("shown",function(){L();$(this).center()})}function ai(aP){var aQ=Crypto.SHA256(aP+"?");switch(aQ.slice(0,2)){case"00":var aR=Crypto.SHA256(aP,{asBytes:true});return aR;break;case"01":var aO=Crypto.util.hexToBytes(aQ.slice(2,4))[0];var aS=Math.round(Math.pow(2,(aO/4)));var aR=Crypto.PBKDF2(aP,"Satoshi Nakamoto",32,{iterations:aS,asBytes:true});return aR;break;default:console.log("invalid key");break}}function aB(){var aQ,aO="";if(window.getSelection){aQ=window.getSelection();if(aQ.rangeCount){var aR=aQ.getRangeAt(0).cloneContents();var aP=document.createElement("div");aP.appendChild(aR);aO=aP.innerText}}else{if(document.selection&&document.selection.type=="Text"){aO=document.selection.createRange().htmlText}}return aO}this.detectPrivateKeyFormat=function(aP){if(/^5[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{50}$/.test(aP)){return"sipa"}if(/^[LK][123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{51}$/.test(aP)){return"compsipa"}if(/^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{44}$/.test(aP)||/^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43}$/.test(aP)){return"base58"}if(/^[A-Fa-f0-9]{64}$/.test(aP)){return"hex"}if(/^[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789=+\/]{44}$/.test(aP)){return"base64"}if(/^S[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{21}$/.test(aP)||/^S[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{25}$/.test(aP)||/^S[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{29}$/.test(aP)||/^S[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{30}$/.test(aP)){var aO=Crypto.SHA256(aP+"?",{asBytes:true});if(aO[0]===0||aO[0]===1){return"mini"}}throw"Unknown Key Format "+aP};this.privateKeyStringToKey=function(aP,aR){var aO=null;if(aR=="base58"){aO=B58.decode(aP)}else{if(aR=="base64"){aO=Crypto.util.base64ToBytes(aP)}else{if(aR=="hex"){aO=Crypto.util.hexToBytes(aP)}else{if(aR=="mini"){aO=ai(aP)}else{if(aR=="sipa"){var aQ=B58.decode(aP);aQ.shift();aO=aQ.slice(0,aQ.length-4)}else{if(aR=="sipa"){var aQ=B58.decode(aP);aQ.shift();aO=aQ.slice(0,aQ.length-4)}else{if(aR=="compsipa"){var aQ=B58.decode(aP);aQ.shift();aQ.pop();aO=aQ.slice(0,aQ.length-4)}else{throw"Unsupported Key Format"}}}}}}}if(aO.length!=32){throw"Result not 32 bytes in length"}return new Bitcoin.ECKey(aO)};$(document).ready(function(){if(!$.isEmptyObject({})){h.makeNotice("error","error","Object.prototype has been extended by a browser extension. Please disable this extensions and reload the page.");return}$("input,button,select").attr("autocomplete","off");var aP=$(document.body);M=aP.data("guid");d=aP.data("sharedkey");if(h.skip_init){return}try{af=localStorage.getItem("payload");if((!M||M.length==0)&&(isExtension||window.location.href.indexOf("/login")>0)){M=localStorage.getItem("guid")}}catch(aR){}if(M&&M.length==36){setTimeout(function(){h.setGUID(M,false)},10)}if(top.location!=self.location){top.location=self.location.href}aP.click(function(){if(S){clearTimeout(S);S=setTimeout(h.logout,h.getLogoutTime())}rng_seed_time()}).keypress(function(){if(S){clearTimeout(S);S=setTimeout(h.logout,h.getLogoutTime())}rng_seed_time()}).mousemove(function(aV){if(aV){rng_seed_int(aV.clientX*aV.clientY)}});p();$(".auth-"+q).show();j=$("#restore-wallet");j.show();var aQ=false;var aU=17,aT=86,aO=67,aS=67;$(document).keydown(function(aW){try{if(aW.keyCode==aU||aW.keyCode==aS){aQ=true}if(aQ&&aW.keyCode==aO){var aV=$.trim(aB());var aX=I[aV];if(aX!=null){if(aX.priv==null){$("#watch-only-copy-warning-modal").modal("show")}else{if(aX.tag==1){O()}}}}}catch(aW){console.log(aW)}}).keyup(function(aV){if(aV.keyCode==aU||aV.keyCode==aS){aQ=false}}).ajaxStart(function(){ao("loading_start");$(".loading-indicator").fadeIn(200)}).ajaxStop(function(){ao("loading_stop");$(".loading-indicator").hide()})});function aN(){$("#receive-coins").find(".tab-pane.active").trigger("show");setupToggle()}}; \ No newline at end of file +function precisionToSatoshiBN(a){return Bitcoin.Util.parseValue(a).divide(BigInteger.valueOf(Math.pow(10,sShift(symbol_btc)).toString()))}function precisionToBTC(a){return Bitcoin.Util.formatValue(precisionToSatoshiBN(a))}function precisionFromBTC(a){return Bitcoin.Util.formatValue(Bitcoin.Util.parseValue(a).multiply(BigInteger.valueOf(Math.pow(10,sShift(symbol_btc)))))}function formatPrecision(a){return formatBTC(precisionToSatoshiBN(a).toString())}var MyWallet=new function(){var h=this;this.skip_init=false;var D="abcaa314-6f67-6705-b384-5d47fbe9d7cc";var ag;var M;var j;var aD;var ai;var w;var d;var au=0;var Q=0;var ao=0;var K=0;var aO=0;var aB;var g={};var E=[];var F=false;var ar=0;var an=0;var ax=1000;var I={};var av;var ak;var x=0.5;var ad=10;var b={};var aJ=0;var q;var S;var W=[];var B;var N=60000;var A=false;var X;var am=false;var V="en";var s={pbkdf2_iterations:10,fee_policy:0,html5_notifications:false,logout_time:600000,tx_display:0,always_keep_local_backup:false};this.setEncryptedWalletData=function(aQ){if(!aQ||aQ.length==0){ag=null;av=null;return}ag=aQ;av=ae();try{if(aJ==0||s.always_keep_local_backup){MyStore.put("payload",ag)}}catch(aR){console.log(aR)}};this.setRealAuthType=function(aQ){aJ=aQ};this.getLanguage=function(){return V};this.addEventListener=function(aQ){W.push(aQ)};this.getLogoutTime=function(){return s.logout_time};this.getDefaultPbkdf2Iterations=function(){return ad};this.getPbkdf2Iterations=function(){return s.pbkdf2_iterations};this.setLogoutTime=function(aQ){s.logout_time=aQ;clearInterval(S);S=setTimeout(h.logout,h.getLogoutTime())};this.getDoubleEncryption=function(){return F};this.getEncryptedWalletData=function(){return ag};this.getFeePolicy=function(){return s.fee_policy};this.setFeePolicy=function(aQ){s.fee_policy=parseInt(aQ)};this.setAlwaysKeepLocalBackup=function(aQ){s.always_keep_local_backup=aQ};this.getAlwaysKeepLocalBackup=function(){return s.always_keep_local_backup};this.getGuid=function(){return M};this.getHTML5Notifications=function(){return s.html5_notifications};this.setHTML5Notifications=function(aQ){s.html5_notifications=aQ};this.getTransactions=function(){return E};this.addressExists=function(aQ){return I[aQ]!=null};this.getAddressTag=function(aQ){return I[aQ].tag};this.setAddressTag=function(aR,aQ){I[aR].tag=aQ};this.getAddressBook=function(){return g};this.getAddressLabel=function(aQ){return I[aQ].label};this.setAddressLabel=function(aQ,aR){I[aQ].label=aR};this.setAddressBalance=function(aQ,aR){I[aQ].balance=aR};this.getAddressBookLabel=function(aQ){return g[aQ]};this.isWatchOnly=function(aQ){return !I[aQ]||I[aQ].priv==null};this.getAddressBalance=function(aQ){return I[aQ].balance};this.getMixerFee=function(){return x};this.deleteAddress=function(aQ){delete I[aQ]};this.addAddressBookEntry=function(aR,aQ){g[aR]=aQ};this.getPrivateKey=function(aQ){return I[aQ].priv};this.setLabel=function(aQ,aR){I[aQ].label=aR;af();c()};this.securePost=function(aR,aS,aT,aQ){var aU=jQuery.extend({},aS);if(d==null||d.length==0||d.length!=36){throw"Shared key is invalid"}aU.sharedKey=d;aU.guid=M;aU.format=aS.format?aS.format:"plain";$.ajax({dataType:aS.format?aS.format:"text",type:"POST",url:root+aR,data:aU,success:function(aV){aT(aV)},error:function(aV){aQ(aV)}})};this.isCorrectMainPassword=function(aQ){return aD==aQ};function ab(aR,aT){var aQ=Crypto.SHA256(aR,{asBytes:true});for(var aS=1;aS0?"Payment Received":"Payment Sent",body:"Transaction Value "+formatBTC(a2),iconUrl:resource+"cube48.png"})}aV.result=a2;au+=a2;K++;aV.setConfirmations(0);playSound("beep");if(an==0&&ar==0){E.unshift(aV);var aZ=false;if(E.length>50){E.pop();aZ=true}}var aS=T();if("my-transactions"==aS){if(an==0&&ar==0){$("#no-transactions").hide();if(s.tx_display==0){var aR=$("#transactions-compact").show();aL($(C(aV,I,g)),aV).prependTo(aR.find("tbody")).find("div").hide().slideDown("slow");if(aZ){aR.find("tbody tr:last-child").remove()}}else{var aR=$("#transactions-detailed").show();aR.prepend(aV.getHTML(I,g));if(aZ){aR.find("div:last-child").remove()}setupSymbolToggle()}}}else{c()}}else{if(aU.op=="block"){for(var aT=0;aT-1){if(webkitNotifications.checkPermission()==0){webkitNotifications.createNotification(aQ.iconUrl,aQ.title,aQ.body).show()}}else{if(window.Notification){if(Notification.permissionLevel()=="granted"){new Notification(aQ.title,aQ).show()}}}}catch(aR){}};this.makeNotice=function(aR,aU,aT,aS){if(aT==null||aT.length==0){return}console.log(aT);if(aS==null){aS=5000}var aQ=$('
    ');aQ.text(""+aT);if($("#"+aU).length>0){aQ.attr("id",aU);return}$("#notices").append(aQ).hide().fadeIn(200);if(aS>0){(function(){var aV=aQ;setTimeout(function(){aV.fadeOut(250,function(){$(this).remove()})},aS)})()}};this.pkBytesToSipa=function(aQ,aU){var aR=new Bitcoin.ECKey(aQ);while(aQ.length<32){aQ.unshift(0)}aQ.unshift(128);if(aR.getBitcoinAddress().toString()==aU){}else{if(aR.getBitcoinAddressCompressed().toString()==aU){aQ.push(1)}else{throw"Private Key does not match bitcoin address"+aU}}var aS=Crypto.SHA256(Crypto.SHA256(aQ,{asBytes:true}),{asBytes:true});aQ=aQ.concat(aS.slice(0,4));var aT=B58.encode(aQ);return aT};function aA(aQ){return aQ}function aq(aQ){return h.decryptPK(aQ)}function Z(aQ){var aR=h.decodePK(aQ);return Crypto.util.bytesToBase64(aR)}function k(aQ){var aR=h.decodePK(aQ);return Crypto.util.bytesToHex(aR)}this.base58ToSipa=function(aQ,aR){return h.pkBytesToSipa(h.decodePK(aQ),aR)};this.makeWalletJSON=function(aQ){return h.makeCustomWalletJSON(aQ,M,d)};this.makeCustomWalletJSON=function(aV,aR,aX){var aU=aA;if(aV=="base64"){aU=Z}else{if(aV=="hex"){aU=k}else{if(aV=="sipa"){aU=h.base58ToSipa}else{if(aV=="base58"){aU=aq}}}}var aQ='{\n "guid" : "'+aR+'",\n "sharedKey" : "'+aX+'",\n';if(F&&w!=null&&aU==aA){aQ+=' "double_encryption" : '+F+',\n "dpasswordhash" : "'+w+'",\n'}if(s){aQ+=' "options" : '+JSON.stringify(s)+",\n"}aQ+=' "keys" : [\n';for(var aT in I){var aW=$.extend({},I[aT]);if(aW.priv!=null){aW.priv=aU(aW.priv,aW.addr)}for(var aS in aW){if(aW[aS]===null||aW[aS]===undefined){delete aW[aS]}}delete aW.balance;aQ+=JSON.stringify(aW)+",\n";atLeastOne=true}if(atLeastOne){aQ=aQ.substring(0,aQ.length-2)}aQ+="\n ]";if(az(g)>0){aQ+=',\n "address_book" : [\n';for(var aT in g){aQ+=' {"addr" : "'+aT+'",\n';aQ+=' "label" : "'+g[aT]+'"},\n'}aQ=aQ.substring(0,aQ.length-2);aQ+="\n ]"}if(az(b)>0){aQ+=',\n "tx_notes" : '+JSON.stringify(b)}aQ+="\n}";return aQ};this.get_history=function(aR,aQ){BlockchainAPI.get_history(function(aS){H(aS,false);c();if(aR){aR()}},function(){if(aQ){aQ()}},an,ar)};this.deleteAddressBook=function(aQ){delete g[aQ];af();$("#send-coins").find(".tab-pane").trigger("show",true)};function u(aQ){$("#send-coins").find(".tab-pane.active").trigger("show",aQ);if(aQ){BlockchainAPI.get_ticker();$(".send").prop("disabled",false)}}function l(aQ,aR,aV){var aU=aQ.val();aQ.empty();for(var aT in I){var aW=I[aT];if(!aW||aW.tag==2){continue}var aS=aW.label;if(!aS){aS=aW.addr.substring(0,15)+"..."}if(aR||aW.balance>0){aQ.prepend('")}}aQ.prepend('');if(!aV&&aU){aQ.val(aU)}}function r(aS,aT){l(aS.find('select[name="from"]'),false,aT);l(aS.find('select[name="change"]'),true,aT);aS.find('select[name="change"]').prepend('');aS.find(".local-symbol").text(symbol_local.symbol);aS.find(".btc-symbol").text(symbol_btc.symbol);if(aT){aS.find("input").val("");aS.find(".send-value-usd").text(formatSymbol(0,symbol_local)).val("");aS.find(".amount-needed").text(0)}var aR=aS.find(".recipient-container");if(aT){var aV=aR.find(".recipient:first-child").clone();aR.empty().append(aV)}function aQ(){var aW=BigInteger.ZERO;aS.find('input[name="send-value"]').each(function(){aW=aW.add(precisionToSatoshiBN($(this).val()))});return aW}function aU(aW){aW.find('input[name="send-to-address"]').typeahead({source:aw()}).next().click(function(){var aX=$(this).prev();h.scanQRCode(function(aY){console.log(aY);try{new Bitcoin.Address(aY);aX.val(aY)}catch(aZ){aE(aY,aW)}},function(aY){h.makeNotice("error","misc-error",aY)})});aW.find('input[name="send-value"]').unbind().bind("keyup change",function(aX){if(aX.keyCode=="9"){return}aS.find(".amount-needed").text(formatBTC(aQ().toString()));aW.find(".send-value-usd").val(convert($(this).val()*symbol_btc.conversion,symbol_local.conversion)).text(formatSymbol($(this).val()*symbol_btc.conversion,symbol_local))});aW.find(".send-value-usd").text(formatSymbol(0,symbol_local)).unbind().bind("keyup change",function(aX){if(aX.keyCode=="9"){return}aW.find('input[name="send-value"]').val(formatSatoshi(parseFloat($(this).val())*symbol_local.conversion,sShift(symbol_btc),true))})}aR.find(".recipient").each(function(){aU($(this))});aS.find(".remove-recipient").unbind().click(function(){var aW=aR.find(".recipient").length;if(aW>1){if(aW==2){$(this).hide(200)}aR.find(".recipient:last-child").remove()}});aS.find(".add-recipient").unbind().click(function(){var aW=aR.find(".recipient:first-child").clone();aW.appendTo(aR);aU(aW);aS.find(".remove-recipient").show(200)})}this.getAllAddresses=function(){var aR=[];for(var aQ in I){aR.push(aQ)}return aR};this.getPreferredAddress=function(){var aR=null;for(var aQ in I){var aS=I[aQ];if(aR==null){aR=aS}if(aS.priv!=null){if(aR==null){aR=aS}if(aS.tag==null||aS.tag==0){aR=aS;break}}}return aR.addr};function aN(){var aQ=$("#restore-backup-modal");aQ.modal({keyboard:true,backdrop:"static",show:true});aQ.find(".btn.btn-secondary").unbind().click(function(){aQ.modal("hide")})}this.scanQRCode=function(aS,aQ){var aR=$("#qr-code-reader-modal");aR.modal({keyboard:false,backdrop:"static",show:true});loadScript("wallet/qr.code.reader",function(){QRCodeReader.init(aR,function(aT){aR.modal("hide");aS(aT)},function(aT){aR.modal("hide");aQ(aT)})},aQ);aR.find(".btn.btn-secondary").unbind().click(function(){QRCodeReader.stop();aR.modal("hide");aQ()})};this.getActiveAddresses=function(){var aS=[];for(var aQ in I){var aR=I[aQ];if(aR.tag!=2){aS.push(aR.addr)}}return aS};this.getArchivedAddresses=function(){var aS=[];for(var aQ in I){var aR=I[aQ];if(aR.tag==2){aS.push(aR.addr)}}return aS};function at(aT){if(aT!=null){aB=aT;for(var aR in E){var aQ=E[aR];if(aQ.blockHeight!=null&&aQ.blockHeight>0){var aS=aB.height-aQ.blockHeight+1;if(aS<=100){aQ.setConfirmations(aB.height-aQ.blockHeight+1)}else{aQ.setConfirmations(null)}}else{aQ.setConfirmations(0)}}}}function z(aR,aQ){loadScript("wallet/frame-modal",function(){showFrameModal({title:"Transaction Summary",description:"",src:root+"tx-summary/"+aR+"?result="+aQ+"&guid="+M})})}this.deleteNote=function(aQ){delete b[aQ];c();af()};function m(aQ,aR){(function(aT,aV){aT=$(aT);if(!aT.data("popover")){aT.popover({title:'Add Note ',trigger:"manual",content:'
    '})}else{if(aT.data("popover").tip().is(":visible")){return}}aT.popover("show");aT.mouseleave(function(){if(!aT.__timeout){aT.__timeout=setTimeout(function(){aT.popover("hide")},250)}});function aS(){if(aT.__timeout){clearTimeout(aT.__timeout);aT.__timeout=null}}var aU=aT.data("popover").tip().mouseenter(aS);aU.find("textarea").focus(aS);aU.mouseleave(function(){aT.__timeout=setTimeout(function(){aT.popover("hide")},250)});aU.find("i").unbind().click(function(){aT.popover("hide")});aU.find("button").click(function(){var aW=stripHTML(aU.find("textarea").val()).replace(/'/g,"").replace(/"/g,"");if(aW.length>0){b[aV]=aW;af()}c()})})(aQ,aR)}function aG(aQ,aR,aS){(function(aT,aU,aW){aT=$(aT);if(!aT.data("popover")){var aX="Note";if(b[aW]){aX+=' '}$(aT).popover({title:aX,trigger:"manual",content:aU})}else{if(aT.data("popover").tip().is(":visible")){return}}aT.popover("show");aT.mouseleave(function(){if(!aT.__timeout){aT.__timeout=setTimeout(function(){aT.popover("hide")},250)}});var aV=aT.data("popover").tip().mouseenter(function(){if(aT.__timeout){clearTimeout(aT.__timeout);aT.__timeout=null}});aV.find("img").unbind().click(function(){h.deleteNote(aW)});aV.mouseleave(function(){aT.__timeout=setTimeout(function(){aT.popover("hide")},250)})})(aQ,aR,aS)}function C(aT,aY,aV){var aZ=aT.result;var aU='
      ';var aR=true;if(aZ>=0){for(var aS=0;aSNewly Generated Coins'}else{var aW=aY[aQ.addr];if(aW){continue}aR=false;aU+=formatOutput(aQ,aY,aV)}}}else{if(aZ<0){for(var aS=0;aSMoved Between Wallet'}aU+="
    ";var aX=aT.note?aT.note:b[aT.hash];if(aX){aU+=' '}else{aU+=' '}if(aT.time>0){aU+=dateToString(new Date(aT.time*1000))}if(aT.confirmations==0){aU+=' Unconfirmed Transaction! '}else{if(aT.confirmations>0){aU+=' '+aT.confirmations+" Confirmations "}}aU+="
    ";if(aZ>0){aU+='
    '+formatMoney(aZ,true)+"
    "}else{if(aZ<0){aU+='
    '+formatMoney(aZ,true)+"
    "}else{aU+="
    "+formatMoney(aZ,true)+"
    "}}if(aT.balance==null){aU+=""}else{aU+='
    '+formatMoney(aT.balance)+"
    "}return aU}function T(){L();if(au==null){$("#balance").html("Loading...")}else{$("#balance").html(formatSymbol(au,symbol,true));$("#balance2").html(formatSymbol(au,(symbol===symbol_local)?symbol_btc:symbol_local),true)}return j.attr("id")}function c(aQ){var aR=T();if("send-coins"==aR){u(aQ)}else{if("home-intro"==aR){f(aQ)}else{if("receive-coins"==aR){aP(aQ)}else{if("my-transactions"==aR){U(aQ)}}}}}function f(aQ){$("#summary-n-tx").html(K);$("#summary-received").html(formatMoney(ao,true));$("#summary-sent").html(formatMoney(Q,true));$("#summary-balance").html(formatMoney(au,symbol));var aS=h.getPreferredAddress();$("#tweet-for-btc").unbind().click(function(){window.open("https://twitter.com/share?url=https://blockchain.info/wallet&hashtags=tweet4btc,bitcoin,"+aS+"&text=Sign Up For a Free Bitcoin Wallet @ Blockchain.info","","toolbar=0, status=0, width=650, height=360")});$(".paper-wallet-btn").unbind().click(function(){loadScript("wallet/paper-wallet",function(){PaperWallet.showModal()})});if(h.isWatchOnly(aS)){$(".no-watch-only").hide()}else{$(".no-watch-only").show();var aR=$("#my-primary-address");if(aR.text()!=aS){aR.text(aS);loadScript("wallet/jquery.qrcode",function(){$("#my-primary-addres-qr-code").empty().qrcode({width:125,height:125,text:aS})})}}}function R(){var aQ=$("#export-warning").show();var aR=$("#import-export-content").hide();$("#show-import-export").unbind().click(function(){h.getMainPassword(function(){aQ.hide();loadScript("wallet/import-export",function(){ImportExport.init(aR,function(){aR.show()},function(){ac($("#home-intro"))})},function(aS){h.makeNotice("error","misc-error",aS);ac($("#home-intro"))})},function(){ac($("#home-intro"))})})}function U(){var aR=null;var aT=0;if(aR!=null){clearInterval(aR);aR=null}var aQ;if(s.tx_display==0){$("#transactions-detailed").hide();aQ=$("#transactions-compact").show().find("tbody").empty()}else{$("#transactions-compact").hide();aQ=$("#transactions-detailed").empty().show()}if(E.length==0){$("#transactions-detailed, #transactions-compact").hide();$("#no-transactions").show();return}else{$("#no-transactions").hide()}var aS=function(){for(var aX=aT;aX0){aY=""}aV.append($('
  • ← Previous
  • ').click(function(){h.setPage(ar-1)}));for(var aX=0;aX'+aZ+"").click(function(){h.setPage(aZ)}))})(aX)}var aY=" disabled";if(arNext →').click(function(){h.setPage(ar+1)}))}};aS()}this.setPage=function(aQ){ar=aQ;scroll(0,0);h.get_history()};function v(){loadScript("wallet/frame-modal",function(){showFrameModal({title:"Export History",description:"",src:root+"export-history?active="+h.getActiveAddresses().join("|")+"&archived="+h.getArchivedAddresses().join("|")})})}function H(aT,aS){if(!aS&&aT.mixer_fee){x=aT.mixer_fee}if(aT.disable_mixer){$("#shared-addresses,#send-shared").hide()}E.length=0;if(aT.wallet==null){ao=0;Q=0;au=0;K=0;aO=0;return}ao=aT.wallet.total_received;Q=aT.wallet.total_sent;au=aT.wallet.final_balance;K=aT.wallet.n_tx;aO=aT.wallet.n_tx_filtered;for(var aR=0;aR0){aS.checksum=av}$.ajax({type:"GET",url:root+"wallet/wallet.aes.json",data:aS,success:function(aV){if(aV==null||aV.length==0||aV=="Not modified"){if(aT){aT()}return}console.log("Wallet data modified");h.setEncryptedWalletData(aV);if(Y()){h.get_history();c();if(aT){aT()}}else{window.location.reload();if(aQ){aQ()}}},error:function(){if(aQ){aQ()}}})}function Y(){try{if(ag==null||ag.length==0){h.makeNotice("error","misc-error","No Wallet Data To Decrypt");return false}var aT=null;h.decrypt(ag,aD,h.getDefaultPbkdf2Iterations(),function(aU){try{aT=$.parseJSON(aU);return(aT!=null)}catch(aV){return false}});if(aT==null){throw"Error Decrypting Wallet. Please check your password is correct."}if(aT.double_encryption&&aT.dpasswordhash){F=aT.double_encryption;w=aT.dpasswordhash}if(aT.options){$.extend(s,aT.options)}I={};for(var aR=0;aR
    ").qrcode({width:300,height:300,text:"1|"+M+"|"+h.encrypt(d+"|"+Crypto.util.bytesToHex(UTF8.stringToBytes(aD)),aT,ad)}))},function(aT){h.makeNotice("error","misc-error",aT)})}else{if(aQ==0){aR($("
    ").qrcode({width:300,height:300,text:M+"|"+d+"|"+aD}))}}}catch(aS){h.makeNotice("error","misc-error",aS)}})},function(){h.logout()})};this.getMainPassword=function(aR,aQ){if(B>new Date().getTime()-N){return aR(aD)}h.getPassword($("#main-password-modal"),function(aS){if(aD==aS){B=new Date().getTime();if(aR){try{aR(aD)}catch(aT){h.makeNotice("error","misc-error",aT)}}}else{h.makeNotice("error","misc-error","Password incorrect.");if(aQ){try{aQ()}catch(aT){h.makeNotice("error","misc-error",aT)}}}},aQ)};this.getSecondPassword=function(aS,aQ){if(!F||ai!=null){if(aS){try{aS(ai)}catch(aR){h.makeNotice("error","misc-error",aR)}}return}h.getPassword($("#second-password-modal"),function(aT){try{if(aF(aT)){if(aS){try{aS(aT)}catch(aU){console.log(aU);h.makeNotice("error","misc-error",aU)}}}else{h.makeNotice("error","misc-error","Password incorrect.");if(aQ){try{aQ()}catch(aU){h.makeNotice("error","misc-error",aU)}}}}catch(aU){if(aQ){try{aQ()}catch(aU){h.makeNotice("error","misc-error",aU)}}}},aQ)};function a(){if(A){return}var aQ=$("#restore-password");aD=aQ.val();aQ.val("");B=new Date().getTime();if(ag==null||ag.length==0){h.setLoadingText("Validating Authentication key");var aR=$.trim($(".auth-"+q).find(".code").val());if(aR.length==0||aR.length>255){h.makeNotice("error","misc-error","You must enter a Two Factor Authentication code");return false}$.ajax({type:"POST",url:root+"wallet",data:{guid:M,payload:aR,length:aR.length,method:"get-wallet",format:"plain"},success:function(aS){try{if(aS==null||aS.length==0){h.makeNotice("error","misc-error","Server Return Empty Wallet Data");return}h.setEncryptedWalletData(aS);$(".auth-"+q).hide();$(".auth-0").show();if(Y()){n();aH()}}catch(aT){h.makeNotice("error","misc-error",aT)}},error:function(aS){h.makeNotice("error","misc-error",aS.responseText)}})}else{if(Y()){n();aH()}}return true}function O(){$("#not-synced-warning-modal").modal("show").find(".btn.btn-danger").unbind().click(function(){$(this).modal("hide");am=true;c()})}function e(){ap("error");webSocketConnect(y);A=true;$("#tech-faq").hide();$("#intro-text").hide();$("#large-summary").show()}this.quickSendNoUI=function(aS,aR,aQ){loadScript("wallet/signer",function(){h.getSecondPassword(function(){try{var aU=initNewTx();aU.from_addresses=h.getActiveAddresses();aU.to_addresses.push({address:new Bitcoin.Address(aS),value:Bitcoin.Util.parseValue(aR)});aU.addListener(aQ);aU.start()}catch(aT){aQ.on_error(aT)}},function(aT){aQ.on_error(aT)})})};function G(){h.setLoadingText("Sending email backup");$.ajax({type:"POST",url:root+"wallet",data:{guid:M,sharedKey:d,method:"email-backup",format:"plain"},success:function(aQ){h.makeNotice("success","backup-success",aQ)},error:function(aQ){h.makeNotice("error","misc-error",aQ.responseText)}})}function af(aT,aS,aR,aQ){if(ak){clearInterval(ak);ak=null}ak=setTimeout(function(){h.backupWallet(aT,aS,aR,aQ)},3000)}this.backupWallet=function(aX,aW,aQ){if(ak){clearInterval(ak);ak=null}try{if(aX==null){aX="update"}if(az(I)==0){return}var aS=h.makeWalletJSON();var aV=h.encrypt(aS,aD,ad);if(aV.length==0){throw"Error encrypting the JSON output"}var aU=null;h.decrypt(aV,aD,h.getDefaultPbkdf2Iterations(),function(aY){try{aU=$.parseJSON(aY);return(aU!=null)}catch(aZ){return false}});if(aU==null){throw"Error Decrypting Previously encrypted JSON. Not Saving Wallet."}var aR=av;h.setLoadingText("Saving wallet");h.setEncryptedWalletData(aV);$.ajax({type:"POST",url:root+"wallet",data:{guid:M,length:aV.length,payload:aV,sharedKey:d,checksum:av,old_checksum:aR,method:aX},converters:{"* text":window.String,"text html":true,"text json":window.String,"text xml":window.String},success:function(aZ){var a1=false;for(var aY in I){var a0=I[aY];if(a0.tag==1){a0.tag=null;a1=true}}h.makeNotice("success","misc-success",aZ);c();if(aW!=null){aW()}},error:function(aZ){for(var aY in I){var a0=I[aY];if(a0.tag==1){O();break}}if(aZ.responseText==null){h.makeNotice("error","misc-error","Error Saving Wallet",10000)}else{h.makeNotice("error","misc-error",aZ.responseText,10000)}c();if(aQ!=null){aQ()}}})}catch(aT){h.makeNotice("error","misc-error","Error Saving Wallet: "+aT,10000);c();if(aQ!=null){aQ(aT)}else{throw aT}}};function aI(aQ){if(F){if(ai==null){throw"Cannot encrypt private key without a password"}return h.encrypt(aQ,d+ai,s.pbkdf2_iterations)}else{return aQ}return null}this.isBase58=function(aS,aR){for(var aQ=0;aQ58){return false}}return true};this.encrypt=function(aS,aR,aQ){return Crypto.AES.encrypt(aS,aR,{mode:new Crypto.mode.CBC(Crypto.pad.iso10126),iterations:aQ})};this.decrypt=function(aU,aT,aR,aW,aS){try{var aQ=Crypto.AES.decrypt(aU,aT,{mode:new Crypto.mode.CBC(Crypto.pad.iso10126),iterations:aR});if(aQ!=null&&aQ.length>0){if(aW(aQ)){return aQ}}}catch(aV){console.log(aV)}if(aR!=10){try{var aQ=Crypto.AES.decrypt(aU,aT,{mode:new Crypto.mode.CBC(Crypto.pad.iso10126),iterations:10});if(aQ!=null&&aQ.length>0){if(aW(aQ)){return aQ}}}catch(aV){console.log(aV)}}try{var aQ=Crypto.AES.decrypt(aU,aT);if(aQ!=null&&aQ.length>0){if(aW(aQ)){return aQ}}}catch(aV){console.log(aV)}try{var aQ=Crypto.AES.decrypt(aU,aT,{mode:new Crypto.mode.OFB(Crypto.pad.iso7816),iterations:1});if(aQ!=null&&aQ.length>0){if(aW(aQ)){return aQ}}}catch(aV){console.log(aV)}try{var aQ=Crypto.AES.decrypt(aU,aT,{mode:new Crypto.mode.CBC(Crypto.pad.iso10126),iterations:1});if(aQ!=null&&aQ.length>0){if(aW(aQ)){return aQ}}}catch(aV){console.log(aV)}if(aS!=null){aS()}return null};this.setGUID=function(aS,aQ){console.log("Set GUID "+aS);if(A){throw"Cannot Set GUID Once Initialized"}h.setLoadingText("Changing Wallet Identifier");$("#initial_error,#initial_success").remove();var aR=$("#restore-wallet-continue");aR.prop("disabled",true);$.ajax({type:"GET",dataType:"json",url:root+"wallet/"+aS,data:{format:"json",resend_code:aQ},success:function(aT){aR.prop("disabled",false);$(".auth-"+q).hide();X=aT.extra_seed;M=aT.guid;q=aT.auth_type;aJ=aT.real_auth_type;if(aT.language){V=aT.language}h.setEncryptedWalletData(aT.payload);war_checksum=aT.war_checksum;setLocalSymbol(aT.symbol_local);$("#restore-guid").val(M);$(".auth-"+q).show();$(".recover-wallet-btn").prop("disabled",false).click(function(){window.location=root+"wallet/forgot-password?guid="+M});$("#reset-two-factor-btn").prop("disabled",false).show().click(function(){window.location=root+"wallet/reset-two-factor?guid="+M});if(aT.initial_error){h.makeNotice("error","misc-error",aT.initial_error)}if(aT.initial_success){h.makeNotice("success","misc-success",aT.initial_success)}MyStore.get("guid",function(aU){if(aU!=M){MyStore.clear();if(M!=D){MyStore.put("guid",M)}}})},error:function(aT){console.log("Set GUID Success");aR.prop("disabled",false);MyStore.get("guid",function(aU){if(aU==aS&&ag){h.makeNotice("error","misc-error","Error Contacting Server. Using Local Wallet Cache.");M=aU;av=ae();q=0;$("#restore-guid").val(M);$(".auth-"+q).show();return}try{var aW=$.parseJSON(aV.responseText);if(aW.initial_error){h.makeNotice("error","misc-error",aW.initial_error);return}}catch(aV){}if(aV.responseText){h.makeNotice("error","misc-error",aV.responseText)}else{h.makeNotice("error","misc-error","Error changing wallet identifier")}})}})};function i(aQ){var aR=B58.encode(aQ);return aI(aR)}this.decryptPK=function(aQ){if(F){if(ai==null){throw"Cannot decrypt private key without a password"}return h.decrypt(aQ,d+ai,s.pbkdf2_iterations,h.isBase58)}else{return aQ}return null};this.decodePK=function(aR){if(!aR){throw"null PK passed to decodePK"}var aQ=h.decryptPK(aR);if(aQ!=null){return B58.decode(aQ)}return null};this.signmessage=function(aQ,aS){var aU=I[aQ];if(!aU.priv){throw"Cannot sign a watch only address"}var aT=h.decodePK(aU.priv);var aR=new Bitcoin.ECKey(aT);return Bitcoin.Message.signMessage(aR,aS,aU.addr)};function aF(aR){var aQ=Crypto.SHA256(d+aR,{asBytes:true});var aU=ab(aQ,s.pbkdf2_iterations-1);if(aU==w){ai=aR;return true}if(s.pbkdf2_iterations!=10){var aS=ab(aQ,10-1);if(aS==w){ai=aR;w=aU;return true}}if(Crypto.util.bytesToHex(aQ)==w){ai=aR;w=aU;return true}var aT=Crypto.SHA256(aR);if(aT==w){ai=aR;w=aU;return true}return false}this.runCompressedCheck=function(){var aQ=[];var aS={};for(var aT in I){var aX=I[aT];if(aX.priv!=null){var aW=h.decodePK(aX.priv);var aU=new Bitcoin.ECKey(aW);var aR=aU.getBitcoinAddress().toString();var aV=aU.getBitcoinAddressCompressed().toString();if(aX.addr!=aR){aS[aR]=aX.priv;aQ.push(aR)}if(aX.addr!=aV){aS[aV]=aX.priv;aQ.push(aV)}}}if(aQ.length==0){alert("to_check length == 0")}BlockchainAPI.get_balances(aQ,function(aZ){var a0=0;for(var aY in aZ){var a1=aZ[aY].final_balance;if(a1>0){alert(formatBTC(a1)+" claimable in address "+aY+" (Import PK : "+h.base58ToSipa(aS[aY],aY)+")")}a0+=a1}alert(formatBTC(a1)+" found in compressed addresses")})};this.checkAllKeys=function(aQ){for(var aR in I){var aV=I[aR];if(aV.addr==null){throw"Null Address Found in wallet "+aR}if(aV.addr.toString()==null){throw"Error decoding wallet address "+aV.addr}if(aV.priv!=null){var aU=h.decodePK(aV.priv);var aT=new Bitcoin.ECKey(aU);var aS=aT.getBitcoinAddress().toString();if(aS!=aV.addr&&aT.getBitcoinAddressCompressed().toString()!=aV.addr){throw"Private key does not match bitcoin address "+aV.addr+" != "+aS}if(aQ){aV.priv=i(aU)}}}h.makeNotice("success","wallet-success","Wallet verified.")};this.setMainPassword=function(aQ){h.getMainPassword(function(){aD=aQ;h.backupWallet("update",function(){h.logout()},function(){h.logout()})})};function ac(aQ){if(aQ===j){return}if(j!=null){if($("#"+j.attr("id")+"-btn").length>0){$("#"+j.attr("id")+"-btn").parent().attr("class","")}j.hide()}j=aQ;j.show();if($("#"+j.attr("id")+"-btn").length>0){$("#"+j.attr("id")+"-btn").parent().attr("class","active")}c(true)}function az(aS){var aR=0,aQ;for(aQ in aS){aR++}return aR}function aa(aQ){I[aQ].priv=null}function ah(){if(az(I)>=ax){h.makeNotice("error","misc-error","We currently support a maximum of "+ax+" private keys, please remove some unused ones.");return true}return false}function aM(aS,aQ){var aR=I[aS];if(!aR||aR.length==0){I[aS]={addr:aS,priv:aQ,balance:0};return true}else{if(!aR.priv&&aQ){aR.priv=aQ;return true}}return false}function o(){var aS=$("#add-address-book-entry-modal");aS.modal({keyboard:true,backdrop:"static",show:true});var aQ=aS.find('input[name="label"]');var aR=aS.find('input[name="address"]');aQ.val("");aR.val("");aS.find(".btn.btn-primary").unbind().click(function(){aS.modal("hide");var aU=stripHTML(aQ.val());var aT=stripHTML(aR.val());if(aU.length==0||aT.length==0){h.makeNotice("error","misc-error","You must enter an address and label for the address book entry");return false}var aW;try{aW=new Bitcoin.Address(aT);if(aW==null){throw"Null address"}}catch(aV){h.makeNotice("error","misc-error","Bitcoin address invalid, please make sure you entered it correctly");return false}if(g[aT]!=null){h.makeNotice("error","misc-error","Bitcoin address already exists");return false}h.makeNotice("success","misc-success","Added Address book entry");h.addAddressBookEntry(aT,aU);af();$("#send-coins").find(".tab-pane").trigger("show",true)});aS.find(".btn.btn-secondary").unbind().click(function(){aS.modal("hide")})}this.logout=function(){if(S){clearTimeout(S)}if(M==D){window.location=root+"wallet/logout"}else{$.ajax({type:"GET",url:root+"wallet/logout",data:{format:"plain"},success:function(aQ){window.location.reload()},error:function(){window.location.reload()}})}};function al(aW){var aY=$("#delete-address-modal");aY.modal({keyboard:true,backdrop:"static",show:true});aY.find(".btn.btn-primary").hide();aY.find(".btn.btn-danger").hide();$("#change-mind").hide();aY.find("#to-delete-address").html(aW.join(" "));aY.find("#delete-balance").empty();var aS=aY.find("#delete-balance");var aQ=[];for(var aV in aW){var aX=aW[aV];if(I[aX]&&I[aX].priv){aQ.push(aW[aV])}}BlockchainAPI.get_balance(aQ,function(aZ){aY.find(".btn.btn-primary").show(200);aY.find(".btn.btn-danger").show(200);aS.html("Balance "+formatBTC(aZ));if(aZ>0){aS.css("color","red")}else{aS.css("color","black")}},function(){aY.find(".btn.btn-primary").show(200);aY.find(".btn.btn-danger").show(200);aS.text("Error Fetching Balance")});var aT=false;var aV=0;var aR=null;var aU=10;changeMind=function(){$("#change-mind").show();$("#change-mind-time").text(aU-aV)};aY.find(".btn.btn-primary").unbind().click(function(){changeMind();aY.find(".btn.btn-primary").hide();aY.find(".btn.btn-danger").hide();aR=setInterval(function(){if(aT){return}++aV;changeMind();if(aV==aU){$("#delete-address-modal").modal("hide");h.makeNotice("warning","warning-deleted","Private Key Removed From Wallet");for(var aZ in aW){aa(aW[aZ])}c();h.backupWallet();clearInterval(aR)}},1000)});aY.find(".btn.btn-danger").unbind().click(function(){changeMind();aY.find(".btn.btn-primary").hide();aY.find(".btn.btn-danger").hide();aR=setInterval(function(){if(aT){return}++aV;changeMind();if(aV==aU){try{$("#delete-address-modal").modal("hide");h.makeNotice("warning","warning-deleted","Address & Private Key Removed From Wallet");for(var aZ in aW){h.deleteAddress(aW[aZ])}c();h.backupWallet("update",function(){h.get_history()})}finally{clearInterval(aR)}}},1000)});aY.unbind().on("hidden",function(){if(aR){aT=true;clearInterval(aR);aR=null}});aY.find(".btn.btn-secondary").unbind().click(function(){aY.modal("hide")})}function aw(){var aS=[];for(var aQ in g){aS.push(g[aQ])}for(var aQ in I){var aR=I[aQ];if(aR.tag!=2&&aR.label){aS.push(aR.label)}}return aS}function P(aQ){h.getSecondPassword(function(){var aS=$("#sweep-address-modal");aS.modal("show");BlockchainAPI.get_balance(aQ,function(aT){aS.find(".balance").text("Amount: "+formatBTC(aT))},function(){aS.find(".balance").text("Error Fetching Balance")});var aR=aS.find('select[name="change"]');l(aR,true);aS.find(".btn.btn-primary").unbind().click(function(){loadScript("wallet/signer",function(){BlockchainAPI.get_balance(aQ,function(aT){var aU=initNewTx();aU.fee=aU.base_fee;aU.to_addresses.push({address:new Bitcoin.Address($.trim(aR.val())),value:BigInteger.valueOf(aT).subtract(aU.fee)});aU.from_addresses=aQ;aU.start()},function(){h.makeNotice("error","misc-error","Error Getting Address Balance")})});aS.modal("hide")});aS.find(".btn.btn-secondary").unbind().click(function(){aS.modal("hide")})})}function ay(){try{$(".pop").popover({offset:10,placement:"bottom"})}catch(aQ){}}function n(){$("#add-address-book-entry-btn").click(function(){o()});$("#home-intro-btn").click(function(){ac($("#home-intro"))});$("#my-transactions-btn").click(function(){ac($("#my-transactions"))});$("#send-coins-btn").click(function(){ac($("#send-coins"))});$("#import-export-btn").click(function(){ac($("#import-export"));R()});$("#chord-diagram").click(function(){window.open(root+"taint/"+h.getActiveAddresses().join("|"),null,"width=850,height=850")});$("#verify-message").click(function(){loadScript("wallet/address_modal",function(){verifyMessageModal()})});$("#generate-cold-storage").click(function(){loadScript("wallet/paper-wallet",function(){PaperWallet.showColdStorageModal()},null,true)});$("#group-received").click(function(){loadScript("wallet/taint_grouping",function(){try{loadTaintData()}catch(aQ){h.makeNotice("error","misc-error","Unable To Load Taint Grouping Data")}})});$("#my-account-btn").click(function(){ac($("#my-account"));var aQ=$("#account-settings-warning").show();var aR=$("#my-account-content").hide();$("#show-account-settings").unbind().click(function(){h.getMainPassword(function(){aQ.hide();loadScript("wallet/account",function(){AccountSettings.init(aR,function(){aR.show()},function(){ac($("#home-intro"))})},function(aS){h.makeNotice("error","misc-error",aS);ac($("#home-intro"))})},function(){ac($("#home-intro"))})})});$("#enable_archived_checkbox").change(function(){var aQ=$(this).is(":checked");$(".archived_checkbox").prop("checked",false);$(".archived_checkbox").prop("disabled",!aQ);$("#archived-sweep").prop("disabled",!aQ);$("#archived-delete").prop("disabled",!aQ)});$("#shared-addresses").on("show",function(){var aQ=$(this);loadScript("wallet/shared-addresses",function(){buildSharedTable(aQ)})});$("#active-addresses").on("show",function(){var aW=$(this).find("table:first");aW.find("tbody:gt(0)").remove();var aT=aW.find("tbody").empty();for(var aV in I){var aX=I[aV];if(aX.tag==2||(aX.tag==1&&!am)){continue}var aU="";if(aX.tag==1){aU=' (Not Synced)'}else{if(aX.priv==null){aU=' (Watch Only)'}}var aQ="";var aS=aX.addr;if(aX.label!=null){aS=aX.label;aQ=' - '+aX.addr+""}var aR=$('
    '+aS+""+aQ+" "+aU+'
    '+formatMoney(aX.balance,true)+' ');(function(aY){aR.find(".act-archive").click(function(){h.archiveAddr(aY)});aR.find(".act-label").click(function(){loadScript("wallet/address_modal",function(){showLabelAddressModal(aY)})});aR.find(".act-qr").click(function(){loadScript("wallet/address_modal",function(){showAddressModalQRCode(aY)})});aR.find(".act-pubkey").click(function(){h.getSecondPassword(function(){var aZ=h.getPrivateKey(aY);if(aZ==null){h.makeNotice("eror","misc-error","Public Key Unknown");return}var a0=new Bitcoin.ECKey(h.decodePK(aZ));if(a0.getBitcoinAddressCompressed().toString()==aY){var a1=a0.getPubCompressed()}else{var a1=a0.getPub()}h.makeNotice("success","pub-key","Public Key of "+aY+" is "+Crypto.util.bytesToHex(a1),20000)})});aR.find(".act-sign").click(function(){loadScript("wallet/address_modal",function(){showAddressModalSignMessage(aY)})});aR.find(".act-request").click(function(){loadScript("wallet/frame-modal",function(){showFrameModal({title:"Create Payment Request",description:"Request Payment into address "+aY+"",src:root+"payment_request?address="+aY})})})})(aX.addr);if(aX.balance>0&&aX.priv){aW.prepend(aR)}else{aW.append(aR)}}ay()});$("#archived-addresses").on("show",function(){$("#enable_archived_checkbox").prop("checked",false);$("#archived-delete").prop("disabled",true);$("#archived-sweep").prop("disabled",true);$("#archived-addr tbody").empty();var aR=$(this).find("tbody");var aQ=h.getArchivedAddresses();var aS=function(){aR.empty();for(var aW in aQ){var aY=I[aQ[aW]];if(aY.tag!=2||(aY.tag==1&&!am)){continue}var aV="";if(aY.priv==null){aV=' (Watch Only)'}var aT="";var aU=aY.addr;if(aY.label!=null){aU=aY.label;aT=' - '+aY.addr+""}var aX=$('
    '+aU+""+aT+" "+aV+'
    '+formatBTC(aY.balance)+'');(function(aZ){aX.find(".act-unarchive").click(function(){h.unArchiveAddr(aZ)})})(aY.addr);if(aY.balance>0&&aY.priv){aR.prepend(aX)}else{aR.append(aX)}}};aS();BlockchainAPI.get_balances(aQ,function(aT){aS()},function(aT){h.makeNotice("error","misc-error",aT)})});$("#archived-sweep").click(function(){var aQ=[];$(".archived_checkbox:checked").each(function(){var aR=I[$(this).val()];if(aR.priv==null){h.makeNotice("error","misc-error","Cannot Sweep Watch Only Address");return}aQ.push(aR.addr)});if(aQ.length==0){return}P(aQ)});$("#archived-delete").click(function(){var aQ=[];$(".archived_checkbox:checked").each(function(){aQ.push($(this).val())});if(aQ.length==0){return}al(aQ)});$("#shared-never-ask").click(function(){SetCookie("shared-never-ask",$(this).is(":checked"))});$(".bitstamp-btn").click(function(){window.open(root+"r?url=https://www.bitstamp.net/?blockchaininfo=1",null,"scroll=1,status=1,location=1,toolbar=1,width=1000,height=700")});$(".deposit-btn").click(function(){var aS=$(this);var aR=h.getPreferredAddress();var aQ=aS.data("extra");if(aQ==null){aQ=""}loadScript("wallet/frame-modal",function(){showFrameModal({title:aS.data("title"),description:"Deposit into address "+aR+"",top_right:'Have Questions? Read How It Works',src:root+"deposit?address="+aR+"&ptype="+aS.data("type")+"&guid="+M+"&sharedKey="+d+aQ})})});$(".withdraw-btn").click(function(){var aQ=$(this);h.getSecondPassword(function(){var aR=h.getPreferredAddress();loadScript("wallet/frame-modal",function(){showFrameModal({title:aQ.data("title"),description:"Your Wallet Balance is "+formatBTC(au)+"",src:root+"withdraw?method="+aQ.data("type")+"&address="+aR+"&balance="+au+"&guid="+M+"&sharedKey="+d})})})});$("#logout").click(h.logout);$("#refresh").click(function(){J();h.get_history()});$("#summary-n-tx-chart").click(function(){window.open(root+"charts/n-transactions?show_header=false&address="+h.getActiveAddresses().join("|"),null,"scroll=0,status=0,location=0,toolbar=0,width=1000,height=700")});$("#summary-received-chart").click(function(){window.open(root+"charts/received-per-day?show_header=false&address="+h.getActiveAddresses().join("|"),null,"scroll=0,status=0,location=0,toolbar=0,width=1000,height=700")});$("#summary-balance-chart").click(function(){window.open(root+"charts/balance?show_header=false&address="+h.getActiveAddresses().join("|"),null,"scroll=0,status=0,location=0,toolbar=0,width=1000,height=700")});$("#new-addr").click(function(){try{J(function(){h.getSecondPassword(function(){var aS=h.generateNewKey();if(!aS){return}var aR=aS.getBitcoinAddress().toString();h.backupWallet("update",function(){h.makeNotice("info","new-address","Generated new Bitcoin Address "+aR);loadScript("wallet/address_modal",function(){showLabelAddressModal(aR)})})})})}catch(aQ){h.makeNotice("error","misc-error",aQ)}});$(".tx_filter a").click(function(){ar=0;an=$(this).data("value");h.get_history()});$(".tx_display a").click(function(){var aQ=$(this).data("value");if(aQ=="export"){v();return}s.tx_display=aQ;c();af()});$("#email-backup-btn").click(function(){G()});$("#dropbox-backup-btn").click(function(){window.open(root+"wallet/dropbox-login?guid="+M+"&sharedKey="+d)});$("#gdrive-backup-btn").click(function(){window.open(root+"wallet/gdrive-login?guid="+M+"&sharedKey="+d)});$("#large-summary").click(function(){toggleSymbol();c()});$("#send-quick").on("show",function(aS,aR){var aQ=$(this);r(aQ,aR);aQ.find(".send").unbind().click(function(){loadScript("wallet/signer",function(){startTxUI(aQ,"quick",initNewTx())})})});$("#send-email").on("show",function(aS,aR){var aQ=$(this);r(aQ,aR);aQ.find(".send").unbind().click(function(){loadScript("wallet/signer",function(){startTxUI(aQ,"email",initNewTx())})})});$("#send-shared").on("show",function(aS,aR){var aQ=$(this);r(aQ,aR);aQ.find(".mixer_fee").text(x);aQ.find(".fees,.free,.bonus").show();if(x<0){aQ.find(".fees,.free").hide()}else{if(x==0){aQ.find(".fees,.bonus").hide()}else{aQ.find(".free,.bonus").hide()}}aQ.find(".send").unbind().click(function(){loadScript("wallet/signer",function(){startTxUI(aQ,"shared",initNewTx())})});aQ.find(".shared-fees").text("0.00");aQ.find('input[name="send-before-fees"]').unbind().bind("keyup change",function(){var aU=parseFloat($(this).val());var aT=0;if(aU>0){if(x>0){aT=parseFloat(aU+((aU/100)*x))}else{aT=parseFloat(aU);aQ.find(".bonus-value").text(formatPrecision((Math.min(aU,precisionFromBTC(200))/100)*x))}}if(precisionToBTC(aU)<0.1||precisionToBTC(aU)>250){aQ.find(".shared-fees").text("0.00");aQ.find(".send").prop("disabled",true)}else{aQ.find(".shared-fees").text(formatBTC(aT*symbol_btc.conversion));aQ.find(".send").prop("disabled",false)}aQ.find('input[name="send-value"]').val(aT).trigger("keyup")})});$("#send-custom").on("show",function(aS,aR){var aQ=$(this);r(aQ,aR);aQ.find(".send").unbind().click(function(){loadScript("wallet/signer",function(){startTxUI(aQ,"custom",initNewTx())})});aQ.find('select[name="from"]').unbind().change(function(){var aV=0;var aT=$(this).val();for(var aU in aT){if(aT[aU]=="any"){$(this).val("any");aV=au;break}else{var aW=I[aT[aU]];if(aW&&aW.balance){aV+=aW.balance}}}aQ.find(".amount-available").text(formatBTC(aV))}).trigger("change");aQ.find(".reset").unbind().click(function(){r(aQ,true);aQ.find('select[name="from"]').trigger("change")})});$("#send-satoshi-dice,#send-btcdice-dice").on("show",function(aS,aR){var aQ=this;loadScript("wallet/dicegames",function(){try{DICEGame.init($(aQ))}catch(aT){h.makeNotice("error","misc-error","Unable To Load Dice Bets")}},function(aT){h.makeNotice("error","misc-error",aT)})});$("#send-sms").on("show",function(aS,aR){if(aR){return}var aQ=$(this);r(aQ);$.ajax({type:"GET",url:resource+"wallet/country_codes.html",success:function(aT){aQ.find('select[name="sms-country-code"]').html(aT)},error:function(){h.makeNotice("error","misc-error","Error Downloading SMS Country Codes")}});aQ.find(".send").unbind().click(function(){loadScript("wallet/signer",function(){var aT=initNewTx();startTxUI(aQ,"sms",aT)})})});$("#address-book").on("show",function(){var aR=$("#address-book-tbl tbody");if(az(g)>0){aR.empty();for(var aQ in g){var aS=$(""+g[aQ]+'
    '+aQ+'
    ');(function(aT){aS.find(".act-delete").click(function(){h.deleteAddressBook(aT)})})(aQ);aR.append(aS)}}});$('a[data-toggle="tab"]').unbind().on("show",function(aQ){$(aQ.target.hash).trigger("show")});$("#receive-coins-btn").click(function(){ac($("#receive-coins"))});$(".show_adv").click(function(){$(".modal:visible").center()});$(".download-backup-btn").show();ay()}function p(){$(".resend-code").click(function(){h.setGUID(M,true)});$(".download-backup-btn").toggle(ag!=null).click(function(){$(this).attr("download","wallet.aes.json");if(!ag){h.makeNotice("error","error","No Wallet Data to Download");return}var aR=("download" in document.createElement("a"));if(window.Blob&&window.URL&&aR){var aS=new Blob([ag]);var aT=window.URL.createObjectURL(aS);$(this).attr("href",aT)}else{var aQ=window.open(null,null,"width=700,height=800,toolbar=0");aQ.document.write('
    '+ag+"
    ")}aN()});$(".auth-0,.auth-1,.auth-2,.auth-3,.auth-4,.auth-5").unbind().keypress(function(aQ){if(aQ.keyCode==13){aQ.preventDefault();$("#restore-wallet-continue").click()}});$("#restore-wallet-continue").unbind().click(function(aR){aR.preventDefault();var aQ=$.trim($("#restore-guid").val());if(aQ.length==0){return}if(M!=aQ){h.setGUID(aQ,false)}else{a()}});$(".modal").on("show",function(){L();$(this).center()}).on("shown",function(){L();$(this).center()})}function aj(aR){var aS=Crypto.SHA256(aR+"?");switch(aS.slice(0,2)){case"00":var aT=Crypto.SHA256(aR,{asBytes:true});return aT;break;case"01":var aQ=Crypto.util.hexToBytes(aS.slice(2,4))[0];var aU=Math.round(Math.pow(2,(aQ/4)));var aT=Crypto.PBKDF2(aR,"Satoshi Nakamoto",32,{iterations:aU,asBytes:true});return aT;break;default:console.log("invalid key");break}}function aC(){var aS,aQ="";if(window.getSelection){aS=window.getSelection();if(aS.rangeCount){var aT=aS.getRangeAt(0).cloneContents();var aR=document.createElement("div");aR.appendChild(aT);aQ=aR.innerText}}else{if(document.selection&&document.selection.type=="Text"){aQ=document.selection.createRange().htmlText}}return aQ}this.detectPrivateKeyFormat=function(aR){if(/^5[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{50}$/.test(aR)){return"sipa"}if(/^[LK][123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{51}$/.test(aR)){return"compsipa"}if(/^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{44}$/.test(aR)||/^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43}$/.test(aR)){return"base58"}if(/^[A-Fa-f0-9]{64}$/.test(aR)){return"hex"}if(/^[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789=+\/]{44}$/.test(aR)){return"base64"}if(/^6P[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{56}$/.test(aR)){return"bip38"}if(/^S[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{21}$/.test(aR)||/^S[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{25}$/.test(aR)||/^S[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{29}$/.test(aR)||/^S[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{30}$/.test(aR)){var aQ=Crypto.SHA256(aR+"?",{asBytes:true});if(aQ[0]===0||aQ[0]===1){return"mini"}}throw"Unknown Key Format "+aR};this.privateKeyStringToKey=function(aR,aT){var aQ=null;if(aT=="base58"){aQ=B58.decode(aR)}else{if(aT=="base64"){aQ=Crypto.util.base64ToBytes(aR)}else{if(aT=="hex"){aQ=Crypto.util.hexToBytes(aR)}else{if(aT=="mini"){aQ=aj(aR)}else{if(aT=="sipa"){var aS=B58.decode(aR);aS.shift();aQ=aS.slice(0,aS.length-4)}else{if(aT=="compsipa"){var aS=B58.decode(aR);aS.shift();aS.pop();aQ=aS.slice(0,aS.length-4)}else{throw"Unsupported Key Format"}}}}}}if(aQ.length!=32){throw"Result not 32 bytes in length"}return new Bitcoin.ECKey(aQ)};$(document).ready(function(){if(!$.isEmptyObject({})){h.makeNotice("error","error","Object.prototype has been extended by a browser extension. Please disable this extensions and reload the page.");return}$("input,button,select").attr("autocomplete","off");var aR=$(document.body);function aS(){if(M&&M.length==36){setTimeout(function(){h.setGUID(M,false)},10)}}M=aR.data("guid");d=aR.data("sharedkey");if(h.skip_init){return}MyStore.get("payload",function(aX){if(ag==null&&aX!=null){ag=aX;av=ae()}});if((!M||M.length==0)&&(isExtension||window.location.href.indexOf("/login")>0)){MyStore.get("guid",function(aX){M=aX;aS()})}else{aS()}if(top.location!=self.location){top.location=self.location.href}aR.click(function(){if(S){clearTimeout(S);S=setTimeout(h.logout,h.getLogoutTime())}rng_seed_time()}).keypress(function(){if(S){clearTimeout(S);S=setTimeout(h.logout,h.getLogoutTime())}rng_seed_time()}).mousemove(function(aX){if(aX){rng_seed_int(aX.clientX*aX.clientY)}});p();$(".auth-"+q).show();j=$("#restore-wallet");j.show();var aT=false;var aW=17,aV=86,aQ=67,aU=67;$(document).keydown(function(aY){try{if(aY.keyCode==aW||aY.keyCode==aU){aT=true}if(aT&&aY.keyCode==aQ){var aX=$.trim(aC());var aZ=I[aX];if(aZ!=null){if(aZ.priv==null){$("#watch-only-copy-warning-modal").modal("show")}else{if(aZ.tag==1){O()}}}}}catch(aY){console.log(aY)}}).keyup(function(aX){if(aX.keyCode==aW||aX.keyCode==aU){aT=false}}).ajaxStart(function(){ap("loading_start");$(".loading-indicator").fadeIn(200)}).ajaxStop(function(){ap("loading_stop");$(".loading-indicator").hide()})});function aP(){$("#receive-coins").find(".tab-pane.active").trigger("show");setupToggle()}}; \ No newline at end of file diff --git a/extension/html/bg.html b/extension/html/bg.html index 5c50471..1146725 100644 --- a/extension/html/bg.html +++ b/extension/html/bg.html @@ -11,6 +11,7 @@ +