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
+