Web 3.0 – nowy Internet (część 1)

Przemek/ 15 czerwca, 2022

W pierwszym wpisie na tym blogu chciałbym poruszyć temat jakim jest Web 3.0. Przede wszystkim dlatego, że jest to jedna z rzeczy, która mnie najbardziej interesuje i będzie się przewijać przez różne posty, a po drugie staje się o tym coraz to głośniej. Firmy takie jak Google, Microsoft, czy chociażby Amazon nie kryją już swojego zainteresowania tym tematem i zaczynają walczyć o pozyskanie specjalistów z tej dziedziny. Skoro tacy giganci wchodzą w tę branżę, to tym bardziej warto abyś i Ty poznał nieco bardziej ten temat.

Ponieważ zagadnień związanych z Web 3.0 jest cała masa, ten post postanowiłem podzielić na dwie części. W pierwszej z nich opowiem po krótce historię powstania wersji 3.0 oraz poruszę temat przeszkód, jakie mogą się pojawić podczas jej wdrażania. Następnie opiszę czym są tokeny ERC-20 i ERC-721. Na koniec znajdziesz nieco informacji na temat DAO. W części drugiej (która ukaże się już niebawem) zostaną wspomniane takie tematy jak DeFi, uwierzytelnianie w świecie Web 3.0, sposób na zdecentralizowane przechowywanie plików. Przedstawię dane mówiące, czy ogólnie warto zainteresować się tym tematem z perspektywy finansowej oraz podsunę kilka przykładowych materiałów dla osób chcących rozpocząć swoją przygodę ze zdecentralizowanym światem. Całość ma być głównie zajawką do tematu, dlatego konkretne detale będą omawiane w osobnych wpisach.

30 lat w pigułce

Jeżeli chodzi o tzw. Web 1.0 to uznaje się, że jego początki sięgają roku 1991, a schyłek nastał około 13 lat później. Całość przedsięwzięcia można tak naprawdę nazwać pierwszą erą Internetu, a wszystko co wtedy było do znalezienia w sieci to głownie statyczne strony internetowe. Oznacza to, że nie istniały żadne interaktywne formularze ani metody logowania. Nie wykorzystywano również analityki zachowań użytkowników, co de facto miało przełożenie na bardzo małe zyski z reklam występujących na stronach www. Co prawda z czasem pojawiły się takie technologię jak JavaScript oraz Flash, ale szczerze powiedziawszy były to na początku bardzo prymitywne rozwiązania. Można śmiało stwierdzić, ze w tamtym czasie Internet był jedną wielką encyklopedią, a wszyscy użytkownicy byli jedynie konsumentami, którzy korzystali ze zgromadzonych tam treści.

Jednak wraz z rozwojem różnego rodzaju technologii webowych nastały nowe czasy, które otrzymały nazwę Web 2.0 i trwają aż do dziś. Okres ten charakteryzują kilka cech. Po pierwsze strony stały się interaktywne, dzięki czemu użytkownicy mogą wprowadzać różnego rodzaju dane, a te kolekcjonowane są przez przez właścicieli tych portali. Dzięki temu wiele firm stało się potentatami na danym rynku. Dane wykorzystywane są w różny sposób, ale jednym z głównych jest dostosowywanie reklam do konkretnej osoby. Mam nadzieję, że nie sądziłeś, że firmy takie jak Google, Facebook, Twitter, itp. dzielą się z nami swoimi produktami z potrzeby serca. Jeśli tak myślałeś, to teraz możesz być pewny, że tak nie się nie dzieje. Z tego powodu Web 2.0 możemy nazwać erą targetowanych reklam, a użytkownik, który wcześniej był konsumentem, stał się teraz produktem. Może nie byłaby to najgorsza sprawa, gdyby nie fakt, że równocześnie utraciliśmy całkowicie swoją prywatność. Jeśli ktoś twierdzi inaczej, niech zacznie rozmawiać o pomyśle zakupu nowej pralki mając przy sobie telefon, a prawdopodobnie za niedługo pojawią mu się wszędzie reklamy proponowanych produktów. Przerażające, ale niestety prawdziwe.

Tym sposobem dochodzi do całkowicie nowego podejście, a mianowicie Web 3.0. Sam termin powstał stosunkowo niedawno, także możemy powiedzieć, że jesteśmy dosłownie w trakcie tworzenia się nowego rozwiązania. W odróżnieniu do poprzednich wersji, gdzie użytkownik był konsumentem lub produktem, tutaj stajemy się właścicielem swoich danych i sami decydujemy, w jaki sposób mają być wykorzystane. Ponieważ każda akcja musi być zatwierdzona przez nas samych, to jesteśmy w stanie kontrolować przepływ wszystkich powiązanych z nami informacji. Oczywiście nic nie stoi na przeszkodzi, aby dane te służyły do lepszego dostosowywania reklam. Co więcej, może okazać się, że treści, które będą do nas trafiały będą jeszcze bardziej trafne. Największą różnicą jest jednak to, że to my zadecydujemy co i kto będzie mógł robić z tymi wszystkimi informacjami. Dodatkowo Web 3.0 po raz pierwszy w historii pozwala stać się prawdziwym właścicielem nie tylko danych, ale jakichkolwiek cyfrowych aktywów, a dzięki temu, że wszystko związane jest z adresem portfela na blockchainie, a nie jak dotychczas z adresem e-mail, umożliwia to zachowanie całkowitej prywatności.

Czy to ma sens?

Rysunek 2. Toy Story
(źródło: https://imgflip.com/memegenerator)

W tym momencie może nasuwać Ci się pytanie, że skoro Web 3.0 jest takie cudowne i istnieje szansa, że zrewolucjonizuje sposób, w jaki korzystamy z Internetu, to czy w takim razie wszystkie rozwiązania powinny korzystać z takiego podejścia. Odpowiedź jest prosta i brzmi… absolutnie nie! Rozumiem, jeśli nie spodziewałeś się takiej odpowiedzi, jednak wytłumaczenie jej jest bardzo proste. Załóżmy, że poszukujesz właśnie informacji na temat swojego ulubionego soku pomarańczowego. Czy w takim wypadku miałoby sens zaprzęganie do tego Web 3.0? Wydaje mi się, że byłoby to nie do końca sensowne, ponieważ technologia ta, oprócz wielu zalet, ma również pewnego rodzaju wady, ale o tym może opowiem kiedy indziej. Wracając do naszego soku. W tym wypadku moglibyśmy jak najbardziej skorzystać z tradycyjnych rozwiązań, ponieważ jedynie szukamy informacji. Oczywiście nie chcielibyśmy być przy tym targetowani na reklamy, ale do tego mogą posłużyć nam inne metody. W każdym razie chodzi o to, że wciąż będą istniały sytuacje, w których warto będzie skorzystać z tradycyjnych rozwiązań.

W takim razie kiedy wykorzystać potencjał drzemiący w Web 3.0? W każdym przypadku, gdy aplikacja miałaby posługiwać się naszymi danymi. Oczywiście takich sytuacji jest na pęczki, ale chyba najłatwiej wyobrazić sobie to na przykładzie cyfrowej tożsamości. Nie wchodząc w szczegóły, dzięki Web 3.0 moglibyśmy stworzyć takie rozwiązanie, które da nam pewność, że gdziekolwiek w Internecie będziemy korzystać z naszych prywatnych danych, tam nikt bez naszej zgody nie uzyska do nich dostępu. Idziemy do lekarza, który musi sprawdzić historię naszych chorób? Nie ma sprawy, to my ją mu udostępnimy, a po zakończonej wizycie zabieramy prawo wglądu. Z pewnością nie wyeliminuje to całkowicie możliwości skopiowania takich danych, ponieważ zawsze można zrobić telefonem zdjęcie ekranu, jednak daje to nam pewność, że to właśnie my kontrolujemy wszystko to, co nas dotyczy i w łatwy sposób możemy prześledzić kto dokładnie miał do czego dostęp.

Jednak mimo całego entuzjazmu, jaki towarzyszy mi, kiedy rozmyślam o nowych możliwościach, to widzę jeden potencjalny duży problem we wprowadzeniu Web 3.0. Dzisiejszy świat kontrolowany jest przez wielkie korporacje. Możesz się z tym zgadzać lub nie, ale nie zmienia to faktu, że ogromne firmy dyktują warunki na jakich żyjemy. Dla takich organizacji liczą się głównie dwie rzeczy, a mianowicie pieniądze oraz kontrola. Ponieważ Web 3.0 wywraca cały obecny świat do góry nogami, może być postrzegany przez korporację jako zagrożenie dla ich wpływów, co de facto jest słusznym spostrzeżeniem. W takim wypadku firmy te mogą robić wszystko, aby pozbyć się nowej konkurencji. Nie mam tu na myśli tylko technologicznych gigantów z Doliny Krzemowej, ponieważ rozwiązania oparte o Web 3.0 mogą dotyczyć jakiekolwiek branży. Osobiście nie sądzę, aby dało się powstrzymać tę technologię, a samo to, że wiele firm zaczyna mocno interesować się jej wdrożeniem, utwierdza mnie w przekonaniu, że temat ten zostanie z nami na dłużej. Nie mniej jednak jestem również pewny, że rozwiązania oparte o Web 3.0 czeka wiele zmagań z największymi korporacjami na świecie. Jednak zamiast przejmować się czymś, na co nie mamy wpływu, przejdźmy do tego, co Web 3.0 pozwala nam zbudować.

Tokeny ERC-20

Wielu osobom blockchain kojarzy się głównie w rynkiem kryptowalut. Nic w tym dziwnego, ponieważ to właśnie ta technologia umożliwiła jego powstanie. Nie będę tu poruszał tematu rynku samego w sobie i tego, czy inwestowanie w kryptowaluty to dobry, czy też zły pomysł. Jednak nie zmienia to faktu, że warto się przyjrzeć temu zagadnieniu z technicznego punktu widzenia.

Początkowo stworzenie nowej kryptowaluty wiązało się zawsze z utworzeniem całkowicie nowego blockchaina. Sytuacja zmieniła się wraz z powstaniem Ethereum i wprowadzeniem możliwości tworzenia smart kontraktów (ang. smart contract). Czym dokładnie one są omówię w osobnym wpisie, dlatego w tej chwili przyjmijmy po prostu, że mówimy o kodzie aplikacji, który umieszczony jest i wykonywany na blockchainie. Fakt ten umożliwił stworzenie rozwiązania, które pozwala tworzyć nam całkowicie nowe kryptowaluty i to bez konieczności posiadania osobnej sieci. Oczywiście wciąż możemy to robić, jednak nie zazwyczaj nie ma to uzasadnienia. Dodam jeszcze, że kryptowaluty, które są natywne dla danego blockchaina, czyli np. ether dla Ethereum, są nazywane monetami (ang. coin), natomiast te oparte o smart kontrakty noszą nazwę tokenów. Czym zatem dokładnie są te drugie?

Ponieważ fizyczny świat lubi tworzyć różnego rodzaju standardy, nie inaczej jest w przypadku tego zdecentralizowanego. I tak w ten sposób powstały tokeny ERC-20. Token taki jest niczym innym, jak smart kontraktem napisanym zgodnie z pewnymi wymaganiami, zwanymi interfejsem (ang. interface), które można znaleźć pod tym linkiem. Oparcie wszystkiego o jeden uzgodniony standard pozwala w łatwy sposób integrować się różnym aplikacją ze wszystkimi tokenami. Dlatego zaraz po utworzeniu nowego tokena, można go w łatwy sposób wyświetlić chociażby w portfelu Metamask.

Istotną cechą tokenów ERC-20 jest fakt, że każdy z nich jest identyczny w obrębie jednego smart kontraktu. Dla lepszego zrozumienia załóżmy, że stworzyliśmy 1000 tokenów A (jeden smart kontrakt) oraz 1000 tokenów B (drugi smart kontrakt). W takim wypadku każdy token A będzie identyczny, natomiast będzie się różnił od tokenu B. W analogiczny sposób traktujemy gotówkę. Każde 100 zł jest równe drugiemu 100 zł, ale już 100$ jest całkiem czymś innym. Na podobnej zasadzie działają również monety takie jak ether oraz bitcoin, chociaż akurat w przypadku tego drugiego można mieć pewne wątpliwości. Jeśli bardziej interesuje Cię ten temat, to zachęcam do sprawdzenia moich dwóch moich wpisów, znajdujących się tutaj: część 1, część 2. Mimo tego, że każdy token ERC-20 ma wiele ze sobą wspólnego, to możemy je podzielić na dwie kategorie, czyli tokeny utility oraz security. Nie ma tutaj znaczenia sam kod tokenu, ponieważ dwa smart kontrakty mogą być praktycznie identyczne, a jedynie sposób w jaki token jest wykorzystywany kwalifikuje go do danej grupy.

Tokeny utility (lub też bardziej po polsku użytkowe), jak sama nazwa wskazuje, to kryptowaluty, które niosą ze sobą pewnego rodzaju użyteczność. Może to być np. możliwość płacenia za dostęp do usług w danym ekosystemie, prawo głosu, czy chociażby dostęp do specjalnych funkcjonalności. Jednak token taki nie reprezentuje żadnych praw własności do danej firmy, co wiąże się z tym, że nie wymaga on zbytnio regulacji prawnych. Zazwyczaj do ich wyemitowania wykorzystuje się tzw. crowdsale, a następnie znaleźć je można na różnego rodzaju giełdach kryptowalut.

Tokeny security natomiast nie wprowadzają dodatkowych funkcji do systemu, a są raczej czymś w rodzaju akcji i tak jak one reprezentują prawo posiadania np. danej spółki. Jedynym celem zakupu takich tokenów, jest chęć pozyskania zysków i zazwyczaj dostępne są jedynie dla profesjonalnych inwestorów. Z tego też powodu nie spotkamy ich raczej na standardowych giełdach krypto. Co więcej, token te podlegają różnego rodzaju regulacją prawnym.

Na pierwszy rzut oka mówienie o tym podziale może nie mieć sensu. Tak jak wspomniałem, z technicznego punktu widzenia oba rodzaje tokenów nie muszą się różnić. Jednak warto pamiętać o tym podziale, ponieważ jeśli token stworzony przez nas zostanie zakwalifikowany jako security, pomimo że myśleliśmy, że jest inaczej, to możemy się zmierzyć z wieloma nieprzyjemnymi konsekwencjami. Z takim problemem spotkał się chociażby Binance, jednak ostatecznie wybronił się i token BNB został zakwalifikowany jako utility.

Tokeny ERC-721

NFT, czyli Non-Fungible Token (token niewymienny), jest kolejnym tematem wartym poruszenia w przypadku Web 3.0. Nie będę tutaj omawiał szaleństw, do jakich dochodziło w ostatnich miesiącach na rynku NFT, ale opowiem w dużym skrócie, czym tak naprawdę są tego rodzaju tokeny. Jednak zanim przejdę do technicznych aspektów, to wyjaśnijmy, co oznacza nazwa niewymienne.

Na świecie występują różnego rodzaju aktywna, zarówno w formie fizycznej, jak i cyfrowej. Każde z nich można zakwalifikować do jeden z dwóch kategorii, a mianowicie zamienne (ang. fungible) i niewymienne (ang. non-fungible). Fizyczne aktywa należące do pierwszej grupy to np. gotówka oraz złoto, natomiast cyfrowe, to chociażby wcześniej opisane tokeny ERC-20, ale również różnego rodzaju punkty lojalnościowe. Nazywamy je zamiennymi, ponieważ te same dobra mają dokładnie taką samą wartość. Jeżeli chcemy wymienić jedną uncję złota na zupełnie inną, to w przypadku takiej transakcji obie strony otrzymają równoważne przedmioty.

W przypadku aktywów niewymiennych sprawa wygląda nieco inaczej. Oczywiście sama nazwa nie oznacza, że nie można się nimi wymieniać, jednak wartość poszczególnych przedmiotów będzie się od siebie różniła. Jeśli chodzi o fizyczne przykłady takich aktywów, to mogą to być różnego rodzaju obrazy, ubrania, czy chociażby samochody. Ważne natomiast jest to, że taka rzecz jest unikatowa, dlatego do tej kategorii zaliczamy tak naprawdę wszystko to, co jest kolekcjonerskie. Jeżeli natomiast chodzi o cyfrowy odpowiednik takich przedmiotów to mogą to być różnego rodzaju prawa własności oraz właśnie tokeny NFT. W takim razie czym dokładnie jest ten trzyliterowy skrót.

Z technicznego punktu widzenia NFT to po prostu kawałek danych, który został zapisany na blockchainie. Najważniejsze jest jednak to, że te dane nie ulegają żadnej zmianie w czasie, co niesie za sobą bardzo ciekawą konsekwencję. Jeśli przykładowo zapisalibyśmy w takim tokenie informację, że jego posiadacz ma prawo własności do jakieś nieruchomości, wtedy łatwo byłoby udowodnić, do kogo dana posiadłość należy, ponieważ nikt nigdy nie będzie w stanie nadpisać danych umieszczonych w tokenie. Oczywiście właściciele mogą się zmieniać, a sam token przechodzić z rąk do rąk i ta informacja również będzie zapisana na blockchainie, jednak to co zostaje niezmienne w tym wypadku, to dane tej konkretnej nieruchomości. Dzięki tym charakterystyką możemy traktować NFT jako taki cyfrowy token, który reprezentuje prawa własności do unikatowych rzeczy. I to jest bardzo istotne, ponieważ wiele osób traktuje NFT jako przedmiot sam w sobie, a jest to bardzo dalekie od prawdy. Wróćmy jednak jeszcze na chwilę do aspektu technicznego.

Wcześniej powiedziałem, że NFT to dane zapisane na blockchainie. Wszystko to możemy osiągnąć, jakże by inaczej, dzięki odpowiednio napisanemu smart kontraktowi. Tak jak w przypadku tokenów ERC-20, tak i tutaj istnieje odpowiedni interfejs mówiący jak ma wyglądać taki kontrakt. Dlatego tokeny NFT możemy również nazwać tokenami ERC-721. Jeśli interesuje Cię jak dokładnie wygląda ten standard, to pełną specyfikację znajdziesz tutaj. Natomiast istnieje jeszcze jeden interfejs pozwalający na tworzenie NFT, a mianowicie ERC-1155 (dokumentacja). Poniżej wyjaśnię po krótce różnice, ale bez zagłębiania się w szczegóły implementacyjne.

W przypadku ERC-721, każdy wytworzony token jest od siebie inny. Przenosząc do do świata rzeczywistego, jeśli chcielibyśmy stworzyć kolekcjonerski zestaw bluz pt. “Web 3.0 jest the best”, to każda z nich byłaby unikatowa i różniłaby się chociażby numerem seryjnym. Do takiego ubrania moglibyśmy stworzyć tokeny ERC-721, i każdy z nich przypisany byłby do innej bluzy. Natomiast jeśli chodzi o standard ERC-1155, to pozwala ona zarówno na tworzenie unikatowych tokenów, jak i tych powtarzalnych. Na pierwszy rzut oka może wydawać się to bez sensu, jednak ma to swoje zastosowania. Powiedźmy, że grasz w grę multiplayer o tytule “Siekaj i rządź”, w której zbierasz różnego rodzaju wirtualne przedmioty. W takim świecie mogą występować całkowicie unikatowe rzeczy, takie jak Legendarny Miecz Siekacza, który występuję tylko w jednej sztuce na całą grę, jak również Buty Wieśniaka, których można znaleźć na pęczki. W takim wypadku moglibyśmy przypisać każdemu przedmiotowi z gry token NFT, jednak niektóre z nich mogłoby być identyczne, ponieważ dotyczyłyby nie różniących się od siebie rzeczy.

O samym NFT i jego zastosowaniach można by rozmawiać godzinami, dlatego w przyszłości postaram się stworzyć osobny wpis na ten temat. W tym momencie przejdźmy dalej i porozmawiajmy o kolejnym dziwnie brzmiącego trzyliterowego skrótu.

W pełni zdecentralizowana firma

Każdy prawdopodobnie wie, lub chociaż domyśla się, jak wygląda podejmowanie decyzji w standardowej firmie. Zazwyczaj jest na górze jakaś osoba (lub kilka), która ma wpływ na każdą podejmowaną akcję. Oczywiście czym większa firma tym ten proces może być nieco bardziej rozproszony. W przypadku dużych korporacji często poszczególne działy mają pewną decyzyjność w niektórych sprawach, jednak prawda jest taka, że nie są to zazwyczaj rzeczy mające ogromny wpływ na kierunek, którym podąża całe przedsiębiorstwo. Te ważniejsze decyzje podejmowane są przez radę nadzorczą, która głosuje nad proponowanymi zmianami, a następnie zleca ich wykonanie swoim podwładnym, którzy kolejno rozdysponowują obowiązki. Oczywiście jest to duże uproszczenie, jednak mniej więcej można przyjąć, że działa to w ten sposób. Podejście to natomiast ma pewne wady. Po pierwsze sama decyzja dyskutowana jest w bardzo wąskiej grupie osób, a to zazwyczaj oznacza, że nie każdy aspekt może być wzięty pod uwagę. Po drugie, co jeśli, któryś z podwładnych nie wykona zleconego zadania? Na dodatek może się okazać, że decyzje zostały przekazany w niezrozumiały sposób i efekt końcowy będzie inny niż oczekiwany. Gdyby tak tylko dało się ulepszyć ten proces. Tutaj z pomocą przychodzi nam kolejne rozwiązanie oparte o blockchain.

DAO, czyli Decentralized Autonomous Organization (Zdecentralizowana Autonomiczna Organizacja), to sposób, który umożliwia nam zdemokratyzowanie decyzji podejmowanych w danej organizacji. Sprawia również, że wszystkie przedsięwzięcia będą przejrzyste i zrozumiałe, a na dodatek pozwala zautomatyzować cały proces. Takie podejście pozwala całkowicie wyeliminować twory takie jak chociażby rada nadzorcza. Oczywiście nie w każdym wypadku takie rozwiązanie miałoby sens, jednak są sytuacje, gdzie takie podejście jak najbardziej może zadziałać. Może zastanawiasz się w tej chwili jak, skoro nikt nie kieruje cały procesem. Szkopuł właśnie w tym, że za podjęcie decyzji odpowiadają wszyscy uczestnicy danej organizacji, co w przypadku blockchaina powinienem raczej powiedzieć użytkownicy protokołu (aplikacji). Wszystko odbywa się na zasadach opartych o głosowanie i jeśli dane propozycja przejdzie, to można mieć pewność, że zostanie wdrożona.

Ponieważ również tutaj wszystko opiera się o smart kontrakty zbudowane na blockchainie, dlatego wynik głosowania jest niezmienny, co oznacza, że podjętej decyzji nie można cofnąć. Oczywiście można przegłosować kolejną zmianę, która zaneguje poprzednią, ale ponownie będzie wymagana zgoda wśród użytkowników. Dodatkowo cały proces jest całkowicie transparenty. Przekłada się to na to, że wraz z propozycją dostarczany jest kod, który w razie pomyślnego zakończenia głosowania będzie można wdrożyć. Całość oczywiście oparta jest o blockchain, dlatego każdy może sprawdzić, co dokładnie kryje się pod konkretną zmianą. Nie ma chyba sensu dodawać faktu, że wszystko działa w zdecentralizowany sposób i czepie wszystkie możliwe korzyści z tego podejścia.

Żeby lepiej zrozumieć jak taki proces może wyglądać przeanalizujmy ponownie prosty przykład gry komputerowej. Załóżmy, że istnieje w niej rycerz, którego mamy wysłać na misję. Jednak to co zabierze ze sobą na wyprawę nie zależy tylko od nas samych, ale od wielu różnych graczy. W tym momencie jedna z nich może zgłosić propozycję, która mówi, że nasz rycerz, jako główną broń, powinien posiadać miecz. Zatem osoba ta opisałaby całą koncepcję i dołączyłaby do niej kod, który automatycznie ustawi podaną broń. Następnie odbyłoby się głosowanie, w którym po czasie okazałoby się, że większość zgodziła się na zaproponowane podejście. Po rozstrzygnięciu wyboru dowolna osoba mogłaby zaaplikować zmianę, czyli innymi słowy wywołać podany wcześniej kod. W ten sposób nasz rycerz zostałby wyposażony w miecz, a jedyny sposób aby to zmienić, to przeprowadzić ponowne głosowanie.

Zdaję sobie sprawę, że przedstawiony przykład jest bardzo trywialny, jednak takie podejście da się zastosować do jakiejkolwiek decyzji podejmowanej w organizacji. Jeśli nie wierzysz, że coś takiego może działać z powodzeniem, to wystarczy, że przyjrzysz się protokołowi Compound, który w całości oparty jest o DAO. Na ich stronie znajdziesz również wszystkie poprzednie i obecne propozycje zmian.

W tym miejscu dotarłeś do końca tego wpisu. Mam nadzieję, że udało mi się chociaż trochę zasiać w Tobie ciekawość dotyczącą Web 3.0, a już niedługo pojawi się druga część, w której poruszę kolejne tematy 🙂

Share this Post
Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments