Dujų optimizavimas „Solidity Smart“ sutartyse: tinkamos saugyklos pasirinkimas

Pastaraisiais metais „Ethereum“ virtualios mašinos (EVM) tinklai įgavo didelę sukibimą. Kiekvieną dieną vis daugiau naujų vartotojų prisijungia prie šių tinklų, vykdydami daugybę operacijų. Tačiau dėl padidėjusios veiklos padidėja operacijų mokesčiai, todėl palūkanos sumažina šiuos mokesčius, kad „Web3“ programos būtų prieinamesnės ir patogesnės vartotojui.

Vienas perspektyvus sprendimas yra Optimizuoti išmaniųjų sutarčių dujų vykdymą. Taikydami tinkamą įgyvendinimo metodą, kūrėjai gali sukurti efektyvesnes intelektualias sutartis, tokiu būdu Sumažina dujų mokesčius. Šis optimizavimas ne tik daro operacijas pigesnėmis, bet ir pagerina bendrą vartotojo patirtį EVM tinkluose. Tęsiant šiuos patobulinimus, „Web3“ programų ateitis atrodo vis perspektyvesnė.

Tvirtumo vystymasis

Solidumas yra plačiausiai naudojama programavimo kalba, kuriant išmaniąsias sutartis „Ethereum“ virtualios mašinos (EVM) grandinėse. Išmaniosios sutartys vykdomos grandinėje, o kiekvienas sutarties sandorio veiksmas patiria dujų kainą. Natūralu, kad sudėtingos ar daug išteklių reikalaujančios operacijos sunaudoja daugiau dujų.

Labiausiai dujomis reikalaujančios operacijos yra susijusios su saugojimu. Duomenų pridėjimas ir skaitymas iš saugyklos gali būti nepaprastai brangios, jei nebus tinkamai tvarkomi, naudojant visas turimas saugyklas. Nagrinėjant EVM kodus, akivaizdu, kad saugyklos „Opcodes“ saugyklos yra žymiai brangesni nei „Opcodes“ atminties naudojimui. Tiksliau, jie yra 33 kartus brangesni.

OPCODE

Dujos

Aprašymas

Sload

100

Įkelkite žodį iš saugyklos

Sstore

100

Išsaugokite žodį į saugyklą

MSTORE

3

Įkelkite žodį iš atminties

Moad

3

Išsaugokite žodį atminimui

Sandėliavimo vietos

EVM siūlo penkias saugojimo vietas: saugyklą, atmintį, skambučius, krūvą ir žurnalus. „Solidity“ kodas pirmiausia sąveikauja su pirmaisiais trim, nes jis neturi tiesioginės prieigos prie krūvos. Stack yra ten, kur vyksta EVM apdorojimas, o norint jį pasiekti, reikia žemo lygio programavimo metodų. Žurnalus naudoja „Solidity“ įvykiams, tačiau sutartys negali pasiekti žurnalo duomenų, kai jie bus sukurti.

Saugojimas

  • Rakto vertės parduotuvė, kuri sudaro 256 bitų žodžius iki 256 bitų žodžių;
  • Saugo visus intelektualiųjų sutarčių valstybinius kintamuosius, kurie yra Kintamas (Konstantos yra sutarties baito kodo dalis);
  • Yra apibrėžtas pagal sutartį diegimo metu.

Atmintis

  • Sukurtas funkcijų skambučiams;
  • Linijinis ir adresuojamas baitų lygyje;
  • Skaitykite ribotą iki 256 bitų pločio, rašo, kad rašoma 8 arba 256 bitų pločio;
  • Saugo visi funkcijos kintamieji ir objektai, nurodyti naudojant atminties raktinį žodį;
  • Rekomenduojama trumpam saugoti keičiamus duomenis.

Vadinama

  • Laikina vieta, kurioje kaupiami funkcijos argumentai;
  • Jo negalima parašyti ir naudojamas tik skaitymams.

Dujų optimizavimo metodai

Norėdami sumažinti dujų sąnaudas, susijusias su saugojimu, prioritetu, naudodami atmintį, o ne saugyklą. Apsvarstykite šią intelektualią sutartį, kurioje naudojama išskirtinai saugojimo sritis:

contract GasCostComparison {
   uint256() private s_numbers;
   uint256 private s_sum;




   function numberSum()public returns(uint256) {


       for(uint i=0; i

Jei s_numbers yra inicijuotas paskambinus initNumbers su n=10dujų naudojimas numberSum būtų 53 010 dujos.

Venkite per dažnai skaityti iš saugyklos

„Dėl pareiškimo mes palyginame rodyklę i su s_numbers.length. Nors mes galime manyti, kad masyvo ilgis skaitomas iš saugyklos tik vieną kartą, jis skaitomas kiekvieną kartą, kai vyksta palyginimas. Norėdami optimizuoti, perskaitykite ilgį tik vieną kartą iš saugyklos:

function numberSum()public returns(uint256) {
       uint256 l = s_numbers.length;
       for(uint i=0; i

Mes saugome ilgį skaityti iš saugyklos, esančioje L kintamajame, kuris saugomas naujojo numerio () atminties srityje.

Tai sumažina dujų naudojimą iki 51 945 dujų, Sutaupykite 1 065 dujos.

Venkite rašyti per dažnai saugykloje

Panašiai galutinės sumos saugojimas tik „S_SUM“ būsenos kintamojo (kuris yra saugykloje) pareiškimo pabaigoje (kuri yra saugoma) yra efektyvesnė. Sukurkite laikiną kintamąją sumą atmintyje:

function numberSum()public view returns(uint256) {
       uint256 l = s_numbers.length;
       uint256 sum = 0;
       for(uint i=0; i

Dujų vykdymas šis laikas yra 27 770 dujų, beveik pusė ankstesnių atvejų.

Tinkamo saugojimo tipo pasirinkimas gali žymiai sumažinkite „blockchain“ dujų mokesčiuskaip parodyta aukščiau pateiktuose pavyzdžiuose. Optimizuoti, kaip saugomi ir pasiekiami duomenys, yra labai svarbūs norint sumažinti sąnaudas ir pagerinti intelektualiųjų sutarčių efektyvumą „Ethereum“ virtualios mašinos (EVM) grandinėse.

Prioriteto nustatymo atmintyje, o ne saugojant keičiamus duomenis ir supratę dujų sąnaudų, susijusių su skirtingomis operacijomis, niuansus, kūrėjai gali žymiai pagerinti savo programų našumą ir ekonominį efektyvumą „Web3“ ekosistemoje.

Solidumo dokumentacija

Nuoroda į informacijos šaltinį

Draugai: - Marketingo paslaugos - Teisinės konsultacijos - Skaidrių skenavimas - Fotofilmų kūrimas - Karščiausios naujienos - Ultragarsinis tyrimas - Saulius Narbutas - Įvaizdžio kūrimas - Veidoskaita - Nuotekų valymo įrenginiai -  Padelio treniruotės - Pranešimai spaudai -