Skip to content

Instantly share code, notes, and snippets.


Lloyd Fournier LLFourn

View GitHub Profile


Hi dlc-dev and bitcoin-dev,

tl;dr OP_CTV simplifies and improves performance of DLCs by a factor of a lot.


Dryja introduced the idea of Discreet Log Contracts (DLC) in his breakthrough work[1]. Since then (DLC) has become an umbrella term for Bitcoin protocols that map oracle secret revelation to an on-chain transaction which apportions coins accordingly.

View base2048-test
ª 0xAA
µ 0xB5
º 0xBA
À 0x41
Á 0x41
à 0x41
Ä 0x41
Å 0x41
Æ 0xC6
View collisions.raku
sub MAIN(Int \m, Int \n, Int :$samples = 10_000) {
my \q = 2 ** 19 - 1;
my \m-n = m ** n;
# experiment should be done over a prime field so that it mirrors reality
say "q = {q} (is-prime: {})";
say "samples = {$samples}, m = {m}, n = {n}, m ^ n = {m-n}";
sub count-collisions(@table) {
# This line of code:
LLFourn /
Last active Mar 15, 2021
rust code for anticipating signatures for Discreet Log Contract oracles with the standard rust-secp256k1 library
//! PoC style code for anticipating BIP-340 style signatures for PoC DLC stuff.
//! WARNING this doesn't check that:
//! 1. Public keys have an even Y coordinate
//! 2. Public nonces have a square Y coordinate
//! If the public keys are in the right form, then this should produce valid
//! BIP-340 signatures (to be fully compatible then the tag needs to be set
//! correctly).
//! Add to Cargo.toml:
LLFourn /
Last active Jan 5, 2019
Re: [Lightning-dev] An Argument For Single-Asset Lightning Network

This is a response I made to the thread that didn't make it into the archive (I think) :

Happy new year lightning-dev!

This topic is my main area of research at moment so I'm really happy to see a thread about it. In general I agree with ZmnSCPxj's analysis and conclusions. I'd like to add a couple of ideas to this discussion and would greatly appreciate some early peer review on them :)

HTLCs as American call options

LLFourn / Rakudo.sp
Created Nov 29, 2017
in dev Spit module for building rakudo docker images
View Rakudo.sp
class Rakudo {
constant File $:install-to;
constant $:checkout = '2017.07';
constant File $:clone-to = './rakudo';
constant GitHub $:zef-repo = 'ugexe/zef';
constant GitHub $:repo = 'rakudo/rakudo';
constant Bool $:debug-moar;
static method install-deps on {
LLFourn /
Last active Oct 24, 2020
Docker, Getting around PID 1
# So you want to pipe shell scripts to docker. But docker runs the container's command as PID 1.
# Linux doesn't set up signal handlers for PID 1.
# This gives you the following problems:
# 1. The script can't kill itself:
echo 'kill $$; echo "Still alive"' | docker run -i --rm alpine sh
# 2. You can't kill the script from outside with a normal kill:
echo "sleep 1000" | docker run -i --rm alpine sh & sleep 1 && kill $!
docker ps # it didn't die
#==== Solving problem 1 ====
View rest.txt
A 9.0422700
C 10.6984718
B 10.3635278
a 17.9581401
b 21.61539652
c 27.7105599
A 4.126187
C 4.918153
LLFourn /
Created Apr 7, 2017
The script I used to benchmark samcv++'s branch
for i in $(seq 1 5); do
./install/bin/perl6 -e '"a" x 1000000000 ~ "b" ~~ /b/; say now - INIT now;'
done | awk '{ v += $0; i++; }; END { print v/i }'
LLFourn / native-int-perf.p6
Created Mar 12, 2017
Shows the difference in performance between native ints and vanilla.
View native-int-perf.p6
#!/usr/bin/env perl6
sub perl6-loop($n)
my $sum = 0;
for 1..$n -> $i {
for 1..$i -> $j {
$sum += $i+$j;