I am using ledger and multi sig to sign a transaction I got signature hash where both party signed the transaction. How can I attached this signature to the transaction so that I can broadcast it to network? any code reference will be welcome. Currently I am referencing electrum code.
1 Answer
How can I attached this signature to the transaction so that I can broadcast it to network?
This is more agnostic to any particular wallet software, but I hope it's helpful. When you sign a transaction, you then put the signatures in the scriptSig
field of the input
it corresponds to (the tx may have multiple inputs).
For a m-of-n multisig transaction, the scriptSig
format is:
0 <sig1> ... OP_m <pubKey1> ... OP_n OP_CHECKMULTISIG
To broadcast it to the network, you can use the broadcast command in electrum:
cat signed.txn | electrum broadcast -
If successful, the command will return the ID of the transaction.
Alternatively you can use the sendrawtransaction
RPC
on a node running Bitcoin core.
sendrawtransaction "hexstring" ( allowhighfees )
Submits raw transaction (serialized, hex-encoded) to local node and network.
Also see createrawtransaction and signrawtransaction calls.
Arguments:
1. "hexstring" (string, required) The hex string of the raw transaction)
2. allowhighfees (boolean, optional, default=false) Allow high fees
Result:
"hex" (string) The transaction hash in hex
Examples:
Create a transaction
> bitcoin-cli createrawtransaction "[{\"txid\" : \"mytxid\",\"vout\":0}]" "{\"myaddress\":0.01}"
Sign the transaction, and get back the hex
> bitcoin-cli signrawtransaction "myhex"
Send the transaction (signed hex)
> bitcoin-cli sendrawtransaction "signedhex"
As a json rpc call
> curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "sendrawtransaction", "params": ["signedhex"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/