Silentium minimizes bandwith requirements of Silent Payment (BIP352) light wallets (like silentium app).
Live on mainnet at bitcoin.silentium.dev thanks to Vulpem Ventures.
xychart-beta
title "fetch blocks vs. fetch scalars"
x-axis [842538, 842539, 842540, 842541, 842542]
y-axis "bytes to fetch"
line [ 20526, 45210, 74151, 119229, 161898 ]
line [ 1810000, 3500000, 5150000, 6860000, 9230000 ]
BIP352 defines silent payments as key-spend taproot script using a tweaked key.
silentpay_tapkey = key + tweak
tweak
is a shared secret computable by the receiver and the sender. As silent payments receiver, you must compute the following for each transactions:
tweak = scan_sec_key * input_hash * sum(inputs_pubkeys)
It means scanning all taproot transactions in every block making the wallet bandwidth requirements high.
Silentium connects to a full node and compute the public scalar
for each transaction containing unspent taproot outputs.
scalar = input_hash * sum(inputs_pubkeys)
Thus, a wallet can easily fetch those scalars for each block and compute the corresponding silent payments scripts. Combined with BIP158, the wallet may limit the number of blocks to download.
GET /v1/block/{height}/scalars
returns the list of scalars for each Silent Payment elligible transaction in the block. Scalars are 33-bytes hex-encoded curve point.
{
"scalars": [
"03c8c2baa6fafa19644c5f7da1ceb6b5e9c24aa079653457190a1201cd4a2c402c",
"02bc2b880ceb68cf296aea4089022755356b3b59dca8901b6ccb751caa0cdff6c3",
"...",
"020c8499f1d29e80357abbd66fa8df1314c2acb3d0d9f5c4110d8a97947864ef2e"
]
}
GET /v1/block/{height}/filter
given a block height, returns the BIP158 filter.
GET /v1/chain/tip
returns the latest block height with scalars computed.
- go 1.21
- bitcoin full node with
txindex=1
andblockfilterindex=1
silentium config is set using environment variables. See config.md for more details.
$ make build
$ ./build/silentium-[OS]-[ARCH]
Vulpem Ventures is a research-driven company focused on Bitcoin and privacy technologies. They gracefully sponsor the infrastructure of bitcoin.silentium.dev.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
-
sp1qqf2qnptr9rvk6fp7642gjadszkkk84x0rw4m09yvvcq04h2nrcgmyqh2rf5zm33l66vtr9am753jag0zepry5c33j3gx3nw3m380r3pnaglmylyx
-
bc1pj6zrvrq6s6d8jg5l4lzxe6z0zxv5vxnflthjkev5u4vxutwa9zxqu4f332
silentiumd by Louis Singer is licensed under Creative Commons Attribution 4.0 International