ZWROT INTERNETU

Pierwsza era Internetu rozpoczęła się energią i duchem młodego Luke’a Skywalkera – z przekonaniem, że każde dziecko z trudnej pustynnej planety może zburzyć imperium zła i założyć nową cywilizację, uruchamiając aplikację internetową. Naiwność, aby się upewnić, ale wiele osób, w tym obecna firma, miało nadzieję, że Internet zawarty w sieci WWW zakłóci świat przemysłowy, w którym niewielu z nich chwyta władzę, a struktury władzy trudno się wspinać i trudniej obalić. W przeciwieństwie do starych mediów, które były scentralizowane i kontrolowane przez potężne siły, a użytkownicy byli obojętni, nowe media były rozproszone i neutralne, a każdy był aktywnym uczestnikiem, a nie biernym odbiorcą. Niski koszt i masowa komunikacja peer-to-peer w Internecie pomogłyby podważyć tradycyjne hierarchie i pomóc w włączeniu obywateli rozwijających się w globalną gospodarkę. Wartość i reputacja wynikałyby z jakości wkładu, a nie statusu. Gdybyś był mądry i pracowity w Indiach, twoje zasługi przyniosłyby ci reputację. Świat byłby bardziej płaski, bardziej merytokratyczny, bardziej elastyczny i bardziej płynny. Co najważniejsze, technologia przyczyniłaby się do dobrobytu dla wszystkich, a nie tylko dla nielicznych. Część z tego się spełniła. Nawiązano masową współpracę, taką jak Wikipedia, Linux i Galaxy Zoo. Outsourcing i sieciowe modele biznesowe umożliwiły ludziom w krajach rozwijających się lepszy udział w globalnej gospodarce. Dziś dwa miliardy ludzi współpracują jako rówieśnicy społecznie. Wszyscy mamy dostęp do informacji w niespotykany sposób. Jednak Imperium uderzyło. Stało się jasne, że skoncentrowane mocarstwa w biznesie i rządzie nakłoniły oryginalną demokratyczną architekturę Internetu do ich woli. Ogromne instytucje kontrolują teraz i są właścicielami tego nowego środka produkcji i interakcji społecznych – podstawowej infrastruktury; ogromne i wciąż rosnące skarby danych; algorytmy, które w coraz większym stopniu rządzą biznesem i życiem codziennym; świat aplikacji; oraz niezwykłe nowe możliwości, uczenie maszynowe i pojazdy autonomiczne. Od Doliny Krzemowej i Wall Street po Szanghaj i Seul, ta nowa arystokracja wykorzystuje swoją przewagę wewnętrzną, aby wykorzystać najbardziej niezwykłą technologię, jaką kiedykolwiek opracowano, aby wzmocnić pozycję ludzi jako podmiotów gospodarczych, budować spektakularne fortuny i wzmocnić jej siłę i wpływy na gospodarki i społeczeństwa. Wiele zmartwień związanych z ciemną stroną zgłoszonych przez pierwszych pionierów technologii cyfrowej praktycznie się zmaterializowało. Mamy wzrost produktu krajowego brutto, ale nie współmierny wzrost zatrudnienia w większości krajów rozwiniętych. Mamy rosnące tworzenie bogactwa i rosnące nierówności społeczne. Potężne firmy technologiczne przeniosły wiele działań z otwartej, rozproszonej, egalitarnej i wzmacniającej sieć do zamkniętych ogrodzonych ogrodów lub zastrzeżonych aplikacji tylko do odczytu, które między innymi zabijają rozmowę. Siły korporacyjne zdobyły wiele z tych wspaniałych, demokratycznych i otwartych technologii peer-to-peer i wykorzystują je do wydobycia nadmiernej części wartości. Konsekwencją jest to, że potęga gospodarcza stała się bardziej dynamiczna, skoncentrowana i bardziej zakorzeniona. Dane nie są szerzej rozpowszechniane i demokratycznie dystrybuowane, lecz gromadzone i wykorzystywane przez mniejszą liczbę podmiotów, które często wykorzystują je do większej kontroli i zdobywania większej mocy. Jeśli gromadzisz dane i moc, która się z nimi wiąże, możesz dodatkowo wzmocnić swoją pozycję, wytwarzając zastrzeżoną wiedzę. Ten przywilej przewyższa zasługę, niezależnie od jego pochodzenia. Co więcej, potężne „konglomeraty cyfrowe”, takie jak Amazon, Google, Apple i Facebook – wszystkie start-upy internetowe jednocześnie – wychwytują skarby danych, które obywatele i instytucje często generują w prywatnych silosach danych, a nie w Internecie. Choć stanowią one wielką wartość dla konsumentów, jednym z rezultatów jest to, że dane stają się nową klasą aktywów – taką, która może przebijać poprzednie klasy aktywów. Kolejnym jest podważenie naszych tradycyjnych koncepcji prywatności i autonomii jednostki. Rządy wszelkiego rodzaju wykorzystują Internet do usprawnienia operacji i usług, ale teraz wdrażają również technologię monitorowania, a nawet manipulowania obywatelami. W wielu demokratycznych krajach rządy wykorzystują technologie informacyjne i komunikacyjne do szpiegowania obywateli, zmiany opinii publicznej, wspierania ich interesów parafialnych, podważania praw i wolności oraz ogólnie do utrzymania władzy. Represyjne rządy, takie jak Chiny i Iran, zamykają Internet, wykorzystując go do tłumienia sprzeciwu i mobilizowania obywateli do realizacji swoich celów. Nie oznacza to, że sieć nie żyje, jak sugerowali niektórzy. Sieć ma kluczowe znaczenie dla przyszłości świata cyfrowego i wszyscy powinniśmy wspierać trwające wysiłki w jej obronie, takie jak działania World Wide Web Foundation, które walczą o utrzymanie jej otwartości, neutralności i ciągłej ewolucji. Teraz, dzięki technologii blockchain, świat nowych możliwości otworzył się, aby odwrócić wszystkie te trendy. Mamy teraz prawdziwą platformę peer-to-peer, która umożliwia wiele ekscytujących rzeczy, które omówimy. Każdy z nas może posiadać naszą tożsamość i nasze dane osobowe. Możemy przeprowadzać transakcje, tworząc i wymieniając wartość bez potężnych pośredników działających jako arbitrzy pieniędzy i informacji. Miliardy wykluczonych osób mogą wkrótce wejść do światowej gospodarki. Możemy chronić naszą prywatność i zarabiać na własnych informacjach. Możemy zapewnić, że twórcy otrzymują rekompensatę za własność intelektualną. Zamiast próbować rozwiązać problem rosnącej nierówności społecznej tylko poprzez redystrybucję bogactwa, możemy zacząć zmieniać sposób podziału bogactwa – w jaki sposób jest on tworzony, ponieważ ludzie na całym świecie, od rolników po muzyków, mogą dzielić się pełniej, a priori, w bogactwie, które tworzą. Niebo wydaje się być granicą. To bardziej Yoda niż Bóg. Ale ten nowy protokół, jeśli nie boski, umożliwia nawiązywanie zaufanej współpracy w świecie, który tego potrzebuje, i to dużo. Jesteśmy podekscytowani.

OSIĄGANIE ZAUFANIA W WIEKU CYFROWYM

Zaufanie do biznesu to oczekiwanie, że druga strona będzie się zachowywać zgodnie z czterema zasadami uczciwości: uczciwością, rozwagą, rozliczalnością i przejrzystością. Uczciwość to nie tylko kwestia etyczna; stał się ekonomiczny. Aby nawiązać zaufanie z pracownikami, partnerami, klientami, akcjonariuszami i społeczeństwem, organizacje muszą być zgodne z prawdą, dokładne i kompletne w komunikacji. Bez kłamstwa przez zaniedbanie, bez zaciemniania przez złożoność. Rozważanie w biznesie często oznacza uczciwą wymianę korzyści lub szkód, które strony będą działały w dobrej wierze. Zaufanie wymaga jednak prawdziwego szacunku dla interesów, pragnień i uczuć innych, a strony mogą działać wobec siebie życzliwie. Odpowiedzialność oznacza podejmowanie wyraźnych zobowiązań wobec interesariuszy i ich przestrzeganie. Zarówno osoby fizyczne, jak i instytucje muszą wykazać, że dotrzymały swoich zobowiązań i dotrzymały złamanych obietnic, najlepiej poprzez weryfikację samych zainteresowanych stron lub niezależnych ekspertów zewnętrznych. Bez przekazywania pieniędzy, bez grania w winę. Przejrzystość oznacza działanie w terenie, w świetle dziennym. „Co oni ukrywają?” Jest oznaką niskiej przejrzystości, która prowadzi do nieufności. Oczywiście firmy mają uzasadnione prawa do tajemnic handlowych i innych praw własności do Informacja. Ale jeśli chodzi o istotne informacje dla klientów, akcjonariuszy, pracowników i innych interesariuszy, aktywna otwartość ma kluczowe znaczenie dla zdobycia zaufania. Zaufanie do biznesu i innych instytucji jest przeważnie niskie. „Barometr zaufania” firmy public relations Edelman wskazuje, że zaufanie do instytucji, zwłaszcza korporacji, spadło do poziomów z niesłychanie niskiego okresu wielkiej recesji w 2008 r. Edelman zauważył, że nawet niegdyś nie do zdobycia branża technologiczna, wciąż najbardziej zaufany sektor biznesowy, po raz pierwszy odnotowała spadek w większości krajów. Na całym świecie dyrektorzy generalni i urzędnicy rządowi nadal są najmniej wiarygodnymi źródłami informacji, pozostając daleko w tyle za ekspertami akademickimi lub branżowymi. Podobnie Gallup w swoim badaniu dotyczącym amerykańskiego zaufania do instytucji, że „biznes” zajął drugie miejsce wśród piętnastu ocenianych instytucji; mniej niż 20 procent respondentów wskazało, że mają znaczny lub wysoki poziom zaufania. Tylko Kongres USA uzyskał niższy wynik. W świecie preblockchain zaufanie do transakcji pochodzących od osób fizycznych, pośredników lub innych organizacji działających w sposób uczciwy. Ponieważ często nie znamy naszych kontrahentów, nie mówiąc już o ich uczciwości, zaczęliśmy polegać na podmiotach trzecich nie tylko w celu zagwarantowania nieznajomym, ale także w celu prowadzenia rejestrów transakcji oraz wykonywania logiki biznesowej i logiki transakcyjnej, która napędza handel online. Ci potężni pośrednicy – banki, rządy, PayPal, Visa, Uber, Apple, Google i inne konglomeraty cyfrowe – zbierają dużą część wartości. W powstającym świecie blockchain zaufanie opiera się na sieci, a nawet na obiektach w sieci. Carlos Moreira z firmy kryptograficznej WISeKey powiedział, że nowe technologie skutecznie przekazują zaufanie – nawet fizycznym rzeczom. „Jeśli obiekt, niezależnie od tego, czy jest to czujnik na wieży komunikacyjnej, żarówka, czy monitor serca, nie jest godny zaufania w zakresie wydajności lub zapłaty za usługi, zostanie automatycznie odrzucony przez inne obiekty.” Sama księga jest podstawa zaufania. Mówiąc wprost, „zaufanie” odnosi się do kupowania i sprzedawania towarów i usług oraz do integralności i ochrony informacji, a nie zaufania do wszystkich spraw biznesowych. W tym tekście przeczytasz jednak, w jaki sposób globalna księga zawierająca prawdziwe informacje może pomóc w budowaniu uczciwości we wszystkich naszych instytucjach i tworzeniu bardziej bezpiecznego i godnego zaufania świata. Naszym zdaniem, firmy, które przeprowadzają niektóre lub wszystkie swoje transakcje na blockchain, odczują wzrost zaufania w cenie akcji. Akcjonariusze i obywatele spodziewają się, że wszystkie spółki giełdowe i organizacje finansowane przez podatników będą prowadzić swoje skarbce przynajmniej na blockchainie. Ze względu na większą przejrzystość inwestorzy będą mogli sprawdzić, czy dyrektor generalny naprawdę zasłużył na tę premię tłuszczową. Inteligentne kontrakty możliwe dzięki blockchainom będą wymagały od kontrahentów przestrzegania ich zobowiązań, a wyborcy będą mogli sprawdzić, czy ich przedstawiciele są uczciwi, czy działają w sposób uczciwy podatkowy

Racjonalna rozkosz dla BLOCKCHAIN

Z pewnością technologia blockchain ma głębokie implikacje dla wielu instytucji. Co pomaga wyjaśnić wszystkie emocje wielu inteligentnych i wpływowych ludzi. Ben Lawsky zrezygnował z pracy jako kurator usług finansowych w stanie Nowy Jork, aby zbudować firmę doradczą w tej dziedzinie. Powiedział nam: „Za pięć do dziesięciu lat system finansowy może być nie do poznania. . . i chcę być częścią zmiany. ”6 Blythe Masters, poprzednio dyrektor finansowy i szef Global Commodities w banku inwestycyjnym JP Morgan, uruchomił start-up ukierunkowany na technologię lockchain w celu przekształcenia branży. Na okładce Bloomberg Markets z października 2015 r. Pojawili się Masters z nagłówkiem „It’s All About Blockchain”. Podobnie, The Economist opublikował artykuł z okładki z października 2015 r., „The Trust Machine”, który dowodził, że „technologia bitcoinów może zmienić, w jaki sposób ekonomia działa. ”Dla The Economist technologia blockchain to„ wielki łańcuch pewności co do rzeczy ”. Banki wszędzie walczą o najwyższy poziom zespołu badającego możliwości, niektóre z nich z dziesiątkami technologicnzych crackerjack;ów. Bankowcy uwielbiają pomysł bezpiecznych, bezproblemowych i natychmiastowych transakcji, ale niektórzy wzdrygają się na pomysł otwartości, decentralizacji i nowych form waluty. Przemysł usług finansowych zmienił już markę i sprywatyzował technologię blockchain, nazywając ją technologią rozproszonej księgi rachunkowej, próbując pogodzić najlepsze z bitcoinów – bezpieczeństwo, szybkość i koszt – z całkowicie zamkniętym systemem, który wymaga banku lub  pozwolenie instytucji banku na wykorzystanie. Dla nich łańcuchy bloków są bardziej niezawodnymi bazami danych niż te, które już mają, bazami danych, które umożliwiają kluczowym interesariuszom – kupującym, sprzedawcom, opiekunom i organom regulacyjnym – prowadzenie wspólnych, nieusuwalnych rejestrów, a tym samym obniżenie kosztów, ograniczenie ryzyka rozliczenia i wyeliminowanie centralnych punktów awarii. . Inwestuje się w start-upy typu blockchain, podobnie jak inwestowanie w dot-coms w latach 90. Inwestorzy venture capital wykazują entuzjazm na poziomie, który sprawiłby, że inwestor dot-com rumienił się w latach dziewięćdziesiątych. Tylko w 2014 i 2015 roku ponad 1 miliard dolarów kapitału wysokiego ryzyka napłynęło do powstającego ekosystemu blockchain, a stopa inwestycji niemal się podwaja każdego roku.8 „Jesteśmy całkiem pewni” – powiedział Marc Andreessen w wywiadzie dla The Washington Post, „Że kiedy będziemy tutaj za 20 lat, będziemy rozmawiać o [technologii blockchain] w dzisiejszym sposobie, w jaki mówimy o Internecie”. Organy regulacyjne również zwróciły uwagę, ustanawiając grupy zadaniowe w celu zbadania, jakie ustawodawstwo, jeśli każdy ma sens. Rządy autorytarne, takie jak Rosja, zakazały lub poważnie ograniczyły używanie bitcoinów, podobnie jak demokratyczne państwa, które powinny wiedzieć lepiej, jak Argentyna, biorąc pod uwagę historię kryzysów walutowych. Bardziej rozważne rządy na Zachodzie inwestują znaczne środki w zrozumienie, w jaki sposób nowa technologia może zmienić nie tylko bankowość centralną i naturę pieniądza, ale także operacje rządowe i naturę demokracji. Carolyn Wilkins, starszy zastępca gubernatora Banku Kanady, uważa, że ​​nadszedł czas, aby banki centralne na całym świecie poważnie przestudiowały konsekwencje przejścia całych systemów walut krajowych na pieniądze cyfrowe. Najlepszy ekonomista Banku Anglii, Andrew Haldane, zaproponował krajową walutę cyfrową dla Wielkiej Brytanii. To są mocne czasy. Oczywiście, rosnąca rzesza entuzjastów ma swój udział , również oportuniści, spekulanci i przestępcy. Pierwszą opowieścią, którą większość ludzi słyszy o walutach cyfrowych, jest bankructwo Mt. Change Gox lub skazanie Rossa Williama Ulbrichta, założyciela ciemnego rynku Silk Road, przejętego przez Federalne Biuro Śledcze za handel nielegalnymi narkotykami, pornografią dziecięcą i bronią wykorzystującą łańcuch bloków bitcoin jako system płatności. Cena bitcoinów drastycznie się wahała, a własność bitcoinów jest nadal skoncentrowana. Badanie z 2013 r. Wykazało, że 937 osób posiadało połowę wszystkich bitcoinów, choć to się dzisiaj zmienia. W jaki sposób przechodzimy od pornografii i programów Ponzi do dobrobytu? Na początek to nie bitcoin, wciąż spekulacyjny zasób, który powinien Cię zainteresować, chyba że jesteś traderem. Ta książka jest o czymś większym niż zasób. Chodzi o moc i potencjał podstawowej platformy technologicznej. Nie oznacza to, że bitcoiny lub kryptowaluty jako takie są nieistotne, jak sugerują niektórzy ludzie, starając się oddzielić swoje projekty od skandalicznych przedsięwzięć z przeszłości. Waluty te mają kluczowe znaczenie dla rewolucji blockchain, która przede wszystkim dotyczy wymiany wartości peer-to-peer, zwłaszcza pieniędzy.

Jak działa ta księga ogólnoświatowa?

Duże banki i niektóre rządy wdrażają łańcuchy bloków jako rozproszone księgi, aby zrewolucjonizować sposób przechowywania informacji i transakcji. Ich celem jest godna pochwały prędkość, niższe koszty, bezpieczeństwo, mniej błędów i eliminacja głównych punktów ataku i awarii. Te modele niekoniecznie obejmują kryptowalutę dla płatności. Najważniejsze i najdalej idące blockchainy oparte są jednak na modelu bitcoin Satoshi. Oto jak działają. Bitcoin lub inna cyfrowa waluta nie jest gdzieś zapisana; jest reprezentowany przez transakcje zarejestrowane w blockchain – coś w rodzaju globalnego arkusza kalkulacyjnego lub księgi, która wykorzystuje zasoby dużej sieci bitcoin peer-to-peer do weryfikacji i zatwierdzania każdej transakcji bitcoin. Każdy blockchain, podobnie jak ten, który używa bitcoinów, jest dystrybuowany: działa na komputerach dostarczanych przez wolontariuszy na całym świecie; nie ma centralnej bazy danych do zhakowania. Blockchain jest publiczny: każdy może go wyświetlić w dowolnym momencie, ponieważ znajduje się w sieci, a nie w ramach jednej instytucji odpowiedzialnej za audyt transakcji i prowadzenie dokumentacji. Blockchain jest szyfrowany: wykorzystuje silne szyfrowanie obejmujące klucze publiczne i prywatne (podobnie jak system z dwoma kluczami, aby uzyskać dostęp do sejfu) w celu utrzymania wirtualnego bezpieczeństwa. Nie musisz się martwić słabymi zaporami ogniowymi Target lub Home Depot, ani złodziejem sztabu Morgana Stanleya lub rządu federalnego USA. Co dziesięć minut, podobnie jak puls sieci Bitcoin, wszystkie przeprowadzane transakcje są weryfikowane, rozliczane i przechowywane w bloku połączonym z poprzednim blokiem, tworząc w ten sposób łańcuch. Każdy blok musi odnosić się do poprzedniego bloku, aby był ważny. Struktura ta trwale stempluje czas i przechowuje wymiany wartości, uniemożliwiając nikomu modyfikowanie księgi. Jeśli chcesz ukraść bitcoin, będziesz musiał przepisać całą historię monety na blockchain w biały dzień. To jest praktycznie niemożliwe. Blockchain jest więc rozproszoną księgą reprezentującą konsensus sieciowy każdej transakcji, która kiedykolwiek miała miejsce. Podobnie jak World Wide Web informacji, jest to World Wide Ledger o wartości – rozproszona księga, którą każdy może pobrać i uruchomić na swoim komputerze osobistym. Niektórzy uczeni twierdzili, że wynalazek podwójnej księgowości umożliwił powstanie kapitalizmu i państwa narodowego. Ta nowa cyfrowa księga transakcji gospodarczych może być zaprogramowana do rejestrowania praktycznie wszystkiego, co ma wartość i znaczenie dla ludzkości: akt urodzenia i zgonu, akty małżeństwa, akty własności i tytuły własności, wykształcenie, rachunki finansowe, procedury medyczne, roszczenia ubezpieczeniowe, głosy, pochodzenie żywności i wszystkiego, co można wyrazić w kodzie. Nowa platforma umożliwia uzgadnianie zapisów cyfrowych dotyczących prawie wszystkiego w czasie rzeczywistym. W rzeczywistości wkrótce miliardy inteligentnych rzeczy w świecie fizycznym będą wyczuwać, reagować, komunikować się, kupować własną energię elektryczną i udostępniać ważne dane, robiąc wszystko, od ochrony naszego środowiska po zarządzanie zdrowiem. Ten Internet wszystkiego potrzebuje księgi wszystkiego. Biznes, handel i gospodarka wymagają cyfrowego rozliczenia. Dlaczego więc miałbyś się przejmować? Wierzymy, że prawda może nas uwolnić, a rozproszone zaufanie głęboko wpłynie na ludzi na wszystkich etapach życia. Może jesteś miłośnikiem muzyki, który chce, aby artyści zarabiali na życie swoją sztuką. Lub konsument, który chce wiedzieć, skąd tak naprawdę pochodzi to mięso z hamburgerów. Być może jesteś imigrantem, który ma dość płacenia dużych opłat za wysyłanie pieniędzy do bliskich w ojczyźnie. Lub Saudyjka, która chce opublikować własny magazyn o modzie. Być może jesteś pracownikiem pomocy, który musi zidentyfikować tytuły ziemskie właścicieli ziemskich, abyś mógł odbudować ich domy po trzęsieniu ziemi. Lub obywatel mający dość braku przejrzystości i odpowiedzialności przywódców politycznych. Lub użytkownik mediów społecznościowych, który ceni Twoją prywatność i uważa, że ​​wszystkie generowane przez Ciebie dane mogą być coś warte – dla Ciebie. Nawet gdy piszemy, innowatorzy budują aplikacje oparte na blockchain, które służą tym celom. A to dopiero początek.

W POSZUKIWANIU PROTOKOŁU ZAUFANIA

Już w 1981 r. wynalazcy próbowali rozwiązać problemy Internetu związane z prywatnością, bezpieczeństwem i włączeniem do kryptografii. Bez względu na to, jak przeprojektowali ten proces, zawsze były wycieki, ponieważ zaangażowane były strony trzecie. Płacenie kartami kredytowymi przez Internet było niepewne, ponieważ użytkownicy musieli ujawniać zbyt wiele danych osobowych, a opłaty transakcyjne były zbyt wysokie dla małych płatności. W 1993 roku genialny matematyk David Chaum wymyślił eCash, cyfrowy system płatności, który był „technicznie doskonałym produktem, który umożliwił bezpieczne i anonimowe dokonywanie płatności przez Internet. . . . Doskonale nadawał się do wysyłania elektronicznych groszy, monet i dziesięciocentówek przez Internet. ” Był tak doskonały, że Microsoft i inni byli zainteresowani włączeniem eCash jako funkcji w swoim oprogramowaniu. Kłopot polegał na tym, że kupujących online nie obchodziła prywatność i bezpieczeństwo online. Holenderska firma Chaum DigiCash zbankrutowała w 1998 roku. Mniej więcej w tym czasie jeden ze współpracowników Chauma, Nick Szabo, napisał krótki artykuł zatytułowany „The God Protocol”, o zwrocie laureata nagrody Nobla Leona Leonermana, „cząstka Boga”, odnoszący się do znaczenia bozonu Higgsa we współczesnej fizyce. W swoim artykule Szabo zastanawiał się nad stworzeniem protokołu technologii „wszystko na końcu”, takiego, który wyznaczył Boga zaufaną stroną trzecią w trakcie wszystkich transakcji: „Wszystkie strony wyślą swoje uwagi Bogu. Bóg rzetelnie określi wyniki i zwróci wyniki. Bóg jest najwyższym w dyskrecji wyznaniowej, żadna ze stron nie dowie się nic więcej na temat wkładu innych stron, niż mogliby wyciągnąć wnioski z ich własnych wkładów i wyników. ”Jego argument był potężny: prowadzenie biznesu w Internecie wymaga skoku wiary. Ponieważ infrastruktura nie ma tak bardzo potrzebnego bezpieczeństwa, często nie mamy innego wyboru, jak traktować pośredników jak bóstwa. Dziesięć lat później, w 2008 r., światowy przemysł finansowy przeżył krach. Być może uprzejmie, osoba o pseudonimie lub osoby o imieniu Satoshi Nakamoto nakreśliły nowy protokół dla elektronicznego systemu kasowego peer-to-peer wykorzystującego kryptowalutę zwaną bitcoin. Kryptowaluty (waluty cyfrowe) różnią się od tradycyjnych walut fiat, ponieważ nie są tworzone ani kontrolowane przez kraje. W tym protokole ustanowiono zestaw reguł – w postaci obliczeń rozproszonych – zapewniających integralność danych wymienianych między tymi miliardami urządzeń bez przechodzenia przez zaufaną stronę trzecią. Ten pozornie subtelny akt wywołał iskrę, która podnieciła, przeraziła lub w inny sposób pobudziła wyobraźnię świata komputerowego i rozprzestrzeniła się jak pożar wśród firm, rządów, obrońców prywatności, działaczy rozwoju społecznego, teoretyków mediów i dziennikarzy, by wymienić tylko kilku wszędzie „Oni mówią:„ O mój Boże, to jest to. To jest wielki przełom. Właśnie na to czekaliśmy ”- powiedział Marc Andreessen, współtwórca pierwszej komercyjnej przeglądarki internetowej Netscape i duży inwestor w przedsięwzięcia technologiczne.

„ Rozwiązał wszystkie problemy. Kimkolwiek jest, powinien otrzymać Nagrodę Nobla – jest geniuszem. ”O to chodzi! Jest to rozproszona sieć zaufania, której Internet zawsze potrzebował i nigdy nie miał. ”Dzisiaj ludzie z namysłem na całym świecie starają się zrozumieć implikacje protokołu, który umożliwia zwykłym śmiertelnikom wytworzenie zaufania za pomocą sprytnego kodu. To się nigdy wcześniej nie zdarzyło – zaufane transakcje bezpośrednio między dwiema lub więcej stronami, uwierzytelnione w drodze masowej współpracy i oparte na zbiorowych interesach własnych, a nie przez duże korporacje motywowane zyskiem. To może nie być Wszechmogący, ale godna zaufania globalna platforma dla naszych transakcji jest czymś bardzo dużym. Nazywamy to protokołem zaufania. Ten protokół jest podstawą rosnącej liczby globalnych rozproszonych ksiąg zwanych blockchainami – z których największy jest blockchain bitcoinów. Chociaż technologia jest skomplikowana, a słowo blockchain nie jest dokładnie dźwięczne, główna idea jest prosta. Blockchainy pozwalają nam przesyłać pieniądze bezpośrednio i bezpiecznie ode mnie do Ciebie, bez przechodzenia przez bank, firmę wydającą karty kredytowe lub PayPal. Zamiast Internetu informacji jest to Internet wartości lub pieniędzy. Jest to również platforma dla wszystkich, aby wiedzieć, co jest prawdą – przynajmniej w odniesieniu do ustrukturyzowanych zarejestrowanych informacji. Najprościej mówiąc, jest to kod open source: każdy może go pobrać za darmo, uruchomić i używać do opracowywania nowych narzędzi do zarządzania transakcjami online. Jako taki, ma potencjał do uwolnienia niezliczonych nowych aplikacji i jeszcze niezrealizowanych możliwości, które mogą przekształcić wiele rzeczy.

PROTOKÓŁ ZAUFANIA

Wygląda na to, że po raz kolejny technologiczny dżin został uwolniony z butelki. Wezwany przez nieznaną osobę lub osoby o niejasnych motywach, w niepewnym momencie w historii, dżin jest teraz w naszej służbie po raz kolejny kopnąć puszkę – aby przekształcić ekonomiczną sieć energetyczną i stary porządek ludzkich spraw na lepsze. Jeśli to zrobimy.

Pozwól nam wyjaśnić.

Pierwsze cztery dziesięciolecia Internetu przyniosły nam pocztę elektroniczną, internet, dot-com, media społecznościowe, mobilną sieć, duże zbiory danych, przetwarzanie w chmurze i początki Internetu rzeczy. Doskonale sprawdza się w obniżaniu kosztów wyszukiwania, współpracy i wymiany informacji. Obniżył bariery wejścia w nowe media i rozrywkę, nowe formy sprzedaży detalicznej i organizacji pracy oraz bezprecedensowe przedsięwzięcia cyfrowe. Dzięki technologii czujników wniósł inteligencję do naszych portfeli, naszej odzieży, naszych samochodów, naszych budynków, naszych miast, a nawet naszej biologii. Nasyca nasze środowisko do tego stopnia, że ​​wkrótce nie będziemy już „logować się”, a raczej zajmować się naszą firmą i naszym życiem zanurzonym w wszechobecnej technologii. Ogólnie rzecz biorąc, Internet umożliwił wiele pozytywnych zmian – dla tych, którzy mają do niego dostęp – ale ma poważne ograniczenia dla działalności gospodarczej i gospodarczej. Nowojorczyk może powtórzyć kreskówkę Petera Steinera z 1993 roku, w której jeden pies rozmawia z drugim bez rewizji: „W Internecie nikt nie wie, że jesteś psem”. W Internecie nadal nie możemy wiarygodnie ustalić tożsamości ani ufać sobie nawzajem w transakcjach i wymieniaj pieniądze bez potwierdzenia od strony trzeciej, takiej jak bank lub rząd. Ci sami pośrednicy zbierają nasze dane i naruszają naszą prywatność w celu uzyskania korzyści handlowych i bezpieczeństwa narodowego. Nawet w przypadku Internetu ich struktura kosztów wyklucza około 2,5 miliarda ludzi z globalnego systemu finansowego. Pomimo obietnicy świata z uprawnieniami peer-to-peer, korzyści gospodarcze i polityczne okazały się asymetryczne – z władzą i dobrobytem kierowanym do tych, którzy już je mają, nawet jeśli już nie zarabiają. Technologia nie tworzy dobrobytu bardziej niż niszczy prywatność. Jednak w erze cyfrowej technologia leży u podstaw prawie wszystkiego – dobra i zła. Pozwala ludziom cenić i naruszać nawzajem swoje prawa na zupełnie nowe sposoby. Eksplozja komunikacji i handlu online stwarza więcej możliwości cyberprzestępczości. Prawo Moore’a dotyczące corocznego podwojenia mocy obliczeniowej podwaja moc oszustów i złodziei – „Wyjęci spod prawa Moore’a” 1 – nie wspominając o spamerach, złodziejach tożsamości, phisherach, szpiegach, farmerach zombie, hakerach, cyberbullach i aplikatorach danych – przestępców, którzy uwalniają oprogramowanie ransomware do wstrzymaj zakładnika danych – lista jest długa.

Aplikacja kliencka

Tak jak  poprzednio, możemy użyć biblioteki web3 do wywołania funkcji w inteligentnym kontrakcie. Tu zrobiliśmy to za pomocą aplikacji node.js, a nie aplikacji przeglądarki. W tej sekcji będziemy używać web3 w aplikacji przeglądarki do wywoływania funkcji głosowania wdrożonej inteligentnej umowy. Najprostszą aplikacją internetową, którą możemy utworzyć dla tego DApp, jest pojedyncza strona internetowa z kilkoma kontrolkami tekstu i przycisków. W przypadku strony internetowej możemy użyć następującego kodu w pliku HTML, a następnie uruchomić go z lokalnego serwera. Należy pamiętać, że uruchamianie z lokalnego serwera i nie otwieranie bezpośrednio pliku z przeglądarki jest ważne, aby poprawnie załadować skrypty, bez problemów związanych z bezpieczeństwem przeglądarki.

<html>

<c>

<meta charset=”UTF-8″>

<title>Beginning Blockchain – DApp demo</title>

<script src=”<source of web3 library from any CDN or local

file>”></script>

</head>

<body>

<div>

<p>

<strong>Beginning Blockchain</strong>

</p>

<p>Hi, Welcome to the Polling DApp!</p>

<p>&nbsp;</p>

<p>Get latest poll:&nbsp;

<button onclick=”getPoll()”>Get Poll</button>

</p>

<p>

<div id=”pollSubject”></div>

</p>

<p>Vote: Yes:

<input type=”radio” id=”yes”> No:

<input type=”radio” id=”no”>

</p>

<p>Submit:&nbsp;

<button onclick=”submitVote()”>Submit Vote</button>

</p>

</p>

</div>

<script>

if (typeof web3 !== ‘undefined’) {

web3 = new Web3(web3.currentProvider);

} else {

web3 = new Web3(new Web3.providers.HttpProvider

(‘http://127.0.0.1:8507’));

}

function getPoll() {

var pollingContract = new web3.eth.Contract([{

“constant”: true,

“inputs”: [{

“name”: “”,

“type”: “address”

}],

“name”: “votes”,

“outputs”: [{

“name”: “”,

“type”: “uint256”

}],

“payable”: false,

“stateMutability”: “view”,

“type”: “function”

},

{

“constant”: true,

“inputs”: [],

“name”: “getPoll”,

“outputs”: [{

“name”: “”,

“type”: “string”

}],

“payable”: false,

“stateMutability”: “view”,

“type”: “function”

},

{

“anonymous”: false,

“inputs”: [{

“indexed”: false,

“name”: “_voter”,

“type”: “address”

},

{

“indexed”: false,

“name”: “_value”,

“type”: “uint256”

}

],

“name”: “Voted”,

“type”: “event”

},

{

“constant”: false,

“inputs”: [{

“name”: “selection”,

“type”: “uint256”

}],

“name”: “vote”,

“outputs”: [],

“payable”: false,

“stateMutability”: “nonpayable”,

“type”: “function”

}

], ‘0x59E7161646C3436DFdF5eBE617B4A172974B481e’);

pollingContract.methods.getPoll().call().

then(function (value) {

document.getElementById(‘pollSubject’).

textContent = value;

});

};

function submitVote() {

var value = 0

var yes = document.getElementById(‘yes’).checked;

var no = document.getElementById(‘no’).checked;

if (yes) {

value = 1

} else if (no) {

value = 2

} else {

return;

}

var pollingContract = new web3.eth.Contract([{

“constant”: true,

“inputs”: [{

“name”: “”,

“type”: “address”

}],

“name”: “votes”,

“outputs”: [{

“name”: “”,

“type”: “uint256”

}],

“payable”: false,

“stateMutability”: “view”,

“type”: “function”

},

{

“constant”: true,

“inputs”: [],

“name”: “getPoll”,

“outputs”: [{

“name”: “”,

“type”: “string”

}],

“payable”: false,

“stateMutability”: “view”,

“type”: “function”

},

{

“anonymous”: false,

“inputs”: [{

“indexed”: false,

“name”: “_voter”,

“type”: “address”

},

{

“indexed”: false,

“name”: “_value”,

“type”: “uint256”

}

],

“name”: “Voted”,

“type”: “event”

},

{

“constant”: false,

“inputs”: [{

“name”: “selection”,

“type”: “uint256”

}],

“name”: “vote”,

“outputs”: [],

“payable”: false,

“stateMutability”: “nonpayable”,

“type”: “function”

}

], ‘0x59E7161646C3436DFdF5eBE617B4A172974B481e’);

pollingContract.methods.vote(value).send({

from: ‘0xbaf735f889d603f0ec6b1030c91d9033e

60525c3′

}).then(function (result) {

console.log(result);

});

};

</script>

</body>

</html>

Przeanalizujmy teraz każdą sekcję tego pliku HTML. W sekcji nagłówka dokumentu HTML załadowaliśmy skrypt web3 ze źródła CDN lub źródła lokalnego. To tak, jakbyśmy odwoływali się do dowolnej innej biblioteki JavaScript stron trzecich na naszych stronach internetowych (JQuery itp.). Następnie w sekcji treści HTML mamy kontrolki do wyświetlania tematu ankiety i radia oraz przycisków do przechwytywania użytkownika. Ogólna strona wygląda tak

fig6-11

Ważna jest sekcja skryptu w ciele. Właśnie tam nazywamy kod interakcji inteligentnego kontraktu. Spójrzmy na to szczegółowo.

<script>

if (typeof web3 !== ‘undefined’) {

web3 = new Web3(web3.currentProvider);

} else {

web3 = new Web3(new Web3.providers.HttpProvider

(‘http://127.0.0.1:8507’));

}

function getPoll() {

var pollingContract = new web3.eth.Contract([{

“constant”: true,

“inputs”: [{

“name”: “”,

“type”: “address”

}],

“name”: “votes”,

“outputs”: [{

“name”: “”,

“type”: “uint256”

}],

“payable”: false,

“stateMutability”: “view”,

“type”: “function”

},

{

“constant”: true,

“inputs”: [],

“name”: “getPoll”,

“outputs”: [{

“name”: “”,

“type”: “string”

}],

“payable”: false,

“stateMutability”: “view”,

“type”: “function”

},

{

“anonymous”: false,

“inputs”: [{

“indexed”: false,

“name”: “_voter”,

“type”: “address”

},

{

“indexed”: false,

“name”: “_value”,

“type”: “uint256”

}

],

“name”: “Voted”,

“type”: “event”

},

{

“constant”: false,

“inputs”: [{

“name”: “selection”,

“type”: “uint256”

}],

“name”: “vote”,

“outputs”: [],

“payable”: false,

“stateMutability”: “nonpayable”,

“type”: “function”

}

], ‘0x59E7161646C3436DFdF5eBE617B4A172974B481e’);

pollingContract.methods.getPoll().call().

then(function (value) {

document.getElementById(‘pollSubject’).

textContent = value;

});

};

function submitVote() {

var value = 0

var yes = document.getElementById(‘yes’).checked;

var no = document.getElementById(‘no’).checked;

if (yes) {

value = 1

} else if (no) {

value = 2

} else {

return;

}

var pollingContract = new web3.eth.Contract([{

“constant”: true,

“inputs”: [{

“name”: “”,

“type”: “address”

}],

“name”: “votes”,

“outputs”: [{

“name”: “”,

“type”: “uint256”

}],

“payable”: false,

“stateMutability”: “view”,

“type”: “function”

},

{

“constant”: true,

“inputs”: [],

“name”: “getPoll”,

“outputs”: [{

“name”: “”,

“type”: “string”

}],

“payable”: false,

“stateMutability”: “view”,

“type”: “function”

},

{

“anonymous”: false,

“inputs”: [{

“indexed”: false,

“name”: “_voter”,

“type”: “address”

},

{

“indexed”: false,

“name”: “_value”,

“type”: “uint256”

}

],

“name”: “Voted”,

“type”: “event”

},

{

“constant”: false,

“inputs”: [{

“name”: “selection”,

“type”: “uint256”

}],

“name”: “vote”,

“outputs”: [],

“payable”: false,

“stateMutability”: “nonpayable”,

“type”: “function”

}

], ‘0x59E7161646C3436DFdF5eBE617B4A172974B481e’);

pollingContract.methods.vote(value).send({

from: ‘0xbaf735f889d603f0ec6b1030c91d9033

e60525c3′

}).then(function (result) {

console.log(result);

});

};

</script>

W poprzedniej sekcji skryptu najpierw inicjalizujemy obiekt web3 z dostawcą HTTP lokalnego węzła Ethereum (jeśli jeszcze nie jest zainicjowane). Następnie mamy dwie funkcje JavaScript. Jeden do pobierania wartości ciągu pollSubject z inteligentnego kontraktu, a drugi do wywoływania funkcji głosowania w kontrakcie. Wywołanie funkcji inteligentnego kontraktu jest dokładnie tak, jak to zrobiliśmy w poprzedniej sekcji, używając submoduła web3.eth.Contract biblioteki web3. Zauważ, że w pierwszej funkcji getPoll wywołujemy funkcję wywołania w instancji inteligentnej umowy, podczas gdy w drugiej funkcji submVote wywołujemy wysyłanie w instancji inteligentnej umowy. To przede wszystkim różnica w dwóch wywołaniach funkcji. Korzystając z wywołania funkcji getPoll inteligentnej umowy, otrzymujemy wartość zwrotną funkcji getPoll bez wysyłania żadnej transakcji do sieci. Następnie wyświetlamy tę wartość w interfejsie użytkownika, przypisując ją jako tekst elementu interfejsu użytkownika. Następnie, korzystając z funkcji wysyłania w głosowaniu, wysyłamy transakcję, aby wykonać tę funkcję w sieci, dlatego musimy również zdefiniować konto, które będzie używane do wykonania funkcji inteligentnego kontraktu. Poniżej przedstawiono dane wyjściowe uzyskane z przedstawionej wcześniej funkcji submVote, która jest w zasadzie pokwitowaniem transakcji.

{

blockHash: ‘0x04a02dd56c037569eb6abe25e003a65d3366407

134c90a056f64b62c2d23eb84′,

blockNumber: 4257,

contractAddress: null,

cumulativeGasUsed: 43463,

from: ‘0xbaf735f889d603f0ec6b1030c91d9033e60525c3’,

gasUsed: 43463,

logsBloom: ‘0x000000000000000000000000000000800000000

00000040000000000000000000200000000000000000000000000

00000000000000000000000000000000000000000000000000000

00000000000200000000002000000000000000000000000000000

00000000000000000000000000000000000000000000000000000

00000000000000000000000000000000000000000000000000000

00000000000000000000000000000000000002000000000000000

00000000000000000000000000000000000000000000000000000

00000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000′,

root: ‘0x58bc4ee0a3025ca3f303df9bb243d052a123026519637

30c52c88aafe92ebeee’,

to: ‘0x59e7161646c3436dfdf5ebe617b4a172974b481e’,

transactionHash: ‘0x434aa9c0037af3367a0d3d92985781c50

774241ace1d382a8723985efcea73b3′,

transactionIndex: 0,

events: {

Voted: {

address: ‘0x59E7161646C3436DFdF5eBE617B4A17

2974B481e’,

blockNumber: 4257,

transactionHash: ‘0x434aa9c0037af3367a0d3d929

85781c50774241ace1d382a8723985efcea73b3′,

transactionIndex: 0,

blockHash: ‘0x04a02dd56c037569eb6abe25e003a65

d3366407134c90a056f64b62c2d23eb84′,

logIndex: 0,

removed: false,

id: ‘log_980a1744’,

returnValues: [Result],

event: ‘Voted’,

signature: ‘0x4d99b957a2bc29a30ebd96a7be8e68f

e50a3c701db28a91436490b7d53870ca4′,

raw: [Object]

}

}

}

Jeśli przyjrzymy się bliżej temu wynikowi, zobaczymy, że ma on również sekcję wydarzeń i pokazuje on wyzwalanie Głosowanego wydarzenia, które stworzyliśmy w naszej inteligentnej umowie.

events: {

Voted: {

address: ‘0x59E7161646C3436DFdF5eBE617B4A172

974B481e’,

blockNumber: 4257,

transactionHash: ‘0x434aa9c0037af3367a0d3d929

85781c50774241ace1d382a8723985efcea73b3′,

transactionIndex: 0,

blockHash: ‘0x04a02dd56c037569eb6abe25e003a6

5d3366407134c90a056f64b62c2d23eb84′,

logIndex: 0,

removed: false,

id: ‘log_980a1744’,

returnValues: [Result],

event: ‘Voted’,

signature: ‘0x4d99b957a2bc29a30ebd96a7be8e68fe

50a3c701db28a91436490b7d53870ca4′,

raw: [Object]

}

}

W poprzednim fragmencie kodu wyodrębniliśmy sekcję wydarzeń od otrzymania transakcji, którą otrzymaliśmy w odpowiedzi na przesłaną transakcję, na funkcję głosowania naszej inteligentnej umowy. Jak widzimy, sekcja zdarzeń pokazuje również wartości zwracane i wartości pierwotne z wywołania funkcji. Doszliśmy do końca naszego ćwiczenia programowania DApp. W poprzednich sekcjach tego rozdziału opracowaliśmy kompleksową zdecentralizowaną aplikację w łańcuchu bloków Ethereum, a także wdrożyliśmy prywatny łańcuch bloków dla naszego DApp. Z DApp można także korzystać w publicznej sieci Ethereum – wyborca musi hostować węzeł i może głosować przy użyciu istniejących kont Ethereum w publicznej (głównej) sieci. Istnieje kilka sposobów na ulepszenie logiki biznesowej w inteligentnej umowie przy użyciu różnych kontroli i reguł. To ćwiczenie programowania daje nam podstawową wiedzę na temat tego, jak podejść do rozwoju zdecentralizowanych aplikacji i komponentów, które pojawiają się na obrazie podczas procesu. Ćwiczenie to można potraktować jako punkt wyjścia do opracowania aplikacji Ethereum, a czytelnika zachęca się do zapoznania się z najlepszymi praktykami i bardziej złożonymi scenariuszami na ten temat.

Wdróż umowę w sieci prywatnej

Teraz, gdy mamy naszą inteligentną umowę i jej szczegóły, przygotujemy obiekt umowy web3 ze szczegółami tej umowy, a następnie wdrożymy tę umowę do łańcucha bloków Ethereum, wywołując metodę wdrażania na obiekcie umowy. Musimy stworzyć obiekt klasy web3.eth.Contract, który może reprezentować naszą umowę. Poniższy fragment kodu tworzy instancję kontraktu z ABI naszej umowy jako dane wejściowe do konstruktora.

var pollingContract = new web3.eth.Contract([

{

“constant”: true,

“inputs”: [

{

“name”: “”,

“type”: “address”

}

],

“name”: “votes”,

“outputs”: [

{

“name”: “”,

“type”: “uint256”

}

],

“payable”: false,

“stateMutability”: “view”,

“type”: “function”

},

{

“constant”: true,

“inputs”: [],

“name”: “getPoll”,

“outputs”: [

{

“name”: “”,

“type”: “string”

}

],

“payable”: false,

“stateMutability”: “view”,

“type”: “function”

},

{

“anonymous”: false,

“inputs”: [

{

“indexed”: false,

“name”: “_voter”,

“type”: “address”

},

{

“indexed”: false,

“name”: “_value”,

“type”: “uint256”

}

],

“name”: “Voted”,

“type”: “event”

},

{

“constant”: false,

“inputs”: [

{

“name”: “selection”,

“type”: “uint256”

}

],

“name”: “vote”,

“outputs”: [],

“payable”: false,

“stateMutability”: “nonpayable”,

“type”: “function”

}

]);

Teraz musimy wdrożyć tę umowę w sieci Ethereum przy użyciu metody wdrażania biblioteki web3. Poniższy fragment kodu pokazuje, jak to zrobić. W tym fragmencie dodaliśmy kod bajtu w polu danych obiektu przekazanego do metody wdrażania.

pollingContract

.deploy({

data: ‘0x606060405260806040519081016040528060508152602

0017f53686f756c6420636f66666565206265206d6164652074617

820667265653f2081526020017f53656e64203120666f722079657

3204f52203220666f72206e6f20696e20746881526020017f65207

66f74652066756e6374696f6e2e000000000000000000000000000

000008152506001908051906020019061009c9291906100ad565b5

034156100a857600080fd5b610152565b828054600181600116156

101000203166002900490600052602060002090601f01602090048

1019282601f106100ee57805160ff191683800117855561011c565

b8280016001018555821561011c579182015b8281111561011b578

251825591602001919060010190610100565b5b509050610129919

061012d565b5090565b61014f91905b8082111561014b576000816

000905550600101610133565b5090565b90565b610373806101616

000396000f300606060405260043610610057576000357c0100000

000000000000000000000000000000000000000000000000000900

463ffffffff1680630121b93f1461005c57806303c322781461007

f578063d8bff5a51461010d575b600080fd5b34156100675760008

0fd5b61007d600480803590602001909190505061015a565b005b3

41561008a57600080fd5b610092610273565b60405180806020018

281038252838181518152602001915080519060200190808383600

05b838110156100d25780820151818401526020810190506100b75

65b50505050905090810190601f1680156100ff578082038051600

1836020036101000a031916815260200191505b509250505060405

180910390f35b341561011857600080fd5b610144600480803573f

fffffffffffffffffffffffffffffffffffffff169060200190919

0505061031b565b604051808281526020019150506040518091039

0f35b7f4d99b957a2bc29a30ebd96a7be8e68fe50a3c701db28a91

436490b7d53870ca43382604051808373fffffffffffffffffffff

fffffffffffffffffff1673fffffffffffffffffffffffffffffff

fffffffff168152602001828152602001925050506040518091039

0a160008060003373fffffffffffffffffffffffffffffffffffff

fff1673ffffffffffffffffffffffffffffffffffffffff1681526

020019081526020016000205414151561021257600080fd5b60008

11180156102225750600381105b151561022d57600080fd5b80600

0803373ffffffffffffffffffffffffffffffffffffffff1673fff

fffffffffffffffffffffffffffffffffffff16815260200190815

26020016000208190555050565b61027b610333565b60018054600

181600116156101000203166002900480601f01602080910402602

001604051908101604052809291908181526020018280546001816

00116156101000203166002900480156103115780601f106102e65

7610100808354040283529160200191610311565b8201919060005

26020600020905b8154815290600101906020018083116102f4578

29003601f168201915b5050505050905090565b600060205280600

05260406000206000915090505481565b602060405190810160405

2806000815250905600a165627a7a72305820ec7d3e1dae8412ec8

5045a8eafc248e37ae506802cc008ead300df1ac81aab490029′

})

.send({

from: ‘0xbaf735f889d603f0ec6b1030c91d9033e60525c3’,

gas: 4700000,

gasPrice: ‘20000000000000’

},

function(error, transactionHash){

console.log(error);

console.log(transactionHash);

})

.then(function(contract){

console.log(contract);

});

Pamiętaj, że korzystaliśmy również z konta utworzonego podczas konfiguracji sieci w polu „z” funkcji wysyłania. Ponieważ to konto zostało wstępnie zasilone dziewięcioma Ether i jest również dodane jako konto eterowe dla nagród górniczych, ma wystarczającą ilość Etheru do wdrożenia kontraktu. Pełna funkcja do wdrożenia umowy będzie

var deployContract = function () {

var pollingContract = new web3.eth.Contract([{

“constant”: true,

“inputs”: [{

“name”: “”,

“type”: “address”

}],

“name”: “votes”,

“outputs”: [{

“name”: “”,

“type”: “uint256”

}],

“payable”: false,

“stateMutability”: “view”,

“type”: “function”

},

{

“constant”: true,

“inputs”: [],

“name”: “getPoll”,

“outputs”: [{

“name”: “”,

“type”: “string”

}],

“payable”: false,

“stateMutability”: “view”,

“type”: “function”

},

{

“anonymous”: false,

“inputs”: [{

“indexed”: false,

“name”: “_voter”,

“type”: “address”

},

{

“indexed”: false,

“name”: “_value”,

“type”: “uint256”

}

],

“name”: “Voted”,

“type”: “event”

},

{

“constant”: false,

“inputs”: [{

“name”: “selection”,

“type”: “uint256”

}],

“name”: “vote”,

“outputs”: [],

“payable”: false,

“stateMutability”: “nonpayable”,

“type”: “function”

}

]);

pollingContract

.deploy({

data: ‘0x60606040526080604051908101604052806050815

26020017f53686f756c6420636f66666565206265206d61646

52074617820667265653f2081526020017f53656e642031206

66f7220796573204f52203220666f72206e6f20696e2074688

1526020017f6520766f74652066756e6374696f6e2e0000000

00000000000000000000000008152506001908051906020019

061009c9291906100ad565b5034156100a857600080fd5b610

152565b8280546001816001161561010002031660029004906

00052602060002090601f016020900481019282601f106100e

e57805160ff191683800117855561011c565b8280016001018

555821561011c579182015b8281111561011b5782518255916

02001919060010190610100565b5b509050610129919061012

d565b5090565b61014f91905b8082111561014b57600081600

0905550600101610133565b5090565b90565b6103738061016

16000396000f300606060405260043610610057576000357c0

10000000000000000000000000000000000000000000000000

0000000900463ffffffff1680630121b93f1461005c5780630

3c322781461007f578063d8bff5a51461010d575b600080fd5

b341561006757600080fd5b61007d600480803590602001909

190505061015a565b005b341561008a57600080fd5b6100926

10273565b60405180806020018281038252838181518152602

00191508051906020019080838360005b838110156100d2578

0820151818401526020810190506100b7565b5050505090509

0810190601f1680156100ff578082038051600183602003610

1000a031916815260200191505b50925050506040518091039

0f35b341561011857600080fd5b610144600480803573fffff

fffffffffffffffffffffffffffffffffff169060200190919

0505061031b565b60405180828152602001915050604051809

10390f35b7f4d99b957a2bc29a30ebd96a7be8e68fe50a3c70

1db28a91436490b7d53870ca43382604051808373fffffffff

fffffffffffffffffffffffffffffff1673fffffffffffffff

fffffffffffffffffffffffff1681526020018281526020019

250505060405180910390a160008060003373fffffffffffff

fffffffffffffffffffffffffff1673fffffffffffffffffff

fffffffffffffffffffff16815260200190815260200160002

05414151561021257600080fd5b60008111801561022257506

00381105b151561022d57600080fd5b806000803373fffffff

fffffffffffffffffffffffffffffffff1673fffffffffffff

fffffffffffffffffffffffffff16815260200190815260200

16000208190555050565b61027b610333565b6001805460018

1600116156101000203166002900480601f016020809104026

02001604051908101604052809291908181526020018280546

00181600116156101000203166002900480156103115780601

f106102e657610100808354040283529160200191610311565

b820191906000526020600020905b815481529060010190602

0018083116102f457829003601f168201915b5050505050905

090565b6000602052806000526040600020600091509050548

1565b6020604051908101604052806000815250905600a1656

27a7a72305820ec7d3e1dae8412ec85045a8eafc248e37ae50

6802cc008ead300df1ac81aab490029′

})

.send({

from: ‘0xbaf735f889d603f0ec6b1030c91d9033e6

0525c3′,

gas: 4700000,

gasPrice: ‘20000000000000’

},

function (error, transactionHash) {

console.log(error);

console.log(transactionHash);

})

.then(function (contract) {

console.log(contract);

});

};

Po uruchomieniu tej funkcji z naszej aplikacji node.js otrzymaliśmy następujące dane wyjściowe:

Contract {

currentProvider: [Getter/Setter],

_requestManager:

RequestManager {

provider: null,

providers:

{ WebsocketProvider: [Function: WebsocketProvider],

HttpProvider: [Function: HttpProvider],

IpcProvider: [Function: IpcProvider] },

subscriptions: {} },

givenProvider: null,

providers:

{ WebsocketProvider: [Function: WebsocketProvider],

HttpProvider: [Function: HttpProvider],

IpcProvider: [Function: IpcProvider] },

_provider: null,

setProvider: [Function],

BatchRequest: [Function: bound Batch],

extend:

{ [Function: ex]

formatters:

{ inputDefaultBlockNumberFormatter: [Function:

inputDefaultBlockNumberFormatter],

inputBlockNumberFormatter: [Function:

inputBlockNumberFormatter],

inputCallFormatter: [Function: inputCallFormatter],

inputTransactionFormatter: [Function:

inputTransactionFormatter],

inputAddressFormatter: [Function:

inputAddressFormatter],

inputPostFormatter: [Function: inputPostFormatter],

inputLogFormatter: [Function: inputLogFormatter],

inputSignFormatter: [Function: inputSignFormatter],

outputBigNumberFormatter: [Function:

outputBigNumberFormatter],

outputTransactionFormatter: [Function:

outputTransactionFormatter],

outputTransactionReceiptFormatter: [Function:

outputTransactionReceiptFormatter],

outputBlockFormatter: [Function: outputBlockFormatter],

outputLogFormatter: [Function: outputLogFormatter],

outputPostFormatter: [Function: outputPostFormatter],

outputSyncingFormatter: [Function:

outputSyncingFormatter] },

utils:

{ _fireError: [Function: _fireError],

_jsonInterfaceMethodToString: [Function:

_jsonInterfaceMethodToString],

randomHex: [Function: randomHex],

_: [Function],

BN: [Function],

isBN: [Function: isBN],

isBigNumber: [Function: isBigNumber],

isHex: [Function: isHex],

isHexStrict: [Function: isHexStrict],

sha3: [Function],

keccak256: [Function],

soliditySha3: [Function: soliditySha3],

isAddress: [Function: isAddress],

checkAddressChecksum: [Function: checkAddressChecksum],

toChecksumAddress: [Function: toChecksumAddress],

toHex: [Function: toHex],

toBN: [Function: toBN],

bytesToHex: [Function: bytesToHex],

hexToBytes: [Function: hexToBytes],

hexToNumberString: [Function: hexToNumberString],

hexToNumber: [Function: hexToNumber],

toDecimal: [Function: hexToNumber],

numberToHex: [Function: numberToHex],

fromDecimal: [Function: numberToHex],

hexToUtf8: [Function: hexToUtf8],

hexToString: [Function: hexToUtf8],

toUtf8: [Function: hexToUtf8],

utf8ToHex: [Function: utf8ToHex],

stringToHex: [Function: utf8ToHex],

fromUtf8: [Function: utf8ToHex],

hexToAscii: [Function: hexToAscii],

toAscii: [Function: hexToAscii],

asciiToHex: [Function: asciiToHex],

fromAscii: [Function: asciiToHex],

unitMap: [Object],

toWei: [Function: toWei],

fromWei: [Function: fromWei],

padLeft: [Function: leftPad],

leftPad: [Function: leftPad],

padRight: [Function: rightPad],

rightPad: [Function: rightPad],

toTwosComplement: [Function: toTwosComplement] },

Method: [Function: Method] },

clearSubscriptions: [Function],

options:

{ address: [Getter/Setter],

jsonInterface: [Getter/Setter],

data: undefined,

from: undefined,

gasPrice: undefined,

gas: undefined },

defaultAccount: [Getter/Setter],

defaultBlock: [Getter/Setter],

methods:

{ votes: [Function: bound _createTxObject],

‘0xd8bff5a5’: [Function: bound _createTxObject],

‘votes(address)’: [Function: bound _createTxObject],

getPoll: [Function: bound _createTxObject],

‘0x03c32278’: [Function: bound _createTxObject],

‘getPoll()’: [Function: bound _createTxObject],

vote: [Function: bound _createTxObject],

‘0x0121b93f’: [Function: bound _createTxObject],

‘vote(uint256)’: [Function: bound _createTxObject] },

events:

{ Voted: [Function: bound ],

‘0x4d99b957a2bc29a30ebd96a7be8e68fe50a3c701db28a91436

490b7d53870ca4′: [Function: bound ],

‘Voted(address,uint256)’: [Function: bound ],

allEvents: [Function: bound ] },

_address: ‘0x59E7161646C3436DFdF5eBE617B4A172974B481e’,

_jsonInterface:

[ { constant: true,

inputs: [Array],

name: ‘votes’,

outputs: [Array],

payable: false,

stateMutability: ‘view’,

type: ‘function’,

signature: ‘0xd8bff5a5’ },

{ constant: true,

inputs: [],

name: ‘getPoll’,

outputs: [Array],

payable: false,

stateMutability: ‘view’,

type: ‘function’,

signature: ‘0x03c32278’ },

{ anonymous: false,

inputs: [Array],

name: ‘Voted’,

type: ‘event’,

signature: ‘0x4d99b957a2bc29a30ebd96a7be8e68fe50a3c70

1db28a91436490b7d53870ca4′ },

{ constant: false,

inputs: [Array],

name: ‘vote’,

outputs: [],

payable: false,

stateMutability: ‘nonpayable’,

type: ‘function’,

signature: ‘0x0121b93f’ } ] }

Dane wyjściowe pokazują różne właściwości kontraktu, który wdrożyliśmy w naszej prywatnej sieci. Najważniejszy jest adres kontraktu, pod którym umowa jest wdrażana, czyli

0x59E7161646C3436DFdF5eBE617B4A172974B481e.

Umowę ABI i adres można wykorzystać do wywołania funkcji w umowie. W następnej sekcji zbudujemy prostą aplikację internetową, która wywoła funkcję głosowania w tej umowie, pokazując, jak można przeprowadzić ankietę z poziomu interfejsu użytkownika.

Konfigurowanie biblioteki i połączenia web3

Przede wszystkim zainstalujemy bibliotekę web3 w aplikacji node.js. Tak właśnie zrobiliśmy w poprzedniej sekcji. Ta aplikacja node.js zostanie wykorzystana do wdrożenia inteligentnej umowy.

npm zainstaluj web3@1.0.0-beta.28

Po instalacji najpierw zainicjujmy i utwórz instancję instancji web3.

var Web3 = wymagany („web3”);

var web3 = nowy Web3 (nowy Web3.providers.HttpProvider (‘ht

tp: //127.0.0.1: 8507 ‘));

Zauważ, że tym razem nasz dostawca HTTP dla instancji web3 zmienił się na lokalny punkt końcowy zamiast publicznego punktu końcowego INFURA, którego użyliśmy w poprzednim rozdziale. Jest tak, ponieważ łączymy się teraz z naszą lokalną siecią prywatną. Zauważ też, że port, którego używamy, to 8507, co podaliśmy w parametrze –rpcport, kiedy konfigurujemy pierwszy węzeł naszej prywatnej sieci. Oznacza to, że łączymy się z pierwszym węzłem sieci z naszego wystąpienia web3.

Wdrażanie inteligentnego kontraktu

W tej sekcji wdrożyliśmy inteligentny kontrakt opracowany w ostatniej sekcji w prywatnej sieci Ethereum, którą stworzyliśmy. Proces wdrażania inteligentnej umowy jest taki sam, jak w poprzedniej sekcji. Jedyna różnica polega na tym, że tym razem wdrażamy umowę w sieci prywatnej zamiast publicznej. Również w tej sekcji używamy tej samej biblioteki web3.js do programowania Ethereum za pomocą JavaScript. Zalecamy, aby czytelnik przejrzał poprzedni rozdział, jeśli jeszcze tego nie zrobił.