Jak stworzyć prosty smart kontrat do obsługi aukcji ?

Paulina Lewandowska

07 gru 2022
Jak stworzyć prosty smart kontrat do obsługi aukcji ?

W poprzednim tutorialu dowiedziałeś się, jak stworzyć smart contract, który jest walletem. W tym tutorialu postaramy się utrwalić wiedzę z poprzedniego poradnika oraz poszerzyć ją o nową. 

Przejdźmy więc do dalej. Wszystkie rzeczy, których możesz nie rozumieć wyjaśnimy Ci w dalszej części tekstu.

Zdefiniowanie zmiennych 

Zacznijmy od zdefiniowania zmiennych, które będą nam potrzebne do funkcjonowania smart kontraktu. Na pewno potrzebujemy :

  • adres osoby do której zostanie przesłana najwyższa oferta,
  • czas, kiedy dana aukcja się zakończy,
  • adres osoby, która wystawiła najwyższą ofertę,
  • ile wei to najwyższa oferta,
  • tablicę adresów i ilość pieniędzy jaką przelali do smart kontraktu, aby osoby, które nie wygrały aukcji, mogły wypłacić swoje pieniądze,
  • zmienną czy aukcja jest zakończona lub nie.
pragma solidity 0.8.11;

contract Auction {

    address payable public beneficiary;

    uint public auctionEndTime;

    address public highestBidder;

    uint public highestBid;

    mapping(address => uint) pendingReturns;

    bool ended;

}

Czego możesz nie zrozumieć z powyższego kodu?

Mapping w solidity to tablica klucz-wartość, odpowiednik dictionary w innych językach.

Jeśli nie wiesz czemu zmienna auctionEndTime jest podana w zwykłym uintcie, to jest to z tego powodu, że czas kiedy aukcja się zakończy będzie podany w czasie unixowym.

Stwórzmy sobie constructor, który będzie przyjmował adres do którego zostanie przesłana najwyższa oferta oraz ile czasu będzie trwała aukcja.

constructor(

        uint biddingTime,

        address payable beneficiaryAddress

    ) {

        beneficiary = beneficiaryAddress;

        auctionEndTime = block.timestamp + biddingTime;

    }

Na co warto zwrócić uwagę ?

  • block.timestamp to zmienna, która oznacza po prostu jaki jest teraz czas podany oczywiście jako czas unixowy.

Funkcja do składania ofert

Teraz stwórzmy sobie funkcję, która będzie służyła do składania swojej oferty. Funkcja ma zwracać błąd jeśli :

  • aukcja się zakończyła,
  • nasza oferta będzie niższa niż najwyższa oferta.

Na zakończenie wykonywania funkcji, funkcja wyemituje event, mówiący o tym że najwyższa oferta się zmienia. Aplikacja frontendowa może nasłuchiwać emitowanych eventów na smart contracie, dzięki czemu, gdy tylko najwyższa oferta się zmieni, może ona ją zaktualizować w interfejsie użytkownika.

event HighestBidIncreased(address bidder, uint amount);

    event AuctionEnded(address winner, uint amount);

    error AuctionAlreadyEnded();

    error BidNotHighEnough(uint highestBid);

    error AuctionNotYetEnded();

    error AuctionEndAlreadyCalled();

    function bid() external payable {

        if (block.timestamp > auctionEndTime)

            revert AuctionAlreadyEnded();

        if (msg.value <= highestBid)

            revert BidNotHighEnough(highestBid);

        if (highestBid != 0) {

            pendingReturns[highestBidder] += highestBid;

        }

        highestBidder = msg.sender;

        highestBid = msg.value;

        emit HighestBidIncreased(msg.sender, msg.value);

    }

Jak widzisz w powyższym kodzie definiowane są eventy z parametrami, które możemy wyemitować na blockchainie. Aby wyemitować event w solidity wpisujemy 

emit  + nazwa eventu i parametry

Zdefiniowaliśmy sobie swoje własne errory, które jeśli chcemy wywołać wpisujemy

revert + nazwa naszego erroru i parametry.

Zapewne domyśliłeś się już, że zamiast ifów i custom errorów mogliśmy użyć requiera.

Ta funkcja sprawdza czy aukcja się już nie zakończyła, czy msg.value jest wyższy niż najwyższa oferta, jeśli tak aktualizujemy mapping pendingReturns, żeby osoba, która złożyła wcześniej najwyższą ofertę mogła dostać z powrotem swoje pieniądze. Przypisujemy najwyższą ofertę do msg.value oraz highestBidder do msg.sender, na końcu wykonywania funkcji emitujemy event, który informuje, że najwyższa oferta została zwiększona.

Funkcja do zakończenia aukcji, oraz przelania najwyższej oferty do beneficiera

Teraz stwórzmy funkcję dzięki, której po zakończonej aukcji adres beneficiary, będzie mógł przesłać do swojego portfela pieniądze.

Ta funkcja powinna:

  • zwracać błąd jeśli aukcja się jeszcze nie skończyła,
  • zwracać błąd jeśli ta funkcja została już wywołana,
  • zmieniać zmienna ended na true,
  • wyemitować event świadczący o tym, że aukcja się zakończyła,
  • przesłać ilość Ethereum równoważną do najwyższej oferty do beneficiera.

  

function auctionEnd() external {

        if (block.timestamp < auctionEndTime)

            revert AuctionNotYetEnded();

        if (ended)

            revert AuctionEndAlreadyCalled();

        ended = true;

        emit AuctionEnded(highestBidder, highestBid);

        beneficiary.transfer(highestBid);

    }

Funkcja dla osób, które nie wygrały aukcji i chcą odzyskać swoje pieniądze

Teraz, ostatnia funkcja, której potrzebujemy, aby nasz kontrakt był gotowy! Będzie ona dla adresów, które nie wygrały aukcji, a chcą odzyskać swoje pieniądze. Zastanówmy się co powinna mieć w sobie taka funkcja :

  • powinna sprawdzać ile należy ci się ethereum w mappingu pendingReturns oraz przypisać tą wartość do zmiennej,
  • powinna zmienić ile ci się należy na 0,
  • powinna przesłać tyle Ethereum ile zapisaliśmy w zmiennej.

No to do dzieła !

  function withdraw() external{

        uint amount = pendingReturns[msg.sender];

        pendingReturns[msg.sender] = 0;

        payable(msg.sender).transfer(amount);

    }

To już koniec dzisiejszego tutorialu ! Nasz smart contract jest gotowy. W celu poćwiczenia oraz utrwalenia sobie wiedzy, jako zadanie możesz spróbować zamienić custom errory na requiry. Jeśli to jednak dla ciebie za mało możesz również ulepszyć ten kontrakt, aby dało się w nim prowadzić kilka aukcji na raz.

Tagi

Most viewed


Never miss a story

Stay updated about Nextrope news as it happens.

You are subscribed

Ekonomia Ethereum – Analiza

Kajetan Olas

05 mar 2024
Ekonomia Ethereum – Analiza

Ekonomia Ethereum obejmuje mechanizmy ekonomiczne kierujące zachowaniem uczestników blockchainu. Dotyka ona kwestii kwestii dotyczących m.in. jej waluty (Ether), po rolę sieci w ułatwieniu funkcjonowania smart contractów i zdecentralizowanych aplikacji.

Zrozumienie Ekonomii Ethereum

Ekonomia Ethereum została zaprojektowana, aby zrównoważyć skalowalność, bezpieczeństwo i decentralizację, często określane jako trylemat blockchainu. Natywna kryptowaluta sieci, ETH, jest czymś więcej niż środek wymiany. Jest ona także kluczowym komponentem protokołu konsensusu Ethereum - Proof of Stake.  Ekonomia Ethereum obejmuje również podejście platformy do opłat transakcyjnych (opłat za gaz), politykę monetarną i mechanizmy wpuszczania nowego ETH do systemu. Razem, te czynniki wpływają na wartość płynącą z używania sieci.

Dynamika Popytu i Podaży

Dynamika popytu i podaży w ramach ekonomii Ethereum jest kluczowa dla zrozumienia wartości rynkowej sieci oraz incentyw do uczestnictwa w sieci.

Strona Podażowa

  • Emisja ETH: Całkowita podaż ETH zależy od tempa emisji sieci, które ewoluowało z czasem. W przeciwieństwie do Bitcoina, Ethereum nie ma ustalonej maksymalnej podaży ETH, ale różne ulepszenia (szczególnie London Hard Fork i EIP-1559) wprowadziły mechanizmy mające na celu umiarkowanie wzrostu podaży.
  • Ethereum 2.0 i Staking: Przejście na Ethereum 2.0 wprowadza staking, gdzie walidatorzy blokują swoje ETH jako depozyt zabezpieczający, aby uczestniczyć w konsensusie sieci. Ta zmiana z Proof of Work na Proof of Stake nie tylko zmienia model bezpieczeństwa, ale także zmniejsza podaż ETH w cyrkulacji.

Strona Popytowa

  • Smart Contracty i dApps: Użyteczność Ethereum jako platformy do wdrażania smart contractów i zdecentralizowanych aplikacji tworzy podstawowy popyt na ETH. Jest on wymagany do płacenia za opłaty transakcyjne i usługi obliczeniowe.
  • Zdecentralizowane Finanse (DeFi) i NFT: Eksplozywny wzrost DeFi i rynku NFT na blockchainie Ethereum znacząco zwiększył popyt na ETH. Te aplikacje często wymagają ETH jako collateral (zabezpieczenie), a czasami jest on środkiem wymiany w ich ekosystemach.

Wzajemne oddziaływanie podaży i popytu jest urozmaicane przez ulepszenia sieci, zmiany w opłatach transakcyjnych oraz ogólną adopcję aplikacji opartych na Ethereum. W miarę upływu czasu, szczególnie przy pełnej implementacji Ethereum 2.0, te dynamiki będą kształtować się inaczej. Zaprezentują one nowe możliwości dla użytkowników, inwestorów i deweloperów.

Polityka Monetarna Ethereum

Polityka monetarna Ethereum jest kluczowym aspektem jego modelu ekonomicznego. Skupia się na zarządzaniu podażą Etheru w celu zapewnienia bezpieczeństwa sieci i zachęcenia do zrównoważonego uczestnictwa. W przeciwieństwie do tradycyjnych systemów monetarnych lub nawet innych kryptowalut z ustalonym limitem podaży, Ethereum przyjmuje bardziej adaptacyjne podejście.

Opłaty Transakcyjne

EIP-1559, wdrożony jako część Londyńskiego Hard Forka w 2021 roku, znacząco zmienił politykę monetarną Ethereum. Wprowadził nowe mechanizmy dotyczące ustalania opłat transakcyjnych. Podzielił je na 2 komponenty: Base Fee i Priority Fee.

Base Fee (Opłata Bazowa)

Base Fee jest dynamicznie ustalane na podstawie przeciążenia sieci i jest spalana (burning). Jej wysokość opiera się na dwóch czynnikach: jak bardzo sieć jest przeciążonai jak długo była w takim stanie. Oznacza to, że Base Fee będzie rosło, dopóki aktywność w sieci nie wróci do docelowego średniego poziomu. Ponieważ Base Fee jest spalane, oznacza to również, że ETH ma tendencję deflacyjną, gdy aktywność w sieci jest wysoka.

Priority Fee (Opłata Priorytetowa)

Priority Fee to dodatkowa opłata, która służy jako napiwek dla validatorów (osób weryfikujących transakcje). Jest ustalana przez użytkownika, aby zachęcić validatorów do przetworzenia jego transakcji. Wyższa opłata oznacza, że transakcja zostanie zweryfikowana przed innymi transakcjami. Priority Fee powinno być wyższe niż 0, ponieważ validatorzy muszą mieć jakąś zachętę do włączenia transakcji do bloku.

Opłaty transakcyjne na przestrzeni czasu, dostęp na 05.03.2024, https://bitinfocharts.com/comparison/ethereum-transactionfees.html#3y

Staking i Ethereum 2.0

Przejście na Ethereum 2.0 i związany z nim Proof of Stake, wprowadza nagrody za staking jako nowy sposób emisji ETH. Validatorzy lokują minimum 32 ETH, aby uczestniczyć w protokole konsensusu i przyczynić się do bezpieczeństwa sieci.. Wysoka bariera wejścia przyczynia się do faktu, że tylko 26% całkowitej podaży ETH jest stakowane. Jest to niższa wartość niż w niektórych innych blockchainach, np. Cardano (64% stakowane).

dostęp na 05.03.2024, https://www.coinbase.com/earn/staking/ethereum

Kary

Ethereum zapewnia, że validatorzy działają w najlepszym interesie sieci, wprowadzając zestaw kar za niepożądane zachowania.

Slashing

Slashing to kara za naruszenie zasad protokołu i angażowanie się w nieuczciwe zachowania. Część ETH validatora jest zabierana, jeśli próbuje on

  • zaproponować dwa różne bloki
  • Zaświadczyć o kilku sprzecznych wersjach blockchainu (zaświadczanie oznacza głosowanie jak zdaniem validatora wygląda w danej chwili stan blockchainu).

Kary za Nieaktywność

Jeśli weryfikator jest nieaktywny i nie uczestniczy np. w zaświadczaniu bloków, stopniowo traci stakowane ETH. Zapewnia to, że stakerzy aktywnie uczestniczą w zabezpieczaniu sieci. Zapobiega to sytuacji, gdy pewna liczba weryfikatorów regularnie ignoruje swoje obowiązki i przyczynia się do destabilizacji sieci.

Podsumowanie

Przyjrzenie się ekonomii Ethereum powoduje podziw dla jej złożoności. Robi wrażenie, jak precyzyjni w swojej pracy musieli być deweloperzy Ethereum. Znaleźli parametry, które bardzo dobrze zrównoważyły jego ekosystem (np. to jak zdecydowali, że staking dokładnie 32ETH jest lepszy niż 28ETH). Oprócz parametrów ilościowych interesująca jest również logika stojąca za strukturą opłat, karami, itp. To wszystko sprawia, że ekonomia Ethereum jest doskonałym studium przypadku dla inżynierów tokenów i deweloperów Web3.

FAQ

Jaką rolę odgrywa Ether (ETH) w ekonomii Ethereum? 

  • ETH jest nie tylko środkiem wymiany - służy również do zapewnienia bezpieczeństwa sieci. W modelu PoS to, co powstrzymuje validatorów przed nieuczciwymi zachowaniami, to fakt, że mogą stracić stakowane ETH.

Jakie zmiany wprowadziło EIP-1559 do opłat transakcyjnych na Ethereum? 

  • EIP-1559 wprowadziło dwuczłonową strukturę opłat z opłatą bazową i opłatą priorytetową. Opłata bazowa jest spalana, co przyczynia się do potencjalnie deflacyjnego charakteru Ethereum przy wysokiej aktywności. Natomiast opłata priorytetowa motywuje validatorów do uwzględnienia transakcji w bloku.

Jaka jest strategia Ethereum w zakresie skalowania i rozwiązywania problemów z przeciążeniem sieci? 

  • Strategia Ethereum polega na wykorzystaniu rozwiązań Layer-2, z blockainem Ethereum służącym jako bezpieczna warstwa rozliczeniowa.

Aleph Zero Bridges: Czym jest MOST i Jak on Działa?

Karolina

05 mar 2024
Aleph Zero Bridges: Czym jest MOST i Jak on Działa?

Znaczenie interoperacyjności w różnych ekosystemach jest ogromne. Jest wiele protokołów, zdolność do transferu aktywów i informacji między różnymi blockchainami jest więc niezbędna. Jak do tego podchodzi Aleph Zero i czym jest MOST?

Geneza MOSTu: Most do Ethereum

Wizja interoperacyjności Aleph Zero

W sercu strategii Aleph Zero mającej na celu stworzenie bardziej połączonego świata blockchain znajduje się MOST, awangardowy most zaprojektowany w celu bezproblemowego połączenia Aleph Zero z ekosystemem Ethereum. MOST stanowi krytyczny krok naprzód w zobowiązaniu Aleph Zero do budowy solidnej, niezależnej i wszechstronnej platformy. Odzwierciedla wizję ekosystemu blockchain, który jest nie tylko samowystarczalny, ale także w pełni zintegrowany z szerszym krajobrazem cyfrowych aktywów.

Rola MOST w zwiększaniu interoperacyjności Aleph Zero z Ethereum

MOST to strategiczny zasób, który zwiększa interoperacyjność Aleph Zero z Ethereum. Umożliwiając bezpośrednią ścieżkę dla transferu aktywów między Aleph Zero a Ethereum, MOST umożliwia zarówno deweloperom, jak i użytkownikom wykorzystanie mocnych stron obu platform. Ta synergia zwiększa potencjał zdecentralizowanych aplikacji (dApps) i projektów finansów zdecentralizowanych (DeFi), pozwalając im korzystać z połączonych zalet skalowalności Aleph Zero i żywego ekosystemu Ethereum.

READ: "What is Aleph Zero?"

Architektura i funkjonalności MOST

Przegląd projektu MOST

Architektura MOST opiera się na projekcie opartym na strażnikach, priorytetowo traktującym bezpieczeństwo i prostotę w transferze aktywów. Ten model projektowy zapewnia, że most działa z najwyższą integralnością i niezawodnością. Strażnicy, wybierani poprzez skrupulatny proces, odgrywają kluczową rolę w utrzymaniu operacyjnej doskonałości mostu. Każdy strażnik nadzoruje dwie instancje konfiguracji - jedną dla Testnetu i jedną dla Mainnetu - zapewniając tym samym solidną strukturę testowania i wdrożeń, która zabezpiecza przed podatnościami.

zParachain bridge
zParachain bridge, Source

"Strażnicy MOST"

Strażnicy MOST nie są tylko opiekunami infrastruktury technicznej mostu; są oni kluczowymi elementami jego modelu zarządzania. Posiadając kontrolę nad kluczami zarządzania zarówno Aleph Zero, jak i Ethereum, strażnicy posiadają autorytet do wprowadzania zmian w składzie komitetu, przeprowadzania aktualizacji kontraktów i podejmowania innych istotnych funkcji zarządzania. Ta konfiguracja portfela wielokrotnego podpisu zapewnia zdecentralizowany mechanizm kontroli, istotny dla utrzymania bezpieczeństwa i integralności mostu.

Główne cechy: Obniżone opłaty, Zachęcanie do płynności i Skupienie na bezpieczeństwie

MOST został zaprojektowany z uwzględnieniem kilku kluczowych cech mających na celu optymalizację doświadczenia użytkownika i wzrost ekosystemu. Jedną z jego wyróżniających się cech jest znaczne obniżenie opłat za mostowanie aktywów, takich jak ETH, stablecoiny i tokeny z Ethereum do Aleph Zero. Struktura opłat jest strategicznie zaprojektowana w celu przyciągnięcia płynności do ekosystemu Aleph Zero, poprawiając jego żywotność i użyteczność.

Techniczny fundament Aleph Zero Bridges

Bezpieczeństwo i prostota

Projekt MOST koncentruje się na bezpieczeństwie, prostocie i łatwości użytkowania. Wykorzystuje model oparty na strażnikach dla zapewnienia bezpieczeństwa i oferuje prosty interfejs dla użytkowników. Prace rozwojowe były otwarte i skrupulatne, a projekt ma zamiar udostępnić swoje źródło publicznie, zgodnie z zasadami open-source i zapewniając transparentność.

Zarządzanie i kontrola

Zarządzanie w MOST wykorzystuje portfel multisig, pozwalając strażnikom zarządzać operacjami demokratycznie. Ta konfiguracja zapewnia zdecentralizowaną kontrolę, z mechanizmami do aktualizacji kontraktów i zmian w komitecie, zwiększając bezpieczeństwo i elastyczność.

Tutaj możesz śledzić nadchodzące aktualizacje dotyczące Aleph Zero bridges: BLOG

Wpływ na ekosystem

DeFi na Aleph Zero

MOST ułatwia napływ płynności i stablecoinów do Aleph Zero, znacząco zwiększając jego sektor DeFi. Ten most do Ethereum sprzyja innowacji, zaangażowaniu użytkowników i wzrostowi ekosystemu.

MOST i więcej

Integracja z Router Protocol

Partnerstwo Aleph Zero z Router Protocol rozszerza jego łączność z różnymi blockchainami. Współpraca koncentruje się na uproszczeniu operacji międzyłańcuchowych poprzez Framework Cross-chain Intent (CCIP), poszerzając interoperacyjność Aleph Zero.

Aleph Zero Integration with Router Protocol
Aleph Zeri + Router (ŹRÓDŁO: Aleph Zero)

Bridge zParachain do Polkadot

Z wykorzystaniem slotu parachain, bridge zParachain łączy Aleph Zero i Polkadot bez uczynienia Aleph Zero parachainem. To innowacyjne podejście zwiększa komunikację międzyłańcuchową, wzmacniając pozycję interoperacyjności Aleph Zero.

Aleph Zero MOST
ŹRÓDŁO: Aleph Zero

Dlaczego to ma znaczenie

Strategia Aleph Zero bridges podkreśla potrzebę stabilnych, bezpiecznych i wszechstronnych połączeń między blockchainami. Zapewniając szeroką łączność, Aleph Zero toruje drogę do bardziej zintegrowanego ekosystemu blockchain, gdzie bezproblemowa interoperacyjność zwiększa ogólną użyteczność i dostępność technologii zdecentralizowanych.

Przeczytaj koniecznie: "Aleph Zero vs Solana: A Comparative Analysis"

Podsumowanie

Działania Aleph Zero w dziedzinie mostów technologicznych oznaczają krok w kierunku zjednoczonego świata blockchain. Mosty Aleph Zero? Skupiając się na kluczowych obszarach, takich jak bezpieczeństwo, prostota i integracja ekosystemu, Aleph Zero kształtuje przyszłość interoperacyjności blockchain, wspierając innowacje i otwierając nowe możliwości dla sektorów DeFi i dApp.

Jeśli jesteś zainteresowany wykorzystaniem Aleph-Zero lub innych rozwiązań opartych na blockchainie dla swojego projektu, skontaktuj się z contact@nextrope.com

FAQ

1. Jaki jest główny cel mostu MOST w ekosystemie Aleph Zero?

  • MOST został zaprojektowany w celu zwiększenia interoperacyjności Aleph Zero z Ethereum, umożliwiając bezproblemowy transfer aktywów między dwoma platformami.

2. W jaki sposób projekt oparty na strażnikach MOST zwiększa jego bezpieczeństwo?

  • Projekt oparty na strażnikach priorytetowo traktuje bezpieczeństwo i prostotę w transferze aktywów. Strażnicy, którzy są starannie wybierani, nadzorują działanie mostu zarówno na Testnet, jak i na Mainnet.

3. Jakie są główne cechy MOST i jak korzystają z nich użytkownicy?

  • Główne cechy MOST obejmują obniżone opłaty za bridgowanie aktywów, takie jak ETH, stablecoiny i tokeny z Ethereum do Aleph Zero. Ten projekt ma na celu przyciągnięcie płynności do Aleph Zero, poprawiając żywotność i użyteczność jego ekosystemu oraz optymalizując doświadczenie użytkownika.