Tento článek je o technologickém konceptu založeném na navrhované aktualizaci protokolu Taproot. Pokud ještě nejste obeznámeni se základy fungování Taproot, doporučujeme si nejprve přečíst tento vysvětlující text.
Taproot, potenciální upgrade na bitcoinový protokol, který poprvé navrhl přispěvatel Bitcoin Core Gregory Maxwell, je v pozdní fázi vývoje. Tato technologie se skládá z chytré kombinace krypto-triků, které by uživatelům umožnily skrýt složité inteligentní smlouvy v rámci běžně vypadajících transakcí – složitost se odhalí pouze v případě, že smluvní strany nebudou spolupracovat.
Díky využití této myšlenky přispívají přispěvatelé bitcoinového jádra, mimo jiné Jeremy Rubin, Antoine Riard, Gleb Naumenko a Gregory Maxwell, o obecném konceptu označovaném jako fondy plateb, joinpooly nebo coinpooly. Tyto fondy – zatím je budeme nazývat platebními fondy – by umožnily skupinám uživatelů sdílet vlastnictví stejných coinů (technicky: UTXO), jak jsou zaznamenány v bitcoinovém blockchainu, přičemž by některému z těchto uživatelů umožnil provádět (nebo přijímat) platby s nimi. Jelikož se skupina a její jednotliví členové „schovávají“ do struktury Taproot, všichni si užívají větší soukromí, flexibilitu inteligentních smluv a další výhody… a mohou si tyto výhody užít dokonce i mimo řetězec, což z platebních fondů dělá nové řešení Layer Two.
Ačkoli se specifika designu u jednotlivých platebních fondů liší, obecný koncept je stejný. Tady je základní myšlenka …
Sdílení mince
Nejprve pro vytvoření fondu plateb uživatelé kombinují své (zlomky) mincí jejich agregací na sdílenou adresu Taproot. Řekněme, že Alice vlastní tři mince, Bob vlastní dvě mince a Carol jednu, celkem tedy šest. Společně vytvářejí transakci, která tyto mince odesílá na sdílenou adresu, což z ní dělá fond plateb se šesti mincemi.
Na blockchainu vypadá adresa fondu plateb jako běžná adresa bitcoinu, která nyní obsahuje šest mincí. Ale pod povrchem Alice, Bob a Carol chytře využili Taproot, aby zajistili, že každý z nich zůstane pod kontrolou svého vlastního podílu mincí ve fondu plateb. Alice může kdykoli vyzvednout tři mince z adresy, Bob může kdykoli vyzvednout dva a Carol jednu.
Důvodem je, že existují pouze dvě hlavní možnosti utrácení mincí z adresy.
První možností je utratit přímo z adresy, z technického hlediska klíčová cesta Taproot. To vyžaduje spolupráci (tj. Kryptografické podpisy) všech tří účastníků. Pokud Alice, Bob a Carol všichni souhlasí, šest mincí lze utratit, jak se jim líbí, a bude to vypadat jako každá jiná běžná transakce v bitcoinové síti. Trojice se může například rozhodnout poslat své příslušné zůstatky zpět na jednotlivé adresy: tři pro Alici, dvě pro Boba a jedna pro Carol. Pokud by se však rozhodli, mohli by také spolupracovat na darování všech šesti mincí Julianovi nebo je utratit jiným způsobem, na kterém by se mohli dohodnout. Důležité je, že se musí zúčastnit všichni tři, takže nikdo nevyužívá rovnováhu bez své vlastní spolupráce.
Druhá hlavní možnost se ve skutečnosti skládá z několika dílčích možností. Před odesláním mincí do fondu plateb Alice, Bob a Carol skryly něco v kryptografickém stromu za adresou Taproot: zahrnovaly alternativní způsoby odesílání prostředků z fondu plateb. (V současné době by to mohlo být realizováno tak, že všichni tři účastníci budou předem podepisovat transakce z těchto cest, což by vyžadovalo určitou složitost pro nastavení všech možností a není příliš dobře škálovatelné; navrhované upgrady protokolu by to mohly v budoucnu usnadnit .)
Pokud by se jeden z účastníků rozhodl utratit coiny v platebním fondu prostřednictvím alternativní cesty Taproot, obvykle by poslal částku odpovídající zůstatku daného účastníka na adresu, kterou si vybrali, například na samostatnou adresu, kterou ovládají. (V případě Alice tři mince na její vlastní adresu, v případě Boba dva na jeho adresu a v případě Carol jednu.)
Pomocí této alternativní cesty se automaticky utratí i zbývající mince. To lze provést několika způsoby v závislosti na konstrukci fondu plateb, které nabízejí různé kompromisy, pokud jde o složitost a škálovatelnost.
Nejjednodušším řešením je zaslat každému dalšímu účastníkovi také jeho podíl mincí na adresu, kterou si zvolí. Jinými slovy: pokud jeden uživatel opustí fond, všichni opustí fond.
Druhým řešením, které Riard a Naumenko upřednostňují, je odeslání všech zbývajících mincí do nového fondu plateb, který vypadá přesně jako první fond plateb, jen zbavený všeho, co zahrnovalo právě ukončeného uživatele. Tento design nabízí nejlepší uživatelskou zkušenost, ale je nejtěžší jej škálovat, což je nejdůležitější, protože je nutné se připravit na všechny možné scénáře ukončení, včetně všech možných scénářů ukončení pro všechny potenciální nové fondy. Měřítka by však bylo možné dosáhnout dosud neznámým potenciálním upgradem bitcoinového protokolu, aby bylo zajištěno, že pravidla z předchozího fondu plateb budou přenesena do jakéhokoli nového fondu plateb.
Rubin věří, že toto druhé řešení je nepraktické, a dává přednost hledání něčeho mezi prvním a druhým řešením: někteří účastníci okamžitě dostanou své coiny na adresu, kterou si zvolí, jiní účastníci nechají své mince poslat do nového platebního fondu. Tento design nabízí méně ideální uživatelskou zkušenost, ale měl by se lépe škálovat a potenciální upgrade protokolu OP_CHECKTEMPLATEVERIFY by pomohl zjednodušit design a ještě více zvětšit měřítko. (K odchodům by mohlo dojít prostřednictvím plateb stromu; tyto typy plateb jsou dále zkoumány v tomto článku.)
(Mezi druhým a třetím řešením existuje více kompromisů, ale podrobnosti o všech výhodách a nevýhodách jsou mimo rozsah tohoto článku; přečtěte si diskuse diskusního seznamu bitcoin-dev pro specifika.)
Chcete-li zjistit, co to znamená, když jsou zbývající mince odeslány do nového fondu plateb, řekněme, že Alice, Bob a Carol zvolí druhou možnost, kdy budou všechny zbývající mince odeslány do nového fondu plateb. Pokud v tomto designu Alice opustí první skupinu plateb, tři mince jsou odeslány na adresu, kterou si vybrala, zatímco ostatní tři mince jsou odeslány do nové skupiny plateb mezi Bobem a Carol. Alice v té chvíli má opět výhradní kontrolu nad svými vlastními mincemi, zatímco u Boba a Carol se toho tolik nezměnilo. Ti dva mohou i nadále spolupracovat, aby utratili zbývající tři mince, jakkoli si přejí, nebo může kterýkoli z nich jednostranně odejít, jak to předtím udělala Alice.
Pokud Bob poté jednostranně opustí druhý fond plateb, odešle dvě mince na adresu, kterou si zvolí, a jednu minci do ještě novějšího fondu plateb (třetí), přičemž zbude pouze Carol. (Samozřejmě v tomto zjednodušeném příkladu by design, kde je tento poslední fond plateb nahrazen adresou Caroliny volby, měl ve skutečnosti větší smysl, ale to je detail implementace.)
Důležitým krokem je, že účastníci platebního fondu mohou spolupracovat na provádění jakéhokoli typu platby z fondu, který chtějí, zatímco kdokoli z nich může kdykoli opustit své vlastní mince a nechat ostatní účastníky kontrolu nad jejich.
Vložení platby do skupiny plateb
Zjistili jsme tedy, že všichni účastníci mohou jednotlivě vybrat svůj zůstatek z fondu plateb, nebo – pokud všichni souhlasí – utratit z fondu. Právě tato druhá možnost ve skutečnosti umožňuje něco chytrého: fond plateb může být dynamický. Pokud všichni účastníci souhlasí, mohou nejen sami splatit své prostředky, nebo zaplatit ostatním (jako je Julian), ale mohou udělat ještě něco zajímavějšího. Mohou své prostředky přesunout do novějších verzí fondu plateb s různými vzory.
To například umožňuje kterémukoli z nich utratit z bazénu.
Řekněme, že Alice kupuje nové auto a chce za něj zaplatit jednou bitcoinou. Alice, Bob a Carol by pak mohli vytvořit transakci z fondu plateb, která pošle jednu minci do prodejny automobilů, a zbývajících pět mincí odešle do nového fondu plateb, který vypadá stejně jako ten první, ale tentokrát může Alice pouze opustit z toho jednostranně dvěma mincemi, o jednu méně než dříve.
Transakce mezitím vypadala jako každá jiná běžná bitcoinová transakce. Prodejce automobilů (nebo blockchainových špiónů) může dojít k závěru, že Alice vlastnila všech šest mincí a jednu jednoduše použila ke koupi automobilu a dalších pět ponechala jako změnu. Ani by netušili, že některé mince patří Bobovi a Carol, nebo že se do transakce vůbec zapojili.
Až příště Bob provede platbu a Alice a Carol spolupracují, provede se to ze stejného platebního fondu, který opět vypadá jako běžná bitcoinová transakce pro vnější svět. Ve výsledné iteraci fondu plateb může Bob skončit s jednou mincí místo dvou. Stejní blockchainoví špioni si mezitím mohli myslet, že Alice provádí platbu znovu, což je ještě více mátlo. (A i kdyby blockchainoví špióni nějak zjistili, že adresa je ve skutečnosti fondem plateb mezi Alicí, Bobem a Carol, stále nemohli říci, který ze tří provedl poslední platbu.)
Pokaždé, když Alice, Bob nebo Carol utratí coiny, transakce mohla pocházet od kteréhokoli z nich a nikdo mimo fond plateb nerozpozná rozdíl.
Fondy plateb neumožňují pouze výdaje. Pokud chce Alice doplnit svůj „zůstatek“ ve fondu plateb, mohla by to udělat také. Alice, Bob a Carol by v tomto případě spolupracovaly na přesunu současných pěti mincí na novou adresu Taproot, na kterou by Alice ve stejné transakci poslala jednu další minci z jedné ze svých vlastních (jednotlivých) adres. Nová adresa Taproot by opět obsahovala šest mincí, z nichž tři patří Alici, což se odráží v její jednostranné možnosti opuštění.
Stejným způsobem se do fondu plateb mohli připojit také zcela noví uživatelé. Pokud Alice, Bob a Carol souhlasí, že nechají Davea účastnit se, spolupracují tři s Davem na vytvoření transakce, která pošle finanční prostředky z fondu plateb spolu s novými mincemi Davea do nového fondu plateb, který má také umožnit Daveovi účast – a odejít kdyby se tak rozhodl.
Kromě toho existuje možnost, aby si účastníci v rámci skupiny plateb navzájem platili. Pokud by Alice například zaplatila Bobovi jednu minci, mohli by všichni tři spolupracovat a poslat prostředky do nového platebního fondu, kde má Alice odečtenou minci od jejího zůstatku a Bob má přidanou minci. Na blockchainu by to zase vypadalo jako běžná platba a blockchainoví špioni by vůbec netušili, kdo kdo zaplatil nebo kolik. (Za zmínku stojí, že Dave mohl vstoupit do fondu podobným způsobem, kdyby obdržel interní platbu od jednoho ze stávajících účastníků.)
S trochou extra složitosti (a ideálně s alespoň jedním dalším upgradem bitcoinového protokolu, jako je Noinput), mohly být převody dokonce dokončeny i mimo řetězec. Když Alice zaplatí Bobovi, všichni účastníci by v tomto případě vytvořili transakci, která utrácí finanční prostředky do nového fondu plateb, stejně, ale tato transakce by byla sdílena pouze mezi nimi – nevysílala by se do sítě (pokud se někdo nikdy nepokusí podvádět). Tímto způsobem mohli Alice, Bob a Carol neustále aktualizovat svou rovnováhu „interně“ a někdy dokonce pustit Davea do bazénu. Když se všichni dohodnou na uzavření fondu, mohou vytvořit finální transakci, která utratí z původního fondu plateb, přičemž každému z nich přidělí svůj poslední zůstatek.
Podobně jako starší myšlenka známá jako Channel Factories, tyto typy fondů plateb by mohly být nakonec dokonce použity k tomu, aby hostovaly Lightning kanály, trezory nebo jiné protokoly vrstvy dva. To může nabídnout potenciál „zabalit“ jakýkoli typ další vrstvy protokolu do těchto fondů, čímž se skryje veškerá jejich složitost ve stejných a pravidelně vypadajících transakcích.