За останні кілька місяців Neon Labs співпрацювала з кількома організаціями для тестування та розгортання різних протоколів і проектів на Neon EVM. Останнє партнерство Neon Labs із Zpoken привело до успішного розгортання протоколу Compound на Neon EVM. Розгортання Compound на Neon EVM служить для подальшого тестування готовності Neon EVM до виробництва та адаптації складних dApps до його екосистеми.
Compound — це програма DeFi dApp, яка вперше була запущена у вересні 2018 року на Ethereum. Протокол дозволяє користувачам позичати та позичати криптовалюти без посередника.
Zpoken — це фірма з розробки повного пакету Web3. Компанія виконала понад 50 проектів і має 30 активних розробників у 10+ блокчейн-мережах. Спеціалізація Zpoken включає висококласну розробку web3, криптографію, ринки капіталу, дизайн токенів і ліквідність.
Основною метою вправ із Zpoken було перевірити продуктивність і функціональність Neon EVM під час розгортання контрактів протоколу Compound у Neon Devnet.
Після успішного розгортання Zpoken провів модульні тести протоколу. Мета полягала в тому, щоб забезпечити відповідну продуктивність і робочий процес протокольних контрактів, а також правильність розрахунків і логіки контракту.
Zpoken протестував такі функції смарт-контракту, щоб перевірити продуктивність Compound на Neon EVM:
Розгортання складних контрактів у мережі Neon Devnet;
Test cToken contract functions (constructor, mint, mintFresh, redeem, redeemFreshTokens, redeemFreshAmount, liquidateBorrow, liquidateBorrowFresh, seize, _setComptroller, transfer, balanceOfUnderlying, borrow, borrowRatePerBlock, supplyRatePerBlock, borrowBalanceCurrent, borrowBalanceStored, exchangeRateStored, getCash, borrowFresh, repayBorrowFresh, repayBorrow, repayBorrowBehalf, accrueInterest, _setInterestRateModel, _setInterestRateModelFresh, _setReserveFactor, _setReserveFactorFresh, _reduceReserves, _reduceReservesFresh, admin, pendingAdmin, _setPendingAdmin, _acceptAdmin);
Перевірте функції контракту CEther (getCashPrior, doTransferIn, doTransferOut, mintExplicit, mintFallback, redeemCTokens, redeemUnderlying, borrow, borrowFresh, repayBorrow, repayBorrowFresh, repayBorrowBehalf, addReserves);
Тестові контрактні функції (constructor, _setLiquidationIncentive, _setPriceOracle, _setCloseFactor, _setCollateralFactor, _supportMarket, liquidateBorrowAllowed, redeemVerify, liquidateCalculateAmountSeize, _setPauseGuardian, setting paused, liquidity, getAccountLiquidity, getHypotheticalAccountLiquidity, admin, pendingAdmin, _setPendingAdmin, _acceptAdmin);
Перевірте контрактні функції CompoundLens (cTokenMetadata, cTokenMetadataAll, cTokenBalances, cTokenBalancesAll, cTokenUnderlyingPrice, cTokenUnderlyingPriceAll, getAccountLimits, governance, comp);
Перевірити функції контракту PriceOracleProxy (constructor, getUnderlyingPrice);
Перевірте функції контракту Timelock (constructor, setDelay, setPendingAdmin, acceptAdmin, queueTransaction, cancelTransaction, executeTransaction, executeTransaction, queue and cancel empty);
Перевірте функції контракту InterestRateModel (baseP025-slopeP20, jump rate tests, baseP05-slopeP45, isInterestRateModel, calculates correct borrow value, jump-rate);
Перевірте функції контракту CCompLikeDelegate(_delegateCompLikeTo);
Перевірте контрактні функції Maximillion (constructor, repayBehalf);
Перевірте функції контракту DAIInterestRateModelV3 (constructor, getBorrowRate, getSupplyRate);
Перевірте контрактні функції Flywheel (_grantComp, getCompMarkets, _setCompSpeeds, updateCompBorrowIndex, updateCompSupplyIndex, distributeBorrowerComp, distributeSupplierComp, transferComp, claimComp, claimComp batch, harnessRefreshCompSpeeds, harnessSetCompSpeeds, harnessAddCompMarkets, updateContributorRewards, _setContributorCompSpeed).
Обсяг тестування зосереджено на наступних розгорнутих контрактах:

Перед розгортанням і тестуванням Zpoken вніс дві основні зміни в смарт-контракти протоколу Compound:
Першу зміну внесено до констант GRACE_PERIOD і MINIMUM_DELAY у Timelock.sol. Константи впливають на часові обмеження для виконання функцій у контрактах. Зміни були необхідні, оскільки команда Zpoken проводила тести на живих мережевих вузлах Neon і не могла маніпулювати часом і номерами блоків.
Друга зміна відкоригувала адресу зовнішнього контракту Comp в контракті Comptroller.sol (через функцію getCompAddress()).
Після внесення змін до контракту команда Zpoken розгорнула Neon Devnet зі сховища neon-smart-contract-dev/compound-finance за допомогою команди yarn deploy -n neon.
Після розгортання було проведено тестування зі сховища neon-smart-contract-dev/compound-finance. Щоб запустити тести, спочатку потрібно було налаштувати локальне середовище Neon і додати приватні ключі до ~/.neon/neon. Команда для запуску тестів була. start.sh
Тести також проводилися в локальному середовищі Neon через Docker у репозиторії neon-smart-contract-dev/compound-finance. Етапи проведення тесту такі:
Запустіть локальний вузол Neon за допомогою proxy-model.py
Створіть образ докера за допомогою sudo docker build -t complex-protocol
Запустіть контейнер за допомогою sudo docker run -it — net=host complex-protocol
Результати проекту включають сценарії розгортання та тестування, а також інтеграцію та модульні тести. Доступ до сценаріїв розгортання та тестування можна отримати через репозиторій. Виконані інтеграційні та модульні тести доступні в репозиторії GitHub і можуть бути запущені в контейнері Docker для повторного відтворення сценаріїв тестування.
Zpoken успішно розгорнув і протестував базові контракти протоколу Compound, а також пул обміну. Розгортання та відповідні тести показали, що Neon EVM працює правильно та повністю сумісний з Ethereum щодо запуску складних dApps, таких як Compound. Усі інтеграційні та модульні тести пройдено. Розгортання контракту, логіка, математика та функціональність працюють, як очікує команда розробників Compound. Єдине, що не вдалося протестувати, це Compound Web Application через відсутність Compound API у публічних репозиторіях GitHub.
Zpoken також виявив дві проблеми з платформою Neon:
Для розгортання та тестування складених контрактів потрібна була підтримка RPC eth_accounts. Метод реалізовано, але є помилки, які Neon Labs наразі вирішує.
Багатопотокове виконання тестових сценаріїв, реалізоване в оригінальних складних тестах, не підтримується мережею Neon. Тести були створені для Ganache, персонального симулятора блокчейну Ethereum, а не для живого вузла. Спроба використати кілька потоків призводить до помилок «nonce over low». Щоб уникнути помилки, кожен сценарій слід запускати з іншої адреси розгортача. Однак у тестах, які використовують кілька потоків в одному тесті, помилки неможливо уникнути. Тести не можна було запустити в цих сценаріях, тому їх було пропущено.
ВАМ час розгорнути власні розумні контракти на Neon EVM. Обов’язково діліться з нами своїм відгуком про Neon EVM протягом усього процесу. Якщо у вас виникли проблеми або вам потрібні додаткові вказівки, перегляньте наші документи Neon або зверніться до члена команди на Discord. Ми знаємо, що ви створите щось чудове!
Переклад статті підготував:
Sivic007#6940

