Bitcoin tarjosi ensimmäisen älykkään sopimusohjelmointikielen, jonka maailma oli koskaan nähnyt. Skripti, jota tätä kieltä kutsutaan, antaa käyttäjien koodata erilaisia ehtoja, joissa kolikoita voidaan käyttää. Mutta vaikka tämä oli vallankumouksellinen käsite, sitä ei ole helppo käyttää, varsinkin monimutkaisemmissa meno-olosuhteissa. Sekä monimutkaisen sopimuksen kirjoittaminen että sen varmistaminen, että sopimus tekee sen, mitä sen on tarkoitus tehdä, ovat alttiita inhimillisille virheille. Varsinkin rahan ollessa kyseessä, ehtojen oikea tulkinta on kuitenkin äärimmäisen tärkeää.
Kuluneen vuoden aikana blockchain-insinöörit Andrew Poelstra, Pieter Wuille ja Sanket Kanjalkar pyrkivät parantamaan tätä. Riisumalla Script sen paljaisiin oloihin, heidän “uuden” ohjelmointikielensä – “Pienikokoinen”- tiivistää monimutkaisuuden ja pitäisi tehdä Bitcoin-ohjelmoinnista helpompaa ja turvallisempaa kaikille mukana oleville.
“Miniscript on teoreettisessa mielessä rajoittavampi kuin käsikirjoitus”, Blockstream-tutkimuksen johtaja ja Miniscript-suunnittelija Andrew Poelstra kertoi Bitcoin Magazine -lehdelle. “Mutta se voi tehdä kaiken, mihin ihmiset todella käyttävät komentosarjaa.”
Skripti
Aloitetaan alusta.
Jokainen Bitcoin-tapahtuma koostuu kahdesta pääosasta: tulot ja lähdöt, jotka molemmat koostuvat koodikappaleista. Syötteet “avaavat” kolikot ja lähdöt “lukitsevat ne uudelleen” määrittelemällä, missä olosuhteissa ne voidaan avata seuraavassa tapahtuman syötössä. Tällaiset vaatimukset sisältävät yleensä kelvollisen kryptografisen allekirjoituksen, mutta mahdollisuuksia on enemmän; esimerkiksi ehkä jonkin aikaa on kulunut, ennen kuin kolikko voidaan käyttää, tai erityinen salainen numero on sisällytettävä.
Tämä tapahtumien koodi luodaan Scriptillä, joka on erityisesti suunniteltu Bitcoinille. Skriptin inspiroi Forth, 1960-luvulla keksitty ohjelmointikieli, joka oli alun perin suunniteltu radioteleskooppien käyttämiseen. Komentosarjaa kuitenkin muokataan, jotta se sopisi paremmin Bitcoiniin.
Esimerkiksi Scriptillä ei ole silmukoita tekevää opkoodia (käskyä): kieli ei tue saman laskennan suorittamista rajattomasti useita kertoja. Bitcoinissa samaa laskentaa ei tarvitse suorittaa rajattomasti, koska Bitcoin-solmut eivät todellakaan laske tapahtumia – ne vahvistavat tapahtumia. (Katso teknisempi selitys miksi näin on Tämä postaus kirjoittanut Blockstream-insinööri Russell O’Connor.)
Skripti on myös “kirjoittamaton”. Tämä tarkoittaa, että laskelmien tuloksia voidaan tulkita ja käyttää eri tavoin. Esimerkiksi kelvollisen allekirjoituksen tulos voi olla “totta”, mutta “tosi” voidaan puolestaan tulkita ja käyttää lukuna “1” ja käyttää myöhemmin matemaattisissa yhtälöissä: “tosi” ja “tosi” lisäisi enintään “2”, mikä voi esimerkiksi tarkoittaa, että riittävästi allekirjoituksia annettiin, jos vaaditaan vähintään kaksi kelvollista allekirjoitusta.
Tämä tuo meidät Scriptin tärkeimpään omaisuuteen tämän artikkelin yhteydessä: on vaikea “syy.”Tämä tarkoittaa olennaisesti sitä, että laskelmien tuloksia voidaan tulkita monin tavoin. Vaikka esimerkiksi allekirjoitus olisi virheellinen, komentosarja voidaan kirjoittaa siten, että tapahtuma on edelleen voimassa jostakin muusta syystä.
“Bitcoin Scriptissä on opcodeja, jotka tekevät todella järjettömiä asioita”, Poelstra selitti. “Tulkitse allekirjoitus tosi / vääränä arvona, haara siihen; muuntaa tämä looginen luku luvuksi ja indeksoi sitten pinoksi ja järjestä pino uudelleen numeron perusteella. Ja erityiset säännöt sen tekemisestä ovat superpähkinöitä. “
Tämä voi tehdä skriptistä hankalaa työskennellä. Varsinkin jos kolikoiden kulutusta (“lukituksen avaamista”) koskevat vaatimukset muuttuvat monimutkaisemmiksi, kaupan tekijä voi tahattomasti sisällyttää koodiin jotain, jonka avulla kolikot voidaan käyttää erilaisissa olosuhteissa kuin on tarkoitettu. Päinvastoin, tapahtuman vastaanottaja voi jättää huomiotta tällaisen oudon ja menettää kolikkonsa hyökkääjälle, joka huomaa.
Konkreetti esimerkki ongelmasta
Tässä on konkreettinen esimerkki siitä, kuinka nämä ongelmat rajoittavat Scriptin hyödyllisyyttä.
Blockstream Green -lompakossa on vakiomuotoinen “cosigning” -asetus. Lompakon käyttäjä ohjaa yhtä kahdesta näppäimestä ja Blockstream ohjaa toista. Varat voidaan käyttää kahdella tavalla. Ensinnäkin, kun käyttäjä haluaa käyttää kolikkoa, hän allekirjoittaa tapahtuman ja pyytää, että myös Blockstream allekirjoittaa sen. Blockstream tekisi yleensä tämän, vaikka tämä saattaa vaatia, että käyttäjä vahvistaa, että hän todella haluaa suorittaa tapahtuman toissijaisilla tavoilla, kuten sähköpostivahvistuksella. Jokin saattaa kuitenkin mennä pieleen Blockstreamin lopussa – ehkä yritys katoaa tai menettää avaimensa tai se ei voi allekirjoittaa jostakin muusta syystä. Tällöin käyttäjällä on edelleen vararatkaisu bitcoinin käyttämiseen: Kun aikalukko on umpeutunut, hän voi luoda kelvollisen tapahtuman ennalta määrätyn ajan kuluttua. Ehkä kuukausi.
Tämä toimii hyvin, mutta se on myös rajoitettu. Käyttäjä ei voi käyttää enempää Bitcoinin älykkäästä sopimuspotentiaalista, vaikka hän haluaisi lisätä joustavuutta asennuksen lopussa.
“Tällä hetkellä Greenillä on kiinteä komentosarja, jota se käyttää kaikille asiakkaille, mikä on periaatteessa vain yksinkertainen moniallekirjoitus”, Poelstra sanoi. “Mutta oikeastaan meidän ei pitäisi välittää siitä, mitä käsikirjoitus sanoo. Me välitämme siitä: eikö kolikoiden käyttö ole mahdollista ennen aikakatkaisua ilman allekirjoitustamme? Jos käyttäjä haluaa käyttää jotain hullua käytäntöä kanssamme, meidän pitäisi pystyä tukemaan sitä, kunhan vain yksi meille välitettävä ehto täyttyy. “
Käyttäjä voi esimerkiksi haluta sallia rakkaansa viettää kolikon vuoden kuluttua, jos he kuolevat. Tai ehkä käyttäjä on itse asiassa yritys, ja se haluaa luoda multisig-kokoonpanon, jossa kukin kahdesta kolmesta hallituksen jäsenestä voi yhdessä käyttää kolikoita (yhdessä Blockstreamin kanssa).
Tällä hetkellä tämä voisi olla teknisesti mahdollista Bitcoin Scriptin avulla. Se vaatii kuitenkin, että käyttäjä suunnittelee mukautetun asennuksen, ja Blockstreamin tulisi osallistua tähän mukautettuun asetukseen.
“Mutta jos käyttäjä antaa meille mielivaltaisen komentosarjan, on mahdotonta sanoa, täyttyykö se yksi meille välitettävä ehto, koska kaikkien komentosarjojen käyttäytyminen on todella monimutkaista”, Poelstra selitti. “Jos esimerkiksi komentosarja näyttää ottavan allekirjoituksen, meidän on mietittävä, mitä tapahtuu, jos käyttäjä antaa ei-allekirjoituksen. Voiko sen huijata antamaan kolikoiden käyttää? “
Pienikokoinen
Kuluneen vuoden aikana Miniscriptin ovat suunnitelleet Poelstra, Blockstream Core -tekniikan insinööri Pieter Wuille ja Blockstream-harjoittelija Sanket Kanjalkar. (Miniscript ei kuitenkaan ole virallisesti Blockstream-tuote.)
Lyhyesti sanottuna Miniscript on “riisuttu” versio Scriptistä: valikoima “työkaluja” “Script-työkalupakista”, mikä helpottaa sen käyttöä ja ihmisten on helpompaa tarkistaa. Työkalut on valittu huolella, jotta käytännössä kaikki mitä voidaan tehdä Scriptillä – on vain joitain poikkeuksia, joita kukaan ei todellakaan käytä. Joten vaikka Miniscript-rivi on edelleen kelvollinen komentosarjan rivi, se välttää olennaisesti inhimillisiä virheitä estämällä koodin odottamattomat, ehkä tahattomat tulokset.
Ottaen esimerkin yllä olevasta ongelmasta, Miniscriptin avulla käyttäjä voi helposti suunnitella asennuksen siten, että Blockstream voi triviaalisti tarkistaa, että sen yksi ehto täyttyy. Erityisesti Blockstream voi nähdä, että varat voidaan koskaan käyttää vain, jos se allekirjoittaa tai jos on kulunut kuukausi – riippumatta siitä, mitkä muut ehdot sisältyvät käyttäjän asetusten loppuun, olipa kyse ylimääräisistä aikalukoista, multisigistä tai muusta. Miniscriptillä ei voi olla odottamattomia haittoja, jotka syrjäyttäisivät Blockstreamin loppun.
Minikirjoitus on itse asiassa niin suoraviivainen ja ennustettavissa, että asetus voidaan aina muuttaa päätöspuuksi: asennuksen visualisointi (“kuvakoodaus”), johon on helppo perustella.
Esimerkiksi alla oleva visualisointi näyttää asennuksen, jossa kahden käyttäjän kolmesta on allekirjoitettava kolikoiden siirtämiseksi. Varavaihtoehtona kolikoita voidaan siirtää hätäavaimella, mutta vasta jonkin ajan kuluttua.
Minikirjoituksen visualisointi
[Kirjoittajan huomautus: Kiitos Tejaswi Nadahallille osoittaa että aikaisempi kuvaus visualisoinnista oli virheellinen.]
“Miniscriptin avulla Blockstream voi helposti osallistua monimutkaisempiin asetuksiin – puretaan komentosarja puuksi ja sitten tarkistetaan jokaisen puun lehdet ja kysytään (a) onko tällä lehdellä aikakatkaisuehtoa ?; tai (b) edellyttääkö tämä lehti jotain allekirjoituksistamme? ” Poelstra sanoi.
Jos vastaus on kyllä molempiin kysymyksiin, Blockstream voi osallistua.
Pienikokoinen käytössä
Vaikka Miniscript on keskeneräinen työ, sen varhaiset versiot on julkaistu ja valmiita käyttöön.
Miniscriptin kirjoittamisen helpottamiseksi Wuille suunnitteli myös “käytännön kielen”. Toimintakieli on todella kuin oma ohjelmointikieli. Kun olet ohjelmoinut olosuhteet, joissa kolikko voidaan käyttää tällä politiikan kielellä, se voidaan koota (“kääntää”) Miniscriptiksi ja siten kelvolliseksi skriptiksi sisällytettäväksi Bitcoin-tapahtumalähtöön.
Tämän käytännön kielen suuri lisäetu on, että se kokoaa automaattisesti parhaan ja tehokkaimman version Miniscriptistä sen mukaan, mitä komentosarja todella koodaa.
“Miniscriptillä on se, että se on pohjimmiltaan Script … sinulla on paljon erilaisia tapoja kirjoittaa” tai “, useita tapoja kirjoittaa” ja “ja jotkut ovat tehokkaampia kuin toiset”, Poelstra sanoi. “Käytäntökielellä on vain yksi” tai “, yksi” ja “jne., Ja Pieter [Wuille] on kirjoittanut tämän erittäin optimoidun kääntäjän, joka muuntaa sen Miniscriptiksi sinulle ja tekee sen optimaalisella tavalla.”
Tämä ei ole vain teoreettinen käsite. Vaikka nykyinen Miniscript-versio ja kääntäjä eivät ole lopullisia versioita, Blockstream käyttää sitä sisäisesti Liquid-sivuketjun funktionaalisen ohjelmiston kehitystoiminnassa. (Poelstra huomautti, että Wuillen optimoivan kääntäjän käyttö tallensi Blockstream 22 tavua alkuperäiseen “käsin rullattuun” komentosarjaan verrattuna.) Wuille isännöi Miniscript-kääntäjälle käytäntökielten demoversiota kenelle tahansa käytettäväksi http://bitcoin.sipa.be/miniscript/.