Мое путешествие с Solana India Fellowship — неделя 3

В криптопространстве происходит так много всего, что трудно уменьшить масштаб и увидеть прогресс. Происходит усыновление. — Том Шонесси

Привет любителям веб3. Я только что закончил свою третью неделю стипендии Solana India. Эта неделя была одной из самых напряженных в этом общении, и я действительно наслаждался ею. В этой статье мы обсудим создание ваших децентрализованных краудфандинговых кампаний с использованием блокчейна Solana, децентрализованного приложения-калькулятора, чтобы лучше узнать об якорях, каналах двойной оплаты и о том, как вы можете создать их в Solana. Мы углубимся в некоторые фрагменты кода, которые, как мне кажется, недоступны в Интернете и могут помочь в создании ваших смарт-контрактов.

Если вы еще не читали мой опыт (неделя 1 и неделя 2), я рекомендую вам сначала прочитать его, чтобы получить представление о web3, Solana и этом сообществе.

Что такое двунаправленные платежные каналы? 💸

Самым большим недостатком инфраструктуры блокчейна являются ее затраты на транзакцию. Каждый раз, когда вам нужно изменить состояние блокчейна, вам нужно выполнить транзакцию и заплатить за это изрядную комиссию. Теперь предположим, что вы ежедневно ходите в Starbucks, чтобы выпить кофе в вечерних перерывах с коллегами. Вы зарабатываете в крипто, и платить каждый день крипто-монетами будет дорого, так как вам нужно платить за газ каждый день. Могут быть случаи, когда сеть перегружена, и вы можете в конечном итоге платить в 2–3 раза больше за газ. Такой подход точно не масштабируется, и для решения этой проблемы вводятся платежные каналы.

Идея в том, что мы будем транслировать минимальное количество транзакций в блокчейне.

Журнал может вестись между двумя сторонами, и они вносят определенную сумму в кошелек, который является мультиподписным и может контролироваться только тогда, когда обе стороны подписывают транзакции. Рассмотрим сценарий, в котором Алан и Алекс открыли платежный канал. При открытии платежного канала они оба вносят по 1 BTC каждый. Они оба будут подписывать транзакции и являются владельцами мультиподписного кошелька, содержащего 2 BTC.

Теперь предположим, что Алан хочет дать Алексу 0,1 BTC; вместо того, чтобы транслировать ее в сети блокчейн, они подписывают эту транзакцию в автономном режиме и обмениваются ею. Другая сторона проверяет транзакцию, поддерживаются ли правильные балансы. В этом случае Баланс Алана будет 0,9 BTC, а Алекса 1,1 BTC.

Они могут продолжать делать это столько, сколько захотят, поскольку при подписании транзакций вне сети не взимается плата за транзакции. Как только они оба согласятся закрыть канал, любой может транслировать транзакцию в сети, и последнее состояние балансов будет передано обеим сторонам.

Вы можете найти код солидности для этой постановки задачи здесь.

В упражнении этой недели нам нужно разработать что-то подобное в Солане. У этой реализации на Солане есть определенные недостатки. Solana по-прежнему не позволяет извлекать метаданные и проверять подписи на стороне смарт-контракта. Из-за этого автономная подпись транзакции и обновление баланса всего за одну транзакцию немного сложны. Однако, поскольку комиссия за транзакции в Solana низкая, каналы оплаты не имеют особого смысла. Я создал смарт-контракт для создания кошелька с мультиподписью, когда обе стороны инициализируют учетную запись. Учетная запись должна быть подписана обеими сторонами, и они должны указать свои взносы в общий казначейский кошелек. В любое время, когда им нужно обновить баланс, они могут вызвать смарт-контракт, и обе стороны должны подписать транзакцию для поддержания консенсуса.

Поскольку вывод денег не может зависеть от обеих сторон, что приводит к конфликтам, закрыть канал может любое уполномоченное лицо. Контракт автоматически распределяет деньги обратно на исходные кошельки с последней обновленной раздачей. Самой большой проблемой, с которой я столкнулся в этом смарт-контракте, была передача SOL в среде смарт-контрактов. Это не так просто, как в Ethereum.

Solana осуществляет передачу SOL с помощью CPI (межпрограммных вызовов), что означает вызов других функций смарт-контрактов в вашем смарт-контракте. Важно отметить, что владелец учетной записи, с которой вы переводите SOL, всегда должен быть лицом, подписывающим транзакцию; в противном случае он потерпит неудачу. Я потратил три дня на отладку, и некоторые члены SuperTeam DAO помогли мне исправить это. Я провел определенные проверки во многих точках, а также реализовал пользовательские ошибки. Вы можете найти полный код приложения здесь.

Вы можете перевести SOL с одной учетной записи на другую с помощью этого небольшого фрагмента кода.

Полный код этого проекта можно найти здесь

Создание краудфандинговой кампании в Солане 👩‍👩‍👦‍👦

Идея этого квеста заключалась в создании децентрализованной краудфандинговой кампании в Солане. Прелесть в том, что нам не нужно интегрировать какие-либо сторонние инструменты, такие как Razorpay, Stripe, для приема платежей. Мы можем управлять всеми платежами, используя монеты Solana, а поскольку они находятся в блокчейне, сохраняется прозрачность. Обработка платежей является частью самой инфраструктуры Solana. Кроме того, в отличие от любой написанной вами программы для web2, весь код является общедоступным. Люди могут видеть, что вы делаете с деньгами, которые они отправляют на ваше программное обеспечение. Я использовал anchor для создания смарт-контракта, так как он разгружает много стандартного кода, и мне нужно работать только с логикой.

Все данные, которые мы хотим хранить в блокчейне Solana, хранятся в учетных записях. Учетные записи аналогичны файлам в таких операционных системах, как Linux, в том смысле, что они могут содержать произвольные данные, которые сохраняются после завершения жизненного цикла программы. Эти учетные записи также хранят метаданные, которые сообщают среде выполнения, кто и как может получить доступ к данным. Поскольку Солана следует за ржавчиной, я создал структуру для описания своей кампании, и она будет использоваться нашими учетными записями кампании для структурирования данных при создании учетной записи.

Мы можем отправлять деньги на эти счета кампании, и именно так мы будем финансировать наши счета, также называемые счетами, производными от программы (PDA). Как и в случае с двунаправленным платежным каналом, мы использовали CPI для перевода солей из кошельков пользователей в кошельки кампании.

Этот квест помог мне понять, как решить реальную проблему с помощью web3. Мы можем расширить эту проблему во многих различных направлениях, например, платежи могут быть сняты только менеджерами/владельцами краудфандинга, или они должны предоставить надлежащие доказательства того, где деньги используется перед снятием средств. Поскольку доказательства будут храниться в блокчейне, их нельзя изменить, что сделает процесс прозрачным.

Полный код этого квеста можно найти здесь

Создание приложения-калькулятора на Solana ➗

Этот квест — идеальный стартовый квест для работы с якорной структурой. Идея состоит в том, чтобы построить основные функции калькулятора, который сохраняет окончательный результат в цепочке. Этот квест дает вам исчерпывающие знания о создании, тестировании и развертывании вашего первого смарт-контракта. Якорь похож на каску для Соланы; он разгружает много избыточного кода и упрощает тестирование с помощью узлов блокчейна в памяти. Квест был достаточно простым, и любой, кто попытается выполнить его, не столкнется с трудностями при работе с ним.

Полный код этого квеста можно найти здесь

Основные выводы 🔑

1. Солана поначалу может показаться очень сложной, она не такая уж интуитивная, но вы должны придерживаться и быть последовательным, чтобы добиться мастерства.

2. Если вы застряли в каком-то месте очень надолго, лучше спросить в активных сообществах Соланы. Существует высокая вероятность того, что кто-то может помочь вам с решением или возможным обходным путем.

3. Нет гарантии, что то, что имеет смысл в Эфириуме, будет иметь смысл и в Солане. Двунаправленные платежные каналы являются одним из примеров.

4. Публикация дерьма в Твиттере может помочь вам сбалансировать стресс от разработки в Солане :P

5. Иногда вам нужно думать об обходных путях, а не о самом очевидном решении. Может случиться так, что обходные пути могут занять меньше времени, а также могут решить ваш вариант использования.

Ресурсы㈾

1. https://project-serum.github.io/anchor/getting-started/introduction.html (для начала с анкора)

2. https://docs.solana.com/developing/programming-model/transactions (Чтобы понять о транзакциях Solana)

3. https://docs.solana.com/developing/programming-model/calling-between-programs (чтобы понять CPI в Solana)

4. https://medium.com/coinmonks/how-to-audit-solana-smart-contracts-part-4-the-anchor-framework-ef42d944f086 (Полезно прочитать об аспектах безопасности Solana)