#bond #liquid #spend #public-key #bitcoin #bonds #double

bin+lib doubletake

一个用于在 Liquid 上创建比特币双花惩罚债券的库和 CLI 工具。

13 个版本

0.0.0-alpha.132023 年 9 月 1 日
0.0.0-alpha.122023 年 8 月 29 日
0.0.0-alpha.12023 年 7 月 31 日

#4 in #bonds

Download history 2/week @ 2024-03-09 1/week @ 2024-03-16 70/week @ 2024-03-30 14/week @ 2024-04-06

82 每月下载量

CC0 许可证

68KB
1.5K SLoC

doubletake

一个用于在 Liquid 上创建比特币双花惩罚债券的工具。

警告:请不要在实际用例中使用此工具。该债券的设计中仍有几个已知的缺陷,使得债券可被规避。

工作原理

此工具将允许您在 Liquid 上创建一个债券,您可以将一些资金锁定一段时间,任何人都可以在证明您使用与债券绑定的公钥在比特币上尝试双花后将其烧毁。

开始之前,您需要指定要创建债券的公钥。

请注意,一个债券只能为 segwit v0 或 taproot 中的一个工作,不能同时为两者。此外,目前仅支持 segwit。

CLI

默认包含 CLI 工具。

$ cargo install doubletake
$ doubletake create --segwit \
    --pubkey 028c920fd8a18688dada0af50177941c80920c0dc86c2ecba6b13784dcbd0ffcb7 \
    --bond-value "2 BTC" \
    --expiry 1722369854 \
    --reclaim-pubkey 03339c911ea18b24c3dea446ca4b8ba5d1b9cf5de0170a1d9fde2da17ec8431a56
{
  "address": "ex1qref05f3urpcrcr59x45tar2xu3y0hppfcd6avujq5kerxqfhr73smdjj5h",
  "spec": "AAKMkg_YoYaI2toK9QF3lByAkgwNyGwuy6axN4TcvQ_8twDC6wsAAAAAbVIcOOweoVc0riK3xGBkQSgpwNBXnwpxPRwE7el5Am8-R6lmAzOckR6hiyTD3qRGykuLpdG5z13gFwodn94toX7IQxpW"
}%

作为 Rust 库

如果您只想将 doubletake 作为 Rust 库使用,您可以通过禁用默认功能 cli 来关闭 CLI 依赖项。

测试

有一个集成测试,用于测试以下内容:

  • 针对 libelementsconsensus,但目前该测试未通过
  • 针对一个应该正在运行的 elementsregtest 网络

您可以按照以下方式运行兼容的 regtest 网络

$ elementsd -chain=elementsregtest -server=1 -validatepegin=0 -rpcport=8888 -rpcuser=testuser -rpcpassword=testpass -anyonecanspendaremine=1 -initialfreecoins=2100000000000000 -blindedaddresses=0
$ # in another terminal, prepare as follows:
$ elements-cli -chain=elementsregtest -rpcuser=testuser -rpcpassword=testpass -rpcport=8888 createwallet ""
$ elements-cli -chain=elementsregtest -rpcuser=testuser -rpcpassword=testpass -rpcport=8888 rescanblockchain

您可以按照以下方式运行测试

$ cd ./integration_test/
$ cargo run -- regtest

WASM

要为 WASM 编译,请使用 wasm 功能。

$ wasm-pack build --target web -- --features wasm

观察结果

目前我们只支持 segwit v0 花费。这意味着任何由给定公钥执行的 segwit v0 花费都应得到覆盖。这意味着 p2wpkh 和 p2wsh。

此外,我们的实现应该足够健壮,以支持任何 sighash 标志。因此,如果您持有带有任何 sighash 标志的未确认花费的输出,那么如果使用另一个 sighash 标志执行其他类型的花费,您将能够烧毁债券。

这在使用 taproot 时变得更加困难,因为 sighash 结构会根据使用的 sighash 标志而显着变化。taproot 版本仍在开发中。

依赖项

~14MB
~155K SLoC