63 Star 185 Fork 3

Gitee 极速下载/hyperledger-fabric

Create your Gitee Account
Explore and code with more than 13.5 million developers,Free private repositories !:)
Sign up
文件
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/hyperledger/fabric
Clone or Download
platform.go 2.44 KB
Copy Edit Raw Blame History
/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package car
import (
"archive/tar"
"bytes"
"fmt"
"io"
"io/ioutil"
"strings"
"github.com/hyperledger/fabric/core/chaincode/platforms"
"github.com/hyperledger/fabric/core/chaincode/platforms/util"
cutil "github.com/hyperledger/fabric/core/container/util"
pb "github.com/hyperledger/fabric/protos/peer"
)
// Platform for the CAR type
type Platform struct {
}
// Name returns the name of this platform
func (carPlatform *Platform) Name() string {
return pb.ChaincodeSpec_CAR.String()
}
// ValidatePath validates the chaincode path for CAR types to satisfy
// the platform interface. This chaincode type currently doesn't
// require anything specific so we just implicitly approve any spec
func (carPlatform *Platform) ValidatePath(path string) error {
return nil
}
func (carPlatform *Platform) ValidateCodePackage(codePackage []byte) error {
// CAR platform will validate the code package within chaintool
return nil
}
func (carPlatform *Platform) GetDeploymentPayload(path string) ([]byte, error) {
return ioutil.ReadFile(path)
}
func (carPlatform *Platform) GenerateDockerfile() (string, error) {
var buf []string
//let the executable's name be chaincode ID's name
buf = append(buf, "FROM "+cutil.GetDockerfileFromConfig("chaincode.car.runtime"))
buf = append(buf, "ADD binpackage.tar /usr/local/bin")
dockerFileContents := strings.Join(buf, "\n")
return dockerFileContents, nil
}
func (carPlatform *Platform) GenerateDockerBuild(path string, code []byte, tw *tar.Writer) error {
// Bundle the .car file into a tar stream so it may be transferred to the builder container
codepackage, output := io.Pipe()
go func() {
tw := tar.NewWriter(output)
err := cutil.WriteBytesToPackage("codepackage.car", code, tw)
tw.Close()
output.CloseWithError(err)
}()
binpackage := bytes.NewBuffer(nil)
err := util.DockerBuild(util.DockerBuildOptions{
Cmd: "java -jar /usr/local/bin/chaintool buildcar /chaincode/input/codepackage.car -o /chaincode/output/chaincode",
InputStream: codepackage,
OutputStream: binpackage,
})
if err != nil {
return fmt.Errorf("Error building CAR: %s", err)
}
return cutil.WriteBytesToPackage("binpackage.tar", binpackage.Bytes(), tw)
}
//GetMetadataProvider fetches metadata provider given deployment spec
func (carPlatform *Platform) GetMetadataProvider(code []byte) platforms.MetadataProvider {
return &MetadataProvider{}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/mirrors/hyperledger-fabric.git
git@gitee.com:mirrors/hyperledger-fabric.git
mirrors
hyperledger-fabric
hyperledger-fabric
v1.4.12

Search