Сравнение платформ для смарт-контрактов
Ivy-lang, Plutus, Solidity, Scrypto, Michelson, Hoon, Rust, …
Вы серьезно?
Когда мы должны найти время для изучения всех этих языков? Большинство из них почти не используются, что делает их невероятно тяжелыми для принятия. Solidity является лидером, хотя и он с самого начала - нелегкий язык. Эта статья будет критиковать и давать новые идеи для следующих платформ: Ethereum, Hyperledger Fabric, NEM, Stellar, iOlite, Neblio и Lisk.
Вот обзор всех различных существующих смарт-контрактных платформ:
Поиск подходящей платформы для смарт-контрактов
Мы расскажем о некоторых существующих смарт-контрактных платформах и некоторых перспективных. Мы выбирали их на основе зрелости, гибкости и инноваций, которые они добавляют в нашу экосистему.
Ethereum - Старый, но Золотой
Ethereum всегда безопасно. Ethereum является золотым стандартом в мире смарт-контрактов и имеет самую большую капитализацию среди других платформ. Большинство продаж токенов происходит на платформе Ethereum, используя стандарт маркера ERC-20.
Однако этот стандарт содержит некоторые серьезные ошибки, которые уже привели к серьезным потерям в отрасли. Позвольте нам объяснить это.
ERC-20 предполагает два способа выполнения токенной транзакции:
- transfer (): отправить токены на чей-то адрес.
- approve () + transferFrom (): положить токены на смарт-контракт.
Но что, если вы используете transfer () и отправляете токены на смарт-контракт случайно? Транзакция будет успешной, но она не будет признана соглашением получателя.
«Например, если вы отправляете токены на децентрализованный биржевой договор, то он будет получать ваши токены, но не будет передавать их на ваш валютный баланс токенов. Более того, если в децентрализованном биржевом договоре не реализована функция экстренного распознавания токенов, тогда вернуть ваши токены в любом случае невозможно, что приведет к постоянной потере токенов. Из-за этой ошибки экосистема Ethereum уже потеряла миллионы долларов».
Эта информация предоставлена пользователем ресурса Reddit, пишущего под ником Dexaran, - создателем стандарта ERC223. Dexaran - первый разработчик, который уведомил сообщество Ethereum об упомянутой выше ошибке. В ответ на это он и создал стандарт ERC223.
Большинство разработчиков не знают о стандарте ERC223 и ERC77. Вот краткое сравнение обоих стандартов:
ERC223: этот улучшенный стандарт устраняет критический балл ERC20, заставляя функцию transfer () вызывать ошибку при недействительных переводах и отменять транзакцию, поэтому средства не теряются. → Сфокусирован на безопасности.
ERC777: решает проблемы ERC20, например, отсутствие механизмов обработки транзакций. → Сфокусировано на усыновлении.
Как вы можете видеть, Ethereum все еще должно расти с точки зрения принятия более безопасных, лучших стандартов токенов.
NEM
Масштабируемость - самая важная вещь в децентрализованном приложении NEM. Хотя ETH делает максимум 15 транзакций в секунду, NEM, как сообщается, управляет сотнями. Основатели NEM придавали безопасности и доступности приоритет, поэтому предприниматели сталкиваются с другими проблемами, а не с техническими трудностями.
Хотя, как сообщается, NEM - это более быстрая, безопасная и простая технология, Ethereum предоставляет более широкую базу для создания пользовательских DApps. Основное различие заключается в том, что ETH применяет свои смарт-контракты на блокчейн, в то время как NEM использует код вне блокчейн. Хотя это, возможно, делает его менее децентрализованным, метод действительно имеет свои преимущества, такие как лучшая безопасность, более простые обновления, более быстрое время выполнения и более легкий код.
Nemario, пользователь Reddit, сказал мне, что код контракта может быть обновлен в любое время, без какого-либо взаимодействия с цепочкой. Выполнять обратные транзакции невозможно. Это делает NEM менее децентрализованным в одном ключе, но встроенные функции безопасности, такие как multi-sig и smart assets, смягчают эту «проблему».
NEM имеет настраиваемые приложения для управления данными, называемые интеллектуальными активами, благодаря которым вы можете создавать токены, записи данных, системы голосования и другие монеты всего за несколько кликов. Если Ethereum нацеливается на компании, которые намерены перестроить внутренние сети в ближайшие 5-10 лет, NEM старается привлечь компании, которые ищут быстрое, безопасное, готовое к использованию и управляемое текущее решение. Будет интересно посмотреть, какие компании предпочтут NEM Ethereum’у.
NEM предоставляет несколько SDK, ниже вы можете найти фрагмент NodeJS транзакции передачи.
// Include the library |
|
var nem = require("../../build/index.js").default; |
|
|
|
// Create an NIS endpoint object |
|
var endpoint = nem.model.objects.create("endpoint")(nem.model.nodes.defaultTestnet, nem.model.nodes.defaultPort); |
|
|
|
// Create a common object holding key |
|
var common = nem.model.objects.create("common")("", "Private key"); |
|
|
|
// Create an un-prepared transfer transaction object |
|
var transferTransaction = nem.model.objects.create("transferTransaction")("TBCI2A67UQZAKCR6NS4JWAEICEIGEIM72G3MVW5S", 10, "Hello"); |
|
|
|
// Prepare the transfer transaction object |
|
var transactionEntity = nem.model.transactions.prepare("transferTransaction")(common, transferTransaction, nem.model.network.data.testnet.id); |
|
|
|
// Serialize transfer transaction and announce |
|
nem.model.transactions.send(common, transactionEntity, endpoint); |
Hyperledger Fabric
Hyperledger Fabric (HLF) любит называть свои смарт-контракты “чейнкодом”.
HLF - это блокчейн с корпоративным доступом, построенный с большой гибкостью, что делает его очень полезным для бизнеса, поскольку его бизнес-правила меняются примерно через 7 лет. Большинство других блокчейнов построены без учета гибкости.
Сама Hyperledger Fabric была написана на языке Go, поэтому ее смарт-контракты также поддерживают этот язык. Каковы выгоды? Golang - очень эффективный язык с быстрым временем компиляции.
Писать чейнкод несложно. Вот наиболее важные функции:
PutState: создание нового актива или обновление существующего.
GetState: извлечение актива.
GetHistoryForKey: получение истории изменений.
DelState: «Удаление» актива.
Примечание по DelState: HLF использует базу данных состояний, в которой хранятся ключи и их значения. Это отличается от последовательности блоков, которые составляют блокчейн. Ключ и связанное с ним значение могут быть удалены из базы данных состояния с помощью функции DelState. Однако это не означает, что на блокчейне происходит изменение блоков.
Удаление ключа и значения будет храниться как транзакция на блокчейне так же, как и предыдущее добавление, и любые изменения сохраняются как транзакции на блокчейне.
История ключа может быть восстановлена после его удаления. Существует функция GetHistoryForKey (), которая извлекает историю, а часть ее отклика - это флажок IsDeleted, который указывает, был ли удален ключ. Можно создать ключ, удалить ключ, а затем снова создать ключ - функция GetHistoryForKey () будет отслеживать подобный случай.
Пример чейнкода
// Define the Smart Contract structure |
|
type SmartContract struct { } |
|
|
|
// Define the car structure, with 4 properties. |
|
type Car struct { |
|
Make string `json:"make"` |
|
Model string `json:"model"` |
|
Colour string `json:"colour"` |
|
Owner string `json:"owner"` |
|
} |
|
|
|
/* |
|
* The Invoke method is called as a result of an application request to run the Smart Contract "fabcar" |
|
* The calling application program has also specified the particular smart contract function to be called, with arguments |
|
*/ |
|
func (s *SmartContract) Invoke(APIstub shim.ChaincodeStubInterface) sc.Response { |
|
// Retrieve the requested Smart Contract function and arguments |
|
function, args := APIstub.GetFunctionAndParameters() |
|
// Route to the appropriate handler function to interact with the ledger appropriately |
|
if function == "initLedger" { |
|
return s.initLedger(APIstub) |
|
} else if function == "createCar" { |
|
return s.createCar(APIstub, args) |
|
} |
|
return shim.Error("Invalid Smart Contract function name.") |
|
} |
|
|
|
func (s *SmartContract) initLedger(APIstub shim.ChaincodeStubInterface) sc.Response { |
|
return shim.Success([]byte("Ledger is now running, success!")) |
|
} |
|
|
|
// Add new car to database with obtained arguments |
|
func (s *SmartContract) createCar(APIstub shim.ChaincodeStubInterface, args []string) sc.Response { |
|
if len(args) != 5 { |
|
return shim.Error("Incorrect number of arguments. Expecting 5") |
|
} |
|
var car = Car{Make: args[1], Model: args[2], Colour: args[3], Owner: args[4]} |
|
carAsBytes, _ := json.Marshal(car) |
|
APIstub.PutState(args[0], carAsBytes) |
|
return shim.Success(nil) |
|
} |
|
|
|
func main() { |
|
// Create a new Smart Contract |
|
err := shim.Start(new(SmartContract)) |
|
if err != nil { |
|
fmt.Printf("Error creating new Smart Contract: %s", err) |
|
} |
|
} |
Stellar Smart Contracts
Смарт-контракты Stellar (SSC) сильно отличаются от смарт-контрактов Ethereum. Они не являются тьюринг-полными и реализуются как соглашение между несколькими сторонами и осуществляются в соответствии с транзакциями. Ниже вы видите сравнение между Stellar и Ethereum. Обратите внимание на огромную разницу в стоимости и времени подтверждения. Одна транзакция по сети Stellar стоит всего ~ $ 0.0000002!
SSC могут быть написаны на любом языке, для которого сообщество Stellar предоставляет API (JavaScript, Python, Golang, PHP, ...). Здесь вы можете найти пример смарт-контракта в PHP.
SSC, выражаются в виде композиций транзакций, связанных между собой и выполненных с использованием различных ограничений. Ниже приведены примеры ограничений, которые могут быть рассмотрены и реализованы при создании SSC (из документации Stellar):
- Многозначность - Какие ключи необходимы для авторизации определенной операции? Какие стороны должны договориться об обстоятельствах, чтобы выполнить эти шаги?
Многозначность - это концепция, требующая подписи нескольких сторон для подписания транзакций, исходящих из учетной записи. Посредством весов и пределов подписи создается представление ее мощности.
- Пакетирование (атомарность). Какие операции должны выполняться вместе, а какие нет? Что должно произойти, чтобы это потерпело неудачу или прошло успешно?
Пакетирование - это концепция включения нескольких операций в одну транзакцию. Атомарность - это гарантия того, что при выполнении серии операций при отправке в сеть, в случае неудачи одной операции, завершение всех операций в транзакции происходит с ошибкой.
- Последовательность. В каком порядке должна обрабатываться серия транзакций? Каковы ограничения и зависимости?
Понятие последовательности представлено в сети Stellar через порядковый номер. Используя порядковые номера при манипулировании транзакциями, можно гарантировать, что конкретные транзакции осуществить не удастся, если будет отправлена альтернативная транзакция.
- Временные рамки. Когда транзакция может быть обработана?
Временные рамки - это ограничения на период времени, в течение которого транзакция действительна. Использование временных границ позволяет отображать периоды времени в SSC.
Платформы в стадии разработки
Мы не можем забыть о платформах, которые разрабатывают перспективные смарт-контрактные продукты. Давайте посмотрим, какие варианты ждут нас в недалеком будущем.
iOlite - создание смарт-контрактов с использованием естественного языка
iOlite - это продукт, который фокусируется на массовом внедрении технологии интеллектуальных контрактов, предоставляя простой в использовании движок, который способен понимать естественный язык для компиляции кода смарт-контракта. iOlite - идеальное решение, если вы не хотите тратить время на обучение, вместо этого просто начинаете создавать смарт-контракты.
iOlite основан на исследованиях, проведенных в Стэнфордском университете. Они изобрели FAE (Fast Adaptation Engine), который способен преобразовывать естественный язык или любой другой желаемый язык программирования в код смарт-контракта. FAE не просто сразу переводит ваши входные данные в код. FAE зависит от помощников (экспертов по смарт-контрактам), которые могут определять структуры, содержащие языковые выражения. Кроме того, эти структуры привязаны к коду смарт-контракта, который они пишут. Это позволяет движку просматривать структуры, чтобы найти правильное выражение, чтобы он мог скомпилировать желаемый смарт-контракт. Всякий раз, когда используется структура, помощник получает токены iOlite.
Как вы можете видеть, iOlite полагается на свое сообщество, чтобы сделать FAE успешным. FAE помогает им, применяя методы машинного обучения, чтобы облегчить его изучение и принятие новых структур.
В настоящее время iOlite Labs фокусируется на смарт-контрактах Ethereum с Solidity, поскольку существует огромная потребность.
Трэвис Бирн из команды iOlite объяснил, какие языки могут использоваться для создания смарт-контрактов. «Не только программисты (в формальных языках, таких как Python, C, JavaScript) сразу же используют свои существующие навыки для написания интеллектуальных контрактов, но также и обычные люди без каких-либо знаний о программировании, могут также легко начать с естественным языком вроде английского. iOlite растворяет существующие границы технического обучения для создания смарт-контрактов ».
Neblio - Blockchain для бизнеса
Neblio нацелен на интеграцию блокчейна в уже существующие предприятия с помощью простых в использовании API в восьми из наиболее часто используемых языков программирования. Основная задача Neblio - обеспечить простоту использования блокчейна для уже существующих предприятий. Разработчики должны иметь возможность использовать технологию Neblio blockchain, не будучи в этом экспертами.
Neblio предоставляет кошелек Raspberry Pi чтобы поддерживать ваши коины. Сам кошелек может быть настроен лишь одной командой после загрузки исходного кода. Размещая коины и запуская узел, вы помогаете защищать кошелек с помощью доказательства согласованного алгоритма работы, и взамен вы получаете 10% -ное увеличение размещенных коинов.
Нет никакой необходимости управлять вашей Raspberry Pi круглосуточно. Neblio позволяет вам иметь в целом до 7 дней простоя. В течение этого времени ваши коины будут по-прежнему набирать вес, пока ваш Raspberry Pi выключен, однако вы не сможете обнаружить блоки (и, следовательно, получить вознаграждение) Сам кошелек потребляет очень мало энергии, что делает его большим стимулом для хранения ваших коинов Neblio, чтобы получить более стабильную цену.
Вероятно, вы спросите себя: как ваша Raspberry Pi будет продолжать обновляться, если отключать ее на длительный срок? Если вы сделаете это с узлом Ethereum, вам придется синхронизировать часы, загружая новые данные.
Вот почему Neblio придумал этот классный Quicksync, который способен синхронизировать ваш узел менее чем за минуту. Но как? Свежая копия блокчейна Neblio теперь загружается каждую ночь в полночь в Github. Raspberry Pi по умолчанию загружает данные блокчейна из Github при их первой установке или когда вы отключили свой узел на несколько дней, извлеките его в каталог данных Neblio и затем синхронизируйте оставшиеся несколько часов. Это должно привести к почти мгновенной синхронизации.
Как насчет безопасности Quick Sync? Кошелек все равно будет проверять все транзакции. Если есть какие-либо ошибочные транзакции, он не будет синхронизироваться с самым новым блоком. Таким образом, загрузка блокчейна через Quick Sync столь же безопасна.
Lisk — Sidechains
Lisk не находится в бизнесе смарт-контрактов. Lisk намеревается установить взаимодействие со смарт-контрактными системами, такими как Ethereum, посредством интеграции виртуальной машины. Позвольте пояснить: Lisk - это не система смарт-контрактов, это настраиваемая система блокчейнов. Lisk построил свою бизнес-модель вокруг создания упрощенного пользовательского интерфейса и платформы, чтобы легко внедрять персонализированные блокчейны для любого: от физического лица до малых предприятий или крупных банков.
Lisk запускает каждое приложение на совершенно отдельной изолированной боковой цепочке - сайдчейне, ответственной за себя. Если сайдчейн терпит неудачу, то вина и ответственность лежит на плечах разработчика, работающего с ним.
Еще одним большим преимуществом Lisk является его консенсусный алгоритм. Они используют “делегированное доказательство доли владения”, которое быстрее, безопаснее и потребляет меньше энергии, чем простое “доказательство доли владения”.
Этот последний момент является спорным и может быть вопросом личного предпочтения. Lisk пытается задействовать несколько сотен тысяч разработчиков JavaScript-сообществ, построив всю свою экосистему в JavaScript. Это упрощает разработку традиционными разработчиками веб-приложений и взаимодействие с пользовательскими блокчейнами Lisk. Для них нет необходимости изучать новый язык, и JavaScript был тщательно протестирован, а его проблемы хорошо документированы (JavaScript далеко не идеален).
Вывод
Трудно сравнивать все платформы, так как это зависит от ваших потребностей. Лучше всего посмотреть на зрелость каждой платформы, и такие показатели, как SDK, инструменты сборки, правильность документации. iOlite также является хорошим выбором, если вы хотите очень быстро прототипировать смарт-контракты. А Stellar является сильным предстоящим противником с точки зрения низких затрат и быстрого времени подтверждения