-
Notifications
You must be signed in to change notification settings - Fork 444
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[CE-136] Integrate blockchain-explorer
1. Remove useless private key 2. Map explorer-container 8080 to host 7060 3. Enable TLS 4. Updated channel-artifacts to v1.0.5 Change-Id: I0780dffb6d8d3533963adc8f3cba40b7e445a158 Signed-off-by: Luke <jiahaoc@vmware.com>
- Loading branch information
1 parent
054ab36
commit 4e34f89
Showing
34 changed files
with
580 additions
and
126 deletions.
There are no files selected for viewing
193 changes: 193 additions & 0 deletions
193
...r/_compose_files/fabric-1.0/local/chaincode/go/chaincode_example02/chaincode_example02.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,193 @@ | ||
/* | ||
Copyright IBM Corp. 2016 All Rights Reserved. | ||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
*/ | ||
|
||
package main | ||
|
||
import ( | ||
"fmt" | ||
"strconv" | ||
|
||
"github.com/hyperledger/fabric/core/chaincode/shim" | ||
pb "github.com/hyperledger/fabric/protos/peer" | ||
) | ||
|
||
// SimpleChaincode example simple Chaincode implementation | ||
type SimpleChaincode struct { | ||
} | ||
|
||
func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { | ||
fmt.Println("ex02 Init") | ||
_, args := stub.GetFunctionAndParameters() | ||
var A, B string // Entities | ||
var Aval, Bval int // Asset holdings | ||
var err error | ||
|
||
if len(args) != 4 { | ||
return shim.Error("Incorrect number of arguments. Expecting 4") | ||
} | ||
|
||
// Initialize the chaincode | ||
A = args[0] | ||
Aval, err = strconv.Atoi(args[1]) | ||
if err != nil { | ||
return shim.Error("Expecting integer value for asset holding") | ||
} | ||
B = args[2] | ||
Bval, err = strconv.Atoi(args[3]) | ||
if err != nil { | ||
return shim.Error("Expecting integer value for asset holding") | ||
} | ||
fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) | ||
|
||
// Write the state to the ledger | ||
err = stub.PutState(A, []byte(strconv.Itoa(Aval))) | ||
if err != nil { | ||
return shim.Error(err.Error()) | ||
} | ||
|
||
err = stub.PutState(B, []byte(strconv.Itoa(Bval))) | ||
if err != nil { | ||
return shim.Error(err.Error()) | ||
} | ||
|
||
return shim.Success(nil) | ||
} | ||
|
||
func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { | ||
fmt.Println("ex02 Invoke") | ||
function, args := stub.GetFunctionAndParameters() | ||
if function == "invoke" { | ||
// Make payment of X units from A to B | ||
return t.invoke(stub, args) | ||
} else if function == "delete" { | ||
// Deletes an entity from its state | ||
return t.delete(stub, args) | ||
} else if function == "query" { | ||
// the old "Query" is now implemtned in invoke | ||
return t.query(stub, args) | ||
} | ||
|
||
return shim.Error("Invalid invoke function name. Expecting \"invoke\" \"delete\" \"query\"") | ||
} | ||
|
||
// Transaction makes payment of X units from A to B | ||
func (t *SimpleChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response { | ||
var A, B string // Entities | ||
var Aval, Bval int // Asset holdings | ||
var X int // Transaction value | ||
var err error | ||
|
||
if len(args) != 3 { | ||
return shim.Error("Incorrect number of arguments. Expecting 3") | ||
} | ||
|
||
A = args[0] | ||
B = args[1] | ||
|
||
// Get the state from the ledger | ||
// TODO: will be nice to have a GetAllState call to ledger | ||
Avalbytes, err := stub.GetState(A) | ||
if err != nil { | ||
return shim.Error("Failed to get state") | ||
} | ||
if Avalbytes == nil { | ||
return shim.Error("Entity not found") | ||
} | ||
Aval, _ = strconv.Atoi(string(Avalbytes)) | ||
|
||
Bvalbytes, err := stub.GetState(B) | ||
if err != nil { | ||
return shim.Error("Failed to get state") | ||
} | ||
if Bvalbytes == nil { | ||
return shim.Error("Entity not found") | ||
} | ||
Bval, _ = strconv.Atoi(string(Bvalbytes)) | ||
|
||
// Perform the execution | ||
X, err = strconv.Atoi(args[2]) | ||
if err != nil { | ||
return shim.Error("Invalid transaction amount, expecting a integer value") | ||
} | ||
Aval = Aval - X | ||
Bval = Bval + X | ||
fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) | ||
|
||
// Write the state back to the ledger | ||
err = stub.PutState(A, []byte(strconv.Itoa(Aval))) | ||
if err != nil { | ||
return shim.Error(err.Error()) | ||
} | ||
|
||
err = stub.PutState(B, []byte(strconv.Itoa(Bval))) | ||
if err != nil { | ||
return shim.Error(err.Error()) | ||
} | ||
|
||
return shim.Success(nil) | ||
} | ||
|
||
// Deletes an entity from state | ||
func (t *SimpleChaincode) delete(stub shim.ChaincodeStubInterface, args []string) pb.Response { | ||
if len(args) != 1 { | ||
return shim.Error("Incorrect number of arguments. Expecting 1") | ||
} | ||
|
||
A := args[0] | ||
|
||
// Delete the key from the state in ledger | ||
err := stub.DelState(A) | ||
if err != nil { | ||
return shim.Error("Failed to delete state") | ||
} | ||
|
||
return shim.Success(nil) | ||
} | ||
|
||
// query callback representing the query of a chaincode | ||
func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { | ||
var A string // Entities | ||
var err error | ||
|
||
if len(args) != 1 { | ||
return shim.Error("Incorrect number of arguments. Expecting name of the person to query") | ||
} | ||
|
||
A = args[0] | ||
|
||
// Get the state from the ledger | ||
Avalbytes, err := stub.GetState(A) | ||
if err != nil { | ||
jsonResp := "{\"Error\":\"Failed to get state for " + A + "\"}" | ||
return shim.Error(jsonResp) | ||
} | ||
|
||
if Avalbytes == nil { | ||
jsonResp := "{\"Error\":\"Nil amount for " + A + "\"}" | ||
return shim.Error(jsonResp) | ||
} | ||
|
||
jsonResp := "{\"Name\":\"" + A + "\",\"Amount\":\"" + string(Avalbytes) + "\"}" | ||
fmt.Printf("Query Response:%s\n", jsonResp) | ||
return shim.Success(Avalbytes) | ||
} | ||
|
||
func main() { | ||
err := shim.Start(new(SimpleChaincode)) | ||
if err != nil { | ||
fmt.Printf("Error starting Simple chaincode: %s", err) | ||
} | ||
} |
112 changes: 112 additions & 0 deletions
112
...mpose_files/fabric-1.0/local/chaincode/go/chaincode_example02/chaincode_example02_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
/* | ||
Copyright IBM Corp. 2016 All Rights Reserved. | ||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
*/ | ||
package main | ||
|
||
import ( | ||
"fmt" | ||
"testing" | ||
|
||
"github.com/hyperledger/fabric/core/chaincode/shim" | ||
) | ||
|
||
func checkInit(t *testing.T, stub *shim.MockStub, args [][]byte) { | ||
res := stub.MockInit("1", args) | ||
if res.Status != shim.OK { | ||
fmt.Println("Init failed", string(res.Message)) | ||
t.FailNow() | ||
} | ||
} | ||
|
||
func checkState(t *testing.T, stub *shim.MockStub, name string, value string) { | ||
bytes := stub.State[name] | ||
if bytes == nil { | ||
fmt.Println("State", name, "failed to get value") | ||
t.FailNow() | ||
} | ||
if string(bytes) != value { | ||
fmt.Println("State value", name, "was not", value, "as expected") | ||
t.FailNow() | ||
} | ||
} | ||
|
||
func checkQuery(t *testing.T, stub *shim.MockStub, name string, value string) { | ||
res := stub.MockInvoke("1", [][]byte{[]byte("query"), []byte(name)}) | ||
if res.Status != shim.OK { | ||
fmt.Println("Query", name, "failed", string(res.Message)) | ||
t.FailNow() | ||
} | ||
if res.Payload == nil { | ||
fmt.Println("Query", name, "failed to get value") | ||
t.FailNow() | ||
} | ||
if string(res.Payload) != value { | ||
fmt.Println("Query value", name, "was not", value, "as expected") | ||
t.FailNow() | ||
} | ||
} | ||
|
||
func checkInvoke(t *testing.T, stub *shim.MockStub, args [][]byte) { | ||
res := stub.MockInvoke("1", args) | ||
if res.Status != shim.OK { | ||
fmt.Println("Invoke", args, "failed", string(res.Message)) | ||
t.FailNow() | ||
} | ||
} | ||
|
||
func TestExample02_Init(t *testing.T) { | ||
scc := new(SimpleChaincode) | ||
stub := shim.NewMockStub("ex02", scc) | ||
|
||
// Init A=123 B=234 | ||
checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("123"), []byte("B"), []byte("234")}) | ||
|
||
checkState(t, stub, "A", "123") | ||
checkState(t, stub, "B", "234") | ||
} | ||
|
||
func TestExample02_Query(t *testing.T) { | ||
scc := new(SimpleChaincode) | ||
stub := shim.NewMockStub("ex02", scc) | ||
|
||
// Init A=345 B=456 | ||
checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("345"), []byte("B"), []byte("456")}) | ||
|
||
// Query A | ||
checkQuery(t, stub, "A", "345") | ||
|
||
// Query B | ||
checkQuery(t, stub, "B", "456") | ||
} | ||
|
||
func TestExample02_Invoke(t *testing.T) { | ||
scc := new(SimpleChaincode) | ||
stub := shim.NewMockStub("ex02", scc) | ||
|
||
// Init A=567 B=678 | ||
checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("567"), []byte("B"), []byte("678")}) | ||
|
||
// Invoke A->B for 123 | ||
checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte("A"), []byte("B"), []byte("123")}) | ||
checkQuery(t, stub, "A", "444") | ||
checkQuery(t, stub, "B", "801") | ||
|
||
// Invoke B->A for 234 | ||
checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte("B"), []byte("A"), []byte("234")}) | ||
checkQuery(t, stub, "A", "678") | ||
checkQuery(t, stub, "B", "567") | ||
checkQuery(t, stub, "A", "678") | ||
checkQuery(t, stub, "B", "567") | ||
} |
Binary file modified
BIN
+34 Bytes
(110%)
src/agent/docker/_compose_files/fabric-1.0/local/channel-artifacts/Org1MSPanchors.tx
Binary file not shown.
Binary file modified
BIN
+34 Bytes
(110%)
src/agent/docker/_compose_files/fabric-1.0/local/channel-artifacts/Org2MSPanchors.tx
Binary file not shown.
Binary file modified
BIN
+25 Bytes
(110%)
src/agent/docker/_compose_files/fabric-1.0/local/channel-artifacts/channel.tx
Binary file not shown.
Binary file modified
BIN
+17 Bytes
(100%)
src/agent/docker/_compose_files/fabric-1.0/local/channel-artifacts/orderer.genesis.block
Binary file not shown.
5 changes: 0 additions & 5 deletions
5
...s/org1.example.com/ca/1c86c76138d7a9a4f8d6a1294d7155a4cd3879aca089823197e22edbb29fd2f0_sk
This file was deleted.
Oops, something went wrong.
5 changes: 0 additions & 5 deletions
5
...s/org1.example.com/ca/1ec03575460ffdccc72b24760a9adb648ffa31f2defbe1add1247e40a1f0ed9a_sk
This file was deleted.
Oops, something went wrong.
5 changes: 0 additions & 5 deletions
5
...s/org1.example.com/ca/68f1b96d880a2af547b56a66fdf25d278a23024dea2b36dd7e6667c75bdc54ac_sk
This file was deleted.
Oops, something went wrong.
5 changes: 0 additions & 5 deletions
5
...s/org1.example.com/ca/a4e04ea76079fb2fe66772cd4ff49c1b87a44b497373d2a3e657c07dc5aba537_sk
This file was deleted.
Oops, something went wrong.
File renamed without changes.
5 changes: 0 additions & 5 deletions
5
...s/org1.example.com/ca/ca9761a3c400ae5a177f2ad779a58761e488081e6258fd185e122ccd3dd5b6f3_sk
This file was deleted.
Oops, something went wrong.
5 changes: 0 additions & 5 deletions
5
...mple.com/msp/keystore/075a7ab3249cc1eb2600e7fd86394361167de27a998cb921ae57fabab684ed92_sk
This file was deleted.
Oops, something went wrong.
5 changes: 0 additions & 5 deletions
5
...mple.com/msp/keystore/2ed8c268496d280f2d78405a0622adacf5479e804a4517e8183d54ba1a2e338c_sk
This file was deleted.
Oops, something went wrong.
5 changes: 0 additions & 5 deletions
5
...mple.com/msp/keystore/3491bd151d319a877d3af82d569df903f410233455a027d9e1cc274072020da3_sk
This file was deleted.
Oops, something went wrong.
5 changes: 0 additions & 5 deletions
5
...mple.com/msp/keystore/5129797a6cc9a70b053cd58084536e8a59cd298f6547c810fb8cd32ee42daf0e_sk
This file was deleted.
Oops, something went wrong.
5 changes: 0 additions & 5 deletions
5
...mple.com/msp/keystore/ee91a7d537643618442fb6d5a2a5a45345c9c00491ffdb99754762b0e60a116c_sk
This file was deleted.
Oops, something went wrong.
5 changes: 0 additions & 5 deletions
5
...s/org2.example.com/ca/28471379ce9a39c17bf7845683c00cf832e37d0c605e03f9cf9eb6421ba06167_sk
This file was deleted.
Oops, something went wrong.
5 changes: 0 additions & 5 deletions
5
...s/org2.example.com/ca/306a41dec85c62d50544dae8cafcd49d38efee22a6b3cd72cc36636ce806fe0f_sk
This file was deleted.
Oops, something went wrong.
5 changes: 0 additions & 5 deletions
5
...s/org2.example.com/ca/81ead898dad315b2ee4b8e3ac872751c8ef661044dc27a2aa121632ba0490ce4_sk
This file was deleted.
Oops, something went wrong.
5 changes: 0 additions & 5 deletions
5
...s/org2.example.com/ca/936212003ec5235a561d7e061deea82213f927b4789fb23285ecc2a0dcf63306_sk
This file was deleted.
Oops, something went wrong.
5 changes: 0 additions & 5 deletions
5
...s/org2.example.com/ca/965b9c231a24b99f17f0c565a706285ce89df19e65f534ca20c27954b890a2e7_sk
This file was deleted.
Oops, something went wrong.
File renamed without changes.
Oops, something went wrong.