September 25, 2021

Введение в Registered Contract Bytom 2.0

Контрактная система Bytom 2.0 претерпела серьезные обновления, включая, помимо прочего, мировое состояние UTXO, язык разработки, подобный Goland, более полные операторы, регистрацию контрактов и последующую совместимость с EVM.

В статье будет представлен Registered Contract Bytom 2.0.

Что такое Registered Contract?

Registered contract означает написание кода контракта в блокчейне путем уничтожения UTXO, а код контракта можно использовать напрямую через хэш контракта.

Чтобы зарегистрировать контракт, вы можете связаться с шаблоном контракта в Bytom 1.0, но шаблон контракта является только справочным материалом для разработчиков. Разработчикам необходимо самостоятельно развернуть шаблон контракта на блокчейне. После завершения регистрации разработчик может напрямую позвонить ему.

Создать один раз, использовать сколько угодно

Преимущество зарегистрированного контракта (Registered contract) в том, что его нужно оформить в цепочке только один раз, и его можно использовать неограниченное количество раз. Помимо использования владельцем, он также может быть предоставлен внешним пользователям.

Кроме того, в цепочке выдается зарегистрированный контракт, который является открытым, прозрачным и неизменяемым, что исключает возможность злонамеренного вмешательства персонала.

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

Процесс регистрации контракта

1. Пользователь создает контракт на языке контрактов Bytom 2.0.

2. Используйте полный узел для создания зарегистрированного контракта локально.

3. Создайте специальный регистр-контрактную транзакцию, заполните контракт, плату за газ, ввод и вывод.

4. Подпишите транзакцию и отправьте

5. Клиент транслирует транзакцию на всю сеть.

6. Узел консенсуса получает транзакцию, проверяет формат, проверяет ввод и вывод и проверяет, достаточна ли плата за газ. Если проверка верна, она будет помещена в пул транзакций.

7. Узел консенсуса получает транзакции из пула транзакций и упаковывает их в блоки.

8. Контракт успешно зарегистрирован.

Пример

Подготовка

Пользователь должен сначала создать полный узел и создать кошелек, руководство: https://developer.bytom.io/guide/01_set_up_full_node.html

Подготовить договор

В данном разделе представлены части кода. Во избежании ошибок я рекомендую обратиться к источнику перевода. Ссылка на англоязычную версию статьи находиться внизу.

Сначала напишите контракт, конкретный язык контрактов Bytom 2.0 еще не полностью открыт, вот только пример

const {   var AssetX asset = 1   var AssetY asset = 2   var btmSwap BtmSwap }func (b btmSwap) AddLiquidity (x int64, y int64) {     newX: = b.poolX + x     newY: = b.poolY + y     newM: = newX * newY     Lock (newX, assetX)     Lock (newY, assetY)     Lock ( newM, assetM) }

Скомпилируйте контракт в bytecode

034e61bc70a09161641500000075527963170000007578569393

Bytecode для создания экземпляров параметров контракта

207acc78faf72cc0726a0533b705d52527e804946229f673e34ba6c2e4f6a814117403ae7cac00c0

Создать контракт локально (не обязательно)

Используйте контракт создания полного узла для создания контракта локально (не в блокчейне)

// 请求curl -X POST create-contract -d '{"alias": "pk", "contract": "207acc78faf72cc0726a0533b705d52527e804946229f673e34ba6c2e4f6a814117403ae7cac00c0"}'//响应{     "статус": "Успех",     "данные": {         "ID": "20924a079e5f9646c8177194bcfc22e35931a6c7bc3192ad3f266d618fe2a323",         "псевдоним": "рк",         "договор": "207acc78faf72cc0726a0533b705d52527e804946229f673e34ba6c2e4f6a814117403ae7cac00c0",         "call_program": "04626372702020924a079e5f9646c8177194bcfc22e35931a6c7bc3192ad3f266d618fe2a323",         " register_program ":" 6a0462637270010128207acc78faf72cc0726a0533b705d52527e804946229f673e34ba6c2e4f6a814117403ae7cac00c0 "     } }

Поместите зарегистрированный контракт в блокчейн

Принять базовый процесс размещения транзакции в цепочке, просто построить-подписать-отправить

Создайте структуру транзакции зарегистрированного контракта, где тип - «register_contract», и в то же время внесите локально созданный идентификатор контракта в контракт.

curl -X POST build-transaction -d {     "действия": [         {             "account_id": "cdcbb36c-cbbb-4a1a-88ad-74ca780359e4",             "amount": 800000000,             "asset_id": "fffffffffffffffffffffffffffffffff,             type " ff "ff "потратить_аккаунт"         },         {             "сумма": 500000000,             "идентификатор_объекта": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",             "type": "register_contract",             "contract": "207acc78faf72cc0726a0533b705d52527e804946229f673e34ba6c2e4f6a814117403ae7cac00c0 "         },         {             " количество ": 100000000,            "ASSET_ID": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",             "адрес": "tn1qusqn39eh38k65wcphrl78p73ukuen6tqyk3d87",             "тип": "control_address"         }     ],     "ТТЛ": 0,     "TIME_RANGE": 0 }

Подписать транзакцию

curl -X POST знак-транзакция -d{     "пароль": "xxxx",     "transaction": {          "raw_transaction": "",         "signed_instructions":[             {                "позиция": 0,                 "witness_components": [                     {                         "типа": "raw_tx_signature",                         "кворума": 1,                         "ключи": [                             {                                 "xpub": "42c574b1790650a4acd8883c36598e75c7d0b48b7fd22e4d1827f19c85fc09dabf41f15d793d68f851c16a7ff73db1ee1620a43b1ddf224a657f69d23e9ed254",                                 "derivation_path": [                                     "2c000000",                                     " 99000000 ",                                     " 01000000 ",                                    «00000000»,                                    "02000000"                                 ]                             }                         ],                         "подписи": нулевая                     },                     {                         "типа": "данные",                         "значение": "355819e54cf61cb397e378f01fef3002246d66b4f7ed81c10f4d55996ff10035"                     }                 ]             }         ],         "плата": 200000000,         "allow_additional_actions" ложь     } }

Отправить транзакцию

curl -X Отправить транзакцию POST -d{    "raw_transaction": ""}

Пока транзакция упакована в цепочку, договор регистрации считается завершенным.

Резюме

Зарегистрированный контракт является нововведением в контракте Bytom 2.0, который можно реализовывать один раз, а использовать постоянно, что облегчает повторное использование кода контракта, который является открытым и прозрачным, защищенным от несанкционированного доступа и эффективно экономит память в цепочке.

В следующей статье будет рассказано, как взаимодействовать с Registered contract, так что следите за обновлениями.

Оригинал статьи: https://medium.com/bytomofficial/introduction-to-bytom-2-0-registered-contract-26166a759b2

Узнайте больше о BYTOM - Веб-сайт | Twitter | Telegram