diff --git a/index.html b/index.html index 323edc3..f42d700 100644 --- a/index.html +++ b/index.html @@ -338,7 +338,16 @@ - +
+ + + +

@@ -383,7 +392,17 @@ - +
+ + + + +

@@ -609,7 +628,7 @@ (80 byte limit, 40 bytes recommended)

- +

When using this option you may enter a hex string or address into the address field on the output tab.

@@ -1334,6 +1353,7 @@

Select which network you'd like to use for key pair generation.

diff --git a/js/coin.js b/js/coin.js index 87a94a6..b25c197 100644 --- a/js/coin.js +++ b/js/coin.js @@ -22,7 +22,8 @@ coinjs.developer = '3K1oFZMks41C7qDYBsr72SYjapLqDuSYuN'; //bitcoin /* bit(coinb.in) api vars */ - coinjs.host = ('https:'==document.location.protocol?'https://':'http://')+'coinb.in/api/'; + coinjs.hostname = ((document.location.hostname.split(".")[(document.location.hostname.split(".")).length-1]) == 'onion') ? '4zpinp6gdkjfplhk.onion' : 'coinb.in'; + coinjs.host = ('https:'==document.location.protocol?'https://':'http://')+coinjs.hostname+'/api/'; coinjs.uid = '1'; coinjs.key = '12345678901234567890123456789012'; diff --git a/js/coinbin.js b/js/coinbin.js index 01b0cce..759ddd0 100644 --- a/js/coinbin.js +++ b/js/coinbin.js @@ -344,7 +344,22 @@ $(document).ready(function() { $("#aes256passStatus").removeClass("hidden"); } $("#newPrivKeyEnc").val(CryptoJS.AES.encrypt(coin.wif, $("#aes256pass").val())+''); + }); + + $("#newPaperwalletBtn").click(function(){ + if($("#newBitcoinAddress").val()==""){ + $("#newKeysBtn").click(); + } + var paperwallet = window.open(); + paperwallet.document.write('

BTC PaperWallet


Address (Share)

'+$("#newBitcoinAddress").val()+'


Public Key

'+$("#newPubKey").val()+'


Private Key (KEEP SECRET!)

'+$("#newPrivKey").val()+'

'); + paperwallet.document.close(); + paperwallet.focus(); + new QRCode(paperwallet.document.getElementById("qraddress"), {text: $("#newBitcoinAddress").val(), width: 125, height: 125}); + new QRCode(paperwallet.document.getElementById("qrpubkey"), {text: $("#newPubKey").val(), width: 125, height: 125}); + new QRCode(paperwallet.document.getElementById("qrprivkey"), {text: $("#newPrivKey").val(), width: 125, height: 125}); + paperwallet.print(); + paperwallet.close(); }); $("#newBrainwallet").click(function(){ @@ -392,6 +407,22 @@ $(document).ready(function() { coinjs.compressed = compressed; }); + $("#newSegwitPaperwalletBtn").click(function(){ + if($("#newSegWitAddress").val()==""){ + $("#newSegWitKeysBtn").click(); + } + + var paperwallet = window.open(); + paperwallet.document.write('

BTC SegWit PaperWallet


Address (Share)

'+$("#newSegWitAddress").val()+'


Public Key

'+$("#newSegWitPubKey").val()+'


Redeem Script

'+$("#newSegWitRedeemScript").val()+'


Private Key (KEEP SECRET!)

'+$("#newSegWitPrivKey").val()+'

'); + paperwallet.document.close(); + paperwallet.focus(); + new QRCode(paperwallet.document.getElementById("qraddress"), {text: $("#newSegWitAddress").val(), width: 110, height: 110}); + new QRCode(paperwallet.document.getElementById("qrpubkey"), {text: $("#newSegWitPubKey").val(), width: 110, height: 110}); + new QRCode(paperwallet.document.getElementById("qrredeem"), {text: $("#newSegWitRedeemScript").val(), width: 110, height: 110}); + new QRCode(paperwallet.document.getElementById("qrprivkey"), {text: $("#newSegWitPrivKey").val(), width: 110, height: 110}); + paperwallet.print(); + paperwallet.close(); + }); /* new -> multisig code */ @@ -1037,11 +1068,13 @@ $(document).ready(function() { $("#redeemFromAddress").removeClass('hidden').html(' Retrieved unspent inputs from address '+redeem.addr+''); for(var i in data.data.txs){ var o = data.data.txs[i]; - var tx = ((o.txid).match(/.{1,2}/g).reverse()).join("")+''; - var n = o.output_no; - var script = (redeem.redeemscript==true) ? redeem.decodedRs : o.script_hex; - var amount = o.value; - addOutput(tx, n, script, amount); + var tx = ((""+o.txid).match(/.{1,2}/g).reverse()).join("")+''; + if(tx.match(/^[a-f0-9]+$/)){ + var n = o.output_no; + var script = (redeem.redeemscript==true) ? redeem.decodedRs : o.script_hex; + var amount = o.value; + addOutput(tx, n, script, amount); + } } } else { $("#redeemFromStatus").removeClass('hidden').html(' Unexpected error, unable to retrieve unspent outputs.'); @@ -1181,7 +1214,7 @@ $(document).ready(function() { rawSubmitDefault(this); }); - // broadcast transaction vai coinbin (default) + // broadcast transaction via coinbin (default) function rawSubmitDefault(btn){ var thisbtn = btn; $(thisbtn).val('Please wait, loading...').attr('disabled',true); @@ -1196,8 +1229,7 @@ $(document).ready(function() { success: function(data) { $("#rawTransactionStatus").html(unescape($(data).find("response").text()).replace(/\+/g,' ')).removeClass('hidden'); if($(data).find("result").text()==1){ - $("#rawTransactionStatus").addClass('alert-success').removeClass('alert-danger'); - $("#rawTransactionStatus").html('txid: '+$(data).find("txid").text()); + $("#rawTransactionStatus").addClass('alert-success').removeClass('alert-danger').removeClass("hidden").html(' TXID: ' + $(data).find("txid").text() + '
View on Blockchain'); } else { $("#rawTransactionStatus").addClass('alert-danger').removeClass('alert-success').prepend(' '); } @@ -1223,8 +1255,7 @@ $(document).ready(function() { success: function(data) { $("#rawTransactionStatus").html(unescape($(data).find("response").text()).replace(/\+/g,' ')).removeClass('hidden'); if($(data).find("result").text()==1){ - $("#rawTransactionStatus").addClass('alert-success').removeClass('alert-danger'); - $("#rawTransactionStatus").html('txid: '+$(data).find("txid").text()); + $("#rawTransactionStatus").addClass('alert-success').removeClass('alert-danger').removeClass("hidden").html(' TXID: ' + $(data).find("txid").text() + '
View on Blockchain Explorer'); } else { $("#rawTransactionStatus").addClass('alert-danger').removeClass('alert-success').prepend(' '); } @@ -1253,7 +1284,7 @@ $(document).ready(function() { }, success: function(data) { if(data.status && data.data.txid){ - $("#rawTransactionStatus").addClass('alert-success').removeClass('alert-danger').removeClass("hidden").html(' Txid: '+data.data.txid); + $("#rawTransactionStatus").addClass('alert-success').removeClass('alert-danger').removeClass("hidden").html(' TXID: ' + data.data.txid + '
View on Blockchain Explorer'); } else { $("#rawTransactionStatus").addClass('alert-danger').removeClass('alert-success').removeClass("hidden").html(' Unexpected error, please try again').prepend(''); } @@ -1281,7 +1312,7 @@ $(document).ready(function() { }, success: function(data) { if((data.tx) && data.tx.hash){ - $("#rawTransactionStatus").addClass('alert-success').removeClass('alert-danger').removeClass("hidden").html(' Txid: '+data.tx.hash); + $("#rawTransactionStatus").addClass('alert-success').removeClass('alert-danger').removeClass("hidden").html(' TXID: ' + data.tx.hash + '
View on Blockchain Explorer'); } else { $("#rawTransactionStatus").addClass('alert-danger').removeClass('alert-success').removeClass("hidden").html(' Unexpected error, please try again').prepend(''); } @@ -1294,6 +1325,37 @@ $(document).ready(function() { } + // broadcast transaction via chain.so for litecoin + function rawSubmitchainso_litecoin(thisbtn){ + $(thisbtn).val('Please wait, loading...').attr('disabled',true); + $.ajax ({ + type: "POST", + url: "https://chain.so/api/v2/send_tx/LTC", + data: {"tx_hex":$("#rawTransaction").val()}, + dataType: "json", + error: function(data) { + var obj = $.parseJSON(data.responseText); + var r = ' '; + r += (obj.data.tx_hex) ? ' '+obj.data.tx_hex : ''; + r = (r!='') ? r : ' Failed to broadcast'; // build response + $("#rawTransactionStatus").addClass('alert-danger').removeClass('alert-success').removeClass("hidden").html(r).prepend(''); + // console.error(JSON.stringify(data, null, 4)); + }, + success: function(data) { + // console.info(JSON.stringify(data, null, 4)); + if((data.status && data.data) && data.status=='success'){ + $("#rawTransactionStatus").addClass('alert-success').removeClass('alert-danger').removeClass("hidden").html(' TXID: ' + data.data.txid + '
View on Blockchain Explorer'); + } else { + $("#rawTransactionStatus").addClass('alert-danger').removeClass('alert-success').removeClass("hidden").html(' Unexpected error, please try again').prepend(''); + } + }, + complete: function(data, status) { + $("#rawTransactionStatus").fadeOut().fadeIn(); + $(thisbtn).val('Submit').attr('disabled',false); + } + }); + } + // broadcast transaction via chain.so for dogecoin function rawSubmitchainso_dogecoin(thisbtn){ $(thisbtn).val('Please wait, loading...').attr('disabled',true); @@ -1313,7 +1375,7 @@ $(document).ready(function() { success: function(data) { // console.info(JSON.stringify(data, null, 4)); if((data.status && data.data) && data.status=='success'){ - $("#rawTransactionStatus").addClass('alert-success').removeClass('alert-danger').removeClass("hidden").html(' Txid: ' + data.data.txid); + $("#rawTransactionStatus").addClass('alert-success').removeClass('alert-danger').removeClass("hidden").html(' TXID: ' + data.data.txid + '
View on Blockchain Explorer'); } else { $("#rawTransactionStatus").addClass('alert-danger').removeClass('alert-success').removeClass("hidden").html(' Unexpected error, please try again').prepend(''); } @@ -1773,6 +1835,14 @@ $(document).ready(function() { configureBroadcast(); configureGetUnspentTx(); + if (coinjs.pub == 0x30){ // LTC + explorer_addr = "https://chain.so/address/LTC/"; + coinjs.bech32.hrp = "ltc"; + } + else if (coinjs.pub == 0x1e){ // DOGE + explorer_addr = "https://chain.so/address/DOGE/"; + } + $("#statusSettings").addClass("alert-success").removeClass("hidden").html(" Settings updates successfully").fadeOut().fadeIn(); } else { $("#statusSettings").addClass("alert-danger").removeClass("hidden").html("There is an error with one or more of your settings"); @@ -1823,6 +1893,10 @@ $(document).ready(function() { $("#rawSubmitBtn").click(function(){ rawSubmitChainso_BitcoinMainnet(this); }); + } else if(host=="chain.so_litecoin"){ + $("#rawSubmitBtn").click(function(){ + rawSubmitchainso_litecoin(this); + }); } else if(host=="chain.so_dogecoin"){ $("#rawSubmitBtn").click(function(){ rawSubmitchainso_dogecoin(this); diff --git a/sha1sum b/sha1sum index f2fd201..e4d7d26 100644 --- a/sha1sum +++ b/sha1sum @@ -1,9 +1,9 @@ ----- Version 1.4 2018.12.28 --- +---- Version 1.4 2019.06.05 ---- 77e4519962e2f6a9fc93342137dbb31c33b76b04 ./js/aes.js 3a09a8fc0cfe828b57fc798d668234d0490ee1a6 ./js/bootstrap-datetimepicker.min.js 253711c6d825de55a8360552573be950da180614 ./js/bootstrap.min.js -cea69963334927160046abfda7ca82400b34d7fc ./js/coinbin.js -d7e828cea4e9af4934cc500d022cb1b6ce12cbb0 ./js/coin.js +c151bb100bb186b58407b18055d354abca92042a ./js/coinbin.js +8f1286e72a6b06259ba1892e532cb35b11c88c37 ./js/coin.js 988565bc2cb402d63ed5c5fd7ff47c4278efc2c5 ./js/collapse.js 9ba5ede3d7f9d4c8fd623395f196adfdcf7e970f ./js/crypto-min.js f7c09f2f5a721371e7d478050119f7e2d58e3ef9 ./js/crypto-sha256-hmac.js @@ -31,4 +31,5 @@ de51a8494180a6db074af2dee2383f0a363c5b08 ./fonts/glyphicons-halflings-regular.s 278e49a86e634da6f2a02f3b47dd9d2a8f26210f ./fonts/glyphicons-halflings-regular.woff 44bc1850f570972267b169ae18f1cb06b611ffa2 ./fonts/glyphicons-halflings-regular.ttf c024021c71cba503979a859d23cbf7a88b570d82 ./README.md -26552aac02a06e88b419539f93032de8a25e1edd ./index.html +42541e9411de4550496cea79f2eb1edb4dcf2922 ./index.html +