Populární témata
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Minulý týden @redacted_noah poslal tirádu o tom, jak je Zero Copy™️ na @anchorlang perf alfa pro každého vývojáře @solana
Myslel jsem, že nulová kopie se používá pouze pro velmi velké účty
Uvědomil jsem si, že nemám ponětí, proč ho někdy používám
Rozhodl jsem se ponořit do hloubky, dovolte mi, abych vás vzal s sebou 👇

@SuperteamFRANCE @SuperteamJapan Za prvé, proč vůbec mluvíme o analýze dat s nulovou kopií?
Výchozí analyzátor dat Anchor se nazývá Borsh.
Při volání instrukce Anchor Borsh zkopíruje data vašeho účtu do struktury Borsh (do paměťového slotu zvaného "halda", více o tom později)
Když do výuky zahrnete účet, použijete formát, který vypadá takto.

Při použití nulové kopie bude váš kód vypadat takto.

Tak co se tam vlastně děje?
Není to zřejmé hned od začátku!
Nejprve musíme pochopit, jak Solana využívá data své aplikace Rust: haldu, zásobník a prostor "nulové kopie".
1. Zásobník:
Zde ukládáme lokální a jednoduché datové typy.
Získáte 4 KiB místa pro každý zásobník, každé volání funkce dostane vlastní alokaci 4 KiB.
"Narušení přístupu v rámci zásobníku X na adrese XXXXX velikosti X." je druh chyby, která se zobrazí, když překročíte maximální velikost zásobníku.
V Anchor je první opravou této chyby použití "Boxu" k přesunutí dat ze zásobníku do "haldy" 👇

2. Hromada v Solana:
Programy běží ve virtuálním počítači BPF s haldou 32 kB ve výchozím nastavení. Jedná se o jednorázovou alokaci pro jednu celou invokaci.
Zde byste ukládali dynamičtější datové typy (Vec, String)
Deserializace účtů pomocí Borsh kopíruje data do haldy a rychle zabírá místo
3. Nulová kopie:
Pokud musíte obejít haldu a zásobník, protože dojde k překročení celého datového rozpočtu (hodně CPI, u velkých účtů), použijete nulovou kopii.
Nulová kopie umožňuje pracovat s daty, aniž byste je museli nejprve přidělovat ani kopírovat přeskočením deserializace.
Kdy má Zero copy smysl?
1. Velká data
2. Práce s mnoha CPI
Pokračujme:
1. Velká data
Řekněme, že chcete sledovat seznam peněženek přímo do vašeho státu, abyste mohli provádět plné kontroly onchain (pokud to potřebujete udělat, podívejte se na merkle stromy 😅, toto není způsob, jak to udělat)
Stejně jako v tombole, uložení adresy každého účastníka před spuštěním konečného losování a výběrem vítěze.
To snadno přesáhne 32kb paměti. Jeden účastník = 32 bajtů, takže pokud plánujete být úspěšní a vyčleníte prostor pro 1000 účastníků, už to spotřebovává celou velikost haldy (32 000 bajtů)
V této situaci můžete přejít na nulovou kopii, abyste obešli omezení a umožnili práci s mnohem většími účty, aniž byste narazili na limity haldy nebo zásobníku.
JAK OPRAVIT?
Jednoduchý! Stačí všude používat Zero Copy.
Je to tak snadné 👇 (přidejte atribut makra #[account("zero_copy")] do účtu RootEscrow)
ALE Zero copy přichází s další výzvou, a to důvodem, proč si Anchor vybral Borsh na prvním místě: zarovnání bajtů.

Zarovnání bajtů je nízkoúrovňová technika, které by měl každý vývojář Solana rozumět, ať už s nulovou kopií nebo ne
Vyžaduje, aby struktury byly bezpečné pro nulové kopírování prostřednictvím bytemuck (zarovnání bajtů může způsobit paniku, pokud není správně zpracováno)
Brzy 🔥 zveřejním další vlákno na toto *vzrušující* téma
Mezitím @legendsdotfun se podívám na produkt, na kterém pracuji od poloviny září a účastním se hackathonu @colosseum Cypherpunk
Zaregistrujte svůj produkt, dejte hlasy nadějným novým týmům
Nechme každou legendu solany zazářit 🤝
Velké poděkování patří kozám:
- @redacted_noah
- @blockiosaurus
- @0xIchigo
Pro korekturu tohoto vlákna o živých objevech!
5,61K
Top
Hodnocení
Oblíbené

