Scenario: You have a channel that is used withboth 1.4 and v2 Peers. Chaincode needs to be installed on both peers as a CDS file. How to create the CDS file that can be used by both peers? Taking an example contract from Fabric-Samples, these are the tiles currently in the contract. Note that this MUST have the go.mod, The folder is `chaindcode-go` ``` ls -lart chaincode-go total 36 -rw-r--r-- 1 matthew matthew 16310 Apr 26 08:54 go.sum -rw-r--r-- 1 matthew matthew 420 Apr 26 08:54 go.mod drwxr-xr-x 3 matthew matthew 4096 Apr 26 08:54 chaincode -rw-r--r-- 1 matthew matthew 530 Apr 26 08:54 assetTransfer.go ``` Using my current version of go (1.16.3) run ```sh go mod vendor ``` This will create the vendor folder ```sh ls -lart vendor total 32 drwxr-xr-x 4 matthew matthew 4096 Aug 20 08:56 .. drwxr-xr-x 14 matthew matthew 4096 Aug 20 08:56 github.com drwxr-xr-x 3 matthew matthew 4096 Aug 20 08:56 golang.org drwxr-xr-x 4 matthew matthew 4096 Aug 20 08:56 google.golang.org -rw-r--r-- 1 matthew matthew 4935 Aug 20 08:56 modules.txt drwxr-xr-x 3 matthew matthew 4096 Aug 20 08:56 gopkg.in drwxr-xr-x 6 matthew matthew 4096 Aug 20 08:56 . ``` The go.mod file contains the following ``` more go.mod module github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go go 1.14 require ( github.com/golang/protobuf v1.3.2 github.com/hyperledger/fabric-chaincode-go v0.0.0-20200424173110-d7076418f212 github.com/hyperledger/fabric-contract-api-go v1.1.0 github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e github.com/stretchr/testify v1.5.1 golang.org/x/tools v0.1.0 // indirect ) ``` The most reliable way of properly creating the CDS is use the peer commands in the 1.4 fabric-tools docker image. It's is critical to map in the directory containing the contrace, such that it matches the module name. Run this from the directory that contains `chaincode-go` ``` # make a directory to put the cds file mkdir -p cds docker run -it -e MYUID=$(id -u) -v $(pwd)/cds:/cds -v $(pwd):/opt/gopath/src/github.com/hyperledger/fabric-samples/asset-transfer-basic/ hyperledger/fabric-tools:1.4.9 bash # then in the docker container peer chaincode package -n chaincode-go -v 1.0 -l golang -p github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go /cds/chaincode-go.cds # as this is running as root you need to change the owner chown ${MYUID} /cds/chaincode-go.cds ``` And as one long command... ```bash docker run -it -e MYUID=$(id -u) -v $(pwd)/cds:/cds -v $(pwd):/opt/gopath/src/github.com/hyperledger/fabric-samples/asset-transfer-basic/ hyperledger/fabric-tools:1.4.9 bash -c "peer chaincode package -n chaincode-go -v 1.0 -l golang -p github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go /cds/chaincode-go.cds && chown ${MYUID} /cds/chaincode-go.cds" ``` The cds file that is produced should work with both 1.4 and 2.0 peers