2016-04-26 5 views
2

У меня есть этот пример https://github.com/IBM-Blockchain/marbles выполняется локально. Я увидел, что пример загрузил цепочку цепочек golang с https://github.com/ibm-blockchain/marbles-chaincode. И цепочка была сохранена на жестком диске в/marbles/node_modules/ibm-blockchain-js/temp/unzip. Не могли бы вы объяснить, как код последовательности golang был выполнен внутри кода nodejs?Как работает код последовательности golang в примере marbles nodejs?

ответ

3

Я не смотрел приложение Marbles в деталях, но, как правило, код nodejs является всего лишь клиентом сети валидатора, а валидатор обрабатывает цепочный код на основе golang таким образом, который полностью отключен от клиент на основе nodejs. В этом процессе валидатор загружает/получает цепочный код и компилирует его локально в изолирующем контейнере. Вы можете посмотреть на процесс, например [golang :: chaincode] -> [nodejs :: client] -> (network) -> [golang :: validator] -> [golang :: container]. Таким образом, первая и последняя части связаны с golang/chaincode, материал, который происходит посередине, является более или менее транспортным. То есть тот факт, что клиент является nodejs, а валидатор - это golang, мало что здесь.

3

Код Golang, который реализует штрих-код Marbles (aka smart contract), не выполняется в приложении Node.js. Код цепи - это то, с чем взаимодействует приложение, для изменения переменных состояния, хранящихся в блок-цепочке. Состояние в этом случае: какие существуют мрамор, кто их владелец, какой он цвет и т. Д. Но сам цепочный код (код Голанга) упакован в виде контейнера докеров, развернут в блок-цепочку и работает в ожидании сделки. Код Node.js строит и отправляет эти транзакции в контейнер докеров, получает результаты выполнения цепочки и обновляет вид приложения текущего состояния.

Just FYI, приложение Marbles было реализовано, чтобы продемонстрировать, как реализовать приложение, работающее поверх проекта Hyperledger Fabric. Hyperledger в настоящее время полностью поддерживает Golang, поскольку это умный язык контракта, но скоро появятся новые языки.

+0

Я запускаю пример локально с помощью сети гиперселектора bluemix. Я увидел, что приложение Marbles загрузило цепочку кодов из Git repo и распаковали ее.Приложение marbles упаковывает цепочный код в контейнер-докер локально в качестве не проверяющего однорангового узла для связи с сетью hyperkedger bluemix или отправляет цепочку кодов в сеть, а сеть делает ее контейнером? – scorpiovn

+0

От чтения вашего вопроса, похоже, что у вас уже установлена ​​служба IBM Blockchain на службе Bluemix. Это означает, что у вас есть два проверяющих партнера и служба CA уже на месте в Bluemix. Дайте мне знать, если я не понимаю. – angrbrd

+0

Если настройка, описанная выше, является точной, то если вы используете пример Marbles локально, причина, по которой он загружается и распаковывает цепочку, заключается в том, чтобы исследовать цепочный код и идентифицировать имена функции вызова и запроса. Это код уровня приложения, а не код ткани. Затем он создает транзакцию развертывания, которую он отправляет в конечную точку останова. Операция развертывания содержит указатель на репозиторий Github, содержащий код цепи Marbles. Код цепи вытягивается из репозитория Github и развертывается до Docker ON peer. Не внутри приложения Marbles. Дайте мне знать, если это ясно. – angrbrd

0

Как описано here,

enter image description here

Взаимодействующие с куб.см делается с помощью HTTP-REST вызова к партнеру по сети. ibc-js SDK будет абстрагировать детали вызовов REST . Это позволяет использовать точечную нотацию для вызова наших функций GoLang (например, chaincode.invoke.init_marble(args)).

Пользователь будет взаимодействовать с нашим приложением Node.js в своем браузере. Этот код JS на стороне клиента откроет веб-сайт для приложения Node.js . Клиент JS отправит сообщения на бэкэнд, когда пользователь взаимодействует с сайтом.

Бэкенд Node.js отправит HTTP запросы (через SDK) на одноранговый блок-блок для выполнения действий пользователя . Одноранговый узел будет связываться со своим контейнером с цепным кодом в своем досуге . Обратите внимание, что предыдущий HTTP-запрос был действительно «отправкой» кода цепи, который должен быть запущен, он будет фактически запущен позднее (обычно миллисекунд).

Контейнер cc выполнит требуемую операцию и запишет ее в книгу. т.е. создавать/переносить мрамор.