Dlaczego nie potrzebujesz blockchain?

Czyli o tym, dlaczego nie zawsze sensownym jest podążanie za nowymi trendami, bez biznesowego i technicznego uzasadnienia.

Dwa słowa o historii

Łańcuch bloków jest koncepcją, która po raz pierwszy opisana została już w 1991 roku. Wtedy dotyczyła ona przechowywania dokumentów i monitorowania ich zmieniających się w czasie stanów. Mniej więcej w tym momencie powstał również pomysł grupowania zmian w zbiory, które dzisiaj nazywamy blokami.

Pierwszym rozwiązaniem opartym o łańcuch bloków, w przypadku którego możemy mówić o „adopcji” jest Bitcoin - cyfrowa waluta, której white paper został przedstawiony w 2008 roku, a jej publiczny start miał miejsce już w 2009. Kilka lat później, bo w 2015 roku, światło dzienne ujrzała publiczna sieć Ethereum, wprowadzając możliwość budowania sieciowych umów, tzw. smart contracts.

Ethereum przyczyniło się do powstania lawiny usług (a w zasadzie pomysłów na usługi), które mogą z powodzeniem funkcjonować w ramach publicznej sieci blockchain zyskując tym samym ogromną zaletę - uniezależnienie się od centralnego podmiotu, któremu wszyscy muszą ufać. Przyczyniło się również do powstania ogromu usług, które cechuje ogromna wada - są kompletnie bez sensu.

Dlaczego? Opowiem o tym dokładniej już za moment, ale póki co dowiedzmy się, o co tak właściwie w tym wszystkim chodzi (tak z grubsza).

Krótko o tym, jak jest zbudowany łańcuch bloków

Bez obaw, celem tego dokumentu nie jest zagłębianie się w technikalia. Zanim jednak przejdziemy dalej, powinniśmy zrozumieć kilka podstawowych założeń dotyczących łańcucha bloków, które postaram się wyjaśnić na kilku prostych analogiach.

Najbardziej podstawową formę łańcucha bloków można pokazać w następujący sposób:

Na powyższym diagramie możemy zobaczyć kilka podstawowych elementów:

Zmiana - informuje o pojedynczej zmianie w sieci,

Blok - jest to zbiór kilku zmian, zapakowanych do jednego pudełka,

Strzałka - to taki sznurek, którym połączone są z sobą pudełka,

Podpis - jest pieczątką, która przybijana jest na pudełko po jego zamknięciu.

Zakładamy, że nie możemy otworzyć raz zamkniętego pudełka i niczego do niego dokładać, możemy tylko podglądać jego zawartość. Nie możemy również odwiązać z niego sznurka. Jeżeli coś miałoby się zmienić, musielibyśmy wziąć nowe pudełko i przepisać do niego zmiany, a następnie zrobić to samo z każdym pudełkiem, które zapakowaliśmy później - tak, aby można było połączyć je nowym sznurkiem.

Dodatkiem do tego wszystkiego jest jeszcze fakt, że zmiany nie muszą być wcale proste - możemy określać zasady, według których mogą być tworzone oraz w zautomatyzowany sposób je przetwarzać i generować nowe zmiany (tak z grubsza funkcjonują inteligentne kontrakty, ale na nich nie będziemy się tutaj skupiać).

Odpowiedzmy sobie na pytanie, jak samo przechowywanie danych w taki sposób powoduje zwiększenie bezpieczeństwa? Gdzie tutaj chowa się cała ta decentralizacja usług, szyfrowanie danych, zapewnienie wysokiej dostępności? Już odpowiadam: Nie powoduje zwiększenia bezpieczeństwa i nie ma tutaj żadnej decentralizacji. Ale jak to?

Można powiedzieć, że łańcuch bloków jest w swoich założeniach formą bazy danych specjalnego przeznaczenia (nie powinniśmy jej traktować, jako zamiennika dla baz SQL lub NoSQL), w której:

Jeżeli zmiana została wprowadzona i zaakceptowana, to nie może być nadpisana. Można wprowadzić zmianę aktualizującą (ale wtedy jest to nowa informacja, która powstała później),

Użytkownicy tej bazy danych mogą mieć pewność, że w historii nic się nie zmieniło i że gdyby się zmieniło, to byłoby to jasno widać (mógłbym sprawdzić, że ktoś coś majstrował przy pudełkach i sznurkach).

Tyle że, co z tego, skoro póki co w takim schemacie to tylko ja sam buduję sobie te pudełka, wkładam do nich zmiany i przywiązuję sznurki? Czy kogokolwiek innego, poza mną, obchodzi, co się z tym wszystkim stanie? Czy wykorzystanie blockchain ma na celu ochronić mnie przede mną?

Projekty sieci publicznych i prywatnych (o ile w ich skład wchodzi więcej niż jedna jednostka organizacyjna lub organizacja) dodają do tych założeń elementy kryptografii, zapewniając w ten sposób zaufanie wszystkich uczestników między sobą. Dzięki łańcuchowi bloków jest to możliwe do osiągnięcia nawet w bardzo mocno rozproszonej sieci.

Pęd za wykorzystaniem blockchain - skąd się bierze?

Nowe technologie i okazje biznesowe przyciągają inwestorów kuszonych szybkim zyskiem. Szybko rosnąca cena walut cyfrowych sprawiła, że powiązane z nimi słowo kluczowe "blockchain" gdziekolwiek się nie pojawia, wzbudza ciekawość i podziw. Czy nie podobnie było w przypadku stron internetowych na przełomie XX i XXI wieku?

Nie chciałbym być źle odebrany - istnieje wiele zastosowań, w których sieci oparte o blockchain odnajdują się idealnie i są rozwiązaniem dotychczas istniejących przeszkód. Są to wszelkiego rodzaju systemy finansowe (w tym giełdowe), systemy urzędowe (np. potwierdzenia notarialne, podpisywanie dokumentów), czy nawet proste gry (tak, internet jest dla kotów i blockchain też może być). Do takich kategorii będą również zaliczać się zamknięte systemy korporacyjne, o ile będzie w nich działać przynajmniej kilka różnych organizacji lub niezależnych oddziałów (o tym zaraz powiemy więcej).

Często możemy jednak spotkać się z sytuacjami, w których blockchain jest użyty dla samego słowa kluczowego lub jako ogólne początkowe wymaganie. Podmioty zbierają fundusze na rozwój wykorzystując słowo kluczowe "blockchain" jako wyróżnik i wskaźnik wartości, nie zawsze posiadając wiedzę i pomysł na to, w jaki sposób w rzeczywistości ten blockchain zostanie wykorzystany i czy będzie miał biznesowe uzasadnienie. Powstają wtedy techniczne potworki, komplikujące projekt pod pozorem zaawansowanej technologii.

Jakie są zalety łańcucha bloków? Do czego się nadaje?

Dobrze więc, z jednej strony mówisz, że blockchain jest dobry, z drugiej, że nie jest. To jak to w końcu wygląda? Pomówmy trochę o zaletach.

Diagram, na którym pokazałem uproszczoną strukturę łańcucha bloków, jest dosyć prostym przedstawieniem jego schematu. Tak jak wspomniałem, to dopiero utworzenie sieci komputerów, pracujących z jednym łańcuchem bloków ma sens i daje wymierne korzyści. W jaki sposób jest to wtedy realizowane?

Przede wszystkim przyjmijmy, że rozmawiamy o sieci blockchain, czyli więcej niż jednej maszynie przechowującej pełną kopię łańcucha.

Przyjmijmy również, że każdy z uczestników sieci może w ramach swojej maszyny wprowadzać do niej zmiany, które są synchronizowane z pozostałymi. Tak przygotowane pojedyncze aktualizacje są następnie zbierane w paczki i podpisywane (tworzenie bloków), a następnie sieć synchronizuje pomiędzy sobą wszystkie bloki.

Ważne jest, aby te założenia zrozumieć, zanim przejdziemy dalej.

Jakie sieć blockchain może mieć w tym scenariuszu zalety?

Każdy z uczestników sieci ma kopię łańcucha bloków, dzięki czemu w przypadku awarii nawet większości sieci, jest ona w stanie się odtworzyć, Uczestnicy sieci mogą (właściwie to nawet muszą) ustalić protokół, w którym określą, jakiego rodzaju zmiany można publikować w sieci, co pozwala im na wymianę danych i budowę systemów w taki sposób, aby się rozumiały i mogły z sobą współpracować. Co ważne, wcale nie wszyscy uczestnicy muszą w sieci publikować - niektórzy mogą tylko uzyskać dostęp do odczytu, a to w dalszym ciągu będzie wartościowe, Każdy z uczestników ma dostęp do historii, a im ich więcej, tym trudniejsza jest sytuacja, w której ta historia miałaby zostać niewłaściwie zmodyfikowana (np. w skutek ataku), Istnieje możliwość budowania systemów zależnych, rozwijających możliwości poszczególnych usług poprzez historię, która jest otwarta pomiędzy wszystkimi uczestnikami. Nie ma potrzeby definiowania oddzielnych protokołów udostępniających interfejsy programistyczne wewnątrz konkretnych usług.

Na rynku polskim i międzynarodowym znaleźć można wiele rozwiązań, które z sukcesem korzystają z tych zalet i łańcuch bloków jest dla nich prawdziwym atutem. Wymieniając tylko kilka z nich:

Powstający GPW Private Market oraz Reisemana - tokenizacja akcji i crowdfunding; NeuFund - tokenizacja udziałów w spółkach; DoxyChain - podpisywanie umów na odległość; UniSwap - giełda wymiany tokenów, całkowicie zdecentralizowana; Identity - potwierdzanie tożsamości;

Czy wszystkie projekty i sposoby wykorzystania blockchain, które nie zostały tutaj wymienione, nie powinny istnieć? Oczywiście, że nie. Wybrałem kilka najlepszych przykładów z różnych kategorii. Zastosowań blockchain może być wiele, wszystkie one powinny jednak mieć jedną ważną cechę - w swoich założeniach powinny dążyć do utworzenia sieci. Publicznej lub prywatnej (ograniczonej do wybranych podmiotów), ale składającej się z więcej niż 1 instancji.

Z jakimi wadami trzeba się mierzyć?

Sieć, sieć i jeszcze raz sieć

Łańcuch bloków do optymalnego działania (co powtarzam tutaj już do znudzenia) potrzebuje sieci i to jest jego stosunkowo duża wada.

Dla projektów poziomu korporacyjnego, które kierują się bardzo ograniczonymi zasadami współdzielenia danych z innymi, łączenie się w sieć będzie stanowiło ogromną barierę. Podejmowanie decyzji na takim szczeblu samo z siebie nie należy do procesów łatwych i szybkich - znalezienie partnerów w biznesie może być procesem czasochłonnym i wymagać silnej pozycji na rynku.

Alternatywą zawsze pozostają sieci, które ktoś już przygotował, a które umożliwiają tworzenie na swojej bazie dostosowanych do swoich potrzeb rozwiązań. Będą to sieci publiczne obsługujące działanie inteligentnych umów, czyli np. Ethereum, czy dobrze się zapowiadający Polkadot. Sieci te wspierane są przez swoje społeczności i utrzymywane są przez tysiące węzłów, za którymi stoi ogromna moc obliczeniowa.

Nie jest dobrym pomysłem wykorzystywanie blockchain w sytuacji, w której nie planujemy budowania całej sieci.

Ustalanie konsensusu

W blockchain, zanim dojdzie do zaakceptowania nowej porcji danych (tzn. do utworzenia bloku), sieć musi w jakiś sposób dojść do wspólnego zdania określającego, które operacje są poprawne, a które nie (bo np. nie zostały zbudowane zgodnie z obowiązującym protokołem).

Operacja ustalania konsensusu może być szybka w przypadku sieci o ograniczonej wielkości i trochę dłuższa w przypadku tych większych. Nie musi być w żadnym wypadku zasobożerna (istnieją już inne rozwiązania, niż zastosowany w Bitcoin Proof of Work). Nigdy jednak nie będzie tak, że operacja jest zapisywana w sieci natychmiast i systemy muszą być zbudowane w taki sposób, aby tę sytuację obsłużyć.

Systemy pracujące z łańcuchem bloków muszą więc być przygotowane na asynchroniczne przetwarzanie operacji, co z kolei może okazać się korzystne architektonicznie.

Potrzeba przestrzeni dyskowej

Ideą łańcucha bloków jest, aby jak najwięcej uczestników sieci przechowywało jego kopię. Jak już ustaliliśmy, jest to korzystne z punktu widzenia bezpieczeństwa i decentralizacji, wymaga jednak często dużej przestrzeni dyskowej.

Rozwiązań tego problemu jest kilka i mogą one opierać się o dobranie odpowiedniego zestawu danych, które rzeczywiście w łańcuchu będą przechowywane. Być może nie trzeba przechowywać w nim pełnej kopii danych, a jedynie podstawowe metadane?

Tak czy inaczej, problem przestrzeni dyskowej istnieje i nie da się go w pełni wyeliminować, jednak jest to cena, którą płaci się za zalety łańcucha bloków.

„Cyfrowe złoto”

Istnieje wiele cyfrowych walut działających w blockchain, a posiadających swoje dedykowane łańcuchy. Część z nich to rozwiązania autorskie (Bitcoin, Ethereum, Stellar i inne), a niektóre z nich to klony, które wprowadzają mniejsze lub większe usprawnienia i zmiany (Litecoin, Bitcoin Cash, Bitcoin Gold i inne). Kod źródłowy większości walut cyfrowych jest dostępny i może być dowolnie wykorzystywany i modyfikowany.

Nie oszukujmy się jednak - jeżeli celem działalności firmy jest wytworzenie nowej waluty na podstawie istniejącej (coś jak "bitcoin, tylko szybszy"), to nie jest to już odpowiedni czas i miejsce. Rok 2018 jest doskonałym przykładem tego, dlaczego warto uważać, kiedy ktoś Cię do tego namawia.

Waluty cyfrowe ewoluowały już znacznie od czasu powstania Bitcoin, proste klony walut nie sprawdzą się na rynku, dopóki nie stoi za nimi coś więcej (np. dopóki nie są formą tokenizacji udziałów w organizacji, ale do tego wystarczające są tokeny działające w ramach jednej z sieci publicznych).

Fakty i mity na temat blockchain

Blockchain służy do szyfrowania danych - MIT

Zwykle w sieciach blockchain wykorzystywane są elementy kryptografii, dzięki którym możliwe jest potwierdzenie tożsamości uczestników, sam blockchain nie służy jednak do szyfrowania danych. Nie można "zaszyfrować czegoś blockchainem".

Informacji w blockchain publicznym nie można edytować - FAKT

Sieci blockchain skonstruowane są w sposób, który umożliwia zmianę informacji przez zdarzenia, nie wprowadza się możliwości bezpośredniej edycji danych historycznych. Działa to szczególnie w sieciach publicznych, w których zmiana jakiejkolwiek danej w przeszłości powodowałaby rozgałęzienie całej struktury łańcucha bloków. Można próbować, ale zmodyfikowana wersja nie przetrwa w sieci.

Blockchain jest wolny i wymaga długiego przetwarzania operacji - MIT

To zależy od rodzaju łańcucha bloków, a w szczególności od sposobu ustalania konsensusu w sieci. Ciężko tutaj o generalne stwierdzenie.

Sieć blockchain jest bezpiecznym środkiem przechowywania informacji

To twierdzenie jest prawdziwe, jeżeli bierzemy pod uwagę rzeczywiście sieć blockchain, posiadająca przynajmniej kilka węzłów.

Blockchain jest idealny do każdego zastosowania - MIT

Cały ten artykuł miał na celu to przybliżyć.

Bitcoin będzie tylko drożeć?? Kto to wie :)

Podsumowanie

To potrzebujesz tego blockchain, czy nie?

Celem tego rozważania nie jest obrzucanie błotem łańcucha bloków. Blockchain to z pewnością technologia, która będzie się rozwijać i na bazie której będą powstawać usługi znacznie wpływające na świat, jaki znamy.

Nie popadajmy jednak w skrajność. Absurdem jest budowanie usług, w których jedynym zastosowaniem blockchain jest... pozyskanie finansowania w postaci dotacji, czy inwestycji, bo takie słowo klucz akurat pojawiło się w wymaganiach. Równie wielkim absurdem jest wykorzystywanie go tylko w celu uczynienia zadość przepisom prawa, bez idących za tym podstaw biznesowych i rzeczywistego zabezpieczenia przechowywanych danych - a więc bez zbudowania choćby małej, ale sensownej sieci.

Jest wiele organizacji, które opierają podstawę swojego funkcjonowania o łańcuch bloków, mając techniczne uzasadnienie, są biznesowo zweryfikowane i posiadają społeczność lub stanowią konsorcjum firm. Zanim jednak wprowadzisz do swojego projektu blockchain idąc za falą, znajdź argumenty, dlaczego akurat w Twojej usłudze łańcuch bloków będzie miał sens. W przeciwnym wypadku może warto skorzystać z innych, dostępnych na rynku rozwiązań?

Jeśli chciałbyś dowiedzieć się, jak w Twoim przypadku można wykorzystać blockchain i czy będzie miał on sens, zapraszamy do konsultacji. W odpowiedzi na to pytanie z pewnością pomoże również CTO z Twojej firmy (ale hej, czy na prawdę go potrzebujesz?).

Przewodnik blockchain development – języki programowania i sieci

Blockchain to technologia, o której dużo się teraz mówi, ale wchodząc w nią głębiej, szybko odkryjemy, że nie wystarczy po prostu “robić blockchain”. Istnieje tu bowiem mnóstwo ekosystemów, rodzajów tech stacków i języków programowania, które przydają się na konkretnych sieciach. Jeśli zastanawiacie się, jak wejść w ten świat, przybliżamy.

Choć blockchainy coraz częściej komunikują się ze sobą, technicznie to osobne wyspy, na których panują inne zasady i które programuje się innymi językami. Są więc takie, które mają niższy próg wejścia dla programisty, jak i te stworzone z użyciem nowych języków, które miały służyć konkretnym potrzebom, ale wymagają też co najmniej paru miesięcy nauki.

Blockchain to dla programistów nowe, ciekawe wyzwania, które nie są trywialne do zrozumienia, ale mając trochę czasu i chęci, spokojnie można zacząć pisać własny kod. Praca z blockchainem to też nie zawsze smart kontrakty, a częściej tworzenie aplikacji, które korzystają z API konkretnych łańcuchów i kryptowalut.

Jeśli czujesz, że w tematach, którymi zajmujesz się na co dzień, nie uczysz się już tak dużo, jak kiedyś, blockchain jest na pewno dobrym wyborem, żeby dalej się rozwijać. Liczba programistów blockchainowych stale przybywa, ale nadal jest to bardzo niszowa specjalizacja. W 2021 roku na całym świecie było około 26 milionów programistów. Blockchainem zajmuje się aktualnie zaledwie 18 tysięcy z nich – tyle osób każdego miesiąca jest aktywnych w repozytoriach projektów blockchainowych – a więc sporo poniżej 1 proc.

Spójrzmy więc na sieci, które są obecnie najpopularniejsze wśród developerów i języki, których wymagają.

Jakich języków używa się w blockchainach?

Źródło: Electric Capital

Ethereum – Solidity

ok. 4000 programistów

Ojcem kryptowalut jest Bitcoin, ale matką wszystkich zdecentralizowanych aplikacji jest raczej stworzone w 2015 roku Ethereum. To Ethereum jest najpopularniejszą platformą do smart contractów, DeFi i większości zastosowań blockchainu.

5 lat w technologii to sporo i Ethereum słabo zniosło próbę czasu pod względem skalowalności samej technologii, a koszty transakcji sprawiają, że używanie ETH ma sens tylko przy większych kwotach. Twórcy pracują nad wdrożeniem nowych mechanizmów, które mają je znacznie usprawnić, choć termin tzw. Merge, po którym Ethereum przejdzie z konsensusu PoW na PoS (Proof of Stake) wciąż się opóźnia. Ethereum jest jednak ogromnie popularne wśród twórców aplikacji i programistów, ma dużą społeczność, jest mocno zdecentralizowane, dzięki czemu bezpieczne, a dostęp do materiałów do nauki jest naprawdę spory.

Ethereum programuje się z wykorzystaniem Solidity, czyli języka stworzonego specjalnie do obsługi EVM (Ethereum Virtual Machine). Solidity bywa całkiem słusznie krytykowane za poziom skomplikowania przy audytach. Nie jest trudno się go nauczyć, ale z uwagi na kompletność Turinga, ciężko dotrzeć do wszystkich potencjalnych i oczywistych błędów.

Solidity będzie dość znajome dla obecnych web developerów, ale z uwagi na wspomniane problemy, trzeba być naprawdę doświadczonym programistą, żeby działać na odpowiednio wysokim poziomie. Wiele osób, które twierdzą, że znają Solidity, niestety sobie z nim nie radzi, a w świecie crypto kwestie związane z bezpieczeństwem są ogromnie ważne, ponieważ działamy na aktywach, które mają swoją–często niemałą wartość finansową.

Oferty pracy z

Polygon – Solidity

ok. 350 programistów

Polygon to tzw. layer 2 w kontekście Ethereum. Cały koncept L2 polega na tym, by korzystać z głównej sieci (L1, w tym przypadku Ethereum) tylko w razie konieczności. Polygon jest znacznie szybszy od Ethereum i ma znacznie tańsze transakcje. Jednocześnie korzysta z EVM i “wpina się” w Ethereum, korzystając z jego zdecentralizowania. Polygon korzysta też z zupełnie innego protokołu konsensusu – nie trzeba go “kopać”, jak w Bitcoinie i Ethereum z Proof of Work, a zamiast tego sieć operuje na Proof of Stake (PoS), który jest utrzymywany przez walidatorów i osoby, które wykonują tzw. staking – przekazują swoje tokeny walidatorom. W systemach PoS tworzenie nowych bloków zależne jest od ilości tokenów kontrolowanych przez walidatorów, a nie mocy obliczeniowej/energii jak w PoW.

Polygona można więc wykorzystać do tworzenia dokładnie tych samych aplikacji, co Ethereum, ale skorzystamy z bardziej nowoczesnego zaplecza. Podam przykład–na Ethereum, wykonanie 100 płatności po $100 kosztowałoby $3000. To 30% samych kosztów transakcji, które traci na znaczeniu, dopiero kiedy operujemy na dużych kwotach. Tę samą transakcję możemy przeprowadzić, konwertując całą kwotę z ETH na token Polygona, MATIC, wykonać wszystkie 100 operacji na Polygonie, a następnie wrócić do ETH. W ten sposób zapłacimy zwykłe transaction fee tylko za wykonanie smart kontraktu konwertującego ETH na MATIC i znowu na ETH, czyli 2x około $30 (zależy od ruchu na sieci). Koszty na MATIC to $0.01 za transakcję. Widzicie różnicę?

Za popularność Polygona odpowiada też dostępność technologii dla programistów Solidity. W końcu oba blockchainy korzystają z tego samego języka i są kompatybilne z EVM.

Algorand – TEAL, Python

ok. 200 programistów

Algorand powstał w odpowiedzi na wszystkie wspomniane problemy Ethereum. Ma znacznie większą przepustowość, ok. 1000 transakcji na sekundę (TPS) kontra ok. 15 TPS na Ethereum; koszty wykonania operacji są znikome, kosztują 0.001 ALGO, czyli obecnie około $0.0007.

Algorand zasłynął z unikalnej architektury stworzonej przez Silvio Micaliego z MIT – jednego z ojców nowoczesnej kryptografii, który zdobył prestiżową nagrodę Turinga. Wspomnieliśmy już czym są systemy PoS, ale Algorand korzysta z wariacji zwanej Pure Proof of Stake. Cała różnica polega na tym, że w PoS, jeśli walidatorzy są stali i nie jest ich wystarczająco dużo, pojawia się zagrożenie współpracy czy przekupienia większości walidatorów w celu weryfikowania niepoprawnych transakcji (51% attack). W ten sposób można by np. dodać do bloku transakcję, która wyczyści Twoje konto, zanim prawidłowa operacja zostanie wykonana lub sprawić, że transakcja zostanie wykonana podwójnie (Double Spend Attack). Algorand jest zabezpieczony przed takimi atakami poprzez–wbudowane w konsensus–niejawne i losowe wybieranie walidatorów, którzy wezmą udział w tworzeniu nowego bloku.

Algorand rozwiązał też problem Solidity, wprowadzając język TEAL, który obsługuje Algorand Virtual Machine (AVM), alternatywę EVM. TEAL nie jest zupełny w sensie Turinga i jest przez to łatwo audytowalny. Programista może łatwo prześledzić kod i zrozumieć jego wynik.

TEAL jest językiem niskopoziomowym podobnym do asemblera. Dzięki temu kod wykonywany na Algorandzie jest bardzo szybki, ale próg wejścia może być wysoki. Na szczęście istnieje też biblioteka PyTEAL, która pozwala obsługiwać AVM za pomocą Pythona – a tego nikomu przedstawiać nie trzeba