Menu Zamknij

Jak zrobić swój token personalny?

Ostatnio dość głośną technologią stał się blockchain. Jednym z łatwiejszych sposobów na rozpoczęcie z nią przygody, jest tworzenie inteligentnych kontraktów na platformie Ethereum (ang. Smart Contracts). Jako dobry przykład takiego kontraktu, może posłużyć token personalny ERC-20.

blockchain

Jak więc, zrobić swój token personalny? – Zacznijmy od przygotowania środowiska!

Przygotowanie środowiska

Posłużę się przykładem realizacji projektu na komputerze z systemem  Windows 10. Jeżeli masz inny system, to nie jestem wstanie Ci pomóc w realizacji tego kroku, ale prawdopodobnie też dasz sobie radę i pójdzie ci to o wiele łatwiej i szybciej niż posiadaczom Windows.

Na początek dla ułatwienia sobie życia, polecam zainstalować na swoim komputerze Chocolatey. To system zarządzania oprogramowaniem na twoim komputerze. Pozwala w prosty sposób instalować, aktualizować i usuwać oprogramowanie z twojego komputera.

W tym celu uruchom PowerShell z uprawnieniami Administratora, wklej poniższą komendę i wykonaj.

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

Więcej informacji o chocolatey znajdziesz na https://chocolatey.org/about

Teraz gdy zainstalowaliśmy Chocolatey, instalacja pozostałych narzędzi będzie już dziecinnie łatwa. Pozostając w PowerShell i korzystając z poniższych komend, zainstaluj pozostałe narzędzia.

Node.js

choco install nodejs.install -y

Visual Studio Code

choco install vscode -y

Git

choco install git -y

Pomocna będzie również wtyczka, dla składni języka solidity. Aby ją zainstalować, uruchom Visual Studio Code. Przejdź do wtyczek. Wyszukaj wtyczkę solidity i zainstaluj ją.

solidity

Po instalacji kliknij Reload, aby aktywować wtyczkę.

solidity

Uruchom wiersz poleceń (cmd) z uprawnieniami Administratora. Posłuży nam  do instalacji kolejnych narzędzi.

Framework truffle – to narzędzie, które zapewnia ramy dla szybkiego wytwarzania, testowania i wdrażania smart contract’ów. Więcej o tym narzędziu na https://truffleframework.com

npm install -g truffle

ganache-cli – lokalna sieć testowa ethereum

npm install -g ganache-cli

Python i MSBuild, wymagane do instalacji kolejnych zależności.

choco install python2 -y
choco install vcbuildtools -y
npm config set msvs_version 2015 --global
refreshenv

Załóż konto na https://infura.io/, wspomoże to deploy kontraktów na publiczne sieci ethereum.

Potrzebny będzie również portfel ethereum, więc jeżeli go jeszcze nie posiadasz, załóż go teraz z pomocą  MetaMask.

Zakładając, że przeglądarkę chrome już masz, zainstaluj do niej rozszerzenie MetaMask, możesz je pobrać ze strony https://metamask.io/.

Po zainstalowaniu uruchom MetaMask, włącz w trybie najnowszej wersji i utwórz konto.

metamask

Przygotowanie projektu

Przejdź do swojego katalogu roboczego np. C:/Projects i stwórz katalog dla swojego projektu.

cd C:/Projects
 mkdir YourToken
 cd YourToken

Inicjuj swój projekt z truffle framework

truffle initnp

A teraz projekt Node.js – Będzie wymagany do pobrania dodatkowych zależności.

npm init

Wypełnij według uznania, parametry projektu

name – nazwa projektu (tylko małe litery)
version – wersja
description – opis projektu
main – pozostaw domyślną wartość (truffle-config.js)
author – autor projektu
license – typ licencji np. MIT

Zainstaluj w projekcie zależności, wykonując poniższe komendy.

npm install --dev-save chai
npm install --dev-save chai-bignumber
npm install --dev-save dotenv
npm install --dev-save solium
npm install --dev-save truffle
npm install --dev-save truffle-hdwallet-provider
npm install --dev-save web3-utils
npm install --dev-save openzeppelin-solidity@2.0.0-rc.1

Implementacja

Uruchom Visual Studio Code z uprawnieniami Administratora, a następnie otwórz w nim folder ze swoim projektem.

W katalogu contracts stwórz plik swojego kontraktu np. YourToken.sol.

Wersja kompilacji

pragma solidity ^0.4.24;

Zaimportuj wymienione pliki z biblioteki openzeppelin-solidity, to gotowe rozwiązania powszechnych funkcjonalności personalnych tokenów ERC-20, takich jak własność, transfer tokenów, bilans, symbol, nazwa.

import "openzeppelin-solidity/contracts/ownership/Ownable.sol";
import "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol";
import "openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol";

Dodaj Ciało kontraktu.

contract YourToken is ERC20, ERC20Detailed, Ownable {
 //
 }

Wewnątrz ciała kontraktu dodaj konstruktor.

 constructor(string name, string symbol,uint8 decimals, uint256 totalSupply) public
 ERC20()
 ERC20Detailed(name, symbol, decimals)
 Ownable() {
 _mint(msg.sender, totalSupply * (10**uint256(decimals)));
 }

Jeżeli, chcesz  stworzyć swoje autorskie rozwiązania, polecam poczytać dokumentacje do solidity – https://solidity.readthedocs.io/en/v0.4.25/

Kompilacja

Otwórz Terminal, klikając skrót klawiszowy Ctrl +` lub z menu wybierając View->Terminal.

Następnie wpisz tam poniższą komendę, aby skompilować projekt.

truffle compile

Po kompilacji w katalogu build/contracts powinny pojawić się skompilowane kontrakty w postaci plików *.json.

Testy

W katalogu test utwórz plik np. YourToken.test.js

Na początku testu wczytaj swój token.

const YourToken = artifacts.require('YourToken');

Dodaj jeszcze zależności Web3 i BigNumber.

const Web3 = require('web3');
const BigNumber = web3.BigNumber;

Poniższy kawałek kodu pozwoli porównywać w testach wartości typu BigNumber.

require('chai')
 .use(require('chai-bignumber')(BigNumber))
 .should();

Dodajmy główną strukturę testu. Powinna ona się odnosić do kontraktu, jaki testujemy. Jako argumenty funkcji dostępne są konta z sieci na testowej.

contract('YourToken', function ([contract, creator, usualAccount]) {
 //
 });

Teraz w wewnątrz tej struktury dodajmy funkcję, która będzie uruchamiana dla każdego testu. To tu z każdym testem będzie na nowo tworzony Token o zadanych parametrach. Parametry oczywiście wg twojego uznania.

beforeEach(async function () {
 var name='YourToken';
 var symbol='YT';
 var decimals=18;
 var totalSupply=21000000;
 token=await YourToken.new(name, symbol, decimals, totalSupply, { from:creator });
 owner=creator;
 });

Poniżej dodajemy blok opisowy. To element, który można wykorzystać do opisania jakiejś grupy testów.

describe('YourToken.test.js', function () {
 //
 });

Wewnątrz bloku opisowego dodajemy blok testowy.

 it('After transfer tokens by contract owner to usual account, the usual account balance is increased by the amount of tranfered tokens', async function () {
 //GIVEN
 var amount=99999999;
 var balance= (await token.balanceOf(usualAccount, { from:owner }));
 //WHEN
 await token.transfer(usualAccount, amount, { from:owner });
 //THEN
 (await token.balanceOf(usualAccount, { from: owner })).should.be.bignumber.equal(balance.add(amount));
 });

Otwórz Terminal i uruchom lokalną sieć testową.

ganache-cli

Otwórz jeszcze jeden dodatkowy terminal (Możesz to zrobić kilając na ikonkę +) i uruchom testy wpisując tam poniższą komendę.

token personalny
truffle test

W przypadku gdy masz więcej plików z testami, a chcesz uruchomić tylko jeden z nich, możesz to zrobić w ten sposób.

truffle test ./test/YourToken.test.js

Uwaga!

Jeżeli masz problem z uruchomieniem testów i widzisz taki błąd, to  usuń ze zmiennej środowiskowej PATHEXT frazę .JS;

truffle.js error

Możesz to zrobić z poziomu wiersza poleceń  w ten sposób.

Wierz poleceń

Publikacja

Przełącz MetaMask  na sieć Ropsten.

token personalny

Doładuj swoje konto etherami przy użyciu „kranika” dla sieci ropsten. Uruchom tę stronę https://faucet.ropsten.be/ i wpisz adres swojego konta.

Po dłuższym czasie (do kilku godzin) na twoim koncie w MetaMask powinno pojawić się trochę etheru na swoim koncie.

Stwórz w  projekcie plik o nazwie .env i dodaj w nim poniższe wpisy.

MNEMONIC=// Tu wpisz mnemonik dla konta utworzonego w MetaMask
INFURA_API_KEY=// Tu wpisz klucz api z infura

Skopiuj mnemonik dla swojego konta. W tym celu kliknij ikonkę swojego konta, kliknij Settings, a następnie REVEAL SEED WORDS

token personalny
meta mask

Wpisz hasło nadawane podczas tworzenia konta.

meta mask

Skopiuj mnemonik do schowka.

metamask

Wklej mnemonik do pliku .env

Stwórz nowy projekt na swoim koncie Infura i skopiuj swój API KEY wklej go w odpowiednie miejsce w pliku .env

infura

Zastąp poniższym kodem zawartość pliku 1_initial_migration.js – ten kawałek kodu decyduje, z jakimi parametrami twój token będzie wdrożony na sieć publiczną.

var YourToken = artifacts.require("./YourToken.sol");
 module.exports = function(deployer) {
 var name='YourToken';
 var symbol='YT';
 var decimals=18;
 var totalSupply=21000000;
 deployer.deploy(YourToken,name, symbol, decimals, totalSupply);
 };

Dodaj konfigurację podczytującą dane z pliku .env

require('dotenv').config();

Zaimportuj klasę pośrednika portfela ethereum – to z jego pomocą odbywa się deploy na sieć publiczną.


 const HDWalletProvider = require('truffle-hdwallet-provider');

Dodaj konfigurację sieci ropsten

 module.exports = {
 networks: {
 ropsten: {
 provider: new HDWalletProvider( process.env.MNEMONIC, 'https://ropsten.infura.io/' + process.env.INFURA_API_KEY),
 network_id:3,
 gasPrice: 0x01
 },
 },
 };

Zrób deploy na sieć testową ropsten. Wpisz w terminalu poniższą komendę.

token personalny
truffle deploy --network ropsten --reset

Po wykonaniu komendy powinieneś znaleźć informację o adresie opublikowania kontraktu. Skopiuj ją.

Wykorzystując wcześniej skopiowany adres dodaj swój token do MetaMask.

deply ropsten
token personalny
token personalny

Wklej skopiowaną wcześniej wartość w pole Token Address. I kliknij Next.

Deploy na sieć główną robisz w podobny sposób. Tylko ether musisz zdobyć w inny sposób. Możesz go kupić na giełdzie kryptowalut np. BitBay

Dodaj główną sieć do konfiguracji.

 mainnet: {
 provider: new HDWalletProvider(process.env.MNEMONIC,'https://mainnet.infura.io/' + process.env.INFURA_API_KEY),
 network_id: 1,
 gasPrice: 0x01
 },
 

Aby zrobić deploy na sieć główną uruchom w terminalu poniższą komendę.

truffle deploy --network mainnet --reset

Teraz możesz rozdać, rozrzucić, sprzedać swoje tokeny.

Możesz nawet trochę mi wysłać na adres poniżej. Kto wie może, będą kiedyś coś warte 🙂

0xd1f83793dfa92e18e70039b6abc8812da8f4cb8e
Please follow and like us:
Skuteczna refaktoryzacja w 10 krokach!

Odbierz Darmowy Poradnik o Refaktoryzacji!

Poznaj kilka prostych technik i wprowadź nową jakość w swoim projekcie.

Dzięki za dołączenie do mojej listy.

Coś poszło nie tak :( Spróbuj jeszcze raz.