
Щоб зробити нову модель трохи зрозумілішою, давайте порівняємо її з двома найпоширенішими моделями зберігання даних на сьогоднішній день, якими є UTXO (біткойн) та модель облікового запису (Ethereum). Оскільки модель запису є своєрідним гібридом цих двох, це може допомогти освіжити інформацію про обох, перш ніж заглибитися в неї.
Біткойн (UTXO)
Модель UTXO була оригінальною парадигмою зберігання, в якій виражалося володіння біткойнами. Як це працює з точки зору дуже високого рівня, так це те, що кількість BTC по суті схожа на пучки магнітів. Коли Ви отримуєте певну кількість BTC, вона надходить до вас як єдиний об'єкт; скажімо, ви отримуєте від когось 2 BTC. Ці 2 BTC зберігаються у вашому гаманці як єдиний блок з 2 BTC, і якщо ви хочете надіслати будь-яку суму грошей комусь, ви б використали цей блок 2 BTC як Вхід для вашої транзакції.
У транзакції цей блок потім "розділяється' на всі його вихідні дані. Скажімо, ви надсилаєте другові 0,5 BTC — тоді цей блок у 2 BTC розбивається на блок у 0,5 BTC та 1,5 BTC (мінус невелика сума зборів, звичайно). Потім блок 0.5 BTC надсилається вашому другові, а блок 1.5 BTC надсилається вам. Тепер кожен з ваших гаманців містить один блок BTC, але в різних кількостях. Природно, коли ви починаєте отримувати більше транзакцій, ви створюєте кілька блоків у своєму гаманці. Скажімо, ви отримали транзакції 1,2, 0,6 та 0,8 BTC, і ви намагаєтесь здійснити транзакцію 2,6 BTC (всю суму). Потім транзакція прийме ці 3 блоки як вхідні дані та з'єднає їх (як магніти!), Щоб створити результат для вашого одержувача.
У цій моделі володіння монетами дуже чітко визначено, а ресурс цілком відчутний. Беручи участь у транзакціях, ви просто обмінюєтесь шматочками того, що отримали з часом. Легко сказати, звідки взялися гроші і як вони рухалися з часом.
Ethereum (Account model)
The second great innovation in blockchain storage models is that the Account model does away with the fragmentation seen in the UTXO model. Instead, any type of specific account data is stored monolithically in a single storage structure. In the case of the blockchain native currency, this has the nice effect that any amount of money held always takes up the same amount of storage, as a single piece of information is just incremented or decremented over time, rather than having separate bits of data being moved around.
This account storage contains the amount of ETH held by the user, as well as a special number that increments for each transaction sent. This is used to avoid double-spending attacks (also known as a ‘nonce’). However, it can contain much more than that. Ethereum accounts can hold an arbitrary amount of bytecode and storage which are essential for smart contract functionality — this is how execution is facilitated on the Ethereum network, and how it innovated the world’s first on-chain execution model. An address can hold any amount of code that describes the functionality of a smart contract and contains a blob of storage associated with that smart contract. The important distinction to make is that all of the contract bytecode and data are kept in the same address. No matter how many people have interacted with it, all of the scores are kept on this smart contract address. All the data is central to this contract address, very much unlike the bitcoin storage model, where information is fragmented and put back together again as it moves through different accounts.
Алео (модель запису)
Потім з'явилася модель запису, мета якої - об'єднати найкраще з обох світів. Вперше розроблений Aleo, він вносить щось нове в таблицю, дозволяючи як програмованість Ethereum, так і використовує фрагментацію стану, що спостерігається в біткойні.
Для смарт-контрактів в Aleo байт-код контракту фактично зберігається монолітно-що має сенс, тому що ви не можете фрагментувати фрагмент коду. Однак, чим вона відрізняється від Ethereum, так це тим, що біти стану, що належать облікових записів, які взаємодіяли з нею, фактично зберігаються в самих облікових записах. Таким чином, користувачі мають фактичне право власності на свої дані для певного смарт-контракту. Ці біти даних-це те, що ми називаємо "записами", і вони можуть містити будь-яку довільну кількість даних. Трохи схожий на UTXOS, який ми бачимо в біткойнах! Однак дані всередині цих записів можуть бути змінені, збільшені, зменшені і т.д. щоб відобразити зміни стану, так само, як стан змінюється в Ethereum.
Хороший спосіб думати про це-це прекрасне поєднання програмованості Ethereum з концепцією відчутних ресурсів UTXO в біткойнах. Крім того, в Aleo ці записи можуть бути зашифровані і, таким чином, містити особисту інформацію, з підтримкою роботи з зашифрованими даними на рівні протоколу, що спрощує користувачам і розробникам роботу з ними, міркування і вираження.
Another important distinction to make here is that the records do not actually get passed around like UTXOs are. This is why we consider it to be a hybrid model between UTXOs and the Account model. Account-specific state is stored in a fragmented manner, but mutated in place accordingly and never passed around.
Quite a lot, actually! This unique storage paradigm may seem a bit unintuitive at first — why would we fragment data like this when there’s already a perfectly viable model without it? Well, a nice property of this paradigm is that individual state is no longer correlated in the same way that it is in the Ethereum model, where instead all state is packed together and mutations need to happen step-by-step, as race conditions can occur otherwise.
What this gives way to, is that state can now be accessed concurrently, as long as it is clear that there are no conflicting read/write access attempts within blocks. Execution can thus be done in parallel since the state is not monolithic anymore, and provers can infer based on context which transactions are unconflicting. This does wonders for the throughput of the Aleo network. As the days of sequential, redundant execution are no more; we can now leverage (specialized) hardware to its full potential to alleviate throughput bottlenecks, both by delegating execution off-chain and performing it in parallel.
Наївно кажучи, ми вже можемо багато чого досягти в області масштабування, просто використовуючи модель запису для зберігання в блокчейні Aleo. Поки не виникає конфліктів доступу до стану, виконання може бути розпаралелено. Крім того, виконання не потрібно повторювати, оскільки "перевіряючі" запускатимуть програми поза ланцюжком і просто завантажуватимуть відмінності в стані та перевірки довіри в ланцюжку, що робить набагато економічнішим запуск дорогих програм dApps.
Але ми можемо зробити це на крок далі, і це почне нагадувати модель, яку Ethereum в даний час використовує для масштабування — згортки. Програми можуть вибирати послідовність транзакцій своїх користувачів і збирати їх протягом певного періоду часу. Після чого вони можуть бути об'єднані і об'єднані в одну транзакцію. Поселення відбуватиметься періодично, майже нічого не коштуватиме (оскільки мутації поєднуються разом) і призведе лише до однієї різниці станів та доказів достовірності. Цікаво, що Aleo дозволяє створювати накопичувальні пакети для конкретних додатків без необхідності запускати додаткові ланцюжки блоків або піклуватися про будь-яку зайву інфраструктуру, таку як мости. По суті, він отримує всі переваги від масштабування без будь-яких невід'ємних ризиків, пов'язаних з накопиченням.
