diff --git a/Makefile b/Makefile index 98f93e281..82a170712 100644 --- a/Makefile +++ b/Makefile @@ -68,5 +68,5 @@ clean: rm -rf ./integration/token/tcc/basic/fabtoken/cmd/ .PHONY: tokengen -zkatgen: +tokengen: @go install github.com/hyperledger-labs/fabric-token-sdk/cmd/tokengen diff --git a/cmd/tokengen/main.go b/cmd/tokengen/main.go index 63c06d81a..0eeb5edf4 100644 --- a/cmd/tokengen/main.go +++ b/cmd/tokengen/main.go @@ -14,6 +14,7 @@ import ( "github.com/spf13/cobra" "github.com/spf13/viper" + "github.com/hyperledger-labs/fabric-token-sdk/integration/nwo/artifactgen/gen" "github.com/hyperledger-labs/fabric-token-sdk/token/core/cmd/certfier" pp2 "github.com/hyperledger-labs/fabric-token-sdk/token/core/cmd/pp" "github.com/hyperledger-labs/fabric-token-sdk/token/core/cmd/version" @@ -42,6 +43,7 @@ func main() { mainCmd.AddCommand(pp2.Cmd()) mainCmd.AddCommand(certfier.KeyPairGenCmd()) + mainCmd.AddCommand(gen.Cmd()) mainCmd.AddCommand(version.Cmd()) // On failure Cobra prints the usage message and error string, so we only diff --git a/go.mod b/go.mod index ebcc76bb1..5ca0a80f9 100755 --- a/go.mod +++ b/go.mod @@ -32,5 +32,5 @@ require ( go.uber.org/atomic v1.7.0 google.golang.org/grpc v1.36.1 // indirect google.golang.org/protobuf v1.26.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v2 v2.4.0 ) diff --git a/integration/nwo/artifactgen/gen/gen.go b/integration/nwo/artifactgen/gen/gen.go new file mode 100644 index 000000000..0a943d04a --- /dev/null +++ b/integration/nwo/artifactgen/gen/gen.go @@ -0,0 +1,129 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package gen + +import ( + "fmt" + "io/ioutil" + + "github.com/pkg/errors" + "github.com/spf13/cobra" + + "github.com/hyperledger-labs/fabric-smart-client/integration" + "github.com/hyperledger-labs/fabric-smart-client/integration/nwo" + "github.com/hyperledger-labs/fabric-smart-client/integration/nwo/fabric" + "github.com/hyperledger-labs/fabric-smart-client/integration/nwo/fsc" + + "gopkg.in/yaml.v2" + + "github.com/hyperledger-labs/fabric-token-sdk/integration/nwo/token" +) + +type Topology struct { + Name string `yaml:"name,omitempty"` +} + +type Topologies struct { + Topologies []Topology `yaml:"topologies,omitempty"` +} + +type T struct { + Topologies []interface{} `yaml:"topologies,omitempty"` +} + +var topologyFile string +var output string +var port int + +// Cmd returns the Cobra Command for Version +func Cmd() *cobra.Command { + // Set the flags on the node start command. + flags := cobraCommand.Flags() + flags.StringVarP(&topologyFile, "topology", "t", "", "topology file in yaml format") + flags.StringVarP(&output, "output", "o", "./testdata", "output folder") + flags.IntVarP(&port, "port", "p", 20000, "host starting port") + + return cobraCommand +} + +var cobraCommand = &cobra.Command{ + Use: "artifacts", + Short: "Gen artifacts.", + Long: `Read topology from file and generates artifacts.`, + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) != 0 { + return fmt.Errorf("trailing args detected") + } + // Parsing of the command line is done so silence cmd usage + cmd.SilenceUsage = true + return gen(args) + }, +} + +// gen read topology and generates artifacts +func gen(args []string) error { + if len(topologyFile) == 0 { + return errors.Errorf("expecting topology file path") + } + raw, err := ioutil.ReadFile(topologyFile) + if err != nil { + return errors.Wrapf(err, "failed reading topology file [%s]", topologyFile) + } + names := &Topologies{} + if err := yaml.Unmarshal(raw, names); err != nil { + return errors.Wrapf(err, "failed unmarshalling topology file [%s]", topologyFile) + } + + t := &T{} + if err := yaml.Unmarshal(raw, t); err != nil { + return errors.Wrapf(err, "failed unmarshalling topology file [%s]", topologyFile) + } + t2 := []nwo.Topology{} + for i, topology := range names.Topologies { + switch topology.Name { + case fabric.TopologyName: + top := fabric.NewDefaultTopology() + r, err := yaml.Marshal(t.Topologies[i]) + if err != nil { + return errors.Wrapf(err, "failed remarshalling topology configuration [%s]", topologyFile) + } + if err := yaml.Unmarshal(r, top); err != nil { + return errors.Wrapf(err, "failed unmarshalling topology file [%s]", topologyFile) + } + t2 = append(t2, top) + case fsc.TopologyName: + top := fsc.NewTopology() + r, err := yaml.Marshal(t.Topologies[i]) + if err != nil { + return errors.Wrapf(err, "failed remarshalling topology configuration [%s]", topologyFile) + } + if err := yaml.Unmarshal(r, top); err != nil { + return errors.Wrapf(err, "failed unmarshalling topology file [%s]", topologyFile) + } + t2 = append(t2, top) + case token.TopologyName: + top := token.NewTopology() + r, err := yaml.Marshal(t.Topologies[i]) + if err != nil { + return errors.Wrapf(err, "failed remarshalling topology configuration [%s]", topologyFile) + } + if err := yaml.Unmarshal(r, top); err != nil { + return errors.Wrapf(err, "failed unmarshalling topology file [%s]", topologyFile) + } + t2 = append(t2, top) + } + } + + network, err := integration.New(port, output, t2...) + if err != nil { + return errors.Wrapf(err, "cannot instantate integration infrastructure") + } + network.RegisterPlatformFactory(token.NewPlatformFactory()) + network.Generate() + + return nil +} diff --git a/integration/nwo/token/platform.go b/integration/nwo/token/platform.go index ddc515973..2f1568643 100755 --- a/integration/nwo/token/platform.go +++ b/integration/nwo/token/platform.go @@ -167,7 +167,7 @@ func (p *Platform) SetPublicParamsGenerator(name string, gen PublicParamsGenerat func (p *Platform) GenerateExtension(node *sfcnode.Node) { t, err := template.New("peer").Funcs(template.FuncMap{ "TMSs": func() []*TMS { return p.Topology.TMSs }, - "NodeKVSPath": func() string { return p.NodeKVSDir(node) }, + "NodeKVSPath": func() string { return p.FSCNodeKVSDir(node) }, "Wallets": func() *Wallet { return p.Wallets[node.Name] }, }).Parse(Extension) Expect(err).NotTo(HaveOccurred()) @@ -194,7 +194,7 @@ func (p *Platform) GenerateCryptoMaterial(node *sfcnode.Node) { sess, err := p.TokenGen(commands.CertifierKeygen{ Driver: tms.Driver, PPPath: p.PublicParametersFile(tms), - Output: p.CertifierCryptoMaterialDir(tms, node), + Output: p.FSCCertifierCryptoMaterialDir(tms, node), }) Expect(err).NotTo(HaveOccurred()) Eventually(sess, p.EventuallyTimeout).Should(Exit(0)) @@ -202,7 +202,7 @@ func (p *Platform) GenerateCryptoMaterial(node *sfcnode.Node) { ID: node.Name, MSPType: "certifier", MSPID: "certifier", - Path: p.CertifierCryptoMaterialDir(tms, node), + Path: p.FSCCertifierCryptoMaterialDir(tms, node), }) } } @@ -263,11 +263,11 @@ func (p *Platform) GeneratePublicParameters() { } } -func (p *Platform) NodeKVSDir(peer *sfcnode.Node) string { +func (p *Platform) FSCNodeKVSDir(peer *sfcnode.Node) string { return filepath.Join(p.Registry.RootDir, "fscnodes", peer.ID(), "kvs") } -func (p *Platform) CertifierCryptoMaterialDir(tms *TMS, peer *sfcnode.Node) string { +func (p *Platform) FSCCertifierCryptoMaterialDir(tms *TMS, peer *sfcnode.Node) string { return filepath.Join( p.Registry.RootDir, "crypto", @@ -282,8 +282,8 @@ func (p *Platform) CertifierCryptoMaterialDir(tms *TMS, peer *sfcnode.Node) stri func (p *Platform) PublicParametersDir() string { return filepath.Join( p.Registry.RootDir, + "token", "crypto", - "token-sdk", "pp", ) } @@ -291,8 +291,8 @@ func (p *Platform) PublicParametersDir() string { func (p *Platform) PublicParametersFile(tms *TMS) string { return filepath.Join( p.Registry.RootDir, + "token", "crypto", - "token-sdk", "pp", fmt.Sprintf("%s_%s_%s.pp", tms.Channel, tms.Namespace, tms.Driver), ) diff --git a/integration/nwo/token/tcc.go b/integration/nwo/token/tcc.go index 3823fd103..01d31022e 100644 --- a/integration/nwo/token/tcc.go +++ b/integration/nwo/token/tcc.go @@ -33,6 +33,7 @@ func (p *Platform) tccSetup(tms *TMS, cc *topology.ChannelChaincode) (*topology. // produce chaincode package packageDir := filepath.Join( p.Registry.RootDir, + "token", "chaincodes", "tcc", tms.Channel, diff --git a/sampleconfig/crypto/idemixorg.example.com/ca/IssuerPublicKey b/sampleconfig/crypto/idemixorg.example.com/ca/IssuerPublicKey new file mode 100644 index 000000000..e3691479e Binary files /dev/null and b/sampleconfig/crypto/idemixorg.example.com/ca/IssuerPublicKey differ diff --git a/sampleconfig/crypto/idemixorg.example.com/ca/IssuerSecretKey b/sampleconfig/crypto/idemixorg.example.com/ca/IssuerSecretKey new file mode 100644 index 000000000..005c8e8ea --- /dev/null +++ b/sampleconfig/crypto/idemixorg.example.com/ca/IssuerSecretKey @@ -0,0 +1 @@ +I«×tƒ‚³;8óú/£(È~a¿Û[ŒÙ’{݉5¼% \ No newline at end of file diff --git a/sampleconfig/crypto/idemixorg.example.com/ca/RevocationKey b/sampleconfig/crypto/idemixorg.example.com/ca/RevocationKey new file mode 100644 index 000000000..e9ffdf6a0 --- /dev/null +++ b/sampleconfig/crypto/idemixorg.example.com/ca/RevocationKey @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIGkAgEBBDAEyvf/GdwK5sfxMh9aUkrTYg09Tf1nZqrb+xZDilgJeYgGkwheNAIg +nOkb3ql1WJSgBwYFK4EEACKhZANiAAQNDNd2ntGGMnyeqCH8JZ8Pbm+gB6SI1A4v +UjtpP2AivClqPiOb+6Rpoj+7rTp0uPG5ZYNeJc13J4DwxoD8vN08dKOUu5ZPb5kG +y2J5sMpF1DnU5l+9kqcVS7dOVoJMlAQ= +-----END PRIVATE KEY----- diff --git a/sampleconfig/crypto/idemixorg.example.com/msp/IssuerPublicKey b/sampleconfig/crypto/idemixorg.example.com/msp/IssuerPublicKey new file mode 100644 index 000000000..e3691479e Binary files /dev/null and b/sampleconfig/crypto/idemixorg.example.com/msp/IssuerPublicKey differ diff --git a/sampleconfig/crypto/idemixorg.example.com/msp/RevocationPublicKey b/sampleconfig/crypto/idemixorg.example.com/msp/RevocationPublicKey new file mode 100644 index 000000000..a9083f107 --- /dev/null +++ b/sampleconfig/crypto/idemixorg.example.com/msp/RevocationPublicKey @@ -0,0 +1,5 @@ +-----BEGIN PUBLIC KEY----- +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEDQzXdp7RhjJ8nqgh/CWfD25voAekiNQO +L1I7aT9gIrwpaj4jm/ukaaI/u606dLjxuWWDXiXNdyeA8MaA/LzdPHSjlLuWT2+Z +BstiebDKRdQ51OZfvZKnFUu3TlaCTJQE +-----END PUBLIC KEY----- diff --git a/sampleconfig/topology/dvp_dlog.yaml b/sampleconfig/topology/dvp_dlog.yaml new file mode 100755 index 000000000..14bb82252 --- /dev/null +++ b/sampleconfig/topology/dvp_dlog.yaml @@ -0,0 +1,329 @@ +topologies: +- name: fabric + logging: + spec: grpc=error:chaincode=debug:endorser=debug:info + format: '''%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} + -> %{level:.4s} %{id:03x}%{color:reset} %{message}''' + organizations: + - msp_id: OrdererMSP + name: OrdererOrg + domain: example.com + enable_node_organizational_units: false + ca: + hostname: ca + - id: IdemixOrg + msp_id: IdemixOrgMSP + msp_type: idemix + name: IdemixOrg + domain: idemixorg.example.com + enable_node_organizational_units: false + ca: + hostname: ca + - id: TokenOrg + msp_id: TokenOrgMSP + name: TokenOrg + domain: tokenorg.example.com + enable_node_organizational_units: false + users: 1 + ca: + hostname: ca + - id: HouseOrg + msp_id: HouseOrgMSP + name: HouseOrg + domain: houseorg.example.com + enable_node_organizational_units: false + users: 1 + ca: + hostname: ca + - id: Org1 + msp_id: Org1MSP + name: Org1 + domain: org1.example.com + enable_node_organizational_units: false + users: 1 + ca: + hostname: ca + peers: + - name: TokenOrg_peer_0 + organization: TokenOrg + type: FabricPeer + channels: + - name: testchannel + anchor: true + devmode: false + - name: HouseOrg_peer_0 + organization: HouseOrg + type: FabricPeer + channels: + - name: testchannel + anchor: true + devmode: false + - name: Org1_peer_0 + organization: Org1 + type: FabricPeer + channels: + - name: testchannel + anchor: true + devmode: false + consortiums: + - name: SampleConsortium + organizations: + - IdemixOrg + - TokenOrg + - HouseOrg + - Org1 + system_channel: + name: systemchannel + profile: OrgsOrdererGenesis + channels: + - name: testchannel + profile: OrgsChannel + default: true + consensus: + type: solo + orderers: + - name: orderer + organization: OrdererOrg + profiles: + - name: OrgsOrdererGenesis + orderers: + - orderer + - name: OrgsChannel + consortium: SampleConsortium + organizations: + - IdemixOrg + - TokenOrg + - HouseOrg + - Org1 + policies: + - name: Readers + type: ImplicitMeta + rule: ANY Readers + - name: Writers + type: ImplicitMeta + rule: ANY Writers + - name: Admins + type: ImplicitMeta + rule: ANY Admins + - name: LifecycleEndorsement + type: Signature + rule: OR ('TokenOrgMSP.member','HouseOrgMSP.member') + - name: Endorsement + type: ImplicitMeta + rule: ANY Endorsement + chaincodes: + - chaincode: + name: house + version: Version-0.0 + path: github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/state/cc/query + ctor: '{"Args":["init"]}' + policy: AND ('HouseOrgMSP.member') + lang: golang + collectionsconfig: "" + packagefile: "" + codefiles: {} + sequence: "1" + endorsementplugin: "" + validationplugin: "" + initrequired: true + label: house + signaturepolicy: AND ('HouseOrgMSP.member') + channelconfigpolicy: "" + channel: testchannel + peers: + - HouseOrg_peer_0 + chaincodemode: net +- name: token + tmss: + - channel: testchannel + namespace: zkat + driver: dlog + tokenchaincode: + orgs: + - TokenOrg + publicparamsgenargs: + - "100" + - "1" + certifiers: [] +- name: fsc + peers: + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.TokenApproveView{}' + initiator: '&views.IssueCashView{}' + - responder: '&views.TokenApproveView{}' + initiator: '&views.SellHouseView{}' + name: token_approver + bootstrap: true + options: + mapping: + fabric: + mapping: + Organization: TokenOrg + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.HouseApproveView{}' + initiator: '&views.IssueHouseView{}' + - responder: '&views.HouseApproveView{}' + initiator: '&views.SellHouseView{}' + name: house_approver + options: + mapping: + fabric: + mapping: + Organization: HouseOrg + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: register + type: '&views.RegisterAuditorViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + name: auditor + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: TokenOrg + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: issue_cash + type: '&views.IssueCashViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + name: cash_issuer + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: TokenOrg + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: issue_house + type: '&views.IssueHouseViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + name: house_issuer + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: HouseOrg + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: sell + type: '&views.SellHouseViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.AcceptHouseView{}' + initiator: '&views.IssueHouseView{}' + name: seller + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: Org1 + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.AcceptCashView{}' + initiator: '&views.IssueCashView{}' + - responder: '&views.BuyHouseView{}' + initiator: '&views.SellHouseView{}' + name: buyer + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: Org1 + logging: + spec: grpc=error:debug + format: '''%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} + -> %{level:.4s} %{id:03x}%{color:reset} %{message}''' diff --git a/sampleconfig/topology/dvp_fabtoken.yaml b/sampleconfig/topology/dvp_fabtoken.yaml new file mode 100755 index 000000000..223c6cb6a --- /dev/null +++ b/sampleconfig/topology/dvp_fabtoken.yaml @@ -0,0 +1,329 @@ +topologies: +- name: fabric + logging: + spec: grpc=error:chaincode=debug:endorser=debug:info + format: '''%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} + -> %{level:.4s} %{id:03x}%{color:reset} %{message}''' + organizations: + - msp_id: OrdererMSP + name: OrdererOrg + domain: example.com + enable_node_organizational_units: false + ca: + hostname: ca + - id: IdemixOrg + msp_id: IdemixOrgMSP + msp_type: idemix + name: IdemixOrg + domain: idemixorg.example.com + enable_node_organizational_units: false + ca: + hostname: ca + - id: TokenOrg + msp_id: TokenOrgMSP + name: TokenOrg + domain: tokenorg.example.com + enable_node_organizational_units: false + users: 1 + ca: + hostname: ca + - id: HouseOrg + msp_id: HouseOrgMSP + name: HouseOrg + domain: houseorg.example.com + enable_node_organizational_units: false + users: 1 + ca: + hostname: ca + - id: Org1 + msp_id: Org1MSP + name: Org1 + domain: org1.example.com + enable_node_organizational_units: false + users: 1 + ca: + hostname: ca + peers: + - name: TokenOrg_peer_0 + organization: TokenOrg + type: FabricPeer + channels: + - name: testchannel + anchor: true + devmode: false + - name: HouseOrg_peer_0 + organization: HouseOrg + type: FabricPeer + channels: + - name: testchannel + anchor: true + devmode: false + - name: Org1_peer_0 + organization: Org1 + type: FabricPeer + channels: + - name: testchannel + anchor: true + devmode: false + consortiums: + - name: SampleConsortium + organizations: + - IdemixOrg + - TokenOrg + - HouseOrg + - Org1 + system_channel: + name: systemchannel + profile: OrgsOrdererGenesis + channels: + - name: testchannel + profile: OrgsChannel + default: true + consensus: + type: solo + orderers: + - name: orderer + organization: OrdererOrg + profiles: + - name: OrgsOrdererGenesis + orderers: + - orderer + - name: OrgsChannel + consortium: SampleConsortium + organizations: + - IdemixOrg + - TokenOrg + - HouseOrg + - Org1 + policies: + - name: Readers + type: ImplicitMeta + rule: ANY Readers + - name: Writers + type: ImplicitMeta + rule: ANY Writers + - name: Admins + type: ImplicitMeta + rule: ANY Admins + - name: LifecycleEndorsement + type: Signature + rule: OR ('TokenOrgMSP.member','HouseOrgMSP.member') + - name: Endorsement + type: ImplicitMeta + rule: ANY Endorsement + chaincodes: + - chaincode: + name: house + version: Version-0.0 + path: github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services/state/cc/query + ctor: '{"Args":["init"]}' + policy: AND ('HouseOrgMSP.member') + lang: golang + collectionsconfig: "" + packagefile: "" + codefiles: {} + sequence: "1" + endorsementplugin: "" + validationplugin: "" + initrequired: true + label: house + signaturepolicy: AND ('HouseOrgMSP.member') + channelconfigpolicy: "" + channel: testchannel + peers: + - HouseOrg_peer_0 + chaincodemode: net +- name: token + tmss: + - channel: testchannel + namespace: zkat + driver: fabtoken + tokenchaincode: + orgs: + - TokenOrg + publicparamsgenargs: + - "100" + - "1" + certifiers: [] +- name: fsc + peers: + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.TokenApproveView{}' + initiator: '&views.IssueCashView{}' + - responder: '&views.TokenApproveView{}' + initiator: '&views.SellHouseView{}' + name: token_approver + bootstrap: true + options: + mapping: + fabric: + mapping: + Organization: TokenOrg + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.HouseApproveView{}' + initiator: '&views.IssueHouseView{}' + - responder: '&views.HouseApproveView{}' + initiator: '&views.SellHouseView{}' + name: house_approver + options: + mapping: + fabric: + mapping: + Organization: HouseOrg + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: register + type: '&views.RegisterAuditorViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + name: auditor + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: TokenOrg + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: issue_cash + type: '&views.IssueCashViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + name: cash_issuer + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: TokenOrg + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: issue_house + type: '&views.IssueHouseViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + name: house_issuer + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: HouseOrg + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: sell + type: '&views.SellHouseViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.AcceptHouseView{}' + initiator: '&views.IssueHouseView{}' + name: seller + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: Org1 + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.AcceptCashView{}' + initiator: '&views.IssueCashView{}' + - responder: '&views.BuyHouseView{}' + initiator: '&views.SellHouseView{}' + name: buyer + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: Org1 + logging: + spec: grpc=error:debug + format: '''%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} + -> %{level:.4s} %{id:03x}%{color:reset} %{message}''' diff --git a/sampleconfig/topology/main.go b/sampleconfig/topology/main.go new file mode 100644 index 000000000..3abf1c7b4 --- /dev/null +++ b/sampleconfig/topology/main.go @@ -0,0 +1,39 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ +package main + +import ( + "io/ioutil" + + "github.com/onsi/ginkgo" + "github.com/onsi/gomega" + + "github.com/hyperledger-labs/fabric-smart-client/integration/nwo" + + "github.com/hyperledger-labs/fabric-token-sdk/integration/token/dvp" + "github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic" +) + +func main() { + gomega.RegisterFailHandler(ginkgo.Fail) + topologies := map[string][]nwo.Topology{} + + topologies["tcc_basic_fabtoken.yaml"] = basic.Topology("fabtoken") + topologies["tcc_basic_dlog.yaml"] = basic.Topology("dlog") + topologies["dvp_fabtoken.yaml"] = dvp.Topology("fabtoken") + topologies["dvp_dlog.yaml"] = dvp.Topology("dlog") + + for name, topologies := range topologies { + t := nwo.Topologies{Topologies: topologies} + raw, err := t.Export() + if err != nil { + panic(err) + } + if err := ioutil.WriteFile(name, raw, 0770); err != nil { + panic(err) + } + } +} diff --git a/sampleconfig/topology/tcc_basic_dlog.yaml b/sampleconfig/topology/tcc_basic_dlog.yaml new file mode 100755 index 000000000..7df87e336 --- /dev/null +++ b/sampleconfig/topology/tcc_basic_dlog.yaml @@ -0,0 +1,348 @@ +topologies: +- name: fabric + logging: + spec: grpc=error:chaincode=debug:endorser=debug:info + format: '''%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} + -> %{level:.4s} %{id:03x}%{color:reset} %{message}''' + organizations: + - msp_id: OrdererMSP + name: OrdererOrg + domain: example.com + enable_node_organizational_units: false + ca: + hostname: ca + - id: IdemixOrg + msp_id: IdemixOrgMSP + msp_type: idemix + name: IdemixOrg + domain: idemixorg.example.com + enable_node_organizational_units: false + ca: + hostname: ca + - id: Org1 + msp_id: Org1MSP + name: Org1 + domain: org1.example.com + enable_node_organizational_units: false + users: 1 + ca: + hostname: ca + - id: Org2 + msp_id: Org2MSP + name: Org2 + domain: org2.example.com + enable_node_organizational_units: false + users: 1 + ca: + hostname: ca + peers: + - name: Org1_peer_0 + organization: Org1 + type: FabricPeer + channels: + - name: testchannel + anchor: true + devmode: false + - name: Org2_peer_0 + organization: Org2 + type: FabricPeer + channels: + - name: testchannel + anchor: true + devmode: false + consortiums: + - name: SampleConsortium + organizations: + - IdemixOrg + - Org1 + - Org2 + system_channel: + name: systemchannel + profile: OrgsOrdererGenesis + channels: + - name: testchannel + profile: OrgsChannel + default: true + consensus: + type: solo + orderers: + - name: orderer + organization: OrdererOrg + profiles: + - name: OrgsOrdererGenesis + orderers: + - orderer + - name: OrgsChannel + consortium: SampleConsortium + organizations: + - IdemixOrg + - Org1 + - Org2 + policies: + - name: Readers + type: ImplicitMeta + rule: ANY Readers + - name: Writers + type: ImplicitMeta + rule: ANY Writers + - name: Admins + type: ImplicitMeta + rule: ANY Admins + - name: LifecycleEndorsement + type: Signature + rule: AND ('Org1MSP.member') + - name: Endorsement + type: ImplicitMeta + rule: ANY Endorsement + chaincodemode: net +- name: token + tmss: + - channel: testchannel + namespace: zkat + driver: dlog + tokenchaincode: + orgs: + - Org1 + publicparamsgenargs: + - "100" + - "2" + certifiers: [] +- name: fsc + peers: + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: issue + type: '&views.IssueCashViewFactory{}' + - id: register + type: '&views.RegisterIssuerViewFactory{}' + - id: transfer + type: '&views.TransferViewFactory{}' + - id: transferWithSelector + type: '&views.TransferWithSelectorViewFactory{}' + - id: redeem + type: '&views.RedeemViewFactory{}' + - id: history + type: '&views.ListIssuedTokensViewFactory{}' + - id: issuedTokenQuery + type: '&views.ListIssuedTokensViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + name: issuer + bootstrap: true + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + IdemixIdentities: + - issuer.owner + Organization: Org1 + X509Identities: + - issuer.id1 + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: register + type: '&views.RegisterAuditorViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + name: auditor + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: Org1 + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: transfer + type: '&views.TransferViewFactory{}' + - id: transferWithSelector + type: '&views.TransferWithSelectorViewFactory{}' + - id: redeem + type: '&views.RedeemViewFactory{}' + - id: swap + type: '&views.SwapInitiatorViewFactory{}' + - id: history + type: '&views.ListUnspentTokensViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.AcceptCashView{}' + initiator: '&views.IssueCashView{}' + - responder: '&views.AcceptCashView{}' + initiator: '&views.TransferView{}' + - responder: '&views.AcceptCashView{}' + initiator: '&views.TransferWithSelectorView{}' + name: alice + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + IdemixIdentities: + - alice.id1 + Organization: Org2 + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: transfer + type: '&views.TransferViewFactory{}' + - id: transferWithSelector + type: '&views.TransferWithSelectorViewFactory{}' + - id: redeem + type: '&views.RedeemViewFactory{}' + - id: swap + type: '&views.SwapInitiatorViewFactory{}' + - id: history + type: '&views.ListUnspentTokensViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.AcceptCashView{}' + initiator: '&views.IssueCashView{}' + - responder: '&views.AcceptCashView{}' + initiator: '&views.TransferView{}' + - responder: '&views.AcceptCashView{}' + initiator: '&views.TransferWithSelectorView{}' + - responder: '&views.SwapResponderView{}' + initiator: '&views.SwapInitiatorView{}' + name: bob + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + IdemixIdentities: + - bob.id1 + Organization: Org2 + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: transfer + type: '&views.TransferViewFactory{}' + - id: transferWithSelector + type: '&views.TransferWithSelectorViewFactory{}' + - id: redeem + type: '&views.RedeemViewFactory{}' + - id: swap + type: '&views.SwapInitiatorViewFactory{}' + - id: history + type: '&views.ListUnspentTokensViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.AcceptCashView{}' + initiator: '&views.IssueCashView{}' + - responder: '&views.AcceptCashView{}' + initiator: '&views.TransferView{}' + - responder: '&views.AcceptCashView{}' + initiator: '&views.TransferWithSelectorView{}' + - responder: '&views.SwapResponderView{}' + initiator: '&views.SwapInitiatorView{}' + name: charlie + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: Org2 + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: transfer + type: '&views.TransferViewFactory{}' + - id: transferWithSelector + type: '&views.TransferWithSelectorViewFactory{}' + - id: swap + type: '&views.SwapInitiatorViewFactory{}' + - id: redeem + type: '&views.RedeemViewFactory{}' + - id: history + type: '&views.ListUnspentTokensViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.AcceptCashView{}' + initiator: '&views.IssueCashView{}' + - responder: '&views.AcceptCashView{}' + initiator: '&views.TransferView{}' + - responder: '&views.SwapResponderView{}' + initiator: '&views.SwapInitiatorView{}' + name: manager + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + IdemixIdentities: + - manager.id1 + - manager.id2 + - manager.id3 + Organization: Org2 + logging: + spec: grpc=error:debug + format: '''%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} + -> %{level:.4s} %{id:03x}%{color:reset} %{message}''' diff --git a/sampleconfig/topology/tcc_basic_fabtoken.yaml b/sampleconfig/topology/tcc_basic_fabtoken.yaml new file mode 100755 index 000000000..26acbfe62 --- /dev/null +++ b/sampleconfig/topology/tcc_basic_fabtoken.yaml @@ -0,0 +1,347 @@ +topologies: +- name: fabric + logging: + spec: grpc=error:chaincode=debug:endorser=debug:info + format: '''%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} + -> %{level:.4s} %{id:03x}%{color:reset} %{message}''' + organizations: + - msp_id: OrdererMSP + name: OrdererOrg + domain: example.com + enable_node_organizational_units: false + ca: + hostname: ca + - id: IdemixOrg + msp_id: IdemixOrgMSP + msp_type: idemix + name: IdemixOrg + domain: idemixorg.example.com + enable_node_organizational_units: false + ca: + hostname: ca + - id: Org1 + msp_id: Org1MSP + name: Org1 + domain: org1.example.com + enable_node_organizational_units: false + users: 1 + ca: + hostname: ca + - id: Org2 + msp_id: Org2MSP + name: Org2 + domain: org2.example.com + enable_node_organizational_units: false + users: 1 + ca: + hostname: ca + peers: + - name: Org1_peer_0 + organization: Org1 + type: FabricPeer + channels: + - name: testchannel + anchor: true + devmode: false + - name: Org2_peer_0 + organization: Org2 + type: FabricPeer + channels: + - name: testchannel + anchor: true + devmode: false + consortiums: + - name: SampleConsortium + organizations: + - IdemixOrg + - Org1 + - Org2 + system_channel: + name: systemchannel + profile: OrgsOrdererGenesis + channels: + - name: testchannel + profile: OrgsChannel + default: true + consensus: + type: solo + orderers: + - name: orderer + organization: OrdererOrg + profiles: + - name: OrgsOrdererGenesis + orderers: + - orderer + - name: OrgsChannel + consortium: SampleConsortium + organizations: + - IdemixOrg + - Org1 + - Org2 + policies: + - name: Readers + type: ImplicitMeta + rule: ANY Readers + - name: Writers + type: ImplicitMeta + rule: ANY Writers + - name: Admins + type: ImplicitMeta + rule: ANY Admins + - name: LifecycleEndorsement + type: Signature + rule: AND ('Org1MSP.member') + - name: Endorsement + type: ImplicitMeta + rule: ANY Endorsement + chaincodemode: net +- name: token + tmss: + - channel: testchannel + namespace: zkat + driver: fabtoken + tokenchaincode: + orgs: + - Org1 + publicparamsgenargs: + - "100" + - "2" + certifiers: [] +- name: fsc + peers: + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: issue + type: '&views.IssueCashViewFactory{}' + - id: register + type: '&views.RegisterIssuerViewFactory{}' + - id: transfer + type: '&views.TransferViewFactory{}' + - id: transferWithSelector + type: '&views.TransferWithSelectorViewFactory{}' + - id: redeem + type: '&views.RedeemViewFactory{}' + - id: history + type: '&views.ListIssuedTokensViewFactory{}' + - id: issuedTokenQuery + type: '&views.ListIssuedTokensViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + name: issuer + bootstrap: true + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: Org1 + X509Identities: + - issuer.id1 + - issuer.owner + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: register + type: '&views.RegisterAuditorViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + name: auditor + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: Org1 + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: transfer + type: '&views.TransferViewFactory{}' + - id: transferWithSelector + type: '&views.TransferWithSelectorViewFactory{}' + - id: redeem + type: '&views.RedeemViewFactory{}' + - id: swap + type: '&views.SwapInitiatorViewFactory{}' + - id: history + type: '&views.ListUnspentTokensViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.AcceptCashView{}' + initiator: '&views.IssueCashView{}' + - responder: '&views.AcceptCashView{}' + initiator: '&views.TransferView{}' + - responder: '&views.AcceptCashView{}' + initiator: '&views.TransferWithSelectorView{}' + name: alice + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: Org2 + X509Identities: + - alice.id1 + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: transfer + type: '&views.TransferViewFactory{}' + - id: transferWithSelector + type: '&views.TransferWithSelectorViewFactory{}' + - id: redeem + type: '&views.RedeemViewFactory{}' + - id: swap + type: '&views.SwapInitiatorViewFactory{}' + - id: history + type: '&views.ListUnspentTokensViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.AcceptCashView{}' + initiator: '&views.IssueCashView{}' + - responder: '&views.AcceptCashView{}' + initiator: '&views.TransferView{}' + - responder: '&views.AcceptCashView{}' + initiator: '&views.TransferWithSelectorView{}' + - responder: '&views.SwapResponderView{}' + initiator: '&views.SwapInitiatorView{}' + name: bob + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: Org2 + X509Identities: + - bob.id1 + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: transfer + type: '&views.TransferViewFactory{}' + - id: transferWithSelector + type: '&views.TransferWithSelectorViewFactory{}' + - id: redeem + type: '&views.RedeemViewFactory{}' + - id: swap + type: '&views.SwapInitiatorViewFactory{}' + - id: history + type: '&views.ListUnspentTokensViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.AcceptCashView{}' + initiator: '&views.IssueCashView{}' + - responder: '&views.AcceptCashView{}' + initiator: '&views.TransferView{}' + - responder: '&views.AcceptCashView{}' + initiator: '&views.TransferWithSelectorView{}' + - responder: '&views.SwapResponderView{}' + initiator: '&views.SwapInitiatorView{}' + name: charlie + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: Org2 + - NodeSynthesizer: + Aliases: + github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views: + original: views + alias: views + github.com/hyperledger-labs/fabric-token-sdk/token/sdk: + original: sdk + alias: sdk + Imports: + - github.com/hyperledger-labs/fabric-token-sdk/integration/token/tcc/basic/views + - github.com/hyperledger-labs/fabric-token-sdk/token/sdk + Factories: + - id: transfer + type: '&views.TransferViewFactory{}' + - id: transferWithSelector + type: '&views.TransferWithSelectorViewFactory{}' + - id: swap + type: '&views.SwapInitiatorViewFactory{}' + - id: redeem + type: '&views.RedeemViewFactory{}' + - id: history + type: '&views.ListUnspentTokensViewFactory{}' + SDKs: + - id: "" + type: sdk.NewSDK(n) + Responders: + - responder: '&views.AcceptCashView{}' + initiator: '&views.IssueCashView{}' + - responder: '&views.AcceptCashView{}' + initiator: '&views.TransferView{}' + - responder: '&views.SwapResponderView{}' + initiator: '&views.SwapInitiatorView{}' + name: manager + options: + mapping: + fabric: + mapping: + AnonymousIdentity: true + Organization: Org2 + X509Identities: + - manager.id1 + - manager.id2 + - manager.id3 + logging: + spec: grpc=error:debug + format: '''%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} + -> %{level:.4s} %{id:03x}%{color:reset} %{message}'''