Skip to content

Commit f3bfb27

Browse files
authored
artifactgen, additional documentation and samples (#432)
Signed-off-by: Angelo De Caro <adc@zurich.ibm.com>
1 parent df44cab commit f3bfb27

File tree

6 files changed

+529
-7
lines changed

6 files changed

+529
-7
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ FABRIC_VERSION=2.4.6 make download-fabric
6262

6363
If you want to provide your own versions of the fabric binaries then just set `FAB_BINS` to the directory where all the fabric binaries are stored.
6464

65+
# Utilities
66+
67+
- [`tokengen`](./cmd/tokengen/README.md) is an utility for generating Fabric Token-SDK material.
68+
It is provided as a means of preconfiguring public parameters, token chaincode, and so.
69+
It would normally not be used in the operation of a production network.
70+
6571
# Additional Resources
6672

6773
- (March 17, 2022) [`Hyperledger in-Depth: Tokens in Hyperledger Fabric: What’s possible today and what’s coming`](https://www.hyperledger.org/learn/webinars/hyperledger-in-depth-tokens-in-hyperledger-fabric-whats-possible-today-and-whats-coming):

cmd/tokengen/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ The `tokengen` command has five subcommands, as follows:
1616

1717
## tokengen artifacts
1818

19+
This command is used to centrally generate key material and configuration files.
20+
It takes in input a `topology` file, in `yaml` format, that describes the topologies of the networks involved.
21+
An example can be found [`here`](./samples/topology/fungible.yaml).
22+
Topology files can be edited directly or they can be generated programmatically as shown [`here`](./samples/topology/fungible.go).
23+
1924
```
2025
Read topology from file and generates artifacts.
2126
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
/*
2+
Copyright IBM Corp. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package main
8+
9+
import (
10+
"github.com/hyperledger-labs/fabric-smart-client/integration/nwo/api"
11+
"github.com/hyperledger-labs/fabric-smart-client/integration/nwo/fabric"
12+
"github.com/hyperledger-labs/fabric-smart-client/integration/nwo/fsc"
13+
fabricSDK "github.com/hyperledger-labs/fabric-smart-client/platform/fabric/sdk"
14+
"github.com/hyperledger-labs/fabric-token-sdk/integration/nwo/artifactgen"
15+
"github.com/hyperledger-labs/fabric-token-sdk/integration/nwo/token"
16+
fabric2 "github.com/hyperledger-labs/fabric-token-sdk/integration/nwo/token/fabric"
17+
"github.com/hyperledger-labs/fabric-token-sdk/samples/fungible/views"
18+
tokenSDK "github.com/hyperledger-labs/fabric-token-sdk/token/sdk"
19+
)
20+
21+
func Topology(tokenSDKDriver string) []api.Topology {
22+
// Fabric
23+
fabricTopology := fabric.NewDefaultTopology()
24+
fabricTopology.EnableIdemix()
25+
fabricTopology.AddOrganizationsByName("Org1", "Org2")
26+
fabricTopology.SetNamespaceApproverOrgs("Org1")
27+
fabricTopology.EnableGRPCLogging()
28+
fabricTopology.EnableLogPeersToFile()
29+
fabricTopology.EnableLogOrderersToFile()
30+
fabricTopology.SetLogging("info", "")
31+
32+
// FSC
33+
fscTopology := fsc.NewTopology()
34+
fscTopology.SetLogging("info", "")
35+
fscTopology.EnableLogToFile()
36+
fscTopology.EnablePrometheusMetrics()
37+
38+
// issuer
39+
issuer := fscTopology.AddNodeByName("issuer").AddOptions(
40+
fabric.WithOrganization("Org1"),
41+
fabric.WithAnonymousIdentity(),
42+
token.WithDefaultIssuerIdentity(),
43+
token.WithIssuerIdentity("issuer.id1"),
44+
)
45+
issuer.RegisterViewFactory("issue", &views.IssueCashViewFactory{})
46+
issuer.RegisterViewFactory("issued", &views.ListIssuedTokensViewFactory{})
47+
48+
// auditor
49+
auditor := fscTopology.AddNodeByName("auditor").AddOptions(
50+
fabric.WithOrganization("Org1"),
51+
fabric.WithAnonymousIdentity(),
52+
token.WithAuditorIdentity(),
53+
)
54+
auditor.RegisterViewFactory("register", &views.RegisterAuditorViewFactory{})
55+
56+
// alice
57+
alice := fscTopology.AddNodeByName("alice").AddOptions(
58+
fabric.WithOrganization("Org2"),
59+
fabric.WithAnonymousIdentity(),
60+
token.WithDefaultOwnerIdentity(tokenSDKDriver),
61+
token.WithOwnerIdentity(tokenSDKDriver, "alice.id1"),
62+
)
63+
alice.RegisterResponder(&views.AcceptCashView{}, &views.IssueCashView{})
64+
alice.RegisterResponder(&views.AcceptCashView{}, &views.TransferView{})
65+
alice.RegisterViewFactory("transfer", &views.TransferViewFactory{})
66+
alice.RegisterViewFactory("redeem", &views.RedeemViewFactory{})
67+
alice.RegisterViewFactory("swap", &views.SwapInitiatorViewFactory{})
68+
alice.RegisterViewFactory("unspent", &views.ListUnspentTokensViewFactory{})
69+
70+
// bob
71+
bob := fscTopology.AddNodeByName("bob").AddOptions(
72+
fabric.WithOrganization("Org2"),
73+
fabric.WithAnonymousIdentity(),
74+
token.WithDefaultOwnerIdentity(tokenSDKDriver),
75+
token.WithOwnerIdentity(tokenSDKDriver, "bob.id1"),
76+
)
77+
bob.RegisterResponder(&views.AcceptCashView{}, &views.IssueCashView{})
78+
bob.RegisterResponder(&views.AcceptCashView{}, &views.TransferView{})
79+
bob.RegisterResponder(&views.SwapResponderView{}, &views.SwapInitiatorView{})
80+
bob.RegisterViewFactory("transfer", &views.TransferViewFactory{})
81+
bob.RegisterViewFactory("redeem", &views.RedeemViewFactory{})
82+
bob.RegisterViewFactory("swap", &views.SwapInitiatorViewFactory{})
83+
bob.RegisterViewFactory("unspent", &views.ListUnspentTokensViewFactory{})
84+
85+
// charlie
86+
charlie := fscTopology.AddNodeByName("charlie").AddOptions(
87+
fabric.WithOrganization("Org2"),
88+
fabric.WithAnonymousIdentity(),
89+
token.WithDefaultOwnerIdentity(tokenSDKDriver),
90+
token.WithOwnerIdentity(tokenSDKDriver, "charlie.id1"),
91+
)
92+
charlie.RegisterResponder(&views.AcceptCashView{}, &views.IssueCashView{})
93+
charlie.RegisterResponder(&views.AcceptCashView{}, &views.TransferView{})
94+
charlie.RegisterResponder(&views.SwapResponderView{}, &views.SwapInitiatorView{})
95+
charlie.RegisterViewFactory("transfer", &views.TransferViewFactory{})
96+
charlie.RegisterViewFactory("redeem", &views.RedeemViewFactory{})
97+
charlie.RegisterViewFactory("swap", &views.SwapInitiatorViewFactory{})
98+
charlie.RegisterViewFactory("unspent", &views.ListUnspentTokensViewFactory{})
99+
100+
tokenTopology := token.NewTopology()
101+
tokenTopology.SetSDK(fscTopology, &tokenSDK.SDK{})
102+
tms := tokenTopology.AddTMS(fscTopology.ListNodes(), fabricTopology, fabricTopology.Channels[0].Name, tokenSDKDriver)
103+
fabric2.SetOrgs(tms, "Org1")
104+
tms.SetTokenGenPublicParams("100", "2")
105+
tms.AddAuditor(auditor)
106+
107+
// Add Fabric SDK to FSC Nodes
108+
fscTopology.AddSDK(&fabricSDK.SDK{})
109+
110+
return []api.Topology{
111+
fabricTopology,
112+
tokenTopology,
113+
fscTopology,
114+
}
115+
}
116+
117+
func main() {
118+
if err := artifactgen.WriteTopologies("fungible.yaml", Topology("dlog"), 0766); err != nil {
119+
panic(err)
120+
}
121+
}

0 commit comments

Comments
 (0)