mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-23 01:55:10 +00:00
move ccpackage/ contents into network script
Signed-off-by: Josh Kneubuhl <jkneubuh@us.ibm.com>
This commit is contained in:
parent
a48aa0a46f
commit
827e30cf30
9 changed files with 111 additions and 132 deletions
|
|
@ -26,7 +26,7 @@ network up
|
|||
network channel create
|
||||
```
|
||||
```
|
||||
network chaincode deploy ${PWD}
|
||||
network chaincode deploy asset-transfer-basic basic_1.0 ${PWD}
|
||||
```
|
||||
```
|
||||
network chaincode metadata asset-transfer-basic
|
||||
|
|
@ -44,22 +44,22 @@ network channel create
|
|||
|
||||
```shell
|
||||
# Build the chaincode docker image
|
||||
docker build -t hyperledger/fabric-samples/asset-transfer-basic/chaincode-java .
|
||||
docker build -t fabric-samples/asset-transfer-basic/chaincode-java .
|
||||
|
||||
# Load the docker image directly to the KIND control plane.
|
||||
# (Alternately, build/tag/push the image to a remote container registry, e.g. localhost:5000)
|
||||
kind load docker-image hyperledger/fabric-samples/asset-transfer-basic/chaincode-java
|
||||
kind load docker-image fabric-samples/asset-transfer-basic/chaincode-java
|
||||
```
|
||||
|
||||
```shell
|
||||
# Assemble the chaincode package archive
|
||||
network chaincode package $PWD/ccpackage/ $PWD/build/asset-transfer.tgz
|
||||
network chaincode package basic_1.0 asset-transfer-basic $PWD/build/asset-transfer.tgz
|
||||
|
||||
# Determine the ID for the chaincode package
|
||||
CORE_CHAINCODE_ID_NAME=$(network chaincode id $PWD/build/asset-transfer.tgz)
|
||||
|
||||
# Launch the chaincode in k8s as Deployment + Service
|
||||
network chaincode launch $PWD/build/asset-transfer.tgz
|
||||
network chaincode launch asset-transfer-basic $CORE_CHAINCODE_ID_NAME fabric-samples/asset-transfer-basic/chaincode-java
|
||||
|
||||
# Complete the chaincode lifecycle
|
||||
network chaincode install $PWD/build/asset-transfer.tgz
|
||||
|
|
@ -75,7 +75,7 @@ network chaincode query asset-transfer-basic '{"Args":["ReadAsset","asset1"]
|
|||
```
|
||||
|
||||
```shell
|
||||
kubectl -n test-network logs -f deployment/org1peer1-cc-asset-transfer-basic
|
||||
kubectl -n test-network logs -f deployment/org1peer1-ccaas-asset-transfer-basic
|
||||
```
|
||||
|
||||
## Debugging
|
||||
|
|
@ -96,20 +96,16 @@ docker build -t fabric-samples/asset-transfer-basic/chaincode-java .
|
|||
By instructing the peer to connect to chaincode at the Docker host alias `host.docker.internal`, pods running in
|
||||
Kubernetes will access the local process via a special loopback interface established by KIND.
|
||||
|
||||
Set the "address" attribute in the project's [ccpackage/connection.json](ccpackage/connection.json) descriptor and assemble the chaincode package:
|
||||
```json
|
||||
{
|
||||
"address": "host.docker.internal:9999",
|
||||
}
|
||||
```
|
||||
|
||||
Set the "address" attribute in the package connection.json descriptor and assemble the chaincode package:
|
||||
```shell
|
||||
network cc package $PWD/ccpackage/ $PWD/build/asset-transfer-debug.tgz
|
||||
export TEST_NETWORK_CHAINCODE_ADDRESS=host.docker.internal:9999
|
||||
|
||||
network cc package basic_1.0 asset-transfer-debug $PWD/build/asset-transfer-debug.tgz
|
||||
```
|
||||
|
||||
### Launch
|
||||
|
||||
When chaincode is launched locally, it must declare the package ID in the enviroment as if the process had been managed
|
||||
When chaincode is launched locally, it must declare the package ID in the environment as if the process had been managed
|
||||
by the peer's chaincode lifecycle manager. Calculate the package ID and start the chaincode, binding to port 9999
|
||||
on the local system:
|
||||
|
||||
|
|
@ -117,7 +113,7 @@ on the local system:
|
|||
export CHAINCODE_SERVER_ADDRESS=0.0.0.0:9999
|
||||
export CORE_CHAINCODE_ID_NAME=$(network chaincode id $PWD/build/asset-transfer-debug.tgz)
|
||||
|
||||
java -jar build/libs/chaincode.jar
|
||||
java -jar build/libs/chaincode.jar
|
||||
```
|
||||
|
||||
Or using the editor/debugger/IDE of your choice, create a launch target for `ContractMain.main()`, specifying the
|
||||
|
|
|
|||
|
|
@ -1,49 +0,0 @@
|
|||
|
||||
|
||||
|
||||
# Scratch notes - Ignore - ... `fabric-cli` redux
|
||||
|
||||
`fabric [options] peer <group> <command> [parameters]`
|
||||
|
||||
```
|
||||
fabric => network
|
||||
peer => implicit (from env/context)
|
||||
channel => implicit (from env/context)
|
||||
group => chaincode
|
||||
[params] => --param=value or NETWORK_$GROUP_$COMMAND_$PARAM=value from env
|
||||
```
|
||||
|
||||
```shell
|
||||
network chaincode package <folder-path> <bundle-path>
|
||||
network chaincode id <bundle-path>
|
||||
network chaincode install <bundle-path>
|
||||
network chaincode approve <name> <id>
|
||||
network chainocde commit <name>
|
||||
```
|
||||
|
||||
```shell
|
||||
network chaincode list
|
||||
network chaincode delete <name>
|
||||
network chaincode describe <name>
|
||||
network chaincode invoke <name> <payload>
|
||||
network chaincode query <name> <payload>
|
||||
```
|
||||
|
||||
meta / fictitious targets:
|
||||
```
|
||||
network chaincode launch <name> <CC_IMAGE>
|
||||
network chaincode deploy <name> <folder-path> # package, install, LAUNCH, approve, commit
|
||||
```
|
||||
|
||||
|
||||
ordinal position args vs. named parameters vs. env overrides
|
||||
```shell
|
||||
network chaincode package asset-transfer my-chaincode.tar.gz
|
||||
|
||||
network cc package --name=asset-transfer (or NETWORK_CHAINCODE_PACKAGE_NAME=asset-transfer)
|
||||
network cc package --name= (or NETWORK_${GROUP}_${COMMAND}_${PARAM}=<value>)
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
{
|
||||
"name": "asset-transfer-basic",
|
||||
"image": "hyperledger/fabric-samples/asset-transfer-basic/chaincode-java:latest"
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"address": "{{.peername}}-cc-asset-transfer-basic:9999",
|
||||
"dial_timeout": "10s",
|
||||
"tls_required": false
|
||||
}
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
{
|
||||
"type": "ccaas",
|
||||
"label": "basic_1.0"
|
||||
}
|
||||
|
|
@ -67,7 +67,7 @@ function createNetwork() {
|
|||
./network channel create
|
||||
|
||||
print "Deploying chaincode"
|
||||
./network chaincode deploy $TEST_NETWORK_CHAINCODE_PATH
|
||||
./network chaincode deploy asset-transfer-basic basic_1.0 $TEST_NETWORK_CHAINCODE_PATH
|
||||
}
|
||||
|
||||
function stopNetwork() {
|
||||
|
|
@ -82,7 +82,8 @@ trap "quitterLaScene" EXIT
|
|||
createNetwork
|
||||
|
||||
print "Inserting and querying assets"
|
||||
( ./network chaincode invoke $CHAINCODE_NAME '{"Args":["InitLedger"]}' \
|
||||
( ./network chaincode metadata $CHAINCODE_NAME \
|
||||
&& ./network chaincode invoke $CHAINCODE_NAME '{"Args":["InitLedger"]}' \
|
||||
&& sleep 5 \
|
||||
&& ./network chaincode query $CHAINCODE_NAME '{"Args":["ReadAsset","asset1"]}' )
|
||||
print "OK"
|
||||
|
|
|
|||
|
|
@ -7,16 +7,16 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: org1{{PEER_NAME}}-cc-{{CHAINCODE_NAME}}
|
||||
name: org1{{PEER_NAME}}-ccaas-{{CHAINCODE_NAME}}
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: org1{{PEER_NAME}}-cc-{{CHAINCODE_NAME}}
|
||||
app: org1{{PEER_NAME}}-ccaas-{{CHAINCODE_NAME}}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: org1{{PEER_NAME}}-cc-{{CHAINCODE_NAME}}
|
||||
app: org1{{PEER_NAME}}-ccaas-{{CHAINCODE_NAME}}
|
||||
spec:
|
||||
containers:
|
||||
- name: main
|
||||
|
|
@ -36,11 +36,11 @@ spec:
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: org1{{PEER_NAME}}-cc-{{CHAINCODE_NAME}}
|
||||
name: org1{{PEER_NAME}}-ccaas-{{CHAINCODE_NAME}}
|
||||
spec:
|
||||
ports:
|
||||
- name: chaincode
|
||||
port: 9999
|
||||
protocol: TCP
|
||||
selector:
|
||||
app: org1{{PEER_NAME}}-cc-{{CHAINCODE_NAME}}
|
||||
app: org1{{PEER_NAME}}-ccaas-{{CHAINCODE_NAME}}
|
||||
|
|
@ -7,21 +7,35 @@
|
|||
|
||||
# Convenience routine to "do everything" required to bring up a sample CC.
|
||||
function deploy_chaincode() {
|
||||
local cc_name=$1
|
||||
local cc_label=$2
|
||||
local cc_folder=$(absolute_path $3)
|
||||
|
||||
local temp_folder=$(mktemp -d)
|
||||
local cc_package=${temp_folder}/${cc_name}.tgz
|
||||
|
||||
package_chaincode ${cc_label} ${cc_name} ${cc_package}
|
||||
|
||||
set_chaincode_id ${cc_package}
|
||||
set_chaincode_image ${cc_folder}
|
||||
|
||||
build_chaincode_image ${cc_folder} ${CHAINCODE_IMAGE}
|
||||
kind_load_image ${CHAINCODE_IMAGE}
|
||||
launch_chaincode ${cc_name} ${CHAINCODE_ID} ${CHAINCODE_IMAGE}
|
||||
|
||||
activate_chaincode ${cc_name} ${cc_package}
|
||||
}
|
||||
|
||||
# Infer a reasonable name for the chaincode image based on the folder path conventions, or
|
||||
# allow the user to override with TEST_NETWORK_CHAINCODE_IMAGE.
|
||||
function set_chaincode_image() {
|
||||
local cc_folder=$1
|
||||
local build_folder=${cc_folder}/build
|
||||
local cc_package=${build_folder}/chaincode.tgz
|
||||
|
||||
build_chaincode_image ${cc_folder}
|
||||
|
||||
mkdir -p ${build_folder}
|
||||
|
||||
package_chaincode ${cc_folder}/ccpackage ${cc_package}
|
||||
extract_chaincode_image ${cc_package}
|
||||
extract_chaincode_name ${cc_package}
|
||||
|
||||
launch_chaincode ${cc_package}
|
||||
|
||||
activate_chaincode ${CHAINCODE_NAME} ${cc_package}
|
||||
if [ -z "$TEST_NETWORK_CHAINCODE_IMAGE" ]; then
|
||||
CHAINCODE_IMAGE=${cc_folder/*fabric-samples/fabric-samples}
|
||||
else
|
||||
CHAINCODE_IMAGE=${TEST_NETWORK_CHAINCODE_IMAGE}
|
||||
fi
|
||||
}
|
||||
|
||||
# Convenience routine to "do everything other than package and launch" a sample CC.
|
||||
|
|
@ -73,8 +87,6 @@ function invoke_chaincode() {
|
|||
local cc_name=$1
|
||||
shift
|
||||
|
||||
# set -x
|
||||
|
||||
export_peer_context org1 peer1
|
||||
|
||||
peer chaincode invoke \
|
||||
|
|
@ -89,24 +101,58 @@ function invoke_chaincode() {
|
|||
|
||||
function build_chaincode_image() {
|
||||
local cc_folder=$1
|
||||
local cc_image=$(jq -r .image ${cc_folder}/ccpackage/ccaas.json)
|
||||
local cc_image=$2
|
||||
|
||||
push_fn "Building chaincode image ${cc_image}"
|
||||
|
||||
docker build -t ${cc_image} ${cc_folder}
|
||||
|
||||
pop_fn
|
||||
}
|
||||
|
||||
function kind_load_image() {
|
||||
local cc_image=$1
|
||||
|
||||
push_fn "Loading chaincode to kind image plane"
|
||||
|
||||
kind load docker-image ${cc_image}
|
||||
|
||||
pop_fn
|
||||
}
|
||||
|
||||
function package_chaincode() {
|
||||
local cc_folder=$1
|
||||
local cc_archive=$2
|
||||
local archive_name=$(basename $cc_archive)
|
||||
push_fn "Packaging chaincode ${archive_name}"
|
||||
local cc_label=$1
|
||||
local cc_name=$2
|
||||
local cc_archive=$3
|
||||
|
||||
tar -C ${cc_folder} -zcf ${cc_folder}/code.tar.gz connection.json ccaas.json
|
||||
local cc_folder=$(dirname $cc_archive)
|
||||
local archive_name=$(basename $cc_archive)
|
||||
|
||||
push_fn "Packaging chaincode ${cc_label}"
|
||||
|
||||
mkdir -p ${cc_folder}
|
||||
|
||||
# Allow the user to override the service URL for the endpoint. This allows, for instance,
|
||||
# local debugging at the 'host.docker.internal' DNS alias.
|
||||
local cc_default_address="{{.peername}}-ccaas-${cc_name}:9999"
|
||||
local cc_address=${TEST_NETWORK_CHAINCODE_ADDRESS:-$cc_default_address}
|
||||
|
||||
cat << EOF > ${cc_folder}/connection.json
|
||||
{
|
||||
"address": "${cc_address}",
|
||||
"dial_timeout": "10s",
|
||||
"tls_required": false
|
||||
}
|
||||
EOF
|
||||
|
||||
cat << EOF > ${cc_folder}/metadata.json
|
||||
{
|
||||
"type": "ccaas",
|
||||
"label": "${cc_label}"
|
||||
}
|
||||
EOF
|
||||
|
||||
tar -C ${cc_folder} -zcf ${cc_folder}/code.tar.gz connection.json
|
||||
tar -C ${cc_folder} -zcf ${cc_archive} code.tar.gz metadata.json
|
||||
|
||||
rm ${cc_folder}/code.tar.gz
|
||||
|
|
@ -116,26 +162,37 @@ function package_chaincode() {
|
|||
|
||||
function launch_chaincode_service() {
|
||||
local org=$1
|
||||
local cc_id=$2
|
||||
local cc_image=$3
|
||||
local peer=$4
|
||||
local peer=$2
|
||||
local cc_name=$3
|
||||
local cc_id=$4
|
||||
local cc_image=$5
|
||||
push_fn "Launching chaincode container \"${cc_image}\""
|
||||
|
||||
# The chaincode endpoint needs to have the generated chaincode ID available in the environment.
|
||||
# This could be from a config map, a secret, or by directly editing the deployment spec. Here we'll keep
|
||||
# things simple by using sed to substitute script variables into a yaml template.
|
||||
cat kube/${org}/${org}-cc-template.yaml \
|
||||
| sed 's,{{CHAINCODE_NAME}},'${CHAINCODE_NAME}',g' \
|
||||
| sed 's,{{CHAINCODE_NAME}},'${cc_name}',g' \
|
||||
| sed 's,{{CHAINCODE_ID}},'${cc_id}',g' \
|
||||
| sed 's,{{CHAINCODE_IMAGE}},'${cc_image}',g' \
|
||||
| sed 's,{{PEER_NAME}},'${peer}',g' \
|
||||
| exec kubectl -n $NS apply -f -
|
||||
|
||||
kubectl -n $NS rollout status deploy/${org}${peer}-cc-${CHAINCODE_NAME}
|
||||
kubectl -n $NS rollout status deploy/${org}${peer}-ccaas-${cc_name}
|
||||
|
||||
pop_fn
|
||||
}
|
||||
|
||||
function launch_chaincode() {
|
||||
local org=org1
|
||||
local cc_name=$1
|
||||
local cc_id=$2
|
||||
local cc_image=$3
|
||||
|
||||
launch_chaincode_service ${org} peer1 ${cc_name} ${cc_id} ${cc_image}
|
||||
launch_chaincode_service ${org} peer2 ${cc_name} ${cc_id} ${cc_image}
|
||||
}
|
||||
|
||||
function install_chaincode_for() {
|
||||
local org=$1
|
||||
local peer=$2
|
||||
|
|
@ -202,27 +259,6 @@ function commit_chaincode() {
|
|||
pop_fn
|
||||
}
|
||||
|
||||
# The chaincode docker image is stored in the code.tar.gz ccaas.json
|
||||
function extract_chaincode_image() {
|
||||
CHAINCODE_IMAGE=$(tar zxfO $1 code.tar.gz | tar zxfO - ccaas.json | jq -r .image)
|
||||
}
|
||||
|
||||
function extract_chaincode_name() {
|
||||
CHAINCODE_NAME=$(tar zxfO $1 code.tar.gz | tar zxfO - ccaas.json | jq -r .name)
|
||||
}
|
||||
|
||||
function launch_chaincode() {
|
||||
local cc_package=$1
|
||||
|
||||
set_chaincode_id ${cc_package}
|
||||
|
||||
extract_chaincode_image ${cc_package}
|
||||
extract_chaincode_name ${cc_package}
|
||||
|
||||
launch_chaincode_service org1 $CHAINCODE_ID $CHAINCODE_IMAGE peer1
|
||||
launch_chaincode_service org1 $CHAINCODE_ID $CHAINCODE_IMAGE peer2
|
||||
}
|
||||
|
||||
function set_chaincode_id() {
|
||||
local cc_package=$1
|
||||
|
||||
|
|
|
|||
|
|
@ -102,3 +102,11 @@ function export_peer_context() {
|
|||
export CORE_PEER_MSPCONFIGPATH=${TEMP_DIR}/enrollments/${org}/users/${org}admin/msp
|
||||
export CORE_PEER_TLS_ROOTCERT_FILE=${TEMP_DIR}/channel-msp/peerOrganizations/${org}/msp/tlscacerts/tlsca-signcert.pem
|
||||
}
|
||||
|
||||
function absolute_path() {
|
||||
local relative_path=$1
|
||||
|
||||
local abspath="$( cd "${relative_path}" && pwd )"
|
||||
|
||||
echo $abspath
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue