Как добавить дополнительные возможности программирования на языке C в докере, где выполняется цепной код? - PullRequest
0 голосов
/ 19 мая 2018

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

Я запустил официальный пример 'e2e_cli'.Используя команду 'docker ps', мы можем увидеть девять докеров.

CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS              PORTS                                                                       NAMES
846a361282bb        dev-peer1.org2.example.com-mycc-1.0   "chaincode -peer.add…"   19 minutes ago      Up 19 minutes                                                                                   dev-peer1.org2.example.com-mycc-1.0
1cae2900a68a        dev-peer0.org1.example.com-mycc-1.0   "chaincode -peer.add…"   20 minutes ago      Up 20 minutes                                                                                   dev-peer0.org1.example.com-mycc-1.0
7b6de20b250b        dev-peer0.org2.example.com-mycc-1.0   "chaincode -peer.add…"   21 minutes ago      Up 21 minutes                                                                                   dev-peer0.org2.example.com-mycc-1.0
d9ab459a1f85        hyperledger/fabric-tools              "/bin/bash -c './scr…"   22 minutes ago      Up 22 minutes                                                                                   cli
91ec21c0632f        hyperledger/fabric-peer               "peer node start"        23 minutes ago      Up 23 minutes       0.0.0.0:8051->7051/tcp, 0.0.0.0:8052->7052/tcp, 0.0.0.0:8053->7053/tcp      peer1.org1.example.com
e028c96b2d6c        hyperledger/fabric-peer               "peer node start"        23 minutes ago      Up 22 minutes       0.0.0.0:7051-7053->7051-7053/tcp                                            peer0.org1.example.com
08d057bc084f        hyperledger/fabric-peer               "peer node start"        23 minutes ago      Up 23 minutes       0.0.0.0:10051->7051/tcp, 0.0.0.0:10052->7052/tcp, 0.0.0.0:10053->7053/tcp   peer1.org2.example.com
2be6cf82c41e        hyperledger/fabric-orderer            "orderer"                23 minutes ago      Up 22 minutes       0.0.0.0:7050->7050/tcp                                                      orderer.example.com
6e084f144bb1        hyperledger/fabric-peer               "peer node start"        23 minutes ago      Up 22 minutes       0.0.0.0:9051->7051/tcp, 0.0.0.0:9052->7052/tcp, 0.0.0.0:9053->7053/tcp      peer0.org2.example.com

Я думаю, что докер с именем 'dev-peer0.org1.example.com-mycc-1.0' - это место, где выполняется цепной код вузел 'peer0.org1'.

Так что мне нужно добавить среду программирования библиотеки pbc в докер, как 'dev-peer0.org1.example.com-mycc-1.0'.

But 'dev-peer0.org1.example.com-mycc-1.0 'создается автоматически, в то время как цепной код устанавливается и создается, я не смог найти способ добавить библиотеку. Я не нашел путь к томам, такой как «volume:», настройки вфайл 'docker-compose-cli.yaml'.

cli:
container_name: cli
image: hyperledger/fabric-tools
tty: true
environment:
  - GOPATH=/opt/gopath
  - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
  - CORE_LOGGING_LEVEL=DEBUG
  - CORE_PEER_ID=cli
  - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
  - CORE_PEER_LOCALMSPID=Org1MSP
  - CORE_PEER_TLS_ENABLED=true
  - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
  - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
  - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
  - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME}; sleep $TIMEOUT'
volumes:
    - /var/run/:/host/var/run/
    - ./../chaincode/go/:/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go
    - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
    - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
    - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
depends_on:
  - orderer.example.com
  - peer0.org1.example.com
  - peer1.org1.example.com
  - peer0.org2.example.com
  - peer1.org2.example.com

Вот часть, в которой я использую библиотеку PBC в своем коде цепи.

package main
/*
#cgo LDFLAGS: -L. -lpbc -lgmp -lcrypto
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "pbc/pbc.h"
int myfunc(char * keyword)
{
/*C language codes using PBC library*/
char *str_pairing= "type a\nq 878071079966331252243778198475404981580688\
31994142082110286533992664756308802229570786251794226622214231558587695823174\
59277713367317481324925129998224791\nh 12016012264891146079388821366740534204\
802954401251311822919615131047207289359704531102844802183906537786776\nr
7307\ 50818665451621361119245571504901405976559617\nexp2 159\nexp1 107\nsign1 1\nsi\gn0 1";
pairing_t pairing;
element_t a,b,c,d,e,g,h,r;

pairing_init_set_str(pairing, str_pairing);
element_init_Zr(e, pairing);
element_random(e);
element_init_G1(g, pairing);
element_random(g);
element_init_G1(h, pairing);
element_pow_zn(h, g, e);
element_init_G1(a, pairing);
element_init_G1(b, pairing);
element_init_G1(c, pairing);
element_init_GT(d, pairing);
element_init_Zr(r, pairing);

element_random(r);
element_pow_zn(a, g, r);
element_pow_zn(b, h, r);
element_from_hash(c, keyword, strlen(keyword));
element_pairing(d, c, b);
........
}
*/
import "C"
import "unsafe"
import (
"fmt"
"strconv"
"os/exec"
"github.com/hyperledger/fabric/core/chaincode/shim"
pb "github.com/hyperledger/fabric/protos/peer"
)
……/*go language codes*/

1 Ответ

0 голосов
/ 21 мая 2018

Я перекомпилирую изображение - hyperledger / fabric-ccenv: x86_64-1.0.0, добавил нужную мне библиотеку. Поскольку цепной код скомпилирован в контейнере, который запускается на основе fabric-ccenv image.

...