Вы новичок в блокчейне? Возможно, вы уже слышали об удивительной работе, проделанной Linux Foundation с Hyperledger Fabric. Это модульная структура для построения разрешенных сетей блокчейнов.

Здесь я хочу продемонстрировать, как создать свою собственную систему смарт-контрактов более простым способом, чем вы ожидаете. И только с помощью JavaScript!

Я буду использовать в качестве основы дизайн из репозитория Fabric-Sample FabCar, я не буду менять его дизайн, только перенесу код в Convector Framework.

Как упоминается в названии, я буду использовать новый Convector CLI с Hyperledger Fabric в качестве базовой технологии блокчейна.

npm i -g @worldsibu/convector-cli
conv new fabcar -c car
cd fabcar
npm i

Выполнив эту команду, вы получите целую структуру JavaScript для смарт-контракта Fabric (чейнкод).

Нам нужно будет перенести текущую структуру из fabcar.go в класс TypeScript car.model.ts. Первое отличие состоит в том, что Convector помогает вам структурировать свой разум вокруг шаблона Модель / Контроллер. Поэтому вместо того, чтобы хранить все в одном файле, Convector-CLI генерирует для вас два файла.

Одна из них - простая модель с несколькими декораторами для упрощения проверки, а также класс контроллера, в котором вы определяете свои правила смарт-контракта.

Остальные - вспомогательные файлы. Например*.config.json предназначены для установки в блокчейн. Он уже содержит все детали, которые потребуются сети.

Convector рекомендует использовать Lerna для многопакетного проекта, а также TypeScript (на данный момент требуется).

Давайте посмотрим на оригинальную структуру Go:

type Car struct { 
 Make string `json:"make"` 
 Model string `json:"model"` 
 Colour string `json:"colour"` 
 Owner string `json:"owner"`
}

Как видите, это довольно простая структура. Откройте папку проекта, созданного с помощью Convector-CLI, и перейдите в ./packages/car-cc/src/car.model.ts.

После переноса структуры автомобиля из Golang мой car.model.ts файл выглядит так:

Как видите, он все еще довольно прост, но в нем есть несколько @ декораторов. Это поможет вам избежать ошибок при проверке, так как это избавляет ваш код от простых проверок, например, вместо выполнения if(!item.owner) throw new Error('owner cannot be null'); вы пишете только @Required() поверх свойства.

Теперь нам нужно перенести логику цепного кода. Я не буду копировать сюда весь исходный код, может быть, вам лучше поискать его прямо в репозитории Fabric. В качестве обзора они включают следующие функции для смарт-контракта:

if function == "queryCar" { return s.queryCar(APIstub, args) } else if function == "initLedger" { return s.initLedger(APIstub) } else if function == "createCar" { return s.createCar(APIstub, args) } else if function == "queryAllCars" { return s.queryAllCars(APIstub) } else if function == "changeCarOwner" { return s.changeCarOwner(APIstub, args) }

В Конвекторе они будут выглядеть так:

Видите, насколько простым становится код? Это основная цель Конвектора. Менее чем за 20 минут вы можете разработать свой смарт-контракт.

Очевидно, что код может выглядеть великолепно, но давайте проверим его! Convector-CLI создает базовый набор скриптов для использования Convector Tools (в данном случае менеджер Среда разработки, который устанавливает вам сеть блокчейнов, и Менеджер цепных кодов, который помогает вам устанавливать и обновлять чейнкоды).

Снова в консоль запускаем:

# Wake yourself up a dev blockchain
$ npm run env:restart
...
Register admin for org1
Register admin for org2
Register user1 for org1
Register user1 for org2
Register user2 for org1
Register user2 for org2
Register user3 for org1
Register user3 for org2
# Now install the chaincode!
$ npm run cc:start -- car 1
...
Org1MSP
Org2MSP
Instantiated successfully
Initializing controllers now...
Initialization successfully

Это все! Теперь у вас есть работающая сеть (подробности о том, что вам предоставляется, см. Здесь Среда разработки) и установлен ваш собственный чейнкод.

Следующий шаг - вызвать его из вашего бэкэнда! Еще одна замечательная особенность Convector заключается в том, что вы можете использовать собственные инструменты Fabric, поэтому на вашем языке программирования вызовите ваш цепной код с соответствующим Fabric SDK. Если вы используете NodeJS, фреймворк предоставит вам помощников для подключения вашего внутреннего сервера к вашей цепочке блоков. Подробнее об этом здесь.