Szczegółowe spojrzenie na blockchain niezwiązany z blockchain
W miarę upływu czasu świat blockchain dzieli się na dwie odrębne części. Z jednej strony publiczne blockchainy z powiązanymi z nimi kryptowalutami cieszyły się ostatnio niezwykłym powrotem, przynosząc wielu milionerom sukces. Z drugiej strony, wykorzystanie dozwolonych lub korporacyjnych łańcuchów bloków rośnie cicho, ale systematycznie, widząc ich pierwszy wdrożenia na żywo w wielu branżach w 2017 roku.
Jedną z interesujących kwestii do rozważenia jest odpowiedni poziom podobieństwa między tymi dwoma typami łańcuchów. Obie implementują współdzieloną bazę danych przy użyciu sieci peer-to-peer, kryptografii klucza publicznego i prywatnego, reguł transakcji i mechanizmów konsensusu, które mogą przetrwać złośliwe podmioty. To bardzo dużo wspólnego. Niemniej jednak publiczne i prywatne łańcuchy bloków mają różne wymagania w zakresie poufności, skalowalności i zarządzania. Być może te różnice wskazują na potrzebę radykalnie rozbieżnych projektów.
Połączenia Corda platformę opracowaną przez R3 konsorcjum bankowe zajmuje jasne stanowisko w tej sprawie. Podczas gdy niektóre aspekty były inspirowane publicznymi łańcuchami bloków, Corda została zaprojektowana od podstaw w oparciu o potrzeby członków R3. Rzeczywiście, chociaż R3 nadal używa słowa „blockchain” obszernie aby pomóc sprzedawać swój produkt, Corda w ogóle nie ma łańcucha bloków. Bardziej niż jakakolwiek inna platforma „rozproszonej księgi”, którą znam, Corda radykalnie odbiega od architektury konwencjonalnych łańcuchów bloków.
Moim celem w tym artykule jest wyjaśnienie tych różnic i omówienie ich konsekwencji, zarówno dobrych, jak i złych. W rzeczywistości dobro i zło to niewłaściwy sposób ujęcia tego, ponieważ bardziej interesujące pytanie brzmi: „Po co dobre i złe?” Ten artykuł nie jest krótki. Mam jednak nadzieję, że pod koniec tego artykułu czytelnicy zrozumieją różnice w Cordie i wynikające z nich kompromisy. Corda jest ważna, ponieważ jej decyzje projektowe przynoszą ostrą ulgę w wielu dylematach związanych z korporacyjnymi łańcuchami bloków.
Jeszcze jedna rzecz, zanim zaczniemy. Jako dyrektor generalny firmy MultiChain, popularna platforma blockchain dla przedsiębiorstw, dlaczego piszę tak szczegółowo o rzekomo konkurencyjnym produkcie? Standardowym powodem byłoby argumentowanie za wyższością MultiChain, ale to nie jest moja motywacja. W rzeczywistości nie postrzegam Corda i MultiChain jako konkurentów, ponieważ różnią się zasadniczo pod względem projektu, architektury i odbiorców. Corda i MultiChain konkurują ze sobą w taki sam sposób, jak statki wycieczkowe i skutery wodne - podczas gdy obie transportują ludzi drogą morską, prawie nie ma rzeczywistych sytuacji, w których można by użyć obu.
Mówiąc bardziej osobiście, wiele się nauczyłem od technicznego przywództwa firmy Corda w ciągu ostatnich kilku lat, czy to poprzez spotkania, korespondencję, czy ich publiczne pisma, z których wiele miało miejsce przed dołączeniem do R3. Niektóre z moich zainteresowań Cordą wynikają z szacunku, jakim darzę ten zespół, i tylko z tego powodu Corda jest warta studiowania dla każdego, kto szuka zrozumienia obszaru rozproszonych rejestrów.
Przedstawiamy łańcuchy bloków
Aby zrozumieć Cordę, warto zacząć od konwencjonalnych łańcuchów bloków. Celem łańcucha bloków jest umożliwienie bezpośredniego i bezpiecznego udostępniania bazy danych lub księgi stronom, które nie mają zaufania. Kontrastuje to ze scentralizowanymi bazami danych, które są przechowywane i kontrolowane przez jedną organizację. Blockchain ma wiele „węzłów”, z których każdy przechowuje kopię bazy danych i może należeć do innej organizacji. Węzły łączą się ze sobą w sposób zwarty peer-to-peer, używając „protokołu plotkowania”, w którym każdy węzeł nieustannie przekazuje swoim rówieśnikom wszystko, czego się nauczy. W rezultacie każdy węzeł może szybko rozesłać wiadomość do całej sieci wieloma alternatywnymi ścieżkami.
Baza danych, niezależnie od tego, czy jest scentralizowana, czy zasilana przez blockchain, zaczyna się w stanie pustym i jest aktualizowana poprzez „transakcje”. Transakcja jest definiowana jako zbiór zmian w bazie danych, które są „atomowe”, co oznacza, że jako całość kończą się sukcesem lub niepowodzeniem. Wyobraź sobie bazę danych reprezentującą księgę finansową, z jednym wierszem na konto. Transakcja, w której Alicja płaci 10 dolarów Bobowi, składa się z trzech kroków: (1) sprawdź, czy konto Alicji zawiera co najmniej 10 USD, (2) odejmij 10 USD z konta Alicji i (3) dodaj 10 USD do konta Boba. Podstawowym wymogiem jest zapewnienie, aby każda platforma bazy danych nie zakłócała żadnej transakcji. Ta „izolacja” jest osiągana przez zablokowanie wierszy zarówno dla Alicji, jak i Boba, podczas gdy płatność jest w toku. Każda inna transakcja obejmująca te wiersze musi czekać do zakończenia tej transakcji.
W łańcuchu bloków każdy węzeł niezależnie przetwarza każdą transakcję na własnej kopii bazy danych. Transakcje są tworzone w dowolnym miejscu w sieci i automatycznie propagowane do wszystkich innych węzłów. Ponieważ organizacje zarządzające węzłami mogą mieć różne (lub nawet sprzeczne) interesy, nie mogą sobie ufać, jeśli chodzi o uczciwe transakcje. Dlatego łańcuchy bloków wymagają reguł, które określają, czy dana transakcja jest ważna, czy nie. We wspólnej księdze finansowej reguły te uniemożliwiają użytkownikom wydawanie pieniędzy innych użytkowników lub wyczarowywanie funduszy z powietrza.
Oprócz reguł określających ważność transakcji, łańcuchy bloków muszą również określać, w jaki sposób transakcje będą zlecane, ponieważ w wielu przypadkach to porządkowanie ma kluczowe znaczenie. Jeśli Alice ma 15 dolarów i próbuje wysłać 10 dolarów zarówno Bobowi, jak i Charliemu w dwóch oddzielnych transakcjach, tylko jedna z tych płatności może się powieść. Chociaż możemy chcieć powiedzieć, że pierwszeństwo ma pierwsza transakcja, sieć peer-to-peer nie ma obiektywnej definicji „pierwszego”, ponieważ komunikaty mogą docierać do różnych węzłów w różnej kolejności.
Zasady transakcji
W ogólnym sensie informacje w dowolnej bazie danych są rozdzielane na rekordy lub „wiersze”, a transakcja może mieć trzy różne rzeczy: usuwać wiersze, tworzyć wiersze i / lub modyfikować wiersze. Można je zredukować dalej do dwóch, ponieważ modyfikacja wiersza jest równoznaczna z usunięciem tego wiersza i utworzeniem nowego w jego miejsce. Aby wrócić do płatności Alicji na rzecz Roberta, jej wiersz zawierający 15 USD jest usuwany i tworzone są dwa nowe wiersze - jeden zawierający 10 USD dla Boba, a drugi zawierający 5 USD „reszty” dla Alicji.
Zgodnie z terminologią Bitcoin i Corda, oznaczamy wiersze usunięte przez transakcję jako jej „dane wejściowe”, a te utworzone jako jej „wyniki”. Każdy wiersz usunięty w wyniku transakcji musi zostać utworzony w poprzedniej transakcji. Dlatego każdy element wejściowy transakcji zużywa (lub „wydaje”) wynik poprzedniej transakcji. Aktualną zawartość bazy danych określa zestaw „niewykorzystanych danych wyjściowych transakcji” lub „UTXO”.
W łańcuchu bloków transakcja jest ważna, jeśli spełnia następujące trzy warunki:
- Poprawność. Transakcja musi stanowić uzasadnioną transformację danych wejściowych do wyjściowych. Na przykład w księdze finansowej całkowita ilość środków w wejściach musi odpowiadać sumie w wynikach, aby zapobiec magicznemu pojawianiu się lub znikaniu pieniędzy. Jedynymi wyjątkami są specjalne transakcje „emisji” lub „emerytury”, w których środki są wyraźnie dodawane lub usuwane.
- Autoryzacja. Transakcja musi być autoryzowana przez właściciela każdego wyjścia zużytego przez jego nakłady. W księdze finansowej uniemożliwia to uczestnikom wydawanie swoich pieniędzy bez pozwolenia. Autoryzacja transakcji jest zarządzana za pomocą kryptografii asymetrycznej (lub klucza publicznego i prywatnego). Każdy wiersz ma właściciela, którego identyfikuje klucz publiczny, którego odpowiedni klucz prywatny jest utrzymywany w tajemnicy. W celu autoryzacji transakcja musi być podpisana cyfrowo przez właściciela każdego z jej danych wejściowych. (Należy pamiętać, że wiersze mogą mieć również bardziej złożonych właścicieli „z wieloma podpisami”, na przykład gdy dwie na trzy strony mogą autoryzować ich użycie).
- Wyjątkowość. Jeśli transakcja zużywa określone dane wyjściowe, żadna inna transakcja nie może ponownie wykorzystać tego wyniku. W ten sposób zapobiegamy dokonywaniu przez Alice sprzecznych płatności na rzecz Boba i Charliego. Chociaż transakcje dla obu tych płatności mogą być poprawne i autoryzowane, zasada niepowtarzalności zapewnia, że tylko jedna zostanie przetworzona przez bazę danych.
W konwencjonalnym łańcuchu bloków każdy węzeł sprawdza każdą transakcję pod kątem tych trzech reguł. Później zobaczymy, jak Corda inaczej dzieli tę odpowiedzialność.
Cegiełki
Łańcuch bloków to dosłownie łańcuch bloków, w którym każdy blok łączy się z poprzednim za pomocą „skrótu”, który jednoznacznie identyfikuje jego zawartość. Każdy blok zawiera uporządkowany zestaw transakcji, które nie mogą kolidować ze sobą ani z tymi z poprzednich bloków, a także znacznik czasu i inne informacje. Podobnie jak transakcje, bloki szybko rozprzestrzeniają się w sieci i są niezależnie weryfikowane przez każdy węzeł. Gdy transakcja pojawi się w bloku, jest „potwierdzana”, prowadząc węzły do odrzucenia wszelkich sprzecznych transakcji.
Kto jest odpowiedzialny za tworzenie tych bloków i jak możemy mieć pewność, że wszystkie węzły zgodzą się na autorytatywny łańcuch? Kwestia „algorytmów konsensusu” jest sama w sobie ogromnym tematem, pełnym cudownych akronimów, takich jak PoW (Proof of Work), PBFT (Practical Bizantine Fault Tolerance) i DPoS (Delegated Proof of Stake). Nie będziemy się tu zagłębiać. Dość powiedzieć, że dozwolone łańcuchy bloków dla przedsiębiorstw wykorzystują pewien rodzaj schematu głosowania, w którym głosy są przyznawane „węzłom walidatora”, które są zbiorowo odpowiedzialne. Schemat zapewnia, że tak długo, jak znaczna większość węzłów walidatora działa poprawnie i uczciwie, transakcje będą wprowadzane do łańcucha w (bliskim) uczciwym porządku, znaczniki czasu będą (w przybliżeniu) poprawne, a potwierdzonych transakcji nie można później cofnąć.
Zanim omówię niektóre wyzwania związane z łańcuchami bloków, chciałbym wyjaśnić trzy dodatkowe punkty. Po pierwsze, chociaż w tym artykule używam księgi finansowej na przykładzie, model transakcji wejścia-wyjścia obsługuje znacznie szerszą różnorodność przypadków użycia. Każdy wiersz może zawierać bogaty obiekt danych (na przykład JSON) zawierający wiele różnych typów informacji - w rzeczywistości z tego powodu Corda używa słowa „stan” zamiast „wiersz”. Bogatsze stany nie zmieniają niczego fundamentalnego w regułach transakcji: poprawność jest nadal definiowana w kategoriach wejść i wyjść, autoryzacja jest nadal wymagana dla każdego wejścia, a unikalność zapewnia, że każde wyjście może być wydane tylko raz.
Po drugie, istnieje wiele przypadków użycia blockchain, w których wiersze są tworzone tylko w bazie danych i nigdy nie są usuwane. Aplikacje te odnoszą się do ogólnego przechowywania danych, znakowania czasowego i notarialnego, a nie do utrzymywania pewnego rodzaju księgi, która jest w ruchu. W tych aplikacjach tylko do danych transakcje dodają dane do swoich danych wyjściowych, ale nie zużywają żadnych danych wejściowych, co pozwala na uproszczenie reguł poprawności, autoryzacji i niepowtarzalności. Chociaż przypadki użycia wyłącznie danych są coraz większym celem naszego rozwoju w MultiChain, wspominam o nich tylko mimochodem, ponieważ Corda najwyraźniej nie została zaprojektowana z myślą o nich.
Na koniec warto zauważyć, że niektóre platformy blockchain nie używają modelu wejścia-wyjścia. Ethereum przedstawia alternatywny paradygmat, w którym łańcuch kontroluje wirtualny komputer w stanie globalnym zarządzanym przez „kontrakty”, a transakcje nie łączą się ze sobą w sposób jawny. Omówienie modelu Ethereum w dozwolonych łańcuchach bloków wykracza poza nasz zakres tutaj, ale zobacz ten artykuł aby uzyskać szczegółowe wyjaśnienie i krytykę. Jedną z kluczowych zalet paradygmatu przepływów międzygałęziowych jest to, że większość transakcji można przetwarzać równolegle i niezależnie od siebie. Ta właściwość jest kluczowa dla Corda, jak zobaczymy później.
Wyzwania Blockchain
Wyobraźmy sobie, że banki na świecie stworzyły wspólną księgę, która reprezentuje własność, przenoszenie i wymianę różnych aktywów finansowych. Teoretycznie można to zaimplementować w zwykłym łańcuchu bloków, jak opisano powyżej. Każdy wiersz zawierałby trzy kolumny - identyfikator zasobu, taki jak GOOG lub USD, posiadaną ilość i klucz publiczny właściciela. Każda transakcja powodowałaby przeniesienie jednego lub większej liczby aktywów z nakładów na produkty wyjściowe, z uwzględnieniem specjalnych przypadków emisji i wycofania.
Każdy bank w sieci miałby jeden lub więcej węzłów, które łączą się z innymi, propagując i weryfikując transakcje. Starsi członkowie pełniliby rolę walidatorów, ponosząc zbiorową odpowiedzialność za potwierdzanie, zamawianie i znakowanie czasem transakcji. Każde niewłaściwe zachowanie walidatora byłoby widoczne dla wszystkich węzłów w sieci, prowadząc do potępienia, wygnania i / lub postępowania sądowego. Mając to wszystko na swoim miejscu, każdy składnik aktywów finansowych może zostać przeniesiony na cały świat w ciągu kilku sekund, a zasady poprawności, autoryzacji i unikalności gwarantują integralność księgi.
Co jest nie tak z tym obrazem? W rzeczywistości istnieją trzy problemy: skalowalność, poufność i interoperacyjność. Kwestia skalowalności jest dość prosta. Nasz proponowany międzybankowy blockchain wymagałby od każdego członka weryfikacji, przetwarzania i przechowywania każdej transakcji przeprowadzanej przez każdy bank na świecie. Nawet jeśli byłoby to technicznie wykonalne dla największych instytucji finansowych, koszt obliczeń i przechowywania stanowiłby dla wielu istotną barierę. Z pewnością wolelibyśmy system, w którym uczestnicy widzą tylko te transakcje, w które są bezpośrednio zaangażowani.
Ale odłóżmy na bok skalowalność, ponieważ ostatecznie można ją rozwiązać za pomocą drogich komputerów i sprytnej inżynierii. Bardziej fundamentalną kwestią jest poufność. Chociaż może wydawać się utopijne, aby każda transakcja była widoczna wszędzie, w prawdziwym świecie taka radykalna przejrzystość nie jest początkiem pod względem konkurencji i regulacji. Jeśli JP Morgan i HSBC wymieniają się parą aktywów, jest mało prawdopodobne, aby Citi i Bank of China zobaczyły, co zrobiły. Jeśli transakcja została przeprowadzona w imieniu klientów tych banków, ujawnianie jej w ten sposób może być niezgodne z prawem.
Jednym z proponowanych rozwiązań problemu poufności są „kanały” zaimplementowane w Hyperledger Fabric. Każdy kanał ma określonych członków, którzy stanowią podzbiór węzłów w sieci jako całości. Transakcje kanału są widoczne tylko dla jego członków, dzięki czemu każdy kanał działa jako oddzielny łańcuch bloków. Chociaż pomaga to w zachowaniu poufności, podważa też cały sens ćwiczenia. Zasoby nie mogą być przenoszone z jednego kanału na inny bez pomocy zaufanego pośrednika, który jest aktywny na obu. Trudność tego podejścia została niedawno podkreślona przez SWIFT potwierdzenie koncepcji pojednania, który oszacował, że do produkcji będzie potrzebnych ponad 100,000 100,000 kanałów. To XNUMX XNUMX wysp, pomiędzy którymi nie można bezpośrednio przenosić aktywów.
W przypadkach użycia wyłącznie danych, w których transakcje nie wykorzystują danych wejściowych, problem z poufnością można ominąć, szyfrując lub haszując dane wyjściowe i dostarczając klucz deszyfrujący lub niezaszyfrowane dane poza łańcuch. Ale w przypadku transakcji, której dane wejściowe zużywają dane wyjściowe innych transakcji, każdy węzeł musi zobaczyć te dane wejściowe i wyjściowe, aby zweryfikować transakcję. Podczas gdy zaawansowane techniki kryptograficzne, takie jak poufne aktywa i zero dowodów wiedzy zostały opracowane w celu częściowego lub całkowitego rozwiązania tego problemu w księgach finansowych, nakładają one znaczne obciążenie na wyniki i / lub nie mogą być uogólnione na żadną regułę poprawności.
Na koniec porozmawiajmy o interoperacyjności. W idealnym świecie każdy bank dołączyłby natychmiast do naszego globalnego łańcucha bloków w dniu jego uruchomienia. W rzeczywistości jednak wiele łańcuchów bloków zostałoby zaadoptowanych przez różne grupy banków w oparciu o położenie geograficzne lub istniejące wcześniej relacje. Z biegiem czasu członek jednej grupy może chcieć rozpocząć transakcję z członkiem innej, przenosząc aktywa między łańcuchami. Podobnie jak w przypadku kanałów, można to osiągnąć tylko za pomocą zaufanego pośrednika, pokonując cel łańcucha blokowego.
Corda ma na celu rozwiązanie tych wzajemnie powiązanych problemów skalowalności, poufności i interoperacyjności poprzez radykalne przemyślenie sposobu działania rozproszonych rejestrów.
Częściowy widok Cordy
Podstawową różnicę w Cordie można łatwo wyjaśnić: każdy węzeł widzi tylko niektóre, a nie wszystkie transakcje przetwarzane w sieci. Podczas gdy jedna logiczna i koncepcyjna księga jest zdefiniowana przez wszystkie te transakcje, żaden pojedynczy węzeł nie widzi tej księgi w całości. Dla porównania, w dowolnym momencie każdy banknot na świecie znajduje się w określonym miejscu, ale nikt nie wie, gdzie oni wszyscy się znajdują.
Więc jakie transakcje widzi węzeł Corda? Przede wszystkim te, w które jest bezpośrednio zaangażowany, ponieważ jest właścicielem jednego z wejść lub wyjść tej transakcji. W księdze finansowej obejmuje to każdą transakcję, w której węzeł wysyła lub odbiera środki. Powiedzmy, że Alicja tworzy transakcję, która zużywa jej 15 dolarów na wejściu i ma dwa wyjścia - jedno z 10 $ dla mnie, a drugie z 5 $ w „reszcie” dla niej. Po tym, jak Alicja prześle mi tę transakcję, mogę sprawdzić ją pod kątem poprawności i autoryzacji, sprawdzając, czy saldo wejść i wyjść oraz czy Alicja podpisała.
Jednak sama transakcja nie wystarczy. Muszę również sprawdzić, czy stan wejściowy Alicji 15 $ naprawdę istnieje, a ona nie tylko go wymyśliła. Oznacza to, że muszę zobaczyć transakcję, która utworzyła ten stan, i sprawdzić ją również pod kątem poprawności i autoryzacji. Jeśli ta poprzednia transakcja, która wysłała Alice 15 dolarów, ma 10 dolarów wejściowych należących do Denzela i kolejne 5 dolarów wejściowych od Erica, to muszę również zweryfikować transakcje, które je utworzyły. I tak dalej, aż do pierwotnej transakcji „emisji”, w ramach której utworzono składnik aktywów. Liczba transakcji, które muszę zweryfikować, będzie zależeć od tego, ile razy aktywa przechodziły z rąk do rąk i od zakresu wstecznego rozgałęzienia.
Ponieważ węzły Corda nie widzą automatycznie każdej transakcji, w jaki sposób uzyskują te, których potrzebują? Odpowiedź pochodzi od nadawcy każdej nowej transakcji. Zanim Alicja utworzy transakcję, pochłaniając jej 15 dolarów, musi już zweryfikować transakcję, w której ją otrzymała. A ponieważ Alicja musiała zastosować powyższą technikę rekurencyjną, będzie miała kopię każdej transakcji potrzebnej do tej weryfikacji. Bob po prostu prosi Alice o te transakcje w ramach ich interakcji. Jeśli Alicja nie odpowie odpowiednio, Bob dochodzi do wniosku, że Alicja próbuje go oszukać i odrzuca przychodzącą płatność. W przypadku, gdy Bob otrzyma nową transakcję, której dane wejściowe mają wielu właścicieli, może on uzyskać niezbędne dowody od każdego.
Przedstawiamy notariuszy
Do tej pory wyjaśniliśmy, w jaki sposób Bob może zweryfikować poprawność i autoryzację transakcji przychodzącej, w tym rekursywne odtworzenie początków jej danych wejściowych. Ale jest jeszcze jedna zasada, o której musimy pomyśleć: wyjątkowość. Powiedzmy, że Alicja jest złośliwa. Może wygenerować jedną transakcję, w której zapłaci 10 USD Bobowi, a drugą, w której zapłaci te same 10 USD Charliemu. Może wysłać te transakcje odpowiednio do Boba i Charliego, wraz z pełnym dowodem poprawności i autoryzacji każdej z nich. Podczas gdy obie transakcje są ze sobą sprzeczne, konsumując ten sam stan, Bob i Charlie nie mogą się o tym dowiedzieć.
Konwencjonalne łańcuchy bloków rozwiązują ten problem, gdy każdy węzeł widzi każdą transakcję, dzięki czemu konflikty są łatwe do wykrycia i odrzucenia. Jak więc Corda, dzięki częściowej widoczności transakcji, rozwiązuje ten sam problem? Odpowiedź jest z pomocą „notariusza”. Notariusz to zaufana strona (lub współpracujące ze sobą strony), która gwarantuje, że dany stan jest konsumowany tylko raz. Każdy stan ma określonego notariusza, który musi podpisać każdą transakcję, w której ten stan jest konsumowany. Gdy notariusz to uczyni, nie może podpisywać kolejnej transakcji dla tego samego państwa. Notariusze są w sieci strażnikami wyjątkowości transakcji.
Chociaż każdy stan może mieć innego notariusza, wszystkie stany konsumowane przez daną transakcję muszą być przypisane do tego samego. Pozwala to uniknąć problemów związanych z zakleszczeniami i synchronizacją, które powinny być znane osobom korzystającym z rozproszonych baz danych. Powiedzmy, że Alicja i Bob zgadzają się wymienić 10 dolarów Alicji na 7 funtów Boba. Transakcję tej wymiany muszą podpisać notariusze obu państw, ale który z nich jest pierwszy? Jeśli notariusz Alice podpisze podpis, ale Bob z jakiegoś powodu zawiedzie, Alice zostanie z niekompletną transakcją i już nigdy nie będzie mogła użyć swoich 10 dolarów. Jeśli Bob ma pierwsze znaki, jest on podobnie odsłonięty. Chociaż możemy chcieć, aby notariusze po prostu współpracowali, w praktyce wymaga to wzajemnego zaufania i stosowania protokołu konsensusu, co jest komplikacjami, których projektanci firmy Corda postanowili uniknąć.
Jeżeli jako dane wejściowe do pojedynczej transakcji wymagane są stany z różnymi notariuszami, ich właściciele najpierw wykonują specjalne transakcje „zmiany notarialnej”, które przenoszą stan z jednego notariusza na drugiego, nie zmieniając niczego innego. Tak więc, kiedy strony budują transakcję z wieloma danymi wejściowymi, muszą najpierw uzgodnić notariusza, z którego będą korzystać, a następnie dokonać niezbędnych zmian notarialnych. Podczas gdy deweloper we mnie poczuł lekkie ukłucie bólu, czytając o tym obejściu, nie ma powodu, dla którego nie będzie działać tak długo, jak bawią się notariusze.
Należy również wyjaśnić, że chociaż każdy notariusz jest pojedynczym podmiotem logicznym w zakresie podpisywania transakcji, nie musi być kontrolowany przez jedną stronę. Grupa organizacji mogłaby prowadzić notariusza zbiorowo, stosując odpowiedni protokół konsensusu, w którym większość uczestników jest potrzebna do wygenerowania ważnego podpisu. Uniemożliwiłoby to pojedynczemu złośliwemu podmiotowi podważanie unikalności poprzez podpisywanie sprzecznych transakcji. Teoretycznie moglibyśmy nawet pozwolić, aby każdy węzeł w sieci uczestniczył w tego rodzaju wspólnym notarialnym poświadczeniu, chociaż w takim przypadku wrócilibyśmy mniej więcej do konwencjonalnego łańcucha bloków.
Biorąc wynik
Podsumujmy kluczowe różnice między Cordą a konwencjonalnymi łańcuchami bloków. W Corda nie ma ujednoliconego łańcucha bloków, który zawiera wszystkie potwierdzone transakcje. Węzły widzą tylko te transakcje, w które są bezpośrednio zaangażowane lub od których historycznie zależą. Węzły są odpowiedzialne za sprawdzanie poprawności transakcji i autoryzacji, ale polegają na zaufanych notariuszach w celu weryfikacji ich unikalności.
Oczywiście Corda to znacznie więcej: użycie certyfikatów cyfrowych do uwierzytelniania tożsamości, „mapy sieci” pomagające węzłom w znajdowaniu i zaufaniu sobie nawzajem, „kontrakty” dla poszczególnych stanów, które definiują poprawność z perspektywy każdego stanu, deterministyczna wersja wirtualnej maszyny Java, która wykonuje te kontrakty, „przepływy”, które automatyzują negocjacje transakcji, „okna czasowe”, które ograniczają transakcje według czasu, „wyrocznie” świadczące o faktach zewnętrznych i „CorDapps”, które łączą wiele rzeczy w celu łatwej dystrybucji . Chociaż każda z tych funkcji jest interesująca, odpowiedniki dla wszystkich można znaleźć na innych platformach blockchain. Moim celem w tym artykule jest skupienie się na tym, co czyni Cordę wyjątkową.
Czy Corda spełnia swoją obietnicę? Czy rozwiązuje problemy skalowalności, poufności i interoperacyjności łańcuchów bloków? A jaką cenę płaci Corda, dokonując konkretnych wyborów?
Czasami bardziej skalowalne
Zacznijmy od skalowalności. W tym przypadku przewaga Corda wydaje się oczywista, ponieważ węzły widzą tylko niektóre transakcje w sieci. W zwykłym łańcuchu bloków maksymalna przepustowość jest ograniczona przez prędkość najwolniejszego węzła w przetwarzaniu transakcji. Z kolei sieć Corda może przetwarzać milion transakcji na sekundę, podczas gdy każdy węzeł widzi tylko niewielki ułamek tego. Skalowalność rozciąga się również na notariuszy, ponieważ podpisywanie transakcji pod kątem ich unikalności może być rozłożone na wielu różnych notariuszy, z których każdy odpowiada za niewielką część stanów sieci.
Mimo to jest jedna sytuacja, w której Corda radzi sobie znacznie gorzej niż blockchain. Dzieje się tak, gdy węzeł otrzymuje nową transakcję, która zależy od wielu innych transakcji, których wcześniej nie widział. Wyobraź sobie wysoce płynny składnik aktywów, który został wyemitowany 10 lat temu i zmienia właściciela co około pięć minut. Droga od każdej nowej transakcji z powrotem do wydania tego aktywa będzie długa na ponad milion transakcji. Kiedy węzeł otrzyma ten zasób po raz pierwszy, musi pobrać te miliony transakcji od nadawcy i zweryfikować każdy z nich po kolei. Przy (dość optymistycznym) tempie 1000 transakcji na sekundę, odbiorca mógłby wysłać zasób z 17-minutowym opóźnieniem - zdecydowanie zbyt długim na coś tak płynnego.
Dlaczego blockchain nie cierpi z powodu tego problemu? Ponieważ węzły widzą i weryfikują każdą transakcję w momencie jej wystąpienia, stale aktualizują stan księgi i wiedzą dokładnie, kto jest obecnie właścicielem każdego zasobu. Nawet jeśli węzeł nigdy wcześniej nie posiadał określonego zasobu, może natychmiast zweryfikować transakcję, w której go otrzymuje, a następnie natychmiast przesłać dalej. Innymi słowy, węzły blockchain muszą weryfikować transakcje, które mogą nie być dla nich istotne, ale robiąc to, płacą z góry koszty sprawdzenia wszelkich przyszłych transakcji, które mogą nadejść. Chociaż węzły Corda są ogólnie mniej zajęte, uruchamiają ryzyko konieczności wykonania dużej ilości pracy w jednej chwili. Nie ma w tym nic skalowalnego.
Nieco bardziej poufne
Przejdźmy do poufności. W Corda węzły widzą tylko niektóre transakcje sieciowe, co niezaprzeczalnie oznacza lepszą prywatność niż konwencjonalne łańcuchy bloków. Niemniej jednak Corda jest daleka od rozwiązania problemu poufności, ponieważ węzły nadal widzą pewne transakcje, które nie są ich sprawą. Aby wziąć prosty przykład, jeśli Alicja płaci Bobowi 10 dolarów, to Bob wysyła te 10 dolarów do Charliego, węzeł Charliego musi być pokazany jako transakcja między Alice i Bobem, nawet jeśli nie dotyczy ona jego. W czasie, gdy Alice zapłaciła Bobowi, nie miała możliwości dowiedzenia się, kto może zobaczyć tę transakcję w przyszłości i każdemu mógł zostać wysłany w dowolnym momencie.
Aby być uczciwym, programiści Corda są świadomi tego problemu i omawiają go w rozdziale 15 swojego Biała księga techniczna. Artykuł sugeruje proste strategie, takie jak używanie wielu kluczy publicznych na jednostkę lub ograniczenie identyfikowalności poprzez zwracanie aktywów emitentom w celu ich ponownego wydania (podobnie jak w przypadku „mikserów monet” kryptowalut). Wspomina również o bardziej zaawansowanych przyszłych możliwościach, takich jak używanie sieci anonimizacji podobnych do Tor do ukrywania adresów IP uczestników i wykorzystywanie dowodów wiedzy zerowej lub Intel bezpieczne enklawy do sprawdzania transakcji bez ujawniania ich zawartości. Chociaż wszystkie te sugestie są słuszne, można je również zastosować do zwykłych łańcuchów bloków przy użyciu modelu wejścia-wyjścia i rzeczywiście były w kryptowalutach, takich jak Dash, Zcash i Verge. Tak więc jedyną wyjątkową zaletą Corda pod względem poufności pozostaje ograniczona widoczność transakcji - w najlepszym przypadku niepełne rozwiązanie.
Wszystko w hodowli
Aby lepiej zrozumieć zalety skalowalności i poufności Corda, powinniśmy zwrócić uwagę, jak to zależy od gęstości i nakładania się relacji między transakcjami. Wyobraź sobie „drzewo genealogiczne” transakcji dokonywanych w sieci, w którym rodzicami każdej transakcji są poprzedni, od których natychmiast zależy. W szczególności, gdy dane wyjściowe jednej transakcji są używane przez dane wejściowe innej, rysujemy strzałkę reprezentującą relację między rodzicem a dzieckiem. Transakcje mogą mieć dowolną liczbę rodziców i dzieci, chociaż w większości przypadków spodziewalibyśmy się tylko kilku.
Biorąc pod uwagę to drzewo genealogiczne, definiujemy przodków transakcji jako jej rodziców, dziadków, pradziadków i tak dalej. „Adam i Ewa” naszego drzewa to transakcje emisyjne, które stworzyły aktywa i nie mają własnych rodziców. Podobnie jak w przypadku zwykłych drzew genealogicznych, dwie transakcje nie mogą być swoimi przodkami. Z formalnego punktu widzenia informatyki jest to plik skierowany wykres acykliczny lub DAG, w którym pochodzenie definiuje się jako przechodnie zamknięcie relacji nadrzędnej.
Przypomnij sobie, że gdy węzeł Corda przetwarza transakcję, musi pobrać i zweryfikować wszystkich przodków tej transakcji, oprócz tych, które widział wcześniej. Jeśli więc drzewo genealogiczne jest głębokie, nowe transakcje przychodzące mogą mieć dużą liczbę przodków, których należy zweryfikować, co wywołuje problem ze skalowalnością Corda. Ponadto, jeśli drzewo genealogiczne zawiera wysoki stopień krzyżowania się, przodkowie nowej transakcji mogą zawierać wiele lub większość przeszłych transakcji w sieci. W takim przypadku Corda zapewni niewielką przewagę pod względem prywatności.
Z drugiej strony, jeśli drzewo genealogiczne transakcji jest płytkie i zawiera wiele odłączonych wysp, które nie wchodzą ze sobą w interakcje, na pierwszy plan wysuwają się zalety Corda. Węzły nigdy nie będą musiały weryfikować dużej liczby transakcji na raz i mogą nie wiedzieć o większości transakcji, które nie są związane z ich własnymi. Jeśli użyjemy go jako księgi finansowej, możemy powiedzieć, że Corda jest idealna dla bardzo rozdrobnionych rynków, których aktywa rzadko zmieniają właściciela.
Zwycięska interoperacyjność
Oto obszar, w którym Corda naprawdę świeci. Wyobraź sobie dwie oddzielne sieci Corda z różnymi zestawami zasobów i uczestników. W pewnym momencie uczestnik jednej sieci chce wysłać zasób do kogoś w drugiej. W przeciwieństwie do konwencjonalnych łańcuchów bloków nie oczekuje się, że węzeł zweryfikuje wszystkie poprzednie transakcje, więc węzeł otrzymujący ten nowy zasób nie doświadczy niczego niezwykłego. Kiedy transakcja przychodzi, po prostu żąda i weryfikuje odpowiednią historię, bez świadomości, że pochodzi ona z „oddzielnej sieci”. Aby rozwinąć frazes, możemy powiedzieć, że w Korda nie ma obcych - tylko przyjaciele, którzy się jeszcze nie spotkali.
W rzeczywistości sprawy nie są takie proste. Każdy węzeł Corda wyraźnie decyduje, którym notariuszom zaufać, ponieważ źle postępujący notariusz może spowodować finansowy chaos. Ponadto węzły potrzebują „certyfikatu” przyznawanego przez „portiera”, aby łączyć się z innymi węzłami w sieci, ponieważ nie możemy pozwolić przypadkowym użytkownikom na rozpoczęcie łączenia się z węzłami i marnowanie ich zasobów. Dlatego zanim węzeł w jednej sieci będzie mógł żądać i weryfikować transakcje z innej sieci, będzie musiał dodać do swojej listy zaufanych notariuszy i uzyskać odpowiedni certyfikat. Chociaż wymaga to ręcznej konfiguracji i administrowania, jest to minimum, którego można oczekiwać w przypadku takiego systemu. Ogólnie rzecz biorąc, można uczciwie stwierdzić, że interoperacyjność to wielka wygrana Corda nad konwencjonalnymi łańcuchami bloków.
Pośrednictwo
Czas porozmawiać o braku pośrednictwa, słoniu w pokoju Cordy. W kontekście blockchainów dezintermediation oznacza, że każdy uczestnik może samodzielnie zweryfikować każdą transakcję, bez uzależnienia od dobrego zachowania osób trzecich. W mój widok, brak pośrednictwa jest podstawową zaletą blockchainów nad scentralizowanymi bazami danych, w których wszyscy uczestnicy są w pełni zależni od właściciela tej bazy danych. Jeśli uczestnicy sieci mają pośrednika, na którym mogą polegać, i nie ma uzasadnienia biznesowego ani prawnego dla rezygnacji z pośrednictwa, to istnieje Bez sensu używając łańcucha bloków. Scentralizowane bazy danych są szybsze i bardziej wydajne oraz pozwalają uniknąć problemu poufności transakcji.
Czy zatem uczestnicy sieci Corda osiągają brak pośrednictwa? Cóż, tak, tak i tak, ale nie. W przypadku dostawy transakcji Corda zaznacza pole, ponieważ węzły zaangażowane w transakcję rozmawiają ze sobą bezpośrednio. Pod względem poprawności i autoryzacji jest również w dobrym stanie, ponieważ każdy węzeł jest w stanie samodzielnie sprawdzić te właściwości. Jednak jeśli chodzi o weryfikację niepowtarzalności transakcji, Corda nie przechodzi testu wykluczenia pośrednictwa. Węzły nie mogą samodzielnie potwierdzić unikalności, ponieważ nie widzą każdej transakcji w sieci, a zadanie zlecane jest zaufanym notariuszom.
Uczestnicy Corda są zdani na łaskę notariuszy na wiele sposobów. Po pierwsze, notariusz może odmówić podpisania transakcji, nawet jeśli jego nakłady pochłaniają dane wyjściowe, które nigdy wcześniej nie były używane. W księdze finansowej uniemożliwia to wysyłanie lub wymianę aktywów. Po drugie, notariusz mógłby podpisać dwie sprzeczne transakcje, które pochłaniają tę samą produkcję, co doprowadziłoby dwie strony do przekonania, że otrzymały to samo. Ponieważ obaj odbiorcy zduplikowanych aktywów wysyłają je lub wymieniają w kolejnych transakcjach, zarażenie rozprzestrzenia się, a integralność całej księgi może wkrótce zostać podważona. Wreszcie notariusz może odmówić podpisania transakcji „zmiany notarialnej” w celu przeniesienia państwa na konkurenta, skutecznie przetrzymując właściciela aktywów jako zakładnika. W przypadku transakcji obejmującej stany z różnymi notariuszami daleko jest do powiedzenia, że Corda wprowadza więcej pośrednictwa niż scentralizowana baza danych, ponieważ kontrolę sprawuje kilka osób trzecich.
Aby spojrzeć na to ryzyko z odpowiedniej perspektywy, warto przypomnieć, że notariusze Corda nie muszą być kontrolowani przez jedną organizację. Mogą również składać się z grupy węzłów korzystających z algorytmu konsensusu, który może tolerować złych aktorów. W takim przypadku notariusz będzie działał dobrze, o ile większość jego węzłów członkowskich będzie przestrzegać zasad. Na pozór brzmi to raczej jak łańcuch bloków, który zależy od dobrego zachowania większości walidatorów. Jednak w Corda ryzyko jest znacznie wyższe. Najgorsze, co może zrobić kabała walidatorów blockchain, to uniemożliwić potwierdzanie niektórych transakcji. Złośliwy notariusz Corda może również podpisywać sprzeczne transakcje, wysyłając księgę w niespójną przepaść.
Dziwne zwierzę
Łącząc skalowalność, poufność, interoperacyjność i brak pośrednictwa, trudno jest osiągnąć prosty werdykt w sprawie alternatywy Corda. Ogólnie rzecz biorąc, z punktu widzenia dewelopera tej platformy blockchain wydaje się to być ... fascynujące, ale dziwne. Zaprojektowane, aby rozwiązać kluczowe problemy skalowalności i poufności, rozwiązania Corda są niekompletne iw dużym stopniu zależą od kształtu „drzewa genealogicznego” transakcji. Jednak aby osiągnąć te częściowe zwycięstwa, Corda traci podstawową właściwość blockchainów - usunięcie pośredników transakcyjnych. Chociaż Corda bez wątpienia wyróżnia się interoperacyjnością, czy to naprawdę wystarczy?
Gdybyśmy chcieli być sceptyczni, moglibyśmy powiedzieć, że zespół Corda stanął przed niemożliwym zadaniem - zaprojektować smak blockchain, który pasowałby do banków finansujących R3. Jednak kluczową zaletą łańcuchów bloków w porównaniu ze scentralizowanymi bazami danych jest brak pośrednictwa kosztem zmniejszonej poufności. Jak ten kompromis może mieć sens dla instytucji finansowych, które zarabiają na pośrednictwie i są bardzo wrażliwe na kwestie prywatności? Patrząc w tym świetle, można wychwalać Cordę jako heroiczny, ale ostatecznie niezadowalający kompromis między pragnieniem członków R3, aby zrobić coś w technologii blockchain, a ograniczeniami handlowymi i regulacyjnymi, w ramach których istnieją.
Opiekun 2.0
Ale wolę przyjąć bardziej pozytywne podejście. Zamiast skupiać się na porównaniu z łańcuchami bloków, możemy postrzegać Cordę jako główne ulepszenie techniczne do finansowego status quo. Wystarczy zamienić słowo „notariusz” na „kustosz”, a wszystko układa się dość zgrabnie. (ZA kustosz jest instytucją finansową, która przechowuje aktywa w imieniu innych). Tak, notariusze są pośrednikami, którzy mogą zarówno blokować transakcje, jak i dopuszczać do konfliktów, ale dotyczy to również dzisiejszych powierników. „Transakcję zmiany notarialnej” można postrzegać jako przeniesienie aktywów od jednego depozytariusza do drugiego. Transakcje Corda są podpisywane tylko przez jednego notariusza z tego samego powodu, dla którego lubimy, aby wymiana aktywów odbywała się w jednym miejscu - aby żadna ze stron nie straciła kieszeni.
Patrząc na Cordę w ten sposób, możemy zobaczyć, jak poprawia się ona w stosunku do tradycyjnego modelu pozbawienia wolności:
- Definiuje standardowy paradygmat obliczeniowy i format wyrażania aktywów finansowych i innych zobowiązań umownych.
- Dostarcza oprogramowanie open source do interpretowania i wykonywania tych zobowiązań, gwarantując, że strony transakcji i depozytariusze zgadzają się co do wyniku każdej transakcji.
- Złożonych, wielostronnych opiekunów, którzy chronią przed nadużyciami, można tworzyć (używając tylko oprogramowania!), Wykorzystując algorytmy konsensusu odpornego na błędy.
- Zdefiniowano standardowy proces („zmiana notarialna”) dla przeniesienia aktywów między depozytariuszami i żaden depozytariusz nie może odmówić.
- Powiernicy nie mogą korzystać z aktywów znajdujących się pod ich opieką bez zgody właściciela, ponieważ transakcje muszą być również podpisane przez właścicieli ich wkładów.
Daleko mi do bycia bankierem, ale dla mnie to wszystko brzmi raczej obiecująco. I być może Corda równie dobrze można by zastosować w innych branżach o złożonych strukturach powierniczych, takich jak ubezpieczenia czy transport. Chociaż projekt Corda może nie zapewniać pełnego wyeliminowania pośrednictwa w łańcuchu bloków, proponuje potężną transformację dla branż, w których pośrednicy odgrywają kluczową rolę.
Kiedy pójdziemy dalej tym tokiem myślenia, nieuchronnie pojawia się pytanie: jeśli już powierzamy notariuszom zadanie weryfikacji wyjątkowości, dlaczego nie polegać na nich również w kwestii poprawności i autoryzacji? Corda ma już pojęcie „notariusza walidującego”, który w pełni weryfikuje transakcje przed złożeniem swojego podpisu. Zamiast zwykłego pobierania i sprawdzania przez węzły Corda przodków swoich transakcji, dlaczego nie zapytać po prostu notariusza? Może to pomóc w skalowalności i poufności, ponieważ większość węzłów nie widziałaby żadnych transakcji poza własnymi. Możemy nawet zasugerować, że notariusze sieci w pełni sobie ufają, więc nie ma potrzeby martwić się o przodków. Notariusz każdego stanu mógł ręczyć za jego ważność, weryfikując tylko transakcję, która go utworzyła, przy pomocy innych notariuszy.
Niech Corda będzie Cordą
Wszystko to prowadzi nas z powrotem do punktu, w którym zaczęliśmy: Corda nie jest tak naprawdę konkurentem dla konwencjonalnych łańcuchów bloków, w tym MultiChain. Corda to Corda - ciekawy nowy typ rozproszonej księgi, który został zoptymalizowany pod kątem potrzeb osób, które ją finansują. Nie mam pojęcia, czy Corda ostatecznie odniesie sukces, czy porażkę, ponieważ nie znam rzeczywistych kosztów i korzyści w porównaniu z obecnym sposobem działania. Ale bez względu na to, co wydarzy się w przyszłości, z pewnością warto studiować pod kątem filozofii i projektowania.
Jeśli chodzi o MultiChain, przyjmujemy inne podejście. Aby ukraść linię West Wing, jesteśmy zdeterminowani, aby „pozwolić blockchainowi być blockchainem”. Blockchainy są tym, czym są i nie mamy planów, aby zmienić je w coś innego. Jako infrastruktura danych dla współdzielonej aplikacji, łańcuch bloków stanowi szczególny kompromis w porównaniu ze scentralizowaną bazą danych - zysk w zakresie rezygnacji z pośrednictwa kosztem zmniejszonej poufności. Ciężko pracujemy nad tym, aby MultiChain 2.0 był jak najlepszy blockchain platforma dla twórców aplikacji.
Prosimy o umieszczanie komentarzy na LinkedIn.
Źródło: https://www.multichain.com/blog/2018/05/r3-corda-deep-dive-and-technical-review/
- Konto
- Akronimy
- aktywny
- Dodatkowy
- Korzyść
- algorytm
- Algorytmy
- Zastosowanie
- aplikacje
- architektura
- POWIERZCHNIA
- artykuł
- kapitał
- Aktywa
- publiczność
- autoryzacja
- Bank
- bank Chin
- Bankowość
- Banki
- BEST
- Rachunek
- blockchain
- Pudełko
- Budowanie
- Zapakować
- biznes
- Etui
- Spowodować
- ceo
- świadectwo
- certyfikaty
- zmiana
- kanały
- kontrola
- Wykrywanie urządzeń szpiegujących
- dziecko
- Dzieci
- Chiny
- Citi
- zamknięcie
- komentarze
- handlowy
- wspólny
- sukcesy firma
- konkurencja
- konkurenci
- Computer Science
- komputery
- konflikt
- Zgoda
- zgoda
- konsumować
- zawartość
- treść
- umowy
- Corda
- Koszty:
- Tworzenie
- rejs
- cryptocurrencies
- kryptowaluta
- kryptografia
- Aktualny
- Areszt
- Klientów
- DZIEŃ
- myślnik
- dane
- przechowywanie danych
- Baza danych
- Bazy danych
- dzień
- sprawa
- opóźnienie
- dostarczanie
- dostawa
- Wnętrze
- Deweloper
- deweloperzy
- oprogramowania
- ZROBIŁ
- cyfrowy
- Rozproszona księga
- Dolar
- słoń
- Inżynieria
- Enterprise
- ethereum
- wymiana
- Wymiana
- Ćwiczenie
- tkanina
- sprawiedliwy
- członków Twojej rodziny
- Moda
- Korzyści
- W końcu
- budżetowy
- Instytucje finansowe
- w porządku
- i terminów, a
- pierwszy raz
- Skupiać
- format
- pełny
- Finansowanie
- fundusze
- przyszłość
- Ogólne
- Globalne
- globalny blockchain
- dobry
- zarządzanie
- wspaniały
- Zarządzanie
- Rozwój
- tutaj
- Ukryj
- Wysoki
- Podświetlony
- historia
- W jaki sposób
- HTTPS
- olbrzymi
- pomysł
- tożsamość
- Nielegalny
- Włącznie z
- przemysłowa
- Informacja
- Infrastruktura
- Instytucja
- instytucje
- ubezpieczenie
- wzajemne oddziaływanie
- odsetki
- Interoperacyjność
- zaangażowany
- IP
- wydanie
- problemy
- IT
- Java
- Praca
- przystąpić
- Klawisz
- Klawisze
- wiedza
- duży
- prowadzić
- Przywództwo
- prowadzący
- dowiedziałem
- Księga główna
- Regulamin
- poziom
- lekki
- Linia
- Ciecz
- Lista
- długo
- poważny
- Większość
- Dokonywanie
- rynek
- rynki
- Mecz
- Spotkania
- Użytkownicy
- wspomina
- milion
- model
- pieniądze
- ruch
- wielołańcuchowy
- sieć
- sieci
- sieci
- węzły
- Pojęcie
- koncepcja
- open source
- zamówienie
- Zlecenia
- Inne
- Pozostałe
- właściciel
- właściciele
- Ból
- Papier
- paradygmat
- rodzice
- Zapłacić
- płatność
- płatności
- Ludzie
- jest gwarancją najlepszej jakości, które mogą dostarczyć Ci Twoje monitory,
- perspektywa
- filozofia
- obraz
- Platforma
- Platformy
- Popularny
- teraźniejszość
- Cena
- prywatność
- prywatny
- Produkt
- Produkcja
- dowód
- własność
- chronić
- publiczny
- R3
- czytelnicy
- Czytający
- Rzeczywistość
- podsumować
- dokumentacja
- Regulacja
- Relacje
- ulga
- wymagania
- Zasoby
- przejście na emeryturę
- przeglądu
- Ryzyko
- reguły
- run
- bieganie
- Skalowalność
- nauka
- SEA
- widzi
- rozsądek
- zestaw
- shared
- Wysyłka
- Short
- znaki
- Prosty
- mały
- So
- Tworzenie
- Rozwiązania
- ROZWIĄZANIA
- prędkość
- Spędzanie
- rozpiętość
- stawka
- początek
- rozpoczęty
- Stan
- Zjednoczone
- Rynek
- przechowywanie
- sklep
- sklep
- podpory
- Powierzchnia
- system
- Techniczny
- test
- Przyszłość
- Myślący
- osoby trzecie
- czas
- tolerancja
- Możliwość śledzenia
- transakcja
- transakcje
- Transformacja
- Przezroczystość
- transportu
- Zaufaj
- Niezaszyfrowany
- us
- USD
- Użytkownicy
- skraj
- Weryfikacja
- Zobacz i wysłuchaj
- Wirtualny
- Maszyna wirtualna
- widoczność
- Głosowanie
- czekać
- Zachód
- KIM
- Wikipedia
- wygrać
- Praca
- świat
- wartość
- pisanie
- lat
- Zcash
- zero