Jako dostawca eteru rozumiem znaczenie dokładnego szacowania danych dotyczących wdrożenia kontraktu podczas pracy z blockchainem Ethereum. W tym poście na blogu podzielę się spostrzeżeniami na temat uzyskiwania szacunkowych danych dotyczących wdrożenia kontraktu za pomocą ethers.js, popularnej biblioteki JavaScript do interakcji z blockchainem Ethereum.
Zrozumienie wdrażania kontraktów w Ethereum
Zanim zagłębimy się w szczegóły techniczne szacowania danych dotyczących wdrożenia kontraktu, przyjrzyjmy się pokrótce, z czym wiąże się wdrożenie kontraktu w Ethereum. Wdrażając inteligentny kontrakt w łańcuchu bloków Ethereum, zasadniczo tworzysz nową instancję kodu kontraktu i przechowujesz go w łańcuchu bloków. Proces ten wymaga wysłania transakcji do sieci, która zawiera kod bajtowy kontraktu i wszelkie niezbędne argumenty konstruktora.
Koszt wdrożenia kontraktu ustalany jest na podstawie ilości gazu potrzebnej do realizacji transakcji wdrożeniowej. Gaz to jednostka miary pracy obliczeniowej wymaganej do wykonania transakcji w sieci Ethereum. Im bardziej złożony kod kontraktu i im większe argumenty konstruktora, tym więcej gazu będzie wymagane do wdrożenia.
Warunki wstępne
Aby postępować zgodnie z przykładami z tego wpisu na blogu, musisz mieć następujące elementy:
- Node.js zainstalowany na Twoim komputerze
- Podstawowa znajomość JavaScript i blockchainu Ethereum
- Znajomość ethers.js
Możesz zainstalować plik ethers.js za pomocą npm, uruchamiając następującą komendę:
npm zainstaluj etery
Szacowanie danych dotyczących wdrożenia kontraktu za pomocą pliku ethers.js
Aby oszacować dane dotyczące wdrożenia kontraktu, musimy wykonać następujące kroki:
- Skompiluj inteligentny kontrakt, aby uzyskać kod bajtowy i ABI.
- Utwórz nową instancję pliku ethers.js
Fabryka Kontraktówklasa. - Skorzystaj z
Fabryka Kontraktówoszacować ilość gazu potrzebnego do rozmieszczenia.
Przeanalizujmy szczegółowo każdy krok.
Krok 1: Skompiluj inteligentny kontrakt
Pierwszym krokiem jest skompilowanie inteligentnego kontraktu w celu uzyskania kodu bajtowego i ABI. Możesz użyć narzędzia takiego jaksoc(kompilator Solidity), aby skompilować kontrakt. Oto przykład skompilowania prostej umowy Solidity przy użyciusocw skrypcie Node.js:
const solc = wymagaj('solc'); const fs = wymagaj('fs'); // Odczytaj kod źródłowy kontraktu const sourceCode = fs.readFileSync('SimpleContract.sol', 'utf8'); // Skompiluj kontrakt const input = { język: 'Solidity', source: { 'SimpleContract.sol': { content: sourceCode } }, settings: { OutputSelection: { '*': { '*': ['abi', 'evm.bytecode'] } } } }; const wyjście = JSON.parse(solc.compile(JSON.stringify(input))); const kontrakt = wynik.kontrakty['SimpleContract.sol']['SimpleContract']; const kod bajtowy = kontrakt.evm.bytecode.object; const abi = kontrakt.abi; console.log('Kod bajtowy:', kod bajtowy); konsola.log('ABI:', abi);
W tym przykładzie czytamy kod źródłowy prostej umowy Solidity z pliku o nazwieSimpleContract.sol. Następnie kompilujemy umowę za pomocąsoci wyodrębnij kod bajtowy i ABI z wyniku kompilacji.
Krok 2: Utwórz nową instancję plikuFabryka Kontraktówklasa
Kiedy już mamy kod bajtowy i ABI, możemy utworzyć nową instancję plikuFabryka Kontraktówklasa z ethers.js. TheFabryka Kontraktówclass służy do wdrażania nowych wystąpień inteligentnego kontraktu. Oto przykład:
const {etery } = wymagaj('etery'); // Połącz się z dostawcą stałym sieci Ethereum = new ethers.providers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'); const portfel = nowy ethers.Wallet('TWÓJ_KLUCZ_PRIVATE', dostawca); // Utwórz nową instancję ContractFactory const kontraktFactory = new ethers.ContractFactory(abi, bytecode, portfel);
W tym przykładzie łączymy się z siecią główną Ethereum za pomocą dostawcy Infura. Będziesz musiał wymienićTWOJ_INFURA_PROJECT_IDz rzeczywistym identyfikatorem projektu Infura. Tworzymy także nową instancję portfela przy użyciu klucza prywatnego. ZastępowaćTWÓJ_KLUCZ_PRIVATEz Twoim rzeczywistym kluczem prywatnym.
Krok 3: Oszacuj ilość gazu potrzebnego do wdrożenia
Kiedy już mamyFabryka Kontraktówmożemy na przykład użyć go do oszacowania ilości gazu wymaganego do rozmieszczenia. TheFabryka Kontraktówklasa ma metodę o nazwiepobierz transakcję wdrożeniaktóra zwraca obiekt transakcji reprezentujący transakcję wdrożenia. Możemy wówczas skorzystać zoszacowanieGazmetodę szacowania przez dostawcę gazu potrzebnego do realizacji transakcji. Oto przykład:
// Oszacuj ilość gazu potrzebną do wdrożenia const DeployTransaction = ContractFactory.getDeployTransaction(); const szacowanyGas = czekaj na dostawcę.estimateGas(deployTransaction); console.log('Szacowana ilość gazu do wdrożenia:', szacowanyGas.toString());
W tym przykładzie wywołujemy metodępobierz transakcję wdrożeniametodaFabryka Kontraktówaby uzyskać obiekt transakcji wdrożenia. Następnie korzystamy zoszacowanieGazmetodę szacowania przez dostawcę gazu potrzebnego do realizacji transakcji. Szacowany gaz jest zwracany jako aDuża liczba, dlatego przed zalogowaniem do konsoli konwertujemy go na ciąg znaków.
Czynniki wpływające na szacunkową cenę gazu w ramach kontraktu
Na szacunkową cenę gazu dla realizacji kontraktu może mieć wpływ kilka czynników, w tym:


- Złożoność kontraktu: Im bardziej złożony kod umowy, tym więcej gazu będzie wymagane do wdrożenia.
- Argumenty konstruktora: Jeśli kontrakt zawiera argumenty konstruktora, wielkość i złożoność tych argumentów może również wpłynąć na oszacowanie gazu.
- Przeciążenie sieci: Aktualny stan sieci Ethereum może również mieć wpływ na oszacowanie gazu. W okresach dużego obciążenia sieci ceny gazu mogą być wyższe, co może zwiększyć całkowity koszt wdrożenia.
Wniosek
Oszacowanie danych dotyczących wdrożenia kontraktu jest ważnym krokiem w procesie wdrażania inteligentnego kontraktu na blockchainie Ethereum. Korzystając z ethers.js, możemy łatwo oszacować ilość gazu potrzebną do wdrożenia i odpowiednio zaplanować nasze transakcje.
Jeśli jesteś zainteresowany zakupem eterów do swoich projektów blockchain, jesteśmy niezawodnym dostawcą eterów. W naszej ofercie znajdują się wysokiej jakości etery m.inEter metylowo-tert-butylowy (MTBE),Eter monobutylowy glikolu etylenowego (BCS, EB), IEter monobutylowy glikolu trietylenowego (TBG, TB). Skontaktuj się z nami, aby omówić swoje potrzeby w zakresie zakupów i rozpocząć udaną współpracę.
Referencje
- dokumentacja ethers.js: https://docs.ethers.io/v5/
- Dokumentacja Solidity: https://docs.soliditylang.org/
- Oficjalna strona Ethereum: https://ethereum.org/
