Ф'ючерси
Сотні безстрокових контрактів
TradFi
Золото
Одна платформа для світових активів
Опціони
Hot
Торгівля ванільними опціонами європейського зразка
Єдиний рахунок
Максимізуйте ефективність вашого капіталу
Демо торгівля
Вступ до ф'ючерсної торгівлі
Підготуйтеся до ф’ючерсної торгівлі
Ф'ючерсні події
Заробляйте, беручи участь в подіях
Демо торгівля
Використовуйте віртуальні кошти для безризикової торгівлі
Запуск
CandyDrop
Збирайте цукерки, щоб заробити аірдропи
Launchpool
Швидкий стейкінг, заробляйте нові токени
HODLer Airdrop
Утримуйте GT і отримуйте масові аірдропи безкоштовно
Launchpad
Будьте першими в наступному великому проекту токенів
Alpha Поінти
Ончейн-торгівля та аірдропи
Ф'ючерсні бали
Заробляйте фʼючерсні бали та отримуйте аірдроп-винагороди
Інвестиції
Simple Earn
Заробляйте відсотки за допомогою неактивних токенів
Автоінвестування
Автоматичне інвестування на регулярній основі
Подвійні інвестиції
Прибуток від волатильності ринку
Soft Staking
Earn rewards with flexible staking
Криптопозика
0 Fees
Заставте одну криптовалюту, щоб позичити іншу
Центр кредитування
Єдиний центр кредитування
Центр багатства VIP
Преміальні плани зростання капіталу
Управління приватним капіталом
Розподіл преміальних активів
Квантовий фонд
Квантові стратегії найвищого рівня
Стейкінг
Стейкайте криптовалюту, щоб заробляти на продуктах PoS
Розумне кредитне плече
New
Кредитне плече без ліквідації
Випуск GUSD
Мінтинг GUSD для прибутку RWA
Full Chain Game 101: попередньо скомпільовані контракти
**Що таке попередньо скомпільований контракт? **
Попередньо скомпільовані контракти — це компромісний метод, який використовується в EVM для надання більш складних бібліотечних функцій (зазвичай використовується для складних операцій, таких як шифрування та хешування). Його також можна розуміти як спеціальний контракт, і ці функції не підходять для написання кодів операцій. Вони підходять для контрактів, які є простими, але часто викликаються, або контрактів, які є логічно фіксованими, але потребують інтенсивних обчислень. Попередньо скомпільовані контракти реалізуються за допомогою клієнтського коду вузла, і оскільки для них не потрібен EVM, вони працюють швидко. Це також дешевше для розробника, ніж використання функцій, які запускаються безпосередньо в EVM.
Як видно з наведеного нижче коду, функція run у контракті evm.go має дві гілки: перша гілка призначена для створення екземпляра параметра індексу через попередньо скомпільований індекс для визначення попередньо скомпільованого контракту, а друга гілка призначена для визначення попередньо скомпільованого контракт, якщо це не попередньо скомпільований контракт, який буде викликано evm.
// run запускає заданий контракт і піклується про запуск попередніх компіляцій із поверненням до інтерпретатора байтового коду. func run(evm *EVM, contract *Contract, input []byte, readOnly bool) ([]byte, error) { if contract.CodeAddr != nil { precompiles := PrecompiledContractsHomestead if evm.ChainConfig().IsByzantium(evm.BlockNumber) { precompiles = PrecompiledContractsByzantium } if p := precompiles[*contract.CodeAddr]; p != nil { return RunPrecompiledContract(p, input, contract) } } для _, інтерпретатор := діапазон evm.interpreters { if interpreter.CanRun(contract.Code) { if evm.interpreter != інтерпретатор { // Переконайтеся, що покажчик інтерпретатора встановлено назад // до поточного значення після повернення. defer func(i Інтерпретатор) { evm.interpreter = i }(evm.інтерпретатор) evm.interpreter = інтерпретатор } return interpreter.Run(contract, input, readOnly) } } повертає нуль, ErrNoCompatibleInterpreter }
Якщо висловити графічно, то конкретна логіка така:
Отже, де вузьке місце попередньо скомпільованого контракту?
Зараз Ethereum має вісім попередньо скомпільованих контрактів:
Ви бачите, що попередньо скомпільовані контракти з першого по четвертий забезпечують базовий підпис, хеш та інші функції шифрування, а з п’ятого по восьмий надають операції еліптичної кривої, пов’язані з zk-snark.
Тож виникає запитання: чому попередня компіляція Ethereum підтримує лише вісім попередньо скомпільованих контрактів? Хіба попередньо скомпільовані контракти не зменшують споживання газу? А чому б безпосередньо не імплантувати ECS (фреймворк цілої ланцюжкової гри) у попередньо скомпільований контракт Ethereum?
Насправді є три основні причини:
Перш за все, код попередньо скомпільованого контракту потрібно інтегрувати в код клієнтського вузла, що збільшує складність клієнта. По-друге, верифікаційні вузли можуть відфільтрувати розрахунок попередньо скомпільованих контрактів з міркувань безпеки, тому більшість запитів на попередньо скомпільовані контракти виконуються повними вузлами.Наразі у світі існує лише 4000-6000 повних вузлів Ethereum, а верифікаційних – 500 000 вузлів, що справді є набагато більш централізованим, ніж некомпільовані контракти.
Для підтримки попередньо скомпільованих контрактів потрібен процес EIP. Наприклад: EIP-196 додає два попередньо скомпільовані контракти, ECADD() і ECMUL(), на кривій alt_bn128. EIP-197 додає функцію сполучення на кривій alt_bn128. По суті, це зробити конфіденційність доступною в Ethereum для підтримки, а весь процес EIP довгий і елегантний, і очікування проходження EIP не є реальною проблемою.
Це не так багато для пояснення, це дуже інтуїтивно зрозуміло.
Яку роль відіграє попередньо скомпільований контракт у всій ланцюжковій грі?
Попередньо скомпільовані контракти пропускають EVM і виконуються безпосередньо через вузли, що може підвищити ефективність обчислень, але в той же час знизити ступінь децентралізації всього ланцюжка. Попередня компіляція основної логіки часто використовуваних ігор може оптимізувати продуктивність таких ігор. Різні типи ігор мають різну ключову логіку. Таким чином, для виділеного ланцюжка певного типу гри його попередньо скомпільований дизайн може значно оптимізувати потреби цього типу гри. У процесі ітерації гри найефективніша попередньо скомпільована комбінація контрактів буде поступово оптимізована.