Skip to content

Commit de83205

Browse files
authored
Merge pull request #154 from VRamakrishna/main
Fabric Interoperation Chaincode Refactoring and Augmentation for Access Controls, and Logging Improvements
2 parents 95a138e + e4346ee commit de83205

File tree

69 files changed

+1480
-4059
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+1480
-4059
lines changed

.github/workflows/data-transfer.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,20 +164,20 @@ jobs:
164164
TOTAL=4
165165
166166
# CORDA - FABRIC1
167-
./clients/build/install/clients/bin/clients request-state localhost:9081 relay-network1:9080/network1/mychannel:simplestate:Read:a &> tmp.out
167+
./clients/build/install/clients/bin/clients request-state localhost:9081 relay-network1:9080/network1/mychannel:simplestate:Read:a 1> tmp.out
168168
tail -n 1 tmp.out | grep "SimpleState(key=a, value=Arcturus" && COUNT=$(( COUNT + 1 )) && echo "PASS"
169169
cat tmp.out
170170
171-
./clients/build/install/clients/bin/clients get-state a &> tmp.out
171+
./clients/build/install/clients/bin/clients get-state a 1> tmp.out
172172
tail -n 1 tmp.out | grep "SimpleState(key=a, value=Arcturus" && COUNT=$(( COUNT + 1 )) && echo "PASS"
173173
cat tmp.out
174174
175175
# CORDA - FABRIC2
176-
./clients/build/install/clients/bin/clients request-state localhost:9081 relay-network2:9083/network2/mychannel:simplestate:Read:Arcturus &> tmp.out
176+
./clients/build/install/clients/bin/clients request-state localhost:9081 relay-network2:9083/network2/mychannel:simplestate:Read:Arcturus 1> tmp.out
177177
tail -n 1 tmp.out | grep "SimpleState(key=Arcturus, value=17.671" && COUNT=$(( COUNT + 1 )) && echo "PASS"
178178
cat tmp.out
179179
180-
./clients/build/install/clients/bin/clients get-state Arcturus &> tmp.out
180+
./clients/build/install/clients/bin/clients get-state Arcturus 1> tmp.out
181181
tail -n 1 tmp.out | grep "SimpleState(key=Arcturus, value=17.671" && COUNT=$(( COUNT + 1 )) && echo "PASS"
182182
cat tmp.out
183183

.github/workflows/go.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
mv go.mod go.mod.bkp
4141
cp go.mod.local go.mod
4242
cp -r ../../../../../common/protos-go ./protos-go
43-
cp -r ../../libs/assetexchange ./assetexchange
43+
cp -r ../../libs ./libs
4444
rm go.sum
4545
go mod tidy
4646
working-directory: core/network/fabric-interop-cc/contracts/interop

core/network/corda-interop-app/interop-workflows/src/main/kotlin/com/weaver/corda/app/interop/flows/WriteExternalStateFlows.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class WriteExternalStateInitiator(
6363
participants = listOf(ourIdentity),
6464
meta = view.meta.toByteArray(),
6565
state = view.data.toByteArray())
66-
println("Storing ExternalState in the vault: $state \n")
66+
println("Storing ExternalState in the vault:\n\tLinear Id = ${state.linearId}\n\tParticipants = ${state.participants}\n\tMeta = ${view.meta}\tState = ${Base64.getEncoder().encodeToString(state.state)}\n")
6767

6868
// 3. Build the transaction
6969
val notary = serviceHub.networkMapCache.notaryIdentities.first()

core/network/fabric-interop-cc/contracts/interop/access_control_cc_test.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313

1414
"github.com/stretchr/testify/require"
1515
"github.com/hyperledger-labs/weaver-dlt-interoperability/common/protos-go/common"
16+
wtest "github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/testutils"
1617
)
1718

1819
var accessControlAsset = common.AccessControlPolicy{
@@ -26,7 +27,8 @@ var accessControlAsset = common.AccessControlPolicy{
2627
}
2728

2829
func TestGetAccessControlPolicyBySecurityDomain(t *testing.T) {
29-
ctx, chaincodeStub, interopcc := prepMockStub()
30+
ctx, chaincodeStub := wtest.PrepMockStub()
31+
interopcc := SmartContract{}
3032

3133
// Case when no access control policy is found
3234
acString, getError := interopcc.GetAccessControlPolicyBySecurityDomain(ctx, "2345")
@@ -43,7 +45,8 @@ func TestGetAccessControlPolicyBySecurityDomain(t *testing.T) {
4345
}
4446

4547
func TestCreateAccessControlPolicy(t *testing.T) {
46-
ctx, chaincodeStub, interopcc := prepMockStub()
48+
ctx, chaincodeStub := wtest.PrepMockStub()
49+
interopcc := SmartContract{}
4750

4851
// Happy case. No existing access control policy is found creates one.
4952
accessControlBytes, err := json.Marshal(&accessControlAsset)
@@ -60,7 +63,8 @@ func TestCreateAccessControlPolicy(t *testing.T) {
6063
}
6164

6265
func TestUpdateAccessControlPolicy(t *testing.T) {
63-
ctx, chaincodeStub, interopcc := prepMockStub()
66+
ctx, chaincodeStub := wtest.PrepMockStub()
67+
interopcc := SmartContract{}
6468

6569
// Case when no access control policy is found
6670
accessControlBytes, err := json.Marshal(&accessControlAsset)
@@ -78,7 +82,8 @@ func TestUpdateAccessControlPolicy(t *testing.T) {
7882
}
7983

8084
func TestDeleteAccessControlPolicy(t *testing.T) {
81-
ctx, chaincodeStub, interopcc := prepMockStub()
85+
ctx, chaincodeStub := wtest.PrepMockStub()
86+
interopcc := SmartContract{}
8287

8388
// Case when a policy exists
8489
chaincodeStub.GetStateReturns([]byte{}, nil)
@@ -97,7 +102,8 @@ func TestDeleteAccessControlPolicy(t *testing.T) {
97102
}
98103

99104
func TestVerifyAccessToCC(t *testing.T) {
100-
ctx, chaincodeStub, interopcc := prepMockStub()
105+
ctx, chaincodeStub := wtest.PrepMockStub()
106+
interopcc := SmartContract{}
101107

102108
// data for tests
103109
validAddressStruct := FabricViewAddress{

core/network/fabric-interop-cc/contracts/interop/go.mod

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ require (
66
github.com/golang/protobuf v1.5.2
77
github.com/hyperledger-labs/weaver-dlt-interoperability/common/protos-go v1.2.1
88
github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/assetexchange v1.2.2
9-
github.com/hyperledger/fabric-chaincode-go v0.0.0-20200728190242-9b3ae92d8664
9+
github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/testutils v0.0.0-20210824211358-a73887e0a527
10+
github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/utils v0.0.0-20210824193215-dabfe11fd0d1
11+
github.com/hyperledger/fabric-chaincode-go v0.0.0-20210718160520-38d29fabecb9
1012
github.com/hyperledger/fabric-contract-api-go v1.1.1
1113
github.com/hyperledger/fabric-protos-go v0.0.0-20210720123151-f0dc3e2a0871
1214
github.com/sirupsen/logrus v1.8.1
1315
github.com/stretchr/testify v1.6.1
1416
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
1517
google.golang.org/protobuf v1.27.1
16-
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect
1718
)

core/network/fabric-interop-cc/contracts/interop/go.mod.local

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,21 @@ module github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabr
33
go 1.16
44

55
replace github.com/hyperledger-labs/weaver-dlt-interoperability/common/protos-go => ./protos-go
6-
replace github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/assetexchange => ./assetexchange
6+
replace github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/assetexchange => ./libs/assetexchange
7+
replace github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/utils => ./libs/utils
8+
replace github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/testutils => ./libs/testutils
79

810
require (
911
github.com/golang/protobuf v1.5.2
1012
github.com/hyperledger-labs/weaver-dlt-interoperability/common/protos-go v1.2.1
1113
github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/assetexchange v1.2.2
12-
github.com/hyperledger/fabric-chaincode-go v0.0.0-20200728190242-9b3ae92d8664
14+
github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/testutils v0.0.0-20210824211358-a73887e0a527
15+
github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/utils v0.0.0-20210824193215-dabfe11fd0d1
16+
github.com/hyperledger/fabric-chaincode-go v0.0.0-20210718160520-38d29fabecb9
1317
github.com/hyperledger/fabric-contract-api-go v1.1.1
1418
github.com/hyperledger/fabric-protos-go v0.0.0-20210720123151-f0dc3e2a0871
1519
github.com/sirupsen/logrus v1.8.1
1620
github.com/stretchr/testify v1.6.1
1721
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
1822
google.golang.org/protobuf v1.27.1
19-
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect
2023
)

core/network/fabric-interop-cc/contracts/interop/go.sum

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq
6161
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
6262
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
6363
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
64-
github.com/golang/protobuf v1.5.0 h1:LUVKkCeviFUMKqHa4tXIIij/lbhnMbP7Fn5wKdKkRh4=
6564
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
6665
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
6766
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
@@ -75,31 +74,21 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
7574
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
7675
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
7776
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
78-
github.com/hyperledger-labs/weaver-dlt-interoperability v0.0.0-20210726084038-2210f22a1d24 h1:mDWoIWHe2zPqdMznLpWR4n35xkQrPQYP0uzcndBXIT8=
79-
github.com/hyperledger-labs/weaver-dlt-interoperability v0.0.0-20210727080752-b85327c95eb1 h1:ehon3XZTK0gV7VMIjN6qyfLDXtT4QWsg78X72atsQm8=
80-
github.com/hyperledger-labs/weaver-dlt-interoperability/common/protos-go v1.2.1 h1:c9VK82wttYXTe4/UfnDq2Gq1Zu4Yxcxx1PbhEQHKuvA=
81-
github.com/hyperledger-labs/weaver-dlt-interoperability/common/protos-go v1.2.1/go.mod h1:yJq9oxxBHPryM8hVFiqM5HgfV2XFj5Tzb9Unx9D+YuI=
82-
github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/assetexchange v1.2.2 h1:QGCVKluaSvb6KyiAlOE6QUoWaPyQaFDKOO1HOkWgXrI=
83-
github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/assetexchange v1.2.2/go.mod h1:+EM9VNhMfVbspMYwQawE9UHrU0j3OOLERcVBP+DkB1w=
8477
github.com/hyperledger/fabric-chaincode-go v0.0.0-20200424173110-d7076418f212/go.mod h1:N7H3sA7Tx4k/YzFq7U0EPdqJtqvM4Kild0JoCc7C0Dc=
85-
github.com/hyperledger/fabric-chaincode-go v0.0.0-20200728190242-9b3ae92d8664 h1:Pu/9SNpo71SJj5DGehCXOKD9QGQ3MsuWjpsLM9Mkdwg=
86-
github.com/hyperledger/fabric-chaincode-go v0.0.0-20200728190242-9b3ae92d8664/go.mod h1:N7H3sA7Tx4k/YzFq7U0EPdqJtqvM4Kild0JoCc7C0Dc=
87-
github.com/hyperledger/fabric-contract-api-go v1.1.0 h1:K9uucl/6eX3NF0/b+CGIiO1IPm1VYQxBkpnVGJur2S4=
88-
github.com/hyperledger/fabric-contract-api-go v1.1.0/go.mod h1:nHWt0B45fK53owcFpLtAe8DH0Q5P068mnzkNXMPSL7E=
78+
github.com/hyperledger/fabric-chaincode-go v0.0.0-20210718160520-38d29fabecb9 h1:1cAZHHrBYFrX3bwQGhOZtOB4sCM9QWVppd81O8vsPXs=
79+
github.com/hyperledger/fabric-chaincode-go v0.0.0-20210718160520-38d29fabecb9/go.mod h1:N7H3sA7Tx4k/YzFq7U0EPdqJtqvM4Kild0JoCc7C0Dc=
8980
github.com/hyperledger/fabric-contract-api-go v1.1.1 h1:gDhOC18gjgElNZ85kFWsbCQq95hyUP/21n++m0Sv6B0=
9081
github.com/hyperledger/fabric-contract-api-go v1.1.1/go.mod h1:+39cWxbh5py3NtXpRA63rAH7NzXyED+QJx1EZr0tJPo=
9182
github.com/hyperledger/fabric-protos-go v0.0.0-20190919234611-2a87503ac7c9/go.mod h1:xVYTjK4DtZRBxZ2D9aE4y6AbLaPwue2o/criQyQbVD0=
9283
github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e/go.mod h1:xVYTjK4DtZRBxZ2D9aE4y6AbLaPwue2o/criQyQbVD0=
93-
github.com/hyperledger/fabric-protos-go v0.0.0-20210528200356-82833ecdac31 h1:T/uwoFIUioDDLffuJ/XgMLOWCUcx95/xXidv5igafl8=
94-
github.com/hyperledger/fabric-protos-go v0.0.0-20210528200356-82833ecdac31/go.mod h1:xVYTjK4DtZRBxZ2D9aE4y6AbLaPwue2o/criQyQbVD0=
84+
github.com/hyperledger/fabric-protos-go v0.0.0-20200707132912-fee30f3ccd23/go.mod h1:xVYTjK4DtZRBxZ2D9aE4y6AbLaPwue2o/criQyQbVD0=
9585
github.com/hyperledger/fabric-protos-go v0.0.0-20210720123151-f0dc3e2a0871 h1:d7do07Q4LaOFAEWceRwUwVDdcfx3BdLeZYyUGtbHfRk=
9686
github.com/hyperledger/fabric-protos-go v0.0.0-20210720123151-f0dc3e2a0871/go.mod h1:xVYTjK4DtZRBxZ2D9aE4y6AbLaPwue2o/criQyQbVD0=
9787
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
9888
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
9989
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
10090
github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
10191
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
102-
github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s=
10392
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
10493
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
10594
github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
@@ -123,7 +112,6 @@ github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
123112
github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk=
124113
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
125114
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
126-
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
127115
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
128116
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
129117
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=

core/network/fabric-interop-cc/contracts/interop/handle_external_request.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
log "github.com/sirupsen/logrus"
1919
"github.com/hyperledger-labs/weaver-dlt-interoperability/common/protos-go/common"
2020
protoV2 "google.golang.org/protobuf/proto"
21+
wutils "github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/utils"
2122
)
2223

2324
// HandleExternalRequest chaincode processes requests that come from external networks.
@@ -28,6 +29,16 @@ import (
2829
// 3. Checks the access control policy for the requester and view address is met
2930
// 4. Calls application chaincode
3031
func (s *SmartContract) HandleExternalRequest(ctx contractapi.TransactionContextInterface, b64QueryBytes string) (string, error) {
32+
if !s.testMode {
33+
relayAccessCheck, err := wutils.IsClientRelay(ctx.GetStub())
34+
if err != nil {
35+
return "", err
36+
}
37+
if !relayAccessCheck {
38+
return "", fmt.Errorf("Illegal access by relay")
39+
}
40+
fmt.Println("Relay access check passed")
41+
}
3142
queryBytes, err := base64.StdEncoding.DecodeString(b64QueryBytes)
3243
if err != nil {
3344
errorMessage := fmt.Sprintf("Unable to base64 decode data: %s", err.Error())

core/network/fabric-interop-cc/contracts/interop/handle_external_request_test.go

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/stretchr/testify/require"
2727
"github.com/hyperledger-labs/weaver-dlt-interoperability/common/protos-go/common"
2828
protoV2 "google.golang.org/protobuf/proto"
29+
wtest "github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/testutils"
2930
)
3031

3132
func TestHandleExternalRequest(t *testing.T) {
@@ -113,15 +114,19 @@ func TestHandleExternalRequest(t *testing.T) {
113114
}
114115

115116
func testHandleExternalRequestInvalidJSON(t *testing.T) {
116-
ctx, _, interopcc := prepMockStub()
117+
ctx, _ := wtest.PrepMockStub()
118+
interopcc := SmartContract{}
119+
interopcc.testMode = true
117120

118121
// Invalid Input
119122
_, err := interopcc.HandleExternalRequest(ctx, "Invalid Input")
120123
require.EqualError(t, err, fmt.Sprintf("Unable to base64 decode data: illegal base64 data at input byte 7"))
121124
}
122125

123126
func testHandleExternalRequestSignatureNotBase64(t *testing.T, query *common.Query) {
124-
ctx, _, interopcc := prepMockStub()
127+
ctx, _ := wtest.PrepMockStub()
128+
interopcc := SmartContract{}
129+
interopcc.testMode = true
125130

126131
queryBytes, err := protoV2.Marshal(query)
127132
require.NoError(t, err)
@@ -132,7 +137,9 @@ func testHandleExternalRequestSignatureNotBase64(t *testing.T, query *common.Que
132137
}
133138

134139
func testHandleExternalRequestSignatureCertificateMismatch(t *testing.T, query *common.Query) {
135-
ctx, _, interopcc := prepMockStub()
140+
ctx, _ := wtest.PrepMockStub()
141+
interopcc := SmartContract{}
142+
interopcc.testMode = true
136143

137144
// set correct values for this test case
138145
query.RequestorSignature = "U2lnbmF0dXJl"
@@ -145,7 +152,9 @@ func testHandleExternalRequestSignatureCertificateMismatch(t *testing.T, query *
145152
}
146153

147154
func testHandleExternalRequestInvalidCert(t *testing.T, query *common.Query) {
148-
ctx, _, interopcc := prepMockStub()
155+
ctx, _ := wtest.PrepMockStub()
156+
interopcc := SmartContract{}
157+
interopcc.testMode = true
149158

150159
// set correct values for this test case
151160
query.Certificate = "cert"
@@ -158,7 +167,9 @@ func testHandleExternalRequestInvalidCert(t *testing.T, query *common.Query) {
158167
}
159168

160169
func testHandleExternalRequestECDSAHappyCase(t *testing.T, query *common.Query, validCertificate string, signature []byte, pbResp pb.Response, accessControl *common.AccessControlPolicy, membership *common.Membership) {
161-
ctx, chaincodeStub, interopcc := prepMockStub()
170+
ctx, chaincodeStub := wtest.PrepMockStub()
171+
interopcc := SmartContract{}
172+
interopcc.testMode = true
162173

163174
// set correct values for the success case
164175
query.Certificate = validCertificate
@@ -189,7 +200,9 @@ func testHandleExternalRequestECDSAHappyCase(t *testing.T, query *common.Query,
189200
}
190201

191202
func testHandleExternalRequestED25519Signature(t *testing.T, query *common.Query, pbResp pb.Response, accessControl *common.AccessControlPolicy, fabricMembership *common.Membership, template x509.Certificate) {
192-
ctx, chaincodeStub, interopcc := prepMockStub()
203+
ctx, chaincodeStub := wtest.PrepMockStub()
204+
interopcc := SmartContract{}
205+
interopcc.testMode = true
193206

194207
// create ed25519 cert and signature
195208
certBytes, privKey, err := createED25519CertAndKeyFromTemplate(template)
@@ -223,7 +236,9 @@ func testHandleExternalRequestED25519Signature(t *testing.T, query *common.Query
223236
}
224237

225238
func testHandleExternalRequestNoMembership(t *testing.T, query *common.Query, validCertificate string, signature []byte, pbResp pb.Response) {
226-
ctx, chaincodeStub, interopcc := prepMockStub()
239+
ctx, chaincodeStub := wtest.PrepMockStub()
240+
interopcc := SmartContract{}
241+
interopcc.testMode = true
227242

228243
// set correct values for this test case
229244
query.Certificate = validCertificate
@@ -241,7 +256,9 @@ func testHandleExternalRequestNoMembership(t *testing.T, query *common.Query, va
241256
}
242257

243258
func testHandleExternalRequestNoAccessControlPolicy(t *testing.T, query *common.Query, validCertificate string, signature []byte, pbResp pb.Response, membership *common.Membership) {
244-
ctx, chaincodeStub, interopcc := prepMockStub()
259+
ctx, chaincodeStub := wtest.PrepMockStub()
260+
interopcc := SmartContract{}
261+
interopcc.testMode = true
245262

246263
// set correct values for this test case
247264
query.Certificate = validCertificate

core/network/fabric-interop-cc/contracts/interop/main.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@ import (
1414
"github.com/hyperledger/fabric-chaincode-go/shim"
1515
"github.com/hyperledger/fabric-contract-api-go/contractapi"
1616
log "github.com/sirupsen/logrus"
17+
wutils "github.com/hyperledger-labs/weaver-dlt-interoperability/core/network/fabric-interop-cc/libs/utils"
1718
)
1819

1920
const applicationCCKey = "applicationccid"
2021

2122
// SmartContract provides functions for managing arbitrary key-value pairs
2223
type SmartContract struct {
2324
contractapi.Contract
25+
testMode bool
2426
}
2527

2628
func init() {
@@ -52,6 +54,28 @@ func (s *SmartContract) InitLedger(ctx contractapi.TransactionContextInterface)
5254
return errors.New(errMsg)
5355
}
5456

57+
// Infer local chaincode ID
58+
localCCId, err := wutils.GetLocalChaincodeID(ctx.GetStub())
59+
if err != nil {
60+
errMsg := fmt.Sprintf("Error getting this chaincode's ID: %s", err.Error())
61+
fmt.Printf(errMsg)
62+
return errors.New(errMsg)
63+
}
64+
// Record local chaincode ID for lookup during asset lock management
65+
err = ctx.GetStub().PutState(wutils.GetLocalChaincodeIDKey(), []byte(localCCId))
66+
if err != nil {
67+
errMsg := fmt.Sprintf("Error saving this chaincode's ID: %s", err.Error())
68+
fmt.Printf(errMsg)
69+
return errors.New(errMsg)
70+
}
71+
// This is the Interop chaincode; record its ID for lookup during asset lock management
72+
err = ctx.GetStub().PutState(wutils.GetInteropChaincodeIDKey(), []byte(localCCId))
73+
if err != nil {
74+
errMsg := fmt.Sprintf("Error saving this chaincode's ID: %s", err.Error())
75+
fmt.Printf(errMsg)
76+
return errors.New(errMsg)
77+
}
78+
5579
return nil
5680
}
5781

@@ -65,7 +89,9 @@ func (s *SmartContract) GetApplicationID(ctx contractapi.TransactionContextInter
6589
}
6690

6791
func main() {
68-
chaincode, err := contractapi.NewChaincode(new(SmartContract))
92+
sc := new(SmartContract)
93+
sc.testMode = false
94+
chaincode, err := contractapi.NewChaincode(sc)
6995

7096
if err != nil {
7197
fmt.Printf("Error creating Interop chaincode: %s", err.Error())

0 commit comments

Comments
 (0)