Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sign a witness utxo in psbt but cant get the signature on the decoded input after signing #34

Open
cloud6605 opened this issue Jun 1, 2024 · 14 comments

Comments

@cloud6605
Copy link
Collaborator

image

@cloud6605
Copy link
Collaborator Author

image

@cloud6605
Copy link
Collaborator Author

image

@slient-coder
Copy link
Contributor

If the inputs of the transaction you are signing do not include your current wallet address, it cannot be signed. In this case, if you still want to sign, you need to manually input the toSignInputs parameter.

You can try using the toSignInputs parameter to specify your signing inputs. If there are still problems, please post the full signing code as below.

unisat.signPsbt("xxx",{...})

@ALDO2124
Copy link

ALDO2124 commented Jun 2, 2024

@huanniangstudio, thank you for the response, yes , i have the wallet address in the option at index 1
Screenshot 2024-06-02 174318
where address is the btc wallet address from unisat context
i get the popup to sign
Screenshot 2024-06-02 174915
but the hash thats returned after i click sign does not have the sign so cannot finalize the psbt which i need to do to brodcast
any help on this would be appreciated

@slient-coder
Copy link
Contributor

When the autoFinalized parameter is true, it will finalize the PSBT operation before returning. After this, you cannot finalize it twice.

You could set it to false to try again.

@ALDO2124
Copy link

ALDO2124 commented Jun 2, 2024

Ahh ok, so it should returned the hex for the finalized psbt right
but in my case when i converted from hex to bitcoin.psbt, it had no signature so could not broadcast it

@slient-coder
Copy link
Contributor

This could be an issue somewhere in the code, a reproducible code example is needed.

@ALDO2124
Copy link

ALDO2124 commented Jun 2, 2024

i tried
let sign = await unisat.signPsbt(basePsbt.toHex(), { autoFinalized:true, toSignInputs:[ { index: 1, address:address, } ] })

let push = await unisat.pushPsbt(sign)

and
let sign = await unisat.signPsbt(basePsbt.toHex(), { autoFinalized:false, toSignInputs:[ { index: 1, address:address, } ] })
let signedpsbt = bitcoin.Psbt.fromHex(sign)
signedpsbt.finalizeAllInputs()
let push = await unisat.pushPsbt(signedpsbt.toHex())

@slient-coder
Copy link
Contributor

Your code should be able to sign the index 1, but it may indeed not sign the index 0. Are you sure you have already signed it in advance?

@ALDO2124
Copy link

ALDO2124 commented Jun 2, 2024

ahh yes, sorry forgot to provide you the full context
i have 3 signiners that sign the psbt, then i combine the psbts which is the basePsbt in the signPsbt function
then since input 0 is the 3 signers combined and input 1 is the psbt that my wallet will sign so assigned input 1 and address as my wallet address,
so tldr would be that index 0 is a combined signed psbt from 3 other wallets, and input 1 is to be signed by me
reason the other 3 are for validation and the input 1 will be the gas provider for the transaction

@slient-coder
Copy link
Contributor

let sign = await unisat.signPsbt(basePsbt.toHex(), { autoFinalized:false, toSignInputs:[ { index: 1, address:address, } ] })
 let signedpsbt = bitcoin.Psbt.fromHex(sign)
console.log(signedpsbt.data.inputs[1])

When you execute the above code and get the content as below, it indicates that the signature is successful.

{
  witnessUtxo: {
    script: <Buffer 00 14 b0 f2 ef.....>,
    value: 51784
  },
  partialSig: [
    {
      pubkey: <Buffer 02 b3 e9 e3....more bytes>,
      signature: <Buffer 30 44 0 ... 21 more bytes>
    }
  ]
}

@ALDO2124
Copy link

ALDO2124 commented Jun 2, 2024

yes that is the expected outcome but on mine i do not get the partialSig
Screenshot 2024-06-02 224930

@ALDO2124
Copy link

ALDO2124 commented Jun 5, 2024

@huanniangstudio , if you need more info this is the psbt im trying to sign , its a combined psbt of a base psbt and signed psbt from 3 other multisig wallets
70736274ff01009a0100000002499454d809142f631179ae756213a29f709b27f0b807c66a11de4f93e874e1220000000000fdffffff974fa52949026050e485497bc6b1900b2d1ac11de44456cfcbda859d5337bb5d0100000000fdffffff0222020000000000001600144f4ea0253cc4b08cc02f3591c1fdcf6dfc2d0199e2c30000000000001600144f4ea0253cc4b08cc02f3591c1fdcf6dfc2d0199a2e60c000001012b22020000000000002251205d2ebd13886c80ca4ef254fffc8ab4ce3527c630cad35d751b6c2533bb5633780103048300000041147032d63a356a821804b204bc6fb6f768e160fefb36888edad296ab9f0ad88a33db84236e776b1b073fd55ffdfb225335ff8b5935945a4ada1e01b1eefd11969c41b3105778198979c803a22a1c82139ce83e29393a110804b78e02e14a6bacca4ceb93097299bdf52827611e45eb501dbb82825feaaf2455c16e55b9067f6f7c6583411493f448b315936fe3d38610fd61f15f893c3d8af8dc4dbaeacb35093f827e5820db84236e776b1b073fd55ffdfb225335ff8b5935945a4ada1e01b1eefd11969c413323735d7847be06c1b1887a2d112534517c41a603b4362c75a052b12fe6fbc6832b2f3bebba87ad1c5dc0d78324fcc477b183a5a4250bd5d6d67195934f98208341149469e94e617fb421b9298feeb0d3f7e901948b536803bde97da7752fe90c95e0db84236e776b1b073fd55ffdfb225335ff8b5935945a4ada1e01b1eefd11969c41f64916a217d7935b6903eba8b15efe65c38bea5f24a9b7fb1fa4a639c3f1a72dd7650fb99a24817b8cb1c69a6e92cec2d91dcd93c207c945b36c8662597dff4a832215c1020202020202020202020202020202020202020202020202020202020202020269207032d63a356a821804b204bc6fb6f768e160fefb36888edad296ab9f0ad88a33ac209469e94e617fb421b9298feeb0d3f7e901948b536803bde97da7752fe90c95e0ba2093f448b315936fe3d38610fd61f15f893c3d8af8dc4dbaeacb35093f827e5820ba529cc021160202020202020202020202020202020202020202020202020202020202020202050051814f1021167032d63a356a821804b204bc6fb6f768e160fefb36888edad296ab9f0ad88a332501db84236e776b1b073fd55ffdfb225335ff8b5935945a4ada1e01b1eefd11969c1ce91543211693f448b315936fe3d38610fd61f15f893c3d8af8dc4dbaeacb35093f827e58202501db84236e776b1b073fd55ffdfb225335ff8b5935945a4ada1e01b1eefd11969c381ea5e121169469e94e617fb421b9298feeb0d3f7e901948b536803bde97da7752fe90c95e02501db84236e776b1b073fd55ffdfb225335ff8b5935945a4ada1e01b1eefd11969cd8b768770117200202020202020202020202020202020202020202020202020202020202020202011820db84236e776b1b073fd55ffdfb225335ff8b5935945a4ada1e01b1eefd11969c0001012b48ca000000000000225120dbaf82a5f3367f2a00d2d33c7acf7bf8301ce9bd6bd8283ff518bce0e8916c75000000

@ALDO2124
Copy link

ALDO2124 commented Jun 5, 2024

i get the data as
[ { "psbt": "", "signed_psbts": [ { "pub_key": "", "signed_psbt": "" } ] } ]
and i signed using
` const psbtInfo: psbtReturn[] = await req.json()
const signedPsbts = psbtInfo[0].signed_psbts.map(item => item.signed_psbt);

  const unisat = (window as any).unisat;
  let basePsbt = bitcoin.Psbt.fromBase64(psbtInfo[0].psbt);
  signedPsbts.forEach(signedPsbtData => {
    const signedPsbt = bitcoin.Psbt.fromBase64(signedPsbtData);
    basePsbt.combine(signedPsbt);
  });
  let sign = await unisat.signPsbt(basePsbt.toHex(),
  {
    autoFinalized:true,
    toSignInputs:[
      {
        index: 1,
        address:address,
      }
    ],
})`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants