Программирование смарт-контрактов — сравнение Daml и Rust

Программирование смарт-контрактов — сравнение Daml и Rust

17 ноября 2022 г.

В этом блоге будут рассмотрены Daml и Rust, два популярных языка программирования, которые можно использовать для написания смарт-контрактов. Поскольку сравнение двух языков никогда не является сравнением яблок с яблоками, вместо этого мы проведем различие между ними в конкретных сценариях и контексте, в котором они используются.

Мы будем основывать эту статью на следующих критериях и ограничим обсуждение контекстом блокчейна и многостороннего сотрудничества.

  1. Конфиденциальность
  2. Позиция в стеке технологической архитектуры
  3. Сверка данных
  4. Переносимость
  5. Совместимость

Краткая предыстория

Прежде чем мы начнем, полезно подумать о происхождении каждого языка. Dam l был создан Digital Asset в 2016 году, а исходный код был открыт в 2019 году. и изначально имеет дело с правами и обязанностями со встроенными механизмами конфиденциальности. Daml был создан для облегчения многосторонних рабочих процессов, будь то блокчейн или традиционные базы данных. Он основан на Haskell и был разработан, чтобы быть невероятно простым в использовании. Разработчикам это нравится, потому что они больше не беспокоятся о правах доступа и конфиденциальности. В некоторых случаях это приводит к увеличению производительности в 8–10 раз.

Сегодня Daml используется для программирования смарт-контрактов на нескольких блокчейнах, включая VMware, Corda и Ethereum, а также в таких базах данных, как PostgreSQL и Oracle.

Rust был запущен Mozilla как язык общего назначения в 2010 году. Он предоставляет некоторые ключевые функции, такие как безопасное параллельное выполнение и производительность. Разработчикам нравится Rust, потому что он позволяет им писать на системном уровне, не беспокоясь о памяти или безопасности потоков. Rust можно использовать на уровне основного приложения, на веб-уровне с Javascript или во встроенных программах. Экосистема блокчейна Solana недавно приняла Rust для создания приложений блокчейна.

Разобравшись с этим фоном, давайте теперь углубимся в наши критерии сравнения.

Конфиденциальность

В любой многосторонней транзакционной системе конфиденциальность важна для бизнеса. Например, если Алиса покупает подписку на The Wall Street Journal, детали транзакции, а иногда и сама транзакция, должны быть конфиденциальными.

Daml и Rust предоставляют нам эту конфиденциальность по-разному. Будучи языком общего назначения, Rust требует, чтобы правила конфиденциальности были закодированы в программах. Разработчик должен сначала проверить личность субъекта, а затем запрограммировать правила, чтобы транзакция была видна только нужным сторонам.

fn getListOfTranasctions(part1Id: u32, listTransactions: &mut [DefinedType]) -> bool {

// check if Party is eligible to see the list

if checkEligibility(party1Id) == false {

return false;

}

// fetch only those records that the Party is authorized to see

if fetchRelevantTransaction(party1Id, &mut listTransactions) == false {

return false;

}

// continue with other things

}

В Daml эта конфиденциальность встроена. Сама транзакция помечается как частная для сторон, имеющих право на ее просмотр, вместо того, чтобы быть строкой в ​​базе данных, которая должна быть соответствующим образом извлечена.

Вот транзакция, помеченная как частная в Daml:

template OnlineTransaction

  with

    buyer: Party

    seller: Party

    txDetails: Text

  where

    signatory buyer, seller

 

    controller buyer can

      renew: ContractId RenewalRequest

        do create Renewalrequest with ..

Это запись, которая сохраняется в базе данных (или блокчейне). Ключевое слово подписавшийся указывает, что эта транзакция видна только покупателю и продавцу. . Разработчикам больше не нужны проверки приемлемости и предложения SQL для ограничения результатов. Daml контролирует транзакции и взаимодействие с базовой базой данных для автоматического соблюдения конфиденциальности.

Кроме того, с помощью ключевого слова controller Daml также контролирует, кто может выполнять функции по этому контракту. В Daml функции называются выборами. Вы видите, что только покупатель может продлить. Если продавец попытается продлить подписку, транзакция завершится неудачно.

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

Позиция в стеке технической архитектуры

Для простоты предположим, что большинство бизнес-приложений разделены на четыре уровня:

  1. Уровень представления (например, веб-сайт, мобильное приложение)
  2. Уровень бизнес-логики (например, проверки приемлемости, бизнес-правила)
  3. Уровень оркестровки (например, вызовы на стороне сервера третьим сторонам)
  4. Уровень базы данных

Являясь языком общего назначения, Rust работает как на уровне оркестровки, так и на уровне бизнес-логики. Он может обрабатывать бизнес-логику и интегрировать ее со сторонними приложениями через API и другие библиотеки. Он также может воспроизводиться на уровне взаимодействия через веб-сборки и может сочетаться с Javascript.

Daml позиционируется на уровне бизнес-логики как специально созданный язык смарт-контрактов. Именно здесь он контролирует конфиденциальность, права и обязанности различных сторон, имеющих доступ к системе. Чтобы помочь организовать внешние приложения и системы, стек приложений может использовать Rust, Python, Java или любой другой язык.

Также интересно отметить, что уровень базы данных может быть либо блокчейном, либо базой данных для Rust и Daml. Здесь хранится бизнес-информация. Однако, в то время как Rust обращается к базе данных, а затем манипулирует полученными объектами и структурами данных, Daml не зависит от схемы хранения, потому что он всегда обращается к данным с точки зрения смарт-контрактов, чтобы обеспечить свои гарантии конфиденциальности и безопасности (например, концепция подписи, которую мы видел во фрагменте кода выше). Daml выполняет это с помощью библиотеки времени выполнения Daml, которая ведет себя так же, как слой ODBC, который Rust может использовать для взаимодействия с базой данных. Эта среда выполнения Daml упаковывает и сохраняет данные таким образом, что Daml может использовать их позже, по мере необходимости.

Подводя итог, можно сказать, что Rust как язык общего назначения может использоваться на любом уровне технологического стека. В то же время Daml дает явное преимущество в бизнес-правилах и управлении правами. Сочетание Rust для интеграции с внешними системами и Daml для бизнес-процесса и сохранения данных (блокчейн или база данных) было бы оптимальным выбором. Таким образом можно использовать сильные стороны обоих языков.

Сверка данных

Сверка данных — это сопоставление данных, чтобы сделать их согласованными в двух разных базах данных (приложениях или компаниях). Почему мы используем этот параметр при сравнении языков смарт-контрактов? Это связано с тем, что ИТ- и бизнес-бюджет любого предприятия расходуется на согласование и согласованность данных. Поэтому мы считаем, что выбор технологии следует рассматривать как надежный рычаг для оптимизации этих расходов.

Rust, как язык общего назначения, не зависит от базы данных. Когда приложение A отправляет данные приложению B, естественным образом создаются две копии данных — по одной в каждом приложении. Таким образом, если приложения не используют одну и ту же базу данных, необходимо выполнить согласование, чтобы обеспечить согласованность данных в обоих приложениях. Несоответствия могут возникать из-за того, как структуры данных закодированы в двух приложениях, что означают метаданные (например, код страны «США» в одной системе может быть кодом страны «США» в другой) и множества других причин.

unnamed-114

С другой стороны, Daml избавляет от необходимости хранить несколько копий данных. Будучи языком смарт-контрактов, предназначенным для многосторонних рабочих процессов, он всегда поддерживает золотой источник между двумя приложениями. Не существует концепции «отправки» данных в другое приложение. Это означает, что два хранилища данных всегда могут быть физически разделены, но всегда синхронизированы. Транзакции в Daml гарантируют, что обе стороны имеют доступ к транзакциям, в которых они участвуют, тем самым сохраняя конфиденциальность.

Подводя итог, если у вас есть многосторонняя ситуация, когда потребуется сверка или передача данных, подумайте, может ли Daml справиться с основным уровнем бизнес-процесса.

Переносимость

Что касается баз данных, и Rust, и Daml должны быть переносимыми. Под переносимостью мы подразумеваем, нужно ли модифицировать программы при переходе с одного уровня сохраняемости на другой. Например, вам не придется изменять программу на Rust только потому, что вы переключаете базы данных. Уровень ODBC обеспечивает эту переносимость для Rust, и Daml предоставляет те же функции переносимости.

Однако для блокчейнов Daml имеет преимущество перед Rust, поскольку он полностью переносим. Программы Daml имеют дело со смарт-контрактами, их подписантами и определенными в них вариантами, которые остаются неизменными независимо от используемой цепочки блоков или базы данных. Это означает, что одни и те же смарт-контракты Daml могут работать на любом основном блокчейне, который поддерживает Daml. Поскольку уровень сохраняемости не является особенностью самого языка, программы Daml отделены от уровня сохраняемости. протокол синхронизации позволяет программам Daml работать как есть в любой комбинации поддерживаемых уровней сохраняемости.< /p>

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

Совместимость

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

Любые изменения в транзакции со стороны Алисы или публикации будут автоматически отражены в этих доменах. Например, онлайн-подписка, которую Алиса может инициировать на веб-сайте The Wall Street Journal, может потребовать прохождения через банк публикаций, а затем расчеты с банком Алисы. Вся эта транзакция может беспрепятственно пересекать границы предприятия и технологии, сохраняя при этом только одну версию правды.

Сравните это с сегодняшней технологией (с использованием API и механизмов на основе сообщений), которая оставляет как минимум три разные копии данных: в базе данных WSJ, базе данных банка Алисы и WSJ база данных банка.

Этот утопический пример функциональной совместимости не является надуманным. На самом деле это вариант использования, для которого Daml набирает обороты на рынке. Как язык прав и обязанностей, Daml обеспечивает бесшовное взаимодействие для многосторонних рабочих процессов. Это уникальное преимущество, которым Daml пользуется как специализированный, а не универсальный язык. Rust может (и, вероятно, будет) использоваться в каждом стеке технологий, но сам по себе он не может обеспечить совместимость, которую обеспечивает Daml.

unnamed-117

Заключение

Rust и Daml могут сосуществовать в техническом стеке, если сосредоточиться на их относительных преимуществах. Сочетание этих двух факторов в любой корпоративной архитектуре может изменить правила игры.

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

Daml может быть очевидным выбором при кодировании смарт-контрактов и бизнес-уровня, поскольку он обеспечивает явные преимущества в отношении конфиденциальности, управления правами, взаимодействия между уровнями сохраняемости и устранения примирение.

Изучайте Daml онлайн


Также опубликовано здесь


Оригинал