Miniscript: Smart Contracts & Bitcoin
Smart Contracts op Bitcoin worden een stuk makkelijker dankzij Miniscript. Met deze vereenvoudiging van de Script programmeertaal wordt het een stuk simpeler om Bitcoin smart contracts te creëren en verifiëren.
Smart Contracts op Bitcoin? Jazeker. Wanneer het over smart contracts gaat denken veel mensen vaak aan allerlei andere blockchains, maar Bitcoin was de eerste waarmee het mogelijk was om smart contracts te programmeren.
Een smart contract is een conditionele transactie: er kunnen voorwaarden geprogrammeerd worden aan een transactie. Die voorwaarden kunnen van alles zijn. Bijvoorbeeld de voorwaarde dat de bitcoins alleen te besteden zijn wanneer meerdere partijen ondertekenen (Multi-Sig). Of bijvoorbeeld dat de fondsen alleen besteedbaar zijn nadat er een bepaalde hoeveelheid tijd is verstreken (timelocks).
Dankzij deze smart contracts zijn allerlei innovatieve financiële toepassingen denkbaar die een stuk verder gaan dan het versturen van bitcoins van A naar B. Via de programmeertaal Script is het mogelijk om dergelijke smart contracts te programmeren. Daarmee is veel mogelijk maar het is ook ingewikkeld. Bitcoin gebruikt een complexe datastructuur en Script is een vrij basale programmeertaal die het niet makkelijker maakt. Zo kun je met Script een smart contract programmeren om op een bepaalde manier te handelen bij een bepaald soort input, maar is het niet altijd direct duidelijk wat er zal gebeuren wanneer er een ander soort input gegeven wordt.
Het is daarom ook lastig en tijdrovend om de werking van smart contracts in Script te verifiëren. En dat is wel belangrijk, want als het om geld gaat wil je natuurlijk niet dat er onverwachte dingen gebeuren. Dat moet beter kunnen, dachten Bitcoin programmeurs Pieter Wuille, Andrew Poelstra en Sanket Sanjalkar.
Miniscript
Een jaar lang werkten ze daarom aan Miniscript, een vereenvoudigde manier om in Script te programmeren. Miniscript is een aanvulling op Script en is bedoeld om de logica achter smart contracts voor mensen begrijpelijker te maken. Het is in de kern nog steeds Script, maar dan minder foutgevoelig en weergegeven in een structuur die voor mensen beter is te volgen.
Daardoor is het makkelijker om smart contracts te creëren die zich op een gewenste manier gedragen. Ook is het voor anderen eenvoudiger om de werking ervan te controleren. Vooral dat laatste kan wel eens een belangrijke bijdrage leveren aan de adoptie van smart contracts.
Volgens de ontwikkelaars is Miniscript voor de meeste praktische toepassingen te gebruiken. In het uitzonderlijke geval dat Miniscript niet voldoet is het nog steeds mogelijk om Script te gebruiken.
Om het nog makkelijker te maken heeft Pieter Wuille bovendien ook een 'policy language' ontwikkeld. Dat is als het ware nog een extra programmeertaal bovenop Miniscript. Daarmee kun je eenvoudig de voorwaarden voor een smart contract vastleggen, om die vervolgens op de meest efficiënte manier te laten vertalen naar Miniscript.
Dat levert programmeurs van smart contracts eenvoudigere bouwstenen op om fatsoenlijke en geoptimaliseerde smart contracts mee te creëren, zonder dat zij zelf telkens opnieuw het wiel hoeven uit te vinden.
“The thing about Miniscript is that it's basically Script … you have a ton of different ways to write ‘or,’ a ton of ways to write ‘and’ and some are more efficient than others. The policy language only has one ‘or,’ one ‘and’ and so forth, and Pieter [Wuille] has written this super optimized compiler which will convert that to Miniscript for you, and do it in the optimal way.” –Andrew Poelstra, Director of Research Blockstream
Een vroege versie van Miniscript werd vorige week al gedeeld via een Bitcoin mailinglist. Dat bevatte implementaties in de programmeertalen Rust en C++. Wanneer een definitieve versie van Miniscript beschikbaar wordt gemaakt is nog niet bekend.