Code Monkey home page Code Monkey logo

Comments (21)

ADumaine avatar ADumaine commented on September 26, 2024 1

That last explanation helped. I was able to send a transaction with 5 inputs, 70 outs using 2 signatures and signing all the utxo inputs individually.
Thanks for the help!

from zencashjs.

kendricktan avatar kendricktan commented on September 26, 2024

Sorry? Can you post an example to clarify your statement?

from zencashjs.

ADumaine avatar ADumaine commented on September 26, 2024

We are using a multisig for node payouts. We have been using only one UTXO as an input and it has worked fine. There are a number of small UTXOs in the multisig and I changed the code to use these as inputs in a raw transaction. A raw tx can be created, serialized and decoded, but there is an error when sending. The only change has be including the multiple UTXOs.

This is a testnet transaction that has the raw, serialized and decoded tx.

https://docs.google.com/document/d/1DV3HTBbLFt48mgDqlhgpwm-68yhpggx9W8fkpS7ABis/edit?usp=sharing

from zencashjs.

kendricktan avatar kendricktan commented on September 26, 2024

It works the same way as you would to sign the std tx, e.g.

var zencashjs = require('zencashjs')

// Private keys in wallet import format
var privKeysWIF1 = [...]
var privKeysWIF2 = [...]

// Converts Private keys in WIF to its original form
var privKeys1 = [...]
var privKeys2 = [...]

// Get public keys (NOT address)
var pubKeys1 = [...]
var pubKeys2 = [...]

// Make a 2-of-3 multisig address
var redeemScript1 = zencashjs.address.mkMultiSigRedeemScript(pubKeys1, 2, 3)
var redeemScript2 = zencashjs.address.mkMultiSigRedeemScript(pubKeys2, 2, 3)

var multiSigAddress1 = zencashjs.address.multiSigRSToAddress(redeemScript1)
var multiSigAddress2 = zencashjs.address.multiSigRSToAddress(redeemScript2)

// To create and sign a raw transaction at BLOCKHEIGHT and BLOCKHASH
const blockHeight = 142091
const blockHash = '00000001cf4e27ce1dd8028408ed0a48edd445ba388170c9468ba0d42fff3052'

var txobj = zencashjs.transaction.createRawTx(
  [{ txid: 'hash1', vout: 0, }, { txid: 'hash2', vout: 0, }],
  [{address: 'zneng6nRqTrqTKfjYAqXT86HWtk96ftPjtX', satoshis: 10000}],
  blockHeight,
  blockHash
)

// Prepare our signatures for mutli-sig for UTXO 0
var sig1_1 = zencashjs.transaction.multiSign(txobj, 0, privKeys1[0], redeemScript1)
var sig1_2 = zencashjs.transaction.multiSign(txobj, 0, privKeys1[1], redeemScript1)

// Apply the signatures to the transaction object
// for UTXO1
var tx0 = zencashjs.transaction.applyMultiSignatures(txobj, 0, [sig1_1, sig1_2], redeemScript1)

// Prepare our signatures for multi-sig for UTXO 1
var sig2_1 = zencashjs.transaction.multiSign(tx0, 1, privKeys2[0], redeemScript2)
var sig2_2 = zencashjs.transaction.multiSign(tx0, 1, privKeys2[1], redeemScript2)

var tx1 = zencashjs.transaction.applyMultiSignatures(tx0, 1, [sig2_1, sig2_2], redeemScript2)

// Serialize the transaction
var serializedTx = zencashjs.transaction.serializeTx(tx1)

from zencashjs.

ADumaine avatar ADumaine commented on September 26, 2024

Is there anything in the decoded script that would point to a reason why it will not send?

from zencashjs.

kendricktan avatar kendricktan commented on September 26, 2024

from zencashjs.

ADumaine avatar ADumaine commented on September 26, 2024

The testnet multisig is a 'zr' address. I'll try the code on mainnet with one of the multisigs we use there.

from zencashjs.

ADumaine avatar ADumaine commented on September 26, 2024

The code has been working with one input. Over 200k payments have been sent with it. The only change is adding multiple inputs to the raw tx.

I tried running with a smaller tx on mainnet and it does not work there either. I am not sure what to look for.

When I try to send the serialized tx it returns an error -25 which is

RPC_VERIFY_ERROR                = -25, //! General error during transaction or block submission

Here is a mainnet tx:

010000000a64120ec827756d8fe327b3b3e5bbe600ef8bcfd493c2a28466de03ca6375fec0b0040000fd400100473044022041ff4eee279d5a22c8a0071de8d7a13dc5f0b0f38871f423be9c30a4309482fd022021c76f0dc37e52a31edf007a698b6c8ade9f2ba272cd51a682aa28a5f14c34dc0147304402204703ddf43b174aa188476e094ad2f0e9e2345560f92db9b8cdd1b209139d4b4e022062622c59e2a8852276aa75e7e4c0f95b846bb67bfb9318051ab21546d6379494014cad522102417f9531d33f74cdc80eb7cec676821934a9a3c0f3ca19c11252749809716dc42103b342b5f9e0a240faa6b0c74e6722d5411ce495d2cb80d16060844988b2895aaf2103ceca34eb2fab2804bb448c31c2ea9ea6b2121ed4f3a6a6312e4f49c0a8ecd139210345c7432f7c91c7f2a5a8f02f66128faa956d2ca668b1bfa8c80d7f7018d39d3b21038b9742c7db75e77f8cb3475b0c7deb749a5754a725f8b848d33539a041d6099755aeffffffffa4e8aaa8757956f1b558ab87b85d02e8f83ccbd536ed11e2545b9afad3304e8ab004000000ffffffffb3288b22aad4f6b6be39d919b980846b9d107f418276e1bfc3669e41830e4524b004000000ffffffff52d4cac092804668ec4c478e9be8d502ec510d5a9053a3be859898c1e62c49df3703000000ffffffff343802ee4489ddfc726f520f5333f3a6ec105cca0d8fd606d2c2642378a314e4b004000000ffffffffea84649a6f118c9ae6e6dda507ba85b588e7871346970d6be8ac4e02b7ec7d2abc02000000ffffffff3438eb76dcb79a96f5d9780fde94d12e6c08e47bf6dab6188dcd73ddecefadabb004000000ffffffff9523482c1a6f34542154b6354e66e782a15ff1774f79eb34ea53a4471ddb37baf401000000fffffffff7883b66ce82ded1666beb5e389d920f7bb86ab012cbd588de624bdef61969a4b004000000fffffffff39e8b4d436ea5439c5141e0ae032b8495952120995af06dd571ec50b0b84c99b502000000ffffffff0200093d00000000003f76a91470758b26f06187999d3c392bd9c753bd6d3e011188ac20a2f1794101b29e88c5f83cf8586096220de35f15a23325da62f8c56500000000033dd103b41e220800000000003da914064d457c3922e748c073d7d6d66b69fcef9943638720a2f1794101b29e88c5f83cf8586096220de35f15a23325da62f8c56500000000033dd103b400000000

It looks like it decodes with zen-cli but even submitting with zen-cli returns the error. Every txid is valid except for the very first one. It is not in the explorer

{
  "txid": "0956cd730dc97b7e9b7f2896f7f394f1fba534fce75ff42b7e0a73ad950408af",
  "version": 1,
  "locktime": 0,
  "vin": [
    {
      "txid": "c0fe7563ca03de6684a2c293d4cf8bef00e6bbe5b3b327e38f6d7527c80e1264",
      "vout": 1200,
      "scriptSig": {
        "asm": "0 3044022041ff4eee279d5a22c8a0071de8d7a13dc5f0b0f38871f423be9c30a4309482fd022021c76f0dc37e52a31edf007a698b6c8ade9f2ba272cd51a682aa28a5f14c34dc01 304402204703ddf43b174aa188476e094ad2f0e9e2345560f92db9b8cdd1b209139d4b4e022062622c59e2a8852276aa75e7e4c0f95b846bb67bfb9318051ab21546d637949401 522102417f9531d33f74cdc80eb7cec676821934a9a3c0f3ca19c11252749809716dc42103b342b5f9e0a240faa6b0c74e6722d5411ce495d2cb80d16060844988b2895aaf2103ceca34eb2fab2804bb448c31c2ea9ea6b2121ed4f3a6a6312e4f49c0a8ecd139210345c7432f7c91c7f2a5a8f02f66128faa956d2ca668b1bfa8c80d7f7018d39d3b21038b9742c7db75e77f8cb3475b0c7deb749a5754a725f8b848d33539a041d6099755ae",
        "hex": "00473044022041ff4eee279d5a22c8a0071de8d7a13dc5f0b0f38871f423be9c30a4309482fd022021c76f0dc37e52a31edf007a698b6c8ade9f2ba272cd51a682aa28a5f14c34dc0147304402204703ddf43b174aa188476e094ad2f0e9e2345560f92db9b8cdd1b209139d4b4e022062622c59e2a8852276aa75e7e4c0f95b846bb67bfb9318051ab21546d6379494014cad522102417f9531d33f74cdc80eb7cec676821934a9a3c0f3ca19c11252749809716dc42103b342b5f9e0a240faa6b0c74e6722d5411ce495d2cb80d16060844988b2895aaf2103ceca34eb2fab2804bb448c31c2ea9ea6b2121ed4f3a6a6312e4f49c0a8ecd139210345c7432f7c91c7f2a5a8f02f66128faa956d2ca668b1bfa8c80d7f7018d39d3b21038b9742c7db75e77f8cb3475b0c7deb749a5754a725f8b848d33539a041d6099755ae"
      },
      "sequence": 4294967295
    },
    {
      "txid": "8a4e30d3fa9a5b54e211ed36d5cb3cf8e8025db887ab58b5f1567975a8aae8a4",
      "vout": 1200,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    },
    {
      "txid": "24450e83419e66c3bfe17682417f109d6b8480b919d939beb6f6d4aa228b28b3",
      "vout": 1200,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    },
    {
      "txid": "df492ce6c1989885bea353905a0d51ec02d5e89b8e474cec68468092c0cad452",
      "vout": 823,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    },
    {
      "txid": "e414a3782364c2d206d68f0dca5c10eca6f333530f526f72fcdd8944ee023834",
      "vout": 1200,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    },
    {
      "txid": "2a7decb7024eace86b0d97461387e788b585ba07a5dde6e69a8c116f9a6484ea",
      "vout": 700,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    },
    {
      "txid": "abadefecdd73cd8d18b6daf67be4086c2ed194de0f78d9f5969ab7dc76eb3834",
      "vout": 1200,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    },
    {
      "txid": "ba37db1d47a453ea34eb794f77f15fa182e7664e35b6542154346f1a2c482395",
      "vout": 500,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    },
    {
      "txid": "a46919f6de4b62de88d5cb12b06ab87b0f929d385eeb6b66d1de82ce663b88f7",
      "vout": 1200,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    },
    {
      "txid": "994cb8b050ec71d56df05a9920219595842b03aee041519c43a56e434d8b9ef3",
      "vout": 693,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    }
  ],
  "vout": [
    {
      "value": 0.04000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 70758b26f06187999d3c392bd9c753bd6d3e0111 OP_EQUALVERIFY OP_CHECKSIG a2f1794101b29e88c5f83cf8586096220de35f15a23325da62f8c56500000000 250173 OP_CHECKBLOCKATHEIGHT",
        "hex": "76a91470758b26f06187999d3c392bd9c753bd6d3e011188ac20a2f1794101b29e88c5f83cf8586096220de35f15a23325da62f8c56500000000033dd103b4",
        "reqSigs": 1,
        "type": "pubkeyhashreplay",
        "addresses": [
          "znbLYUypRQsHvaUYaQwHAG7jJCPu1fh7BgR"
        ]
      }
    },
    {
      "value": 0.00533022,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_HASH160 064d457c3922e748c073d7d6d66b69fcef994363 OP_EQUAL a2f1794101b29e88c5f83cf8586096220de35f15a23325da62f8c56500000000 250173 OP_CHECKBLOCKATHEIGHT",
        "hex": "a914064d457c3922e748c073d7d6d66b69fcef9943638720a2f1794101b29e88c5f83cf8586096220de35f15a23325da62f8c56500000000033dd103b4",
        "reqSigs": 1,
        "type": "scripthashreplay",
        "addresses": [
          "zsf45QuD75XJdm3uLftiW6pucvbhvrbhAhZ"
        ]
      }
    }
  ],
  "vjoinsplit": [
  ]
}

This is what zencashjs.transaction.deserialize returns:

{ version: 1,
  locktime: 0,
  ins:
   [ { output: [Object],
       script: '00473044022041ff4eee279d5a22c8a0071de8d7a13dc5f0b0f38871f423be9c30a4309482fd022021c76f0dc37e52a31edf007a698b6c8ade9f2ba272cd51a682aa28a5f14c34dc0147304402204703ddf43b174aa188476e094ad2f0e9e2345560f92db9b8cdd1b209139d4b4e022062622c59e2a8852276aa75e7e4c0f95b846bb67bfb9318051ab21546d6379494014cad522102417f9531d33f74cdc80eb7cec676821934a9a3c0f3ca19c11252749809716dc42103b342b5f9e0a240faa6b0c74e6722d5411ce495d2cb80d16060844988b2895aaf2103ceca34eb2fab2804bb448c31c2ea9ea6b2121ed4f3a6a6312e4f49c0a8ecd139210345c7432f7c91c7f2a5a8f02f66128faa956d2ca668b1bfa8c80d7f7018d39d3b21038b9742c7db75e77f8cb3475b0c7deb749a5754a725f8b848d33539a041d6099755ae',
       sequence: 'ffffffff',
       prevScriptPubKey: '' },
     { output: [Object],
       script: '',
       sequence: 'ffffffff',
       prevScriptPubKey: '' },
     { output: [Object],
       script: '',
       sequence: 'ffffffff',
       prevScriptPubKey: '' },
     { output: [Object],
       script: '',
       sequence: 'ffffffff',
       prevScriptPubKey: '' },
     { output: [Object],
       script: '',
       sequence: 'ffffffff',
       prevScriptPubKey: '' },
     { output: [Object],
       script: '',
       sequence: 'ffffffff',
       prevScriptPubKey: '' },
     { output: [Object],
       script: '',
       sequence: 'ffffffff',
       prevScriptPubKey: '' },
     { output: [Object],
       script: '',
       sequence: 'ffffffff',
       prevScriptPubKey: '' },
     { output: [Object],
       script: '',
       sequence: 'ffffffff',
       prevScriptPubKey: '' },
     { output: [Object],
       script: '',
       sequence: 'ffffffff',
       prevScriptPubKey: '' } ],
  outs:
   [ { satoshis: 4000000,
       script: '76a91470758b26f06187999d3c392bd9c753bd6d3e011188ac20a2f1794101b29e88c5f83cf8586096220de35f15a23325da62f8c56500000000033dd103b4' },
     { satoshis: 533022,
       script: 'a914064d457c3922e748c073d7d6d66b69fcef9943638720a2f1794101b29e88c5f83cf8586096220de35f15a23325da62f8c56500000000033dd103b4' } ] }

from zencashjs.

kendricktan avatar kendricktan commented on September 26, 2024

Can you post a snippet of the code you're using to sign the multisig with 2 UTXOs?

from zencashjs.

ADumaine avatar ADumaine commented on September 26, 2024

The payments system breaks down all the nodes in one earning period to batches limited to 1200 addresses and amounts. The user enters his private key and it signs one or more batches. The same code was used to sign both the transactions already posted. This part of the code has not been changed from what has been working.

This is each signer signing a batch. The sigs element is a field in a form submitted to the server.

$("#sign").click(function () {
  var keyWIF = ($("#pk1").val()).trim();
  if (!keyWIF) {
    $("#msg1").html("Please enter your private key");
    return;
  }

  var privkey = zencash.address.WIFToPrivKey(keyWIF);
  var rscript = $('input[name="rscript"').val();

  var sigs = [];
  for (var i = 0; i < batches.length; i++) {
    var tx = JSON.parse(batches[i].rawtx);
    var sig = zencash.transaction.multiSign(tx, 0, privkey, rscript);
    var sigObj = {"batchid": batches[i].id, "sigcount": batches[i].sigcount, "sig": sig };
    sigs.push(sigObj);
  }

  $("#sigs").val(JSON.stringify(sigs));

This is the server applying the collected signatures.

const txObj = JSON.parse(batch.rawtx);
const rscript = batch.multisig.redeemscript;
const sigs = [batch.signatures[0].sig, batch.signatures[1].sig];
const tx = zencash.transaction.applyMultiSignatures(txObj, 0, sigs, rscript);
const serializedTx = zencash.transaction.serializeTx(tx);

from zencashjs.

ADumaine avatar ADumaine commented on September 26, 2024

I also verified that only including one input still works properly with the current code by commenting out the code that creates the array for using multiple ins.

from zencashjs.

kendricktan avatar kendricktan commented on September 26, 2024

I think the problem is you applying the collected signatures on the server

const tx = zencash.transaction.applyMultiSignatures(txObj, 0, sigs, rscript);

Only applies the signature for UTXO no.0

If you want to apply the signature for all UTXOs you'll need to do

const sigs = [batch.signatures[0].sig, batch.signatures[1].sig];
const sigs2 = [batch2.signatures[0].sig, batch2.signatures[1].sig];

// Apply the multi-sig according to their UTXOs
let tx = zencash.transaction.applyMultiSignatures(txObj, 0, sigs, rscript); # Note the 0
tx = zencash.transaction.applyMultiSignatures(tx, 1, sigs2, rscript2); # Note the 1

const serializedTx = zencash.transaction.serializeTx(tx);

from zencashjs.

ADumaine avatar ADumaine commented on September 26, 2024

Not sure I completely follow this, but I think I might know what you mean.
There are a few things here that don't make sense:

  1. In my code each batch is a separate transaction so it does not make sense to apply signatures from one batch to another. The code is signing each batch for the first signer. It is then repeated in another session by the second signer.
  2. There is only one redeem script for the multisig (no rscript2). It is a 2 of 5. I am not following why in your original example it show two multisig addresses and two redeem scripts.

You indicate that the second parameter is basically the input utxo array index. And it looks like the applyMultiSignatures is cumulative.

Is this the right approach?:

const sigs = [batch.signatures[0].sig, batch.signatures[1].sig];

# Apply the multi-sig to each UTXOs.  this could be a loop for each input utxo
let tx = zencash.transaction.applyMultiSignatures(txObj, 0, sigs, rscript); # utxo 0
tx = zencash.transaction.applyMultiSignatures(txObj, 1, sigs, rscript); # utxo 1

const serializedTx = zencash.transaction.serializeTx(tx);

from zencashjs.

kendricktan avatar kendricktan commented on September 26, 2024

Sorry, my bad. My code example from the previous comment was wrong (now fixed). Assuming the UTXO's are from the same address, then yes, you can use the same redeemScript. But the signatures will be different.

The signatures will need to be generated by each UTXO's.

const sigs = [batch.signatures[0].sig, batch.signatures[1].sig]; // Get the signature for no.0 utxo
const sigs2 = [batch2.signatures[0].sig, batch2.signatures[1].sig]; // Get the signature for no.1 utxo

// Apply the multi-sig according to their UTXOs
txObj = zencash.transaction.applyMultiSignatures(txObj, 0, sigs, rscript); // Note the 0
txObj = zencash.transaction.applyMultiSignatures(txObj, 1, sigs2, rscript); // Note the 1

const serializedTx = zencash.transaction.serializeTx(txObj);

from zencashjs.

ADumaine avatar ADumaine commented on September 26, 2024

I am confused why the signatures from batch2 are being included in the first batch. They are completely different transactions. batch = transaction. I was probably not clear before.

the batch.signatures are from the first signer and the second signer signing the entire transaction with

var sig = zencash.transaction.multiSign(tx, 0, privkey, rscript);

Does this work the same way? is the second param the utxo and does it have to be run multiple times? Does a set up signatures need to be collected at this point for each utxo?

Yes the utxos are all from the same address (multisig).

I tried this, and it worked for a transaction(batch) with 1 input but still got the -25 error for one with 5 inputs(testnet).

              const txObj = JSON.parse(batch.rawtx);
              const rscript = batch.multisig.redeemscript;
              const sigs = [batch.signatures[0].sig, batch.signatures[1].sig];
              let tx = zencash.transaction.applyMultiSignatures(txObj, 0, sigs, rscript);
              if (txObj.ins.length > 1) {
                for (let x = 1; x < txObj.ins.length; x++) {
                  tx = zencash.transaction.applyMultiSignatures(txObj, x, sigs, rscript);
                }
              }
              // const txtext = JSON.stringify(tx);
              const serializedTx = zencash.transaction.serializeTx(tx);

I still think I am missing something about the signing each utxo in the txObj.

from zencashjs.

kendricktan avatar kendricktan commented on September 26, 2024

Say you have 2 UTXOs that you want to sign from the same address. This is what you need to do.

/* Collecting the signatures */
// utxo0_0 = Utxo number 0, signer no 0
// utxo0_1 = Utxo number 0, signer no 1
var sig_utxo0_0 = zencash.transaction.multiSign(tx, 0, privkey1, rscript);
var sig_utxo0_1 = zencash.transaction.multiSign(tx, 0, privkey2, rscript);

// utxo1_0 = Utxo number 1, signer no 0
// utxo1_1 = Utxo number 1, signer no 1
var sig_utxo1_0 = zencash.transaction.multiSign(tx, 1, privkey1, rscript);
var sig_utxo1_1 = zencash.transaction.multiSign(tx, 1, privkey2, rscript);

/* Applying the signatures */
// NOTE: You need to overwrite txObj here. Or you can use `reduce` to
// obtain the final txobj in a more 'pure way'.
// You're doing: tx = zencash.transaction.applyMultiSignatures(txObj, x, sigs, rscript);
// Which isn't overwiting them, hence why all your `in_tx` has empty signatures.
txObj = zencash.transaction.applyMultiSignatures(txObj, 0, [sig_utxo0_0, sig_utxo0_1], rscript);
txObj = zencash.transaction.applyMultiSignatures(txObj, 1, [sig_utxo1_0, sig_utxo1_1], rscript);

Also you cannot use the signature from the first UTXO to sign the second UTXO. Each UTXO must be signed individually.

from zencashjs.

kendricktan avatar kendricktan commented on September 26, 2024

Glad to hear that :)

from zencashjs.

giancarlopetrini avatar giancarlopetrini commented on September 26, 2024

@kendricktan Sorry to dig up an old issue ;). I've created a similar setup as discussed above, but I'm trying to test with multisig addresses on testnet. All works except the send raw tx itself.

 {
        "result": null,
        "error": {
            "code": -26,
            "message": "16: mandatory-script-verify-flag-failed (unknown error)"
        }

I've been googling around for the past few hours, but am a bit stuck. Not sure if it's just because I'm on testnet. Here's brief sample of the code I'm using. Any thoughts would help a ton.

for (let i = 0; i < rawTx.ins.length; i++) {
    let sig = zen.zencash.transaction.multiSign(rawTx, i, key, redeemArray[i]);
    rawTx = zen.zencash.transaction.applyMultiSignatures(rawTx, i, [sig], redeemArray[i]);
   // only use one key/sig for testing, made addresses only require 1:1
  }

  console.log(rawTx);
  const txSerial = zen.zencash.transaction.serializeTx(rawTx);
  console.log(txSerial);
  console.log(zen.zencash.transaction.deserializeTx(txSerial));

  return zen.rpc.sendrawtransaction(txSerial)
    .catch(err => {
      throw new ValidatorException('Issue with tx sign and send', err.response.data);
    });

from zencashjs.

giancarlopetrini avatar giancarlopetrini commented on September 26, 2024

@kendricktan is it likely that this is the issue?

If it's in the testnet it's likely that the library doesn't account for the
collision of addresses e.g. 'zt' is a regular address on testnet but a possible
multisig on mainnet. (left behind by the original Dev). That way when it's signing
its using the wrong algo

from zencashjs.

kendricktan avatar kendricktan commented on September 26, 2024

@giancarlopetrini thats the main culprit.

Unfortunately there isn't any real easy way to fix this issue apart from rewriting it as the functionality is baked into the core of the library (i wasn't expecting mainnet and testnet to share the same prefix)

from zencashjs.

giancarlopetrini avatar giancarlopetrini commented on September 26, 2024

Thanks for the response @kendricktan !! I'm still working to understand where the conflict lies in the signing process, any pointers would be great. I'd be glad to make a PR if I can figure it out.

from zencashjs.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.