...] [options] [COMMAND] [ARGS...]
42 | docker-compose -h|--help
43 |
44 | Options:
45 | -f, --file FILE Specify an alternate compose file
46 | (default: docker-compose.yml)
47 | -p, --project-name NAME Specify an alternate project name
48 | (default: directory name)
49 | --verbose Show more output
50 | --log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
51 | --no-ansi Do not print ANSI control characters
52 | -v, --version Print version and exit
53 | -H, --host HOST Daemon socket to connect to
54 |
55 | --tls Use TLS; implied by --tlsverify
56 | --tlscacert CA_PATH Trust certs signed only by this CA
57 | --tlscert CLIENT_CERT_PATH Path to TLS certificate file
58 | --tlskey TLS_KEY_PATH Path to TLS key file
59 | --tlsverify Use TLS and verify the remote
60 | --skip-hostname-check Don't check the daemon's hostname against the
61 | name specified in the client certificate
62 | --project-directory PATH Specify an alternate working directory
63 | (default: the path of the Compose file)
64 | --compatibility If set, Compose will attempt to convert deploy
65 | keys in v3 files to their non-Swarm equivalent
66 |
67 | Commands:
68 | build Build or rebuild services
69 | bundle Generate a Docker bundle from the Compose file
70 | config Validate and view the Compose file
71 | create Create services
72 | down Stop and remove containers, networks, images, and volumes
73 | events Receive real time events from containers
74 | exec Execute a command in a running container
75 | help Get help on a command
76 | images List images
77 | kill Kill containers
78 | logs View output from containers
79 | pause Pause services
80 | port Print the public port for a port binding
81 | ps List containers
82 | pull Pull service images
83 | push Push service images
84 | restart Restart services
85 | rm Remove stopped containers
86 | run Run a one-off command
87 | scale Set number of containers for a service
88 | start Start services
89 | stop Stop services
90 | top Display the running processes
91 | unpause Unpause services
92 | up Create and start containers
93 | version Show the Docker-Compose version information
94 | ```
--------------------------------------------------------------------------------
/chapter4_07_summary.md:
--------------------------------------------------------------------------------
1 | ## Hyperledger Fabric 网络搭建详解知识总结
2 |
3 | 本章通过搭建一个采用Raft共识机制的Fabric网络,完整讲解了生成证书、生成交易相关文件、启动网络节点、网络配置和网络测试。这里需要强调的只有勤动手、多练习才能掌握Fabric网络的搭建。
4 |
5 | 下一章我们开始学习智能合约开发。
6 |
7 | 祝大家学习快乐!
--------------------------------------------------------------------------------
/chapter5_00.md:
--------------------------------------------------------------------------------
1 | # 智能合约开发
2 |
3 | 提到套路,大家第一感觉是不好。生活中有很多套路,比如小学生写作文的套路:先说一个自己曾经经历的事儿,然后来一句“那一刻,我明白了…..”。
4 |
5 | 套路容易让思维僵化,但写程序尤其是写智能合约却非常需要套路。套路不仅可以提高我们的学习效率,而且还可以大幅度提高我们写程序的质量。进一步来说掌握的套路越多,你就越逼近高手。
6 |
7 | 以前在带团队的时候,经常碰到一些程序员代码没有注释、格式乱七八糟、没有必要的错误处理,导致软件出现各种奇奇怪怪的问题,这都是因为没有经过正规训练。
8 |
9 | 由于智能合约不同于一般程序开发,对效率要求很高,而且升级比较麻烦,因此要成为一名合格的区块链开发工程师,必须先从掌握套路开始。
10 |
11 | 如果大家以后如果要做公链开发,一定要多多掌握套路,因为一个bug就可能导致巨大的经济损失。
12 |
13 | 比如美链(BeautyChain)就因为智能合约bug导致整个项目几乎归零。
14 |
15 | >2018年4月23日中午11点30分左右,黑客利用了Solidity语言的整形溢出漏洞,成功转走了两笔超大数量的BEC Token,导致市场上海量 BEC 被抛售,该数字货币价值几乎归零,给 BEC 市场交易带来了毁灭性打击。
16 |
17 | 讲这么多没有别的意思,就是希望大家明白智能合约开发与我们之前web开发不一样,大家需要严肃对待。
18 |
19 | Fabric的开发主要包含智能合约(链码)开发和基于Fabric SDK的应用开发。
20 |
21 | 虽然Fabric链码开发支持Java、Node.js开发,但由于Fabric是基于Go语言开发的,因此本教程建议使用Go语言进行智能合约的开发。本章节主要讲解链码开发,关于应用开发会在第6章区块链溯源案例分析章节详细讲解。
22 |
23 | 搭建Fabric网络环境时,我们学习了在Ubuntu上安装Go语言环境以及Fabric网络搭建,已经初步具备chaincode的开发和调试能力。但由于在Fabric网络中测试链码需要不断的重启网络,会严重影响开发效率,同时也不便于chaincode的开发、测试。
24 |
25 | 本章节我们以Windows10为例(其它平台大同小异,有需要的朋友可以自行摸索),详细讲解怎样进行本地开发环境搭建、Golang核心知识、链码基本概念、链码开发、单元测试,方便开发者进行链码开发和调试。
26 |
27 | 本章主要内容:
28 | * [开发环境](./chapter5_01%20smartcontract_dev_env.md)
29 | * [Golang核心知识](./chapter5_02_part1%20golang_core.md)
30 | * [Golang核心知识——数据类型](./chapter5_02_part2%20golang_core.md)
31 | * [Golang核心知识——函数、流程控制及方法](./chapter5_02_part3%20golang_core.md)
32 | * [Golang核心知识——指针接收器及接口](./chapter5_02_part4%20golang_core.md)
33 | * [链码基本概念](./chapter5_03%20chaincode_concept.md)
34 | * [链码开发](./chapter5_04%20chaincode_dev.md)
35 | * [单元测试](./chapter5_05%20chaincode_unit_test.md)
36 | * [智能合约开发知识总结](./chapter5_06%20summary.md)
--------------------------------------------------------------------------------
/chapter5_01 smartcontract_dev_env.md:
--------------------------------------------------------------------------------
1 | ## 开发环境
2 |
3 | ### Go语言的安装
4 | 官方文档:https://golang.google.cn/
5 |
6 | Go语言提供windwos、linux、mac下载安装。大家根据自己的机器环境选择安装。
7 |
8 |
9 |
10 |
11 | 
12 |
13 | 5-01_01 Golang下载
14 |
15 |
16 | Windows下安装Go语言非常方便,根据向导一步一步操作即可。
17 |
18 | ### Visual Studio Code的安装与配置
19 |
20 | 官方文档:https://code.visualstudio.com/
21 |
22 | VS code提供windwos、linux、mac下载安装。大家根据自己的机器环境选择安装。以下以Win10为例。
23 |
24 | **1. 安装VS Code**
25 |
26 |
27 |
28 |
29 | 
30 |
31 | 5-01_02 VS code下载
32 |
33 |
34 | 安装完成后,windows下使用快捷键win+R调出运行框,输入code,启动VS code编辑器。
35 |
36 | **2. 安装go语言插件**
37 |
38 | 官方文档:https://code.visualstudio.com/docs/languages/go
39 |
40 | 使用快捷键Ctrl+Shift+X调出扩展面板,输入Go for Visual Studio Code,安装Go语言插件。
41 |
42 |
43 |
44 |
45 | 
46 |
47 | 5-01_03 Go for Visual Studio Code下载
48 |
49 |
50 | **3. 配置环境变量**
51 |
52 | 使用快捷键Ctrl+Shift+P调出命令面板,输入Go:Current GOPATH,可以查看当前Go的GOPATH环境变量。
53 |
54 | 当然也可以在File->Preferences->Settings->User->Extensions->Go菜单中设置Gopath。
55 |
56 | 选择编辑settings.json可以对环境变化进行设置。
57 |
58 |
59 |
60 |
61 | 
62 |
63 | 5-01_03 配置环境变量
64 |
65 | 
66 |
67 | 5-01_04 配置环境变量
68 |
69 |
70 | **4. 配置chaincode依赖包**
71 |
72 | 为了方便进行Chaincode开发,我们需要的安装两个依赖包,分别是:
73 | "github.com/hyperledger/fabric/core/chaincode/shim"
74 | "github.com/hyperledger/fabric/protos/peer"
75 |
76 | Shim包为chaincode(链码)访问状态数据库、交易上下文和调用其他chaincode提供API。
77 | 通过以下命令安装两个依赖包,成功后这些库会被安装在GOPATH路径下。
78 |
79 | ```
80 | go get github.com/hyperledger/fabric/protos/peer
81 | go get github.com/hyperledger/fabric/core/chaincode/shim
82 | ```
83 |
84 | 当然你也可以使用Fabric源码,其中包含了以上两个依赖包。下载到$GOPATH/src/github.com/hyperledger目录下,本地开发的chaincode就可以正常工作了。
85 |
86 | **5. 测试开发环境**
87 |
88 | 在GOPATH下新建一个chaincode(直接拷贝一个Fabric例子程序),执行以下命令:
89 |
90 | ```
91 | go build
92 | ```
93 |
94 |
95 |
96 | 
97 |
98 | 5-01_05 编译链码
99 |
100 |
101 | 如果编译没有问题就代表环境安装成功。
102 |
--------------------------------------------------------------------------------
/chapter5_02_part1 golang_core.md:
--------------------------------------------------------------------------------
1 | ## Golang核心知识
2 |
3 | 这部分内容是写给没有go语言开发经验的读者。如果你对go语言开发非常熟悉,可以直接进入下一节学习链码的基本概念。
4 |
5 | 所有的开发语言都是由数据类型、逻辑结构、函数等组成,如果是面向对象的语言还会涉及到类、接口。这就如同不同国家的语言一样,不同开发语言的语法也有所差异,当然也自己的一些特性。比如Go语言在并发处理上有比较优异的表现;Python有简单易学的特点,特别适用于机器学习。
6 |
7 | Go是面向对象语言,也不是面向对象语言(Yes and No)——这是官方的说法。Go可以进行面向对象编程,却没有对象和继承。如果你熟悉Java、C++的面向对象设计风格,刚开始学习Go语言的时候会比较别扭。Go没有对象类型,但可以通过struct类定义对象;Go没有类,但可以通过数据类型定义方法;Go的Interface也和Java语言不一样,采用的是隐式继承。
8 |
9 | 一开始我们会对Go的这种设计有点不习惯,但时间长了你就会慢慢体会到Go这种没有对象和继承的面向对象编程带来的优势。
10 |
11 | 欢迎学习 “新的面向对象编程语言”——Go。
12 |
13 | **注意:为了保证学习效果,建议大家花上一天时间对下面例子程序进行运行测试,这样学习效果最佳。**
14 |
15 |
16 |
--------------------------------------------------------------------------------
/chapter5_02_part3 golang_core.md:
--------------------------------------------------------------------------------
1 | ### 函数
2 | **1.函数(Fucnciton)**
3 |
4 | Go函数是一段用来执行特定任务的代码块,语法如下:
5 | 以func开始,可以有多个参数,返回值位于参数之后。
6 |
7 | ```
8 | func functionname(parametername type) returntype {
9 | //function body
10 | }
11 | ```
12 | 返回值和参数在函数中是可选的。下面的语法也是正确的。
13 | ```
14 | func functionname() {
15 | }
16 | ```
17 | 以下是一个完整的函数:
18 | ```
19 | package main
20 |
21 | import (
22 | "fmt"
23 | )
24 |
25 | func calculateBill(price, no int) int {
26 | var totalPrice = price * no
27 | return totalPrice
28 | }
29 | func main() {
30 | price, no := 90, 6
31 | totalPrice := calculateBill(price, no)
32 | fmt.Println("Total price is", totalPrice)
33 | }
34 | ```
35 | **2.多个返回值**
36 |
37 | 与Java等语言不一样的是Go函数可以有多个返回结果。
38 | ```
39 | package main
40 |
41 | import (
42 | "fmt"
43 | )
44 |
45 | func rectProps(length, width float64)(float64, float64) {
46 | var area = length * width
47 | var perimeter = (length + width) * 2
48 | return area, perimeter
49 | }
50 |
51 | func main() {
52 | area, perimeter := rectProps(10.8, 5.6)
53 | fmt.Printf("Area %f Perimeter %f", area, perimeter)
54 | }
55 | ```
56 | **3.空格标识符**
57 | ```
58 | package main
59 |
60 | import (
61 | "fmt"
62 | )
63 |
64 | func rectProps(length, width float64) (float64, float64) {
65 | var area = length * width
66 | var perimeter = (length + width) * 2
67 | return area, perimeter
68 | }
69 | func main() {
70 | area, _ := rectProps(10.8, 5.6) // perimeter is discarded
71 | fmt.Printf("Area %f ", area)
72 | }
73 |
74 | ```
75 | 从下图可以看出,使用_空白标识符可以放弃接收第二个返回值。
76 |
77 |
78 |
79 | 
80 |
81 | 5-02_02 空白标识符
82 |
83 |
84 | ### 流程控制(Flow control)
85 |
86 | **1.For**
87 |
88 | Go只有一个循环结构——for。
89 | 与Java等语言不一样的是for的声明语句不需要小括号()。
90 | ```
91 | for i := 1; i <= 100; i++ {
92 | sum += i
93 | }
94 | ```
95 | 初始化和递增声明是可选的。
96 | ```
97 | for ; sum < 1000; {
98 | sum += sum
99 | }
100 | ```
101 | For语句还可以类似Java里while。
102 | ```
103 | sum := 1
104 | for sum < 1000 {
105 | sum += sum
106 | }
107 | ```
108 | **2.If**
109 | Go的if声明语句类似循环语句,表达式不需要使用小括号(),但是执行语句中的大括号{}是需要的。
110 |
111 | ```
112 | if x < 0 {
113 | return sqrt(-x) + "i"
114 | }
115 | ```
116 |
117 | **3.Break**
118 | 结束循环。
119 | ```
120 | package main
121 |
122 | import (
123 | "fmt"
124 | )
125 |
126 | func main() {
127 | for i := 0; i < 3; i++ {
128 | for j := 1; j < 4; j++ {
129 | fmt.Printf("i = %d , j = %d\n", i, j)
130 | if i == j {
131 | break
132 | }
133 | }
134 |
135 | }
136 | }
137 | ```
138 |
139 | **4.Continue**
140 |
141 | 跳过当前语句,继续执行循环语句。
142 | ```
143 | package main
144 |
145 | import (
146 | "fmt"
147 | )
148 |
149 | func main() {
150 | for i := 1; i <= 10; i++ {
151 | if i%2 == 0 {
152 | continue
153 | }
154 | fmt.Printf("%d ", i)
155 | }
156 | }
157 | ```
158 |
159 | **5.标签**
160 |
161 | break使用标签(labels),跳出当前标签循环。
162 | ```
163 | package main
164 |
165 | import (
166 | "fmt"
167 | )
168 |
169 | func main() {
170 | outer:
171 | for i := 0; i < 3; i++ {
172 | for j := 1; j < 4; j++ {
173 | fmt.Printf("i = %d , j = %d\n", i, j)
174 | if i == j {
175 | break outer
176 | }
177 | }
178 |
179 | }
180 | }
181 | ```
182 | 运行效果如下图,可以看出break只是跳出当前循环,但使用break加outer标签直接可以退出标签所在循环,实在是很方便。
183 |
184 |
185 |
186 |
187 | 
188 |
189 | 5-02_03 标签
190 |
191 |
192 | ### 方法(Method)
193 |
194 | Go没有类,然而我们可以为任意数据类型定义方法。
195 |
196 | 为数据类型定义方法(Method)的方式是在func和方法之间增加一个特别的接受参数。
197 |
198 | 下面的例子中,Abs方法有一个Vertex类型的接受参数ver。
199 |
200 | ```
201 | package main
202 |
203 | import (
204 | "fmt"
205 | "math"
206 | )
207 |
208 | type Vertex struct {
209 | X, Y float64
210 | }
211 |
212 | //在func和Abs()方法之间有一个Vertex类型的接受参数ver
213 | func (ver Vertex) Abs() float64 {
214 | return math.Sqrt(ver.X*ver.X + ver.Y*ver.Y)
215 | }
216 | //在func和Add()方法之间有一个Vertex类型的接受参数ver
217 | func (ver Vertex) Add() float64{
218 | return ver.X+ver.Y
219 | }
220 | //在func和Divide ()方法之间有一个Vertex类型的接受参数ver
221 | func (ver Vertex) Divide() float64{
222 | return ver.X/ver.Y
223 | }
224 |
225 | func main() {
226 | ver := Vertex{3, 4}
227 | fmt.Println(ver.Abs())
228 | fmt.Println(ver.Add())
229 | fmt.Println(ver.Divide())
230 | }
231 | ```
--------------------------------------------------------------------------------
/chapter5_02_part4 golang_core.md:
--------------------------------------------------------------------------------
1 | ### 指针接收器(Pointer receivers)
2 | 上面例子定义方法的时候我们使用的是值接收器( value receiver)。下面我学习一下使用指针接收器( pointer receiver)定义方法,并琢磨一下两者之间有什么区别。
3 |
4 | 下面的例子使用了指针接收器( pointer receiver)定义方法。在定义Vertex 的Scale()方法时,传递了一个指针接收器*Vertex。
5 |
6 | ```
7 | package main
8 |
9 | import (
10 | "fmt"
11 | "math"
12 | )
13 |
14 | type Vertex struct {
15 | X, Y float64
16 | }
17 | //传递了值接收器Vertex
18 | func (v Vertex) Abs() float64 {
19 | return math.Sqrt(v.X*v.X + v.Y*v.Y)
20 | }
21 | //传递了指针接收器*Vertex
22 | func (v *Vertex) Scale(f float64) {
23 | v.X = v.X * f
24 | v.Y = v.Y * f
25 | }
26 |
27 | func main() {
28 | v := Vertex{3, 4}
29 | //在调用指针接收器方法时使用了v,而没有采用&v
30 | //这是因为在使用指针接收器作为参数时,go语言会默认会将
31 | //v.Scale(10)看做&v.Scale(10)
32 | v.Scale(10)
33 | fmt.Println(v.Abs())
34 | }
35 | ```
36 | 接下来我们把Scale()方法的指针接收器*Vertex修改为值接收器Vertex,看看与指针接收器有什么差别。
37 |
38 |
39 |
40 |
41 | 
42 |
43 | 5-02_04 值接收器与指针接收器的差别
44 |
45 |
46 | 从上图中我可以看出,使用指针接收器调用Scale()方法时,指针接收器修改了Vertex的值,使得Vertex在调用Abs()方法时X、Y都增加了10倍,因此调用Abs()方法得到的结果是50。
47 |
48 | 接下来,采用了值接收器后,Vertex同样还是调用了Scale()方法,但是只是对Vertex的拷贝进行操作,因此调用Abs()方法时结果还是Vertex初始值运算结果5。
49 |
50 | **注意:在定义方法时,虽然v.Scale(10)的v传递的值,而非指针,但Go解释器会自动将v.Scale(10)看做&v.Scale(10)。**
51 |
52 | 下面是采用函数的方式实现以上功能。看看函数与指针接收器的方法有啥区别。
53 |
54 | ```
55 | package main
56 |
57 | import (
58 | "fmt"
59 | "math"
60 | )
61 |
62 | type Vertex struct {
63 | X, Y float64
64 | }
65 |
66 | func Abs(v Vertex) float64 {
67 | return math.Sqrt(v.X*v.X + v.Y*v.Y)
68 | }
69 |
70 | func Scale(v *Vertex, f float64) {
71 | v.X = v.X * f
72 | v.Y = v.Y * f
73 | }
74 |
75 | func main() {
76 | v := Vertex{3, 4}
77 | //函数调用时,传递的参数必须与函数定义的类型一致
78 | Scale(&v, 10)
79 | fmt.Println(Abs(v))
80 | }
81 | ```
82 | 采用函数的方式实现上面的功能,传递的参数就必须与函数定义的类型一致,否则会出现下图中的编译错误。
83 |
84 |
85 |
86 |
87 | 
88 |
89 | 5-02_05 函数的实现方式
90 |
91 |
92 | ### 接口(Interface)
93 |
94 | 在面向对象语言中,接口定义了对象的行为。换句话来说,接口只是定义了对象打算做的事情,但没有具体的实现。
95 |
96 | 在Go语言中,接口是一套空方法。当一个数据类型提供了接口中定义的所有方法,也就意味着该数据类型实现了接口。这种方式类似于面向对象中的设计,但没有implements关键字,也就是常说的“隐式继承”。Go的设计解耦了接口定义和具体实现,相比Java的强耦合继承关系,更加容易使用且通用性强。
97 |
98 | ```
99 | package main
100 |
101 | import "fmt"
102 |
103 | type I interface {
104 | M()
105 | }
106 |
107 | type T struct {
108 | S string
109 | }
110 |
111 | type MyFloat float64
112 |
113 | // 这个方法说明type T实现了接口I,
114 | // 但是我们不需要显式声明
115 | func (t T) M() {
116 | fmt.Println(t.S)
117 | }
118 | // 这个方法说明float64 MyFloat实现了接口I,
119 | // 但是我们不需要显式声明
120 |
121 | func (f MyFloat) M() {
122 | fmt.Println(f)
123 | }
124 |
125 | func main() {
126 | var i I = T{"hello"}
127 | i.M()
128 |
129 | var f I = MyFloat(2)
130 | f.M()
131 | }
132 | ```
133 | 以下是Java的接口实现方式,类必须使用implements关键字进行接口实现,而且类与接口之间是强耦合。
134 |
135 | ```
136 | import java.io.IOException;
137 | interface Shape {
138 | void draw(double amount) throws IOException;
139 | }
140 | class Main implements Shape{
141 |
142 | @Override
143 | public void draw(double amount) {
144 | // TODO Auto-generated method stub
145 | }
146 | }
147 | ```
148 |
149 |
150 |
--------------------------------------------------------------------------------
/chapter5_03 chaincode_concept.md:
--------------------------------------------------------------------------------
1 | ## 链码基本概念
2 |
3 | 智能合约(smart contract)本质上是一段运行在区块链网络上的业务逻辑代码。
4 |
5 | 绝大多数的区块链都要求采用共识机制验证、排序并将交易广播到所有节点,然后每个节点按照顺序执行交易。
6 |
7 | 运行在区块链上智能合约必须是一些确定性的业务逻辑。如果运行一些随机性较强的业务,由于每个节点的运行结果不一致,这样就无法达成共识。进一步来讲,由于智能合约运行在每个节点上,每个节点要按顺序执行交易,整个网络要对交易进行并行计算,这就牺牲了程序的效率,但同时可保证代码的安全性。
8 |
9 | Fabric在设计上解耦了排序节点(Orderer)、背书节点( Endorser )、确认节点( Committer ),并将交易流程分为背书节点进行交易验证及模拟执行,Orderer节点进行交易排序并生成区块,以及Commiter节点验证交易并将区块写入账本,解决了传统区块链面临的扩展性、灵活性、性能及机密性挑战问题。
10 |
11 | 在Fabric中,可以根据业务需要进行背书策略设置,选择采用哪些节点进行智能合约的执行。这样做的好处是,交易只需要执行在背书策略设定的节点上,这样就允许并行执行提高网络的整体性能。同时这种方式也可以在排序之前过滤掉不确定业务逻辑,消除了合约不确定性。
12 |
13 | 以太坊虚拟机(EVM)是以太坊智能合约的运行环境。它不仅被沙盒封装起来,事实上它被完全隔离,也就是说运行在EVM内部的代码不能接触到网络、文件系统或者其它进程,甚至智能合约之间也只有有限的调用。EOS虚拟机采用的WebAssembly(WASM)是一个内存安全的沙盒执行环境虚拟机,为智能合约提供了安全保障。Fabric使用了Docker来存放链上的代码,而不需要依靠特定的虚拟机,Docker为链码执行提供了一个安全、轻便的语言执行环境。
14 |
15 | ### 智能合约与Chaincode
16 |
17 | 从应用开发者视角来看,智能合约(Smart Contract)经常与账本(Ledger)联系在一起,账本保存了业务对象当前状态和历史状态。
18 |
19 | 在Fabric中经常会用到智能合约和链码两个术语。智能合约定义了业务资产和不同组织的业务逻辑,是区块链应用的核心业务逻辑。与智能合约对应的是链码,一个链码里可以包含多个智能合约。智能合约负责业务逻辑,而链码负责的是怎样将智能合约进行打包、部署。
20 |
21 | 通常情况下,系统管理员关注的是链码,业务人员和开发人员关注的是智能合约。
22 |
23 | 举个车辆买卖的例子。在车辆买卖业务中,假设有销售方和购买方两个组织,使用智能合约实现车辆销售的业务逻辑。一旦销售方将车辆按照指定时间交付,购买方就根据之前车辆购买合同中的约定自动进行付款,通过智能合约可以大幅度提高业务执行效率。
24 |
25 |
26 |
27 |
28 | 
29 |
30 | 5-03_01 智能合约
31 |
32 |
33 | 上图中定义了车辆的智能合约。智能合约中定义了车辆资产(Car结构体)和销售方和购买方的相关业务逻辑(queryCar、createCar和changeCar等相关方法)。当应用调用Invoke方法时就会执行相应业务逻辑,进而生成交易数据存储在账本里。
34 |
35 | ### 链码的生命周期
36 |
37 | 链码(chaincode)使用gRPC协议通过Peer节点操作分布式账本中的数据。Fabric网络启动后,可以通过命令行或SDK进行链码操作,验证网络是否正常运行。
38 |
39 | 用户可以通过命令行方式操作链码,支持的链码子命令包括install 、instantiate 、invoke 、query、upgrade 、package 和signpackage 等,大部分命令(除了package 、signpackage)的处理过程都是类似的,先创建签名提案消息,再发给Peer 进行背书,获取ProposalResponse 消息。
40 |
41 | 需要注意的是, instantiate 、upgrade 和invoke 等子命令还需要根据ProposalResponse 消息创建SignedTX , 发送给Orderer 进行排序和广播全网执行。package、signpackage 子命令作为本地操作,无需与Peer 或Orderer 打交道。
42 |
43 | 链码生命周期,包括初始状态,等待安装、等待实例化、运行和停止。
44 |
45 |
46 |
47 |
48 | 
49 |
50 | 5-03_02 链码生命周期
51 |
52 |
53 | **peer chaincode install**
54 |
55 | 将链码打包成可部署格式,并存入到背书节点的文件系统。
56 |
57 | **peer chaincode instantiate**
58 |
59 | 把安装到背书节点上的链码实例化到指定通道,该命令会在节点上创建运行链码的docker容器,并初始化链码。
60 |
61 | **peer chaincode invoke**
62 |
63 | 调用指定链码。
64 |
65 | **peer chaincode query**
66 |
67 | 查询指定链码,该命令只查询节点上状态,不生成区块。
68 |
69 | **peer chaincode package**
70 |
71 | 将链码打包为可部署格式
72 |
73 | **peer chaincode signpackage**
74 |
75 | 签名打包后的链码
76 |
77 | **peer chaincode upgrade**
78 |
79 | 升级链码,需要先用peer chaincode install命令安装更新代码,然后使用该命令来升级已经实例化的代码。
80 |
81 |
--------------------------------------------------------------------------------
/chapter5_05 chaincode_unit_test.md:
--------------------------------------------------------------------------------
1 | ## 单元测试
2 |
3 | Go语言提供了MockStub类型用于单元测试,可以使用“go test”命令,或者通过VS code进行单元测试。
4 |
5 | 单元测试的好处是不用启动Fabric网络即可在本地开发环境下进行链码的测试。
6 |
7 | 其原理是维护了一个 map[string][]byte类型的State用来模拟账本状态数据库,对链码的操作PutState()、GetState()、DelState()方法都是针对与内存中的State。MockStub主要提供了MockInit()、MockInvoke()方法模拟背书节点对链码的调用。
8 |
9 | 编写测试用例时,文件必须以_test.go结尾,包含TestXxx函数(Xxx首字母必须是大写),并与链码位于同一包路径下。编写链码测试用例可以直接参考官方提供的例子程序:github.com\hyperledger\fabric\examples\chaincode\go\example02\chaincode_test.go
10 |
11 | 为了方便测试用例编写,这里提供了一些常用的测试方法:
12 |
13 | * checkInit
14 | * checkState
15 | * checkQuery
16 | * checkInvoke
17 |
18 | sacc_test.go测试用例如下:
19 |
20 | ```
21 | package main
22 |
23 | import (
24 | "fmt"
25 | "testing"
26 |
27 | "github.com/hyperledger/fabric/core/chaincode/shim"
28 | )
29 |
30 | func checkInit(t *testing.T, stub *shim.MockStub, args [][]byte) {
31 | res := stub.MockInit("1", args)
32 | if res.Status != shim.OK {
33 | fmt.Println("Init failed", string(res.Message))
34 | t.FailNow()
35 | }
36 | }
37 |
38 | func checkState(t *testing.T, stub *shim.MockStub, name string, value string) {
39 | bytes := stub.State[name]
40 | if bytes == nil {
41 | fmt.Println("State", name, "failed to get value")
42 | t.FailNow()
43 | }
44 | if string(bytes) != value {
45 | fmt.Println("State value", name, "was not", value, "as expected")
46 | t.FailNow()
47 | }
48 | }
49 |
50 | func checkQuery(t *testing.T, stub *shim.MockStub, name string, value string) {
51 | res := stub.MockInvoke("1", [][]byte{[]byte("query"), []byte(name)})
52 | if res.Status != shim.OK {
53 | fmt.Println("Query", name, "failed", string(res.Message))
54 | t.FailNow()
55 | }
56 | if res.Payload == nil {
57 | fmt.Println("Query", name, "failed to get value")
58 | t.FailNow()
59 | }
60 | if string(res.Payload) != value {
61 | fmt.Println("Query value", name, "was not", value, "as expected")
62 | t.FailNow()
63 | }
64 | }
65 |
66 | func checkInvoke(t *testing.T, stub *shim.MockStub, args [][]byte) {
67 | res := stub.MockInvoke("1", args)
68 | if res.Status != shim.OK {
69 | fmt.Println("Invoke", args, "failed", string(res.Message))
70 | t.FailNow()
71 | }
72 | }
73 |
74 | func TestSacc_Init(t *testing.T) {
75 | cc := new(SimpleAsset)
76 | stub := shim.NewMockStub("sacc", cc)
77 |
78 | // Init a=100
79 | checkInit(t, stub, [][]byte{[]byte("a"), []byte("100")})
80 | // check a=100
81 | checkState(t, stub, "a", "100")
82 |
83 | }
84 |
85 | func TestSacc_Query(t *testing.T) {
86 | cc := new(SimpleAsset)
87 | stub := shim.NewMockStub("sacc", cc)
88 |
89 | // Init a=100
90 | checkInit(t, stub, [][]byte{[]byte("a"), []byte("100")})
91 | // Init b=100
92 | checkInit(t, stub, [][]byte{[]byte("b"), []byte("100")})
93 | // check a=100
94 | checkQuery(t, stub, "a", "100")
95 | // check b=100
96 | checkQuery(t, stub, "b", "100")
97 |
98 | }
99 |
100 | func TestSacc_Invoke(t *testing.T) {
101 | cc := new(SimpleAsset)
102 | stub := shim.NewMockStub("sacc", cc)
103 |
104 | // Init a=100
105 | checkInit(t, stub, [][]byte{[]byte("a"), []byte("100")})
106 | // Init b=100
107 | checkInit(t, stub, [][]byte{[]byte("b"), []byte("100")})
108 |
109 | checkQuery(t, stub, "a", "100")
110 | checkQuery(t, stub, "b", "100")
111 |
112 | // set a=10
113 | checkInvoke(t, stub, [][]byte{[]byte("set"), []byte("a"), []byte("10")})
114 | // set b=90
115 | checkInvoke(t, stub, [][]byte{[]byte("set"), []byte("b"), []byte("90")})
116 |
117 | checkQuery(t, stub, "a", "10")
118 | checkQuery(t, stub, "b", "90")
119 | }
120 | ```
121 | 在命令行执行go test,结果如下:
122 |
123 |
124 |
125 |
126 | 
127 |
128 | 5-05 单元测试
129 |
130 |
131 | VS code提供run package tests、 run file tests 、run test、 debug test方式进行单元测试。
132 |
133 | **注意:完成链码单元测试后,我们还可以在Fabric的开发环境进行进一步测试。Fabric的开发环境位于fabric-samples目录下的chaincode-docker-devmode下。**
134 |
135 | 具体测试步骤可以参照官方文档说明:
136 |
137 | https://hyperledger-fabric.readthedocs.io/en/release-1.4/chaincode4ade.html#testing-using-dev-mode
138 |
139 |
140 |
--------------------------------------------------------------------------------
/chapter5_06 summary.md:
--------------------------------------------------------------------------------
1 | ## 智能合约开发知识总结
2 |
3 | 通过本章节的学习,我么已经掌握了开发环境搭建、Golang核心知识、链码基本概念、链码开发、单元测试,相信你已经掌握了链码开发这项技能。但是我在这里还要提醒大家,千万不要忘了日常练习,直至将这项技能完全掌握。
4 |
5 | 学会了智能合约开发,下一章我们以区块链溯源为案例详细介绍一个完整区块链项目的实施。
6 |
7 | 祝大家学习快乐!
--------------------------------------------------------------------------------
/chapter6_00.md:
--------------------------------------------------------------------------------
1 | # 区块链溯源案例分析
2 |
3 | 区块链溯源被认为是继区块链金融之后最具潜力的区块链应用。
4 |
5 | 区块链去中心化、不可篡改、可追溯的特点与溯源业务是绝对的天仙配。
6 |
7 | 本章以农产品溯源案例为背景,从需求分析、系统设计、智能合约及应用开发详细介绍一个完整的区块链项目开发过程。
8 |
9 | 如果说之前的学习目标是为了把大家打造成一位侠客——拥有丰富的理论和极强的动手能力,那么这一章的目标是带领大家成为一名区块链世界里的帅才——拥有方案、需求、设计、开发、运维等技能。
10 |
11 | 本章主要内容:
12 | * [区块链农产品溯源方案设计](./chapter6_01%20solution.md)
13 | * [需求分析](./chapter6_02%20requirement.md)
14 | * [数据资产及业务流程设计](./chapter6_03%20asset_business_design.md)
15 | * [智能合约设计开发](./chapter6_04%20smartcontract_dev.md)
16 | * [Fabric SDK](./chapter6_05%20fabric_sdk.md)
17 | * [区块链应用开发](./chapter6_06%20blockchain_application_dev.md)
18 | * [区块链溯源案例分析知识总结](./chapter6_07%20summary.md)
--------------------------------------------------------------------------------
/chapter6_01 solution.md:
--------------------------------------------------------------------------------
1 | ## 区块链农产品溯源方案设计
2 | ### 项目背景
3 | 农产品质量安全就是指农产品的可靠性、使用性和内在价值,包括在生产、贮存、流通和使用过程中形成、残存的营养、危害及外在特征因子,既有等级、规格、品质等特性要求,也有对人、环境的危害等级水平的要求。
4 |
5 | 农产品的质量安全问题一直是消费者、政府及社会各界关注的重点。2006年4月我国颁布了《中华人民共和国农产品质量安全法》,从我国农业生产的实际出发,针对保障农产品质量安全,规定了管理体制、质量安全要求、强制实施制度以及农产品产地、农产品生产、农产品包装和标识、监督检查及责任追究制度。
6 |
7 | 2019年中央一号文件连续第16年聚焦“三农”,提出完成高标准农田建设任务,调整优化农业结构,实施重要农产品保障战略。将稻谷、小麦作为必保品种,稳定玉米生产,确保谷物基本自给、口粮绝对安全。巩固棉花、油料、糖料、天然橡胶生产能力。主动扩大国内紧缺农产品进口,拓展多元化进口渠道。加大农产品反走私综合治理力度。完善农业支持保护制度。
8 |
9 | 2019年2月农业农村部办公厅印发了《2019年农产品质量安全工作要点》,文件指出:2019年是新中国成立70周年,是全面建成小康社会关键之年,做好农产品质量安全工作意义重大。各级农业农村部门要坚决贯彻落实习近平总书记“四个最严”指示要求,坚持以实施乡村振兴战略为总抓手,以深化农业供给侧结构性改革为主线,以增加绿色优质农产品供给为主攻方向,坚持“产出来”“管出来”两手抓,进一步推进质量兴农、绿色兴农、品牌强农,提升农产品质量安全水平,切实保障人民群众“舌尖上的安全”。
10 |
11 | ### 项目概述
12 | 中共中央政治局第十八次集体学习时提出:
13 | >要探索“区块链+”在民生领域的运用,积极推动区块链技术在教育、就业、养老、精准脱贫、医疗健康、商品防伪、食品安全、公益、社会救助等领域的应用,为人民群众提供更加智能、更加便捷、更加优质的公共服务。”
14 |
15 | 区块链溯源被认为是继区块链金融之后最具潜力的区块链应用。区块链去中心化、不可篡改、可追溯的特点与溯源业务是绝对的天仙配。
16 |
17 | 传统溯源主要存在以下两个问题:
18 | 1. 数据中心化存储,由于各方利益考虑存在篡改数据的风险;
19 | 2. 溯源系统上企业各自记账,形成信息孤岛,数据无法溯源。
20 |
21 | 区块链溯源可以有效解决上面两个问题:
22 | 1. 基于区块链的哈希算法、共识机制,一旦数据上链,无法篡改;
23 | 2. 在不改变数据所有权的情况下,可以提高各方利益共享数据的积极性。
24 |
25 | 区块链技术拥有去中心化、数据不可篡改、可追溯等特性,成为继二维码、条形码等溯源技术的又一新的解决方案。
26 |
27 | 将区块链技术和物联网、二维码等技术相结合,将商品信息、物流信息、销售信息记录在链上,帮助企业有效解决商品溯源、防窜货等问题,制定精准的营销策略。
28 |
29 |
30 |
31 |
32 | 
33 |
34 | 6-01-01 区块链溯源
35 |
36 |
37 | 区块链溯源上链信息的质量是关键。将商品信息、物流数据、销售信息记录在链上,区块链数据不可篡改的特点,可以有效保证上链的商品信息无法篡改,使得商品溯源的信任程度大幅度提升。
38 |
39 |
40 |
41 | 
42 |
43 | 6-01-02 区块链溯源
44 |
45 |
46 | ### 项目目标
47 | 通过信息化手段提升农产品质量监管与服务水平,实现农产品质量管理“生产过程可记录、产品流向可跟踪、储运信息可查询、质量问题可追溯”的目标,集“管、防、控”功能于一体,确保“舌尖上的安全”,让社会群众买的放心、吃得安心。同时提升农业和农产品整体品牌形象,帮助企业打造强势品牌实现优质优价,促进地方农业发展,提升农业企业、合作社、农民的经济效益。
48 |
49 | 以二维码为产品溯源标识,利用区块链技术,通过其独特的不可篡改的分布式账本记录特性,对农产品生产到消费者进行全程可追溯,利用时间戳、共识机制等技术手段实现了数据的不可篡改和追本溯源等功能,给政府部门、农业企业、流通机构、服务机构的跨机构的溯源体系建立提供了技术支撑。同时把检测机构与消费者纳⼊监督体系中,打破了信息孤岛,提供了信息支持,在一定程度上实现农产品信息流转的透明度。
50 |
51 | ### 总体架构
52 | 技术上,农产品溯源会采用联盟链。在架构设计上,采用了可插拔、可扩展的系统框架;在节点的接入上,采用了授权管理的方式;在隐私保护上,采用了完备的权限和审查管理、细粒度隐私保护机制。由于农产品溯源链在设计上很好的使用了区块链分布式账本的特点和优势,因此农产品溯源在设计上体现了区块链多中心、公开透明、不可篡改、可追溯的特点,同时交易速度更快,具有更高的扩展性,并能很好的保护交易的隐私性。
53 |
54 |
55 |
56 |
57 | 
58 |
59 | 6-01-03 总体架构
60 |
61 |
62 | 从技术角度来看,农产品溯源链是由资源层、服务层、应用层、展现层四部分组成。
63 |
64 | 资源层是是区块链系统正常运行所需的软硬件环境。
65 |
66 | 服务层包含区块链的底层协议和扩展服务。底层协议包含共识机制、账本以及网络,扩展服务包含了身份识别服务、区块链服务、智能合约及应用编程接口。
67 |
68 | 应用层是基于区块链技术开发的农产品溯源应用。农产品溯源应用系统可将农产品生产、加工、销售等过程的各种相关信息进行记录并存储在区块链上,能通过食品识别号在网络上对该产品进行查询认证,追溯其在各环节中的相关信息。
69 |
70 | 一个完整的区块链应用包含智能合约和WEB、APP系统,WEB、APP系统通过SDK与区块链进行交互。
71 |
72 | ### 效益与意义
73 | 农产品质量安全监管与溯源平台的建设,对于政府部门、农业企业、社会公众均有重要意义。
74 |
75 | 对于政府部门,溯源平台是提高农产品质量安全管理水平的重要抓手,促使农业生产规范化、标准化,打造区域农业品牌,面向社会提供了统一防伪溯源查验入口,并创新溯源产品保险承保机制,降低政府部门市场监管风险的同时,提升消费者对产品的认可度和认知度,提高政府的社会公信力。
76 |
77 | 对于农业企业,农产品溯源机制将倒逼企业加强食品安全生产管理,这是降低企业经营风险的根本保障,并有助于企业创建农产品品牌,让优质产品实现优价。溯源与保险的结合将提高企业对食品危机的风控水平。同时借助溯源平台对电子商务、实体门店信息、活动推广等资源整合,拉动产品市场销量。溯源平台云集众多优质企业,为跨业联盟与强强联合提供便利条件。
78 |
79 | 对于社会公众,全品类溯源监管体系的延伸将惠及全民,解决农业生产端与消费终端不对称的问题,溯源平台建设有效避免假冒伪劣商品进入正规渠道,消费者购买产品时可通过具有公信力的溯源服务平台进行查询,对出现问题的产品进行维权,合法权益将受到更好的保护。
80 |
81 | ### 行业案例
82 | IBM、阿里、百度、京东、腾讯等国内外众多科技巨头都纷纷在区块链溯源方面积极布局跟进。
83 |
84 | 沃尔玛跟IBM合作,将食品供应链上的所有利益相关者组织起来协作,以期望达到食品安全的可追溯性,最重要的是向消费者展示全流程的透明度。
85 |
86 | 备受假货困扰的阿里巴巴,得益于集团多年的业务基础和数据积淀,商品溯源成为蚂蚁区块链最具优势的项目。
87 |
88 | 2017年3月,阿里与普华永道、新西兰邮政、恒天然合作,签署了全球跨境食品溯源的互信框架合作协议,应用“区块链”等创新技术,推动透明可追溯的跨境食品供应链。
89 |
90 | 2017年5 月,天猫国际启动全球溯源计划——利用区块链技术以及大数据跟踪进口商品全链路,在这个场景中,天猫针对来自澳洲、新西兰26个品牌商家、奶制品,基于蚂蚁区块链提供了关于每一瓶奶制品的身份证的溯源码服务。
91 |
92 | 2017年8月,天猫国际就已经全面启动全球溯源计划,利用区块链技术及大数据跟踪进口商品信息。
93 |
94 | 2018年2月,菜鸟和天猫国际达成合作,启用区块链技术建立商品的全链路物流信息。
95 | 需要注意的是,虽然区块链溯源有很多优势,但从实际业务来看,需要制定行业标准,对供应链系统进行改造,借助物联网技术进行数据采集避免源头造假。
96 |
--------------------------------------------------------------------------------
/chapter6_02 requirement.md:
--------------------------------------------------------------------------------
1 | 在全球范围内,每年在海洋沿海资源和工业上花费3万亿美元。从捕鱼,加工,运输到销售,海洋渔业雇用了超过2亿人。我们多达40%的海洋受到非法捕鱼等人类活动的严重影响。这是一个巨大的行业,可以在提高行业透明度方面进行创新。
2 |
3 | 这里我们使用Hyperledger Fabric 将区块链技术应用到鱼类溯源案例中。
4 |
5 | 鱼类溯源环节涉及从捕捞、运输到餐厅。这个过程中涉及源头渔夫、餐厅以及监管机构,监管机构的主要作用是验证数据的有效性和补货数量的可持续性。
6 |
7 | 我们将使用Hyperledger Fabric的框架来跟踪此过程的每个部分。在这个业务场景中有点需要特别注意:
8 |
9 | 1. 网络中有许多参与者,你将看到这些参与者如何相互作用以及如何进行交易。
10 |
11 | 2. Fabric中通道允许私下达成一致交易,同时仍保持透明度,以便其他参与者可以证实并确认他们的交易。
12 |
13 | 采用通道方式监管者和餐馆老板可以通过通道来确认特定鱼类的供应是否可持续和采购是否合法,而无需查看整个运输过程的细节。这个过程只有渔夫和餐馆老板知道具体细节。
14 |
--------------------------------------------------------------------------------
/chapter6_03 asset_business_design.md:
--------------------------------------------------------------------------------
1 | ## 数据资产及业务流程设计
2 |
3 | ### 数据资产
4 | 定一个农产品资产,其中包含船只、位置、日期时间和拥有者属性。
5 | * 船只
6 | * 位置
7 | * 日期时间
8 | * 拥有者
9 |
10 | ### 业务流程
11 | 完整的业务流程包含一下三步:
12 | * 渔民捕捞鱼
13 | * 渔民将鱼卖给餐馆
14 | * 监管者通过供应链系统验证和检查合法性和供应的可持续性。
--------------------------------------------------------------------------------
/chapter6_05 fabric_sdk.md:
--------------------------------------------------------------------------------
1 | ## Fabric SDK
2 |
3 | Fabric SDK 封装了一系列与区块链网络打交道的基本方法,包括发送交易、监听网络事件、查询区块和交易信息等。通过SDK 可以很容易地使用以下四个步骤完成一次完整的程序调用和确认。
4 |
5 | * 从CA 获取合法的身份证书;
6 | * 构造合法的交易提案提交给Endorser 节点进行背书;
7 | * 收集到足够多Endorser 支持后,构造合法的交易请求,发给Orderer 节点进行排序;
8 | * 监听事件,确保交易已经写入账本。
9 |
10 | Fabric 目前支持Node.js 、Java的SDK(Python和Go的SDK目前还没有正式发布) 。本教程以Node.js为例。
11 |
12 | 官方文档:
13 |
14 | https://hyperledger.github.io/fabric-sdk-node/release-1.4/index.html
15 |
--------------------------------------------------------------------------------
/chapter6_06 blockchain_application_dev.md:
--------------------------------------------------------------------------------
1 | ## 区块链应用开发
2 |
3 | 至此,我们已经完成了溯源业务的智能合约开发,接下来我们将基于Fabric Node.js SDK进行溯源应用的开发。
4 |
5 | 本章节我们会将前面学到理论知识融合到具体应用案例中。一起看看用户怎样通过应用查询、更新账本以实现与Fabric网络的交互。
6 |
7 | 应用程序通过SDK向区块链网络提交交易调用智能合约,背书节点在指定容器中运行智能合约(智能合约执行交易);如果没有问题,应用程序在收到足够背书之后将交易发给Orderer节点;Orderer节点对交易请求进行打包然后广播给网络中其它节点;节点对交易进行最终检查,通过后写入账本。
8 |
9 | ### 系统原型
10 |
11 |
12 |
13 | 
14 |
15 | 6-06-01 首页
16 |
17 | 
18 |
19 | 6-06-02 查询
20 |
21 | 
22 |
23 | 6-06-03 创建新的货物
24 |
25 | 
26 |
27 | 6-06-04 修改货物拥有者
28 |
29 |
30 | ### 主要应用程序文件
31 |
32 |
33 |
34 | 
35 |
36 | 6-06-05 主要应用程序文件
37 |
38 |
39 | 完整的应用程序我已经放在了[源码目录](./src/fabric-material)下,下载完成后通过FTP工具上传到之前配置好的Ubuntu系统,执行以下命令:
40 |
41 | **1. 启动网络**
42 | ```
43 | #进入到程序目录
44 | cd fabric-material/tuna-app
45 | # 启动Fabric网络
46 | ./startFabric.sh
47 | ```
48 |
49 | **2. 安装Node.js相关依赖文件,按照以下顺序启动应用程序。**
50 | ```
51 | # 安装node.js依赖文件
52 | $ npm install
53 | # 注册Admin
54 | $ node registerAdmin.js
55 | # 注册用户,用于系统的访问
56 | $ node registerUser.js
57 | # 启动应用程序
58 | $ node server.js
59 | ```
60 | **3. 通过浏览器访问localhost:8000,即可访问。**
61 |
62 | 
63 |
64 | 6-06-06 基于区块链的溯源系统
65 |
66 | **注意:如果你的页面显示出现下面的错误,请检查本机(虚拟机)的网络是否可以正常连接Google API。**
67 |
68 | 
69 |
70 | **4. 每次学习完毕,记着通过以下命令清除docker容器和密钥文件。**
71 |
72 | ```
73 | $ docker rm -f $(docker ps -aq)
74 |
75 | $ cd ~
76 | $ rm -rf .hfc-key-store/
77 | ```
78 |
79 | ### 主要应用逻辑
80 |
81 | 1. 设置Fabric网络
82 | ```
83 | var Fabric_Client = require('fabric-client');
84 | var path = require('path');
85 | var util = require('util');
86 | var os = require('os');
87 |
88 | var fabric_client = new Fabric_Client();
89 |
90 | // setup the fabric network
91 | var channel = fabric_client.newChannel('mychannel');
92 | var peer = fabric_client.newPeer('grpc://localhost:7051');
93 | channel.addPeer(peer);
94 | ```
95 | 2. 获取用户证书
96 | ```
97 | var member_user = null;
98 | var store_path = path.join(os.homedir(), '.hfc-key-store');
99 | console.log('Store path:'+store_path);
100 | ```
101 | 3. 查询所有
102 | ```
103 | // queryAllTuna - requires no arguments , ex: args: [''],
104 | const request = {
105 | chaincodeId: 'tuna-app',
106 | txId: tx_id,
107 | fcn: 'queryAllTuna',
108 | args: ['']
109 | };
110 | ```
111 | 4. 查询
112 | ```
113 | // queryTuna - requires 1 argument, ex: args: ['4'],
114 | const request = {
115 | chaincodeId: 'tuna-app',
116 | txId: tx_id,
117 | fcn: 'queryTuna',
118 | args: [key]
119 | };
120 | ```
121 | 5. 增加
122 | ```
123 | // recordTuna - requires 5 args, ID, vessel, location, timestamp,holder - ex: args: ['10', 'Hound', '-12.021, 28.012', '1504054225', 'Hansel'],
124 | // send proposal to endorser
125 | const request = {
126 | //targets : --- letting this default to the peers assigned to the channel
127 | chaincodeId: 'tuna-app',
128 | fcn: 'recordTuna',
129 | args: [key, vessel, location, timestamp, holder],
130 | chainId: 'mychannel',
131 | txId: tx_id
132 | };
133 | ```
134 | 6. 修改
135 | ```
136 | // changeTunaHolder - requires 2 args , ex: args: ['1', 'Barry'],
137 | // send proposal to endorser
138 | var request = {
139 | //targets : --- letting this default to the peers assigned to the channel
140 | chaincodeId: 'tuna-app',
141 | fcn: 'changeTunaHolder',
142 | args: [key, holder],
143 | chainId: 'mychannel',
144 | txId: tx_id
145 | };
146 | ```
147 | **注意:以上应用程序包含了Fabric测试网络。学员也可以将链码和Node.js程序拷贝到之前我们已经配置好的Fabric网络进行测试。**
--------------------------------------------------------------------------------
/chapter6_07 summary.md:
--------------------------------------------------------------------------------
1 | ## 区块链溯源案例分析知识总结
2 |
3 | 本章节通过区块链溯源为案例详细介绍一个完整区块链项目的实施。
4 |
5 | 这个章节是所有章节最难的,因为它需要的技能比较多(方案、需求、设计、开发、运维),学习过程中请大家保持耐心。
6 |
7 | 同时我也会继续完善本章节,请大家持续关注。学习过程中有任何问题可以加我微信253841918.
8 |
9 | 祝大家学习快乐!
--------------------------------------------------------------------------------
/chapter7_00.md:
--------------------------------------------------------------------------------
1 | # 区块链即服务
2 |
3 | BaaS(Blockchain as a Service),“区块链即服务”,是指将区块链框架嵌入云计算平台,利用云服务基础设施的部署和管理优势,为开发者提供便捷、高性能的区块链生态环境和生态配套服务,支持开发者的业务拓展及运营支持的区块链开放平台。
4 |
5 | BaaS平台旨在提供创建、管理和维护企业级区块链网络及应用的服务,能够帮助用户降低开发及使用的成本。通过BaaS平台提供的简单易用、成熟可扩展、安全可靠、可视化运维等设计特色,区块链开发者能够满足快速部署、安全可靠的需求,为企业高效开发区块链应用。
6 |
7 | 本章主要内容:
8 | * [IBM Bluemix区块链平台](./chapter7_01%20ibm_bluemix_baas.md)
9 | * [阿里云区块链平台](./chapter7_02%20aliyun_baas.md)
10 | * [使用Cello搭建区块链平台](./chapter7_03%20cello.md)
11 | * [区块链即服务知识总结](./chapter7_04%20summary.md)
--------------------------------------------------------------------------------
/chapter7_01 ibm_bluemix_baas.md:
--------------------------------------------------------------------------------
1 | ## IBM Bluemix 区块链平台
2 |
3 | IBM区块链技术可通过Bluemix访问,该项技术基于Linux基金会的开源项目“超级账本”(Hyperledger),能够为用户提供一套开放的基础架构,帮助用户迅速构建与测试新的区块链应用及行业应用。
4 |
5 | * 基于 Linux 基金会的开源项目 Hyperledger Fabric v1.0 和 IBM PaaS 云平台
6 | * 提供端到端的区块链平台解决方案
7 | * 快速搭建高可用的区块链网络
8 | * 提供区块链平台安全特性
9 | * 配备完整的自服务运维系统屏蔽 IT 的复杂度
10 |
11 | ### IBM 区块链即服务BaaS平台应用场景
12 |
13 | **1. 企业需要开箱即用的区块链平台:**
14 |
15 | IBM BaaS 平台支持多租户场景,具备服务发现、共享存储、日志监控、DevOps 等企业级能力。
16 |
17 | **2. 企业需要高可用和动态扩展的区块链网络底层框架:**
18 |
19 | IBM BaaS 平台集成 Kubernetes,支持 master 节点,共享存储,节点故障恢复,帮助应对高数据增长带来的挑战。
20 |
21 | **3. 企业希望集中内部开发资源于上层业务应用,而非底层架构:**
22 |
23 | IBM BaaS 平台提供 SDK、CLI 样例,供企业开发团队基于 IBM PaaS 云平台灵活快速配置区块链网络。
24 |
25 |
26 |
27 |
28 | 
29 |
30 | 7-01 IBM Bluemix 区块链平台
31 |
32 |
33 | ### IBM 区块链即服务BaaS平台的优势
34 |
35 | **1. 端到端的区块链解决方案**
36 |
37 | * 保证区块链的底层网络和存储要求
38 | * 可以提供区块链应用上线的自动化流程
39 | * 对区块链提供全方位的运维管理
40 | * 可与 P4、PureApp 进行集成
41 |
42 | **2. 快速搭建高可用性区块链网路**
43 |
44 | * 基于模板,快速自动化搭建
45 | * 私有区块链镜像存储,版本一致稳定
46 | * 无缝对接 IBM PaaS 云平台底层服务
47 | * 节点故障可实现快速恢复
48 | * 可定制区块链功能和拓扑结构
49 |
50 | **3. 完整的自服务运维系统**
51 |
52 | * IBM PaaS 云平台自运维具有独立的运维模型和相应的支撑组件
53 | * 支持全景视图
54 | * 全面监测 IT 问题,发现问题根源
55 |
56 | 如果对IBM区块链服务平台感兴趣,那就赶紧[注册](https://console.ng.bluemix.net/catalog/services/blockchain)试用吧。
--------------------------------------------------------------------------------
/chapter7_02 aliyun_baas.md:
--------------------------------------------------------------------------------
1 | ## 阿里云区块链平台
2 |
3 | 阿里云区块链服务(Blockchain as a Service,简称BaaS)是企业级区块链平台服务,支持Hyperledger Fabric、蚂蚁金服自研区块链技术、以及企业以太坊Quorum,为您构建更安全稳定的区块链环境,简化部署运维及开发流程,实现业务快速上链。
4 |
5 |
6 |
7 |
8 | 
9 |
10 | 7-02 阿里云区块链平台
11 |
12 |
13 | 阿里云区块链平台的搭建非常方便,只需三步即可完成平台的搭建。大家可以参照[官方文档](https://help.aliyun.com/product/84950.html)进行[操作](https://baas.console.aliyun.com/),开启你的区块链之旅吧!
14 |
15 |
--------------------------------------------------------------------------------
/chapter7_03 cello.md:
--------------------------------------------------------------------------------
1 | ## 使用Cello搭建区块链平台
2 |
3 | Hyperledger Cello 是超级账本项目下面的子项目,提供按需部署的功能,可以将区块链部署在各种裸机、虚拟机、容器等环境中。该项目最初由IBM发起,目前得到了Soramitsu、华为和Intel的赞助。
4 |
5 | ### 简介
6 |
7 | 基于Fabric和成熟的云计算PaaS工具, Cello可以非常方便的开展如下工作:
8 |
9 | * 可以非常方便的搭建一个BaaS平台。
10 | * 提供可定制的区块链,例如Hyperledger Fabric V1.0网络。
11 | * 在裸机、虚拟云以及容器集群中维护一个区块链网络池。
12 | * 通过仪表盘检查系统状态,调整区块链网络,扩展资源,等等。
13 |
14 |
15 |
16 |
17 | 
18 |
19 | 7-03-01 Cello
20 |
21 |
22 | Cello遵循了典型的主从架构。主节点(Master)负责管理整个区块链网络。提供了8080端口的WEB界面和80端口的RESTful API。强烈建议用Linux系统作为主节点。从节点(Workers)是由各节点组成的区块链网络。Cello支持各种类型的从节点,可以运行在Docker、Swarm、k8s、VSphere或者裸机上。
23 |
24 |
25 |
26 |
27 | 
28 |
29 | 7-03-02 Cello的主从架构
30 |
31 |
32 | ### 配置主节点
33 | 1. 下载Cello代码
34 | ```
35 | $ git clone https://github.com/hyperledger/cello.git
36 | $ cd cello
37 | ```
38 | 2. 设置主节点
39 | ```
40 | $ make setup-master
41 | ```
42 | 3. 启动Cello服务
43 | ```
44 | $ make start
45 | ```
46 |
47 | ### 配置从节点
48 | 对于Ubuntu 16.04,修改/lib/systemd/system/docker.service文件,更新Service下的ExecStart配置项。
49 | ```
50 | [Service]
51 | ExecStart=/usr/bin/dockerd -H fd:// -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 --default-ulimit=nofile=8192:16384 --default-ulimit=nproc=8192:16384
52 | ```
53 | 重新启动docker engine服务。
54 |
55 | ```
56 | $ sudo systemctl daemon-reload; sudo systemctl restart docker.service
57 | ```
58 | 设置从节点(Worker)。
59 |
60 | ```
61 | $ make setup-worker
62 | ```
63 | 确保节点容器可以访问,需要开启IP转发功能。
64 | ```
65 | $ sysctl -w net.ipv4.ip_forward=1
66 | ```
67 |
68 | ### 设置Cello网络
69 |
70 | 通过8081端口访问仪表盘,默认情况下账户是admin:pass。
71 | 刚打开仪表盘是没有主机的(host),需要先添加主机。
72 |
73 |
74 |
75 |
76 | 
77 |
78 | 7-03-03 添加主机
79 |
80 |
81 | 输入集群的名字、主机、链的尺寸,创建新的链。
82 |
83 |
84 |
85 |
86 | 
87 |
88 | 7-03-04 创建新的链
89 |
90 |
91 | 输入区块链名称、类型,创建区块链网络。
92 |
93 |
94 |
95 |
96 | 
97 |
98 | 7-03-05 创建区块链网络
99 |
100 |
101 | 接着就可以添加智能合约、安装部署智能合约,进行合约的测试了。
102 |
103 |
104 |
105 |
106 | 
107 |
108 | 7-03-06 智能合约测试
109 |
110 |
111 | 详细信息请参照官方文档: https://hyperledger-cello.readthedocs.io/en/latest/
112 |
113 | Cello:https://github.com/hyperledger/cello
114 | Setup Cello:
115 | https://hyperledger-cello.readthedocs.io/en/latest/setup/setup/
116 |
117 |
--------------------------------------------------------------------------------
/chapter7_04 summary.md:
--------------------------------------------------------------------------------
1 | ## 区块链BaaS知识总结
2 |
3 | 区块链即服务可以降低区块链的应用门槛。
4 |
5 | 本章我选取了IBM Bluemix区块链平台和阿里云区块链平台,同时也给出了自己搭建Fabric BaaS的方法。
6 |
7 | 祝大家学习快乐!
--------------------------------------------------------------------------------
/chapter8_00.md:
--------------------------------------------------------------------------------
1 | # 区块链技术发展趋势
2 |
3 | 大部分人对区块链都有一个误区,以为区块链是万能的。如果你给他说区块链这个不能做,那个不能做,他就会很不屑的来一句,“哦!!!区块链其实也干不了啥。”持这种观点的人是受到了外界很多人将区块链技术神话的影响。真相是任何一项技术都不可能包打天下,只有充分认识到一项技术的特点,将这项技术与其它技术结合起来,才能将一项技术的优势发挥出来,才能让一项技术真正造福人类。
4 |
5 | 我们现在熟悉的互联网技术,其实也是一个大杂烩,除了TCP/IP、HTTP、HTML相关技术之外,经过这么多年的发展,融合了云计算、大数据、人工智能等许多技术才走到今天,才让一项当初只能发邮件、浏览网页、玩游戏的技术演变成一项改变人类文明进程的技术。
6 |
7 | 区块链作为传统互联网技术的一个有益补充,也会经历同样的路径。当区块链技术与云计算、大数据、人工智能、物联网等技术充分融合后,区块链才能真正发挥它的威力。
8 |
9 | 就拿现在火热的人工智能技术来说,其实是依赖于大数据技术的发展。大数据和人工智能算法的结合,促进了人工智能技术的发展,才有了谷歌阿法狗大战李世石、柯洁的战绩。
10 |
11 | 我们前面提到的区块链溯源,如果没有物联网技术,区块链溯源也很难发展起来。区块链作为一个不可篡改的数据库,数据的真实性需要通过物联网技术进行数据采集才能保证数据的真实性。如果上链数据是人工录入,这样就很难保证链上数据的真实性,区块链的价值也就无法真正体现出来。
12 |
13 | 区块链技术还处于早期,区块链的可扩展性、智能合约安全、隐私保护和监管是区块链现阶段主要面临的挑战,同时也是极客和各领域专家最为痴迷的地方。问题中往往潜藏着机会。把握区块链发展趋势,在问题中寻找机会,才能抓住区块链世界里的机会。
14 |
15 | 本章主要内容:
16 | * [区块链技术融合(大数据、人工智能、物联网)](./chapter8_01%20blockchain_technology_integration.md)
17 | * [区块链技术面临的主要挑战](./chapter8_02%20blockchain_technology_challenges.md)
18 | * [区块链技术发展趋势](./chapter8_03%20blockchain_technology_trend.md)
19 | * [区块链技术发展趋势总结](./chapter8_04%20summary.md)
--------------------------------------------------------------------------------
/chapter8_01 blockchain_technology_integration.md:
--------------------------------------------------------------------------------
1 | ## 区块链技术融合(大数据、人工智能、物联网)
2 |
3 | ### 区块链与大数据
4 |
5 | 数据被称为“21世纪的石油”。一方面是互联网公司通过大量的用户数据在商业上得到了前所未有的发展,另一方面是政府、企业信息化面临的数据孤岛、数据质量低的困境。
6 |
7 | 互联网发展到现在,掌握了大量的用户数据,创造了巨大的经济效益,同时也面临着用户隐私泄露的危机。Facebook就因为泄露了超过5000万用户的隐私数据备受责难,而社会也因为这些数据的泄露受到了重大影响。同时互联网充斥着大量的低质量数据,也制约了大数据的进一步发展。
8 |
9 | 一些政府、教育、医疗等行业,由于缺乏统一的数据标准,各个部门为了维护自身利益缺乏共享数据的动力,导致这些行业发展水平远远落后于互联网的发展水平。
10 |
11 | 数据是未来最重要的生产资源,不但规模巨大,而且将随着人类行为的变迁而不断流变,成为我们测量、理解一个时代商业和社会的关键,未来将会是全行业的标配。而区块链技术,是未来世界最重要的基础技术之一,它构建了一个让所有参与者都可以共同维护的可信价值互联网。区块链作为一个传输价值的信任网络,能够让数据这项最重要的生产资源,在流通中的成本降至最低。可以说,区块链这项未来最重要的底层技术,与数据这项未来最重要的社会资源结合在一起,能够释放出极大的商业价值、社会价值。
12 |
13 | 基于区块链可以重构大数据产业,建立一个可信任的数据交换价值网络。由于区块链具备去中心化、点对点交易、数据不可篡改、匿名性等特点,可以将数据获取、数据交换及数据分析的每一步都记录在链上,为数据建立强有力的信任背书,极大程度上促进大数据产业的快速发展。
14 |
15 | 具体实现上,基于区块链点对点交易的特性,可以提供与中心化数据交易(如数据中间商,数据黑市)完全不同的解决方案。基于区块链技术,数据交易双方可以直接进行点对点的数据交易和交换,拥有不缓存数据、保护隐私等特性;采用去中心化的分布式存储方案,并通过密码机制、授权机制让数据所有权真正回归用户;基于区块链价值传递的网络特性,可以建立一套有效的数据贡献激励机制,确保数据的高质量。
16 |
17 | 进一步来讲,采用区块链智能合约,可实现更小粒度的交易模式,改变现在大数据的商业模式,基于区块链价值转移网络逐步推动形成基于全球化的数据交易场景,建立真正属于全社会的大数据产业。
18 | 举个例子,之前我们的数据都是存储在中心化服务器上,这些中心化机构拥有我们数据的所有权,他们可以为所欲为,完全不用与贡献数据的用户进行沟通。
19 |
20 | 采用区块链技术,用户将数据存储在一个大家都信任的公有链上,由于使用了数字签名技术,这样数据的所有权不隶属于任何中心化机构,用户就拥有了数据的话语权。任何人想获取数据,他不用关心数据背后的主人是谁,只需要按照自己的需要支付一定的费用,这样用户一方面拥有自己数据的所有权,另一方面可以通过贡献数据获得收益。
21 |
22 | 区块链和大数据两项技术各有自己的优缺点,在实践中,需要将两者的优势结合起来使用。
23 |
24 | 区块链是一个历史记录数据不可篡改的记录,随着时间的变化,数据量会变得越来越大,对于链上数据的统计、分析会变得越来越困难,大数据海量存储能力和分析能力可以极大地提升区块链的价值和未来的空间。
25 |
26 | 在大数据上使用区块链技术,可以保证一些数据不可篡改。实际生活中,我们会把一些信任成本比较高的数据(记账数据、归档数据)放在链上,一些信任成本较低的数据存储在大数据上。
27 |
28 | 区块链只能保证数据不可篡改,至于数据真实性需要在数据上链之前保证。如果将造假数据放在链上,同样也无法删除、无法修改,这是区块链与之前数据库技术不同的地方,大家在数据上链之前一定要谨慎。某种程度区块链使得造假的成本变得很高,提高了人与人之间的信任程度。
29 |
30 | ### 区块链与人工智能
31 |
32 | 现在人工智能的高速发展要归功于大数据产业的发展。在人工智能发展的路上,人类将一切人工智能问题都可以通过数据来解决,通过大数据不断优化机器算法模型,很多领域已经超过了人类的能力。
33 |
34 | 语音方面,Google助手就是建立在谷歌庞大的用户数据基础之上,另外一个就是亚马逊的 Alexa,它是采用开放平台的方式与合作伙伴进行合作,而类似科大讯飞这样的企业,虽然在技术上遥遥领先,但在实际应用上却远远落后于谷歌、亚马逊这样的巨头公司,究其原因主要是这些企业没有足够的数据来训练自己的算法模型。
35 |
36 | 人工智能的核心就是算力、算法模型和数据。目前各个公司在算力和算法模型的差距没有质的差别,基本上都是通过数据不断喂养机器,使得机器具有更强的认知能力。对于大部分人工智能初创企业,由于数据的缺失,导致企业发展非常缓慢,很多技术只能停留在实验阶段,无法大规模应用。尤其是医疗、教育等行业的数据缺失,使得这些行业滞后于社会的整体发展水平。
37 |
38 | 人工智能和区块链是现代两个非常重要的技术。人工智能是一种生产力,它能提高生产效率,使得我们更快、更有效的获取财富。而区块链是一种生产关系,它能够改变我们现在的利益分配关系。虽然人工智能和区块链都有各自技术的复杂性,但区块链技术与人工智能融合可以为人工智能提供新的发展思路。
39 |
40 | 一种思路是通过区块链与人工智能结合,可以获取高质量的数据来训练AI模型,解决现在人工智能的痛点。区块链对人工智能的影响有可能会改变现在人工智能发展的现状,让具有技术优势的企业也能参与人工智能这场革命中,构建全球数据共享和AI模型生态,带动整个社会高速发展。
41 |
42 | 比如企业要开发自己的语音识别系统,一方面要研究语音技术,另一方面要获取大量的语言数据(这其中包含中文、英文、日文等等,也包含各种方言)。对于企业来说,最难的就是获取大量数据来训练自己的模型算法。如果采用区块链技术就可以建立一种数据激励机制,刺激用户贡献数据,让语音算法模型有足够的数据来训练,另一方面也可以让更多语音算法爱好者通过区块链方便地获取数据,参与到语音识别系统的开发中。
43 |
44 | 人工智能与区块链的结合优势非常明显,但由于区块链技术本身还不成熟,人工智能门槛也比较高,关于区块链在人工智能领域的发展目前还处于探索阶段,未来这个领域还需要更多专家参与才能找到真的结合点。
45 |
46 | ### 区块链与物联网
47 |
48 | 物联网的英文是Internet of things(IoT),实际上它还是基于现在的互联网。物联网和现在互联网网不一样的地方是,互联网只是将人连接在网络上,而物联网是通过传感器技术将人和物都连接在网络上。物联网会比我们想象的复杂的多,它不仅是一项技术,未来会影响到我们生活的方方面面。
49 |
50 | 随着5G、RFID 等技术的不断发展,物联网将会构建一个物物相连、物物相惜的复杂业务场景。但在这种复杂业务场景下,由于物联网对网络和运算能力要求非常高,传统互联网已经无法解决物联网所面临的问题了。我们可以想象一下在一个万物互联的世界里,我们家里的电视、冰箱、洗衣机等各种智能家电,包括我们衣服、鞋子、眼镜等设备都已经连接到网络上,不管是对计算机运算能力,还是网络的复杂程度,传统互联网已经无法解决这种复杂的信息交互场景了。
51 |
52 | 未来的物联网每个设备都会是网络中的一个节点,随着物联网设备的增加,对于服务器的计算能力要求会越来越高,大量设备需求分布式自治的方式进行组织和管理,并且对系统的容错性比较高。
53 |
54 | 区块链分布式自治的方式很好的适用这种场景,通过区块链技术可以为每台设备分配一个地址,并给每个地址注入一定的费用,设备与设备之间就可以直接交互,无需人工干预。
55 |
56 | 由物联网中的传感器网络产生的信息本身就具备价值特性,执行机构也能用行为产生价值,这些价值在设备间的流动可以利用区块链的货币特性,催生出具备自主资源产生能力的设备,它们不仅可以为机器服务,更能为人服务。
57 |
58 | 举个例子,只要用过自动贩卖机的人,都能轻易理解设备有自己的“钱包”是什么概念。自动贩卖机目前只是一个有收钱(硬币或纸钞)功能的机器,例如你投入5元会掉出一罐可乐。但是这台机器其实是需要定期花钱的,例如保养费。现在的模式是安置自动贩卖机的厂商定期派人去回收自动贩卖机内的钱,再用自动贩卖机赚到的一部分钱,来支付机器保养费,不仅耗费人力,而且效率不高。
59 |
60 | 如果自动贩卖机在未来不仅能收钱,还能够自己花钱呢?这个情况不难想象,如果机器有了自己的“钱包”,也就可以每个月自动通知机器维护厂商来保养,并自己从机器的钱包内支付。自动贩卖机除了要支付保养费之外,还有定期的电费、场地租金,都可以交给机器自主完成。因此,在物联网非常需要一个类似区块链的技术来避免资料被修改,以确保物联网设备之间的彼此信任。
61 |
62 | 目前在物联网领域有一个项目叫IOTA,大家可以关注一下这个项目的技术。虽然区块链技术还在发展初期,但是可以肯定的是区块链技术将来一定会在物联网领域得到长足的发展。
63 |
--------------------------------------------------------------------------------
/chapter8_02 blockchain_technology_challenges.md:
--------------------------------------------------------------------------------
1 | ## 区块链技术面临的主要挑战
2 |
3 | 我们已经知道,影响区块链扩展性的主要原因是每笔交易都要在所有节点上达成一致,也就是说每个节点都需要对交易数据进行验证和存储,这就直接影响到了区块链的扩展性。
4 |
5 | 目前,提高区块链扩展性的商业解决方案有共识机制创新、区块扩容、有向无环图(DAG)、分片(sharding)、跨链、闪电网络等。共识机制是影响区块链扩展性的核心因素,交易存储方式(区块扩容、有向无环图、分片)是影响区块链扩展性的基础条件,而跨链是提高区块链扩展性的终极手段。
6 |
7 | 共识机制创新的方向是在保证安全的前提下减少节点的参与数量。区块扩容、有向无环图是对区块链数据结构进行改良和升级,其中区块扩容是直接增加区块链的交易处理量,而有向无环图使用了与链状数据结构完全不同的图状数据结构,分片借鉴了现代数据库的分片思想。跨链是区块链向外拓展和连接的桥梁,使得区块链不同链之间可以安全通讯,让区块链大规模商业应用成为可能。
8 |
9 |
--------------------------------------------------------------------------------
/chapter8_03 blockchain_technology_trend.md:
--------------------------------------------------------------------------------
1 | ## 区块链的发展趋势
2 |
3 | ### 智能合约
4 | 智能合约给区块链带来了新的生机,但由于智能合约是运行在沙盒(sandbox)机制里(以太坊智能合约运行在EVM中,EOS智能合约运行在WASM中),无法从现实世界获取数据。因此,怎样将现实世界与区块链链接起来是影响智能合约技术发展的一个重要瓶颈。
5 |
6 | 传统编程中,业务逻辑是可以非常方便地调用外部数据,但在以太坊、EOS上等公链上进行智能合约开发,合约只能调用链上的内部数据,无法与外部系统进行直接交互。
7 |
8 | 预言机是用来连接现实世界与区块链世界,是区块链应用的大规模应用的的一个桥梁。
9 |
10 | 智能合约本身就是一段运行在区块链上的代码,因此存在bug在所难免。与传统软件不一样的是,公链天然与钱有关系,因此特别容易受到全世界黑客的“关照”。
11 |
12 | 要保证智能合约的安全除了加强代码开发规范,进行严格测试之外,由专业的安全厂商进行智能合约审计是区块链行业不可或缺的一个重要环节。
13 |
14 | ### 区块链隐私保护
15 | 由于区块链账务公开的特点,通过区块链浏览器可以非常方便地查询账户相关交易信息。随着区块链的商业价值被不断发现,隐私保护逐渐成为区块链行业重点研究对象。
16 |
17 | 这就如同早期的互联网网站,使用的都是HTTP协议,之后为了电子商务等业务需要引入了HTTPS协议。
18 |
19 | 区块链隐私保护的研究目前主要集中在数字货币和智能合约两个领域。
20 |
21 | 目前最受关注的隐私保护方案是零知识证明机制。
22 |
23 | 零知识证明的研究始于1985年Shafi Goldwasser 等人的论文《The Knowledge Complexity of Interactive Proof-Systems 》,目前一般认为至少要满足三个条件:
24 |
25 | * 完整性( Completeness ):真实的证明可以让验证者成功验证;
26 | * 可靠性( Soundness ):虚假的证明无法让验证者通过验证,但允许存在小概率例外;
27 | * 零知识( Zero-Knowledge ):如果被证明,但无法从证明过程中获取除证明信息之外的任何信息。
28 |
29 | 零知识证明的本质在于通过简单的披露可以证明某个信息的占有,挑战也是在不披露信息本身或任何额外信息的情况下证明这种占有。
30 |
31 | 如果验证语句要求验证者拥有一些秘密信息,那么验证者将无法在不拥有秘密信息的情况下向其他人证明该语句。
32 |
33 | 被证明的陈述必须包括证明者拥有这种知识的断言,但不包括知识本身。否则,该语句将不能称为零知识证明,因为它在协议结束时为验证者提供了关于该语句的附加信息。
34 |
35 | ### 法律法规有待完善
36 |
37 | 法律法规一般都会滞后于社会发展。一项技术初期,使用严格的法律、法规来约束,一定程度上会抑制技术创新的活力。比如现在互联网领域的共享经济,政府采用的是“让子弹飞一会儿”的策略,等技术成熟后再出台相关政策、法规来进行规范。
38 |
39 | 区块链现在还处于早期,同时区块链又具有去中心化、自治的特点,因此区块链在技术治理、监管和标准制定方面都存在很多问题,主要体现在以下两个方面:
40 |
41 | 1. 法律主体不明确
42 |
43 | 区块链系统中,由于系统维护和治理采用了分散化的治理结构,导致不存在一个明确的主体为整个系统承担责任,缺乏中心化的法律实体,使得法律法规在事后难以对区块链项目进行监管。
44 |
45 | 传统的事前监管和中心化的监管会导致徒劳无功的现象。中国人民大学金融科技与互联网安全研究中心主任、大数据区块链与监管实验室主任杨东在《区块链+监管=法链(RegChain)》一书中提出,需要通过监管科技(Regtech)进行更有效地监管,让区块链技术为监管所用。他强调,“以链治链”,通过区块链技术加强监管是区块链技术一个非常重要的应用场景,“政府需要通过技术手段来改变监管方式,提高监管效率,降低监管成本,提升自身的服务能力,基于区块链的规制系统将有助于提高监管的有效性,‘区块链+监管’,即‘法链(RegChain)’是未来监管的新方向。”
46 |
47 | 2. 链上规则不明确
48 | 区块链智能合约虽然被称为“代码即法律”(Code is Law),但实际却是一种乌托邦的梦想。
49 |
50 | “代码即法律”不是区块链才有的,这种思想(包括去中心化)诞生于互联网早期,由网络工程师蒂姆·伯纳斯·李提出。但现实是互联网已经彻底中心化了,互联网巨头已经成为新的中心。当“代码即法律”这个古老的思想再次复活的时候,我们需要清楚法律与代码的区别。
51 |
52 | 法律是一个非常复杂的体系,涉及到历史、政治、经济、技术、文化等各种因素,通常需要一整套完整的制度来实施,同时法律也并不像大家想象的那样是一条条冰冷的法条,法律是讲法理的。
53 |
54 | 代码是有限制的,这种限制是由区块链系统的安全性和稳定性决定的。由于区块链技术规则不明确,会引发智能合约漏洞、Token合规性和隐私保护等问题。不管理想主义者怎样吹嘘,我们需要面对的事实是代码不是法律,代码只能作为法律的辅助手段,但无法替代法律本身。
55 |
56 | 2015 年 2 月,《经济学人》在《信任机器:区块链的承诺》这篇著名文章中警告:
57 |
58 | > “在早期阶段,拟定区块链监管法将是一个错误。”然而,时过境迁,在区块链甚嚣尘上的中国,监管出场可能并非坏事,但问题是监管将以何种形式出场?对此,《经济学人》的警告依然有效——不能僵化、不能冒险。
59 |
60 |
--------------------------------------------------------------------------------
/chapter8_04 summary.md:
--------------------------------------------------------------------------------
1 | ## 区块链技术发展趋势知识总结
2 |
3 | 区块链的可扩展性、智能合约安全、隐私保护和监管是区块链现阶段主要面临的挑战,同时也是极客和各领域专家最为痴迷的地方。问题中往往潜藏着机会。把握区块链发展趋势,在问题中寻找机会,才能抓住区块链世界里的机会。
4 |
5 | 希望大家通过本教程的学习能够掌握区块链实施技能,进而在区块链世界里找到属于自己的机会。
6 |
7 | 大家在学习过程中如果遇到任何问题,欢迎一起讨论,一起进步。
8 |
9 | 微信:253841918
10 | mail: 253841918@qq.com
--------------------------------------------------------------------------------
/chapter9_00.md:
--------------------------------------------------------------------------------
1 | # 课程总结
2 |
3 | 本课程涉及理论、开发、运维相关知识,学完这个课程大家初步具备了全栈区块链工程师所具备的能力。
4 |
5 | 你可以根据自己的兴趣,选择以下方向继续深入学习:
6 | ## 方案设计
7 |
8 | 方案设计是设计中的重要阶段,它是一个极富有创造性的设计阶段,同时也是一个十分复杂的问题,它涉及到设计者的知识水平、经验、灵感和想象力等。
9 |
10 | 方案是一个项目开端,只有方案评审通过,后续的工作才能正常开展,所以方案非常重要。如果你长期从事售前相关工作,可以将重点放在方案设计上。
11 |
12 | 本教程与方案编写相关的章节如下:
13 |
14 | * [区块链技术理论](./chapter1_00.md)
15 | * [Hyperledger Fabric 架构详解](./chapter3_00.md)
16 |
17 | ## 架构设计
18 |
19 | 架构设计是将客户的需求转换为规范的开发计划及文本,并制定这个项目的总体架构,指导整个开发团队完成这个计划。
20 |
21 | 架构设计是软件设计过程的早期阶段,它把需求分析和设计流程连接在一起。架构师的主要任务不是从事具体的软件程序的编写,而是从事更高层次的开发构架工作。他必须对开发技术非常了解,并且需要有良好的组织管理能力。可以这样说,一个架构师工作的好坏决定了整个软件开发项目的成败。
22 |
23 | 本教程与架构设计相关的章节如下:
24 | * [区块链技术理论](./chapter1_00.md)
25 | * [Hyperledger Fabric 架构详解](./chapter3_00.md)
26 | * [区块链溯源案例分析](./chapter6_00.md)
27 | * [区块链即服务](./chapter7_00.md)
28 | * [区块链技术发展趋势](./chapter8_00.md)
29 |
30 | ## 系统开发
31 | 系统开发是根据架构设计实现软件的过程。
32 |
33 | 本教程与系统开发相关的章节如下:
34 | * [区块链技术理论](./chapter1_00.md)
35 | * [区块链开发实战预备知识](./chapter2_00.md)
36 | * [Hyperledger Fabric 架构详解](./chapter3_00.md)
37 | * [区块链溯源案例分析](./chapter6_00.md)
38 |
39 | ## 系统运维
40 | 系统运维主要是负责Fabric网络搭建、合约部署、应用部署以及后续的升级工作。
41 |
42 | 本教程与系统运维相关的章节如下:
43 | * [区块链技术理论](./chapter1_00.md)
44 | * [Hyperledger Fabric 架构详解](./chapter3_00.md)
45 | * [Fabric网络搭建详解](./chapter4_00.md)
46 |
47 | ## 后续学习建议
48 | 从学习角度来说,这里推荐大家可以花点时间参加一下官方的[CHFA证书](https://training.linuxfoundation.org/training/hyperledger-fabric-administration-lfs272/)。
49 |
50 |
51 |
52 |
53 | 
54 |
55 | 9-01 CHFA认证
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/pic/Hyperledger_fabirc_tuna_application.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/Hyperledger_fabirc_tuna_application.png
--------------------------------------------------------------------------------
/pic/alipay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/alipay.png
--------------------------------------------------------------------------------
/pic/aliyun_mirrors.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/aliyun_mirrors.png
--------------------------------------------------------------------------------
/pic/auto/image053.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image053.jpg
--------------------------------------------------------------------------------
/pic/auto/image054.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image054.jpg
--------------------------------------------------------------------------------
/pic/auto/image055.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image055.jpg
--------------------------------------------------------------------------------
/pic/auto/image056.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image056.jpg
--------------------------------------------------------------------------------
/pic/auto/image057.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image057.jpg
--------------------------------------------------------------------------------
/pic/auto/image058.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image058.jpg
--------------------------------------------------------------------------------
/pic/auto/image059.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image059.jpg
--------------------------------------------------------------------------------
/pic/auto/image060.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image060.jpg
--------------------------------------------------------------------------------
/pic/auto/image061.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image061.jpg
--------------------------------------------------------------------------------
/pic/auto/image062.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image062.jpg
--------------------------------------------------------------------------------
/pic/auto/image063.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image063.jpg
--------------------------------------------------------------------------------
/pic/auto/image064.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image064.jpg
--------------------------------------------------------------------------------
/pic/auto/image065.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image065.jpg
--------------------------------------------------------------------------------
/pic/auto/image066.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image066.jpg
--------------------------------------------------------------------------------
/pic/auto/image067.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image067.jpg
--------------------------------------------------------------------------------
/pic/auto/image068.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image068.jpg
--------------------------------------------------------------------------------
/pic/auto/image069.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image069.jpg
--------------------------------------------------------------------------------
/pic/auto/image070.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image070.jpg
--------------------------------------------------------------------------------
/pic/auto/image071.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image071.jpg
--------------------------------------------------------------------------------
/pic/auto/image072.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image072.jpg
--------------------------------------------------------------------------------
/pic/auto/image073.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image073.jpg
--------------------------------------------------------------------------------
/pic/auto/image074.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image074.jpg
--------------------------------------------------------------------------------
/pic/auto/image075.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image075.jpg
--------------------------------------------------------------------------------
/pic/auto/image076.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image076.jpg
--------------------------------------------------------------------------------
/pic/auto/image077.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image077.jpg
--------------------------------------------------------------------------------
/pic/auto/image078.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image078.jpg
--------------------------------------------------------------------------------
/pic/auto/image079.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image079.jpg
--------------------------------------------------------------------------------
/pic/auto/image080.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image080.jpg
--------------------------------------------------------------------------------
/pic/auto/image081.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image081.jpg
--------------------------------------------------------------------------------
/pic/auto/image082.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image082.jpg
--------------------------------------------------------------------------------
/pic/auto/image083.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image083.jpg
--------------------------------------------------------------------------------
/pic/auto/image084.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image084.jpg
--------------------------------------------------------------------------------
/pic/auto/image085.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image085.jpg
--------------------------------------------------------------------------------
/pic/auto/image086.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image086.jpg
--------------------------------------------------------------------------------
/pic/auto/image087.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image087.jpg
--------------------------------------------------------------------------------
/pic/auto/image088.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image088.jpg
--------------------------------------------------------------------------------
/pic/auto/image089.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image089.jpg
--------------------------------------------------------------------------------
/pic/auto/image090.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image090.jpg
--------------------------------------------------------------------------------
/pic/auto/image091.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image091.jpg
--------------------------------------------------------------------------------
/pic/auto/image092.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image092.jpg
--------------------------------------------------------------------------------
/pic/auto/image093.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image093.jpg
--------------------------------------------------------------------------------
/pic/auto/image094.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image094.jpg
--------------------------------------------------------------------------------
/pic/auto/image095.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image095.jpg
--------------------------------------------------------------------------------
/pic/auto/image096.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image096.jpg
--------------------------------------------------------------------------------
/pic/auto/image097.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image097.jpg
--------------------------------------------------------------------------------
/pic/auto/image098.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image098.jpg
--------------------------------------------------------------------------------
/pic/auto/image099.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image099.jpg
--------------------------------------------------------------------------------
/pic/auto/image100.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image100.jpg
--------------------------------------------------------------------------------
/pic/auto/image101.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image101.jpg
--------------------------------------------------------------------------------
/pic/auto/image102.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image102.jpg
--------------------------------------------------------------------------------
/pic/auto/image103.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image103.png
--------------------------------------------------------------------------------
/pic/auto/image104.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image104.jpg
--------------------------------------------------------------------------------
/pic/auto/image105.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image105.jpg
--------------------------------------------------------------------------------
/pic/auto/image106.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image106.jpg
--------------------------------------------------------------------------------
/pic/auto/image107.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image107.jpg
--------------------------------------------------------------------------------
/pic/auto/image108.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image108.jpg
--------------------------------------------------------------------------------
/pic/auto/image109.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image109.jpg
--------------------------------------------------------------------------------
/pic/auto/image110.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image110.jpg
--------------------------------------------------------------------------------
/pic/auto/image111.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image111.jpg
--------------------------------------------------------------------------------
/pic/auto/image112.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image112.jpg
--------------------------------------------------------------------------------
/pic/auto/image113.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image113.png
--------------------------------------------------------------------------------
/pic/auto/image114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image114.png
--------------------------------------------------------------------------------
/pic/auto/image115.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image115.jpg
--------------------------------------------------------------------------------
/pic/auto/image116.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image116.png
--------------------------------------------------------------------------------
/pic/auto/image117.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image117.jpg
--------------------------------------------------------------------------------
/pic/auto/image118.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image118.jpg
--------------------------------------------------------------------------------
/pic/auto/image119.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image119.jpg
--------------------------------------------------------------------------------
/pic/auto/image120.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image120.jpg
--------------------------------------------------------------------------------
/pic/auto/image121.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image121.jpg
--------------------------------------------------------------------------------
/pic/auto/image122.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image122.jpg
--------------------------------------------------------------------------------
/pic/auto/image123.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image123.jpg
--------------------------------------------------------------------------------
/pic/auto/image124.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image124.jpg
--------------------------------------------------------------------------------
/pic/auto/image125.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image125.jpg
--------------------------------------------------------------------------------
/pic/auto/image126.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image126.jpg
--------------------------------------------------------------------------------
/pic/auto/image127.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image127.jpg
--------------------------------------------------------------------------------
/pic/auto/image128.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image128.jpg
--------------------------------------------------------------------------------
/pic/auto/image129.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image129.jpg
--------------------------------------------------------------------------------
/pic/auto/image130.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image130.jpg
--------------------------------------------------------------------------------
/pic/auto/image131.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image131.jpg
--------------------------------------------------------------------------------
/pic/auto/image132.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image132.png
--------------------------------------------------------------------------------
/pic/auto/image133.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/auto/image133.jpg
--------------------------------------------------------------------------------
/pic/bitcoin_paper.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/bitcoin_paper.png
--------------------------------------------------------------------------------
/pic/bitcoin_peers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/bitcoin_peers.png
--------------------------------------------------------------------------------
/pic/bitcoin_transaction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/bitcoin_transaction.png
--------------------------------------------------------------------------------
/pic/blockchain_application_principle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/blockchain_application_principle.png
--------------------------------------------------------------------------------
/pic/book.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/book.jpg
--------------------------------------------------------------------------------
/pic/book_and_project.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/book_and_project.png
--------------------------------------------------------------------------------
/pic/bring_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/bring_up.png
--------------------------------------------------------------------------------
/pic/byfn_sh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/byfn_sh.png
--------------------------------------------------------------------------------
/pic/configure_file.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/configure_file.png
--------------------------------------------------------------------------------
/pic/cover/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/cover/1.png
--------------------------------------------------------------------------------
/pic/cover/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/cover/2.png
--------------------------------------------------------------------------------
/pic/cover/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/cover/3.png
--------------------------------------------------------------------------------
/pic/cover/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/cover/4.jpg
--------------------------------------------------------------------------------
/pic/cover/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/cover/5.png
--------------------------------------------------------------------------------
/pic/cover/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/cover/6.png
--------------------------------------------------------------------------------
/pic/cover/7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/cover/7.png
--------------------------------------------------------------------------------
/pic/distributed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/distributed.png
--------------------------------------------------------------------------------
/pic/docker_hello_world.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/docker_hello_world.png
--------------------------------------------------------------------------------
/pic/fabric_architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/fabric_architecture.png
--------------------------------------------------------------------------------
/pic/fabric_ca_diagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/fabric_ca_diagram.png
--------------------------------------------------------------------------------
/pic/fabric_docker_images.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/fabric_docker_images.png
--------------------------------------------------------------------------------
/pic/fabric_network_setup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/fabric_network_setup.png
--------------------------------------------------------------------------------
/pic/fabric_tools.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/fabric_tools.png
--------------------------------------------------------------------------------
/pic/fabric_workflow_of_transaction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/fabric_workflow_of_transaction.png
--------------------------------------------------------------------------------
/pic/hyperledger_cello.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/hyperledger_cello.png
--------------------------------------------------------------------------------
/pic/hyperledger_greenhouse.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/hyperledger_greenhouse.png
--------------------------------------------------------------------------------
/pic/hyperledger_member.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/hyperledger_member.png
--------------------------------------------------------------------------------
/pic/learn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/learn.png
--------------------------------------------------------------------------------
/pic/make_tools.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/make_tools.png
--------------------------------------------------------------------------------
/pic/payment_code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/payment_code.png
--------------------------------------------------------------------------------
/pic/project.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/project.jpg
--------------------------------------------------------------------------------
/pic/public_key_infrastructure.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/public_key_infrastructure.png
--------------------------------------------------------------------------------
/pic/qrcode.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/qrcode.jpg
--------------------------------------------------------------------------------
/pic/query_network.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/query_network.png
--------------------------------------------------------------------------------
/pic/selection_of_technology.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/selection_of_technology.png
--------------------------------------------------------------------------------
/pic/types_of_blockchain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/pic/types_of_blockchain.png
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/.env:
--------------------------------------------------------------------------------
1 | COMPOSE_PROJECT_NAME=net
2 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/README.md:
--------------------------------------------------------------------------------
1 | ## Basic Network Config
2 |
3 | Note that this basic configuration uses pre-generated certificates and
4 | key material, and also has predefined transactions to initialize a
5 | channel named "mychannel".
6 |
7 | To regenerate this material, simply run ``generate.sh``.
8 |
9 | To start the network, run ``start.sh``.
10 | To stop it, run ``stop.sh``
11 | To completely remove all incriminating evidence of the network
12 | on your system, run ``teardown.sh``.
13 |
14 | This code is written by the Hyperledger Fabric community. Original source code can be found here: (https://github.com/hyperledger/fabric-samples).
15 |
16 | ## Licenses
17 |
18 | Source code is licensed under the Apache License, Version 2.0 (the "License"). You may obtain a copy of the License at
19 |
20 | (http://www.apache.org/licenses/LICENSE-2.0)
21 |
22 |
23 | 
Documentation is licensed under a Creative Commons Attribution 4.0 International License
24 |
25 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/config/channel.tx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/src/fabric-material/basic-network/config/channel.tx
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/config/genesis.block:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/src/fabric-material/basic-network/config/genesis.block
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config.yaml:
--------------------------------------------------------------------------------
1 | # Copyright IBM Corp. All Rights Reserved.
2 | #
3 | # SPDX-License-Identifier: Apache-2.0
4 | #
5 |
6 | # ---------------------------------------------------------------------------
7 | # "OrdererOrgs" - Definition of organizations managing orderer nodes
8 | # ---------------------------------------------------------------------------
9 | OrdererOrgs:
10 | # ---------------------------------------------------------------------------
11 | # Orderer
12 | # ---------------------------------------------------------------------------
13 | - Name: Orderer
14 | Domain: example.com
15 | # ---------------------------------------------------------------------------
16 | # "Specs" - See PeerOrgs below for complete description
17 | # ---------------------------------------------------------------------------
18 | Specs:
19 | - Hostname: orderer
20 | # ---------------------------------------------------------------------------
21 | # "PeerOrgs" - Definition of organizations managing peer nodes
22 | # ---------------------------------------------------------------------------
23 | PeerOrgs:
24 | # ---------------------------------------------------------------------------
25 | # Org1
26 | # ---------------------------------------------------------------------------
27 | - Name: Org1
28 | Domain: org1.example.com
29 | # ---------------------------------------------------------------------------
30 | # "Specs"
31 | # ---------------------------------------------------------------------------
32 | # Uncomment this section to enable the explicit definition of hosts in your
33 | # configuration. Most users will want to use Template, below
34 | #
35 | # Specs is an array of Spec entries. Each Spec entry consists of two fields:
36 | # - Hostname: (Required) The desired hostname, sans the domain.
37 | # - CommonName: (Optional) Specifies the template or explicit override for
38 | # the CN. By default, this is the template:
39 | #
40 | # "{{.Hostname}}.{{.Domain}}"
41 | #
42 | # which obtains its values from the Spec.Hostname and
43 | # Org.Domain, respectively.
44 | # ---------------------------------------------------------------------------
45 | # Specs:
46 | # - Hostname: foo # implicitly "foo.org1.example.com"
47 | # CommonName: foo27.org5.example.com # overrides Hostname-based FQDN set above
48 | # - Hostname: bar
49 | # - Hostname: baz
50 | # ---------------------------------------------------------------------------
51 | # "Template"
52 | # ---------------------------------------------------------------------------
53 | # Allows for the definition of 1 or more hosts that are created sequentially
54 | # from a template. By default, this looks like "peer%d" from 0 to Count-1.
55 | # You may override the number of nodes (Count), the starting index (Start)
56 | # or the template used to construct the name (Hostname).
57 | #
58 | # Note: Template and Specs are not mutually exclusive. You may define both
59 | # sections and the aggregate nodes will be created for you. Take care with
60 | # name collisions
61 | # ---------------------------------------------------------------------------
62 | Template:
63 | Count: 1
64 | # Start: 5
65 | # Hostname: {{.Prefix}}{{.Index}} # default
66 | # ---------------------------------------------------------------------------
67 | # "Users"
68 | # ---------------------------------------------------------------------------
69 | # Count: The number of user accounts _in addition_ to Admin
70 | # ---------------------------------------------------------------------------
71 | Users:
72 | Count: 1
73 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/ca/a0606a4a860a1e31c90a23788da6f3b6b74925ed0d23061af4899409ba46ae6a_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgbIRfBJjk/t3HLnEz
3 | 32V4sCllmJtnliVv4UmLfrjZ+B6hRANCAASM01iiFoDgTsTd27nU+R1z7YZbqM4I
4 | Tlz13Mg+SQWsWn25IM6/IwtzNq5SSQZtJwpo7+gtS5IggDn7WJMi6Hy6
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICLjCCAdWgAwIBAgIQHuAANpa/kDL7CPyNttctRjAKBggqhkjOPQQDAjBpMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowaTELMAkGA1UE
6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
7 | Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv
8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIzTWKIWgOBOxN3budT5HXPthluo
9 | zghOXPXcyD5JBaxafbkgzr8jC3M2rlJJBm0nCmjv6C1LkiCAOftYkyLofLqjXzBd
10 | MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB
11 | Af8wKQYDVR0OBCIEIKBgakqGCh4xyQojeI2m87a3SSXtDSMGGvSJlAm6Rq5qMAoG
12 | CCqGSM49BAMCA0cAMEQCIGShwWIKXmf3oJY3Oow7pKA0SSe89UsRLy2HMxxNzgWx
13 | AiB097hBfmM2JEZsEZfMbEM2U7edQIDyCoPOgm5ha9wDNw==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/msp/admincerts/Admin@example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICCTCCAbCgAwIBAgIQVMXz1cejr3sGgDsXuIBK3zAKBggqhkjOPQQDAjBpMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowVjELMAkGA1UE
6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
7 | Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI
8 | zj0DAQcDQgAEFufLmRXBZHc3d7HvYSU4jR4nJnzfmJlWN6Gm0Bm+NsO8lwb1TDa4
9 | cPzAOgnbIm1VFwhBd+sE3TIzIWsM2Kzv1aNNMEswDgYDVR0PAQH/BAQDAgeAMAwG
10 | A1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgoGBqSoYKHjHJCiN4jabztrdJJe0NIwYa
11 | 9ImUCbpGrmowCgYIKoZIzj0EAwIDRwAwRAIgId+xpuBHjfWvL8aAsDbmMjXAoOYy
12 | BgazcJh446kZaDACIDeyvsH5Xwes5w5Sksv7mb6/kr4ceCy00h1Vlt5bwPiu
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/msp/cacerts/ca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICLjCCAdWgAwIBAgIQHuAANpa/kDL7CPyNttctRjAKBggqhkjOPQQDAjBpMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowaTELMAkGA1UE
6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
7 | Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv
8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIzTWKIWgOBOxN3budT5HXPthluo
9 | zghOXPXcyD5JBaxafbkgzr8jC3M2rlJJBm0nCmjv6C1LkiCAOftYkyLofLqjXzBd
10 | MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB
11 | Af8wKQYDVR0OBCIEIKBgakqGCh4xyQojeI2m87a3SSXtDSMGGvSJlAm6Rq5qMAoG
12 | CCqGSM49BAMCA0cAMEQCIGShwWIKXmf3oJY3Oow7pKA0SSe89UsRLy2HMxxNzgWx
13 | AiB097hBfmM2JEZsEZfMbEM2U7edQIDyCoPOgm5ha9wDNw==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICNTCCAdugAwIBAgIQT0WLBisbcQ6AkirTJApb1TAKBggqhkjOPQQDAjBsMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4
5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowbDELMAkG
6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu
7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt
8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGtRFSyePgHhit2JfQNn
9 | Gbda3X9Y+Eb5Ft/4L9uLsxc4zEMLt2TJZewEfO/Uoe9YH9VhFmGj/d9M0d/0HSAn
10 | K8WjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB
11 | /wQFMAMBAf8wKQYDVR0OBCIEII0hhlVshdUV5zfQwNqNDXZyeFtoXLUDvLleU9zC
12 | efunMAoGCCqGSM49BAMCA0gAMEUCIQDxLfsMRqPJuoH77vahGkE6EYMqvzjVI2Ob
13 | aV1DZJfUdwIgHuHXPvKvcoYZgAo7Xc57Uqs6hSpMs0CjzcfLXYiwoVc=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/admincerts/Admin@example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICCTCCAbCgAwIBAgIQVMXz1cejr3sGgDsXuIBK3zAKBggqhkjOPQQDAjBpMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowVjELMAkGA1UE
6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
7 | Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI
8 | zj0DAQcDQgAEFufLmRXBZHc3d7HvYSU4jR4nJnzfmJlWN6Gm0Bm+NsO8lwb1TDa4
9 | cPzAOgnbIm1VFwhBd+sE3TIzIWsM2Kzv1aNNMEswDgYDVR0PAQH/BAQDAgeAMAwG
10 | A1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgoGBqSoYKHjHJCiN4jabztrdJJe0NIwYa
11 | 9ImUCbpGrmowCgYIKoZIzj0EAwIDRwAwRAIgId+xpuBHjfWvL8aAsDbmMjXAoOYy
12 | BgazcJh446kZaDACIDeyvsH5Xwes5w5Sksv7mb6/kr4ceCy00h1Vlt5bwPiu
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICLjCCAdWgAwIBAgIQHuAANpa/kDL7CPyNttctRjAKBggqhkjOPQQDAjBpMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowaTELMAkGA1UE
6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
7 | Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv
8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIzTWKIWgOBOxN3budT5HXPthluo
9 | zghOXPXcyD5JBaxafbkgzr8jC3M2rlJJBm0nCmjv6C1LkiCAOftYkyLofLqjXzBd
10 | MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB
11 | Af8wKQYDVR0OBCIEIKBgakqGCh4xyQojeI2m87a3SSXtDSMGGvSJlAm6Rq5qMAoG
12 | CCqGSM49BAMCA0cAMEQCIGShwWIKXmf3oJY3Oow7pKA0SSe89UsRLy2HMxxNzgWx
13 | AiB097hBfmM2JEZsEZfMbEM2U7edQIDyCoPOgm5ha9wDNw==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/4d2f776c0fef8eac3f460a7c3558dc7859c4fe458e262e674a6c23f242ea33d1_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg730zOAwSLJKj9wle
3 | jbxx4d0P2Qwl314A+znW9n6070mhRANCAARQ4kbOlqzGNLkQmZsUh78a04kkCjqa
4 | EmovJhP08G9VJ1pD9NCUw2WosRmAU/rBz0K2tSn9YOdn8zbMumgM+ORy
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICDDCCAbOgAwIBAgIRAK30hdRcBxQJYNPqPkiFo3IwCgYIKoZIzj0EAwIwaTEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
5 | cGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJaMFgxCzAJBgNV
6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
7 | c2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI
8 | KoZIzj0DAQcDQgAEUOJGzpasxjS5EJmbFIe/GtOJJAo6mhJqLyYT9PBvVSdaQ/TQ
9 | lMNlqLEZgFP6wc9CtrUp/WDnZ/M2zLpoDPjkcqNNMEswDgYDVR0PAQH/BAQDAgeA
10 | MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgoGBqSoYKHjHJCiN4jabztrdJJe0N
11 | IwYa9ImUCbpGrmowCgYIKoZIzj0EAwIDRwAwRAIgHsU1f4jzuul6zYGY/Xn/H5X5
12 | gDe7/u8dZxJfWwXOGNsCICbXt6yezSzacOFQDkvAPz5/3OYI5YKLSTl+Wilfa/qy
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICNTCCAdugAwIBAgIQT0WLBisbcQ6AkirTJApb1TAKBggqhkjOPQQDAjBsMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4
5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowbDELMAkG
6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu
7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt
8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGtRFSyePgHhit2JfQNn
9 | Gbda3X9Y+Eb5Ft/4L9uLsxc4zEMLt2TJZewEfO/Uoe9YH9VhFmGj/d9M0d/0HSAn
10 | K8WjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB
11 | /wQFMAMBAf8wKQYDVR0OBCIEII0hhlVshdUV5zfQwNqNDXZyeFtoXLUDvLleU9zC
12 | efunMAoGCCqGSM49BAMCA0gAMEUCIQDxLfsMRqPJuoH77vahGkE6EYMqvzjVI2Ob
13 | aV1DZJfUdwIgHuHXPvKvcoYZgAo7Xc57Uqs6hSpMs0CjzcfLXYiwoVc=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICNTCCAdugAwIBAgIQT0WLBisbcQ6AkirTJApb1TAKBggqhkjOPQQDAjBsMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4
5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowbDELMAkG
6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu
7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt
8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGtRFSyePgHhit2JfQNn
9 | Gbda3X9Y+Eb5Ft/4L9uLsxc4zEMLt2TJZewEfO/Uoe9YH9VhFmGj/d9M0d/0HSAn
10 | K8WjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB
11 | /wQFMAMBAf8wKQYDVR0OBCIEII0hhlVshdUV5zfQwNqNDXZyeFtoXLUDvLleU9zC
12 | efunMAoGCCqGSM49BAMCA0gAMEUCIQDxLfsMRqPJuoH77vahGkE6EYMqvzjVI2Ob
13 | aV1DZJfUdwIgHuHXPvKvcoYZgAo7Xc57Uqs6hSpMs0CjzcfLXYiwoVc=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICWTCCAf+gAwIBAgIQLwiilHvhB1gOg5eGs5O9YDAKBggqhkjOPQQDAjBsMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4
5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowWDELMAkG
6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu
7 | Y2lzY28xHDAaBgNVBAMTE29yZGVyZXIuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIB
8 | BggqhkjOPQMBBwNCAARYRRq90z+ioUM2U9OzPnvqvz9Jpza9JOEsG6UJyEzWB8R7
9 | bHr0XR1Dl8lodlLh3C5vTrb6vqtpNeVXVsd+VVyIo4GWMIGTMA4GA1UdDwEB/wQE
10 | AwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIw
11 | ADArBgNVHSMEJDAigCCNIYZVbIXVFec30MDajQ12cnhbaFy1A7y5XlPcwnn7pzAn
12 | BgNVHREEIDAeghNvcmRlcmVyLmV4YW1wbGUuY29tggdvcmRlcmVyMAoGCCqGSM49
13 | BAMCA0gAMEUCIQDwjzlscwNhuVcxF+FQy3PNwxsSRSOsQqjmFbMFNDSG6wIgfNO0
14 | Mp/QtUShzWepgh1nm8MmDNcnVOOeb4JJy6Gd3Ss=
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgH/whD1mna09pbmG6
3 | txGQVIYDx1pZdM/Bkaq1eWYUZqChRANCAARYRRq90z+ioUM2U9OzPnvqvz9Jpza9
4 | JOEsG6UJyEzWB8R7bHr0XR1Dl8lodlLh3C5vTrb6vqtpNeVXVsd+VVyI
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/tlsca/8d2186556c85d515e737d0c0da8d0d7672785b685cb503bcb95e53dcc279fba7_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg6n+vdmDFdoXHLx81
3 | 4KX5d2rChT+6peumwVy6CK6Vld6hRANCAARrURUsnj4B4YrdiX0DZxm3Wt1/WPhG
4 | +Rbf+C/bi7MXOMxDC7dkyWXsBHzv1KHvWB/VYRZho/3fTNHf9B0gJyvF
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICNTCCAdugAwIBAgIQT0WLBisbcQ6AkirTJApb1TAKBggqhkjOPQQDAjBsMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4
5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowbDELMAkG
6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu
7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt
8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGtRFSyePgHhit2JfQNn
9 | Gbda3X9Y+Eb5Ft/4L9uLsxc4zEMLt2TJZewEfO/Uoe9YH9VhFmGj/d9M0d/0HSAn
10 | K8WjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB
11 | /wQFMAMBAf8wKQYDVR0OBCIEII0hhlVshdUV5zfQwNqNDXZyeFtoXLUDvLleU9zC
12 | efunMAoGCCqGSM49BAMCA0gAMEUCIQDxLfsMRqPJuoH77vahGkE6EYMqvzjVI2Ob
13 | aV1DZJfUdwIgHuHXPvKvcoYZgAo7Xc57Uqs6hSpMs0CjzcfLXYiwoVc=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/admincerts/Admin@example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICCTCCAbCgAwIBAgIQVMXz1cejr3sGgDsXuIBK3zAKBggqhkjOPQQDAjBpMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowVjELMAkGA1UE
6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
7 | Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI
8 | zj0DAQcDQgAEFufLmRXBZHc3d7HvYSU4jR4nJnzfmJlWN6Gm0Bm+NsO8lwb1TDa4
9 | cPzAOgnbIm1VFwhBd+sE3TIzIWsM2Kzv1aNNMEswDgYDVR0PAQH/BAQDAgeAMAwG
10 | A1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgoGBqSoYKHjHJCiN4jabztrdJJe0NIwYa
11 | 9ImUCbpGrmowCgYIKoZIzj0EAwIDRwAwRAIgId+xpuBHjfWvL8aAsDbmMjXAoOYy
12 | BgazcJh446kZaDACIDeyvsH5Xwes5w5Sksv7mb6/kr4ceCy00h1Vlt5bwPiu
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/cacerts/ca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICLjCCAdWgAwIBAgIQHuAANpa/kDL7CPyNttctRjAKBggqhkjOPQQDAjBpMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowaTELMAkGA1UE
6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
7 | Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv
8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIzTWKIWgOBOxN3budT5HXPthluo
9 | zghOXPXcyD5JBaxafbkgzr8jC3M2rlJJBm0nCmjv6C1LkiCAOftYkyLofLqjXzBd
10 | MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB
11 | Af8wKQYDVR0OBCIEIKBgakqGCh4xyQojeI2m87a3SSXtDSMGGvSJlAm6Rq5qMAoG
12 | CCqGSM49BAMCA0cAMEQCIGShwWIKXmf3oJY3Oow7pKA0SSe89UsRLy2HMxxNzgWx
13 | AiB097hBfmM2JEZsEZfMbEM2U7edQIDyCoPOgm5ha9wDNw==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/1deeab5433fa6e5f045eb763109d6165268fba153211af1281f00d45f54b1022_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgAKUK8aZ5PJMhPpx4
3 | 7mMQoJaha/3jhprXOSxj83ibaYShRANCAAQW58uZFcFkdzd3se9hJTiNHicmfN+Y
4 | mVY3oabQGb42w7yXBvVMNrhw/MA6CdsibVUXCEF36wTdMjMhawzYrO/V
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICCTCCAbCgAwIBAgIQVMXz1cejr3sGgDsXuIBK3zAKBggqhkjOPQQDAjBpMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
5 | bGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowVjELMAkGA1UE
6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
7 | Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI
8 | zj0DAQcDQgAEFufLmRXBZHc3d7HvYSU4jR4nJnzfmJlWN6Gm0Bm+NsO8lwb1TDa4
9 | cPzAOgnbIm1VFwhBd+sE3TIzIWsM2Kzv1aNNMEswDgYDVR0PAQH/BAQDAgeAMAwG
10 | A1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgoGBqSoYKHjHJCiN4jabztrdJJe0NIwYa
11 | 9ImUCbpGrmowCgYIKoZIzj0EAwIDRwAwRAIgId+xpuBHjfWvL8aAsDbmMjXAoOYy
12 | BgazcJh446kZaDACIDeyvsH5Xwes5w5Sksv7mb6/kr4ceCy00h1Vlt5bwPiu
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/tlscacerts/tlsca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICNTCCAdugAwIBAgIQT0WLBisbcQ6AkirTJApb1TAKBggqhkjOPQQDAjBsMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4
5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowbDELMAkG
6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu
7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt
8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGtRFSyePgHhit2JfQNn
9 | Gbda3X9Y+Eb5Ft/4L9uLsxc4zEMLt2TJZewEfO/Uoe9YH9VhFmGj/d9M0d/0HSAn
10 | K8WjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB
11 | /wQFMAMBAf8wKQYDVR0OBCIEII0hhlVshdUV5zfQwNqNDXZyeFtoXLUDvLleU9zC
12 | efunMAoGCCqGSM49BAMCA0gAMEUCIQDxLfsMRqPJuoH77vahGkE6EYMqvzjVI2Ob
13 | aV1DZJfUdwIgHuHXPvKvcoYZgAo7Xc57Uqs6hSpMs0CjzcfLXYiwoVc=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICNTCCAdugAwIBAgIQT0WLBisbcQ6AkirTJApb1TAKBggqhkjOPQQDAjBsMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4
5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowbDELMAkG
6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu
7 | Y2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5leGFt
8 | cGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGtRFSyePgHhit2JfQNn
9 | Gbda3X9Y+Eb5Ft/4L9uLsxc4zEMLt2TJZewEfO/Uoe9YH9VhFmGj/d9M0d/0HSAn
10 | K8WjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB
11 | /wQFMAMBAf8wKQYDVR0OBCIEII0hhlVshdUV5zfQwNqNDXZyeFtoXLUDvLleU9zC
12 | efunMAoGCCqGSM49BAMCA0gAMEUCIQDxLfsMRqPJuoH77vahGkE6EYMqvzjVI2Ob
13 | aV1DZJfUdwIgHuHXPvKvcoYZgAo7Xc57Uqs6hSpMs0CjzcfLXYiwoVc=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKzCCAdKgAwIBAgIQHYv3zMnbbON0eufj3s78FTAKBggqhkjOPQQDAjBsMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xGjAYBgNVBAMTEXRsc2NhLmV4
5 | YW1wbGUuY29tMB4XDTE3MDgzMTA5MTQzMloXDTI3MDgyOTA5MTQzMlowVjELMAkG
6 | A1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFu
7 | Y2lzY28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI
8 | KoZIzj0DAQcDQgAEZsLfeA+tjHJJOyxhJOP31uDluC6eCnMBq0LKawBugaoI3vqh
9 | T8ux5ty+ooSJk7EN3pTQa10m0qX/Y7e0J79JL6NsMGowDgYDVR0PAQH/BAQDAgWg
10 | MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMCsG
11 | A1UdIwQkMCKAII0hhlVshdUV5zfQwNqNDXZyeFtoXLUDvLleU9zCefunMAoGCCqG
12 | SM49BAMCA0cAMEQCIEcK5iAxpGN1wtC5w+590RJrLzD7DOzVCUIxAdJp80BUAiA/
13 | XMFE+lHMJmqeoqmXG14Z/70xmHChlyHxm6lFR2I6gw==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg19ebRLtFBB+n9OCa
3 | KcXLds/nf306mSDnnrA7tlZVjaOhRANCAARmwt94D62Mckk7LGEk4/fW4OW4Lp4K
4 | cwGrQsprAG6Bqgje+qFPy7Hm3L6ihImTsQ3elNBrXSbSpf9jt7Qnv0kv
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/ca/4239aa0dcd76daeeb8ba0cda701851d14504d31aad1b2ddddbac6a57365e497c_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgYMqNZRu/I7vdcjpm
3 | Tj+O9T4AYXi3MBNW4nzWHJN8nLqhRANCAATNLYBI3trLI/wFhYf+9MpnVb1R/vBF
4 | rbu/43J+R8u4E73sCcx0nRfYCA+dHf22ceuSjq3lMXraorVev5tg4Dc7
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICRDCCAeqgAwIBAgIRAIk/1HQ6XgI0p64PQwvUA3owCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkxNDMy
6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE
8 | AxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
9 | BM0tgEje2ssj/AWFh/70ymdVvVH+8EWtu7/jcn5Hy7gTvewJzHSdF9gID50d/bZx
10 | 65KOreUxetqitV6/m2DgNzujXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIEI5qg3NdtruuLoM2nAY
12 | UdFFBNMarRst3dusalc2Xkl8MAoGCCqGSM49BAMCA0gAMEUCIQDufxsHbxkSP/y+
13 | oM2xZGgHL5XSTJVBqBryk1rd08Af6QIgLiAwtR7iKRbf1pKKCkt66MZzItZXC0po
14 | /45uf29T/sc=
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/ca/org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICFzCCAb2gAwIBAgIUJsxqPH1Ife3FDELYpl8B0cjrMmMwCgYIKoZIzj0EAwIw
3 | aDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQK
4 | EwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRkwFwYDVQQDExBmYWJyaWMt
5 | Y2Etc2VydmVyMB4XDTE3MTAxOTA2MjkwMFoXDTMyMTAxNTA2MjkwMFowaDELMAkG
6 | A1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQKEwtIeXBl
7 | cmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRkwFwYDVQQDExBmYWJyaWMtY2Etc2Vy
8 | dmVyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoIQafHjU13n4UK1zfoGvoWAk
9 | CwuJTy+3wsd/9jqITt1zfpB4+nwvpHI1LDV/3kBxYVT05MYU4oMJXhN/TS7EaqNF
10 | MEMwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0OBBYE
11 | FEQdQDuczTptIU31AeZIQne2u2t1MAoGCCqGSM49BAMCA0gAMEUCIQDmvb8MME5u
12 | rcyypylH5+YN9LZANGaRPFjWAWXYmxjAjAIgPT68SDRuWBR9V/uG+JMxpEUPt+Gi
13 | NBw8LSQw6ijIlRk=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICGDCCAb+gAwIBAgIQFSxnLAGsu04zrFkAEwzn6zAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJa
6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw
8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEV1dfmKxsFKWo7o6DNBIaIVebCCPAM9C/
9 | sLBt4pJRre9pWE987DjXZoZ3glc4+DoPMtTmBRqbPVwYcUvpbYY8p6NNMEswDgYD
10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgQjmqDc122u64
11 | ugzacBhR0UUE0xqtGy3d26xqVzZeSXwwCgYIKoZIzj0EAwIDRwAwRAIgXMy26AEU
12 | /GUMPfCMs/nQjQME1ZxBHAYZtKEuRR361JsCIEg9BOZdIoioRivJC+ZUzvJUnkXu
13 | o2HkWiuxLsibGxtE
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICRDCCAeqgAwIBAgIRAIk/1HQ6XgI0p64PQwvUA3owCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkxNDMy
6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE
8 | AxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
9 | BM0tgEje2ssj/AWFh/70ymdVvVH+8EWtu7/jcn5Hy7gTvewJzHSdF9gID50d/bZx
10 | 65KOreUxetqitV6/m2DgNzujXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIEI5qg3NdtruuLoM2nAY
12 | UdFFBNMarRst3dusalc2Xkl8MAoGCCqGSM49BAMCA0gAMEUCIQDufxsHbxkSP/y+
13 | oM2xZGgHL5XSTJVBqBryk1rd08Af6QIgLiAwtR7iKRbf1pKKCkt66MZzItZXC0po
14 | /45uf29T/sc=
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx
6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz
10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C
12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj
13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x
14 | 0ClsWNgEp49nBBsecw==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICGDCCAb+gAwIBAgIQFSxnLAGsu04zrFkAEwzn6zAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJa
6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw
8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEV1dfmKxsFKWo7o6DNBIaIVebCCPAM9C/
9 | sLBt4pJRre9pWE987DjXZoZ3glc4+DoPMtTmBRqbPVwYcUvpbYY8p6NNMEswDgYD
10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgQjmqDc122u64
11 | ugzacBhR0UUE0xqtGy3d26xqVzZeSXwwCgYIKoZIzj0EAwIDRwAwRAIgXMy26AEU
12 | /GUMPfCMs/nQjQME1ZxBHAYZtKEuRR361JsCIEg9BOZdIoioRivJC+ZUzvJUnkXu
13 | o2HkWiuxLsibGxtE
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICRDCCAeqgAwIBAgIRAIk/1HQ6XgI0p64PQwvUA3owCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkxNDMy
6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE
8 | AxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
9 | BM0tgEje2ssj/AWFh/70ymdVvVH+8EWtu7/jcn5Hy7gTvewJzHSdF9gID50d/bZx
10 | 65KOreUxetqitV6/m2DgNzujXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIEI5qg3NdtruuLoM2nAY
12 | UdFFBNMarRst3dusalc2Xkl8MAoGCCqGSM49BAMCA0gAMEUCIQDufxsHbxkSP/y+
13 | oM2xZGgHL5XSTJVBqBryk1rd08Af6QIgLiAwtR7iKRbf1pKKCkt66MZzItZXC0po
14 | /45uf29T/sc=
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/46be1d569fe68f33e517c9e0072a0ccfbfb42727480fb8c8d0223af321a7893d_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg46tw2jZtucld26uq
3 | RQAPPB1+y8BilJU2luj/OsMinWahRANCAAR4ocVupLNwdvuV3WwFatwgYMUUUWdt
4 | sc86apw/OpypM+3wRJQboZV5diuq08cmNjgTgdLbPJHqmfd8bnkRspq2
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/signcerts/peer0.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICGjCCAcCgAwIBAgIRAPlwF/rUZUP9mqN4wSml4iswCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkxNDMy
6 | WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMS5leGFtcGxlLmNvbTBZ
8 | MBMGByqGSM49AgEGCCqGSM49AwEHA0IABHihxW6ks3B2+5XdbAVq3CBgxRRRZ22x
9 | zzpqnD86nKkz7fBElBuhlXl2K6rTxyY2OBOB0ts8keqZ93xueRGymrajTTBLMA4G
10 | A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIEI5qg3Ndtru
11 | uLoM2nAYUdFFBNMarRst3dusalc2Xkl8MAoGCCqGSM49BAMCA0gAMEUCIQD4j0Rn
12 | e1rrd0FSCzsR6u+IuuPK5dI/kR/bh7+VLf0TNgIgCfUtkJvfvzVEwZLFoFyjoHtr
13 | tvwzNUS1U0hEqIaDeo4=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx
6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz
10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C
12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj
13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x
14 | 0ClsWNgEp49nBBsecw==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx
6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz
10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C
12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj
13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x
14 | 0ClsWNgEp49nBBsecw==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICZjCCAg2gAwIBAgIQenbZk7+46tsIJy8JAgySaDAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0
6 | MzJaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMC5vcmcxLmV4YW1wbGUuY29t
8 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0AZOhWRZ4aOZeLSBioClHt5VDiNT
9 | CeIxn3rVw9oCzlDDMaIZrBG1lI4o2tXOgOGSIPBmRjy736Njc54InlHlsKOBlzCB
10 | lDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC
11 | MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAg7T/YI5PpX8LEda/BE8jSxZH3RdG6
12 | vE1tnM4KGswWisswKAYDVR0RBCEwH4IWcGVlcjAub3JnMS5leGFtcGxlLmNvbYIF
13 | cGVlcjAwCgYIKoZIzj0EAwIDRwAwRAIgU9GgYioYa1Mdhhe5MHyZGXfr4G8gBxwe
14 | dqlWU/mGaPsCIGQpA0VoBrP3Neso3htfZnlWKcbrtCD29HBWmT7ImZT1
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgMvwKsTL9m2NygrLw
3 | dfrlMzyQlUaSPendFhF+2yLGaH2hRANCAATQBk6FZFnho5l4tIGKgKUe3lUOI1MJ
4 | 4jGfetXD2gLOUMMxohmsEbWUjija1c6A4ZIg8GZGPLvfo2NzngieUeWw
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/tlsca/ed3fd82393e95fc2c475afc113c8d2c591f745d1babc4d6d9cce0a1acc168acb_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgkcI0vNVNanWltD+I
3 | VHz5V1u01+X8VOG3a5ZTLRed0MmhRANCAAQH7XcNvPyU4R8q3xeEgk4x1MpH3kGd
4 | 3qksGJZAqmBdS8M2ntfKPewYs3aM/wQTI4rAKCREss1Tqxo+5xg+xM8F
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx
6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz
10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C
12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj
13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x
14 | 0ClsWNgEp49nBBsecw==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICGDCCAb+gAwIBAgIQFSxnLAGsu04zrFkAEwzn6zAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJa
6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw
8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEV1dfmKxsFKWo7o6DNBIaIVebCCPAM9C/
9 | sLBt4pJRre9pWE987DjXZoZ3glc4+DoPMtTmBRqbPVwYcUvpbYY8p6NNMEswDgYD
10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgQjmqDc122u64
11 | ugzacBhR0UUE0xqtGy3d26xqVzZeSXwwCgYIKoZIzj0EAwIDRwAwRAIgXMy26AEU
12 | /GUMPfCMs/nQjQME1ZxBHAYZtKEuRR361JsCIEg9BOZdIoioRivJC+ZUzvJUnkXu
13 | o2HkWiuxLsibGxtE
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICRDCCAeqgAwIBAgIRAIk/1HQ6XgI0p64PQwvUA3owCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkxNDMy
6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE
8 | AxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
9 | BM0tgEje2ssj/AWFh/70ymdVvVH+8EWtu7/jcn5Hy7gTvewJzHSdF9gID50d/bZx
10 | 65KOreUxetqitV6/m2DgNzujXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIEI5qg3NdtruuLoM2nAY
12 | UdFFBNMarRst3dusalc2Xkl8MAoGCCqGSM49BAMCA0gAMEUCIQDufxsHbxkSP/y+
13 | oM2xZGgHL5XSTJVBqBryk1rd08Af6QIgLiAwtR7iKRbf1pKKCkt66MZzItZXC0po
14 | /45uf29T/sc=
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/cd96d5260ad4757551ed4a5a991e62130f8008a0bf996e4e4b84cd097a747fec_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgRgQr347ij6cjwX7m
3 | KjzbbD8Tlwdfu6FaubjWJWLGyqahRANCAARXV1+YrGwUpajujoM0EhohV5sII8Az
4 | 0L+wsG3iklGt72lYT3zsONdmhneCVzj4Og8y1OYFGps9XBhxS+lthjyn
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICGDCCAb+gAwIBAgIQFSxnLAGsu04zrFkAEwzn6zAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJa
6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw
8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEV1dfmKxsFKWo7o6DNBIaIVebCCPAM9C/
9 | sLBt4pJRre9pWE987DjXZoZ3glc4+DoPMtTmBRqbPVwYcUvpbYY8p6NNMEswDgYD
10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgQjmqDc122u64
11 | ugzacBhR0UUE0xqtGy3d26xqVzZeSXwwCgYIKoZIzj0EAwIDRwAwRAIgXMy26AEU
12 | /GUMPfCMs/nQjQME1ZxBHAYZtKEuRR361JsCIEg9BOZdIoioRivJC+ZUzvJUnkXu
13 | o2HkWiuxLsibGxtE
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx
6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz
10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C
12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj
13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x
14 | 0ClsWNgEp49nBBsecw==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx
6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz
10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C
12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj
13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x
14 | 0ClsWNgEp49nBBsecw==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICOjCCAeGgAwIBAgIQZbszPe722f2AcfnwpG2ENDAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0
6 | MzJaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29t
8 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5ZfQwNA0oBGCr7zX4I/Ufq1Ht740
9 | RnkV+6VBceaG4x45bR0a0ZWeslPzmIRXOir9QvqLvnxGY3aJiadX65kNFKNsMGow
10 | DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAM
11 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIO0/2COT6V/CxHWvwRPI0sWR90XRurxN
12 | bZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIF2V2t75M9bgjQ3pktVEYnCS4u0S
13 | Izw6ZNSy8q/i6C6cAiB4V0ejzQYtp5C25F2xMD+JSlwrhBAOJNK1AkTzj9mgWg==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgqAuu2rihnWgQDlHI
3 | 7Gqyn+Bap3mMqbJ7UQLXIT6lwtmhRANCAATll9DA0DSgEYKvvNfgj9R+rUe3vjRG
4 | eRX7pUFx5objHjltHRrRlZ6yU/OYhFc6Kv1C+ou+fEZjdomJp1frmQ0U
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/admincerts/User1@org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICGTCCAb+gAwIBAgIQPyhm+v0ZIqCo6MATzLc+5jAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJa
6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZVc2VyMUBvcmcxLmV4YW1wbGUuY29tMFkw
8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEL/SomNVO3R5nnsemQ4im/UUZ8Ixs7/nH
9 | 3NH1ROfVJ+m7niDf1ZmhvTyiJzrUpI+n5+/OKIX/Z/VhDuAIR/QLLKNNMEswDgYD
10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgQjmqDc122u64
11 | ugzacBhR0UUE0xqtGy3d26xqVzZeSXwwCgYIKoZIzj0EAwIDSAAwRQIhAJk63AHS
12 | CEvJh64Yx5CnWDgDYNoj0jsi+gGheIxbUYgMAiAi/qPG7KEuuDBL4LlZRfkeatMW
13 | ZKPD7ikt+vOYgVnqlA==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICRDCCAeqgAwIBAgIRAIk/1HQ6XgI0p64PQwvUA3owCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkxNDMy
6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE
8 | AxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
9 | BM0tgEje2ssj/AWFh/70ymdVvVH+8EWtu7/jcn5Hy7gTvewJzHSdF9gID50d/bZx
10 | 65KOreUxetqitV6/m2DgNzujXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIEI5qg3NdtruuLoM2nAY
12 | UdFFBNMarRst3dusalc2Xkl8MAoGCCqGSM49BAMCA0gAMEUCIQDufxsHbxkSP/y+
13 | oM2xZGgHL5XSTJVBqBryk1rd08Af6QIgLiAwtR7iKRbf1pKKCkt66MZzItZXC0po
14 | /45uf29T/sc=
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/c75bd6911aca808941c3557ee7c97e90f3952e379497dc55eb903f31b50abc83_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgJ8IrEgxfZzjGsyt+
3 | 0o27jvhwUJE2W1PrFeZi8LwHbiuhRANCAAQv9KiY1U7dHmeex6ZDiKb9RRnwjGzv
4 | +cfc0fVE59Un6bueIN/VmaG9PKInOtSkj6fn784ohf9n9WEO4AhH9Ass
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICGTCCAb+gAwIBAgIQPyhm+v0ZIqCo6MATzLc+5jAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJa
6 | MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZVc2VyMUBvcmcxLmV4YW1wbGUuY29tMFkw
8 | EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEL/SomNVO3R5nnsemQ4im/UUZ8Ixs7/nH
9 | 3NH1ROfVJ+m7niDf1ZmhvTyiJzrUpI+n5+/OKIX/Z/VhDuAIR/QLLKNNMEswDgYD
10 | VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgQjmqDc122u64
11 | ugzacBhR0UUE0xqtGy3d26xqVzZeSXwwCgYIKoZIzj0EAwIDSAAwRQIhAJk63AHS
12 | CEvJh64Yx5CnWDgDYNoj0jsi+gGheIxbUYgMAiAi/qPG7KEuuDBL4LlZRfkeatMW
13 | ZKPD7ikt+vOYgVnqlA==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx
6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz
10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C
12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj
13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x
14 | 0ClsWNgEp49nBBsecw==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAfCgAwIBAgIRALOo7o5dtcd8yGpCqowtoIUwCgYIKoZIzj0EAwIwdjEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwODMxMDkxNDMyWhcNMjcwODI5MDkx
6 | NDMyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
7 | BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
8 | A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
9 | AwEHA0IABAftdw28/JThHyrfF4SCTjHUykfeQZ3eqSwYlkCqYF1Lwzae18o97Biz
10 | doz/BBMjisAoJESyzVOrGj7nGD7EzwWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
11 | HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIO0/2COT6V/C
12 | xHWvwRPI0sWR90XRurxNbZzOChrMForLMAoGCCqGSM49BAMCA0cAMEQCIGd4ZaLj
13 | 1R4C25obVTI/pWriqWlXXAV7h2ZQfD41nNMYAiAO858VYb4xyLUkF9XGtZJpux4x
14 | 0ClsWNgEp49nBBsecw==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICOzCCAeGgAwIBAgIQat+rcnuTNMrNDQULaEwq7zAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0
6 | MzJaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZVc2VyMUBvcmcxLmV4YW1wbGUuY29t
8 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFcqqFuh5CXSij4Ma6/tySXB9hYZn
9 | 2oFaVJWPn0JIhqj8rl9vHuNzgwoI1ZNR9fKGmrovqaZjcSg87jxh7gZSeaNsMGow
10 | DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAM
11 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIO0/2COT6V/CxHWvwRPI0sWR90XRurxN
12 | bZzOChrMForLMAoGCCqGSM49BAMCA0gAMEUCIQCWp1joCFbOhXbZ2sPW1e6gJBNG
13 | ZK+JY6Lm0bGk4vBk6QIgLQ5nzPRWHJNRaqIbigk0OLBKQtzv/Nfbsi6DnhNQoZU=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgf8ybpxd0cfNqWnfX
3 | KRoa6e/hEJGs0zMCkE+5si/xuV+hRANCAAQVyqoW6HkJdKKPgxrr+3JJcH2Fhmfa
4 | gVpUlY+fQkiGqPyuX28e43ODCgjVk1H18oaaui+ppmNxKDzuPGHuBlJ5
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/generate.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | #
3 | # Copyright IBM Corp All Rights Reserved
4 | #
5 | # SPDX-License-Identifier: Apache-2.0
6 | #
7 | export PATH=$GOPATH/src/github.com/hyperledger/fabric/build/bin:${PWD}/../bin:${PWD}:$PATH
8 | export FABRIC_CFG_PATH=${PWD}
9 | CHANNEL_NAME=mychannel
10 |
11 | # remove previous crypto material and config transactions
12 | rm -fr config/*
13 | rm -fr crypto-config/*
14 |
15 | # generate crypto material
16 | cryptogen generate --config=./crypto-config.yaml
17 | if [ "$?" -ne 0 ]; then
18 | echo "Failed to generate crypto material..."
19 | exit 1
20 | fi
21 |
22 | # generate genesis block for orderer
23 | configtxgen -profile OneOrgOrdererGenesis -outputBlock ./config/genesis.block
24 | if [ "$?" -ne 0 ]; then
25 | echo "Failed to generate orderer genesis block..."
26 | exit 1
27 | fi
28 |
29 | # generate channel configuration transaction
30 | configtxgen -profile OneOrgChannel -outputCreateChannelTx ./config/channel.tx -channelID $CHANNEL_NAME
31 | if [ "$?" -ne 0 ]; then
32 | echo "Failed to generate channel configuration transaction..."
33 | exit 1
34 | fi
35 |
36 | # generate anchor peer transaction
37 | configtxgen -profile OneOrgChannel -outputAnchorPeersUpdate ./config/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
38 | if [ "$?" -ne 0 ]; then
39 | echo "Failed to generate anchor peer update for Org1MSP..."
40 | exit 1
41 | fi
42 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/init.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # Copyright IBM Corp All Rights Reserved
4 | #
5 | # SPDX-License-Identifier: Apache-2.0
6 | #
7 |
8 | # Exit on first error, print all commands.
9 | set -ev
10 | # delete previous creds
11 | rm -rf ~/.hfc-key-store/*
12 |
13 | # copy peer admin credentials into the keyValStore
14 | mkdir -p ~/.hfc-key-store
15 | cp creds/* ~/.hfc-key-store
16 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/start.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # Copyright IBM Corp All Rights Reserved
4 | #
5 | # SPDX-License-Identifier: Apache-2.0
6 | #
7 | # Exit on first error, print all commands.
8 | set -ev
9 |
10 | # don't rewrite paths for Windows Git Bash users
11 | export MSYS_NO_PATHCONV=1
12 |
13 | docker-compose -f docker-compose.yml down
14 |
15 | docker-compose -f docker-compose.yml up -d ca.example.com orderer.example.com peer0.org1.example.com couchdb
16 |
17 | # wait for Hyperledger Fabric to start
18 | # incase of errors when running later commands, issue export FABRIC_START_TIMEOUT=
19 | export FABRIC_START_TIMEOUT=10
20 | #echo ${FABRIC_START_TIMEOUT}
21 | sleep ${FABRIC_START_TIMEOUT}
22 |
23 | # Create the channel
24 | docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1.example.com peer channel create -o orderer.example.com:7050 -c mychannel -f /etc/hyperledger/configtx/channel.tx
25 | # Join peer0.org1.example.com to the channel.
26 | docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1.example.com peer channel join -b mychannel.block
27 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/stop.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # Copyright IBM Corp All Rights Reserved
4 | #
5 | # SPDX-License-Identifier: Apache-2.0
6 | #
7 | # Exit on first error, print all commands.
8 | set -ev
9 |
10 | # Shut down the Docker containers that might be currently running.
11 | docker-compose -f docker-compose.yml stop
12 |
--------------------------------------------------------------------------------
/src/fabric-material/basic-network/teardown.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # Copyright IBM Corp All Rights Reserved
4 | #
5 | # SPDX-License-Identifier: Apache-2.0
6 | #
7 | # Exit on first error, print all commands.
8 | set -e
9 |
10 | # Shut down the Docker containers for the system tests.
11 | docker-compose -f docker-compose.yml kill && docker-compose -f docker-compose.yml down
12 |
13 | # remove the local state
14 | rm -f ~/.hfc-key-store/*
15 |
16 | # remove chaincode docker images
17 | docker rmi $(docker images dev-* -q)
18 |
19 | # Your system is now clean
20 |
--------------------------------------------------------------------------------
/src/fabric-material/chaincode/sample-chaincode.go:
--------------------------------------------------------------------------------
1 | //SPDX-License-Identifier: Apache-2.0
2 |
3 | // Import dependencies
4 | // Import the chaincode shim package and the peer protobuf package
5 |
6 | /* This code is based on code written by the Hyperledger Fabric community.
7 | Original code can be found here: https://github.com/hyperledger/fabric-samples/blob/release/chaincode/chaincode_example02/chaincode_example02.go
8 | */
9 |
10 | package main
11 |
12 | import (
13 | "fmt"
14 |
15 | "github.com/hyperledger/fabric/core/chaincode/shim"
16 | "github.com/hyperledger/fabric/protos/peer"
17 | )
18 |
19 | // SampleChaincode implements a simple chaincode to manage an asset
20 | type SampleChaincode struct {
21 |
22 | }
23 |
24 | // Init is called during chaincode instantiation to initialize
25 | // data. We'll be adding more in this function later on.
26 | func (t *SampleChaincode) Init(stub shim.ChaincodeStubInterface) peer.Response {
27 | // Get the args from the transaction proposal
28 | args := stub.GetStringArgs()
29 | if len(args) != 2 {
30 | return shim.Error("Incorrect arguments. Expecting a key and a value")
31 | }
32 |
33 | // Set up any variables or assets here by calling stub.PutState()
34 |
35 | // We store the key and the value on the ledger
36 | err := stub.PutState(args[0], []byte(args[1]))
37 | if err != nil {
38 | return shim.Error(fmt.Sprintf("Failed to create asset: %s", args[0]))
39 | }
40 | return shim.Success(nil)
41 | }
42 |
43 | // Invoke is called per transaction on the chaincode. Each transaction is
44 | // either a 'get' or a 'set' on the asset created by Init function. The Set
45 | // method may create a new asset by specifying a new key-value pair.
46 | func (t *SampleChaincode) Invoke(stub shim.ChaincodeStubInterface) peer.Response {
47 | // Extract the function and args from the transaction proposal
48 | fn, args := stub.GetFunctionAndParameters()
49 |
50 | var result string
51 | var err error
52 | if fn == "set" {
53 | result, err = set(stub, args)
54 | } else { // assume 'get' even if fn is nil
55 | result, err = get(stub, args)
56 | }
57 | if err != nil {
58 | return shim.Error(err.Error())
59 | }
60 |
61 | // Return the result as success payload
62 | return shim.Success([]byte(result))
63 | }
64 |
65 | // Set stores the asset (both key and value) on the ledger. If the key exists,
66 | // it will override the value with the new one
67 | func set(stub shim.ChaincodeStubInterface, args []string) (string, error) {
68 | if len(args) != 2 {
69 | return "", fmt.Errorf("Incorrect arguments. Expecting a key and a value")
70 | }
71 |
72 | err := stub.PutState(args[0], []byte(args[1]))
73 | if err != nil {
74 | return "", fmt.Errorf("Failed to set asset: %s", args[0])
75 | }
76 | return args[1], nil
77 | }
78 |
79 | // Get returns the value of the specified asset key
80 | func get(stub shim.ChaincodeStubInterface, args []string) (string, error) {
81 | if len(args) != 1 {
82 | return "", fmt.Errorf("Incorrect arguments. Expecting a key")
83 | }
84 |
85 | value, err := stub.GetState(args[0])
86 | if err != nil {
87 | return "", fmt.Errorf("Failed to get asset: %s with error: %s", args[0], err)
88 | }
89 | if value == nil {
90 | return "", fmt.Errorf("Asset not found: %s", args[0])
91 | }
92 | return string(value), nil
93 | }
94 |
95 | // main function starts up the chaincode in the container during instantiate
96 | func main() {
97 | err := shim.Start(new(SampleChaincode))
98 | if err != nil {
99 | fmt.Println("Could not start SampleChaincode")
100 | } else {
101 | fmt.Println("SampleChaincode successfully started")
102 | }
103 | }
--------------------------------------------------------------------------------
/src/fabric-material/tuna-app/client/app.js:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: Apache-2.0
2 |
3 | 'use strict';
4 |
5 | var app = angular.module('application', []);
6 |
7 | // Angular Controller
8 | app.controller('appController', function($scope, appFactory){
9 |
10 | $("#success_holder").hide();
11 | $("#success_create").hide();
12 | $("#error_holder").hide();
13 | $("#error_query").hide();
14 |
15 | $scope.queryAllTuna = function(){
16 |
17 | appFactory.queryAllTuna(function(data){
18 | var array = [];
19 | for (var i = 0; i < data.length; i++){
20 | parseInt(data[i].Key);
21 | data[i].Record.Key = parseInt(data[i].Key);
22 | array.push(data[i].Record);
23 | }
24 | array.sort(function(a, b) {
25 | return parseFloat(a.Key) - parseFloat(b.Key);
26 | });
27 | $scope.all_tuna = array;
28 | });
29 | }
30 |
31 | $scope.queryTuna = function(){
32 |
33 | var id = $scope.tuna_id;
34 |
35 | appFactory.queryTuna(id, function(data){
36 | $scope.query_tuna = data;
37 | });
38 | }
39 |
40 | $scope.recordTuna = function(){
41 |
42 | appFactory.recordTuna($scope.tuna, function(data){
43 | $scope.create_tuna = data;
44 | $("#success_create").show();
45 | });
46 | }
47 |
48 | $scope.changeHolder = function(){
49 |
50 | appFactory.changeHolder($scope.holder, function(data){
51 | $scope.change_holder = data;
52 | $("#success_holder").show();
53 | });
54 | }
55 |
56 | });
57 |
58 | // Angular Factory
59 | app.factory('appFactory', function($http){
60 |
61 | var factory = {};
62 |
63 | factory.queryAllTuna = function(callback){
64 |
65 | $http.get('/get_all_tuna/').success(function(output){
66 | callback(output)
67 | });
68 | }
69 |
70 | factory.queryTuna = function(id, callback){
71 | $http.get('/get_tuna/'+id).success(function(output){
72 | callback(output)
73 | });
74 | }
75 |
76 | factory.recordTuna = function(data, callback){
77 |
78 | data.location = data.longitude + ", "+ data.latitude;
79 |
80 | var tuna = data.id + "-" + data.location + "-" + data.timestamp + "-" + data.holder + "-" + data.vessel;
81 |
82 | $http.get('/add_tuna/'+tuna).success(function(output){
83 | callback(output)
84 | });
85 | }
86 |
87 | factory.changeHolder = function(data, callback){
88 |
89 | var holder = data.id + "-" + data.name;
90 |
91 | $http.get('/change_holder/'+holder).success(function(output){
92 | callback(output)
93 | });
94 | }
95 |
96 | return factory;
97 | });
98 |
--------------------------------------------------------------------------------
/src/fabric-material/tuna-app/client/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yingpingzhang/enterprise_blockchain_tutorial/3b0be2deb509600e3f6666fb30361cf009dd02f8/src/fabric-material/tuna-app/client/favicon.png
--------------------------------------------------------------------------------
/src/fabric-material/tuna-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Fabric-tuna-app",
3 | "version": "1.0.0",
4 | "description": "Hyperledger Fabric MOOC Sample Application",
5 | "main": "server.js",
6 | "dependencies": {
7 | "fabric-ca-client": "^1.0.2",
8 | "fabric-client": "^1.0.2",
9 | "grpc": "^1.6.0",
10 | "express": "latest",
11 | "body-parser": "latest",
12 | "ejs": "latest",
13 | "angular": "^1.7.9"
14 | },
15 | "license": "Apache-2.0",
16 | "keywords": [
17 | "Hyperledger",
18 | "Fabric",
19 | "Oceans",
20 | "Tuna",
21 | "Fishing",
22 | "Sample",
23 | "Application"
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/src/fabric-material/tuna-app/registerAdmin.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /*
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 | /*
6 | * Chaincode Invoke
7 |
8 | This code is based on code written by the Hyperledger Fabric community.
9 | Original code can be found here: https://gerrit.hyperledger.org/r/#/c/14395/4/fabcar/enrollAdmin.js
10 | */
11 |
12 | var Fabric_Client = require('fabric-client');
13 | var Fabric_CA_Client = require('fabric-ca-client');
14 |
15 | var path = require('path');
16 | var util = require('util');
17 | var os = require('os');
18 |
19 | //
20 | var fabric_client = new Fabric_Client();
21 | var fabric_ca_client = null;
22 | var admin_user = null;
23 | var member_user = null;
24 | var store_path = path.join(os.homedir(), '.hfc-key-store');
25 | console.log(' Store path:'+store_path);
26 |
27 | // create the key value store as defined in the fabric-client/config/default.json 'key-value-store' setting
28 | Fabric_Client.newDefaultKeyValueStore({ path: store_path
29 | }).then((state_store) => {
30 | // assign the store to the fabric client
31 | fabric_client.setStateStore(state_store);
32 | var crypto_suite = Fabric_Client.newCryptoSuite();
33 | // use the same location for the state store (where the users' certificate are kept)
34 | // and the crypto store (where the users' keys are kept)
35 | var crypto_store = Fabric_Client.newCryptoKeyStore({path: store_path});
36 | crypto_suite.setCryptoKeyStore(crypto_store);
37 | fabric_client.setCryptoSuite(crypto_suite);
38 | var tlsOptions = {
39 | trustedRoots: [],
40 | verify: false
41 | };
42 | // be sure to change the http to https when the CA is running TLS enabled
43 | fabric_ca_client = new Fabric_CA_Client('http://localhost:7054', tlsOptions , 'ca.example.com', crypto_suite);
44 |
45 | // first check to see if the admin is already enrolled
46 | return fabric_client.getUserContext('admin', true);
47 | }).then((user_from_store) => {
48 | if (user_from_store && user_from_store.isEnrolled()) {
49 | console.log('Successfully loaded admin from persistence');
50 | admin_user = user_from_store;
51 | return null;
52 | } else {
53 | // need to enroll it with CA server
54 | return fabric_ca_client.enroll({
55 | enrollmentID: 'admin',
56 | enrollmentSecret: 'adminpw'
57 | }).then((enrollment) => {
58 | console.log('Successfully enrolled admin user "admin"');
59 | return fabric_client.createUser(
60 | {username: 'admin',
61 | mspid: 'Org1MSP',
62 | cryptoContent: { privateKeyPEM: enrollment.key.toBytes(), signedCertPEM: enrollment.certificate }
63 | });
64 | }).then((user) => {
65 | admin_user = user;
66 | return fabric_client.setUserContext(admin_user);
67 | }).catch((err) => {
68 | console.error('Failed to enroll and persist admin. Error: ' + err.stack ? err.stack : err);
69 | throw new Error('Failed to enroll admin');
70 | });
71 | }
72 | }).then(() => {
73 | console.log('Assigned the admin user to the fabric client ::' + admin_user.toString());
74 | }).catch((err) => {
75 | console.error('Failed to enroll admin: ' + err);
76 | });
--------------------------------------------------------------------------------
/src/fabric-material/tuna-app/registerUser.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /*
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 | /*
6 | * Chaincode Invoke
7 |
8 | This code is based on code written by the Hyperledger Fabric community.
9 | Original code can be found here: https://gerrit.hyperledger.org/r/#/c/14395/4/fabcar/registerUser.js
10 |
11 | */
12 |
13 | var Fabric_Client = require('fabric-client');
14 | var Fabric_CA_Client = require('fabric-ca-client');
15 |
16 | var path = require('path');
17 | var util = require('util');
18 | var os = require('os');
19 |
20 | //
21 | var fabric_client = new Fabric_Client();
22 | var fabric_ca_client = null;
23 | var admin_user = null;
24 | var member_user = null;
25 | var store_path = path.join(os.homedir(), '.hfc-key-store');
26 | console.log(' Store path:'+store_path);
27 |
28 | // create the key value store as defined in the fabric-client/config/default.json 'key-value-store' setting
29 | Fabric_Client.newDefaultKeyValueStore({ path: store_path
30 | }).then((state_store) => {
31 | // assign the store to the fabric client
32 | fabric_client.setStateStore(state_store);
33 | var crypto_suite = Fabric_Client.newCryptoSuite();
34 | // use the same location for the state store (where the users' certificate are kept)
35 | // and the crypto store (where the users' keys are kept)
36 | var crypto_store = Fabric_Client.newCryptoKeyStore({path: store_path});
37 | crypto_suite.setCryptoKeyStore(crypto_store);
38 | fabric_client.setCryptoSuite(crypto_suite);
39 | var tlsOptions = {
40 | trustedRoots: [],
41 | verify: false
42 | };
43 | // be sure to change the http to https when the CA is running TLS enabled
44 | fabric_ca_client = new Fabric_CA_Client('http://localhost:7054', null , '', crypto_suite);
45 |
46 | // first check to see if the admin is already enrolled
47 | return fabric_client.getUserContext('admin', true);
48 | }).then((user_from_store) => {
49 | if (user_from_store && user_from_store.isEnrolled()) {
50 | console.log('Successfully loaded admin from persistence');
51 | admin_user = user_from_store;
52 | } else {
53 | throw new Error('Failed to get admin.... run registerAdmin.js');
54 | }
55 |
56 | // at this point we should have the admin user
57 | // first need to register the user with the CA server
58 | return fabric_ca_client.register({enrollmentID: 'user1', affiliation: 'org1.department1'}, admin_user);
59 | }).then((secret) => {
60 | // next we need to enroll the user with CA server
61 | console.log('Successfully registered user1 - secret:'+ secret);
62 |
63 | return fabric_ca_client.enroll({enrollmentID: 'user1', enrollmentSecret: secret});
64 | }).then((enrollment) => {
65 | console.log('Successfully enrolled member user "user1" ');
66 | return fabric_client.createUser(
67 | {username: 'user1',
68 | mspid: 'Org1MSP',
69 | cryptoContent: { privateKeyPEM: enrollment.key.toBytes(), signedCertPEM: enrollment.certificate }
70 | });
71 | }).then((user) => {
72 | member_user = user;
73 |
74 | return fabric_client.setUserContext(member_user);
75 | }).then(()=>{
76 | console.log('User1 was successfully registered and enrolled and is ready to intreact with the fabric network');
77 |
78 | }).catch((err) => {
79 | console.error('Failed to register: ' + err);
80 | if(err.toString().indexOf('Authorization') > -1) {
81 | console.error('Authorization failures may be caused by having admin credentials from a previous CA instance.\n' +
82 | 'Try again after deleting the contents of the store directory '+store_path);
83 | }
84 | });
--------------------------------------------------------------------------------
/src/fabric-material/tuna-app/routes.js:
--------------------------------------------------------------------------------
1 | //SPDX-License-Identifier: Apache-2.0
2 |
3 | var tuna = require('./controller.js');
4 |
5 | module.exports = function(app){
6 |
7 | app.get('/get_tuna/:id', function(req, res){
8 | tuna.get_tuna(req, res);
9 | });
10 | app.get('/add_tuna/:tuna', function(req, res){
11 | tuna.add_tuna(req, res);
12 | });
13 | app.get('/get_all_tuna', function(req, res){
14 | tuna.get_all_tuna(req, res);
15 | });
16 | app.get('/change_holder/:holder', function(req, res){
17 | tuna.change_holder(req, res);
18 | });
19 | }
20 |
--------------------------------------------------------------------------------
/src/fabric-material/tuna-app/server.js:
--------------------------------------------------------------------------------
1 | //SPDX-License-Identifier: Apache-2.0
2 |
3 | // nodejs server setup
4 |
5 | // call the packages we need
6 | var express = require('express'); // call express
7 | var app = express(); // define our app using express
8 | var bodyParser = require('body-parser');
9 | var http = require('http')
10 | var fs = require('fs');
11 | var Fabric_Client = require('fabric-client');
12 | var path = require('path');
13 | var util = require('util');
14 | var os = require('os');
15 |
16 | // Load all of our middleware
17 | // configure app to use bodyParser()
18 | // this will let us get the data from a POST
19 | // app.use(express.static(__dirname + '/client'));
20 | app.use(bodyParser.urlencoded({ extended: true }));
21 | app.use(bodyParser.json());
22 |
23 | // instantiate the app
24 | var app = express();
25 |
26 | // this line requires and runs the code from our routes.js file and passes it app
27 | require('./routes.js')(app);
28 |
29 | // set up a static file server that points to the "client" directory
30 | app.use(express.static(path.join(__dirname, './client')));
31 |
32 | // Save our port
33 | var port = process.env.PORT || 8000;
34 |
35 | // Start the server and listen on port
36 | app.listen(port,function(){
37 | console.log("Live on port: " + port);
38 | });
39 |
40 |
--------------------------------------------------------------------------------
/src/fabric-material/tuna-app/src/queryAllTuna.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /*
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 | /*
6 | * Hyperledger Fabric Sample Query Program for tuna-app: Chaincode Invoke
7 |
8 | This code is based on code written by the Hyperledger Fabric community.
9 | Original code can be found here: https://github.com/hyperledger/fabric-samples/blob/release/fabcar/query.js
10 | */
11 |
12 | var Fabric_Client = require('fabric-client');
13 | var path = require('path');
14 | var util = require('util');
15 | var os = require('os');
16 |
17 | var fabric_client = new Fabric_Client();
18 |
19 | // setup the fabric network
20 | var channel = fabric_client.newChannel('mychannel');
21 | var peer = fabric_client.newPeer('grpc://localhost:7051');
22 | channel.addPeer(peer);
23 |
24 | //
25 | var member_user = null;
26 | var store_path = path.join(os.homedir(), '.hfc-key-store');
27 | console.log('Store path:'+store_path);
28 | var tx_id = null;
29 |
30 | // create the key value store as defined in the fabric-client/config/default.json 'key-value-store' setting
31 | Fabric_Client.newDefaultKeyValueStore({ path: store_path
32 | }).then((state_store) => {
33 | // assign the store to the fabric client
34 | fabric_client.setStateStore(state_store);
35 | var crypto_suite = Fabric_Client.newCryptoSuite();
36 | // use the same location for the state store (where the users' certificate are kept)
37 | // and the crypto store (where the users' keys are kept)
38 | var crypto_store = Fabric_Client.newCryptoKeyStore({path: store_path});
39 | crypto_suite.setCryptoKeyStore(crypto_store);
40 | fabric_client.setCryptoSuite(crypto_suite);
41 |
42 | // get the enrolled user from persistence, this user will sign all requests
43 | return fabric_client.getUserContext('user1', true);
44 | }).then((user_from_store) => {
45 | if (user_from_store && user_from_store.isEnrolled()) {
46 | console.log('Successfully loaded user1 from persistence');
47 | member_user = user_from_store;
48 | } else {
49 | throw new Error('Failed to get user1.... run registerUser.js');
50 | }
51 |
52 | // queryAllTuna - requires no arguments , ex: args: [''],
53 | const request = {
54 | chaincodeId: 'tuna-app',
55 | txId: tx_id,
56 | fcn: 'queryAllTuna',
57 | args: ['']
58 | };
59 |
60 | // send the query proposal to the peer
61 | return channel.queryByChaincode(request);
62 | }).then((query_responses) => {
63 | console.log("Query has completed, checking results");
64 | // query_responses could have more than one results if there multiple peers were used as targets
65 | if (query_responses && query_responses.length == 1) {
66 | if (query_responses[0] instanceof Error) {
67 | console.error("error from query = ", query_responses[0]);
68 | } else {
69 | console.log("Response is ", query_responses[0].toString());
70 | res.json(JSON.parse(query_responses[0].toString()));
71 | }
72 | } else {
73 | console.log("No payloads were returned from query");
74 | }
75 | }).catch((err) => {
76 | console.error('Failed to query successfully :: ' + err);
77 | });
78 |
--------------------------------------------------------------------------------
/src/fabric-material/tuna-app/src/queryTuna.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | /*
3 | * SPDX-License-Identifier: Apache-2.0
4 |
5 | Hyperledger Fabric Sample Query Program for tuna-app: Chaincode Invoke
6 |
7 | This code is based on code written by the Hyperledger Fabric community.
8 | Original code can be found here: https://github.com/hyperledger/fabric-samples/blob/release/fabcar/query.js
9 | */
10 |
11 | var Fabric_Client = require('fabric-client');
12 | var path = require('path');
13 | var util = require('util');
14 | var os = require('os');
15 |
16 | var fabric_client = new Fabric_Client();
17 |
18 | var key = req.params.id
19 |
20 | // setup the fabric network
21 | var channel = fabric_client.newChannel('mychannel');
22 | var peer = fabric_client.newPeer('grpc://localhost:7051');
23 | channel.addPeer(peer);
24 |
25 | //
26 | var member_user = null;
27 | var store_path = path.join(os.homedir(), '.hfc-key-store');
28 | console.log('Store path:'+store_path);
29 | var tx_id = null;
30 |
31 | // create the key value store as defined in the fabric-client/config/default.json 'key-value-store' setting
32 | Fabric_Client.newDefaultKeyValueStore({ path: store_path
33 | }).then((state_store) => {
34 | // assign the store to the fabric client
35 | fabric_client.setStateStore(state_store);
36 | var crypto_suite = Fabric_Client.newCryptoSuite();
37 | // use the same location for the state store (where the users' certificate are kept)
38 | // and the crypto store (where the users' keys are kept)
39 | var crypto_store = Fabric_Client.newCryptoKeyStore({path: store_path});
40 | crypto_suite.setCryptoKeyStore(crypto_store);
41 | fabric_client.setCryptoSuite(crypto_suite);
42 |
43 | // get the enrolled user from persistence, this user will sign all requests
44 | return fabric_client.getUserContext('user1', true);
45 | }).then((user_from_store) => {
46 | if (user_from_store && user_from_store.isEnrolled()) {
47 | console.log('Successfully loaded user1 from persistence');
48 | member_user = user_from_store;
49 | } else {
50 | throw new Error('Failed to get user1.... run registerUser.js');
51 | }
52 |
53 | // queryTuna - requires 1 argument, ex: args: ['4'],
54 | const request = {
55 | chaincodeId: 'tuna-app',
56 | txId: tx_id,
57 | fcn: 'queryTuna',
58 | args: [key]
59 | };
60 |
61 | // send the query proposal to the peer
62 | return channel.queryByChaincode(request);
63 | }).then((query_responses) => {
64 | console.log("Query has completed, checking results");
65 | // query_responses could have more than one results if there multiple peers were used as targets
66 | if (query_responses && query_responses.length == 1) {
67 | if (query_responses[0] instanceof Error) {
68 | console.error("error from query = ", query_responses[0]);
69 | } else {
70 | console.log("Response is ", query_responses[0].toString());
71 | res.send(query_responses[0].toString())
72 | }
73 | } else {
74 | console.log("No payloads were returned from query");
75 | }
76 | }).catch((err) => {
77 | console.error('Failed to query successfully :: ' + err);
78 | });
--------------------------------------------------------------------------------
/src/fabric-material/tuna-app/startFabric.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # SPDX-License-Identifier: Apache-2.0
4 | # This code is based on code written by the Hyperledger Fabric community.
5 | # Original code can be found here: https://github.com/hyperledger/fabric-samples/blob/release/fabcar/startFabric.sh
6 | #
7 | # Exit on first error
8 |
9 | set -e
10 |
11 | # don't rewrite paths for Windows Git Bash users
12 | export MSYS_NO_PATHCONV=1
13 |
14 | starttime=$(date +%s)
15 |
16 | if [ ! -d ~/.hfc-key-store/ ]; then
17 | mkdir ~/.hfc-key-store/
18 | fi
19 |
20 | # launch network; create channel and join peer to channel
21 | cd ../basic-network
22 | ./start.sh
23 |
24 | # Now launch the CLI container in order to install, instantiate chaincode
25 | # and prime the ledger with our 10 tuna catches
26 | docker-compose -f ./docker-compose.yml up -d cli
27 |
28 | docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode install -n tuna-app -v 1.0 -p github.com/tuna-app
29 | docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n tuna-app -v 1.0 -c '{"Args":[""]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
30 | sleep 10
31 | docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n tuna-app -c '{"function":"initLedger","Args":[""]}'
32 |
33 | printf "\nTotal execution time : $(($(date +%s) - starttime)) secs ...\n\n"
34 | printf "\nStart with the registerAdmin.js, then registerUser.js, then server.js\n\n"
--------------------------------------------------------------------------------