Wprowadzenie
Wdrażanie aplikacji na blockchainie, zwłaszcza na Ethereum, jest procesem kluczowym, ponieważ wiąże się z publicznym umieszczeniem kodu, który będzie dostępny dla wszystkich użytkowników. Każdy krok tego procesu wymaga szczególnej uwagi, od wyboru odpowiedniej sieci (testnet czy mainnet) po dokładne sprawdzenie i testowanie kodu. W tym artykule omówimy, jak skutecznie wdrażać aplikacje blockchainowe na Ethereum, korzystając z dostępnych narzędzi i praktyk.
Testnet i Mainnet – Wybór Sieci
Ethereum oferuje różne sieci, które służą różnym celom:
Testnet (sieci testowe): Są to symulowane wersje głównej sieci, które umożliwiają testowanie aplikacji bez ryzyka utraty prawdziwych środków. Do najpopularniejszych sieci testowych Ethereum należą Rinkeby, Ropsten i Goerli. Na tych sieciach można uzyskać testowy Ether, co pozwala na bezkosztowe wdrażanie kontraktów i sprawdzenie ich działania.
Mainnet: Jest to główna sieć Ethereum, na której transakcje mają prawdziwą wartość. Wdrażanie na mainnecie wiąże się z kosztem gazu, dlatego wszelkie błędy są kosztowne. Należy upewnić się, że kod jest dokładnie przetestowany i zoptymalizowany przed wdrożeniem na tę sieć.
Przygotowanie do Wdrożenia
Przed wdrożeniem aplikacji blockchainowej warto upewnić się, że:
Kod został dokładnie przetestowany – Wszystkie funkcje kontraktu muszą być przetestowane w różnych scenariuszach, aby upewnić się, że działają poprawnie.
Kod jest zoptymalizowany pod kątem kosztów gazu – Każda transakcja w sieci Ethereum wymaga opłaty w gazie. Optymalizacja kodu może znacznie zmniejszyć koszty wdrażania i użytkowania kontraktów.
Przeprowadzono testy na testnetach – Warto wdrożyć kod na różnych sieciach testowych, aby upewnić się, że działa on bez problemów w różnych środowiskach.
Przygotowanie Środowiska
Instalacja Truffle i Ganache – Truffle to popularny framework do kompilacji, wdrażania i testowania inteligentnych kontraktów, natomiast Ganache umożliwia uruchomienie lokalnej wersji blockchaina.
npm install -g truffle
npm install -g ganache-cli
- Tworzenie Projektu Truffle – Utwórz nowy projekt Truffle:
mkdir MyDapp
cd MyDapp
truffle init
- Konfiguracja Portfela i Klucza Prywatnego – Do wdrożenia kontraktu na mainnecie potrzebny jest portfel Ethereum (np. MetaMask) i klucz prywatny, który pozwoli na autoryzowanie transakcji.
Konfiguracja truffle-config.js
W pliku truffle-config.js można zdefiniować różne sieci, na które będziemy wdrażać aplikację, np. sieci testowe i mainnet. Użyjemy tutaj narzędzia Infura, które zapewnia zdalny dostęp do węzłów Ethereum:
const HDWalletProvider = require('truffle-hdwallet-provider');
const infuraKey = "YOUR_INFURA_PROJECT_ID";
const mnemonic = "YOUR_METAMASK_MNEMONIC";
module.exports = {
networks: {
rinkeby: {
provider: () => new HDWalletProvider(mnemonic, `https://rinkeby.infura.io/v3/${infuraKey}`),
network_id: 4,
gas: 4500000,
gasPrice: 10000000000,
},
mainnet: {
provider: () => new HDWalletProvider(mnemonic, `https://mainnet.infura.io/v3/${infuraKey}`),
network_id: 1,
gas: 4500000,
gasPrice: 10000000000,
},
},
};
W powyższej konfiguracji:
- mnemonic – jest to fraza odzyskiwania z MetaMask, która umożliwia dostęp do portfela.
- infuraKey – klucz projektu Infura, który pozwala na łączenie się z siecią Ethereum.
- gas – limit gazu na transakcję.
- gasPrice – cena gazu, która wpływa na koszt transakcji.
Wdrożenie Kontraktu na Testnet
Przed wdrożeniem na mainnecie warto najpierw przetestować kontrakt na testnecie, np. Rinkeby.
Kompilacja Kontraktów
Upewnij się, że kontrakty są skompilowane:
truffle compile
- Wdrożenie na Sieci Testowej
truffle migrate --network rinkeby
- Monitorowanie Transakcji – Po wdrożeniu kontraktu Truffle wyświetli adres, pod którym kontrakt jest dostępny. Można również użyć Etherscan, aby monitorować stan wdrożenia i szczegóły transakcji.
Wdrożenie na Mainnet
Po pomyślnym wdrożeniu i przetestowaniu kontraktu na testnecie można przystąpić do wdrożenia na mainnecie. Proces wygląda podobnie jak w przypadku testnetu, jednak z większym naciskiem na optymalizację kosztów.
Ustawienie Parametrów Gazowych – Przed wdrożeniem warto sprawdzić aktualne koszty gazu na stronie, która monitoruje stan sieci Ethereum, aby ustawić cenę gazu zgodną z bieżącymi standardami.
Wdrożenie Kontraktu
Wykonaj komendę:
truffle migrate --network mainnet
- Sprawdzenie Wdrożenia – Po wdrożeniu kontraktu można sprawdzić jego adres w Etherscanie, aby potwierdzić poprawność wdrożenia i zweryfikować szczegóły transakcji.
Przykładowy Kontrakt i Wdrożenie
Rozważmy prosty kontrakt zarządzający tokenami:
pragma solidity ^0.4.24;
contract MyToken {
string public name = "MyToken";
string public symbol = "MTK";
uint8 public decimals = 18;
uint public totalSupply = 10000 * (10 ** uint(decimals));
mapping(address => uint256) public balanceOf;
constructor() public {
balanceOf[msg.sender] = totalSupply;
}
function transfer(address _to, uint256 _value) public returns (bool success) {
require(balanceOf[msg.sender] >= _value, "Insufficient balance");
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
return true;
}
}
Kompilacja Kontraktu – Skompiluj kontrakt za pomocą
truffle compile.Migracja – W folderze
migrationsstwórz plik migracji2_deploy_contracts.js:
const MyToken = artifacts.require("MyToken");
module.exports = function(deployer) {
deployer.deploy(MyToken);
};
- Wdrożenie na Mainnecie – Wykonaj komendę
truffle migrate --network mainnet.
Zabezpieczenie Kontraktu po Wdrożeniu
Po wdrożeniu kontraktu na mainnecie nie można go zmienić ani wycofać. W związku z tym:
- Upewnij się, że kod jest wolny od błędów – wszelkie błędy w kodzie będą miały poważne konsekwencje.
- Zaimplementuj mechanizmy zabezpieczeń – jak ograniczenia dostępu (np.
onlyOwner). - Zoptymalizuj kod pod kątem gazu – zmniejszy to koszty użytkowania kontraktu przez użytkowników.
Ciekawostki
- Proxy Contracts – Niektóre projekty stosują mechanizmy proxy do aktualizacji kontraktów, co pozwala na wdrażanie nowych wersji kodu bez zmiany adresu kontraktu.
- Koszty Transakcji – Warto wiedzieć, że każda zmiana stanu kontraktu wymaga opłaty w gazie, co jest szczególnie istotne przy częstych aktualizacjach danych.
- Gas Wars – Na mainnecie Ethereum w czasie intensywnych okresów użytkowania dochodzi do “wojen gazowych”, gdzie transakcje z wyższymi opłatami są szybciej przetwarzane.
Dzięki powyższym krokom oraz dobrym praktykom można bezpiecznie i efektywnie wdrożyć aplikację blockchainową na Ethereum.