func registerChaincodeSupport(chainname chaincode.ChainName, grpcServer *grpc.Server, secHelper crypto.Peer) { //get user mode userRunsCC := false if viper.GetString("chaincode.mode") == chaincode.DevModeUserRunsChaincode { userRunsCC = true } //get chaincode startup timeout tOut, err := strconv.Atoi(viper.GetString("chaincode.startuptimeout")) if err != nil { //what went wrong ? fmt.Printf("could not retrive timeout var...setting to 5secs\n") tOut = 5000 } ccStartupTimeout := time.Duration(tOut) * time.Millisecond ccSrv := chaincode.NewChaincodeSupport(chainname, peer.GetPeerEndpoint, userRunsCC, ccStartupTimeout, secHelper) //Now that chaincode is initialized, register all system chaincodes. system_chaincode.RegisterSysCCs() pb.RegisterChaincodeSupportServer(grpcServer, ccSrv) }
//initialize peer and start up. If security==enabled, login as vp func initPeer(chainID string) (net.Listener, error) { //start clean finitPeer(nil) var opts []grpc.ServerOption if viper.GetBool("peer.tls.enabled") { creds, err := credentials.NewServerTLSFromFile(viper.GetString("peer.tls.cert.file"), viper.GetString("peer.tls.key.file")) if err != nil { return nil, fmt.Errorf("Failed to generate credentials %v", err) } opts = []grpc.ServerOption{grpc.Creds(creds)} } grpcServer := grpc.NewServer(opts...) viper.Set("peer.fileSystemPath", filepath.Join(os.TempDir(), "hyperledger", "production")) peerAddress, err := peer.GetLocalAddress() if err != nil { return nil, fmt.Errorf("Error obtaining peer address: %s", err) } lis, err := net.Listen("tcp", peerAddress) if err != nil { return nil, fmt.Errorf("Error starting peer listener %s", err) } //initialize ledger peer.MockInitialize() getPeerEndpoint := func() (*pb.PeerEndpoint, error) { return &pb.PeerEndpoint{ID: &pb.PeerID{Name: "testpeer"}, Address: peerAddress}, nil } // Install security object for peer if viper.GetBool("security.enabled") { //TODO: integrate new crypto / idp securityLevel := viper.GetInt("security.level") hashAlgorithm := viper.GetString("security.hashAlgorithm") primitives.SetSecurityLevel(hashAlgorithm, securityLevel) } else { // the primitives need to be instantiated no matter what. Otherwise // the escc code won't have a hash algorithm available to hash the proposal primitives.SetSecurityLevel("SHA2", 256) } ccStartupTimeout := time.Duration(30000) * time.Millisecond pb.RegisterChaincodeSupportServer(grpcServer, chaincode.NewChaincodeSupport(getPeerEndpoint, false, ccStartupTimeout)) chaincode.RegisterSysCCs() if err = peer.MockCreateChain(chainID); err != nil { closeListenerAndSleep(lis) return nil, err } chaincode.DeploySysCCs(chainID) go grpcServer.Serve(lis) return lis, nil }
func TestGenesis(t *testing.T) { //use a different address than what we usually use for "peer" //we override the peerAddress set in chaincode_support.go peerAddress := "0.0.0.0:50303" lis, err := net.Listen("tcp", peerAddress) if err != nil { t.Fail() t.Logf("Error starting peer listener %s", err) return } var opts []grpc.ServerOption if viper.GetBool("peer.tls.enabled") { creds, err := credentials.NewServerTLSFromFile(viper.GetString("peer.tls.cert.file"), viper.GetString("peer.tls.key.file")) if err != nil { grpclog.Fatalf("Failed to generate credentials %v", err) } opts = []grpc.ServerOption{grpc.Creds(creds)} } grpcServer := grpc.NewServer(opts...) getPeerEndpoint := func() (*protos.PeerEndpoint, error) { return &protos.PeerEndpoint{ID: &protos.PeerID{Name: "testpeer"}, Address: peerAddress}, nil } ccStartupTimeout := time.Duration(30000) * time.Millisecond protos.RegisterChaincodeSupportServer(grpcServer, chaincode.NewChaincodeSupport(chaincode.DefaultChain, getPeerEndpoint, false, ccStartupTimeout, nil)) go grpcServer.Serve(lis) ledger := ledger.InitTestLedger(t) if ledger.GetBlockchainSize() != 0 { t.Fatalf("Expected blockchain size of 0, but got %d", ledger.GetBlockchainSize()) } makeGenesisErr := MakeGenesis() if makeGenesisErr != nil { t.Fatalf("Error creating genesis block, %s", makeGenesisErr) } if ledger.GetBlockchainSize() != 1 { t.Fatalf("Expected blockchain size of 1, but got %d", ledger.GetBlockchainSize()) } }
func registerChaincodeSupport(chainname chaincode.ChainName, grpcServer *grpc.Server, secHelper crypto.Peer) { //get user mode userRunsCC := false if viper.GetString("chaincode.mode") == chaincode.DevModeUserRunsChaincode { userRunsCC = true } //get chaincode startup timeout tOut, err := strconv.Atoi(viper.GetString("chaincode.startuptimeout")) if err != nil { //what went wrong ? fmt.Printf("could not retrive timeout var...setting to 5secs\n") tOut = 5000 } ccStartupTimeout := time.Duration(tOut) * time.Millisecond //(chainname ChainName, getPeerEndpoint func() (*pb.PeerEndpoint, error), userrunsCC bool, ccstartuptimeout time.Duration, secHelper crypto.Peer) pb.RegisterChaincodeSupportServer(grpcServer, chaincode.NewChaincodeSupport(chainname, peer.GetPeerEndpoint, userRunsCC, ccStartupTimeout, secHelper)) }
// Test deploy of a transaction. func TestExecuteDeploySysChaincode(t *testing.T) { testDBWrapper.CleanDB(t) var opts []grpc.ServerOption grpcServer := grpc.NewServer(opts...) viper.Set("peer.fileSystemPath", "/var/hyperledger/test/tmpdb") //use a different address than what we usually use for "peer" //we override the peerAddress set in chaincode_support.go peerAddress := "0.0.0.0:21726" lis, err := net.Listen("tcp", peerAddress) if err != nil { t.Fail() t.Logf("Error starting peer listener %s", err) return } getPeerEndpoint := func() (*pb.PeerEndpoint, error) { return &pb.PeerEndpoint{ID: &pb.PeerID{Name: "testpeer"}, Address: peerAddress}, nil } ccStartupTimeout := time.Duration(5000) * time.Millisecond pb.RegisterChaincodeSupportServer(grpcServer, chaincode.NewChaincodeSupport(chaincode.DefaultChain, getPeerEndpoint, false, ccStartupTimeout, nil)) go grpcServer.Serve(lis) var ctxt = context.Background() //set systemChaincodes to sample systemChaincodes = []*api.SystemChaincode{ { Enabled: true, Name: "sample_syscc", Path: "github.com/hyperledger/fabric/core/system_chaincode/samplesyscc", InitArgs: [][]byte{}, Chaincode: &samplesyscc.SampleSysCC{}, }, } // System chaincode has to be enabled viper.Set("chaincode.system", map[string]string{"sample_syscc": "true"}) RegisterSysCCs() url := "github.com/hyperledger/fabric/core/system_chaincode/sample_syscc" f := "putval" args := util.ToChaincodeArgs(f, "greeting", "hey there") spec := &pb.ChaincodeSpec{Type: 1, ChaincodeID: &pb.ChaincodeID{Name: "sample_syscc", Path: url}, CtorMsg: &pb.ChaincodeInput{Args: args}} _, _, _, err = invoke(ctxt, spec, pb.Transaction_CHAINCODE_INVOKE) if err != nil { closeListenerAndSleep(lis) t.Fail() t.Logf("Error invoking sample_syscc: %s", err) return } f = "getval" args = util.ToChaincodeArgs(f, "greeting") spec = &pb.ChaincodeSpec{Type: 1, ChaincodeID: &pb.ChaincodeID{Name: "sample_syscc", Path: url}, CtorMsg: &pb.ChaincodeInput{Args: args}} _, _, _, err = invoke(ctxt, spec, pb.Transaction_CHAINCODE_QUERY) if err != nil { closeListenerAndSleep(lis) t.Fail() t.Logf("Error invoking sample_syscc: %s", err) return } cds := &pb.ChaincodeDeploymentSpec{ExecEnv: 1, ChaincodeSpec: &pb.ChaincodeSpec{Type: 1, ChaincodeID: &pb.ChaincodeID{Name: "sample_syscc", Path: url}, CtorMsg: &pb.ChaincodeInput{Args: args}}} chaincode.GetChain(chaincode.DefaultChain).Stop(ctxt, cds) closeListenerAndSleep(lis) }
func initVP() { var opts []grpc.ServerOption if viper.GetBool("peer.tls.enabled") { creds, err := credentials.NewServerTLSFromFile(viper.GetString("peer.tls.cert.file"), viper.GetString("peer.tls.key.file")) if err != nil { grpclog.Fatalf("Failed to generate credentials %v", err) } opts = []grpc.ServerOption{grpc.Creds(creds)} } grpcServer := grpc.NewServer(opts...) //lis, err := net.Listen("tcp", viper.GetString("peer.address")) //use a different address than what we usually use for "peer" //we override the peerAddress set in chaincode_support.go peerAddress := "0.0.0.0:40404" var err error lis, err = net.Listen("tcp", peerAddress) if err != nil { return } getPeerEndpoint := func() (*pb.PeerEndpoint, error) { return &pb.PeerEndpoint{ID: &pb.PeerID{Name: "testpeer"}, Address: peerAddress}, nil } ccStartupTimeout := time.Duration(chaincodeStartupTimeoutDefault) * time.Millisecond userRunsCC := true // Install security object for peer var secHelper crypto.Peer if viper.GetBool("security.enabled") { enrollID := viper.GetString("security.enrollID") enrollSecret := viper.GetString("security.enrollSecret") var err error if viper.GetBool("peer.validator.enabled") { testLogger.Debug("Registering validator with enroll ID: %s", enrollID) if err = crypto.RegisterValidator(enrollID, nil, enrollID, enrollSecret); nil != err { panic(err) } testLogger.Debug("Initializing validator with enroll ID: %s", enrollID) secHelper, err = crypto.InitValidator(enrollID, nil) if nil != err { panic(err) } } else { testLogger.Debug("Registering non-validator with enroll ID: %s", enrollID) if err = crypto.RegisterPeer(enrollID, nil, enrollID, enrollSecret); nil != err { panic(err) } testLogger.Debug("Initializing non-validator with enroll ID: %s", enrollID) secHelper, err = crypto.InitPeer(enrollID, nil) if nil != err { panic(err) } } } pb.RegisterChaincodeSupportServer(grpcServer, chaincode.NewChaincodeSupport(chaincode.DefaultChain, getPeerEndpoint, userRunsCC, ccStartupTimeout, secHelper)) grpcServer.Serve(lis) }