From 7355e792d49479a3f3621fb7ae9f9fc32f03524d Mon Sep 17 00:00:00 2001 From: alamshafil Date: Fri, 16 Sep 2022 16:19:19 -0400 Subject: [PATCH 1/3] Add Avian API support --- js/coinbin.js | 58 +++++++++++++++++---------------------------------- 1 file changed, 19 insertions(+), 39 deletions(-) diff --git a/js/coinbin.js b/js/coinbin.js index 5f25a3f..8fb6bf9 100644 --- a/js/coinbin.js +++ b/js/coinbin.js @@ -2,9 +2,9 @@ $(document).ready(function() { /* open wallet code */ - var explorer_tx = "https://coinb.in/tx/" - var explorer_addr = "https://coinb.in/addr/" - var explorer_block = "https://coinb.in/block/" + var explorer_tx = "https://explorer.avn.network/tx/" + var explorer_addr = "https://explorer.avn.network/addr/" + var explorer_block = "https:/explorer.avn.network/block/" var wallet_timer = false; @@ -909,11 +909,7 @@ $(document).ready(function() { var host = $(this).attr('rel'); // Avian (api.avn.network) - if(host=='chain.so_avianmainnet'){ - listUnspentAvianAPI(redeem, "BTC"); - } else { - listUnspentDefault(redeem); - } + listUnspentAvianAPI(redeem, "AVN"); if($("#redeemFromStatus").hasClass("hidden")) { // An ethical dilemma: Should we automatically set nLockTime? @@ -1111,24 +1107,17 @@ $(document).ready(function() { function listUnspentAvianAPI(redeem, network){ $.ajax ({ type: "GET", - url: "https://chain.so/api/v2/get_tx_unspent/"+network+"/"+redeem.addr, + url: "https://api.avn.network/unspent/"+redeem.addr, dataType: "json", error: function(data) { $("#redeemFromStatus").removeClass('hidden').html(' Unexpected error, unable to retrieve unspent outputs!'); }, success: function(data) { - if((data.status && data.data) && data.status=='success'){ + if(data.result && data.error == null){ $("#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("")+''; - 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); - } - } + data.result.forEach(i => { + addOutput(i.txid, i.index, i.script, (i.value/100000000)); + }); } else { $("#redeemFromStatus").removeClass('hidden').html(' Unexpected error, unable to retrieve unspent outputs.'); } @@ -1197,7 +1186,7 @@ $(document).ready(function() { /* broadcast a transaction */ $("#rawSubmitBtn").click(function(){ - rawSubmitDefault(this); + rawSubmitAvianAPI(this, "AVN"); }); // broadcast transaction via coinbin (default) @@ -1232,19 +1221,16 @@ $(document).ready(function() { $(thisbtn).val('Please wait, loading...').attr('disabled',true); $.ajax ({ type: "POST", - url: "https://chain.so/api/v2/send_tx/"+network+"/", - data: {"tx_hex":$("#rawTransaction").val()}, + url: "https://api.avn.network/broadcast", + data: {"raw":$("#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 + r = "Failed to broadcast: " + data.error.message; $("#rawTransactionStatus").addClass('alert-danger').removeClass('alert-success').removeClass("hidden").html(r).prepend(''); }, - success: function(data) { - if(data.status && data.data.txid){ - $("#rawTransactionStatus").addClass('alert-success').removeClass('alert-danger').removeClass("hidden").html(' TXID: ' + data.data.txid + '
View on Blockchain Explorer'); + success: function(data) { + if(data.result && data.error == null){ + $("#rawTransactionStatus").addClass('alert-success').removeClass('alert-danger').removeClass("hidden").html(' TXID: ' + data.result.txid + '
View on Blockchain Explorer'); } else { $("#rawTransactionStatus").addClass('alert-danger').removeClass('alert-success').removeClass("hidden").html(' Unexpected error, please try again').prepend(''); } @@ -1770,15 +1756,9 @@ $(document).ready(function() { // Avian (api.avn.network) $("#rawSubmitBtn").unbind(""); - if(host=="api.avn.network"){ - $("#rawSubmitBtn").click(function(){ - rawSubmitAvianAPI(this, "AVN"); - }); - } else { - $("#rawSubmitBtn").click(function(){ - rawSubmitDefault(this); // revert to default - }); - } + $("#rawSubmitBtn").click(function(){ + rawSubmitAvianAPI(this, "AVN"); + }); } function configureGetUnspentTx(){ From 9befad58db8f722ada6b9e9b3c5a40efa1740686 Mon Sep 17 00:00:00 2001 From: alamshafil Date: Fri, 16 Sep 2022 16:22:03 -0400 Subject: [PATCH 2/3] Add SIGHASH_FORKID (0x40 / 64) --- js/coin.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/js/coin.js b/js/coin.js index d144f1f..4c28fb1 100644 --- a/js/coin.js +++ b/js/coin.js @@ -1490,7 +1490,7 @@ /* sign a "standard" input */ r.signinput = function(index, wif, sigHashType){ var key = coinjs.wif2pubkey(wif); - var shType = sigHashType || 1; + var shType = sigHashType+64 || 1; var signature = this.transactionSig(index, wif, shType); var s = coinjs.script(); s.writeBytes(Crypto.util.hexToBytes(signature)); @@ -1501,7 +1501,7 @@ /* signs a time locked / hodl input */ r.signhodl = function(index, wif, sigHashType){ - var shType = sigHashType || 1; + var shType = sigHashType+64 || 1; var signature = this.transactionSig(index, wif, shType); var redeemScript = this.ins[index].script.buffer var s = coinjs.script(); @@ -1541,7 +1541,7 @@ var pubkeyList = scriptListPubkey(coinjs.script(redeemScript)); var sigsList = scriptListSigs(this.ins[index].script); - var shType = sigHashType || 1; + var shType = sigHashType+64 || 1; var sighash = Crypto.util.hexToBytes(this.transactionHash(index, shType)); var signature = Crypto.util.hexToBytes(this.transactionSig(index, wif, shType)); From 437243023ad0962db05256ca111dd113a4aec4e3 Mon Sep 17 00:00:00 2001 From: alamshafil Date: Fri, 16 Sep 2022 21:43:06 -0400 Subject: [PATCH 3/3] Remove RBF --- js/coin.js | 6 +++--- js/coinbin.js | 9 +++------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/js/coin.js b/js/coin.js index 4c28fb1..d144f1f 100644 --- a/js/coin.js +++ b/js/coin.js @@ -1490,7 +1490,7 @@ /* sign a "standard" input */ r.signinput = function(index, wif, sigHashType){ var key = coinjs.wif2pubkey(wif); - var shType = sigHashType+64 || 1; + var shType = sigHashType || 1; var signature = this.transactionSig(index, wif, shType); var s = coinjs.script(); s.writeBytes(Crypto.util.hexToBytes(signature)); @@ -1501,7 +1501,7 @@ /* signs a time locked / hodl input */ r.signhodl = function(index, wif, sigHashType){ - var shType = sigHashType+64 || 1; + var shType = sigHashType || 1; var signature = this.transactionSig(index, wif, shType); var redeemScript = this.ins[index].script.buffer var s = coinjs.script(); @@ -1541,7 +1541,7 @@ var pubkeyList = scriptListPubkey(coinjs.script(redeemScript)); var sigsList = scriptListSigs(this.ins[index].script); - var shType = sigHashType+64 || 1; + var shType = sigHashType || 1; var sighash = Crypto.util.hexToBytes(this.transactionHash(index, shType)); var signature = Crypto.util.hexToBytes(this.transactionSig(index, wif, shType)); diff --git a/js/coinbin.js b/js/coinbin.js index 8fb6bf9..fa36506 100644 --- a/js/coinbin.js +++ b/js/coinbin.js @@ -176,9 +176,6 @@ $(document).ready(function() { } var sequence = 0xffffffff-1; - if($("#walletRBF").is(":checked")){ - sequence = 0xffffffff-2; - } tx.addUnspent($("#walletAddress").html(), function(data){ @@ -1011,7 +1008,7 @@ $(document).ready(function() { $("#inputs .row:last input").attr('disabled',true); - var txid = ((tx).match(/.{1,2}/g).reverse()).join("")+''; + var txid = tx; $("#inputs .txId:last").val(txid); $("#inputs .txIdN:last").val(n); @@ -1116,7 +1113,7 @@ $(document).ready(function() { if(data.result && data.error == null){ $("#redeemFromAddress").removeClass('hidden').html(' Retrieved unspent inputs from address '+redeem.addr+''); data.result.forEach(i => { - addOutput(i.txid, i.index, i.script, (i.value/100000000)); + addOutput(i.txid, i.index+1, i.script, (i.value/100000000)); }); } else { $("#redeemFromStatus").removeClass('hidden').html(' Unexpected error, unable to retrieve unspent outputs.'); @@ -1539,7 +1536,7 @@ $(document).ready(function() { var tx = coinjs.transaction(); var t = tx.deserialize(script.val()); - var signed = t.sign(wifkey.val(), $("#sighashType option:selected").val()); + var signed = t.sign(wifkey.val(), $("#sighashType option:selected").val()+64); $("#signedData textarea").val(signed); $("#signedData .txSize").html(t.size()); $("#signedData").removeClass('hidden').fadeIn();