Skip to content

Instantly share code, notes, and snippets.

View remyers's full-sized avatar

Richard Myers remyers

View GitHub Profile
remyers /
Last active February 13, 2024 13:48 — forked from t-bast/
Coin selection for liquidity providers

Coin selection for liquidity providers

Bitcoin Core's coin selection algorithms optimizes mostly for the following metrics:

  • keep a low utxo count by consolidating regularly
  • avoid creating a change output
  • when a change output is needed, use an amount equivalent to the payment (for privacy)

This doesn't match what liquidity providers need. Liquidity providers need to:

remyers /
Last active September 1, 2023 11:33
Script to import recently used addresses from a legacy wallet into a new descriptor wallet
shopt -s expand_aliases
alias btc-cli='bitcoin-cli -datadir=.bitcoin'
if [[ $# -lt 3 ]]; then echo "usage: $0 <rpcwallet-from> <rpcwallet-to> <maximum confirmations>" ; exit 1 ; fi
remyers /
Last active January 16, 2023 13:15
channel interceptor comparison
CLN (openchannel, openchannel2) LND (ChannelAcceptResponse) Eclair Description Example plugin use cases Include? Reason
result accept AcceptOpenChannel, RejectOpenChannel accept or continue the channel open whitelist Yes basic usage
psbt, our_funding_msat fundingAmount, psbt? to add inputs/outputs
remyers /
Last active December 18, 2023 02:35
async-payments user story: donation QR code

The async-payment user story I'm interested in exploring is a mobile user (not always connected) who wants to receive donations (no PoP) via a static invoice from another mobile user.

My understanding of how this could work:

  1. The static invoice should contain a blinded route to the payment receiver via their LSP and an ephemeral public key that the payment sender will use to encrypt the last hop of a payment onion containing a keysend TLV. The LSP of the payment receiver must support store-and-forward of onion messages.

  2. A payment sender builds a payment onion where the first hop is their LSP that supports trampoline payments, onion messages and async-payments. The first hop of the onion includes a TLV to indicate the payment should be held until triggered (with a async-payment nonce) and gives the blinded route to the payment receiver. The last hop of the onion is encrypted to the payment receiver's ephemeral public key and includes:

  • the keysend TLV payment secret
  • the amount being sent
remyers / wsl2-network.ps1
Created January 24, 2022 14:35 — forked from xmeng1/wsl2-network.ps1
WSL2 Port forwarding port to linux
$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';
if( $found ){
$remoteport = $matches[0];
} else{
echo "The Script Exited, the ip address of WSL 2 cannot be found";
#! /bin/sh
while [ $counter -gt 0 ]
cupsenable Canon_MX410_series__5FE302000000
sleep 60

Thoughts on timeouts for eltoo/lot49 based on conversation with Snyke Aug4, 2020.

  • Assume online access to blockchain data once per week
  • Then the settlement tx CSV should be 1 week (~1008 blocks)
  • BUT the problem is: what if upstream node does not have fully signed update tx?
  • NOT a problem for for nodes that originate or receive a payment because they do not have both an upstream AND downstream peers.

Bad Scenario: Node connections: A-> B -> C

[Fund Channel]
P=Musig(A,B)+scripts (for Taproot script-path spend)
Q=Musig(A,B) (for Taproot key-path spend)
OR ----------- [Cooperative Close]
remyers /
Last active April 27, 2020 07:52
LNProxy Ubuntu 18.04 Quick Start

Ubuntu 18.04 install steps:

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install software-properties-common
$ sudo apt install python-pip -y
$ sudo apt install python3-pip -y
$ sudo apt install python3.7-venv -y
$ sudo apt install python3.7-dev -y
remyers / gist:e2d4ba6a5cd277d6e319a52492425b90
Last active November 13, 2019 18:05
Debugging SighatureHash in interpreter.cpp
Add this code at end of add_eltoo_witness
self.log.debug("\nbtcdeb --tx=%s --txin=%s --modify-flags=\"-NULLFAIL\"\n",tx_hex, spend_tx_hex)
or to debug from a transaction:
self.log.debug("btcdeb --tx=%s --txin=%s\n", ToHex(close_tx), ToHex(setup_tx[A]) )
Add code before and in the method after the normal CHashWriter call to serialize the txTo.
template <class T>