Demergent Labs значительно упрощает для разработчиков написание децентрализованных приложений, работающих на компьютере в Интернете.
TL;DR: пишите контейнеры на TypeScript с помощью Azle и следите за Demergent Labs для GraphQL, Python и многого другого для Интернет-компьютера.
Привет, я хотел бы представить вам новую компанию, которую я создал, под названием Demergent Labs. Наша цель — ускорить внедрение Web3 и Интернет-компьютера, децентрализованного логического компьютера, построенного на основе открытого протокола, который будет принадлежать и управляться независимыми организациями.
Demergent Labs устраняет барьеры для входа, упрощая разработчикам переход к Интернет-компьютеру и написание децентрализованных приложений, использующих его уникальные характеристики и преимущества по сравнению с централизованными облачными провайдерами и другими протоколами уровня 1.
Наш тезис прост: сосредоточив внимание на технологиях, которые действительно хорошо работают в мире Web2, мы считаем, что можем ускорить принятие Web3. Мы также можем значительно улучшить некоторые из технологий, которые сделали Web2 великим (децентрализованный реестр npm, кто-нибудь?).
Мы начинаем с трех флагманских проектов: Azle (TypeScript CDK), Sudograph (база данных GraphQL) и Kybra (Python CDK).
Разработка TypeScript на ИС
Фундаментальная прикладная единица Интернет-компьютера называется смарт-контрактом контейнера. Накопители содержат код и состояние вашего приложения, и пользователи взаимодействуют с ними с помощью простых вызовов RPC через Интернет. По сути, контейнеры предоставляют функции, которые можно вызывать с помощью сетевых запросов, таких как HTTP.
Разработчики могут использовать контейнеры для создания и развертывания приложений на компьютере в Интернете на любом языке, работающем на WebAssembly. За последние пару лет большинство разработчиков написали свои контейнеры на Motoko, новом языке программирования, созданном DFINITY Foundation, или Rust. Многие разработчики незнакомы с этими языками, и изучение нового языка со всеми его нюансами, идиомами, библиотеками, менеджерами пакетов и т. д. может стать для них серьезной проблемой.
Войдите в Azle, набор для разработки контейнеров, который позволяет разработчикам писать свои контейнеры на TypeScript (и технически также на JavaScript).
Это большое дело. TypeScript и JavaScript — одни из самых популярных языков программирования, когда-либо существовавших. У них есть годы (или, в случае JavaScript, десятилетия) сообщества, библиотек, документации, видео на YouTube, сообщений в блогах, подкастов и опыта. Миллионы разработчиков TypeScript и JavaScript уже любят использовать TypeScript и JavaScript. Зачем отнимать это у них?
Фонд DFINITY приложил много усилий, чтобы сделать Motoko и Rust первоклассными языками для IC. Они проделали большую работу, и растущее сообщество было очень продуктивным. Но есть несколько проблем с использованием Motoko и Rust.
Rust — очень сложный язык для изучения. Это системный или низкоуровневый язык. Он дает вам экстремальный контроль над многими аспектами среды, в которой он работает, и, следовательно, является более громоздким. Это красивый язык, который я люблю использовать, но многим разработчикам, особенно новичкам в программировании в целом, будет чрезвычайно трудно изучить Rust. Есть причина, по которой существуют языки высокого уровня.
Мотоко — язык высокого уровня. Он абстрагируется от многих трудностей языков низкого уровня, таких как Rust. Вот почему разработчики любят языки высокого уровня, они просто проще в использовании. Но мотоко — очень новый язык. Ему не хватает большого сообщества, множества библиотек, зрелой документации, видео на YouTube, сообщений в блогах, подкастов и, как правило, многолетнего опыта. Проще говоря, это новый язык, для которого эти ресурсы еще только появятся.
Azle предлагает альтернативу Rust и Motoko. Вот исходный код простого контейнера, написанного на TypeScript с помощью Azle. Это просто функция запроса только для чтения, которая возвращает «Hello World!»:
import { Query } from ‘azle’; export function helloWorld(): Query<string> { return ‘Hello World!’; }
Развертывание этого в IC с помощью простого dfx deploy --network ic
мгновенно позволит любому человеку в мире вызвать эту функцию helloWorld
и увидеть эту красивую фразу.
Вот исходный код простого контейнера, представляющего собой хранилище ключей и значений:
import { Query, Update, Opt } from ‘azle’; type Store = { [key: string]: string; }; let store: Store = {}; export function get(key: string): Query<Opt<string>> { return store[key] ?? null; } export function set(key: string, value: string): Update<void> { store[key] = value; }
Это база данных, ребята. Один dfx deploy --network ic
и вы открыли миру простую базу данных.
Вот и все, вы только что почувствовали, как писать контейнеры с помощью TypeScript и JavaScript на компьютере в Интернете. Давайте закончим наше обсуждение Azle несколькими мудрыми словами:
- Всегда делайте ставку на JS.
—Брендан Эйх, создатель JavaScript и соучредитель Mozilla - «Любое приложение, которое может быть написано на JavaScript, будет в конечном итоге написано на JavaScript.»
— Джефф Этвуд, соучредитель Stack Overflow и Stack Exchange
Помимо Azle, Demergent Labs работает над тем, чтобы предоставить IC неограниченную базу данных GraphQL (Sudograph) и Python (Kybra). Azle и Sudograph находятся в стадии бета-тестирования, а версия 1.0 ожидается к концу 2022 года (а возможно, и раньше). Ожидайте прямую интеграцию Sudograph в Azle. Идея состоит в том, чтобы взять типы TypeScript, которые вы уже определили для своего приложения, и создать целую базу данных со сложными запросами, мутациями, интерфейсом GraphQL и т. д. Это может выглядеть примерно так:
import { GQL, Principal, nat64, nat8, Opt, ID } from ‘azle’; type SignerProposal = GQL<{ id: ID; created_at: nat64; proposer: Principal; description: string; signer: Principal; votes: Vote[]; adopted: boolean; adopted_at: Opt<nat64>; rejected: boolean; rejected_at: Opt<nat64>; }>; type ThresholdProposal = GQL<{ id: ID; created_at: nat64; proposer: Principal; description: string; threshold: nat8; votes: Vote[]; adopted: boolean; adopted_at: Opt<nat64>; rejected: boolean; rejected_at: Opt<nat64>; }>; type TransferProposal = GQL<{ id: ID; created_at: nat64; proposer: Principal; description: string; destinationAddress: Address; amount: nat64; votes: Vote[]; adopted: boolean; adopted_at: Opt<nat64>; rejected: boolean; rejected_at: Opt<nat64>; }>; type Address = string; type Vote = { id: ID; voter: Principal; adopt: boolean; };
Azle не только сгенерирует Candid из вышеперечисленных типов, но также будет генерировать запросы и мутации GraphQL вместе с их преобразователями, что позволит вам мгновенно сохранять и извлекать данные сложными способами без необходимости писать этот код самостоятельно.
Кибра находится на более ранней стадии разработки, но, надеюсь, не сильно отстанет от Азле и Судографа. Каждый из этих проектов разрушит барьеры для принятия различными сообществами Web2 и сделает чрезвычайно простой разработку децентрализованных приложений на IC.
Есть много работы, которую нужно сделать в Web3 и для Интернет-компьютера. Мечта об огромной экосистеме Web3, работающей на бесконечно масштабируемом и неуязвимом для взлома децентрализованном компьютере, прекрасна. Мы еще не достигли этого, но мы прилагаем все усилия, чтобы достичь этого. Demergent Labs также экспериментирует с новыми механизмами интеллектуальной собственности, управления и финансирования, которые могут решить некоторые проблемы устойчивости, которые преследовали программное обеспечение с открытым исходным кодом с момента его создания.
Пожалуйста, по-своему, своими навыками и талантами помогите нам построить это удивительное новое будущее.
С уважением,
____