Bitsaga Signet

Het testnetwerk achter de simulator.

Een privaat Bitcoin-netwerk dat ik zelf draai, met om de dertig seconden een blok en een faucet die altijd coins heeft. Het bestaat voor één taak: de multisig-tutorial in de SeedSigner-simulator laten werken, met echte bevestigingen en zonder dat er iets op het spel staat.

Je kunt je eigen wallet niet met dit netwerk verbinden. De Electrum-server waarmee een wallet zou synchroniseren, luistert bewust enkel op mijn eigen private netwerk, en ik ben niet van plan die open te zetten. Deze pagina legt uit wat het netwerk is. Wat je echt gebruikt, is de simulator.

Dit zijn geen echte bitcoin. Ze bestaan enkel op dit testnetwerk, kunnen niet verkocht of naar iemand gestuurd worden, en zijn niets waard.

Het netwerk controleren
Blok
...
Laatste blok
...
Faucet
...

Wat een signet is

Een Bitcoin waarvan ik de blokken onderteken.

Een signet is een Bitcoin-netwerk waarin een blok pas meetelt als het een handtekening draagt die overeenkomt met een aangewezen challenge-script. Wie de bijbehorende sleutel heeft, bepaalt wat een blok is. Ik maakte de challenge zelf aan, dus dit is mijn eigen keten: mijn tempo, mijn faucet, altijd beschikbaar, geen reorgs, niets gedeeld met het testnetwerk van iemand anders.

Al de rest gedraagt zich precies als Bitcoin, want de software is Bitcoin: dezelfde node, dezelfde adressen, dezelfde handtekeningen, dezelfde deels ondertekende transacties die heen en weer gaan tussen een wallet en een ondertekentoestel. Dat is net de bedoeling. Een 2-op-3 multisig die je hier bouwt, is de echte procedure, geen animatie ervan.

Publieke testnetwerken waren de makkelijkere keuze geweest, en de slechtere. Blokken komen wanneer het hun uitkomt, faucets raken leeg, en de keten reorganiseert zichzelf soms onder je voeten. Dit netwerk maakt om de dertig seconden een blok, zodat een bevestiging binnenkomt terwijl je nog naar het scherm kijkt. Dat is het verschil tussen een tutorial die iemand afmaakt en een die hij opgeeft.

Geen publiek netwerk

Waarom je niet kunt aansluiten.

Het onderdeel waar een wallet echt mee praat, is een Electrum-server, en de mijne luistert op localhost en op mijn eigen private netwerk, nergens anders. Dat is een keuze, geen onafgewerkt werk. Een langlopende socket openhouden voor vreemden, op een machine die ook een mainnet-node draait, is een blootstelling die ik zou aangaan voor een keten waarvan de coins niets waard zijn. De simulator bereikt het netwerk van binnenuit, en meer heeft hij niet nodig.

Er valt hier dus niets aan te wijzen voor een wallet, en er is geen instelling die ik je zou kunnen geven om dat te veranderen. De peer-to-peerpoort van de node is om dezelfde reden gesloten voor de buitenwereld, dus je kunt je eigen node evenmin met de mijne synchroniseren. Publiek zijn precies twee dingen: de statusweergave hierboven en de faucet hieronder.

Netwerk
Bitsaga Signet, een eigen signet, privé van mij
Signet-challenge
0014cb5c938876427c86a068fba6d6ddd09ed4fa183f
Bloktijd
30 seconden
Adresformaat
testnet, tb1...
Munttype
1', hetzelfde als testnet
Open voor wallets
Nee. Zowel Electrum als peer-to-peer zijn privé aan dit netwerk.

Adressen beginnen hier met tb1, net als bij het testnet van Bitcoin. Dat is geen vergissing: signet deelt bewust het adresformaat en de sleutelafleiding van testnet. Daarom staat de simulator ingesteld op Testnet en niet op iets anders, en daarom heeft SeedSigner geen signet-optie om naar te zoeken.

De challenge hierboven is het script waartegen elk blok op dit netwerk ondertekend moet zijn. Het is wat dit een aparte Bitcoin maakt in plaats van een kopie van een bestaande, en het is geen geheim. De sleutel die ertegen ondertekent, is dat wel, en die verlaat de machine niet.

De faucet

Waar de coins vandaan komen.

Dit is de faucet die de tutorial gebruikt om de wallet te vullen die je in de simulator bouwt. Hij is publiek, dus je kunt hem ook met de hand bedienen: plak een adres, krijg 0,01 test-bitcoin, en ongeveer dertig seconden later zit die in een blok.

Het is eerlijk om te zeggen wat je daarmee opschiet. De betaling is echt en ze belandt op de keten, maar zonder de mogelijkheid om een wallet te verbinden kun je ze niet zien aankomen. In de simulator kan dat wel, en dat is de hele reden waarom de faucet bestaat.

Plak een adres uit de simulator en de faucet stuurt er coins naartoe.

Controleer het zelf

Neem niets van dit alles zomaar van mij aan.

Een pagina kan beweren dat ze een Bitcoin-netwerk draait door er een getal in te typen. Deze geeft je in de plaats de echte bytes. Hieronder haalt je browser het laatste blok van deze keten en doet hij de controle over die Bitcoin Core doet: hij berekent wat ondertekend werd, zoekt de handtekening in het blok, en bevestigt dat ze gemaakt is door de sleutel waar dit netwerk naar genoemd is. Het rekenwerk gebeurt op jouw machine, in één bestand dat je kunt lezen, zonder bibliotheek en zonder iets dat ik je gestuurd heb, behalve het blok zelf.

Dat maakt deze coins nog altijd niets waard. Ze zijn niets waard, en geen enkele geldige handtekening verandert daar iets aan. Wat het aantoont, is dat de blokken hier echt ondertekend zijn door de sleutel waar deze keten naar genoemd is, en dat is een andere en veel bescheidener bewering.

Hoe deze keten heet, in de termen van Bitcoin zelf

Signet-challenge
0014cb5c938876427c86a068fba6d6ddd09ed4fa183f

Het script waartegen elk blok hier ondertekend moet zijn. Het publiceren ervan is net de bedoeling: het is wat dit een aparte Bitcoin maakt in plaats van een kopie van een bestaande. Het laat niemand binnen, want er is niets publieks om mee te verbinden, en de sleutel die eraan voldoet, verlaat de machine nooit.

Netwerkmagie
...

De vier bytes waarmee elk bericht tussen nodes op deze keten begint. Nodes gooien alles weg dat met die van iemand anders begint. Deze pagina leidde ze af uit de challenge hierboven in plaats van ze gewoon te krijgen, en daarom hangen de twee samen in plaats van enkel naast elkaar te staan.

Genesisblok
00000008819873e925422c1ff0f99f7cc9bbb232af63a077a480a3633bee1ef6

Het eerste blok. Even eerlijk zijn: dit blok is niet van mij. Bitcoin Core legt voor elk signet één genesisblok vast in de code, dus het publieke signet en elk eigen signet delen dat blok. Het vertelt je dat dit een signet is. Het vertelt je niet welk.

Het laatste blok, hier gecontroleerd

Het laatste blok ophalen en zijn handtekening controleren in je browser.

Wat dit niet aantoont. Dat het blok op een keten staat die iemand anders kan zien. Ik draai de enige node op dit netwerk en ik heb de sleutel die de blokken ondertekent, dus ik zou een blok kunnen ondertekenen en het je tonen zonder dat het deel uitmaakt van wat dan ook. Dat uitsluiten vraagt een tweede, onafhankelijke node, en dit netwerk heeft er bewust geen. Wat de controle wél uitsluit, is een verzonnen getal: zonder de sleutel maakt niemand een blok dat slaagt.

Een transactie, en het blok waarin ze belandde

Hetzelfde idee, één stap verder. Plak het id van eender welke transactie op deze keten en je browser controleert drie dingen na elkaar: dat de bytes echt die transactie zijn, dat ze via een merkle-pad optellen tot een bepaalde blokheader, en dat die header de handtekening van dit netwerk draagt. Vraag hierboven iets aan de faucet en het id verschijnt vanzelf in dit vak.

Niets bij de hand?

Wat dit niet aantoont. Hetzelfde als hierboven, plus nog iets: een bevestiging op deze keten is een bevestiging op deze keten. Het is geen betaling, de coins zijn niets waard, en niemand van buitenaf ziet er iets van.

De tutorial

Waar dit netwerk voor dient.

Multisig is dat ding waar mensen instemmend bij knikken en dat ze daarna nooit opzetten, omdat de eerste poging de spannende is en niemand die met echte coins wil doen. De SeedSigner-simulator loodst je door zo'n eerste keer: drie seeds op drie kaarten, een 2-op-3-wallet gebouwd uit hun publieke sleutels, coins uit de faucet, en dan een uitgave die twee keer ondertekend en uitgezonden wordt. Dit netwerk zorgt ervoor dat dat eindigt in een bevestiging in plaats van in een schouderophalen.

De doorloop zit in de simulator, niet hier. Het is een ondertekentoestel dat je in je browser bedient, met de tutorial ernaast. Gebruik daar een wegwerpseed, nooit een die echt geld bevat.

Eerlijke kanttekeningen

Dingen die je moet weten.

Dit zijn geen echte bitcoin. Ze bestaan enkel op dit testnetwerk, kunnen niet verkocht of naar iemand gestuurd worden, en zijn niets waard. Niemand kan ze je verkopen, en biedt iemand aan om ze van je te kopen, dan is dat precies de oplichting.

Het is geen netwerk waar je op kunt aansluiten. De Electrum-server is privé van mij en de peer-to-peerpoort is gesloten, dus geen enkele wallet of node van buitenaf kan met deze keten synchroniseren. Dat ligt vast, het is geen gat dat nog opgevuld moet worden.

Het netwerk kan gereset worden. Het is een leermiddel, geen dienst. Moet ik het ooit opnieuw opstarten, dan verdwijnt alles wat erop staat. Zet er dus niets op dat je zou missen.

Gebruik wegwerpseeds. Typ nooit een seed die echt geld bevat ergens in, ook hier niet. De simulator draait in een browsertabblad, precies de plek waar een echte seed nooit hoort te zijn, en geen enkel onderdeel ervan is gebouwd om er een te beschermen.

De tutorial houdt alle drie de sleutels op één toestel. Dat is prima om te leren en fout voor echt geld, want het hele punt van multisig is net dat de sleutels op verschillende plaatsen liggen, en vaak in verschillende handen.

Wil je het echte werk, dan loopt dezelfde flow op echte hardware met echte sleutels, en dat is de opstelling die ik samen met mensen bouw. Praat met me.