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 несколькими мудрыми словами:

Помимо 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 также экспериментирует с новыми механизмами интеллектуальной собственности, управления и финансирования, которые могут решить некоторые проблемы устойчивости, которые преследовали программное обеспечение с открытым исходным кодом с момента его создания.

Пожалуйста, по-своему, своими навыками и талантами помогите нам построить это удивительное новое будущее.

С уважением,

@lastmjs

____

Начните строить на smartcontracts.org и присоединяйтесь к сообществу разработчиков на forum.dfinity.org.