За последние несколько месяцев Neon Labs сотрудничала с несколькими организациями для тестирования и развертывания различных протоколов и проектов на Neon EVM. Последнее партнерство Neon Labs с Zpoken привело к успешному развертыванию протокола Compound на Neon EVM. Развертывание Compound на Neon EVM служит для дальнейшего тестирования готовности Neon EVM к производству и интеграции сложных приложений dApp в его экосистему.
Compound — это децентрализованное приложение DeFi, впервые запущенное в сентябре 2018 года на Ethereum. Протокол позволяет пользователям одалживать и брать взаймы криптовалюты без посредника.
Кто такой Zpoken?
Zpoken — это компания, занимающаяся разработкой полного стека Web3. Компания реализовала более 50 проектов и имеет 30 активных разработчиков в более чем 10 сетях блокчейнов. Zpoken специализируется на высококлассной веб-разработке, криптографии, рынках капитала, дизайне токенов и ликвидности.
Наша цель
Основной целью учений с 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, redeemCToken, redeemUnderlying, заимствование, заимствованиеFresh, repayBorrow, repayBorrowFresh, repayBorrowBehalf, addReserves);
- Проверка функций контракта Контроллера (конструктор, _setLiquidationIncentive, _setPriceOracle, _setCloseFactor, _setCollateralFactor, _supportMarket, ликвидироватьBorrowAllowed, redeemVerify, ликвидироватьCalculateAmountSeize, _setPauseGuardian, настройка приостановлена, ликвидность, getAccountLiquidity, getHypotheticalAccountLiquidity, Admin, _setPendingAdmin);
- Проверка функций контракта CompoundLens (cTokenMetadata, cTokenMetadataAll, cTokenBalances, cTokenBalancesAll, cTokenUnderlyingPrice, cTokenUnderlyingPriceAll, getAccountLimits, управление, комп);
- Тестовые функции контракта PriceOracleProxy (конструктор, getUnderlyingPrice);
- Тестовые функции контракта Timelock (конструктор, setDelay, setPendingAdmin, acceptAdmin, queueTransaction, cancelTransaction, executeTransaction, executeTransaction, очередь и отмена пусты);
- Тестовые функции контракта InterestRateModel (baseP025-slopeP20, тесты скорости скачка, baseP05-slopeP45, isInterestRateModel, вычисляет правильную стоимость займа, скорость скачка);
- Протестируйте функции контракта CCompLikeDelegate (_delegateCompLikeTo);
- Протестировать контрактные функции Maximillion (конструктор, repayBehalf);
- Протестировать функции контракта DAIInterestRateModelV3 (конструктор, getBorrowRate, getSupplyRate);
- Протестируйте функции контракта маховика (_grantComp, getCompMarkets, _setCompSpeeds, updateCompBorrowIndex, updateCompSupplyIndex, DistributBorrowerComp, distributSupplierComp, transferComp, ClaimComp, ClaimComp пакет, жгутRefreshCompSpeeds, жгутSetCompSpeeds, жгутAddCompMarkets, 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 составной протокол.
- Запустите контейнер с помощью sudo docker run -it — net=host Compound-Protocol
Результаты проекта включают сценарии развертывания и тестирования, а также интеграционные и модульные тесты. Доступ к сценариям развертывания и тестирования можно получить через репозиторий . Выполненные интеграционные и модульные тесты доступны в репозитории GitHub и могут быть запущены в контейнере Docker для повторного воспроизведения сценариев тестирования.
Выводы
Zpoken успешно развернул и протестировал базовые контракты протокола Compound, а также пул подкачки. Развертывание и связанные с ним тесты показали, что Neon EVM работает правильно и полностью совместим с Ethereum в отношении запуска сложных приложений dApp, таких как Compound. Все интеграционные и модульные тесты пройдены. Развертывание контракта, логика, математика и функциональность работают, как и ожидалось командой разработчиков Compound. Единственное, что не удалось протестировать, — это Compound Web Application из-за отсутствия Compound API в общедоступных репозиториях GitHub.
Zpoken также выявил две проблемы с платформой Neon:
- Для развертывания и тестирования составных контрактов требуется поддержка RPC eth_accounts. Метод был реализован, но есть ошибки, которые Neon Labs в настоящее время устраняет.
- Многопоточное выполнение тестовых сценариев, реализованное в исходных Compound-тестах, не поддерживается сетью Neon. Тесты были созданы для Ganache , персонального симулятора блокчейна Ethereum, а не для живой ноды. Попытка использовать несколько потоков приводит к ошибкам «nonce too low». Чтобы избежать ошибки, каждый скрипт должен запускаться с другого адреса развертывателя. Однако в тестах, использующих несколько потоков внутри одного теста, ошибки не избежать. Тесты не могли быть запущены в этих сценариях и были пропущены.
Заключение
Пришло время ВАМ развернуть свои собственные смарт-контракты в Neon EVM. Обязательно делитесь с нами своими отзывами о Neon EVM на протяжении всего процесса. Если у вас есть какие-либо проблемы или вам нужны дополнительные рекомендации, ознакомьтесь с нашей Neon Docs или обратитесь к члену команды в Discord . Мы знаем, что вы создадите что-то великое!