Jak bez doświadczenia automatyzować gry z tokenami NFT?

Automatyzacja jest dziś konieczna. Tempo, w którym maszyny zastępują proste czynności jest zastraszające. Wykonujesz czynności ręcznie i powoli? Tracisz szansę na rywalizację (chociażby o NFT) z szybkim komputerem i algorytmami. Co zatem robić? Przełamać się i nauczyć się automatyzacji.

Zabawmy się zatem i spróbujmy nauczyć się czegoś konkretnego na przykładzie gry opartej o blockchain. Jeśli nie wiecie, o co chodzi, polecamy cofnięcie się do naszego artykułu o zarabianiu na grach NFT. My idziemy krok dalej i postaramy się połączyć przyjemne z pożytecznym, czyli zarabiać tak, aby jeszcze sobie pograć i się czegoś przydatnego nauczyć.

Co potrzebujemy, aby zacząć automatyzację? Najważniejszy jest otwarty umysł i chęć rozwiązywania problemów za pomocą programowania. Poza tym potrzebujemy na start portfel WAX.

Co będziemy konkretnie robić? Portal rPlanet pozwala na staking NFT z różnych gier opartych o blockchain, dzięki czemu zarabiamy aether, czyli wewnętrzną kryptowalutę rPlanet. Jedną z gier, która pozwala na w miarę łatwe generowanie NFT są Kołoboki. Spróbujmy zatem zautomatyzować generowanie kołoboków i NFT, które możemy dzięki nim zdobywać.

Wax could wallet do NFT i biblioteka JS

Transakcje wykonywane przez nas w portfelu możemy podglądać na stronie wax.bloks.io. Sprawdzimy tam też atrybuty i możliwości smart kontraktów, które możemy wykonywać w grze.

Nasz plan działania polega na tym, że postaramy się zautomatyzować podstawowe czynności w grze, czyli breeding (rozmnażanie) i później wysyłanie na adventures (misje), które w przypadku sukcesu kończą się wygenerowaniem NFT, na którym będziemy zarabiać.

Planujemy użyć do tego podstawowego portfela, czyli Cloud Wax Wallet oraz biblioteki JS, którą zarekomendowali nam developerzy w tutorialu. Swoją drogą, znalezienie tej biblioteki trochę trwało, więc nie warto się zniechęcać, jeśli na pierwszy rzut oka nie widać co robić w kolejnym kroku.

Konfigurujemy środowisko do automatyzacji

Czego potrzebujemy na start? My wybieramy Visual Studio Code. Do sprawdzania efektu programowania w JavaScript wystarczy przeglądarka internetowa. Startujemy szybko dzięki tutorialowi na stronie dla Developerów WAX.

Do komfortowej pracy potrzebujemy zasilić nasze konto w kryptowalutę WAX oraz wypożyczyć zasoby (CPU, NET i RAM). Nasze środki mogą do nas wrócić, gdy skończymy zabawę z grami lub portfelem. Kilka WAX kupimy najłatwiej na KuCoin.

Nowy portfel WAX służy też do przechowywania NFT.
Zaczynamy od zera z portfelem WAX

Kopiujemy pliki z instrukcji wspomnianej w pierwszym akapicie tego rozdziału (waxjs.js oraz index.html) do jednego katalogu i odpalamy w przeglądarce plik index.html. Nie wygląda zbyt ładnie, ale jeśli jesteśmy zalogowani w portfelu WAX, po naciśnięciu przycisku możemy uzyskać do niego dostęp. Gdy przyciskamy “Sign transaction”, otrzymujemy komunikat błędu, że nie mamy środków na koncie. Wszystko zatem działa zgodnie z planem.

Doładowujemy konto WAX (możemy je kupić np. na KuCoin), po czym jeszcze raz odpalamy transakcję. Robi ona następujące rzeczy:

  • NET staking 0.00000001 WAX dla konta, na które jesteśmy zalogowani.

Po kliknięciu Sign in transaction otrzymujemy (długie) potwierdzenie oraz możemy zobaczyć w Could Wallet, że mamy w stakingu właśnie o taką drobną kwotę więcej.

Warto na start przeznaczyć kilka WAX zarówno na CPU, jak i na RAM. Jest to inwestycja, która pozwoli nam korzystać z zasobów tego ekosystemu. Będziemy mogli odzyskać środki, jeśli się rozmyślimy (trwa to kilka dni).

Automatyzujemy grę NFT

Zaczynamy od zakupu lub przesłania sobie na konto kilku kołoboków. Można to prosto zrobić za pomocą Simple Market. Używamy do tego opcji Transfer (jeśli przesyłamy z innego konta) lub kup. Po zakupie kołoboki automatycznie pojawią się na koncie.

Sprawdźmy teraz z czego składa się smart kontrakt, aby spróbować go zautomatyzować. Udajemy się w tym celu na stronę bloks.io. Klikamy “More”, Tables + Actions oraz w polu Smart Kontrakt wpisujemy “ilovekolobok”. Ukazuje się nam lista komend, a po przejściu do zakładki “Actions”: akcje, które możemy wywoływać.

Na start użyjemy opcji z manualnym logowaniem i potwierdzaniem transakcji. Będziemy zatem odpalać stronę index.html w przeglądarce, aby sprawdzić działanie naszego skryptu. Dzięki tutorialowi dotarliśmy do miejsca, w którym po przyciśnięciu Sign transaction zaczęliśmy widzieć błędy. Bardzo pomogło to w debugowaniu i szukaniu rozwiązań.

    <script>
    //zaczynamy od listy ID naszych kolobokow
      var koloboks = [
        '1000000148',
        '1000000167',
        '1000000163',
        '1000000159',
        '1000000159',
        '1000000168',
        '1000000152',
        '1000000149',
        '1000000148',
        '1000000146',
        '1000000167',
        '1000000163',
      ];

      const wax = new waxjs.WaxJS(
        'https://wax.greymass.com',
        null,
        null,
        false
      );

      //automatically check for credentials
      autoLogin();

      //checks if autologin is available
      async function autoLogin() {
        let isAutoLoginAvailable = await wax.isAutoLoginAvailable();
        if (isAutoLoginAvailable) {
          let userAccount = wax.userAccount;
          let pubKeys = wax.pubKeys;
          let str =
            'AutoLogin enabled for account: ' +
            userAccount +
            '<br/>Active: ' +
            pubKeys[0] +
            '<br/>Owner: ' +
            pubKeys[1];
          document
            .getElementById('autologin')
            .insertAdjacentHTML('beforeend', str);
        } else {
          document
            .getElementById('autologin')
            .insertAdjacentHTML('beforeend', 'Not auto-logged in');
        }
      }

      //normal login. Triggers a popup for non-whitelisted dapps
      async function login() {
        try {
          //if autologged in, this simply returns the userAccount w/no popup
          let userAccount = await wax.login();
          let pubKeys = wax.pubKeys;
          let str =
            'Account: ' +
            userAccount +
            '<br/>Active: ' +
            pubKeys[0] +
            '<br/>Owner: ' +
            pubKeys[1];
          document
            .getElementById('loginresponse')
            .insertAdjacentHTML('beforeend', str);
        } catch (e) {
          document.getElementById('loginresponse').append(e.message);
        }
      }
      // function to breed
      var i = 0;
      async function sign() {
        if (!wax.api) {
          return document.getElementById('response').append('* Login first *');
        }
        //sprawdzamy liste kolobokow i rozmnazamy je po kolei
        for (kolobok in koloboks) {
          var initial = koloboks[i];
          var secondary = koloboks[i + 1];
          try {
            const result = await wax.api.transact(
              {
                actions: [
                  {
                    account: 'ilovekolobok',
                    name: 'breed',
                    authorization: [
                      {
                        actor: wax.userAccount,
                        permission: 'active',
                      },
                    ],
                    data: {
                      owner: wax.userAccount,
                      parent1: initial,
                      parent2: secondary,
                      name: 'koloboczek',
                    },
                  },
                ],
              },
              {
                blocksBehind: 3,
                expireSeconds: 30,
              }
            );
            document
              .getElementById('response')
              .append(JSON.stringify(result, null, 2));
          } catch (e) {
            document.getElementById('response').append(e.message);
          }
          i = i + 2; //koniec petli i przeskakujemy o dwa koloboki
        }
      }
    </script>

Funkcję logowania pozostawiliśmy bez zmian. W smart kontrakcie kołoboków rozpoczynamy pętlę, w której przechodzimy się po wszystkich naszych kołobokach i rozmnażamy je w parach. Sposób na wywołanie ‘breed’ wyczytaliśmy w manualu i na stronie Bloks. Trochę czasu zajęło odkrycie schematu wywoływania komend (breed i jego “data”). Koniec końców widzimy, że kołoboki są sparowane!

Zamiast klikać setki razy, automatyzujemy poszczególne czynności w grze, w której nagrodami są tokeny NFT.
Zamiast klikać setki razy, automatyzujemy poszczególne czynności w grze, w której nagrodami są tokeny NFT.

Pułapki programowania

W JavaScripcie wczytujemy w pętli po kolei ID naszych kołoboków, do zmiennych o nazwach: initial i secondary. Znajdą się one dynamicznie w każdej obrotce pętli, aż sparujemy wszystkie dostępne kołobki. W JavaScripcie musieliśmy pokonać po drodze:

  • doprowadzenie do używalności dema z manuala,
  • deklaracje var zamiast const dla zmiennych, które przyjmą wiele wartości,
  • podpucha z przepisywaniem formatu na arrow function (wystarczyło funkcję sign zamknąć w iteracjach, zamiast jak na początku myśleliśmy, na zewnątrz pętli),
  • odkryta na czuja składnia w “actions:”

Kod działa i pozwala nam szybko rozmnożyć wszystkie wpisane z konta kołoboki. Wystarczy jedynie szybko klikać potwierdzanie transakcji. Pomysł sprawdzi się szczególnie w sytuacji, w której mamy ich więcej, niż setka. Na naukę i pisanie kodu zużyliśmy około 6 godzin. Kolejne zmiany zajmą już dużo mniej czasu. Najtrudniej jest zacząć i pokonać na starcie opór materii i podstawy

Jak automatyzować dalej gry blockchain?

To, co zrobiliśmy to jedynie początek. Następnie można pomyśleć o:

  • powrocie do dobrych praktyk programowania (obsługa wyjątków, interface, i wiele innych etc.)
  • scraper do spisywania numerów nowych kołoboków i eliminowania straconych
  • wysyłanie i zamykanie adventures
  • automatyczny claiming
  • sprawdzanie stanu gry i konta, analiza statystyk kołoboków

Jak widać można się rozpędzić i spędzać coraz więcej czasu na optymalizowaniu swoich narzędzi. Warto obok grania postawić na rozwój. Skrypty możemy wykorzystać nie tylko w niszowej grze opartej o rosyjską bajkę. Skracanie czasu spędzonego na klikaniu w AlienWorlds lub innych popularnych grach odpłaci w przyszłości.

W rozszerzeniu artykułu postaramy się poruszyć tematy:

  • obliczenie czego i ile WAX potrzeba do wykonywania operacji na tym konkretnym blockchainie
  • jakie są przychody ze stakingu
  • jakie mogą być przychody ze sprzedaży NFT i itemów z gier
  • opis i alternatywy WAX Cloud Wallet?

Napiszcie w komentarzu którym tematem zająć się w pierwszej kolejności. Dla wytrwałych, jeśli przeczytaliście do końca artykuł mamy niespodziankę. Jeśli polubicie naszą stronę na facebooku i zostawicie komentarz, dostaniecie dwa losowe kołoboki na start.

Najnowsze artykuły

spot_img

Dowiedz się więcej:

ZOSTAW ODPOWIEDŹ

Please enter your comment!
Please enter your name here

Sprawdź nas na facebooku!