Jak stworzyć prosty “Wallet” smart contract za pomocą solidity ?

Paulina Lewandowska

19 paź 2022
Jak stworzyć prosty “Wallet” smart contract za pomocą solidity ?

W poprzednim tutorialu dowiedziałeś się, jak stworzyć swój pierwszy smart contract, w tym poście dowiesz się jak stworzyć "Wallet" smart contract, do którego będziesz mógł wysyłać oraz wypłacać Ethereum, oczywiście kontrakt będzie tak napisany, że tylko właściciel kontraktu będzie mógł wypłacić środki.

Czym są keywordy public, external, internal, private ?

Słowo kluczowe public poznałeś już w poprzednim tutorialu “Hello World”, oznacza ono, że funkcja jest publiczna, czyli może zostać wywołana zarówno “na zewnątrz kontraktu” jak i "wewnątrz". Kontrakty, dziedziczące nasz kontrakt bedą miały dostęp do takiej funkcji.

Przykład:

uint counter = 0;
    function externalFunction() external  {
        counter++;
        publicFunction();
    }
 
    function publicFunction() public  {
        counter++;
    }

Jak widzisz funkcję public można nie tylko wywołać “na zewnątrz smart kontraktu”, ale również w jego środku, tak jak w funkcji externalFunction. A właśnie, co oznacza właściwie ten external?

Jeśli funkcja jest external, oznacza to po prostu, że można ją wywołać tylko “na zewnątrz smart kontraktu” , tak jak wywoływaliśmy naszą funkcje sayHelloWorld w poprzednim tutorialu. Kontrakty, dziedziczące nasz kontrakt, bedą również miały dostęp do funkcji external.

Pozostały jeszcze dwa kluczowe słowa: internal i private.

function returnTwoPlusTwo() internal pure returns (uint256)  {
        return 2 + 2;
    }
 
    function returnMsgSender() private view returns (address)  {
        return msg.sender;
    }

Internal to dokładnie odwrotność external, takiej funkcji nie będzie można wywołać “na zewnątrz smart kontraktu”, tylko w jego środku. Tak samo jak w przypadku external i public, kontrakty, które bedą dziedziczyć taką funkcję, bedą miały do niej dostęp.

Ostatnia do omówienia została funkcja private. Główną jej cechą jest fakt, że będzie ona widoczna tylko w kontrakcie, w którym została zdefiniowana. Natomiast kontrakty, które dziedziczą nasz smart kontrakt, nie będą mogły jej wywołać.

Pure vs View

Po przeanalizowaniu funkcji internal oraz private, można zauważyć, że występują przy nich słowa 'pure' oraz 'view'. Co one oznaczają ?

Gdy funkcja jest pure, oznacza to, że nie modyfikuje ani nie zczytuje żadnych danych z blockchaina, tak jak funkcja returnTwoPlusTwo - zwraca ona tylko wynik 2+2, nie wczytuje ani nie modyfikuje żadnej zmiennej w smart kontrakie ani blockchainie.

Funkcje z dopiskiem view, oznaczają, że nie modyfikują danych z blockchaina, ale za to je wczytują. Na przykład funkcja returnMsgSender zczytuje wartość zmiennej msg.sender, reprezentującą adres, który wywołał daną funkcje.

Dobrze, wystarczy już tej teorii, zabierzmy się w końcu do pracy i stwórzmy wallet smart kontrakt!

Jak stworzyć “Wallet” smart kontrakt

Najpierw, jak zawsze, należy zdefiniować wersję solidity, którą chcemy używać. My będziemy używać wersji 0.8.12, a zatem na górze pliku wpisuje:

pragma solidity 0.8.12;

Tworzę kontrakt o nazwie Wallet :

contract Wallet {
   
}

Każdy portfel ma swojego właściciela, więc zdefiniuje address na ethereum, który będzie właścicielem smart kontraktu. Ownerem kontraktu nazwiemy osobę, która zrobi deploy naszego smart kontraktu.

 Warto zaznaczyć, że powinniśmy mieć zmienną dzięki, której będziemy mogli monitorować balans smart kontraktu.

contract Wallet {
    address public owner;
    uint public balance;
    constructor() {
        owner = msg.sender;
    }

Stwórzmy funkcję, dzięki której będziemy mogli przesyłać środki do smart kontraktu.

 function depositEther() external payable{
        balance += msg.value;
    }

W tej funkcji pojawiły się dwa nowe słowa : 'payable' oraz 'msg.value'.

Jeśli funkcja jest payable oznacza to, że wraz z wywołaniem funkcji możemy przesyłać ethereum do smart kontraktu, a msg.value to po prostu ilość przesłanych wei wraz z wywołaniem funkcji.

Teraz stwórzmy funkcje, dzięki której będziemy mogli wypłacać przesłane ethereum, oczywiście tylko właściciel smart kontraktu powinien mieć taką możliwość.

function withdrawEther(uint amount) external{
        require(msg.sender == owner, "Only owner can call this function");
        require(amount <= balance, "Amount exceeds balance");
        balance -= amount;
        payable(owner).transfer(amount);
    }

Require sprawia, że gdy podany w nim warunek się nie spełni funkcja zwraca bład z wiadomością jaką podaliśmy.

W funkcji musieliśmy zkonwertować zmienną owner z addressu na address payable, ponieważ ethereum można przesyłać tylko do adressów ze słowem kluczowym payable.

Podsumowanie

To już koniec! Smart kontrakt jest gotowy! Śmiało, spróbuj się nim pobawić, a jeśli Ci się uda to nawet go ulepszyć. 

W następnym tutorialu z serii Nextrope Academy pokażemy jak napisać prosty aukcyjny smart kontrakt.

Most viewed


Never miss a story

Stay updated about Nextrope news as it happens.

You are subscribed

Blockchain dla twórców: Bezpieczna i zrównoważona infrastruktura

Miłosz Mach

07 lis 2025
Blockchain dla twórców: Bezpieczna i zrównoważona infrastruktura

W świecie cyfrowej twórczości, gdzie granice między sztuką a technologią coraz bardziej się zacierają, projekty takie jak MARMALADE stają się symbolem nowej ery – ery, w której twórcy mogą chronić swoje prace i zachować nad nimi kontrolę dzięki blockchainowi. Dla Nextrope udział w MARMALADE to nie tylko implementacja narzędzi ochrony, takich jak blokowanie zrzutów ekranu czy watermarking. To przede wszystkim praca nad architekturą zaufania – tworzeniem infrastruktury, która pozwala twórcom działać w cyfrowym świecie bez obaw o utratę własności i bezpieczeństwo.

Nowy typ wyzwania dla blockchaina

Projekty kulturalne i edukacyjne mają zupełnie inne wymagania niż klasyczne rozwiązania DeFi. Tu nie chodzi o maksymalizację stóp zwrotu czy skomplikowane kontrakty finansowe.
W centrum znajduje się człowiek – artysta, ilustrator, edukator.

Dlatego jednym z największych wyzwań było stworzenie bezpiecznej, ale intuicyjnej infrastruktury. Systemy blockchain musiały być lekkie, energooszczędne i przyjazne użytkownikom, którzy często po raz pierwszy stykają się z technologią Web3.

„Naszym celem nie było zbudowanie kolejnego protokołu finansowego. Chcieliśmy stworzyć infrastrukturę zaufania dla twórców cyfrowych." - zespół Nextrope

Bezpieczeństwo, które nie przeszkadza

Najlepsze zabezpieczenia to te, których użytkownik… nie zauważa.
W MARMALADE położyliśmy nacisk na niewidoczne technologie bezpieczeństwa, które nie psują doświadczenia korzystania z platformy.

  • Blokowanie zrzutów ekranu chroni prace publikowane w przeglądarce.
  • Dynamiczny watermarking pozwala wykryć nieautoryzowane kopie.
  • Rejestr blockchain gwarantuje, że każdy dowód własności jest trwały i transparentny.

„Twórcy nie powinni martwić się o szyfrowanie czy klucze prywatne. Naszym zadaniem jest sprawić, by bezpieczeństwo działało w tle.”

Zrównoważony rozwój w DNA

MARMALADE to również odpowiedź na pytanie, jak łączyć innowacje z troską o środowisko.
Nextrope buduje rozwiązania, które korzystają z niskoemisyjnych sieci, a sama architektura jest modularna i łatwa do ponownego wykorzystania w innych projektach sektora kreatywnego.

Dzięki temu efekty prac MARMALADE mogą posłużyć nie tylko artystom, ale również instytucjom kultury czy uczelniom, które chcą w prosty sposób wprowadzać blockchain do swoich działań.

Więcej niż technologia

Dla Nextrope MARMALADE to coś więcej niż projekt – to dowód, że blockchain może być narzędziem społecznym, nie tylko finansowym.
Tworząc narzędzia dla artystów, pomagamy nie tylko chronić ich prace, ale też zrozumieć, że technologia może wspierać twórczość, a nie ją ograniczać.

Plasma (XPL). Architektura, kluczowe funkcje i znaczenie

Miłosz Mach

21 paź 2025
Plasma (XPL). Architektura, kluczowe funkcje i znaczenie

Czym jest Plasma?

Plasma (XPL) to blockchain warstwy 1 zaprojektowany specjalnie pod infrastrukturę stablecoinów łączy bezpieczeństwo Bitcoina z kompatybilnością EVM oraz ultraniskimi opłatami za transfery tokenów takich jak USDT.

To nowa generacja blockchaina, która ma umożliwić szybkie, tanie i skalowalne płatności w stablecoinach, eliminując ograniczenia znane z Ethereum czy Layer-2.

Dlaczego powstała Plasma?

Większość obecnych blockchainów nie została stworzona z myślą o stablecoinach w roli głównej. Wraz z ich rosnącą adopcją pojawiły się problemy: wysokie opłaty, zatłoczone sieci i ograniczona interoperacyjność.

Plasma rozwiązuje te problemy, oferując infrastrukturę dedykowaną do stablecoinów i przepływów finansowych.
Jej najważniejsze cechy to:

  • Brak opłat transakcyjnych (zero-fee) dla transferów USDT,
  • Własne tokeny gas – elastyczny model opłat,
  • Most Bitcoin (BTC bridge) – umożliwia wykorzystanie BTC jako zabezpieczenia,
  • Pełna kompatybilność z EVM – łatwe wdrożenia smart kontraktów z Ethereum.

Architektura i mechanizmy działania Plasmy (XPL)

Kompatybilność EVM i smart kontrakty

Deweloperzy korzystający z Solidity, Hardhat czy Foundry mogą bez problemu wdrażać swoje projekty na Plasmie. Migracja z Ethereum czy Polygon wymaga minimalnych zmian w kodzie, podobnie jak inne blockchain zgodne z EVM, które zostały omówione w niniejszym artykule: „Web3 Backend Przewodnik: Odblokuj Superszybką Skalowalność DApps Dzięki API!"

Model opłat (Gas Model)

Plasma wspiera niestandardowe tokeny gas, co oznacza, że użytkownik nie musi posiadać natywnego XPL, by opłacić transakcję. Dla stablecoinów (np. USDT) transfery mogą być całkowicie darmowe.

Most Bitcoin (BTC Bridge)

Dzięki wbudowanemu mostowi Plasma pozwala używać BTC jako zabezpieczenia w smart kontraktach. To połączenie bezpieczeństwa Bitcoina z elastycznością Ethereum dlatego często nazywa się ją „Bitcoin-secured blockchain for stablecoins”.

Bezpieczeństwo i finalność

Konsensus Plasmy został zoptymalizowany pod kątem finalności transakcji i ochrony przed reorganizacjami bloków.
Według danych z raportu The Block, sieć osiągnęła ponad 2 miliardy USD wartości stablecoinów (TVL) już w fazie beta mainnetu.

Czym Plasma (XPL) wyróżnia się na tle innych blockchainów?

FunkcjaPlasma (XPL)Inne L1 / L2
Dedykowana stablecoinom✅ Tak❌ Nie
Transfery USDT bez opłat✅ Tak⚠️ Rzadko
Most Bitcoin (BTC bridge)✅ Tak⚠️ Nieliczne przypadki
Kompatybilność z EVM✅ Tak✅ Tak, ale często z ograniczeniami
Płynność i adopcja stablecoinów✅ >2 mld USD⚠️ W fazie rozwoju

Przykładowe zastosowania Plasma (XPL)

Plasma jest idealna dla firm fintechowych, emitentów stablecoinów, projektów DeFi i startupów, które chcą tworzyć produkty oparte na tokenach powiązanych z walutami fiducjarnymi.

Możliwe zastosowania:

  • Portfele i aplikacje płatnicze (zero-fee),
  • Cross-border payments i remittance,
  • Skarbce (treasury management) i rozliczenia między firmami,
  • DeFi – rynki pożyczek, yield farming, AMM-y,
  • Tokeny zabezpieczone Bitcoinem (BTC-backed stablecoins).

Ropzpocznij budowę projektu na Plasma (XPL)

  1. Migracja smart kontraktów – sprawdź kompatybilność i dostosuj parametry gazu,
  2. Wybór modelu opłat – zdecyduj, czy użyjesz USDT, osobnych tokenów gas lub hybrydy,
  3. Audyt bezpieczeństwa – skup się na logice mostu, reentrancy, oracle’ach,
  4. Onboarding płynności – zbuduj pierwsze pule stablecoinów,
  5. Zgodność z regulacjami – szczególnie przy emisji stablecoinów,
  6. Wdrożenie MVP i skalowanie – testuj UX, koszty i bezpieczeństwo.