Ф'ючерси
Сотні безстрокових контрактів
TradFi
Золото
Одна платформа для світових активів
Опціони
Hot
Торгівля ванільними опціонами європейського зразка
Єдиний рахунок
Максимізуйте ефективність вашого капіталу
Демо торгівля
Вступ до ф'ючерсної торгівлі
Підготуйтеся до ф’ючерсної торгівлі
Ф'ючерсні події
Заробляйте, беручи участь в подіях
Демо торгівля
Використовуйте віртуальні кошти для безризикової торгівлі
Запуск
CandyDrop
Збирайте цукерки, щоб заробити аірдропи
Launchpool
Швидкий стейкінг, заробляйте нові токени
HODLer Airdrop
Утримуйте GT і отримуйте масові аірдропи безкоштовно
Launchpad
Будьте першими в наступному великому проекту токенів
Alpha Поінти
Ончейн-торгівля та аірдропи
Ф'ючерсні бали
Заробляйте фʼючерсні бали та отримуйте аірдроп-винагороди
Інвестиції
Simple Earn
Заробляйте відсотки за допомогою неактивних токенів
Автоінвестування
Автоматичне інвестування на регулярній основі
Подвійні інвестиції
Прибуток від волатильності ринку
Soft Staking
Earn rewards with flexible staking
Криптопозика
0 Fees
Заставте одну криптовалюту, щоб позичити іншу
Центр кредитування
Єдиний центр кредитування
Центр багатства VIP
Преміальні плани зростання капіталу
Управління приватним капіталом
Розподіл преміальних активів
Квантовий фонд
Квантові стратегії найвищого рівня
Стейкінг
Стейкайте криптовалюту, щоб заробляти на продуктах PoS
Розумне кредитне плече
Кредитне плече без ліквідації
Випуск GUSD
Мінтинг GUSD для прибутку RWA
Універсальне соціальне відновлення: як zk-SNARKs реалізують розділення логіки транзакцій гаманця та активів?
Автор оригіналу: @Toni Wahrstätter
Дата виходу: 12 вересня 2023 року
Переклад: Науково-дослідний інститут DeBox
Передмова
Віталік рекомендує використовувати zk-SNARK, щоб відокремити рахунки торгової логіки від рахунків, що містять активи. Це покращує конфіденційність, взаємодію з користувачем і соціальне відновлення в один клік. Дослідник Ethereum Тоні Варштеттер надає детальний аналіз цього прототипу гаманця, охоплюючи робочий процес і переваги.
Керування декількома обліковими записами може бути складним через низку причин, зокрема соціальне відновлення, конфіденційність, рівень 2 і загальні проблеми з користувачем. Використання прихованої адреси ускладнює роботу, оскільки для кожної взаємодії потрібен новий обліковий запис. Віталік рекомендує використовувати zk-SNARK, щоб відокремити рахунки торгової логіки від рахунків, що містять активи. Це покращує конфіденційність, взаємодію з користувачем і соціальне відновлення в один клік.
У двох словах, ми намагаємося досягти:
**Єдине соціальне відновлення без шкоди для конфіденційності. **
1. Традиційний метод
Проста, але загрозлива конфіденційність реалізація виглядає так:
Недоліком є те, що це відкрито пов’язує логічні облікові записи та облікові записи активів, тим самим ставлячи під загрозу конфіденційність.
2. Використовуйте ZK-SNARK
Використовуючи zk-SNARK, користувачі можуть довести, що вони мають право витрачати, не розкриваючи зв’язку між логічним холдинговим рахунком і активним рахунком.
Робочий процес такий:
1.1 Дерево Merkle містить значення slot0 і slot1 кожного існуючого контракту, відсортовані за датою або назвою.
1.2 Кожен користувач може створити дерево Merkle локально на основі останнього стану.
Користувач створює доказ zk, щоб довести, що він знає секрет у логічному обліковому записі. Детальний доказ пізніше.
Користувач надсилає zk-proof на рахунок зберігання активів.
Сертифікат підтвердження рахунку активів, що підтверджує таке:
4.1 Користувачі знають, де логіка.
4.2 Користувач знає секретне значення, яке хешується та зіставляється зі значенням, що зберігається в логічному обліковому записі.
4.3 Користувачі можуть реконструювати стан облікового запису, корінь дерева Merkle, який підтримується в канонічному ланцюжку (наприклад, попередньо скомпільований)
4.4 Використовуйте правильні випадкові числа (використовуються для перемикання ключів у логічних рахунках).
По суті, користувач може сказати: «У мене є підтверджений дозвіл від логічного облікового запису на виконання цієї дії, і я знаю місцезнаходження цього логічного облікового запису».
перевага
Крім того, шляхом додавання ще одного контракту (агрегатора) між логікою та договором утримання активів можна надати кілька доказів різних рахунків утримування активів в одній транзакції, що дозволяє розглядати обліковий запис майже як UTXO. Агрегатори зможуть отримати кілька сертифікатів zk і переслати їх на відповідні рахунки активів для перевірки. Звичайно, такий агрегатор міг би створювати зв’язки — включаючи конфіденційність — між окремими рахунками зберігання активів.
технічні деталі
Налаштування zk-SNARK включає приватні елементи:
1. Логічний балансовий рахунок
Прототип логічного холдингового рахунку може виглядати так:
твердість прагми >=0,7,0 <0,9,0;
контракт LogicHoldingAccount is Ownable { uint256 public slot0 = 0x1234; // хешований секрет uint256 public nonce = 0; // відслідковувати ключові зміни адреси публічного власника;
функція updateOwner(uint256 newValue) public onlyOwner { nonce += 1; slot0 = нове значення;
Цей контракт відстежує поточну логіку витрат власника (slot0) і дозволяє оновлення через функцію updateOwner.
2. Обліковий запис
твердість прагми >=0,7,0 <0,9,0;
контракт AssetHoldingAccount { uint256 public logicHoldingAccountHash = 1234…;
// Розмір скалярного поля, розмір базового поля, дані ключа перевірки тощо // …
функція verifyProof( uint [2] calldata _pA, uint [2] [2] calldata _pB, uint [2] calldata _pC, uint [2] calldata _pubSignals) public view повертає (bool val) { // код складання Snarkjs для перевірки доказів… // … }
// _pubSignals [0] - корінь contract-slot0||nonce Merkle дерева // _pubSignals [1] - функція адреси власника логіки hased ute( адреса, що підлягає оплаті, uint256 сума, uint [2] calldata _pA, uint [2] [2] calldata _pB, uint [2] calldata _pC, uint [2] calldata _pubSignals) public { contractRootPrecompile.getRoot(block.number) uint256 specifiedLogicHolder = _pubSignals [1] ; require(specifiedLogicHolder == logicHoldingAccountHash, “Не дозволено”);
bool validProof = verifyProof(_pA, _pB, _pC, _pubSignals) == істина; if (validProof) { (bool success,) = to.call{value:amount}(“”); вимагати (успіху); }}
receive() зовнішня оплата {
Рахунки для зберігання активів зберігають такі активи, як ETH, і дозволяють користувачам надавати підтвердження зняття коштів. Перевіривши відповідність указаногоLogicHolder logicHoldingAccountHash, власник може переконатися, що договір про утримування активів приймає докази лише з авторизованого логічного контракту про утримання, а не будь-якого довільного контракту.
Секрет, наданий як приватний сигнал під час побудови доказу, гарантує, що лише власник облікового запису, який містить логіку витрат, може отримати доступ до коштів з рахунку зберігання активів.
3. Схема
Наступну схему було розроблено за допомогою circom, повний код можна знайти тут.
прагма circom 2.0.2;
include “./modules/merkleTree.circom”;include “./modules/commitmentHasher.circom”;
шаблон Main(levels) { корінь входу сигналу; логічний вхід сигналуHoldingAddressHash; логічний вхід сигналуHoldingAddress; секрет входу сигналу; одноразовий вхід сигналу; Елементи вхідного шляху сигналу [levels] ; Індекси вхідного шляху сигналу [levels] ; компонент secretHasher = SecretHasher(); secretHasher.secret <== секрет; хешер компонента = CommitmentHasher(); hasher.logicHoldingAddress <== logicHoldingAddress; hasher.secret <== secretHasher.hashedSecret; hasher.nonce <== nonce; hasher.logicHoldingAddressHash === logicHoldingAddressHash; дерево компонентів = MerkleTreeChecker(рівні); tree.leaf <== hasher.commitment; дерево.корінь <== корінь; for ( i = 0; i < levels; i++) { tree.pathElements [i] <== pathElements [i] ; tree.pathIndices [i] <== pathIndices [i] ;
компонент main {public [root,logicHoldingAddressHash]} = Main(N);
Схема має загалом 7 сигналів, 2 з яких є загальнодоступними, а саме корінь дерева Merkle та хеш-адресу логічного облікового запису (який має бути хешований перед кодуванням у контракті про утримання активів, щоб спостерігачі не могли агрегувати обліковий запис) клас) на основі тієї ж логіки, що й рахунок власника).
на закінчення
У світі, де користувачам доводиться керувати кількома обліковими записами, потреба в єдиній функції соціального відновлення стає все більш важливою. Zk-SNARK можна використовувати в гаманцях, які реалізують розділення логіки/активів, дозволяючи користувачам використовувати «логіку» облікового запису A для здійснення витрат з облікового запису B без створення зв’язку між ними. Як перший крок, докази SNARK можна використовувати для дій, які є менш ризикованими, ніж витрати на активи. Наприклад, хорошою відправною точкою може бути дозвіл користувачам ініціювати «запити на зняття коштів». Якщо власник контракту на зберігання логічних даних не заперечує, користувач може завершити запит через деякий час.
Таким чином, власник логічного холдингового контракту все ще може втрутитися, хоча й порушуючи конфіденційність, у випадку, якщо станеться щось несподіване.