Přechod z EVM na SVM (Solana) vyžaduje pochopení několika klíčových rozdílů mezi virtuálními stroji. Tento článek vás provede několika z těchto rozdílů, včetně účtů, poplatků, transakcí, chytrých smluv (programů) a dalších. Prozkoumá také nastavení vývojáře včetně nástrojů a sad SDK.

Na konci budou mít vývojáři znalosti potřebné k zahájení své cesty Solana.

Pochopení základních rozdílů

Pro začátek se podívejme na nejvýznamnější rozdíl mezi EVM a SVM – návrh modelu účtu.

Model účtu

Na rozdíl od Etherea byla Solana navržena tak, aby využívala výhod více jader a podporovala paralelní transakce. K dosažení tohoto cíle používá Solana model účtu.

Účet na Solana je záznam v knize Solana, který buď obsahuje data (datový účet), nebo je spustitelným programem (inteligentní smlouva nebo program na Solaně).

Stejně jako Ethereum má každý účet identifikátor adresy. Avšak na rozdíl od Etherea – kde je každá inteligentní smlouva účtem s logikou provádění a úložištěm propojeným dohromady – jsou chytré smlouvy Solana zcela bez státní příslušnosti. Stav musí být předán účtům, aby na nich mohly být provedeny.

Podívejme se na příklad kódu. V níže uvedeném kódu Solidity je stav svázán s inteligentní smlouvou s řádkem int private count = 0.

S Rustem (Solana) je v inteligentní smlouvě struktura uvádějící initialize_counter. Tento počáteční čítač vytvoří účet s počtem 0. Účet je předán tomuto čítači, aby se počet zvýšil. To zabraňuje tomu, aby byl stav udržován v samotném smart kontraktu.

S Solana jsou data uložena na samostatných účtech mimo program. Chcete-li provést logiku v programu, předejte účet, na kterém se má provést.

V případě tohoto čítacího programu předejte programu při volání funkce inkrementace protiúčet a program poté zvýší hodnotu na protiúčtu.

Výhody návrhu modelu účtu

Jednou z hlavních výhod tohoto modelu účtu je opětovné použití programu.

S rozhraním ERC20 na Ethereu musí vývojář pokaždé, když vytvoří nový token, znovu nasadit smart kontrakt ERC20 do Etherea s jeho specifikovanými hodnotami. Toto přemístění vyžaduje vysoké náklady.

Ale u Solana není nutné vytvářet a nasazovat novou inteligentní smlouvu, aby bylo možné vytvořit nový token. Místo toho si vytvořte nový účet, známý jako mincovní účet, pomocí Solana Token Program, předejte podrobnosti, jako je počet tokenů, desetinná čárka, kdo může razit a další.

A to lze provést jednoduchým odesláním transakce do Token programu. Například pomocí Solana Program Library CLI je to jen jeden příkaz:

Místní trhy s poplatky

Další výhodou modelu účtu je, že trhy s poplatky jsou místní na účet.

Na Ethereu jsou trhy s poplatky globální. Pokud se sbírka NFT stane virální a všichni razí – poplatky se zvyšují pro všechny. Ale na Solaně, protože trhy s poplatky jsou místní na účet, platí zvýšené poplatky pouze lidé, kteří razí tuto sbírku NFT. Nezúčastnění uživatelé nejsou ovlivněni.

Poplatky

Pojďme se ponořit hlouběji do poplatků. Na Solaně jsou poplatky rozděleny do tří kategorií: základní poplatek, prioritní poplatek a nájem. Podívejme se na každou.

  • Základní poplatek se vypočítává na základě počtu podpisů v transakci. Každý podpis stojí 5000 lamportů (0,000000001 sol = 1 lamport). Pokud má transakce 5 podpisů, základní poplatek je 25 000 lamportů.

  • Prioritní poplatek je volitelný poplatek, který lze přidat k transakci a dát jí prioritu. Tento poplatek je založen na množství výpočetních jednotek použitých v transakci. Podobně jako u plynu Ethereum je tento poplatek jednoduchým měřením výpočetních zdrojů potřebných pro transakci.

  • Konečný poplatek, nájem, je spíše jako záloha. Když vývojáři vytvářejí účty nebo přidělují prostor v síti, musí vložit SOL pro síť, aby si ponechali svůj účet. Nájemné se počítá na základě počtu bajtů uložených v síti a za přidělení prostoru se účtuje další základní poplatek.

Transakce

Na Solana začíná provádění programu odesláním transakce do clusteru. Každá transakce na Solana se skládá ze čtyř částí:

  1. Jeden nebo více pokynů. Pokyny jsou nejmenší logikou provádění na Solaně. Lze je považovat za volání funkcí na smart kontraktu Ethereum. Vyvolávají programy, které volají běhové prostředí Solana za účelem aktualizace stavu (například volání programu tokenů za účelem přenosu tokenů z jednoho účtu na druhý).

  2. Řada účtů, ze kterých lze číst nebo zapisovat

  3. Jeden nebo více podpisů

  4. Nedávný blockhash nebo nonce. Namísto použití inkrementálního nonce jako na Ethereu, na Solana je z clusteru stažen nedávný blockhash. S tímto blockhashem je transakce platná pouze pro 150 bloků, což zabraňuje tomu, aby byly podpisy transakcí s dlouhou životností provedeny mnohem později.

Dalším významným rozdílem mezi Ethereem a Solanou je to, že se Solanou mohou mít transakce více instrukcí (volání funkcí na Ethereu). To znamená, že není nutné vytvářet vlastní chytré smlouvy pro řetězení funkcí v jedné transakci. Každá instrukce může být samostatným voláním funkce provedeným v daném pořadí v transakci. Transakce jsou také atomické: pokud selže instrukce, selže celá transakce.

Omezení transakce

Stejně jako v případě omezení plynu Ethereum existují u transakcí Solana omezení výpočetních jednotek.

Mezi další omezení patří:

  • Každý odkazovaný účet může mít na jeden blok maximálně 12 000 000 výpočetních jednotek.

  • Pokyny lze volat pouze v hloubce 4, než se transakce vrátí zpět.

Mempool

Na rozdíl od Etherea Solana nemá mempooly. Validátory Solana místo toho předávají všechny transakce až čtyřem vedoucím podle plánu vedoucích. Neexistence mempoolu nutí transakce přeskakovat od vedoucího k vedoucímu až do vypršení platnosti blockhash, ale také to snižuje režii klepů napříč clusterem.

Vývojářské prostředí Solana

Nyní se podívejme na některé vývojářské nástroje na Solana.

Programovací jazyky

Zatímco Ethereum primárně používá Solidity pro psaní chytrých smluv, Solana používá Rust. Pokud přecházíte z Etherea, zvažte rámec Anchor nebo Neon, které mohou vývojářům pomoci rychleji začít tím, že jim umožní stavět v Solaně pomocí známých nástrojů EVM.

Stejně jako Ethereum jsou k dispozici sady SDK na straně klienta pro mnoho z nejpopulárnějších programovacích jazyků, včetně JavaScriptu, Pythonu a Javy.

Vývojářské nástroje

Solana v současné době nemá ekvivalent k Foundry, ale má širokou sadu nástrojů ekvivalentních těm, které se používají pro Solidity.

Pro hlubší ponor je zde širší seznam vývojářských zdrojů.

Vytváření chytrých smluv

Při vytváření programů na Solaně (nebo při migraci stávajících smart kontraktů Ethereum) existuje několik zásadních rozdílů – příliš mnoho na to, abychom je zde pokryli. Pojďme se ale podívat na některé z nejběžnějších:

  • Mapování na Solaně přímo neexistuje. Místo toho použijte adresy odvozené z programu. Podobně jako mapování i adresy odvozené z programu umožňují vytvořit mapu z klíče nebo účtu na hodnotu uloženou v řetězci.

  • Na Solana jsou programy ve výchozím nastavení upgradovatelné. Inteligentní smlouvu lze upgradovat jednoduchým příkazem CLI solana program deploy <program_filepath>.

  • Při psaní solidní chytré smlouvy je běžné kontrolovat buď msg.sender nebo tx.origin. Na Solaně neexistuje žádný ekvivalent. Každá transakce může mít více signatářů a osoba odesílající transakci nemusí být nutně ta, kdo transakci podepsal.

Další informace o programech a jejich nasazení naleznete v této příručce.

Další informace

To jsou některé z nejkritičtějších rozdílů mezi vývojem na Ethereum a Solana. Je toho samozřejmě mnohem víc, co se naučit. A nejlepší způsob, jak začít, je skočit přímo do toho! Zde je několik zdrojů pro další kroky:

  • Solana Playground, kde mohou vývojáři psát, sestavovat a nasazovat programy Solana z prohlížeče

  • Úvod do vývoje Solana pomocí hřiště Solana

  • Podrobnější pohled na rozdíly mezi vývojem na Ethereu a Solaně

  • Solana Bootcamp