Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/antonilol/btc_stuff
Bitcoin transaction examples with bitcoinjs-lib
https://github.com/antonilol/btc_stuff
bitcoin bitcoinjs-lib blockchain ecdsa js p2sh p2sh-p2wsh p2wsh ts
Last synced: 1 day ago
JSON representation
Bitcoin transaction examples with bitcoinjs-lib
- Host: GitHub
- URL: https://github.com/antonilol/btc_stuff
- Owner: antonilol
- License: mit
- Created: 2021-12-11T19:17:22.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2024-11-02T16:07:13.000Z (13 days ago)
- Last Synced: 2024-11-02T16:29:02.031Z (13 days ago)
- Topics: bitcoin, bitcoinjs-lib, blockchain, ecdsa, js, p2sh, p2sh-p2wsh, p2wsh, ts
- Language: TypeScript
- Homepage:
- Size: 380 KB
- Stars: 13
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# btc_stuff
Bitcoin transaction examples with bitcoinjs-lib
This is a collection of scripts with various aspects of bitcoin tech (mostly scripts) in TypeScript and/or JavaScript.
When dealing with TypeScript files, run `npm run build` before running them with `node `, or use `ts-node `.**(!) Use at your own risk, only use on the mainnet if you are 100% certain it works the way you want or funds can be lost! (!)**
Developed mostly using Bitcoin Core v23, some older ones could expect v22 RPCs
### Example usage
Note: this example still works for some files, but is subject to change
Requirements:
Make sure to have
- a bitcoin node synced and running on the desired network/networks
- `bitcoin-cli` working
- nodejs and npm installed and workingClone this repository, `cd` into it and install npm dependencies.
```bash
git clone https://github.com/antonilol/btc_stuff.git
cd btc_stuff
npm install
```Choose a script you want to start with.
I will use [p2sh.js](./p2sh.js) here.Edit something (optional), for example: change `OP_13` to `OP_12`.
Run it
Most scripts will either output a locking script or an address,
in this case it is a locking script, so put this locking script
in Bitcoin Core's `decodescript` rpc.```bash
$ bitcoin-cli -testnet decodescript 935c87
{
"asm": "OP_ADD 12 OP_EQUAL",
"type": "nonstandard",
"p2sh": "2N9h3wvypp2oLaaGfHiDVix5GSeTPMGnhQv",
"segwit": {
"asm": "0 a5d2c3f6d91680a99d36ef8ba054a57ab220520f7ebe93ddb56316f85f292315",
"hex": "0020a5d2c3f6d91680a99d36ef8ba054a57ab220520f7ebe93ddb56316f85f292315",
"address": "tb1q5hfv8akez6q2n8fka796q49902ezq5s006lf8hd4vvt0shefyv2sw96epz",
"type": "witness_v0_scripthash",
"p2sh-segwit": "2NCqyYd7K5K9pj6SiUXV65NV5baZNvtfxPE"
}
}
```We will be using the address next to `p2sh`: `2N9h3wvypp2oLaaGfHiDVix5GSeTPMGnhQv`.
Send some sats to this address, 1000 for example:
```bash
$ bitcoin-cli -testnet sendtoaddress 2N9h3wvypp2oLaaGfHiDVix5GSeTPMGnhQv 0.00001000
ae70f2d7625184471c9bbf3dea64febc5b562131f2b7c6ccbf3125d493402ac1
```This will give a TXID, look this up on a block explorer to find out where the desired output is.
You need to look for the _output index_, where the output with this P2SH address is, counting from zero.
(If it is the first output, the output index is 0, if it is the second, it is 1 and so on.)
Now go back to your editor and put the TXID and the output index in.
It will look like this:
```js
const txid = 'ae70f2d7625184471c9bbf3dea64febc5b562131f2b7c6ccbf3125d493402ac1'; // txid hex here
const vout = 1;
```We also need to change the input script because we changed the value from 13 to 12.
The script `OP_ADD 12 OP_EQUAL` expects 2 numbers that add up to 12, i will chose 4 and 8 here.
```js
tx.setInputScript(0, bitcoin.script.compile([
bitcoin.opcodes.OP_4,
bitcoin.opcodes.OP_8,
redeemScript
]));
```Some other values need to be set too, like
`input_sat` to how much sats you sent to the address,
`fee_sat` to how much fee you want to pay and
put your own receiving address of a wallet over the placeholder `tb1qbech32addresshere`.Now by running the script it should create and broadcast your transaction and print its TXID to the console.
This TXID can also be looked up in a block explorer.
([mempool.space](https://mempool.space) and [blockstream.info](https://blockstream.info) have a
`Details` button to show advanced details about scripts.)If you have any questions, found bugs or have an improvement/addition feel free to submit it
in either issues, discussions or pull requests.### Network
Almost all scripts by default use `testnet`. To use another network (for example mainnet):
add
```js
setChain('main'); // Where 'main' can be replaced by 'test', 'signet' or 'regtest'
```
(`setChain` may need to be imported from `./btc.js`)and if applicable (not all script use `bitcoinjs-lib`), change
```js
const network = bitcoin.networks.testnet;
```
to
```js
const network = bitcoin.networks.bitcoin; // Where bitcoin can be replaced by testnet or regtest.
// For signet, use testnet (they use the same address prefix).
```