├── Gopkg.lock
├── Gopkg.toml
├── Makefile
├── README.md
├── blockchain
├── .idea
│ ├── blockchain.iml
│ ├── modules.xml
│ └── workspace.xml
└── startInit.go
├── chaincode
├── billcc.go
├── endorserCC.go
├── main.go
├── structure.go
└── utils.go
├── config.yaml
├── fixtures
├── artifacts
│ ├── .gitkeep
│ ├── Org1MSPanchors.tx
│ ├── Org2MSPanchors.tx
│ ├── channel.tx
│ └── genesis.block
├── crypto-config
│ ├── ordererOrganizations
│ │ └── example.com
│ │ │ ├── ca
│ │ │ ├── 00f3d3f738be05a8dff0b1c76e49e642141165d3cc650596e95ff926a29ac22d_sk
│ │ │ └── ca.example.com-cert.pem
│ │ │ ├── msp
│ │ │ ├── admincerts
│ │ │ │ └── Admin@example.com-cert.pem
│ │ │ ├── cacerts
│ │ │ │ └── ca.example.com-cert.pem
│ │ │ └── tlscacerts
│ │ │ │ └── tlsca.example.com-cert.pem
│ │ │ ├── orderers
│ │ │ └── orderer.example.com
│ │ │ │ ├── msp
│ │ │ │ ├── admincerts
│ │ │ │ │ └── Admin@example.com-cert.pem
│ │ │ │ ├── cacerts
│ │ │ │ │ └── ca.example.com-cert.pem
│ │ │ │ ├── keystore
│ │ │ │ │ └── c12bedd969be10bf8297668c470a02602939bb185635f0cebc31d826cb5d31d5_sk
│ │ │ │ ├── signcerts
│ │ │ │ │ └── orderer.example.com-cert.pem
│ │ │ │ └── tlscacerts
│ │ │ │ │ └── tlsca.example.com-cert.pem
│ │ │ │ └── tls
│ │ │ │ ├── ca.crt
│ │ │ │ ├── server.crt
│ │ │ │ └── server.key
│ │ │ ├── tlsca
│ │ │ ├── 66e079657a3813fdf9b3ecbd7bd17df7eb0ac23e025fd88cd50db1e091e2d3ec_sk
│ │ │ └── tlsca.example.com-cert.pem
│ │ │ └── users
│ │ │ └── Admin@example.com
│ │ │ ├── msp
│ │ │ ├── admincerts
│ │ │ │ └── Admin@example.com-cert.pem
│ │ │ ├── cacerts
│ │ │ │ └── ca.example.com-cert.pem
│ │ │ ├── keystore
│ │ │ │ └── 3e150e050d7ce262ecd63cb55ff498836cd5754cac8378e14be9e9502ae85ec2_sk
│ │ │ ├── signcerts
│ │ │ │ └── Admin@example.com-cert.pem
│ │ │ └── tlscacerts
│ │ │ │ └── tlsca.example.com-cert.pem
│ │ │ └── tls
│ │ │ ├── ca.crt
│ │ │ ├── client.crt
│ │ │ └── client.key
│ └── peerOrganizations
│ │ ├── org1.example.com
│ │ ├── ca
│ │ │ ├── 471ebb31833db2522c026a22cf11f556854dd926880010123990cfabe7eef4e5_sk
│ │ │ └── ca.org1.example.com-cert.pem
│ │ ├── msp
│ │ │ ├── admincerts
│ │ │ │ └── Admin@org1.example.com-cert.pem
│ │ │ ├── cacerts
│ │ │ │ └── ca.org1.example.com-cert.pem
│ │ │ ├── config.yaml
│ │ │ └── tlscacerts
│ │ │ │ └── tlsca.org1.example.com-cert.pem
│ │ ├── peers
│ │ │ ├── peer0.org1.example.com
│ │ │ │ ├── msp
│ │ │ │ │ ├── admincerts
│ │ │ │ │ │ └── Admin@org1.example.com-cert.pem
│ │ │ │ │ ├── cacerts
│ │ │ │ │ │ └── ca.org1.example.com-cert.pem
│ │ │ │ │ ├── config.yaml
│ │ │ │ │ ├── keystore
│ │ │ │ │ │ └── 52a4a4cec4c8b3cce027018f33a3361e34de6edc143a804609df36def9e80004_sk
│ │ │ │ │ ├── signcerts
│ │ │ │ │ │ └── peer0.org1.example.com-cert.pem
│ │ │ │ │ └── tlscacerts
│ │ │ │ │ │ └── tlsca.org1.example.com-cert.pem
│ │ │ │ └── tls
│ │ │ │ │ ├── ca.crt
│ │ │ │ │ ├── server.crt
│ │ │ │ │ └── server.key
│ │ │ └── peer1.org1.example.com
│ │ │ │ ├── msp
│ │ │ │ ├── admincerts
│ │ │ │ │ └── Admin@org1.example.com-cert.pem
│ │ │ │ ├── cacerts
│ │ │ │ │ └── ca.org1.example.com-cert.pem
│ │ │ │ ├── config.yaml
│ │ │ │ ├── keystore
│ │ │ │ │ └── 2e4b52fd060cbb1e2d478483c556dbfcb31ba765ef1f1436af6b0a27d758b56c_sk
│ │ │ │ ├── signcerts
│ │ │ │ │ └── peer1.org1.example.com-cert.pem
│ │ │ │ └── tlscacerts
│ │ │ │ │ └── tlsca.org1.example.com-cert.pem
│ │ │ │ └── tls
│ │ │ │ ├── ca.crt
│ │ │ │ ├── server.crt
│ │ │ │ └── server.key
│ │ ├── tlsca
│ │ │ ├── 69ff3a2c34802277140cc97e76c3cca7d68e2c67d086f88d9bfced05a6244145_sk
│ │ │ └── tlsca.org1.example.com-cert.pem
│ │ └── users
│ │ │ ├── Admin@org1.example.com
│ │ │ ├── msp
│ │ │ │ ├── admincerts
│ │ │ │ │ └── Admin@org1.example.com-cert.pem
│ │ │ │ ├── cacerts
│ │ │ │ │ └── ca.org1.example.com-cert.pem
│ │ │ │ ├── keystore
│ │ │ │ │ └── fca80a3ce2abfd36a5a427ce7bc94d8bf91f505864bb04cf3c402e2272962c40_sk
│ │ │ │ ├── signcerts
│ │ │ │ │ └── Admin@org1.example.com-cert.pem
│ │ │ │ └── tlscacerts
│ │ │ │ │ └── tlsca.org1.example.com-cert.pem
│ │ │ └── tls
│ │ │ │ ├── ca.crt
│ │ │ │ ├── client.crt
│ │ │ │ └── client.key
│ │ │ └── User1@org1.example.com
│ │ │ ├── msp
│ │ │ ├── admincerts
│ │ │ │ └── User1@org1.example.com-cert.pem
│ │ │ ├── cacerts
│ │ │ │ └── ca.org1.example.com-cert.pem
│ │ │ ├── keystore
│ │ │ │ └── 55e4e407eff74668c0e15d0119ba4af4ef5779d8a01fbbe2eae7760df11d968a_sk
│ │ │ ├── signcerts
│ │ │ │ └── User1@org1.example.com-cert.pem
│ │ │ └── tlscacerts
│ │ │ │ └── tlsca.org1.example.com-cert.pem
│ │ │ └── tls
│ │ │ ├── ca.crt
│ │ │ ├── client.crt
│ │ │ └── client.key
│ │ └── org2.example.com
│ │ ├── ca
│ │ ├── 351ff344270e862be47d4e0442c96ac67ae466898fccbad8b9eba25d8a604cf2_sk
│ │ └── ca.org2.example.com-cert.pem
│ │ ├── msp
│ │ ├── admincerts
│ │ │ └── Admin@org2.example.com-cert.pem
│ │ ├── cacerts
│ │ │ └── ca.org2.example.com-cert.pem
│ │ ├── config.yaml
│ │ └── tlscacerts
│ │ │ └── tlsca.org2.example.com-cert.pem
│ │ ├── peers
│ │ ├── peer0.org2.example.com
│ │ │ ├── msp
│ │ │ │ ├── admincerts
│ │ │ │ │ └── Admin@org2.example.com-cert.pem
│ │ │ │ ├── cacerts
│ │ │ │ │ └── ca.org2.example.com-cert.pem
│ │ │ │ ├── config.yaml
│ │ │ │ ├── keystore
│ │ │ │ │ └── 7edf6b8ad4fb7d4c8f93a86441a8301f247db5d9bf2bbae967bc5f36d714e547_sk
│ │ │ │ ├── signcerts
│ │ │ │ │ └── peer0.org2.example.com-cert.pem
│ │ │ │ └── tlscacerts
│ │ │ │ │ └── tlsca.org2.example.com-cert.pem
│ │ │ └── tls
│ │ │ │ ├── ca.crt
│ │ │ │ ├── server.crt
│ │ │ │ └── server.key
│ │ └── peer1.org2.example.com
│ │ │ ├── msp
│ │ │ ├── admincerts
│ │ │ │ └── Admin@org2.example.com-cert.pem
│ │ │ ├── cacerts
│ │ │ │ └── ca.org2.example.com-cert.pem
│ │ │ ├── config.yaml
│ │ │ ├── keystore
│ │ │ │ └── 1ef296b59a24b30ebd722bfa8eac0752929c597be002f77cabf70effbdb72e7e_sk
│ │ │ ├── signcerts
│ │ │ │ └── peer1.org2.example.com-cert.pem
│ │ │ └── tlscacerts
│ │ │ │ └── tlsca.org2.example.com-cert.pem
│ │ │ └── tls
│ │ │ ├── ca.crt
│ │ │ ├── server.crt
│ │ │ └── server.key
│ │ ├── tlsca
│ │ ├── 7a3bf9697cd011c552e49a43c13141ba4546533b8a96a15b8eaa3c7cca6ad0e7_sk
│ │ └── tlsca.org2.example.com-cert.pem
│ │ └── users
│ │ ├── Admin@org2.example.com
│ │ ├── msp
│ │ │ ├── admincerts
│ │ │ │ └── Admin@org2.example.com-cert.pem
│ │ │ ├── cacerts
│ │ │ │ └── ca.org2.example.com-cert.pem
│ │ │ ├── keystore
│ │ │ │ └── c8f1ee67181f4dbbecc065de8c470444f3f99a5d673f87fc79335bafab9caa1f_sk
│ │ │ ├── signcerts
│ │ │ │ └── Admin@org2.example.com-cert.pem
│ │ │ └── tlscacerts
│ │ │ │ └── tlsca.org2.example.com-cert.pem
│ │ └── tls
│ │ │ ├── ca.crt
│ │ │ ├── client.crt
│ │ │ └── client.key
│ │ └── User1@org2.example.com
│ │ ├── msp
│ │ ├── admincerts
│ │ │ └── User1@org2.example.com-cert.pem
│ │ ├── cacerts
│ │ │ └── ca.org2.example.com-cert.pem
│ │ ├── keystore
│ │ │ └── 89c83d48f707e3487762ec1f9f297558ee61e31c63f2f8aac4bda3df6662230e_sk
│ │ ├── signcerts
│ │ │ └── User1@org2.example.com-cert.pem
│ │ └── tlscacerts
│ │ │ └── tlsca.org2.example.com-cert.pem
│ │ └── tls
│ │ ├── ca.crt
│ │ ├── client.crt
│ │ └── client.key
└── docker-compose.yml
├── main.go
├── service
├── billService.go
├── endorseService.go
└── structure.go
└── web
├── app.go
├── controller
├── controllerHandler.go
├── controllerResponse.go
└── domain.go
├── static
├── .DS_Store
├── css
│ ├── billCommon.css
│ ├── login.css
│ └── popout.css
├── images
│ ├── jt.png
│ ├── jt2.png
│ └── menu.png
└── js
│ ├── billCommon.js
│ ├── jquery.min.js
│ ├── login.js
│ └── popout.js
└── tpl
├── billInfo.html
├── bills.html
├── issue.html
├── login.html
├── waitBillInfo.html
└── waitBills.html
/Gopkg.toml:
--------------------------------------------------------------------------------
1 | [[constraint]]
2 | name = "github.com/hyperledger/fabric"
3 | revision = "014d6befcf67f3787bb3d67ff34e1a98dc6aec5f"
4 |
5 | [[constraint]]
6 | name = "github.com/hyperledger/fabric-sdk-go"
7 | revision = "614551a752802488988921a730b172dada7def1d"
8 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | .PHONY: all dev clean build env-up env-down run
2 |
3 | all: clean build env-up run
4 |
5 | dev: build run
6 |
7 | ##### BUILD
8 | build:
9 | @echo "Build ..."
10 | @dep ensure
11 | @go build
12 | @echo "Build done"
13 |
14 | ##### ENV
15 | env-up:
16 | @echo "Start environment ..."
17 | @cd fixtures && docker-compose up --force-recreate -d
18 | @echo "Sleep 15 seconds in order to let the environment setup correctly"
19 | @sleep 15
20 | @echo "Environment up"
21 |
22 | env-down:
23 | @echo "Stop environment ..."
24 | @cd fixtures && docker-compose down
25 | @echo "Environment down"
26 |
27 | ##### RUN
28 | run:
29 | @echo "Start app ..."
30 | @./bill
31 |
32 | ##### CLEAN
33 | clean: env-down
34 | @echo "Clean up ..."
35 | @rm -rf /tmp/bill-* bill
36 | @docker rm -f -v `docker ps -a --no-trunc | grep "bill" | cut -d ' ' -f 1` 2>/dev/null || true
37 | @docker rmi `docker images --no-trunc | grep "bill" | cut -d ' ' -f 1` 2>/dev/null || true
38 | @echo "Clean up done"
39 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 银行区块链票据项目
2 |
3 | 博客:www.chenjianhui.org
4 |
5 | 备注:如有错误,请指正,不断更新迭代
6 |
7 | 一 票据业务
8 |
9 | 票据业务是指信用机构,按照一定的方式和要求为票据的设立、转移和偿付而进行的日常营业性的业务活动。主要包括票据的承兑、贴现和票据抵押放款业务。 票据业务是银行一项传统的资产业务。银行的票据业务是建立在商业信用基础之上的。是银行信用和商业信用的结合。开办票据业务,可以促进商业信用的票据化,加强对商业信用的管理,为促进商品生产和商品流通、搞活经济创造条件
10 |
11 | 二 办理票据业务的流程
12 |
13 | 1、申请人向银行提出票据融资书面申请,同时提交申请相关的资料;
14 |
15 | 2、银行审核申请人所提交的资料,同时对申请人的个人资产状况、信用状况进行了解调查;
16 |
17 | 3、资料审核通过,银行与申请人商议融资内容,签订借款合同;
18 |
19 | 4、借款人办理相应保险等手续,手续办理完毕,银行发放资金;
20 |
21 | 5、借款人按照合同约定内容还款。
22 |
23 | 三 专业术语
24 |
25 | - 持票人:持票人是除出票人以外的持有票据的人,也就是票据的收款人。
26 | - 签发人:签发人是报送上级机关的公文中,发文机关的负责人签署姓名。
27 | - 承兑人:承兑人是指承诺在汇票到期日向持票人支付汇票金额的法人、其它组织或者个人。
28 | - 出票人:出票人是开立票据并将其交付给他人的法人、其它组织或者个人。
29 | - 付款人:付款人是出票人命令支付票据款项的人,付款人只有在票据上签章,确认付款责任(如承兑)以后,他才成为票据的债务人。
30 | - 保证人:保证人是指具有代为清偿票据债务能力的法人、其他组织或者个人。是非票据债务人对于出票人、背书人、承兑人作成保证行为的人。
31 | - 收款人:收款人是收取票据款项的人。是票据的主债权人。收款人有权要求付款人付款,如果被拒绝付款,有权向出票人以及票据上的其它债务人追索票款。
32 | - 背书人:背书人是指收款人或者持票人在接受票据后,经过背书,再将票据转让给他人的法人、其它组织或者个人。
33 | - 背书行为:背书是票据持有人在票据背面批注签章,将票据转让给他人的行为,背书也包括两个内容,即在票据后面背书,和将已背书的票据交付给被背书人。背书人是被背书人的债务人,被背书人是背书人的债权人。
34 |
35 | 四 为什么要做基于区块链技术的数字票据?
36 |
37 | 票据现有的形式有纸质票据和电子票据。纸质票据是传统的票据形式,需要在票据上字或者加盖有效印章才能生效。电子票据是基于央行牵头开发完成的电子商业汇票系统(ECDS),银行或者企业通过直连或者网银接人,所有的票据承兑、交易等都需要通过ECDS 才能完成,是典型的中心化系统。
38 |
39 | 纸质票据和电子票据都有一些尚未解决的痛点。
40 |
41 | - 票据真实性问题: 票据的贸易背景信息可能并不真实存在或者存在偏差,票据信息也容易被克隆和伪造,市场中存在的假票很难识别。
42 | - 票据安全性问题: 纸质票据在携带过程有遗失或者损坏的风险,也存在打款和背书不同步的情况。
43 | - 票据信用风险问题: 可能存在汇票到期后承兑人未及时将相关款项划入持票人账户的情况。
44 |
45 | - 票据处理效率问题: 在途时间会造成资金结算延后,监管和审计成本也会很高。
46 | - 票据违规交易问题: 票据交易主体或者中介机构可能存在一票多卖、清单交易、出租账户等违法违规行为。
47 | -
48 |
49 | 借助区块链技术,可以在实现原有的票据业务的基础上解决现有的一些痛点。
50 |
51 | a. 在不依赖可信第三方平台的基础上实现票据信息的真实性。
52 |
53 | 纸质票据和电子票据的交易双方都依赖可信的第三方平台或者票据实物验证票据的真伪。但是在实际的操作过程中,票据的真实信息是很难确认的。超级账本的成员管理利用底层的安全机制确保上链信息的真实性,基于记录到分布式共享账本中的票据信息,杜绝假票、克隆票、变造票等伪假票据。
54 |
55 | b. 分布式共享账本避免违规交易
56 |
57 | 纸质票据中的一票多卖和电子票据中打款背书不同步等违规交易存在的原因是信息的不同步。基于区块链技术的数字票据利用分布式共享账本记录的信息具有不可篡改性,一旦交易完成并记录到账本中,就不会存在纸质票据和电子票据中的数据丢失和信息不同步的问题,交易双方都没有机会进行违规交易。
58 |
59 | c. 智能合约实现票据业务自动处理
60 |
61 | 智能合约功能可以实现复杂的业务逻辑,比如业务操作前可以基于不可篡改的账本信息搜集和评估参与者的信用,拒绝信用评级低的交易方提交的请求,业务操作后可以自动实现转账等功能,解决不同操作导致的信息不同步问题。
62 |
63 | d. 数字票据提升票据处理效率
64 |
65 | 分布式共享账本在区块链网络中有多份数据拷贝,交易结束后就完成了对账,利用本地的账本能快速检索信息,做更多的业务处理,提升票据处理的效率。
66 |
67 | e. 区块链技术提高票据安全性
68 |
69 | 票据安全性包括物理安全、数据安全、网络安全等多个方面。纸质票据在携带过程有遗失或者损坏的风险,属于物理安全范畴。纸质票据和电子票据都可能存在数据被篡改的可能性,属于数据安全范畴。传输过程中被中间人攻击等属于网络安全范畴。基于区块链技术的数字票据综合了多种底层技术,分布式账本解决了物理安全和数据安全的问题,数字签名和安全传输解决网络安全的问题。
70 |
71 | 五 票据背书需求分析
72 |
73 | 票据背书的应用开发实例会对票据的应用场最进行简化,我们实现的业务逻辑包括票据发布、票据背书、票据签收,票据拒收、票据查询等操作,实际的票据业务需要根据实际需求做调整。
74 |
75 | 1.票据发布
76 |
77 | 票据发布操作生成一个票据,包括如下5类信息。
78 |
79 | a. 票据基本信息
80 |
81 | - 票据号码
82 | - 票据金额
83 | - 票据种类
84 | - 票据出票日期
85 | - 票据到期日期
86 |
87 | b. 出票人信息
88 |
89 | - 出票人名称
90 | - 出票人证件号码
91 |
92 | c. 承兑人信息口
93 |
94 | - 承兑人名称
95 | - 承兑人证件号码
96 |
97 | d. 收款人信息
98 |
99 | - 收款人名称
100 | - 收款人证件号码
101 |
102 | e. 持票人信息
103 |
104 | - 持票人名称
105 | - 持票人证件号码
106 |
107 | 2. 票据背书
108 |
109 | 票据背书是转让票据权利的重要方式和手段。发票票据需要先获取持票人持有的票据,填写被背书人的信息:
110 |
111 | - 被背书人名称;
112 | - 被背书人的证件号码。
113 |
114 | 发起票据背书的请求后会提交给被背书人。被背书人接收到票据背书的请求后,可以择签收票据或者拒绝背书。
115 |
116 | 3. 票据背书签收
117 |
118 | 票据背书签收实现了票据权利的转让,签收前需要仔细地查阅待签收票据的信息,确保内容的完整性。票据签收的过程需要用被背书人的签名密钥对签收的内容进行数字签名,实现防抵赖的功能。
119 |
120 | 4. 票据背书拒收
121 |
122 | 被背书人可以拒绝对票据背书的请求进行签收,拒绝以后,票据的持有人还是票据背书的发起者。拒绝背书的操作也会记录到票据的历史流转信息中。
123 |
124 | 5. 票据信息查询
125 |
126 | 票据信息查询可以获取自己持有的票据和待签收的票据,也可以根据票据号码查询票据的详细信息,包括票据的历史流转信息。
127 |
128 |
129 |
130 | 六 票据背书架构设计
131 |
132 | 根据票据背书的需求分析,下面设计一个简单的架构,再定义票据背书的数据模型。
133 |
134 |
135 |
136 | 1. 票据背书的分成架构
137 |
138 | 我们将基于区块链的数字票据进行分层设计,包括Hyperledger Fabric底层平台
139 |
140 | 智能合约、业务层和应用层,如下图所示。
141 |
142 | 1.1. 应用层
143 |
144 | 用户登录, 发布票据, 发起背书, 签收背书, 拒绝背书, 我的票据, 待签收票据, 票据详情
145 |
146 | 1.2. 业务层
147 |
148 | 用户管理, 票据管理, 其它...
149 |
150 | 1.3. 智能合约(链码)
151 |
152 | 票据发布, 票据背书, 票据背书签收, 票据背书拒签,
153 |
154 | 查询持票人票据, 查询待签收票据, 根据票据号码查询票据详情
155 |
156 | 1.4. 区块链底层平台
157 |
158 | CA, 区块链, 账本
159 |
160 | 每层的主要功能如下。
161 |
162 | - 区块链底层平台: 提供分布式共享账本的维护、状态数据库维护、智能合约的全生命周期管理等区块链功能,实现数据的不可篡改和智能合约的业务逻辑。根据第11章的内容搭建区块链网络以后,默认就提供了这部分功能。另外,通过fabric-ca提供成员注册和注销等功能。
163 |
164 | - 智能合约: 智能合约通过链码来实现,包括票据发布、票据背书、票据背书签收、票据背书拒绝等链码调用功能,链码查询包括查询持票人票据、查询待签收票据、根据链码号码查询票据信息等。票据系统的其他功能(比如贴现、转贴现、再贴现、回购等一系列业务类型) 都可以在智能合约里实现,这部分功能暂未完善。
165 |
166 | - 业务层: 业务层是应用程序的后端服务,给Web应用提供RESTful的接口,处理前端的业务请求。后端服务的基本功能包括用户管理和票据管理,通过Hyperledger Fabric提供的Go SDK和区块链网络进行通信。业务层也可以和其他的业务系统进行交互。
167 | - 应用层,Web应用采用jQuery+HTML+CSS 的前端架构编写页面,提供用户交互的界面操作,包括用户操作的功能
168 | 业务操作的功能。用户是内置的,只提供用户登录和用户退出操作。业务操作包括发布
169 | 查询持票人持有的票据、发起票据背书、查询待签收票据、签收票据背书、拒绝票据背书等功能。
170 | 各个层之间采用不同的接口,业务层的Go SDK、智能合约和区块链底层平台之间
171 | 用gRPC的接口。
172 |
173 | 2. 票据背书的数据模型
174 |
175 | 下面看一下链码设计的数据模型,包括票据数据结构定义和票据状态定义。
176 |
177 | a. 票据数据结构
178 |
179 | 票据信息包括票据基本信息、出票人信息、承兑人信息、收款人信息、持票人信息、待背书人信息、拒绝背书人信息、票据状态和票据背书历史等,数据结构定义如下:
180 |
181 | //票据数据结构
182 | type Bill struct {
183 | BillInfoID string `json:BillInfoID` //票据号码
184 | BillInfoAmt string `json:BillInfoAmt` //票据金额
185 | BillInfoType string `json:BillInfoType` //票据类型
186 | BillInfoIsseDate string `json:BillInfoIsseDate` //票据出票日期
187 | BillInfoDueDate string `json:BillInfoDueDate` //票据到期日期
188 | DrwrCmID string `json:DrwrCmID` //出票人证件号码
189 | DrwrAcct string `json:DrwrAcct` //出票人名称
190 | AccptrCmID string `json:AccptrCmID` //承兑人证件号码
191 | AccptrAcct string `json:AccptrAcct` //承兑人名称
192 | PyeeCmID string `json:PyeeCmID` //收款人证件号码
193 | PyeeAcct string `json:PyeeAcct` //收款人名称
194 | HoldrCmID string `json:HodrCmID` //持票人证件号码
195 | HoldrAcct string `json:HodrAcct` //持票人名称
196 | WaitEndorserCmID string `json:WaitEndorserCmID` //待背书人证件号码
197 | WaitEndorserAcct string `json:WaitEndorserAcct` //待背书人名称
198 | RejectEndorserCmID string `json:RejectEndorserCmID`//拒绝背书人证件号码
199 | RejectEndorserAcct string `json:RejectEndorserAcct`//拒绝背书人名称
200 | State string `json:State` //票据状态
201 | History []HistoryItem `json:History` //背书历史
202 | }
203 |
204 | 票据历史信息包含了票据的流转信息,比如票据发布、票据签收、票据拒绝等都会记录到历史信息中,数据结构定义如下:
205 |
206 | // 背书历史item结构
207 | type HistoryItem struct {
208 | TxId string `json:"txId"`
209 | Bill Bill `json:"bill"`
210 | }
211 |
212 | 票据历史信息是智能合约自动完成的。
213 |
214 | b. 票据状态模型
215 |
216 | 票据状态定义如下:
217 |
218 | 票据状态 NewPublish EndrWaitSign EndrSigned EndrReject
219 | 状态说明 票据新发布 票据等待签收 票据签收成功 票据被拒绝签收
220 |
221 | 票据发布以后进人票据新发布状态NewPublish,票据持票人可以提交票据背书的操作进行票据权利转移,进入票据等待签收的状态EndrWaitSign
222 |
223 | 票据被背书人接收到票据背书请求后,可以选择签收票据或者拒绝签收,票据签收成功进入状态EndrSigned,持票人转移为被背书人;
224 |
225 | 拒绝签收进人状态EndrReject,持票人保持不变还是原有的持票人。
226 |
227 | 处于Endrsigned 和EndrRejet 状态的持票人都可以再次发起票据背书的请求,进入下一轮的操作。
228 |
229 |
230 |
231 | 搭建应用程序运行的基础环境(fabric实现)
232 |
233 | 链码开发
234 |
235 | 业务处理
236 |
237 | 应用层
238 |
239 | web
240 |
--------------------------------------------------------------------------------
/blockchain/.idea/blockchain.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/blockchain/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/blockchain/.idea/workspace.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
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 |
35 |
36 |
37 |
38 |
39 |
40 |
45 |
46 |
47 |
48 |
49 | true
50 | DEFINITION_ORDER
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
--------------------------------------------------------------------------------
/blockchain/startInit.go:
--------------------------------------------------------------------------------
1 | package blockchain
2 |
3 | import (
4 | "github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
5 | "github.com/hyperledger/fabric-sdk-go/api/apitxn/resmgmtclient"
6 | "fmt"
7 | "github.com/hyperledger/fabric-sdk-go/pkg/config"
8 | "github.com/hyperledger/fabric-sdk-go/api/apitxn/chmgmtclient"
9 | "time"
10 | "github.com/hyperledger/fabric-sdk-go/pkg/fabric-client/ccpackager/gopackager"
11 | "github.com/hyperledger/fabric-sdk-go/third_party/github.com/hyperledger/fabric/common/cauthdsl"
12 | "github.com/hyperledger/fabric-sdk-go/api/apitxn/chclient"
13 | )
14 | //链码版本号,请注意链码版本,如果想更新链码,请文件中设置的版本号。 否则,网络将保持相同的链码。
15 | const chaincodeVersion="1.0"
16 |
17 | // 包括创建SDK需要的参数
18 | type FabricSetup struct {
19 | //指定创建SDK时候所依赖的参数全部放在这个配置文件中,那么应用程序启动的时候。指定配置文件所在的路径。
20 | ConfigFile string
21 | //通道名称
22 | ChannelID string
23 | //是否被初始化成功
24 | Initialized bool
25 | //通道配置文件,利用这个文件来创建通道
26 | ChannelConfig string
27 | //组织管理员
28 | OrgAdmin string
29 | //组织名称
30 | OrgName string
31 | //资源管理客户端对象
32 | admin resmgmtclient.ResourceMgmtClient
33 | //sdk对象
34 | sdk *fabsdk.FabricSDK
35 |
36 | //链码相关
37 | //链码ID
38 | ChaincodeID string
39 | //GOPATH路径
40 | ChaincodeGoPath string
41 | //链码路径
42 | ChaincodePath string
43 | //链码所使用的用户
44 | UserName string
45 | //通道的客户端
46 | Client chclient.ChannelClient
47 | }
48 |
49 | //创建并初始化Fabric-SDK
50 | func (t *FabricSetup) Initialize() error {
51 | fmt.Println("开始初始化SDK。。。")
52 | //判断SDK是否已经被初始化
53 | if t.Initialized {
54 | return fmt.Errorf("SDK已被实例化!")
55 | }
56 | //根据指定的SDK配置文件创建SDK对象
57 | sdk,err:=fabsdk.New(config.FromFile(t.ConfigFile))
58 | if err!=nil{
59 | return fmt.Errorf("SDK创建失败:%s",err)
60 | }
61 | //将获取到的SDK对象赋值到结构体中
62 | t.sdk=sdk
63 | /*
64 | 1.根据指定的具有特权的用户创建用于管理通道的客户端API,t.sdk调用NewClient方法返回ChannelMgmt对象,NewClient里面必须指定当前
65 | 组织具备最高管理权限的用户OrgAdmin,并指定该用户的组织名称
66 | */
67 | chMgmtClient,err:=t.sdk.NewClient(fabsdk.WithUser(t.OrgAdmin),fabsdk.WithOrg(t.OrgName)).ChannelMgmt()
68 | if err!=nil{
69 | return fmt.Errorf("创建应用通道管理对象失败:%s",err)
70 | }
71 | //2.获取客户端的会话用户(目前只有session方法能够获取),session有下划线代表已过时,但是能用
72 | session,err:=t.sdk.NewClient(fabsdk.WithUser(t.OrgAdmin),fabsdk.WithOrg(t.OrgName)).Session()
73 | if err!=nil{
74 | return fmt.Errorf("获取会话用户失败 %s, %s: %s\n", t.OrgName, t.OrgAdmin, err)
75 | }
76 | orgAdminUser:=session
77 | //3.指定用于创建或更新通道的参数,获取到的是response对象,只有创建了通道后,我们才能安装链码,实例化链码,测试链码
78 | // 把创建的应用通道的参数对象必须赋值给一个变量,否则报错
79 | req:=chmgmtclient.SaveChannelRequest{ChannelID:t.ChannelID,ChannelConfig:t.ChannelConfig,SigningIdentity:orgAdminUser}
80 | //4.使用指定的参数创建或更新通道,把上面的req对象传递进去
81 | err =chMgmtClient.SaveChannel(req)
82 | if err!=nil{
83 | return fmt.Errorf("创建应用通道时发生错误:%s",err)
84 | }
85 |
86 | time.Sleep(time.Second*5)
87 |
88 | //创建一个用于管理系统资源的客户端API,有了这个用户,才能有权将peer加入通道,参数不需要指定OrgName了,因为是要管理当前网络所有资源,并不是特定的。只需要指定OrgAdmin就可以了
89 | t.admin,err=t.sdk.NewClient(fabsdk.WithUser(t.OrgAdmin)).ResourceMgmt()
90 | if err!=nil{
91 | return fmt.Errorf("创建资源管理客户端失败: %v\n", err)
92 | }
93 |
94 | // 将peer加入到指定的通道
95 | if err=t.admin.JoinChannel(t.ChannelID);err!=nil{
96 | return fmt.Errorf("peer节点加入通道失败: %v\n", err)
97 | }
98 |
99 | //设置SDK被初始化
100 | fmt.Println("初始化成功")
101 | t.Initialized=true
102 | return nil
103 | }
104 |
105 | //安装并实例化链码
106 | func (t *FabricSetup) InstallAndInstantiateCC()error {
107 | fmt.Println("开始安装链码.......")
108 | //创建一个新的链码包并使用我们的链码初始化
109 | ccPkg,err:=gopackager.NewCCPackage(t.ChaincodePath,t.ChaincodeGoPath)
110 | if err!=nil{
111 | return fmt.Errorf("创建链码包失败:%v\n",err)
112 | }
113 | //指定要安装链码的各项参数
114 | installCCReq:=resmgmtclient.InstallCCRequest{Name:t.ChaincodeID,Path:t.ChaincodePath,Version:chaincodeVersion,Package:ccPkg}
115 | //在Org Peer上安装链码
116 | _,err=t.admin.InstallCC(installCCReq)
117 | if err!=nil{
118 | return fmt.Errorf("安装链码失败:%v\n",err)
119 | }
120 | fmt.Println("链码安装成功!")
121 | fmt.Println("开始实例化链码........")
122 | //设置链码策略,指定链码组织使用Org1MSP
123 | ccPolicy:=cauthdsl.SignedByAnyMember([]string{"Org1MSP"})
124 | //指定实例化链码相关参数
125 | instantiateCCReq:=resmgmtclient.InstantiateCCRequest{Name:t.ChaincodeID,Path:t.ChaincodePath,Version:chaincodeVersion,Args:[][]byte{[]byte("init")},Policy:ccPolicy}
126 | //实例化链码
127 | err=t.admin.InstantiateCC(t.ChannelID,instantiateCCReq)
128 | if err!=nil{
129 | return fmt.Errorf("实例化链码失败:%v\n",err)
130 | }
131 | //创建通道客户端用于查询与执行事务
132 | t.Client,err=t.sdk.NewClient(fabsdk.WithUser(t.UserName)).Channel(t.ChannelID)
133 | if err!=nil{
134 | return fmt.Errorf("创建新的通道客户端失败:%v\n",err)
135 | }
136 | fmt.Println("链码实例化成功")
137 | return nil
138 | }
139 |
140 |
141 |
142 |
143 |
--------------------------------------------------------------------------------
/chaincode/billcc.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "github.com/hyperledger/fabric/core/chaincode/shim"
5 | "encoding/json"
6 | "github.com/hyperledger/fabric/protos/peer"
7 | )
8 |
9 | // 根据指定的票据号码获取对应的票据信息
10 | func (t *BillChainCode) getBill(stub shim.ChaincodeStubInterface, bill_No string) (Bill, bool) {
11 | var bill Bill
12 | // 1. 将定义的前缀与票据号码连接形成一个Key
13 | key := Bill_Prefix + bill_No
14 |
15 | // 2. 以Key为参数查询票据信息
16 | b, err := stub.GetState(key)
17 | if b == nil || err != nil {
18 | return bill, false
19 | }
20 |
21 | // 3. 反序列化查询到的票据
22 | err = json.Unmarshal(b, &bill)
23 | if err != nil{
24 | return bill, false
25 | }
26 |
27 | // 4. 返回
28 | return bill, true
29 | }
30 |
31 | // 保存指定的票据信息
32 | func (t *BillChainCode) putBill(stub shim.ChaincodeStubInterface, bill Bill) ([]byte, bool) {
33 | // 1. 将参数bill序列化
34 | b, err := json.Marshal(bill)
35 | if err != nil {
36 | return nil, false
37 | }
38 |
39 | // 2. 以定义的前缀与票据号码连接形成一个Key将bill保存在账本中
40 | err = stub.PutState(Bill_Prefix + bill.BillInfoID, b)
41 | if err != nil {
42 | return nil, false
43 | }
44 |
45 | // 3. 返回
46 | return b, true
47 | }
48 |
49 |
50 | // 发布票据
51 | // args: 0 - {bill object}
52 | func (t *BillChainCode) issue(stub shim.ChaincodeStubInterface, args[] string) peer.Response {
53 | // 1. 检查参数个数是否为一个
54 | if len(args) != 1 {
55 | res := GetRetString(1, "发布票据指定的参数个数只能是一个")
56 | return shim.Error(res)
57 | }
58 |
59 | // 2. 反序列化args[0]参数为bill
60 | var bill Bill
61 | err := json.Unmarshal([]byte(args[0]), &bill)
62 | if err != nil {
63 | res := GetRetString(1, "发布票据时指定的票据信息反序列化失败")
64 | return shim.Error(res)
65 | }
66 |
67 | // 3. 查重(根据票据号码查询是否存在. 如果根据票据号码查询到信息, 证明已存在)
68 | _, exist := t.getBill(stub, bill.BillInfoID)
69 | if exist {
70 | res := GetRetString(1, "发布票据失败, 该票据号码已存在: " + bill.BillInfoID)
71 | return shim.Error(res)
72 | }
73 |
74 | // 4. 更改票据状态(票据状态设为新发布). 并保存票据:
75 | bill.State = BillInfo_State_NewPublish
76 |
77 | _, bl := t.putBill(stub, bill)
78 | if !bl {
79 | res := GetRetString(1,"发布票据失败, 保存票据信息时发生错误!")
80 | return shim.Error(res)
81 | }
82 |
83 | // 5. 保存以当前持票人ID与票据号码构造的复合键, 以便持票人批量查询. value为空即可
84 | holderNameBillNoIndexKey, err := stub.CreateCompositeKey(IndexName, []string{bill.HoldrCmID, bill.BillInfoID})
85 | if err != nil {
86 | res := GetRetString(1, "创建持票人ID与票据号码的复合键失败")
87 | return shim.Error(res)
88 | }
89 | stub.PutState(holderNameBillNoIndexKey, []byte{0x00})
90 |
91 | // 6. 返回
92 | res := GetRetByte(0, "票据发布成功")
93 | return shim.Success(res)
94 | }
95 |
96 |
97 | // 查询当前用户的票据(根据当前持票人证件号码, 批量查询票据)
98 | // args: 0 - holderCmId(当前持票人证件号码)
99 | func (t *BillChainCode) queryMyBills(stub shim.ChaincodeStubInterface, args []string) peer.Response {
100 | // 1. 检查参数个数是否为一个
101 | if len(args) != 1 {
102 | res := GetRetString(1, "查询票据失败, 给定的参数只能是当前持票人的证件号码")
103 | return shim.Error(res)
104 | }
105 |
106 | // 根据指定的组合键查询分类账上的状态ST
107 | // -- 在发布票据方法中实现了将复合键(持票人ID与票据号码构造的复合键)保存在分类账中
108 | // 2. 根据当前持票人证件号码从search中查询所持有的票号
109 | billsIterator, err := stub.GetStateByPartialCompositeKey(IndexName, []string{args[0]})
110 | if err != nil {
111 | res := GetRetString(1, "查询票据失败, 查询所持有的票号时发生错误")
112 | return shim.Error(res)
113 | }
114 | defer billsIterator.Close()
115 |
116 | // 3. 迭代处理
117 | var bills = []Bill{}
118 | for billsIterator.HasNext() {
119 | kv, _ := billsIterator.Next()
120 | // 获取持票人名下的票号
121 | _, compositeKeyParts, err := stub.SplitCompositeKey(kv.Key)
122 | if err != nil {
123 | res := GetRetString(1, "查询票据失败, 分割复合键时发生错误")
124 | return shim.Error(res)
125 | }
126 |
127 | // 根据获取到的票据号码查询对应的票据状态
128 | bill, bl := t.getBill(stub, compositeKeyParts[1])
129 | if !bl {
130 | res := GetRetString(1, "根据票据号码查询对应的票据状态时发生错误")
131 | return shim.Error(res)
132 | }
133 |
134 | bills = append(bills, bill)
135 | }
136 |
137 | // 4. 序列化票据数组
138 | b, err := json.Marshal(bills)
139 | if err != nil {
140 | res := GetRetString(1, "查询票据失败, 序列化票据状态时发生错误")
141 | return shim.Error(res)
142 | }
143 |
144 | // 5. 返回查询结果
145 | return shim.Success(b)
146 | }
147 |
148 | // 根据票据号码获取票据状态及该票据的背书历史
149 | // args: 0 - bill_No
150 | func (t *BillChainCode) queryBillByNo(stub shim.ChaincodeStubInterface, args []string) peer.Response {
151 | // 1. 检查参数个数是否为一个
152 | if len(args) != 1 {
153 | res := GetRetString(1, "获取票据状态及背书历史失败, 给定的参数必须为票据号码")
154 | return shim.Error(res)
155 | }
156 |
157 | // 2. 根据票据号码获取对应的票据状态
158 | bill, bl := t.getBill(stub, args[0])
159 | if !bl {
160 | res := GetRetString(1, "获取票据状态及背书历史失败, 根据给定的票据号码查询对应的票据状态时发生错误")
161 | return shim.Error(res)
162 | }
163 |
164 | // 3. 获取票据背书变更历史
165 | billIterator, err := stub.GetHistoryForKey(Bill_Prefix + args[0])
166 | if err != nil {
167 | res := GetRetString(1, "获取票据状态及背书历史失败, 查询背书历史变更时发生错误")
168 | return shim.Error(res)
169 | }
170 | defer billIterator.Close()
171 |
172 | // 4. 迭代处理
173 | var historys []HistoryItem
174 | var hisBill Bill
175 | for billIterator.HasNext() {
176 | historyData, err := billIterator.Next()
177 | if err != nil{
178 | res := GetRetString(1, "获取票据状态及背书历史失败, 处理票据变更历史时发生错误")
179 | return shim.Error(res)
180 | }
181 |
182 | var historyItem HistoryItem
183 | historyItem.TxId = historyData.TxId // 拷贝交易ID
184 | json.Unmarshal(historyData.Value, &hisBill)
185 | if historyData.Value == nil {
186 | var emptyBill Bill
187 | historyItem.Bill = emptyBill
188 | }else{
189 | historyItem.Bill = hisBill
190 | }
191 |
192 | historys = append(historys, historyItem)
193 | }
194 |
195 | // 5. 将背书历史做为票据的属性返回
196 | bill.History = historys
197 |
198 | // 6. 序列化bill
199 | b, err := json.Marshal(bill)
200 | if err != nil {
201 | res := GetRetString(1, "获取票据状态及背书历史失败, 序列化票据时发生错误")
202 | return shim.Error(res)
203 | }
204 |
205 | // 7. 返回结果
206 | return shim.Success(b)
207 | }
208 |
209 | //删除指定票据
210 | func (t *BillChainCode)delete(stub shim.ChaincodeStubInterface,args []string)peer.Response {
211 | // 1. 检查参数个数是否为一个
212 | if len(args) != 1 {
213 | res := GetRetString(1, "删除指定票据失败, 给定的参数必须为票据号码")
214 | return shim.Error(res)
215 | }
216 |
217 | // 2. 根据票据号码获取对应的票据状态
218 | _, bl := t.getBill(stub, args[0])
219 | if !bl {
220 | res := GetRetString(1, "获取票据状态及背书历史失败, 根据给定的票据号码查询对应的票据状态时发生错误")
221 | return shim.Error(res)
222 | }
223 |
224 | key := Bill_Prefix + args[0]
225 | err := stub.DelState(key)
226 | if err != nil {
227 | res := GetRetString(1, "删除票据失败")
228 | return shim.Error(res)
229 | }
230 |
231 | // 6. 返回
232 | res := GetRetByte(0, "票据删除成功")
233 | return shim.Success(res)
234 | }
235 |
236 |
237 | // 查询当前用户的待背书票据(根据待背书人证件号码)
238 | // args: 0 - endorserCmId
239 | func (t *BillChainCode) queryMyWaitBills(stub shim.ChaincodeStubInterface, args []string) peer.Response {
240 | // 1. 检查参数个数是否为一个
241 | if len(args) != 1 {
242 | res := GetRetString(1, "查询待背书票据失败, 必须指定待背书人的证件号码")
243 | return shim.Error(res)
244 | }
245 |
246 | // 2. 根据待背书人证件号码从search中查询待背书的票据号码
247 | // -- 票据背书请求方法中实现了将待背书人ID与票据号码构造的复合键信息的保存
248 | billIterator, err := stub.GetStateByPartialCompositeKey(IndexName, []string{args[0]})
249 | if err != nil {
250 | res := GetRetString(1, "查询待背书票据失败, 查询待背书人的票据号码时发生错误")
251 | return shim.Error(res)
252 | }
253 | defer billIterator.Close()
254 |
255 | // 3. 迭代处理
256 | var bills = []Bill{}
257 | for billIterator.HasNext() {
258 | kv, _ := billIterator.Next()
259 | _, compositeKeyParts, err := stub.SplitCompositeKey(kv.Key)
260 | if err != nil {
261 | res := GetRetString(1, "查询待背书票据失败, 分割复合键时发生错误")
262 | return shim.Error(res)
263 | }
264 |
265 | // 根据票据号码查询相应的票据状态
266 | bill, bl := t.getBill(stub, compositeKeyParts[1])
267 | if !bl {
268 | res := GetRetString(1, "查询待背书票据失败,根据待背书票据号码查询对应票据状态时发生错误")
269 | return shim.Error(res)
270 | }
271 |
272 | if bill.State == BillInfo_State_EndorseWaitSign && bill.WaitEndorseCmID == args[0]{
273 | bills = append(bills, bill)
274 | }
275 | }
276 |
277 | // 4. 序列化待背书票据数组
278 | b, err := json.Marshal(bills)
279 | if err != nil {
280 | res := GetRetString(1, "查询待背书票据失败, 序列化待背书票据数组时发生错误")
281 | return shim.Error(res)
282 | }
283 |
284 | // 5. 返回结果
285 | return shim.Success(b)
286 | }
287 |
288 |
--------------------------------------------------------------------------------
/chaincode/endorserCC.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "github.com/hyperledger/fabric/core/chaincode/shim"
5 | "github.com/hyperledger/fabric/protos/peer"
6 | "encoding/json"
7 | )
8 |
9 | // 票据背书请求
10 | // args: 0 - Bill_No; 1 - endorseCmId(待背书人ID); 2 - endorseAcct(待背书人名称)
11 | func (t *BillChainCode) endorse(stub shim.ChaincodeStubInterface, args []string) peer.Response {
12 | // 1. 检查参数长度是否为3(票据号码, 待背书人ID, 待背书人名称)
13 | if len(args) < 3 {
14 | res := GetRetString(1, "票据背书失败, 请求背书的参数不能少于3个")
15 | return shim.Error(res)
16 | }
17 |
18 | // 2. 根据票据号码获取票据状态
19 | bill, bl := t.getBill(stub, args[0])
20 | if !bl {
21 | res := GetRetString(1, "票据背书失败, 根据票据号码获取票据状态时发生错误")
22 | return shim.Error(res)
23 | }
24 |
25 | // 3. 检查待背书人与当前持票人是否为同一人
26 | if bill.HoldrCmID == args[1] {
27 | res := GetRetString(1, "票据背书失败, 待背书人与当前持票人不能为同一人")
28 | return shim.Error(res)
29 | }
30 |
31 | // 4. 获取票据历史变更数据
32 | resultIterator, err := stub.GetHistoryForKey(Bill_Prefix + args[0])
33 | if err != nil {
34 | res := GetRetString(1, "票据背书失败, 查询该票据的历史变更状态时发生错误")
35 | return shim.Error(res)
36 | }
37 | defer resultIterator.Close()
38 |
39 | // 5. 检查待背书人是否为票据历史持有人
40 | var hisBill Bill
41 | for resultIterator.HasNext(){
42 | historyData, err := resultIterator.Next()
43 | if err != nil {
44 | res := GetRetString(1, "票据背书失败, 处理变更历史数据时发生错误")
45 | return shim.Error(res)
46 | }
47 |
48 | json.Unmarshal(historyData.Value, &hisBill)
49 | if historyData.Value == nil{
50 | var emptyBill Bill
51 | hisBill = emptyBill
52 | }
53 |
54 | if hisBill.HoldrCmID == args[1]{
55 | res := GetRetString(1, "票据背书失败, 待背书人不应是票据历史持有人")
56 | return shim.Error(res)
57 | }
58 |
59 | }
60 |
61 | // 6. 更改票据信息与状态: 添加待背书人信息(证件号码与名称), 票据状态更改为待背书, 重置已拒绝背书人
62 | bill.WaitEndorseCmID = args[1]
63 | bill.WaitEndorseAcct = args[2]
64 | bill.State = BillInfo_State_EndorseWaitSign
65 | bill.RejectEndorseCmID = ""
66 | bill.RejectEndorseAcct = ""
67 |
68 | // 7. 保存票据
69 | _, bl = t.putBill(stub, bill)
70 | if !bl {
71 | res := GetRetString(1, "票据背书失败, 保存票据状态时发生错误")
72 | return shim.Error(res)
73 | }
74 |
75 | // 8. 保存以待背书人ID与票据号码构造的复合键, 以便待背书人批量查询. value为空即可
76 | holderNameBillNoIndexKey, err := stub.CreateCompositeKey(IndexName, []string{bill.WaitEndorseCmID, bill.BillInfoID})
77 | if err != nil {
78 | res := GetRetString(1, "创建待背书人ID与票据复合键失败")
79 | return shim.Error(res)
80 | }
81 | stub.PutState(holderNameBillNoIndexKey, []byte{0x00})
82 |
83 | // 9. 返回
84 | res := GetRetByte(0, "背书请求成功")
85 | return shim.Success(res)
86 | }
87 |
88 |
89 | // 票据背书签收
90 | // args: 0 - Bill_No; 1 - endorseCmId(待背书人ID); 2 - endorseAcct(待背书人名称)
91 | func (t *BillChainCode) accept(stub shim.ChaincodeStubInterface, args []string) peer.Response {
92 | // 1. 检查参数长度是否为3(票据号码, 待背书人ID, 待背书人名称)
93 | if len(args) < 3 {
94 | res := GetRetString(1, "票据背书签收失败, 参数不能少于3个")
95 | return shim.Error(res)
96 | }
97 |
98 | // 2. 根据票据号码获取票据状态
99 | bill, bl := t.getBill(stub, args[0])
100 | if !bl {
101 | res := GetRetString(1, "票据背书签收失败, 根据票据号码查询对应票据状态时发生错误")
102 | return shim.Error(res)
103 | }
104 |
105 | // 3. 以前手持票人ID与票据号码构造复合键, 删除该key, 以便前手持票人无法再查到该票据
106 | holderNameBillNoIndexKey, err := stub.CreateCompositeKey(IndexName, []string{bill.HoldrCmID, bill.BillInfoID})
107 | if err != nil{
108 | res := GetRetString(1, "票据背书签收失败, 创建持票人ID与票据号码复合键时发生错误")
109 | return shim.Error(res)
110 | }
111 | stub.DelState(holderNameBillNoIndexKey)
112 |
113 | // 4. 更改票据信息与状态: 将当前持票人更改为待背书人(证件与名称), 票据状态更改为背书签收, 重置待背书人
114 | bill.HoldrCmID = args[1]
115 | bill.HoldrAcct = args[2]
116 | bill.State = BillInfo_State_EndorseSigned
117 | bill.WaitEndorseCmID = ""
118 | bill.WaitEndorseAcct = ""
119 |
120 | // 5. 保存票据
121 | _, bl = t.putBill(stub, bill)
122 | if !bl {
123 | res := GetRetString(1, "票据背书签收失败, 保存票据状态时发生错误")
124 | return shim.Error(res)
125 | }
126 |
127 | // 6. 返回
128 | res := GetRetByte(0, "票据背书签收成功")
129 | return shim.Success(res)
130 | }
131 |
132 | // 票据背书拒签(拒绝背书)
133 | // args: 0 - bill_NO; 1 - endorseCmId(待背书人ID); 2 - endorseAcct(待背书人名称)
134 | func (t *BillChainCode) reject(stub shim.ChaincodeStubInterface, args []string) peer.Response {
135 | // 1. 检查参数长度是否为3(票据号码, 待背书人ID, 待背书人名称)
136 | if len(args) < 3 {
137 | res := GetRetString(1, "票据背书拒签失败, 参数不能少于3个")
138 | return shim.Error(res)
139 | }
140 |
141 | // 2. 根据票据号码查询对应的票据状态
142 | bill, bl := t.getBill(stub, args[0])
143 | if !bl {
144 | res := GetRetString(1, "票据背书拒签失败, 根据票据号码查询对应的票据状态时发生错误")
145 | return shim.Error(res)
146 | }
147 |
148 | // 3. 以待背书人ID及票据号码构造复合键, 从search中删除该key, 以便当前被背书人无法再次查询到该票据
149 | holderNameBillNoIndexKey, err := stub.CreateCompositeKey(IndexName, []string{args[1], bill.BillInfoID})
150 | if err != nil {
151 | res := GetRetString(1, "票据背书拒签失败, 以待背书人ID及票据号码构造复合键时发生错误")
152 | return shim.Error(res)
153 | }
154 | stub.DelState(holderNameBillNoIndexKey)
155 |
156 | // 4. 更改票据信息与状态: 将拒绝背书人更改为当前待背书人(证件号码与名称), 票据状态更改为背书拒绝, 重置待背书人
157 | bill.RejectEndorseCmID = args[1]
158 | bill.RejectEndorseAcct = args[2]
159 | bill.State = BillInfo_State_EndorseReject
160 | bill.WaitEndorseCmID = ""
161 | bill.WaitEndorseAcct = ""
162 |
163 | // 5. 保存票据状态
164 | _, bl = t.putBill(stub, bill)
165 | if !bl {
166 | res := GetRetString(1, "票据背书拒签失败, 保存票据状态时发生错误")
167 | return shim.Error(res)
168 | }
169 |
170 | // 6. 返回
171 | res := GetRetByte(0, "票据背书拒签成功")
172 | return shim.Success(res)
173 | }
174 |
--------------------------------------------------------------------------------
/chaincode/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "github.com/hyperledger/fabric/core/chaincode/shim"
5 | "github.com/hyperledger/fabric/protos/peer"
6 | "fmt"
7 | )
8 |
9 | type BillChainCode struct {
10 |
11 | }
12 |
13 | func (t *BillChainCode) Init(stub shim.ChaincodeStubInterface) peer.Response {
14 | return shim.Success(nil)
15 | }
16 |
17 | func (t *BillChainCode) Invoke(stub shim.ChaincodeStubInterface) peer.Response {
18 | function, args := stub.GetFunctionAndParameters()
19 |
20 | if function == "issue" {
21 | return t.issue(stub, args) //發布票據
22 | }else if function == "queryMyBills" {
23 | return t.queryMyBills(stub, args)
24 | }else if function == "queryBillByNo" {
25 | return t.queryBillByNo(stub, args)
26 | }else if function == "queryMyWaitBills" {
27 | return t.queryMyWaitBills(stub, args)
28 | }else if function == "endorse" {
29 | return t.endorse(stub, args)
30 | }else if function == "accept" {
31 | return t.accept(stub, args)
32 | }else if function == "reject" {
33 | return t.reject(stub, args)
34 | }else if function == "delete"{
35 | return t.delete(stub,args)
36 | }
37 |
38 | return shim.Error("指定的函数名称错误")
39 | }
40 |
41 | func main() {
42 | err := shim.Start(new(BillChainCode))
43 | if err != nil {
44 | fmt.Println("启动链码错误: ", err)
45 | }
46 | }
--------------------------------------------------------------------------------
/chaincode/structure.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | // 票据状态
4 | const (
5 | BillInfo_State_NewPublish = "NewPublish" // 新发布票据
6 | BillInfo_State_EndorseWaitSign = "EndorseWaitSign" // 等待签收票据
7 | BillInfo_State_EndorseSigned = "EndorseSigned" // 票据签收成功
8 | BillInfo_State_EndorseReject = "EndorseReject" // 拒绝签收票据
9 | )
10 |
11 | const (
12 | Bill_Prefix = "Bill_" // 票据key前缀
13 | IndexName = "holderName~billNo" // search的映射名
14 | )
15 |
16 | const HolderIdDayTimeBillTypeBillNoIndexName = "holderId~dayTime-billType-billNo"
17 |
18 | // 票据数据结构
19 | type Bill struct {
20 | BillInfoID string `json:"BillInfoID"` // 票据号码
21 | BillInfoAmt string `json:"BillInfoAmt"` // 票据金额
22 | BillInfoType string `json:"BillInfoType"` // 票据类型
23 |
24 | BillInfoIsseDate string `json:"BillInfoIsseDate"` // 票据出票日期
25 | billInfoDueDate string `json:"billInfoDueDate"` // 票据到期日期
26 |
27 | DrwrCmID string `json:"DrwrCmID"` // 出票人证件号码
28 | DrwrAcct string `json:"DrwrAcct"` // 出票人名称
29 |
30 | AccptrCmID string `json:"AccptrCmID"` // 承兑人证件号码
31 | AccptrAcct string `json:"AccptrAcct"` // 承兑人名称
32 |
33 | PyeeCmID string `json:"PyeeCmID"` // 收款人证件号码
34 | PyeeAcct string `json:"PyeeAcct"` // 收款人名称
35 |
36 | HoldrCmID string `json:"HodrCmID"` // 当前持票人证件号码
37 | HoldrAcct string `json:"HodrAcct` // 当前持票人名称
38 |
39 | WaitEndorseCmID string `json:"WaitEndorseCmID"` // 待背书人证件号码
40 | WaitEndorseAcct string `json:"WaitEndorseAcct"` // 待背书人名称
41 |
42 | RejectEndorseCmID string `json:"RejectEndorseCmID"` // 拒绝背书人证件号码
43 | RejectEndorseAcct string `json:"RejectEndorseAcct"` // 拒绝背书人名称
44 |
45 | State string `json:"State"` // 票据状态
46 | History []HistoryItem `json:"History"` // 票据背书历史
47 | }
48 |
49 | // 票据历史信息
50 | type HistoryItem struct {
51 | TxId string `json:"TxId"`
52 | Bill Bill `json:"bill"`
53 | }
--------------------------------------------------------------------------------
/chaincode/utils.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "encoding/json"
5 | "fmt"
6 | )
7 |
8 | // chaincode Response结构
9 | type chaincodeRet struct {
10 | Code int // 0代表成功, 否则为1
11 | Dec string // 描述
12 | }
13 |
14 | // 根据返回码和描述信息返回序列化后的字节数组
15 | func GetRetByte(code int, dec string) ([]byte) {
16 | b, err := getRet(code, dec)
17 | if err != nil {
18 | return []byte{}
19 | }
20 | return b
21 | }
22 |
23 | // 根据返回码和描述信息返回序列化后的字符串
24 | func GetRetString(code int, dec string) (string) {
25 | b, err := getRet(code, dec)
26 | if err != nil {
27 | return ""
28 | }
29 | return string(b[:])
30 | }
31 |
32 | // 根据返回码和描述信息进行序列化
33 | func getRet(code int, dec string) ([]byte, error) {
34 | var c chaincodeRet
35 | c.Code = code
36 | c.Dec = dec
37 |
38 | b, err := json.Marshal(c)
39 | if err != nil {
40 | return []byte{0x00}, fmt.Errorf("序列化失败")
41 | }
42 | return b, err
43 | }
44 |
45 |
--------------------------------------------------------------------------------
/config.yaml:
--------------------------------------------------------------------------------
1 | name: "bill-network"
2 |
3 | # Describe what the target network is/does.
4 | description: "The network which will host my first blockchain"
5 |
6 | # Schema version of the content. Used by the SDK to apply the corresponding parsing rules.
7 | version: 2
8 |
9 | # The client section used by GO SDK.
10 | client:
11 | # Which organization does this application instance belong to? The value must be the name of an org
12 | organization: Org1
13 | logging:
14 | level: info
15 |
16 | # Global configuration for peer, event service and orderer timeouts
17 | peer:
18 | timeout:
19 | connection: 3s
20 | queryResponse: 45s
21 | executeTxResponse: 30s
22 | eventService:
23 | timeout:
24 | connection: 3s
25 | registrationResponse: 3s
26 | orderer:
27 | timeout:
28 | connection: 3s
29 | response: 5s
30 |
31 | # Root of the MSP directories with keys and certs. The Membership Service Providers is component that aims to offer an abstraction of a membership operation architecture.
32 | cryptoconfig:
33 | path: "${GOPATH}/src/github.com/kongyixueyuan.com/bill/fixtures/crypto-config"
34 |
35 | # Some SDKs support pluggable KV stores, the properties under "credentialStore" are implementation specific
36 | credentialStore:
37 | path: "/tmp/bill-kvs"
38 |
39 | # [Optional]. Specific to the CryptoSuite implementation used by GO SDK. Software-based implementations requiring a key store. PKCS#11 based implementations does not.
40 | cryptoStore:
41 | path: "/tmp/bill-msp"
42 |
43 | # BCCSP config for the client. Used by GO SDK. It's the Blockchain Cryptographic Service Provider.
44 | # It offers the implementation of cryptographic standards and algorithms.
45 | BCCSP:
46 | security:
47 | enabled: true
48 | default:
49 | provider: "SW"
50 | hashAlgorithm: "SHA2"
51 | softVerify: true
52 | ephemeral: false
53 | level: 256
54 |
55 | tlsCerts:
56 | systemCertPool: false
57 |
58 | # [Optional]. But most apps would have this section so that channel objects can be constructed based on the content below.
59 | # If one of your application is creating channels, you might not use this
60 | channels:
61 | mychannel:
62 | orderers:
63 | - orderer.example.com
64 |
65 | # Network entity which maintains a ledger and runs chaincode containers in order to perform operations to the ledger. Peers are owned and maintained by members.
66 | peers:
67 | peer0.org1.example.com:
68 | # [Optional]. will this peer be sent transaction proposals for endorsement? The peer must
69 | # have the chaincode installed. The app can also use this property to decide which peers
70 | # to send the chaincode install request. Default: true
71 | endorsingPeer: true
72 |
73 | # [Optional]. will this peer be sent query proposals? The peer must have the chaincode
74 | # installed. The app can also use this property to decide which peers to send the
75 | # chaincode install request. Default: true
76 | chaincodeQuery: true
77 |
78 | # [Optional]. will this peer be sent query proposals that do not require chaincodes, like
79 | # queryBlock(), queryTransaction(), etc. Default: true
80 | ledgerQuery: true
81 |
82 | # [Optional]. will this peer be the target of the SDK's listener registration? All peers can
83 | # produce events but the app typically only needs to connect to one to listen to events.
84 | # Default: true
85 | eventSource: true
86 |
87 | peer1.org1.example.com:
88 |
89 | # List of participating organizations in this network
90 | organizations:
91 | Org1:
92 | mspid: Org1MSP
93 | cryptoPath: "peerOrganizations/org1.example.com/users/{userName}@org1.example.com/msp"
94 | peers:
95 | - peer0.org1.example.com
96 | - peer1.org1.example.com
97 | certificateAuthorities:
98 | - ca.org1.example.com
99 |
100 | # List of orderers to send transaction and channel create/update requests to.
101 | # The orderers consent on the order of transactions in a block to be committed to the ledger. For the time being only one orderer is needed.
102 | orderers:
103 | orderer.example.com:
104 | url: grpcs://localhost:7050
105 | grpcOptions:
106 | ssl-target-name-override: orderer.example.com
107 | grpc-max-send-message-length: 15
108 | tlsCACerts:
109 | path: "${GOPATH}/src/github.com/kongyixueyuan.com/bill/fixtures/crypto-config/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem"
110 |
111 | # List of peers to send various requests to, including endorsement, query and event listener registration.
112 | peers:
113 | peer0.org1.example.com:
114 | # this URL is used to send endorsement and query requests
115 | url: grpcs://localhost:7051
116 | # this URL is used to connect the EventHub and registering event listeners
117 | eventUrl: grpcs://localhost:7053
118 | # These parameters should be set in coordination with the keepalive policy on the server
119 | grpcOptions:
120 | ssl-target-name-override: peer0.org1.example.com
121 | grpc.http2.keepalive_time: 15
122 |
123 | tlsCACerts:
124 | path: "${GOPATH}/src/github.com/kongyixueyuan.com/bill/fixtures/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem"
125 |
126 | peer1.org1.example.com:
127 | url: grpcs://localhost:8051
128 | eventUrl: grpcs://localhost:8053
129 | grpcOptions:
130 | ssl-target-name-override: peer1.org1.example.com
131 | grpc.http2.keepalive_time: 15
132 | tlsCACerts:
133 | # Certificate location absolute path
134 | path: "${GOPATH}/src/github.com/kongyixueyuan.com/bill/fixtures/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem"
135 |
136 | # Fabric-CA is a special kind of Certificate Authority provided by Hyperledger Fabric which allows certificate management to be done via REST APIs.
137 | certificateAuthorities:
138 | ca.org1.example.com:
139 | url: https://localhost:7054
140 | # the properties specified under this object are passed to the 'http' client verbatim when making the request to the Fabric-CA server
141 | httpOptions:
142 | verify: false
143 | registrar:
144 | enrollId: admin
145 | enrollSecret: adminpw
146 | caName: ca.org1.example.com
147 |
--------------------------------------------------------------------------------
/fixtures/artifacts/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitchenjh/bill/f0375b41821e285ba03d68a7a189d41b97f20b77/fixtures/artifacts/.gitkeep
--------------------------------------------------------------------------------
/fixtures/artifacts/Org1MSPanchors.tx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitchenjh/bill/f0375b41821e285ba03d68a7a189d41b97f20b77/fixtures/artifacts/Org1MSPanchors.tx
--------------------------------------------------------------------------------
/fixtures/artifacts/Org2MSPanchors.tx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitchenjh/bill/f0375b41821e285ba03d68a7a189d41b97f20b77/fixtures/artifacts/Org2MSPanchors.tx
--------------------------------------------------------------------------------
/fixtures/artifacts/channel.tx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitchenjh/bill/f0375b41821e285ba03d68a7a189d41b97f20b77/fixtures/artifacts/channel.tx
--------------------------------------------------------------------------------
/fixtures/artifacts/genesis.block:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitchenjh/bill/f0375b41821e285ba03d68a7a189d41b97f20b77/fixtures/artifacts/genesis.block
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/ca/00f3d3f738be05a8dff0b1c76e49e642141165d3cc650596e95ff926a29ac22d_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgZH3hUiUDd3icxB6Y
3 | bNJgCkPPIBIL7buFaF6L5X5u8YqhRANCAATDywCe6RZO1JaeuUUCo/Un2U2NOofB
4 | oQUaDv7RGghe6UPOT3VA+JwPUSIsuyjXvKIcQvl8AToEPZKNCMjKo+Vb
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICLzCCAdagAwIBAgIRAPl+76Xs12iXaZzeeBa96iIwCgYIKoZIzj0EAwIwaTEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
5 | cGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMGkxCzAJBgNV
6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
7 | c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j
8 | b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATDywCe6RZO1JaeuUUCo/Un2U2N
9 | OofBoQUaDv7RGghe6UPOT3VA+JwPUSIsuyjXvKIcQvl8AToEPZKNCMjKo+Vbo18w
10 | XTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTAD
11 | AQH/MCkGA1UdDgQiBCAA89P3OL4FqN/wscduSeZCFBFl08xlBZbpX/kmoprCLTAK
12 | BggqhkjOPQQDAgNHADBEAiBq1RsjDK/iMgFLHtvlQw8COnWw0qgK4OPkhnImzf3Q
13 | oQIgTMq6D1UaZilT911gpJGtaLvTVV/7u7f9nzECNrMPBMY=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/msp/admincerts/Admin@example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICCjCCAbGgAwIBAgIRAKYJvAc3sRklKG+IaAYhDyQwCgYIKoZIzj0EAwIwaTEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
5 | cGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMFYxCzAJBgNV
6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
7 | c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG
8 | SM49AwEHA0IABPTwAvIouEqIDfZzl88PgjSif/Xop3fNjrITYQVGxSYto3Ca/jHo
9 | POuKuVT/BiPHkgJn/N8rUQ8uQNCl5YJb1FajTTBLMA4GA1UdDwEB/wQEAwIHgDAM
10 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIADz0/c4vgWo3/Cxx25J5kIUEWXTzGUF
11 | lulf+SaimsItMAoGCCqGSM49BAMCA0cAMEQCIHTrtNyNwhV7uGD2a9rUVlVMPE2l
12 | PHJSzTjoOVSIfl6PAiAx2b9EAyoFo1gid3obIaAM/rrCxn5MNbepaZD1jas1cg==
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/msp/cacerts/ca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICLzCCAdagAwIBAgIRAPl+76Xs12iXaZzeeBa96iIwCgYIKoZIzj0EAwIwaTEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
5 | cGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMGkxCzAJBgNV
6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
7 | c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j
8 | b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATDywCe6RZO1JaeuUUCo/Un2U2N
9 | OofBoQUaDv7RGghe6UPOT3VA+JwPUSIsuyjXvKIcQvl8AToEPZKNCMjKo+Vbo18w
10 | XTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTAD
11 | AQH/MCkGA1UdDgQiBCAA89P3OL4FqN/wscduSeZCFBFl08xlBZbpX/kmoprCLTAK
12 | BggqhkjOPQQDAgNHADBEAiBq1RsjDK/iMgFLHtvlQw8COnWw0qgK4OPkhnImzf3Q
13 | oQIgTMq6D1UaZilT911gpJGtaLvTVV/7u7f9nzECNrMPBMY=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/msp/tlscacerts/tlsca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICNjCCAdygAwIBAgIRAL5RCKU95gD4u2Dm5BPsG0owCgYIKoZIzj0EAwIwbDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
5 | eGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMGwxCzAJ
6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
7 | bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
8 | bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARukLd5kqpA8oi5x0F4
9 | 5+uK4/8YiWJ2H3SWo3KrtjY9QJZRtfTn5HjdC5TZyDfWezjUqrIoduKpcJHqvoRp
10 | hFPKo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
11 | Af8EBTADAQH/MCkGA1UdDgQiBCBm4HllejgT/fmz7L170X336wrCPgJf2IzVDbHg
12 | keLT7DAKBggqhkjOPQQDAgNIADBFAiEAqbk6Tzt1W3WRXf2uD59W3Bn8CLe/Ndr3
13 | Fvu3As6XV5gCICPl/tcRAZbXnZX2Ix9z5Hg0S+hKLZpdBhZil3c4Ysu1
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/admincerts/Admin@example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICCjCCAbGgAwIBAgIRAKYJvAc3sRklKG+IaAYhDyQwCgYIKoZIzj0EAwIwaTEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
5 | cGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMFYxCzAJBgNV
6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
7 | c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG
8 | SM49AwEHA0IABPTwAvIouEqIDfZzl88PgjSif/Xop3fNjrITYQVGxSYto3Ca/jHo
9 | POuKuVT/BiPHkgJn/N8rUQ8uQNCl5YJb1FajTTBLMA4GA1UdDwEB/wQEAwIHgDAM
10 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIADz0/c4vgWo3/Cxx25J5kIUEWXTzGUF
11 | lulf+SaimsItMAoGCCqGSM49BAMCA0cAMEQCIHTrtNyNwhV7uGD2a9rUVlVMPE2l
12 | PHJSzTjoOVSIfl6PAiAx2b9EAyoFo1gid3obIaAM/rrCxn5MNbepaZD1jas1cg==
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICLzCCAdagAwIBAgIRAPl+76Xs12iXaZzeeBa96iIwCgYIKoZIzj0EAwIwaTEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
5 | cGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMGkxCzAJBgNV
6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
7 | c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j
8 | b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATDywCe6RZO1JaeuUUCo/Un2U2N
9 | OofBoQUaDv7RGghe6UPOT3VA+JwPUSIsuyjXvKIcQvl8AToEPZKNCMjKo+Vbo18w
10 | XTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTAD
11 | AQH/MCkGA1UdDgQiBCAA89P3OL4FqN/wscduSeZCFBFl08xlBZbpX/kmoprCLTAK
12 | BggqhkjOPQQDAgNHADBEAiBq1RsjDK/iMgFLHtvlQw8COnWw0qgK4OPkhnImzf3Q
13 | oQIgTMq6D1UaZilT911gpJGtaLvTVV/7u7f9nzECNrMPBMY=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/c12bedd969be10bf8297668c470a02602939bb185635f0cebc31d826cb5d31d5_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgUw17kq/rPHNHHUz3
3 | ln+zcYV5injiv5bcYLBrpG1B1LqhRANCAATZR75Colm0kW5TOdJ5wFAaZTuBU9Hj
4 | DvmQ25SDHPjK7kOKrB/vLtPmu63+beCNJ9IPAzVhP8R9rZOlKMjMZ0xb
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICDDCCAbKgAwIBAgIQbqEqo8LvdlsjhtgBMdjTzzAKBggqhkjOPQQDAjBpMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
5 | bGUuY29tMB4XDTE4MDYyODA4MjYyOFoXDTI4MDYyNTA4MjYyOFowWDELMAkGA1UE
6 | BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
7 | Y28xHDAaBgNVBAMTE29yZGVyZXIuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggq
8 | hkjOPQMBBwNCAATZR75Colm0kW5TOdJ5wFAaZTuBU9HjDvmQ25SDHPjK7kOKrB/v
9 | LtPmu63+beCNJ9IPAzVhP8R9rZOlKMjMZ0xbo00wSzAOBgNVHQ8BAf8EBAMCB4Aw
10 | DAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCAA89P3OL4FqN/wscduSeZCFBFl08xl
11 | BZbpX/kmoprCLTAKBggqhkjOPQQDAgNIADBFAiEA2EepOmoBCRXn5vUrIz8iZOML
12 | sCCU55pSSxht0g0GJVcCIBo74lUjef7mXxglOJLmUEbwpUxIP74KgzgUy8exC+G1
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICNjCCAdygAwIBAgIRAL5RCKU95gD4u2Dm5BPsG0owCgYIKoZIzj0EAwIwbDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
5 | eGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMGwxCzAJ
6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
7 | bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
8 | bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARukLd5kqpA8oi5x0F4
9 | 5+uK4/8YiWJ2H3SWo3KrtjY9QJZRtfTn5HjdC5TZyDfWezjUqrIoduKpcJHqvoRp
10 | hFPKo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
11 | Af8EBTADAQH/MCkGA1UdDgQiBCBm4HllejgT/fmz7L170X336wrCPgJf2IzVDbHg
12 | keLT7DAKBggqhkjOPQQDAgNIADBFAiEAqbk6Tzt1W3WRXf2uD59W3Bn8CLe/Ndr3
13 | Fvu3As6XV5gCICPl/tcRAZbXnZX2Ix9z5Hg0S+hKLZpdBhZil3c4Ysu1
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICNjCCAdygAwIBAgIRAL5RCKU95gD4u2Dm5BPsG0owCgYIKoZIzj0EAwIwbDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
5 | eGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMGwxCzAJ
6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
7 | bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
8 | bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARukLd5kqpA8oi5x0F4
9 | 5+uK4/8YiWJ2H3SWo3KrtjY9QJZRtfTn5HjdC5TZyDfWezjUqrIoduKpcJHqvoRp
10 | hFPKo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
11 | Af8EBTADAQH/MCkGA1UdDgQiBCBm4HllejgT/fmz7L170X336wrCPgJf2IzVDbHg
12 | keLT7DAKBggqhkjOPQQDAgNIADBFAiEAqbk6Tzt1W3WRXf2uD59W3Bn8CLe/Ndr3
13 | Fvu3As6XV5gCICPl/tcRAZbXnZX2Ix9z5Hg0S+hKLZpdBhZil3c4Ysu1
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICWTCCAgCgAwIBAgIRAONf9roSz/7vSwQMSP0zWhswCgYIKoZIzj0EAwIwbDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
5 | eGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMFgxCzAJ
6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
7 | bmNpc2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0C
8 | AQYIKoZIzj0DAQcDQgAEW0uYc19dHIJ1EFsuH0HJn031gPw51SsKZ2wmn1j+HZ6+
9 | JhR8won8l5YFrqH+L2SeA4ZN3fZFzdWfyHy4o2L9kqOBljCBkzAOBgNVHQ8BAf8E
10 | BAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQC
11 | MAAwKwYDVR0jBCQwIoAgZuB5ZXo4E/35s+y9e9F99+sKwj4CX9iM1Q2x4JHi0+ww
12 | JwYDVR0RBCAwHoITb3JkZXJlci5leGFtcGxlLmNvbYIHb3JkZXJlcjAKBggqhkjO
13 | PQQDAgNHADBEAiBddz2ysAjD9Zb2hnWoCFB2LpmWNduxLtspWw31HcTE6AIgbGkY
14 | xWA6HXAF1cUkmuDDz3PvfG8qSv0D19RHc1rk/NE=
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgF7bXCr6zr3IW3K8u
3 | dU+EqFzrB7u6lVU0IZMqPp6WErChRANCAARbS5hzX10cgnUQWy4fQcmfTfWA/DnV
4 | KwpnbCafWP4dnr4mFHzCifyXlgWuof4vZJ4Dhk3d9kXN1Z/IfLijYv2S
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/tlsca/66e079657a3813fdf9b3ecbd7bd17df7eb0ac23e025fd88cd50db1e091e2d3ec_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgisfhLqdx/5zWgb++
3 | vQOuxncYylu1WHo0Auz/I+O6DqGhRANCAARukLd5kqpA8oi5x0F45+uK4/8YiWJ2
4 | H3SWo3KrtjY9QJZRtfTn5HjdC5TZyDfWezjUqrIoduKpcJHqvoRphFPK
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICNjCCAdygAwIBAgIRAL5RCKU95gD4u2Dm5BPsG0owCgYIKoZIzj0EAwIwbDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
5 | eGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMGwxCzAJ
6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
7 | bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
8 | bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARukLd5kqpA8oi5x0F4
9 | 5+uK4/8YiWJ2H3SWo3KrtjY9QJZRtfTn5HjdC5TZyDfWezjUqrIoduKpcJHqvoRp
10 | hFPKo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
11 | Af8EBTADAQH/MCkGA1UdDgQiBCBm4HllejgT/fmz7L170X336wrCPgJf2IzVDbHg
12 | keLT7DAKBggqhkjOPQQDAgNIADBFAiEAqbk6Tzt1W3WRXf2uD59W3Bn8CLe/Ndr3
13 | Fvu3As6XV5gCICPl/tcRAZbXnZX2Ix9z5Hg0S+hKLZpdBhZil3c4Ysu1
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/admincerts/Admin@example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICCjCCAbGgAwIBAgIRAKYJvAc3sRklKG+IaAYhDyQwCgYIKoZIzj0EAwIwaTEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
5 | cGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMFYxCzAJBgNV
6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
7 | c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG
8 | SM49AwEHA0IABPTwAvIouEqIDfZzl88PgjSif/Xop3fNjrITYQVGxSYto3Ca/jHo
9 | POuKuVT/BiPHkgJn/N8rUQ8uQNCl5YJb1FajTTBLMA4GA1UdDwEB/wQEAwIHgDAM
10 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIADz0/c4vgWo3/Cxx25J5kIUEWXTzGUF
11 | lulf+SaimsItMAoGCCqGSM49BAMCA0cAMEQCIHTrtNyNwhV7uGD2a9rUVlVMPE2l
12 | PHJSzTjoOVSIfl6PAiAx2b9EAyoFo1gid3obIaAM/rrCxn5MNbepaZD1jas1cg==
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/cacerts/ca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICLzCCAdagAwIBAgIRAPl+76Xs12iXaZzeeBa96iIwCgYIKoZIzj0EAwIwaTEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
5 | cGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMGkxCzAJBgNV
6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
7 | c2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEXMBUGA1UEAxMOY2EuZXhhbXBsZS5j
8 | b20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATDywCe6RZO1JaeuUUCo/Un2U2N
9 | OofBoQUaDv7RGghe6UPOT3VA+JwPUSIsuyjXvKIcQvl8AToEPZKNCMjKo+Vbo18w
10 | XTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMBAf8EBTAD
11 | AQH/MCkGA1UdDgQiBCAA89P3OL4FqN/wscduSeZCFBFl08xlBZbpX/kmoprCLTAK
12 | BggqhkjOPQQDAgNHADBEAiBq1RsjDK/iMgFLHtvlQw8COnWw0qgK4OPkhnImzf3Q
13 | oQIgTMq6D1UaZilT911gpJGtaLvTVV/7u7f9nzECNrMPBMY=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/3e150e050d7ce262ecd63cb55ff498836cd5754cac8378e14be9e9502ae85ec2_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg0M1zd8sAA/kZrPzr
3 | +A1tVI+/TkTIvWlPbifO9JGCXB+hRANCAAT08ALyKLhKiA32c5fPD4I0on/16Kd3
4 | zY6yE2EFRsUmLaNwmv4x6DzrirlU/wYjx5ICZ/zfK1EPLkDQpeWCW9RW
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICCjCCAbGgAwIBAgIRAKYJvAc3sRklKG+IaAYhDyQwCgYIKoZIzj0EAwIwaTEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
5 | cGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMFYxCzAJBgNV
6 | BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
7 | c2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG
8 | SM49AwEHA0IABPTwAvIouEqIDfZzl88PgjSif/Xop3fNjrITYQVGxSYto3Ca/jHo
9 | POuKuVT/BiPHkgJn/N8rUQ8uQNCl5YJb1FajTTBLMA4GA1UdDwEB/wQEAwIHgDAM
10 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIADz0/c4vgWo3/Cxx25J5kIUEWXTzGUF
11 | lulf+SaimsItMAoGCCqGSM49BAMCA0cAMEQCIHTrtNyNwhV7uGD2a9rUVlVMPE2l
12 | PHJSzTjoOVSIfl6PAiAx2b9EAyoFo1gid3obIaAM/rrCxn5MNbepaZD1jas1cg==
13 | -----END CERTIFICATE-----
14 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/tlscacerts/tlsca.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICNjCCAdygAwIBAgIRAL5RCKU95gD4u2Dm5BPsG0owCgYIKoZIzj0EAwIwbDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
5 | eGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMGwxCzAJ
6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
7 | bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
8 | bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARukLd5kqpA8oi5x0F4
9 | 5+uK4/8YiWJ2H3SWo3KrtjY9QJZRtfTn5HjdC5TZyDfWezjUqrIoduKpcJHqvoRp
10 | hFPKo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
11 | Af8EBTADAQH/MCkGA1UdDgQiBCBm4HllejgT/fmz7L170X336wrCPgJf2IzVDbHg
12 | keLT7DAKBggqhkjOPQQDAgNIADBFAiEAqbk6Tzt1W3WRXf2uD59W3Bn8CLe/Ndr3
13 | Fvu3As6XV5gCICPl/tcRAZbXnZX2Ix9z5Hg0S+hKLZpdBhZil3c4Ysu1
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICNjCCAdygAwIBAgIRAL5RCKU95gD4u2Dm5BPsG0owCgYIKoZIzj0EAwIwbDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
5 | eGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMGwxCzAJ
6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
7 | bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
8 | bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARukLd5kqpA8oi5x0F4
9 | 5+uK4/8YiWJ2H3SWo3KrtjY9QJZRtfTn5HjdC5TZyDfWezjUqrIoduKpcJHqvoRp
10 | hFPKo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
11 | Af8EBTADAQH/MCkGA1UdDgQiBCBm4HllejgT/fmz7L170X336wrCPgJf2IzVDbHg
12 | keLT7DAKBggqhkjOPQQDAgNIADBFAiEAqbk6Tzt1W3WRXf2uD59W3Bn8CLe/Ndr3
13 | Fvu3As6XV5gCICPl/tcRAZbXnZX2Ix9z5Hg0S+hKLZpdBhZil3c4Ysu1
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/client.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICLDCCAdOgAwIBAgIRAMCJuwbCEJlqSOFBD92gvM8wCgYIKoZIzj0EAwIwbDEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
5 | eGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2MjhaMFYxCzAJ
6 | BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
7 | bmNpc2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEG
8 | CCqGSM49AwEHA0IABO/27q5jWP3c6O6Yn4C/cJPSdyB6F8thbHW2+XLtigrGMnGJ
9 | Nw1DnYNoV8Y+Hb7hgn5FUf3jL3CytIgIch9kmSqjbDBqMA4GA1UdDwEB/wQEAwIF
10 | oDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAr
11 | BgNVHSMEJDAigCBm4HllejgT/fmz7L170X336wrCPgJf2IzVDbHgkeLT7DAKBggq
12 | hkjOPQQDAgNHADBEAiAef3WNjzsU/wI2s/FlReqAkGCLAfKsv+iPqr1nnc3nhQIg
13 | VpB2cqpqQeIVd4CL91XVFyM2Lvm/rBitlfiLXR3j34A=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/client.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgSRvE1V9apRLdRF/C
3 | HMFMNt+pMtzXyhp7w+VI8SRq/hahRANCAATv9u6uY1j93OjumJ+Av3CT0ncgehfL
4 | YWx1tvly7YoKxjJxiTcNQ52DaFfGPh2+4YJ+RVH94y9wsrSICHIfZJkq
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/ca/471ebb31833db2522c026a22cf11f556854dd926880010123990cfabe7eef4e5_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8q/Bb3U3MHYxEKHK
3 | tcyitVOmvdvtPjUJx2IvsayM592hRANCAATYswj6uPREVq4KVmo78SBMd2uJ/Dis
4 | pqQidVqxyA+UE1n7NGOxF3jtASNVCTeu+NL/qGFns1BXGF9gi75tUsgl
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICQzCCAemgAwIBAgIQYHAlzRWf1yFpvOVPAXJlkzAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
8 | ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
9 | 2LMI+rj0RFauClZqO/EgTHdrifw4rKakInVascgPlBNZ+zRjsRd47QEjVQk3rvjS
10 | /6hhZ7NQVxhfYIu+bVLIJaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
11 | BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgRx67MYM9slIsAmoizxH1
12 | VoVN2SaIABASOZDPq+fu9OUwCgYIKoZIzj0EAwIDSAAwRQIhAIOxWgPRmKpxd8F2
13 | /9wSC4Sf8vETfVKkNDs6BZEJHhQKAiAbbCE+TyhfHV1xT3wcbiOI4W8auqYNtX1a
14 | QaXPvzEISA==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKTCCAdCgAwIBAgIQQM07aCAzHraFkOLL+efaQjAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MGwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMQ8wDQYDVQQLEwZjbGllbnQxHzAdBgNVBAMMFkFkbWluQG9y
8 | ZzEuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASGm2awXBgr
9 | 7AJmm8tlaBfMvcYRGkMxFfukdZjkdVMAvMjizLxZ65XMMG8/0/kMLUa8Ml5zAb9J
10 | i9dolQeb20Kso00wSzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADArBgNV
11 | HSMEJDAigCBHHrsxgz2yUiwCaiLPEfVWhU3ZJogAEBI5kM+r5+705TAKBggqhkjO
12 | PQQDAgNHADBEAiBy7AFxmp5G4mmrksQ2c8eEdKI2ADpaJAlAlWkTcirxtQIgAX4V
13 | le34vSTXmbB6rDtEnujpGBjDMM8FYgJA19LCCHg=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICQzCCAemgAwIBAgIQYHAlzRWf1yFpvOVPAXJlkzAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
8 | ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
9 | 2LMI+rj0RFauClZqO/EgTHdrifw4rKakInVascgPlBNZ+zRjsRd47QEjVQk3rvjS
10 | /6hhZ7NQVxhfYIu+bVLIJaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
11 | BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgRx67MYM9slIsAmoizxH1
12 | VoVN2SaIABASOZDPq+fu9OUwCgYIKoZIzj0EAwIDSAAwRQIhAIOxWgPRmKpxd8F2
13 | /9wSC4Sf8vETfVKkNDs6BZEJHhQKAiAbbCE+TyhfHV1xT3wcbiOI4W8auqYNtX1a
14 | QaXPvzEISA==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/msp/config.yaml:
--------------------------------------------------------------------------------
1 | NodeOUs:
2 | Enable: true
3 | ClientOUIdentifier:
4 | Certificate: cacerts/ca.org1.example.com-cert.pem
5 | OrganizationalUnitIdentifier: client
6 | PeerOUIdentifier:
7 | Certificate: cacerts/ca.org1.example.com-cert.pem
8 | OrganizationalUnitIdentifier: peer
9 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQFQGV73LyIC/0nyoYAGywwjAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAE2se3rsKOovdpxkCkKmnPglDzQLon/Jmrz9M3I8eFwdY9wnJ4pSBBPZZg
10 | r0zCzaO5MJrLmsJRZMauCzHyuiimKaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgaf86LDSAIncU
12 | DMl+dsPMp9aOLGfQhviNm/ztBaYkQUUwCgYIKoZIzj0EAwIDSAAwRQIhAMRZVdZ7
13 | P2HSbM6dUizQyqVnHL9zoCNFFh8vztYFmSwBAiBEDpJjhjTQCn0fAJ6jILQ09Hr5
14 | htqY2XGK6rCK7DU1xg==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKTCCAdCgAwIBAgIQQM07aCAzHraFkOLL+efaQjAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MGwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMQ8wDQYDVQQLEwZjbGllbnQxHzAdBgNVBAMMFkFkbWluQG9y
8 | ZzEuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASGm2awXBgr
9 | 7AJmm8tlaBfMvcYRGkMxFfukdZjkdVMAvMjizLxZ65XMMG8/0/kMLUa8Ml5zAb9J
10 | i9dolQeb20Kso00wSzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADArBgNV
11 | HSMEJDAigCBHHrsxgz2yUiwCaiLPEfVWhU3ZJogAEBI5kM+r5+705TAKBggqhkjO
12 | PQQDAgNHADBEAiBy7AFxmp5G4mmrksQ2c8eEdKI2ADpaJAlAlWkTcirxtQIgAX4V
13 | le34vSTXmbB6rDtEnujpGBjDMM8FYgJA19LCCHg=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICQzCCAemgAwIBAgIQYHAlzRWf1yFpvOVPAXJlkzAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
8 | ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
9 | 2LMI+rj0RFauClZqO/EgTHdrifw4rKakInVascgPlBNZ+zRjsRd47QEjVQk3rvjS
10 | /6hhZ7NQVxhfYIu+bVLIJaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
11 | BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgRx67MYM9slIsAmoizxH1
12 | VoVN2SaIABASOZDPq+fu9OUwCgYIKoZIzj0EAwIDSAAwRQIhAIOxWgPRmKpxd8F2
13 | /9wSC4Sf8vETfVKkNDs6BZEJHhQKAiAbbCE+TyhfHV1xT3wcbiOI4W8auqYNtX1a
14 | QaXPvzEISA==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/config.yaml:
--------------------------------------------------------------------------------
1 | NodeOUs:
2 | Enable: true
3 | ClientOUIdentifier:
4 | Certificate: cacerts/ca.org1.example.com-cert.pem
5 | OrganizationalUnitIdentifier: client
6 | PeerOUIdentifier:
7 | Certificate: cacerts/ca.org1.example.com-cert.pem
8 | OrganizationalUnitIdentifier: peer
9 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/52a4a4cec4c8b3cce027018f33a3361e34de6edc143a804609df36def9e80004_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgQ4DgL7CfGKYebTKV
3 | Nvtdpp5ug24T0S67ykCjdnTXGfKhRANCAARQ8hCA1AbsWclkgQ8bawKc/YDKPLe1
4 | NheipeV9t6Oc8c5ZNTn3chX0P/58YCDoudcN63A1x1A484cGEirBjCGX
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/signcerts/peer0.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICJzCCAc6gAwIBAgIQJpRUSB9QkSiQ3dhB4Sx5gzAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MGoxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMQ0wCwYDVQQLEwRwZWVyMR8wHQYDVQQDExZwZWVyMC5vcmcx
8 | LmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUPIQgNQG7FnJ
9 | ZIEPG2sCnP2Ayjy3tTYXoqXlfbejnPHOWTU593IV9D/+fGAg6LnXDetwNcdQOPOH
10 | BhIqwYwhl6NNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0j
11 | BCQwIoAgRx67MYM9slIsAmoizxH1VoVN2SaIABASOZDPq+fu9OUwCgYIKoZIzj0E
12 | AwIDRwAwRAIgSh5twJbVZSxvLQtqcdg9X3vjExiz72GNyCrDRDR+J/ICIDdfhZ1w
13 | aBUIwA5eKSHJ2SX8J2uhB53UzUyx+MiGk4/8
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQFQGV73LyIC/0nyoYAGywwjAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAE2se3rsKOovdpxkCkKmnPglDzQLon/Jmrz9M3I8eFwdY9wnJ4pSBBPZZg
10 | r0zCzaO5MJrLmsJRZMauCzHyuiimKaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgaf86LDSAIncU
12 | DMl+dsPMp9aOLGfQhviNm/ztBaYkQUUwCgYIKoZIzj0EAwIDSAAwRQIhAMRZVdZ7
13 | P2HSbM6dUizQyqVnHL9zoCNFFh8vztYFmSwBAiBEDpJjhjTQCn0fAJ6jILQ09Hr5
14 | htqY2XGK6rCK7DU1xg==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQFQGV73LyIC/0nyoYAGywwjAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAE2se3rsKOovdpxkCkKmnPglDzQLon/Jmrz9M3I8eFwdY9wnJ4pSBBPZZg
10 | r0zCzaO5MJrLmsJRZMauCzHyuiimKaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgaf86LDSAIncU
12 | DMl+dsPMp9aOLGfQhviNm/ztBaYkQUUwCgYIKoZIzj0EAwIDSAAwRQIhAMRZVdZ7
13 | P2HSbM6dUizQyqVnHL9zoCNFFh8vztYFmSwBAiBEDpJjhjTQCn0fAJ6jILQ09Hr5
14 | htqY2XGK6rCK7DU1xg==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICZjCCAg2gAwIBAgIQULa3TXBdtnaWyUiNiA4jRzAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMC5vcmcxLmV4YW1wbGUuY29t
8 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfJRiLKhS2ZW+GLaWPpWAp8Umt5d0
9 | HQ61QRi8xpBCfz+bDihcWIsKKhlsGhtT8uGGPP5eHbhjcVt2Yk202KIHn6OBlzCB
10 | lDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC
11 | MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgaf86LDSAIncUDMl+dsPMp9aOLGfQ
12 | hviNm/ztBaYkQUUwKAYDVR0RBCEwH4IWcGVlcjAub3JnMS5leGFtcGxlLmNvbYIF
13 | cGVlcjAwCgYIKoZIzj0EAwIDRwAwRAIgS8cyCDC9qnfv9pkgqyNK0YVbPmYVTnuW
14 | A5c0+20g09sCIEDt0D+CNLhWQd2z3THp9nhWCTe6jLCIWDWRmIFHy9cZ
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgR6Akh00XjsJcBNup
3 | dUMuHiQtKayfaaEjJl/QaXq88K2hRANCAAR8lGIsqFLZlb4YtpY+lYCnxSa3l3Qd
4 | DrVBGLzGkEJ/P5sOKFxYiwoqGWwaG1Py4YY8/l4duGNxW3ZiTbTYogef
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKTCCAdCgAwIBAgIQQM07aCAzHraFkOLL+efaQjAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MGwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMQ8wDQYDVQQLEwZjbGllbnQxHzAdBgNVBAMMFkFkbWluQG9y
8 | ZzEuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASGm2awXBgr
9 | 7AJmm8tlaBfMvcYRGkMxFfukdZjkdVMAvMjizLxZ65XMMG8/0/kMLUa8Ml5zAb9J
10 | i9dolQeb20Kso00wSzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADArBgNV
11 | HSMEJDAigCBHHrsxgz2yUiwCaiLPEfVWhU3ZJogAEBI5kM+r5+705TAKBggqhkjO
12 | PQQDAgNHADBEAiBy7AFxmp5G4mmrksQ2c8eEdKI2ADpaJAlAlWkTcirxtQIgAX4V
13 | le34vSTXmbB6rDtEnujpGBjDMM8FYgJA19LCCHg=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICQzCCAemgAwIBAgIQYHAlzRWf1yFpvOVPAXJlkzAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
8 | ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
9 | 2LMI+rj0RFauClZqO/EgTHdrifw4rKakInVascgPlBNZ+zRjsRd47QEjVQk3rvjS
10 | /6hhZ7NQVxhfYIu+bVLIJaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
11 | BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgRx67MYM9slIsAmoizxH1
12 | VoVN2SaIABASOZDPq+fu9OUwCgYIKoZIzj0EAwIDSAAwRQIhAIOxWgPRmKpxd8F2
13 | /9wSC4Sf8vETfVKkNDs6BZEJHhQKAiAbbCE+TyhfHV1xT3wcbiOI4W8auqYNtX1a
14 | QaXPvzEISA==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/config.yaml:
--------------------------------------------------------------------------------
1 | NodeOUs:
2 | Enable: true
3 | ClientOUIdentifier:
4 | Certificate: cacerts/ca.org1.example.com-cert.pem
5 | OrganizationalUnitIdentifier: client
6 | PeerOUIdentifier:
7 | Certificate: cacerts/ca.org1.example.com-cert.pem
8 | OrganizationalUnitIdentifier: peer
9 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/keystore/2e4b52fd060cbb1e2d478483c556dbfcb31ba765ef1f1436af6b0a27d758b56c_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg6OFjlbQhHEQBck9/
3 | S4876xZihdjKINpQGcgXAQ34O9WhRANCAATPW0Tq65O28l+5foLO88nh1N6gVfcQ
4 | OsSEan9dC6WiG+tBJZ99EU0fcMl5Pne02TxDOOtudnI++9wrKJufIRd/
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/signcerts/peer1.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICJzCCAc6gAwIBAgIQUL9HApEhPSPDGMRl1vw3qjAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MGoxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMQ0wCwYDVQQLEwRwZWVyMR8wHQYDVQQDExZwZWVyMS5vcmcx
8 | LmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEz1tE6uuTtvJf
9 | uX6CzvPJ4dTeoFX3EDrEhGp/XQulohvrQSWffRFNH3DJeT53tNk8QzjrbnZyPvvc
10 | KyibnyEXf6NNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0j
11 | BCQwIoAgRx67MYM9slIsAmoizxH1VoVN2SaIABASOZDPq+fu9OUwCgYIKoZIzj0E
12 | AwIDRwAwRAIgQYYU1toAYEdzmwgIH82gZIkh9vKnOFzqBRYSFn8lPFICIGQsq1W8
13 | wIObPrNqLWW+ObDShyQcpbDqcSD3sRb269Q8
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQFQGV73LyIC/0nyoYAGywwjAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAE2se3rsKOovdpxkCkKmnPglDzQLon/Jmrz9M3I8eFwdY9wnJ4pSBBPZZg
10 | r0zCzaO5MJrLmsJRZMauCzHyuiimKaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgaf86LDSAIncU
12 | DMl+dsPMp9aOLGfQhviNm/ztBaYkQUUwCgYIKoZIzj0EAwIDSAAwRQIhAMRZVdZ7
13 | P2HSbM6dUizQyqVnHL9zoCNFFh8vztYFmSwBAiBEDpJjhjTQCn0fAJ6jILQ09Hr5
14 | htqY2XGK6rCK7DU1xg==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQFQGV73LyIC/0nyoYAGywwjAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAE2se3rsKOovdpxkCkKmnPglDzQLon/Jmrz9M3I8eFwdY9wnJ4pSBBPZZg
10 | r0zCzaO5MJrLmsJRZMauCzHyuiimKaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgaf86LDSAIncU
12 | DMl+dsPMp9aOLGfQhviNm/ztBaYkQUUwCgYIKoZIzj0EAwIDSAAwRQIhAMRZVdZ7
13 | P2HSbM6dUizQyqVnHL9zoCNFFh8vztYFmSwBAiBEDpJjhjTQCn0fAJ6jILQ09Hr5
14 | htqY2XGK6rCK7DU1xg==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICZzCCAg2gAwIBAgIQcbHnHT4C98Hjc05n5y0CWTAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMS5vcmcxLmV4YW1wbGUuY29t
8 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwDmlv/MXecqIb5QUCai5u980gmQZ
9 | CpQFAQUZkmWYP3HU/MBv8ZapF4D9/UA6CokKpZNixbtUHzuLplbi5iqvNKOBlzCB
10 | lDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC
11 | MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgaf86LDSAIncUDMl+dsPMp9aOLGfQ
12 | hviNm/ztBaYkQUUwKAYDVR0RBCEwH4IWcGVlcjEub3JnMS5leGFtcGxlLmNvbYIF
13 | cGVlcjEwCgYIKoZIzj0EAwIDSAAwRQIhAOz8t8xT+n24NX7IHFwZSYur4PNWeyaf
14 | XvetY26ZsyMxAiBFZjQt9MqWTUyin05/vmrh31bf8Azkg5edOUaqcwJc3Q==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgAHj1odVJcTuIPxH4
3 | 3C/u/YDMRpMRxjK0ghY/LSxPcXKhRANCAATAOaW/8xd5yohvlBQJqLm73zSCZBkK
4 | lAUBBRmSZZg/cdT8wG/xlqkXgP39QDoKiQqlk2LFu1QfO4umVuLmKq80
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/tlsca/69ff3a2c34802277140cc97e76c3cca7d68e2c67d086f88d9bfced05a6244145_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQguj3bV5+DCL514ziG
3 | sU9ZNVvvcfRl06gnwrsEPyP7iv+hRANCAATax7euwo6i92nGQKQqac+CUPNAuif8
4 | mavP0zcjx4XB1j3CcnilIEE9lmCvTMLNo7kwmsuawlFkxq4LMfK6KKYp
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQFQGV73LyIC/0nyoYAGywwjAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAE2se3rsKOovdpxkCkKmnPglDzQLon/Jmrz9M3I8eFwdY9wnJ4pSBBPZZg
10 | r0zCzaO5MJrLmsJRZMauCzHyuiimKaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgaf86LDSAIncU
12 | DMl+dsPMp9aOLGfQhviNm/ztBaYkQUUwCgYIKoZIzj0EAwIDSAAwRQIhAMRZVdZ7
13 | P2HSbM6dUizQyqVnHL9zoCNFFh8vztYFmSwBAiBEDpJjhjTQCn0fAJ6jILQ09Hr5
14 | htqY2XGK6rCK7DU1xg==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKTCCAdCgAwIBAgIQQM07aCAzHraFkOLL+efaQjAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MGwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMQ8wDQYDVQQLEwZjbGllbnQxHzAdBgNVBAMMFkFkbWluQG9y
8 | ZzEuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASGm2awXBgr
9 | 7AJmm8tlaBfMvcYRGkMxFfukdZjkdVMAvMjizLxZ65XMMG8/0/kMLUa8Ml5zAb9J
10 | i9dolQeb20Kso00wSzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADArBgNV
11 | HSMEJDAigCBHHrsxgz2yUiwCaiLPEfVWhU3ZJogAEBI5kM+r5+705TAKBggqhkjO
12 | PQQDAgNHADBEAiBy7AFxmp5G4mmrksQ2c8eEdKI2ADpaJAlAlWkTcirxtQIgAX4V
13 | le34vSTXmbB6rDtEnujpGBjDMM8FYgJA19LCCHg=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICQzCCAemgAwIBAgIQYHAlzRWf1yFpvOVPAXJlkzAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
8 | ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
9 | 2LMI+rj0RFauClZqO/EgTHdrifw4rKakInVascgPlBNZ+zRjsRd47QEjVQk3rvjS
10 | /6hhZ7NQVxhfYIu+bVLIJaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
11 | BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgRx67MYM9slIsAmoizxH1
12 | VoVN2SaIABASOZDPq+fu9OUwCgYIKoZIzj0EAwIDSAAwRQIhAIOxWgPRmKpxd8F2
13 | /9wSC4Sf8vETfVKkNDs6BZEJHhQKAiAbbCE+TyhfHV1xT3wcbiOI4W8auqYNtX1a
14 | QaXPvzEISA==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/fca80a3ce2abfd36a5a427ce7bc94d8bf91f505864bb04cf3c402e2272962c40_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg73X7b9GcQqfpqo8W
3 | Qv/m8DR46qMuJF/PXBAsb2VB12ehRANCAASGm2awXBgr7AJmm8tlaBfMvcYRGkMx
4 | FfukdZjkdVMAvMjizLxZ65XMMG8/0/kMLUa8Ml5zAb9Ji9dolQeb20Ks
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKTCCAdCgAwIBAgIQQM07aCAzHraFkOLL+efaQjAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MGwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMQ8wDQYDVQQLEwZjbGllbnQxHzAdBgNVBAMMFkFkbWluQG9y
8 | ZzEuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASGm2awXBgr
9 | 7AJmm8tlaBfMvcYRGkMxFfukdZjkdVMAvMjizLxZ65XMMG8/0/kMLUa8Ml5zAb9J
10 | i9dolQeb20Kso00wSzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADArBgNV
11 | HSMEJDAigCBHHrsxgz2yUiwCaiLPEfVWhU3ZJogAEBI5kM+r5+705TAKBggqhkjO
12 | PQQDAgNHADBEAiBy7AFxmp5G4mmrksQ2c8eEdKI2ADpaJAlAlWkTcirxtQIgAX4V
13 | le34vSTXmbB6rDtEnujpGBjDMM8FYgJA19LCCHg=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQFQGV73LyIC/0nyoYAGywwjAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAE2se3rsKOovdpxkCkKmnPglDzQLon/Jmrz9M3I8eFwdY9wnJ4pSBBPZZg
10 | r0zCzaO5MJrLmsJRZMauCzHyuiimKaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgaf86LDSAIncU
12 | DMl+dsPMp9aOLGfQhviNm/ztBaYkQUUwCgYIKoZIzj0EAwIDSAAwRQIhAMRZVdZ7
13 | P2HSbM6dUizQyqVnHL9zoCNFFh8vztYFmSwBAiBEDpJjhjTQCn0fAJ6jILQ09Hr5
14 | htqY2XGK6rCK7DU1xg==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQFQGV73LyIC/0nyoYAGywwjAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAE2se3rsKOovdpxkCkKmnPglDzQLon/Jmrz9M3I8eFwdY9wnJ4pSBBPZZg
10 | r0zCzaO5MJrLmsJRZMauCzHyuiimKaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgaf86LDSAIncU
12 | DMl+dsPMp9aOLGfQhviNm/ztBaYkQUUwCgYIKoZIzj0EAwIDSAAwRQIhAMRZVdZ7
13 | P2HSbM6dUizQyqVnHL9zoCNFFh8vztYFmSwBAiBEDpJjhjTQCn0fAJ6jILQ09Hr5
14 | htqY2XGK6rCK7DU1xg==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/client.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICOzCCAeGgAwIBAgIQVOnDWhV2rL4DLldCXA9AKDAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29t
8 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEu/fYWOzlNc26F1VjtmxNmmJj0o2r
9 | 8krS+FT374HXJsLSguD1jroVlid25RSPngvYJyTn2Ak7Q6KdzJRM8F7Zj6NsMGow
10 | DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAM
11 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIGn/Oiw0gCJ3FAzJfnbDzKfWjixn0Ib4
12 | jZv87QWmJEFFMAoGCCqGSM49BAMCA0gAMEUCIQCN18TgEUX8sseXL4SuT0a6ieSb
13 | O7E3hiSwbL0BmDDYCAIgRr8zDbP4h82MGlM4g55SqDiW2205eJVjatW78I+e0p8=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/client.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg2/0rUhtvvtB1l6AD
3 | 1VBv/cDSWqZt2BzLl/FvSC7vrHWhRANCAAS799hY7OU1zboXVWO2bE2aYmPSjavy
4 | StL4VPfvgdcmwtKC4PWOuhWWJ3blFI+eC9gnJOfYCTtDop3MlEzwXtmP
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/admincerts/User1@org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKTCCAdCgAwIBAgIQV/6NzdKCdKCDL66L13nSvjAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MGwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMQ8wDQYDVQQLEwZjbGllbnQxHzAdBgNVBAMMFlVzZXIxQG9y
8 | ZzEuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARP+rEJZ3Qf
9 | 10z8Y306miluO52ei4+gHGqhA+LEHG1pRK+9qNRk+CwbH+QQcY7CksP51PzbCgOU
10 | Tt0kL7LpnI+7o00wSzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADArBgNV
11 | HSMEJDAigCBHHrsxgz2yUiwCaiLPEfVWhU3ZJogAEBI5kM+r5+705TAKBggqhkjO
12 | PQQDAgNHADBEAiAWAbj2QvLFdleW7+ZKA6afj8UhH52g4WAsNp+qotMvSAIgQxKr
13 | B1mr1yPHE7QRYT+qXxgUqc7Fkk6NG+kGx2AWSno=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICQzCCAemgAwIBAgIQYHAlzRWf1yFpvOVPAXJlkzAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
8 | ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
9 | 2LMI+rj0RFauClZqO/EgTHdrifw4rKakInVascgPlBNZ+zRjsRd47QEjVQk3rvjS
10 | /6hhZ7NQVxhfYIu+bVLIJaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
11 | BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgRx67MYM9slIsAmoizxH1
12 | VoVN2SaIABASOZDPq+fu9OUwCgYIKoZIzj0EAwIDSAAwRQIhAIOxWgPRmKpxd8F2
13 | /9wSC4Sf8vETfVKkNDs6BZEJHhQKAiAbbCE+TyhfHV1xT3wcbiOI4W8auqYNtX1a
14 | QaXPvzEISA==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/55e4e407eff74668c0e15d0119ba4af4ef5779d8a01fbbe2eae7760df11d968a_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgBNGlYRi7H5cHk8qF
3 | V6hDogZzBgzDuj3ROViLUmjJ/wChRANCAARP+rEJZ3Qf10z8Y306miluO52ei4+g
4 | HGqhA+LEHG1pRK+9qNRk+CwbH+QQcY7CksP51PzbCgOUTt0kL7LpnI+7
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKTCCAdCgAwIBAgIQV/6NzdKCdKCDL66L13nSvjAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MGwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMQ8wDQYDVQQLEwZjbGllbnQxHzAdBgNVBAMMFlVzZXIxQG9y
8 | ZzEuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARP+rEJZ3Qf
9 | 10z8Y306miluO52ei4+gHGqhA+LEHG1pRK+9qNRk+CwbH+QQcY7CksP51PzbCgOU
10 | Tt0kL7LpnI+7o00wSzAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADArBgNV
11 | HSMEJDAigCBHHrsxgz2yUiwCaiLPEfVWhU3ZJogAEBI5kM+r5+705TAKBggqhkjO
12 | PQQDAgNHADBEAiAWAbj2QvLFdleW7+ZKA6afj8UhH52g4WAsNp+qotMvSAIgQxKr
13 | B1mr1yPHE7QRYT+qXxgUqc7Fkk6NG+kGx2AWSno=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQFQGV73LyIC/0nyoYAGywwjAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAE2se3rsKOovdpxkCkKmnPglDzQLon/Jmrz9M3I8eFwdY9wnJ4pSBBPZZg
10 | r0zCzaO5MJrLmsJRZMauCzHyuiimKaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgaf86LDSAIncU
12 | DMl+dsPMp9aOLGfQhviNm/ztBaYkQUUwCgYIKoZIzj0EAwIDSAAwRQIhAMRZVdZ7
13 | P2HSbM6dUizQyqVnHL9zoCNFFh8vztYFmSwBAiBEDpJjhjTQCn0fAJ6jILQ09Hr5
14 | htqY2XGK6rCK7DU1xg==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQFQGV73LyIC/0nyoYAGywwjAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAE2se3rsKOovdpxkCkKmnPglDzQLon/Jmrz9M3I8eFwdY9wnJ4pSBBPZZg
10 | r0zCzaO5MJrLmsJRZMauCzHyuiimKaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgaf86LDSAIncU
12 | DMl+dsPMp9aOLGfQhviNm/ztBaYkQUUwCgYIKoZIzj0EAwIDSAAwRQIhAMRZVdZ7
13 | P2HSbM6dUizQyqVnHL9zoCNFFh8vztYFmSwBAiBEDpJjhjTQCn0fAJ6jILQ09Hr5
14 | htqY2XGK6rCK7DU1xg==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/client.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICPDCCAeKgAwIBAgIRAMpBazyCOAmAOBCOPvl8qyEwCgYIKoZIzj0EAwIwdjEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
5 | c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgy
6 | NjI4WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
7 | BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWVXNlcjFAb3JnMS5leGFtcGxlLmNv
8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH5EU1OclmvgIcG/n4ZlQpr4Z/bK
9 | o6Q6nn1KX/hqUF1cFuCq5Y1w5vmOM2yGZoMf6z5KKwJgWu/08dfcJ7Fpov2jbDBq
10 | MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
11 | DAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCBp/zosNIAidxQMyX52w8yn1o4sZ9CG
12 | +I2b/O0FpiRBRTAKBggqhkjOPQQDAgNIADBFAiEAgWIU4SPTXaqchzbigCXDgde6
13 | 4IBGzPBfdUxwBSmFaxsCIDU5jcrLhRrZC5Q/osIdnewgMeuP42Iyd7TllLnOAe1w
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/client.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg215ek3789VHWtFqK
3 | 8rTKa/4umdRaw/zMo+STQpp6wv6hRANCAAR+RFNTnJZr4CHBv5+GZUKa+Gf2yqOk
4 | Op59Sl/4alBdXBbgquWNcOb5jjNshmaDH+s+SisCYFrv9PHX3CexaaL9
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/ca/351ff344270e862be47d4e0442c96ac67ae466898fccbad8b9eba25d8a604cf2_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgcM7OboqQxmY1UaKC
3 | L7/ljFGT+xpVWjDEYri0rhoq8PmhRANCAAQANt6feglJMzvmWLl7lJuL1xbVLgzJ
4 | AgWmPdXTVGr8FwaRGVnRXJMHR1fGcpgPCGYealuRBz+HzriyFittIWfP
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICRDCCAeqgAwIBAgIRANRVV2Vn5PUznaEvgMSaw7QwCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgyNjI4
6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE
8 | AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
9 | BAA23p96CUkzO+ZYuXuUm4vXFtUuDMkCBaY91dNUavwXBpEZWdFckwdHV8ZymA8I
10 | Zh5qW5EHP4fOuLIWK20hZ8+jXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIDUf80QnDoYr5H1OBELJ
12 | asZ65GaJj8y62Lnrol2KYEzyMAoGCCqGSM49BAMCA0gAMEUCIQCqKjhBfWU/82A7
13 | +GsVz0TxYZOZkLVvZK1muS0KLRzw5wIgIyZrZy0CqCx3ba7rasv1ooZ4tcpnHArk
14 | oIvey2C49jE=
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKzCCAdGgAwIBAgIRAMene+IxLAyesWHqRIXd5dEwCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgyNjI4
6 | WjBsMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEPMA0GA1UECxMGY2xpZW50MR8wHQYDVQQDDBZBZG1pbkBv
8 | cmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFhuxYuYg
9 | cRx6eNO1j/TU4ALHRKeHwAWYSnifseRJEcq+ZMxCeZnH8aLRaaOi8Z93XHj3pw2M
10 | 2i2EyP79S5vLZ6NNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYD
11 | VR0jBCQwIoAgNR/zRCcOhivkfU4EQslqxnrkZomPzLrYueuiXYpgTPIwCgYIKoZI
12 | zj0EAwIDSAAwRQIhAI1V6n3P37gXrYkTx5JH9EydbdXRt+iUdmPf9fRrp/FlAiBa
13 | Az+jEoIq4/0kmy8+S9/xzgs+J4js1goRhyJPzcgULg==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICRDCCAeqgAwIBAgIRANRVV2Vn5PUznaEvgMSaw7QwCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgyNjI4
6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE
8 | AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
9 | BAA23p96CUkzO+ZYuXuUm4vXFtUuDMkCBaY91dNUavwXBpEZWdFckwdHV8ZymA8I
10 | Zh5qW5EHP4fOuLIWK20hZ8+jXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIDUf80QnDoYr5H1OBELJ
12 | asZ65GaJj8y62Lnrol2KYEzyMAoGCCqGSM49BAMCA0gAMEUCIQCqKjhBfWU/82A7
13 | +GsVz0TxYZOZkLVvZK1muS0KLRzw5wIgIyZrZy0CqCx3ba7rasv1ooZ4tcpnHArk
14 | oIvey2C49jE=
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/msp/config.yaml:
--------------------------------------------------------------------------------
1 | NodeOUs:
2 | Enable: true
3 | ClientOUIdentifier:
4 | Certificate: cacerts/ca.org2.example.com-cert.pem
5 | OrganizationalUnitIdentifier: client
6 | PeerOUIdentifier:
7 | Certificate: cacerts/ca.org2.example.com-cert.pem
8 | OrganizationalUnitIdentifier: peer
9 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQZAmSlo1gHpUw9xwf1iT2OzAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAEye6lAl7W9YvAQffQFOvI+oW01uH4Aik4HwpaCX9LaGVwgSr5wb0PrA+m
10 | +d/cyQ57w940AQPWAMmipLLNtu+5nKNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgejv5aXzQEcVS
12 | 5JpDwTFBukVGUzuKlqFbjqo8fMpq0OcwCgYIKoZIzj0EAwIDSAAwRQIhAMmm2DYX
13 | yuCgHcg8Nt4UaMy0pv4fFzljvrAj2svUDgzfAiAAsCP29mKTSsMXe6VE6PJTAWzP
14 | QYXkPuVBzySCzpqM7g==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKzCCAdGgAwIBAgIRAMene+IxLAyesWHqRIXd5dEwCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgyNjI4
6 | WjBsMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEPMA0GA1UECxMGY2xpZW50MR8wHQYDVQQDDBZBZG1pbkBv
8 | cmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFhuxYuYg
9 | cRx6eNO1j/TU4ALHRKeHwAWYSnifseRJEcq+ZMxCeZnH8aLRaaOi8Z93XHj3pw2M
10 | 2i2EyP79S5vLZ6NNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYD
11 | VR0jBCQwIoAgNR/zRCcOhivkfU4EQslqxnrkZomPzLrYueuiXYpgTPIwCgYIKoZI
12 | zj0EAwIDSAAwRQIhAI1V6n3P37gXrYkTx5JH9EydbdXRt+iUdmPf9fRrp/FlAiBa
13 | Az+jEoIq4/0kmy8+S9/xzgs+J4js1goRhyJPzcgULg==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICRDCCAeqgAwIBAgIRANRVV2Vn5PUznaEvgMSaw7QwCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgyNjI4
6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE
8 | AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
9 | BAA23p96CUkzO+ZYuXuUm4vXFtUuDMkCBaY91dNUavwXBpEZWdFckwdHV8ZymA8I
10 | Zh5qW5EHP4fOuLIWK20hZ8+jXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIDUf80QnDoYr5H1OBELJ
12 | asZ65GaJj8y62Lnrol2KYEzyMAoGCCqGSM49BAMCA0gAMEUCIQCqKjhBfWU/82A7
13 | +GsVz0TxYZOZkLVvZK1muS0KLRzw5wIgIyZrZy0CqCx3ba7rasv1ooZ4tcpnHArk
14 | oIvey2C49jE=
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/config.yaml:
--------------------------------------------------------------------------------
1 | NodeOUs:
2 | Enable: true
3 | ClientOUIdentifier:
4 | Certificate: cacerts/ca.org2.example.com-cert.pem
5 | OrganizationalUnitIdentifier: client
6 | PeerOUIdentifier:
7 | Certificate: cacerts/ca.org2.example.com-cert.pem
8 | OrganizationalUnitIdentifier: peer
9 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/7edf6b8ad4fb7d4c8f93a86441a8301f247db5d9bf2bbae967bc5f36d714e547_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg3+Je+ONNteD3PHuV
3 | we+qxTLvnavGuAFihBFYmn9HkfmhRANCAATcv+vTv/9YO+F6MnRiDLQEFdcuOvLP
4 | geYJZfYrCUVVmuBrgdFbOAjVrf5Kn3+Cugs35WNv0ikuqdEIRCTAN+hm
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/signcerts/peer0.org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKTCCAc+gAwIBAgIRANJLlExzljWwUNZZItF0U94wCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgyNjI4
6 | WjBqMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzENMAsGA1UECxMEcGVlcjEfMB0GA1UEAxMWcGVlcjAub3Jn
8 | Mi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABNy/69O//1g7
9 | 4XoydGIMtAQV1y468s+B5gll9isJRVWa4GuB0Vs4CNWt/kqff4K6CzflY2/SKS6p
10 | 0QhEJMA36GajTTBLMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1Ud
11 | IwQkMCKAIDUf80QnDoYr5H1OBELJasZ65GaJj8y62Lnrol2KYEzyMAoGCCqGSM49
12 | BAMCA0gAMEUCIQDrBL4gS87k0zwq1WJEvX+lyS4oLZ5qEXclVQly6UaGDwIgcwVC
13 | bPDi7VyqK27Nveb/erwqh2trEtmBzdAcm3XtsjM=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQZAmSlo1gHpUw9xwf1iT2OzAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAEye6lAl7W9YvAQffQFOvI+oW01uH4Aik4HwpaCX9LaGVwgSr5wb0PrA+m
10 | +d/cyQ57w940AQPWAMmipLLNtu+5nKNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgejv5aXzQEcVS
12 | 5JpDwTFBukVGUzuKlqFbjqo8fMpq0OcwCgYIKoZIzj0EAwIDSAAwRQIhAMmm2DYX
13 | yuCgHcg8Nt4UaMy0pv4fFzljvrAj2svUDgzfAiAAsCP29mKTSsMXe6VE6PJTAWzP
14 | QYXkPuVBzySCzpqM7g==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQZAmSlo1gHpUw9xwf1iT2OzAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAEye6lAl7W9YvAQffQFOvI+oW01uH4Aik4HwpaCX9LaGVwgSr5wb0PrA+m
10 | +d/cyQ57w940AQPWAMmipLLNtu+5nKNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgejv5aXzQEcVS
12 | 5JpDwTFBukVGUzuKlqFbjqo8fMpq0OcwCgYIKoZIzj0EAwIDSAAwRQIhAMmm2DYX
13 | yuCgHcg8Nt4UaMy0pv4fFzljvrAj2svUDgzfAiAAsCP29mKTSsMXe6VE6PJTAWzP
14 | QYXkPuVBzySCzpqM7g==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICaDCCAg6gAwIBAgIRANPQRNSgeC+PXIYE/erg8/wwCgYIKoZIzj0EAwIwdjEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgy
6 | NjI4WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
7 | BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjAub3JnMi5leGFtcGxlLmNv
8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKFuQ7Y6h8pffLe4LcgBn9+BlPJR
9 | cnypkiwhloIY/8apl7YjTa6hginx6IPS6kuIm4oP0tSSjrcuwhreQtEwj6KjgZcw
10 | gZQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
11 | AjAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIHo7+Wl80BHFUuSaQ8ExQbpFRlM7
12 | ipahW46qPHzKatDnMCgGA1UdEQQhMB+CFnBlZXIwLm9yZzIuZXhhbXBsZS5jb22C
13 | BXBlZXIwMAoGCCqGSM49BAMCA0gAMEUCIQD4PfWZGI0HNMUEgbbW4R7MGDglNpQn
14 | xGFQO7nSucQQzAIgfj0gOaKwvrdHxvOvgNeS1o080K9kU68Y6UeNfvSHeg0=
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg9a6so3eTAHzCEkrR
3 | Wb+X2mJU6l+nvtmnEcm/VxOJGJ+hRANCAAShbkO2OofKX3y3uC3IAZ/fgZTyUXJ8
4 | qZIsIZaCGP/GqZe2I02uoYIp8eiD0upLiJuKD9LUko63LsIa3kLRMI+i
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKzCCAdGgAwIBAgIRAMene+IxLAyesWHqRIXd5dEwCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgyNjI4
6 | WjBsMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEPMA0GA1UECxMGY2xpZW50MR8wHQYDVQQDDBZBZG1pbkBv
8 | cmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFhuxYuYg
9 | cRx6eNO1j/TU4ALHRKeHwAWYSnifseRJEcq+ZMxCeZnH8aLRaaOi8Z93XHj3pw2M
10 | 2i2EyP79S5vLZ6NNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYD
11 | VR0jBCQwIoAgNR/zRCcOhivkfU4EQslqxnrkZomPzLrYueuiXYpgTPIwCgYIKoZI
12 | zj0EAwIDSAAwRQIhAI1V6n3P37gXrYkTx5JH9EydbdXRt+iUdmPf9fRrp/FlAiBa
13 | Az+jEoIq4/0kmy8+S9/xzgs+J4js1goRhyJPzcgULg==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICRDCCAeqgAwIBAgIRANRVV2Vn5PUznaEvgMSaw7QwCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgyNjI4
6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE
8 | AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
9 | BAA23p96CUkzO+ZYuXuUm4vXFtUuDMkCBaY91dNUavwXBpEZWdFckwdHV8ZymA8I
10 | Zh5qW5EHP4fOuLIWK20hZ8+jXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIDUf80QnDoYr5H1OBELJ
12 | asZ65GaJj8y62Lnrol2KYEzyMAoGCCqGSM49BAMCA0gAMEUCIQCqKjhBfWU/82A7
13 | +GsVz0TxYZOZkLVvZK1muS0KLRzw5wIgIyZrZy0CqCx3ba7rasv1ooZ4tcpnHArk
14 | oIvey2C49jE=
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/config.yaml:
--------------------------------------------------------------------------------
1 | NodeOUs:
2 | Enable: true
3 | ClientOUIdentifier:
4 | Certificate: cacerts/ca.org2.example.com-cert.pem
5 | OrganizationalUnitIdentifier: client
6 | PeerOUIdentifier:
7 | Certificate: cacerts/ca.org2.example.com-cert.pem
8 | OrganizationalUnitIdentifier: peer
9 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/keystore/1ef296b59a24b30ebd722bfa8eac0752929c597be002f77cabf70effbdb72e7e_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgJdLRXO9B4noR8GB9
3 | NUsxEb5HWL5yKe3N6iqNmLxfFGmhRANCAAQckBI97H6tex0Lal0K/VBGHCxOTfn3
4 | 1sQq91grv8mi423RKpfKpiVG50mkImn3Wtlw9noPpcApWToq1yamC8fx
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/signcerts/peer1.org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKDCCAc6gAwIBAgIQKz7v/SGR/ntySB0ZnPYb2TAKBggqhkjOPQQDAjBzMQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
5 | b3JnMi5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2Mjha
6 | MGoxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
7 | YW4gRnJhbmNpc2NvMQ0wCwYDVQQLEwRwZWVyMR8wHQYDVQQDExZwZWVyMS5vcmcy
8 | LmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHJASPex+rXsd
9 | C2pdCv1QRhwsTk3599bEKvdYK7/JouNt0SqXyqYlRudJpCJp91rZcPZ6D6XAKVk6
10 | KtcmpgvH8aNNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0j
11 | BCQwIoAgNR/zRCcOhivkfU4EQslqxnrkZomPzLrYueuiXYpgTPIwCgYIKoZIzj0E
12 | AwIDSAAwRQIhAMQ0DSxWRh2YivjJg8bOIi7wOWTdU7nQ8n9HomwBncYeAiALV0RD
13 | IQ/XFCGptsPYoFJYcwv6/mx3h7iXCQYwaH0czg==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQZAmSlo1gHpUw9xwf1iT2OzAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAEye6lAl7W9YvAQffQFOvI+oW01uH4Aik4HwpaCX9LaGVwgSr5wb0PrA+m
10 | +d/cyQ57w940AQPWAMmipLLNtu+5nKNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgejv5aXzQEcVS
12 | 5JpDwTFBukVGUzuKlqFbjqo8fMpq0OcwCgYIKoZIzj0EAwIDSAAwRQIhAMmm2DYX
13 | yuCgHcg8Nt4UaMy0pv4fFzljvrAj2svUDgzfAiAAsCP29mKTSsMXe6VE6PJTAWzP
14 | QYXkPuVBzySCzpqM7g==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQZAmSlo1gHpUw9xwf1iT2OzAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAEye6lAl7W9YvAQffQFOvI+oW01uH4Aik4HwpaCX9LaGVwgSr5wb0PrA+m
10 | +d/cyQ57w940AQPWAMmipLLNtu+5nKNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgejv5aXzQEcVS
12 | 5JpDwTFBukVGUzuKlqFbjqo8fMpq0OcwCgYIKoZIzj0EAwIDSAAwRQIhAMmm2DYX
13 | yuCgHcg8Nt4UaMy0pv4fFzljvrAj2svUDgzfAiAAsCP29mKTSsMXe6VE6PJTAWzP
14 | QYXkPuVBzySCzpqM7g==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICaDCCAg6gAwIBAgIRAJcLUpt3zAkMSiaSOnSLP0swCgYIKoZIzj0EAwIwdjEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgy
6 | NjI4WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
7 | BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjEub3JnMi5leGFtcGxlLmNv
8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIprVJvBmF+/caGkCr14xhtP3MwH
9 | Ddq+ws8CgoHnhu1Ct76TB1Ptqj/r0Bwyh3ojsC97UefQdx/w54kb4jNHgNyjgZcw
10 | gZQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
11 | AjAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIHo7+Wl80BHFUuSaQ8ExQbpFRlM7
12 | ipahW46qPHzKatDnMCgGA1UdEQQhMB+CFnBlZXIxLm9yZzIuZXhhbXBsZS5jb22C
13 | BXBlZXIxMAoGCCqGSM49BAMCA0gAMEUCIQDXPcnPKqdSgkZ/nOgAxn6mdzcMtQC8
14 | lVFRmxhj0M8ibgIgB1Vys/KzQBT05YR7w24oEM70b0MN4auP679qy9OO5mc=
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg7gbt8uXwh3u1IViT
3 | 9QACxfiMsMBwgsI/fdAZAJRcVUyhRANCAASKa1SbwZhfv3GhpAq9eMYbT9zMBw3a
4 | vsLPAoKB54btQre+kwdT7ao/69AcMod6I7Ave1Hn0Hcf8OeJG+IzR4Dc
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/tlsca/7a3bf9697cd011c552e49a43c13141ba4546533b8a96a15b8eaa3c7cca6ad0e7_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgb5NRzI1WnUjK2Hlk
3 | hZoFxAKfdQIUGW6BupXsNC6vlrmhRANCAATJ7qUCXtb1i8BB99AU68j6hbTW4fgC
4 | KTgfCloJf0toZXCBKvnBvQ+sD6b539zJDnvD3jQBA9YAyaKkss2277mc
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQZAmSlo1gHpUw9xwf1iT2OzAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAEye6lAl7W9YvAQffQFOvI+oW01uH4Aik4HwpaCX9LaGVwgSr5wb0PrA+m
10 | +d/cyQ57w940AQPWAMmipLLNtu+5nKNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgejv5aXzQEcVS
12 | 5JpDwTFBukVGUzuKlqFbjqo8fMpq0OcwCgYIKoZIzj0EAwIDSAAwRQIhAMmm2DYX
13 | yuCgHcg8Nt4UaMy0pv4fFzljvrAj2svUDgzfAiAAsCP29mKTSsMXe6VE6PJTAWzP
14 | QYXkPuVBzySCzpqM7g==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKzCCAdGgAwIBAgIRAMene+IxLAyesWHqRIXd5dEwCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgyNjI4
6 | WjBsMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEPMA0GA1UECxMGY2xpZW50MR8wHQYDVQQDDBZBZG1pbkBv
8 | cmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFhuxYuYg
9 | cRx6eNO1j/TU4ALHRKeHwAWYSnifseRJEcq+ZMxCeZnH8aLRaaOi8Z93XHj3pw2M
10 | 2i2EyP79S5vLZ6NNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYD
11 | VR0jBCQwIoAgNR/zRCcOhivkfU4EQslqxnrkZomPzLrYueuiXYpgTPIwCgYIKoZI
12 | zj0EAwIDSAAwRQIhAI1V6n3P37gXrYkTx5JH9EydbdXRt+iUdmPf9fRrp/FlAiBa
13 | Az+jEoIq4/0kmy8+S9/xzgs+J4js1goRhyJPzcgULg==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICRDCCAeqgAwIBAgIRANRVV2Vn5PUznaEvgMSaw7QwCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgyNjI4
6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE
8 | AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
9 | BAA23p96CUkzO+ZYuXuUm4vXFtUuDMkCBaY91dNUavwXBpEZWdFckwdHV8ZymA8I
10 | Zh5qW5EHP4fOuLIWK20hZ8+jXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIDUf80QnDoYr5H1OBELJ
12 | asZ65GaJj8y62Lnrol2KYEzyMAoGCCqGSM49BAMCA0gAMEUCIQCqKjhBfWU/82A7
13 | +GsVz0TxYZOZkLVvZK1muS0KLRzw5wIgIyZrZy0CqCx3ba7rasv1ooZ4tcpnHArk
14 | oIvey2C49jE=
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/c8f1ee67181f4dbbecc065de8c470444f3f99a5d673f87fc79335bafab9caa1f_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgpfNXEY7+G6uWvT2B
3 | EB/4denpYilXmgxqgSq9nustOh2hRANCAAQWG7Fi5iBxHHp407WP9NTgAsdEp4fA
4 | BZhKeJ+x5EkRyr5kzEJ5mcfxotFpo6Lxn3dcePenDYzaLYTI/v1Lm8tn
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKzCCAdGgAwIBAgIRAMene+IxLAyesWHqRIXd5dEwCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgyNjI4
6 | WjBsMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEPMA0GA1UECxMGY2xpZW50MR8wHQYDVQQDDBZBZG1pbkBv
8 | cmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFhuxYuYg
9 | cRx6eNO1j/TU4ALHRKeHwAWYSnifseRJEcq+ZMxCeZnH8aLRaaOi8Z93XHj3pw2M
10 | 2i2EyP79S5vLZ6NNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYD
11 | VR0jBCQwIoAgNR/zRCcOhivkfU4EQslqxnrkZomPzLrYueuiXYpgTPIwCgYIKoZI
12 | zj0EAwIDSAAwRQIhAI1V6n3P37gXrYkTx5JH9EydbdXRt+iUdmPf9fRrp/FlAiBa
13 | Az+jEoIq4/0kmy8+S9/xzgs+J4js1goRhyJPzcgULg==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQZAmSlo1gHpUw9xwf1iT2OzAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAEye6lAl7W9YvAQffQFOvI+oW01uH4Aik4HwpaCX9LaGVwgSr5wb0PrA+m
10 | +d/cyQ57w940AQPWAMmipLLNtu+5nKNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgejv5aXzQEcVS
12 | 5JpDwTFBukVGUzuKlqFbjqo8fMpq0OcwCgYIKoZIzj0EAwIDSAAwRQIhAMmm2DYX
13 | yuCgHcg8Nt4UaMy0pv4fFzljvrAj2svUDgzfAiAAsCP29mKTSsMXe6VE6PJTAWzP
14 | QYXkPuVBzySCzpqM7g==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQZAmSlo1gHpUw9xwf1iT2OzAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAEye6lAl7W9YvAQffQFOvI+oW01uH4Aik4HwpaCX9LaGVwgSr5wb0PrA+m
10 | +d/cyQ57w940AQPWAMmipLLNtu+5nKNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgejv5aXzQEcVS
12 | 5JpDwTFBukVGUzuKlqFbjqo8fMpq0OcwCgYIKoZIzj0EAwIDSAAwRQIhAMmm2DYX
13 | yuCgHcg8Nt4UaMy0pv4fFzljvrAj2svUDgzfAiAAsCP29mKTSsMXe6VE6PJTAWzP
14 | QYXkPuVBzySCzpqM7g==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/client.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICPDCCAeKgAwIBAgIRAL54wF4UXfOuWXRjBYBFRGAwCgYIKoZIzj0EAwIwdjEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
5 | c2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgy
6 | NjI4WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
7 | BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNv
8 | bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHayqjQ3an1a1LvtcYtqEukOmX/4
9 | zlS6MgvhO2aFe70NCPQTSO/AnG8E0Mj0gBl7yn1i+xAa14ek1j5c+vo22bWjbDBq
10 | MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
11 | DAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCB6O/lpfNARxVLkmkPBMUG6RUZTO4qW
12 | oVuOqjx8ymrQ5zAKBggqhkjOPQQDAgNIADBFAiEAwgWjRflvgAYNflkbfjCReYKZ
13 | 5Q4ubB/Fl0IB9JWl15gCIBYpCSO4iJWVt8kpBPsbEdalzDUQau3Gzp2rhRwJEm9a
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/client.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgIw0PSevcwQk+CAk4
3 | oVnOVh2+nuRDjG3a3AG0l+nfHtyhRANCAAR2sqo0N2p9WtS77XGLahLpDpl/+M5U
4 | ujIL4TtmhXu9DQj0E0jvwJxvBNDI9IAZe8p9YvsQGteHpNY+XPr6Ntm1
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/admincerts/User1@org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKzCCAdGgAwIBAgIRALHWE7Mti+0BDEQ0bTkJ4tEwCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgyNjI4
6 | WjBsMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEPMA0GA1UECxMGY2xpZW50MR8wHQYDVQQDDBZVc2VyMUBv
8 | cmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfHoE29EI
9 | asjX4+07jRINIWUwm8pU+8/RgfEZ8N3/WwsRSXAsNgWYLluflPqA+Mn4GrTjGaYj
10 | 3Rlv4pj5+A2WX6NNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYD
11 | VR0jBCQwIoAgNR/zRCcOhivkfU4EQslqxnrkZomPzLrYueuiXYpgTPIwCgYIKoZI
12 | zj0EAwIDSAAwRQIhAL1oMzBb5F5HfVsDnrvOznH3oXSzTGidecWzryz+P5QkAiBQ
13 | 3+ET84KvD1bGUpVpVfXstjAfRa2wiWK8eiNbWKqKLg==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICRDCCAeqgAwIBAgIRANRVV2Vn5PUznaEvgMSaw7QwCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgyNjI4
6 | WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE
8 | AxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
9 | BAA23p96CUkzO+ZYuXuUm4vXFtUuDMkCBaY91dNUavwXBpEZWdFckwdHV8ZymA8I
10 | Zh5qW5EHP4fOuLIWK20hZ8+jXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG
11 | BgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIDUf80QnDoYr5H1OBELJ
12 | asZ65GaJj8y62Lnrol2KYEzyMAoGCCqGSM49BAMCA0gAMEUCIQCqKjhBfWU/82A7
13 | +GsVz0TxYZOZkLVvZK1muS0KLRzw5wIgIyZrZy0CqCx3ba7rasv1ooZ4tcpnHArk
14 | oIvey2C49jE=
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/89c83d48f707e3487762ec1f9f297558ee61e31c63f2f8aac4bda3df6662230e_sk:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgVK+79FBMQrnkhfct
3 | yeEzZaXGcoElnwytIXxzhpiRu+uhRANCAAR8egTb0QhqyNfj7TuNEg0hZTCbylT7
4 | z9GB8Rnw3f9bCxFJcCw2BZguW5+U+oD4yfgatOMZpiPdGW/imPn4DZZf
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/signcerts/User1@org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICKzCCAdGgAwIBAgIRALHWE7Mti+0BDEQ0bTkJ4tEwCgYIKoZIzj0EAwIwczEL
3 | MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
4 | cmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
5 | Lm9yZzIuZXhhbXBsZS5jb20wHhcNMTgwNjI4MDgyNjI4WhcNMjgwNjI1MDgyNjI4
6 | WjBsMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
7 | U2FuIEZyYW5jaXNjbzEPMA0GA1UECxMGY2xpZW50MR8wHQYDVQQDDBZVc2VyMUBv
8 | cmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfHoE29EI
9 | asjX4+07jRINIWUwm8pU+8/RgfEZ8N3/WwsRSXAsNgWYLluflPqA+Mn4GrTjGaYj
10 | 3Rlv4pj5+A2WX6NNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYD
11 | VR0jBCQwIoAgNR/zRCcOhivkfU4EQslqxnrkZomPzLrYueuiXYpgTPIwCgYIKoZI
12 | zj0EAwIDSAAwRQIhAL1oMzBb5F5HfVsDnrvOznH3oXSzTGidecWzryz+P5QkAiBQ
13 | 3+ET84KvD1bGUpVpVfXstjAfRa2wiWK8eiNbWKqKLg==
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQZAmSlo1gHpUw9xwf1iT2OzAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAEye6lAl7W9YvAQffQFOvI+oW01uH4Aik4HwpaCX9LaGVwgSr5wb0PrA+m
10 | +d/cyQ57w940AQPWAMmipLLNtu+5nKNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgejv5aXzQEcVS
12 | 5JpDwTFBukVGUzuKlqFbjqo8fMpq0OcwCgYIKoZIzj0EAwIDSAAwRQIhAMmm2DYX
13 | yuCgHcg8Nt4UaMy0pv4fFzljvrAj2svUDgzfAiAAsCP29mKTSsMXe6VE6PJTAWzP
14 | QYXkPuVBzySCzpqM7g==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/ca.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICSTCCAe+gAwIBAgIQZAmSlo1gHpUw9xwf1iT2OzAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcyLmV4YW1wbGUuY29tMR8wHQYD
8 | VQQDExZ0bHNjYS5vcmcyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D
9 | AQcDQgAEye6lAl7W9YvAQffQFOvI+oW01uH4Aik4HwpaCX9LaGVwgSr5wb0PrA+m
10 | +d/cyQ57w940AQPWAMmipLLNtu+5nKNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud
11 | JQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgejv5aXzQEcVS
12 | 5JpDwTFBukVGUzuKlqFbjqo8fMpq0OcwCgYIKoZIzj0EAwIDSAAwRQIhAMmm2DYX
13 | yuCgHcg8Nt4UaMy0pv4fFzljvrAj2svUDgzfAiAAsCP29mKTSsMXe6VE6PJTAWzP
14 | QYXkPuVBzySCzpqM7g==
15 | -----END CERTIFICATE-----
16 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/client.crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIICOzCCAeGgAwIBAgIQVPiApaFfSUiN32EUsR+RjzAKBggqhkjOPQQDAjB2MQsw
3 | CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
4 | YW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
5 | Y2Eub3JnMi5leGFtcGxlLmNvbTAeFw0xODA2MjgwODI2MjhaFw0yODA2MjUwODI2
6 | MjhaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
7 | Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZVc2VyMUBvcmcyLmV4YW1wbGUuY29t
8 | MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwPmOQfkIF5zwKyN1vFkGM9PfzVQG
9 | MxmSfeBiUFjYVBqUAWD4mbVmo++ZQDr7CsV/n+4sHQm+UNpGbP6V7/eILqNsMGow
10 | DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAM
11 | BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIHo7+Wl80BHFUuSaQ8ExQbpFRlM7ipah
12 | W46qPHzKatDnMAoGCCqGSM49BAMCA0gAMEUCIQDL/Xx2S3HDGV5q1Q+xlzESM7gg
13 | QRHRf7nQaRxl/c8TegIgLtJQR1meuyOIu9RWEMtZGaNyYt/q+p8FA5NU26Gn0Z8=
14 | -----END CERTIFICATE-----
15 |
--------------------------------------------------------------------------------
/fixtures/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/client.key:
--------------------------------------------------------------------------------
1 | -----BEGIN PRIVATE KEY-----
2 | MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgRKSqyq5JFx0vmo3t
3 | aF+UT8Hhk6zCi2Q8bcEYBNnbJbChRANCAATA+Y5B+QgXnPArI3W8WQYz09/NVAYz
4 | GZJ94GJQWNhUGpQBYPiZtWaj75lAOvsKxX+f7iwdCb5Q2kZs/pXv94gu
5 | -----END PRIVATE KEY-----
6 |
--------------------------------------------------------------------------------
/fixtures/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '2'
2 |
3 | networks:
4 | default:
5 |
6 | services:
7 |
8 | orderer.example.com:
9 | container_name: orderer.example.com
10 | image: hyperledger/fabric-orderer
11 | environment:
12 | - ORDERER_GENERAL_LOGLEVEL=debug
13 | - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
14 | - ORDERER_GENERAL_GENESISMETHOD=file
15 | - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
16 | - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
17 | - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
18 | - ORDERER_GENERAL_LISTENPORT=7050
19 | # enabled TLS
20 | - ORDERER_GENERAL_TLS_ENABLED=true
21 | - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
22 | - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
23 | - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt, /var/hyperledger/peerOrg1/tls/ca.crt, /var/hyperledger/peerOrg2/tls/ca.crt]
24 | working_dir: /opt/gopath/src/github.com/hyperledger/fabric
25 | command: orderer
26 | ports:
27 | - 7050:7050
28 | volumes:
29 | - ./artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
30 | - ./crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
31 | - ./crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls:/var/hyperledger/orderer/tls
32 | - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/:/var/hyperledger/peerOrg1
33 | - ./crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/:/var/hyperledger/peerOrg2
34 | networks:
35 | default:
36 | aliases:
37 | - orderer.example.com
38 |
39 | ca.org1.example.com:
40 | image: hyperledger/fabric-ca
41 | environment:
42 | - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
43 | - FABRIC_CA_SERVER_CA_NAME=ca.org1.example.com
44 | - FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem
45 | # path: crypto-config\peerOrganizations\org1.example.com\ca\..._sk
46 | - FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/471ebb31833db2522c026a22cf11f556854dd926880010123990cfabe7eef4e5_sk
47 | - FABRIC_CA_SERVER_TLS_ENABLED=true
48 | - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem
49 | - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/471ebb31833db2522c026a22cf11f556854dd926880010123990cfabe7eef4e5_sk
50 | ports:
51 | - "7054:7054"
52 | command: sh -c 'fabric-ca-server start -b admin:adminpw -d'
53 | volumes:
54 | - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config
55 | container_name: ca.org1.example.com
56 | networks:
57 | default:
58 | aliases:
59 | - ca.org1.example.com
60 |
61 | peer0.org1.example.com:
62 | image: hyperledger/fabric-peer
63 | container_name: peer0.org1.example.com
64 | environment:
65 | - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
66 | - CORE_VM_DOCKER_ATTACHSTDOUT=true
67 | - CORE_LOGGING_LEVEL=DEBUG
68 | - CORE_PEER_NETWORKID=bill
69 | - CORE_PEER_PROFILE_ENABLED=true
70 | - CORE_PEER_TLS_ENABLED=true
71 | - CORE_PEER_TLS_CERT_FILE=/var/hyperledger/tls/server.crt
72 | - CORE_PEER_TLS_KEY_FILE=/var/hyperledger/tls/server.key
73 | - CORE_PEER_TLS_ROOTCERT_FILE=/var/hyperledger/tls/ca.crt
74 | - CORE_PEER_ID=peer0.org1.example.com
75 | - CORE_PEER_ADDRESSAUTODETECT=true
76 | - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
77 | - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
78 | - CORE_PEER_GOSSIP_USELEADERELECTION=true
79 | - CORE_PEER_GOSSIP_ORGLEADER=false
80 | - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
81 | - CORE_PEER_LOCALMSPID=Org1MSP
82 | - CORE_PEER_MSPCONFIGPATH=/var/hyperledger/msp
83 | - CORE_PEER_TLS_SERVERHOSTOVERRIDE=peer0.org1.example.com
84 | working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
85 | command: peer node start
86 | volumes:
87 | - /var/run/:/host/var/run/
88 | - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/var/hyperledger/msp
89 | - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/var/hyperledger/tls
90 | ports:
91 | - 7051:7051
92 | - 7053:7053
93 | depends_on:
94 | - orderer.example.com
95 | links:
96 | - orderer.example.com
97 | networks:
98 | default:
99 | aliases:
100 | - peer0.org1.example.com
101 |
102 | peer1.org1.example.com:
103 | image: hyperledger/fabric-peer
104 | container_name: peer1.org1.example.com
105 | environment:
106 | - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
107 | - CORE_VM_DOCKER_ATTACHSTDOUT=true
108 | - CORE_LOGGING_LEVEL=DEBUG
109 | - CORE_PEER_NETWORKID=bill
110 | - CORE_PEER_PROFILE_ENABLED=true
111 | - CORE_PEER_TLS_ENABLED=true
112 | - CORE_PEER_TLS_CERT_FILE=/var/hyperledger/tls/server.crt
113 | - CORE_PEER_TLS_KEY_FILE=/var/hyperledger/tls/server.key
114 | - CORE_PEER_TLS_ROOTCERT_FILE=/var/hyperledger/tls/ca.crt
115 | - CORE_PEER_ID=peer1.org1.example.com
116 | - CORE_PEER_ADDRESSAUTODETECT=true
117 | - CORE_PEER_ADDRESS=peer1.org1.example.com:7051
118 | - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051
119 | - CORE_PEER_GOSSIP_USELEADERELECTION=true
120 | - CORE_PEER_GOSSIP_ORGLEADER=false
121 | - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
122 | - CORE_PEER_LOCALMSPID=Org1MSP
123 | - CORE_PEER_MSPCONFIGPATH=/var/hyperledger/msp
124 | - CORE_PEER_TLS_SERVERHOSTOVERRIDE=peer1.org1.example.com
125 | working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
126 | command: peer node start
127 | volumes:
128 | - /var/run/:/host/var/run/
129 | - ./crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/var/hyperledger/msp
130 | - ./crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/var/hyperledger/tls
131 | ports:
132 | - 8051:7051
133 | - 8053:7053
134 | depends_on:
135 | - orderer.example.com
136 | links:
137 | - orderer.example.com
138 | networks:
139 | default:
140 | aliases:
141 | - peer1.org1.example.com
142 |
--------------------------------------------------------------------------------
/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | "github.com/kongyixueyuan.com/bill/blockchain"
6 | "os"
7 | "github.com/kongyixueyuan.com/bill/service"
8 | "encoding/json"
9 | "github.com/kongyixueyuan.com/bill/web/controller"
10 | "github.com/kongyixueyuan.com/bill/web"
11 | )
12 |
13 | func main() {
14 | // 定义SDK属性// 链码相关参数
15 | fSetup := blockchain.FabricSetup{
16 | OrgAdmin: "Admin",
17 | OrgName: "Org1",
18 | ConfigFile: "config.yaml",
19 |
20 | // 通道相关
21 | ChannelID: "mychannel",
22 | ChannelConfig: os.Getenv("GOPATH") + "/src/github.com/kongyixueyuan.com/bill/fixtures/artifacts/channel.tx",
23 |
24 | // 链码相关参数
25 | ChaincodeID: "billcc",
26 | ChaincodeGoPath: os.Getenv("GOPATH"),
27 | ChaincodePath: "github.com/kongyixueyuan.com/bill/chaincode",
28 | UserName: "User1",
29 | }
30 |
31 | // 初始化SDK
32 | err := fSetup.Initialize()
33 | if err != nil {
34 | fmt.Printf("无法初始化Fabric SDK: %v\n", err)
35 | }
36 |
37 | err = fSetup.InstallAndInstantiateCC()
38 | if err != nil {
39 | fmt.Printf("无法安装及实例化链码: %v\n", err)
40 | }
41 |
42 | // ==========================测试开始==============================
43 | // 发布票据
44 | bill := service.Bill{
45 | BillInfoID: "BOC10000001",
46 | BillInfoAmt: "222",
47 | BillInfoType: "111",
48 | BillInfoIsseDate: "20180501",
49 | BillInfoDueDate: "20180503",
50 | DrwrCmID: "111",
51 | DrwrAcct: "111",
52 | AccptrCmID: "111",
53 | AccptrAcct: "111",
54 | PyeeCmID: "111",
55 | PyeeAcct: "111",
56 | HoldrCmID: "BCMID",
57 | HoldrAcct: "B公司",
58 | }
59 |
60 | fsservice := new(service.FabricSetupService)
61 | fsservice.Fabric = &fSetup
62 |
63 | // 发布票据
64 | resp,err := fsservice.SaveBill(bill)
65 | if err!=nil {
66 | fmt.Printf("发布票据失败: %v\n",err)
67 | }else {
68 | fmt.Println("发布票据成功 =========> " + resp)
69 | }
70 |
71 | //根据当前用户的证件号码查询票据列表
72 | result,err := fsservice.FindBills("BCMID")
73 | if err!=nil {
74 | fmt.Printf("执行查询失败: %v\n", err)
75 | } else {
76 | fmt.Println("根据当前用户的证件号码查询票据列表成功")
77 | var bills =[]service.Bill{}
78 | json.Unmarshal([]byte(result),&bills)
79 | for _,temp := range bills{
80 | fmt.Println(temp)
81 | }
82 | }
83 |
84 | // 根据票据号码获取票据状态及该票据的背书历史
85 | result, err = fsservice.FindBillByNo("BOC10000001")
86 | if err != nil {
87 | fmt.Printf("执行查询失败: %v\n", err)
88 | }else{
89 | fmt.Println("根据票据号码获取票据状态及该票据的背书历史查询成功")
90 | var billInfo = service.Bill{}
91 | json.Unmarshal([]byte(result), &billInfo)
92 | fmt.Println("=========> ", billInfo)
93 | var hisBills = billInfo.History
94 | fmt.Println("历史信息如下:")
95 | for _, hisBill := range hisBills {
96 | fmt.Println("=========> ", hisBill)
97 | }
98 |
99 | }
100 |
101 | // 票据背书请求
102 | resp, err = fsservice.Endorse("BOC10000001", "CCMID", "C公司")
103 | if err != nil {
104 | fmt.Printf("票据背书请求失败: %v\n", err)
105 | }else{
106 | fmt.Println("票据背书请求成功")
107 | fmt.Println("=========> " + resp)
108 | }
109 |
110 | // 根据待背书人证件号码, 查询当前用户的待背书票据
111 | result, err = fsservice.FindWaitBills("CCMID")
112 | if err != nil {
113 | fmt.Printf("查询当前用户的待背书票据失败: %v\n", err)
114 | }else{
115 | fmt.Println("查询当前用户的待背书票据成功")
116 | var bills = []service.Bill{}
117 | json.Unmarshal([]byte(result), &bills)
118 | for _, temp := range bills{
119 | fmt.Println("=========> ", temp)
120 | }
121 | }
122 |
123 | // 票据背书签收
124 | resp, err = fsservice.EndorseAccept("BOC10000001", "CCMID", "C公司")
125 |
126 | if err != nil {
127 | fmt.Printf("票据背书签收失败: %v\n", err)
128 | }else{
129 | fmt.Println("票据背书签收成功")
130 | fmt.Println("=========> " + resp)
131 | }
132 |
133 |
134 | /* err = fsservice.Delete("BOC10000001")
135 | if err != nil {
136 | fmt.Printf("票据BOC10000001删除失败: %v\n", err)
137 | }else{
138 | fmt.Println("票据BOC10000001删除成功")
139 | }
140 | */
141 | app := controller.Application{Fabric:fsservice}
142 | web.WebStart(&app)
143 | }
--------------------------------------------------------------------------------
/service/billService.go:
--------------------------------------------------------------------------------
1 | package service
2 |
3 | import (
4 | "github.com/hyperledger/fabric-sdk-go/api/apitxn/chclient"
5 | "fmt"
6 | "encoding/json"
7 | )
8 |
9 | // 发布票据
10 | func (setup *FabricSetupService) SaveBill(bill Bill) (string, error) {
11 | var args []string
12 | args = append(args, "issue")
13 |
14 | b, _ := json.Marshal(bill)
15 |
16 | // 设置交易请求参数
17 | req := chclient.Request{ChaincodeID: setup.Fabric.ChaincodeID, Fcn: args[0], Args: [][]byte{b}}
18 |
19 | // 执行交易
20 | response, err := setup.Fabric.Client.Execute(req)
21 | if err != nil {
22 | return "", fmt.Errorf("保存票据时发生错误: %v\n", err)
23 | }
24 |
25 | return response.TransactionID.ID, nil
26 | }
27 |
28 | // 根据当前持票人证件号码, 批量查询票据
29 | func (setup *FabricSetupService) FindBills(holderCmId string) ([]byte, error) {
30 |
31 | var args []string
32 | args = append(args, "queryMyBills")
33 | args = append(args, holderCmId)
34 |
35 | // 设置查询的请求参数
36 | req := chclient.Request{ChaincodeID: setup.Fabric.ChaincodeID, Fcn: args[0], Args: [][]byte{[]byte(args[1])}}
37 |
38 | // 执行查询
39 | response, err := setup.Fabric.Client.Query(req)
40 | if err != nil {
41 | return []byte{0x00}, fmt.Errorf("查询票据失败: %v\n", err)
42 | }
43 |
44 | b := response.Payload
45 |
46 | return b[:], nil
47 | }
48 |
49 | func (setup *FabricSetupService)Delete(bill_no string) error {
50 | fmt.Println("开始删除票据:"+bill_no)
51 | var args []string
52 | args = append(args, "delete")
53 | req := chclient.Request{ChaincodeID:setup.Fabric.ChaincodeID,Fcn:args[0],Args:[][]byte{[]byte(bill_no)}}
54 |
55 | // 执行交易
56 | _, err := setup.Fabric.Client.Execute(req)
57 | if err != nil {
58 | return fmt.Errorf("删除票据时发生错误: %v\n", err)
59 | }
60 | fmt.Println("开始删除票据完成" )
61 | return nil
62 | }
63 |
64 |
65 | // 根据票据号码获取票据状态及该票据的背书历史
66 | func (setup *FabricSetupService) FindBillByNo(bill_no string) ([]byte, error) {
67 | var args []string
68 | args = append(args, "queryBillByNo")
69 |
70 | req := chclient.Request{ChaincodeID: setup.Fabric.ChaincodeID, Fcn: args[0], Args: [][]byte{[]byte(bill_no)}}
71 | response, err := setup.Fabric.Client.Query(req)
72 | if err != nil {
73 | return []byte{0x00}, fmt.Errorf("查询指定的票据信息发生错误: %v\n", err)
74 | }
75 |
76 | b := response.Payload
77 |
78 | return b[:], nil
79 | }
80 |
--------------------------------------------------------------------------------
/service/endorseService.go:
--------------------------------------------------------------------------------
1 | package service
2 |
3 | import (
4 | "github.com/hyperledger/fabric-sdk-go/api/apitxn/chclient"
5 | "fmt"
6 | )
7 |
8 | // 票据背书请求
9 | // args: 0 - Bill_No; 1 - endorserCmId(待背书人ID); 2 - endorserAcct(待背书人名称)
10 | func (setup *FabricSetupService) Endorse(bill_no string, endorseCmId string, endorseAcct string) (string, error) {
11 | var args []string
12 | args = append(args, "endorse")
13 |
14 | // 设置查询的请求参数
15 | req := chclient.Request{ChaincodeID: setup.Fabric.ChaincodeID, Fcn: args[0], Args: [][]byte{[]byte(bill_no), []byte(endorseCmId), []byte(endorseAcct)}}
16 | // 执行查询
17 | response, err := setup.Fabric.Client.Execute(req)
18 | if err != nil {
19 | return "", fmt.Errorf("票据背书请求失败: %v\n", err)
20 | }
21 |
22 | return string(response.Payload), nil
23 | }
24 |
25 | // 根据待背书人证件号码, 查询当前用户的待背书票据
26 | func (setup *FabricSetupService) FindWaitBills(endorserCmId string) ([]byte, error){
27 | var args []string
28 | args = append(args, "queryMyWaitBills")
29 |
30 | // 设置查询的请求参数
31 | req := chclient.Request{ChaincodeID: setup.Fabric.ChaincodeID, Fcn: args[0], Args: [][]byte{[]byte(endorserCmId)}}
32 | // 执行查询
33 | response, err := setup.Fabric.Client.Query(req)
34 | if err != nil {
35 | return []byte{0x00}, fmt.Errorf("查询待背书票据失败: %v\n", err)
36 | }
37 |
38 | b := response.Payload
39 |
40 | return b[:], nil
41 | }
42 |
43 | // 票据背书签收
44 | // args: 0 - Bill_No; 1 - endorserCmId(待背书人ID); 2 - endorserAcct(待背书人名称)
45 | func (setup *FabricSetupService) EndorseAccept(bill_no string, endorseCmId string, endorseAcct string) (string, error){
46 | var args []string
47 | args = append(args, "accept")
48 |
49 | req := chclient.Request{ChaincodeID: setup.Fabric.ChaincodeID, Fcn: args[0], Args: [][]byte{[]byte(bill_no), []byte(endorseCmId), []byte(endorseAcct)}}
50 | response, err := setup.Fabric.Client.Execute(req)
51 |
52 | if err != nil {
53 | return "", fmt.Errorf("票据背书签收失败: %v\n", err)
54 | }
55 | return string(response.Payload), nil
56 | }
57 |
58 | // 票据背书拒签(拒绝背书)
59 | // args: 0 - bill_NO; 1 - endorserCmId(待背书人ID); 2 - endorserAcct(待背书人名称)
60 | func (setup *FabricSetupService) EndorseReject(bill_no string, endorseCmId string, endorseAcct string) (string, error) {
61 | var args []string
62 | args = append(args, "reject")
63 |
64 | req := chclient.Request{ChaincodeID: setup.Fabric.ChaincodeID, Fcn: args[0], Args: [][]byte{[]byte(bill_no), []byte(endorseCmId), []byte(endorseAcct)}}
65 | response, err := setup.Fabric.Client.Execute(req)
66 | if err != nil {
67 | return "", fmt.Errorf("票据背书拒签失败: %v\n", err)
68 | }
69 | return string(response.Payload), nil
70 | }
--------------------------------------------------------------------------------
/service/structure.go:
--------------------------------------------------------------------------------
1 | package service
2 |
3 | import "github.com/kongyixueyuan.com/bill/blockchain"
4 |
5 | type FabricSetupService struct {
6 | Fabric *blockchain.FabricSetup
7 | }
8 |
9 | // 票据数据结构
10 | type Bill struct {
11 | BillInfoID string `json:"BillInfoID"` // 票据号码
12 | BillInfoAmt string `json:"BillInfoAmt"` // 票据金额
13 | BillInfoType string `json:"BillInfoType"` // 票据类型
14 |
15 | BillInfoIsseDate string `json:"BillInfoIsseDate"` // 票据出票日期
16 | BillInfoDueDate string `json:"BillInfoDueDate"` // 票据到期日期
17 |
18 | DrwrCmID string `json:"DrwrCmID"` // 出票人证件号码
19 | DrwrAcct string `json:"DrwrAcct"` // 出票人名称
20 |
21 | AccptrCmID string `json:"AccptrCmID"` // 承兑人证件号码
22 | AccptrAcct string `json:"AccptrAcct"` // 承兑人名称
23 |
24 | PyeeCmID string `json:"PyeeCmID"` // 收款人证件号码
25 | PyeeAcct string `json:"PyeeAcct"` // 收款人名称
26 |
27 | HoldrCmID string `json:"HodrCmID"` // 当前持票人证件号码
28 | HoldrAcct string `json:"HodrAcct` // 当前持票人名称
29 |
30 | WaitEndorseCmID string `json:"WaitEndorseCmID"` // 待背书人证件号码
31 | WaitEndorseAcct string `json:"WaitEndorseAcct"` // 待背书人名称
32 |
33 | RejectEndorseCmID string `json:"RejectEndorseCmID"` // 拒绝背书人证件号码
34 | RejectEndorseAcct string `json:"RejectEndorseAcct"` // 拒绝背书人名称
35 |
36 | State string `json:"State"` // 票据状态
37 | History []HistoryItem `json:"History"` // 票据背书历史
38 | }
39 |
40 | // 票据历史信息
41 | type HistoryItem struct {
42 | TxId string `json:"TxId"`
43 | Bill Bill `json:"bill"`
44 | }
45 |
--------------------------------------------------------------------------------
/web/app.go:
--------------------------------------------------------------------------------
1 | package web
2 |
3 | import (
4 | "net/http"
5 | "fmt"
6 | "github.com/kongyixueyuan.com/bill/web/controller"
7 | )
8 |
9 | func WebStart(app *controller.Application) error {
10 | fs := http.FileServer(http.Dir("web/static"))
11 | http.Handle("/static/", http.StripPrefix("/static/", fs))
12 |
13 |
14 | // http://localhost:9000/
15 | http.HandleFunc("/", app.LoginView)
16 | http.HandleFunc("/login.html", app.LoginView)
17 |
18 | http.HandleFunc("/login", app.Login)
19 |
20 | http.HandleFunc("/issue.html", app.IssueView)
21 | http.HandleFunc("/issue", app.SaveBill)
22 |
23 | http.HandleFunc("/findBills", app.FindBills)
24 | http.HandleFunc("/billInfoByNo", app.FindBillInfoByNo)
25 | http.HandleFunc("/endorse", app.Endorse)
26 | http.HandleFunc("/waitEndorseBills", app.WaitEndorseBills)
27 | http.HandleFunc("/waitEndorseBillInfo", app.WaitEndorseBillInfo)
28 |
29 | http.HandleFunc("/accept", app.Accept)
30 | http.HandleFunc("/reject", app.Reject)
31 |
32 | http.HandleFunc("/loginout", app.Loginout)
33 |
34 | http.HandleFunc("/delete",app.Delete)
35 |
36 | fmt.Println("启动应用程序, 监听端口号为: 9000")
37 | err := http.ListenAndServe(":9000", nil)
38 | if err != nil {
39 | return fmt.Errorf("启动Web服务失败: %v", err)
40 | }
41 |
42 | return nil
43 |
44 |
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/web/controller/controllerHandler.go:
--------------------------------------------------------------------------------
1 | package controller
2 |
3 | import (
4 | "net/http"
5 | "github.com/kongyixueyuan.com/bill/service"
6 | "encoding/json"
7 | "fmt"
8 | )
9 |
10 | type Application struct {
11 | Fabric *service.FabricSetupService
12 | }
13 |
14 | var cuser User
15 |
16 | func (app *Application) LoginView(w http.ResponseWriter, r *http.Request) {
17 | response(w, r, "login.html", nil)
18 | }
19 |
20 | func (app *Application) Login(w http.ResponseWriter, r *http.Request) {
21 | userName := r.FormValue("userName")
22 | password := r.FormValue("password")
23 |
24 | var flag = false
25 | for _, user := range Users {
26 | if userName == user.UserName && password == user.Password {
27 | cuser = user
28 | flag = true
29 | break
30 | }
31 | }
32 |
33 | if flag{
34 | app.FindBills(w, r)
35 | }else {
36 | data := &struct {
37 | Name string
38 | Flag bool
39 | }{
40 | Name:userName,
41 | Flag:true,
42 | }
43 | response(w, r, "login.html", data)
44 | }
45 |
46 | }
47 |
48 | // 显示发布票据页面
49 | func (app *Application) IssueView(w http.ResponseWriter, r *http.Request) {
50 | data := &struct {
51 | Flag bool
52 | Msg string
53 | Cuser User
54 | }{
55 | Flag:false,
56 | Msg:"",
57 | Cuser:cuser,
58 | }
59 | response(w, r, "issue.html", data)
60 | }
61 |
62 | // 发布新票据
63 | func (app *Application) SaveBill(w http.ResponseWriter, r *http.Request) {
64 | bill := service.Bill{
65 | BillInfoID: r.FormValue("BillInfoID"),
66 | BillInfoType:r.FormValue("BillInfoType"),
67 | BillInfoAmt:r.FormValue("BillInfoAmt"),
68 |
69 | BillInfoDueDate:r.FormValue("BillInfoDueDate"),
70 | BillInfoIsseDate:r.FormValue("BillInfoIsseDate"),
71 |
72 | DrwrAcct: r.FormValue("DrwrAcct"),
73 | DrwrCmID: r.FormValue("DrwrCmID"),
74 |
75 | AccptrAcct: r.FormValue("AccptrAcct"),
76 | AccptrCmID: r.FormValue("AccptrCmID"),
77 |
78 | PyeeAcct: r.FormValue("PyeeAcct"),
79 | PyeeCmID: r.FormValue("PyeeCmID"),
80 |
81 | HoldrAcct: r.FormValue("HoldrAcct"),
82 | HoldrCmID: r.FormValue("HoldrCmID"),
83 | }
84 |
85 | transactionId, err := app.Fabric.SaveBill(bill)
86 | var msg string
87 | if err != nil {
88 | msg = "票据发布失败: " + err.Error()
89 | }else{
90 | msg = "票据发布成功: " + transactionId
91 | }
92 |
93 | data := &struct {
94 | Msg string
95 | Flag bool
96 | Cuser User
97 | }{
98 | Msg: msg,
99 | Flag:true,
100 | Cuser:cuser,
101 | }
102 | response(w, r, "issue.html", data)
103 |
104 | }
105 |
106 | // 查询我的票据列表
107 | func (app *Application) FindBills(w http.ResponseWriter, r *http.Request) {
108 | result, err := app.Fabric.FindBills(cuser.CmId)
109 | if err != nil{
110 | fmt.Println("查询票据列表错误: %v", err)
111 | }
112 | var bills []service.Bill
113 | json.Unmarshal(result, &bills)
114 |
115 | data := &struct {
116 | Bills []service.Bill
117 | Cuser User
118 | }{
119 | Bills:bills,
120 | Cuser:cuser,
121 | }
122 |
123 | response(w, r, "bills.html", data)
124 | }
125 |
126 | func (app *Application) FindBillInfoByNo(w http.ResponseWriter, r *http.Request) {
127 | billInfoNo := r.FormValue("billInfoNo")
128 | result, err := app.Fabric.FindBillByNo(billInfoNo)
129 | if err != nil {
130 | fmt.Println(err.Error())
131 | }
132 |
133 | var bill service.Bill
134 | json.Unmarshal(result, &bill)
135 |
136 | data := &struct {
137 | Bill service.Bill
138 | Cuser User
139 | Flag bool
140 | Msg string
141 | }{
142 | Bill:bill,
143 | Cuser:cuser,
144 | Flag:false,
145 | Msg:"",
146 | }
147 |
148 | flag := r.FormValue("flag")
149 | if flag == "t"{
150 | data.Flag = true
151 | data.Msg = r.FormValue("Msg")
152 | }
153 |
154 | response(w, r, "billInfo.html", data)
155 |
156 | }
157 |
158 | // 发起背书请求
159 | func (app *Application) Endorse(w http.ResponseWriter, r *http.Request) {
160 | waitEndorseAcct := r.FormValue("waitEndorseAcct")
161 | waitEndorseCmId := r.FormValue("waitEndorseCmId")
162 | billNo := r.FormValue("billNo")
163 |
164 | result, err := app.Fabric.Endorse(billNo, waitEndorseCmId, waitEndorseAcct)
165 | if err != nil {
166 | fmt.Println(err.Error())
167 | }
168 |
169 | r.Form.Set("billInfoNo", billNo)
170 |
171 | r.Form.Set("flag", "t")
172 | r.Form.Set("Msg", result)
173 |
174 |
175 | app.FindBillInfoByNo(w, r)
176 |
177 | //response(w, r, "billInfo.html", data)
178 | }
179 |
180 | // 待背书票据列表
181 | func (app *Application) WaitEndorseBills(w http.ResponseWriter, r *http.Request){
182 | waitEndorseCmId := cuser.CmId
183 | result, err := app.Fabric.FindWaitBills(waitEndorseCmId)
184 | if err != nil {
185 | fmt.Println(err.Error())
186 | }
187 | var bills []service.Bill
188 | json.Unmarshal(result, &bills)
189 |
190 | data := &struct {
191 | Bills []service.Bill
192 | Cuser User
193 | }{
194 | Bills:bills,
195 | Cuser:cuser,
196 | }
197 | response(w, r, "waitBills.html", data)
198 | }
199 |
200 | // 待背书票据详情
201 | func (app *Application) WaitEndorseBillInfo(w http.ResponseWriter, r *http.Request) {
202 | billNo := r.FormValue("billNo")
203 | result, err := app.Fabric.FindBillByNo(billNo)
204 | if err != nil {
205 | fmt.Println(err.Error())
206 | }
207 |
208 | var bill service.Bill
209 | json.Unmarshal(result, &bill)
210 |
211 | data := &struct {
212 | Bill service.Bill
213 | Cuser User
214 | Flag bool
215 | Msg string
216 | }{
217 | Bill:bill,
218 | Cuser:cuser,
219 | Flag:false,
220 | Msg:"",
221 | }
222 |
223 | flag := r.FormValue("flag")
224 | if flag == "t" {
225 | data.Flag = true
226 | data.Msg = r.FormValue("Msg")
227 | }
228 |
229 | response(w, r, "waitBillInfo.html", data)
230 | }
231 |
232 | func (app *Application) Loginout(w http.ResponseWriter, r *http.Request) {
233 | cuser = User{}
234 | app.LoginView(w, r)
235 | }
236 |
237 | func (app *Application)Delete(w http.ResponseWriter,r *http.Request) {
238 | billNo := r.FormValue("billNo")
239 | err := app.Fabric.Delete(billNo)
240 | if err != nil {
241 | fmt.Println(err.Error())
242 | }
243 | fmt.Println("删除票据结束")
244 | response(w, r, "bills.html", nil)
245 | fmt.Println("删除票据结束跳转")
246 | }
247 |
248 | // 签收
249 | func (app *Application) Accept(w http.ResponseWriter, r *http.Request){
250 | billNo := r.FormValue("billNo")
251 | cmid := cuser.CmId
252 | acct := cuser.Acct
253 |
254 | result, err := app.Fabric.EndorseAccept(billNo,cmid, acct)
255 | if err != nil {
256 | fmt.Println(err.Error())
257 | }
258 |
259 | r.Form.Set("billNo", billNo)
260 | r.Form.Set("flag", "t")
261 | r.Form.Set("Msg", result)
262 |
263 | app.WaitEndorseBillInfo(w, r)
264 |
265 | }
266 |
267 | // 拒签
268 | func (app *Application) Reject(w http.ResponseWriter, r *http.Request) {
269 | billNo := r.FormValue("billNo")
270 | cmid := cuser.CmId
271 | acct := cuser.Acct
272 | result, err := app.Fabric.EndorseReject(billNo, cmid, acct)
273 | if err != nil {
274 | fmt.Println(err.Error())
275 | }
276 |
277 | r.Form.Set("billNo", billNo)
278 | r.Form.Set("flag", "t")
279 | r.Form.Set("Msg", result)
280 |
281 | app.WaitEndorseBillInfo(w, r)
282 | }
283 |
284 |
--------------------------------------------------------------------------------
/web/controller/controllerResponse.go:
--------------------------------------------------------------------------------
1 | package controller
2 |
3 | import (
4 | "net/http"
5 | "path/filepath"
6 | "html/template"
7 | "fmt"
8 | )
9 |
10 | func response(w http.ResponseWriter, r *http.Request, templateName string, data interface{}) {
11 | path := filepath.Join("web", "tpl", templateName)
12 |
13 | // 创建模板实例
14 | result, err := template.ParseFiles(path)
15 | if err != nil {
16 | fmt.Fprint(w, err.Error())
17 | }
18 |
19 | // 融合数据
20 | err = result.Execute(w, data)
21 | if err != nil {
22 | fmt.Fprintf(w, err.Error())
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/web/controller/domain.go:
--------------------------------------------------------------------------------
1 | package controller
2 |
3 | type User struct {
4 | UserName string
5 | Password string
6 |
7 | CmId string
8 | Acct string
9 | }
10 |
11 | var Users []User
12 |
13 | func init() {
14 | u := User{"admin", "123456", "AAMID", "管理员"}
15 | u2 := User{"alice", "123456", "ACMID", "A公司"}
16 | u3 := User{"bob", "123456", "BCMID", "B公司"}
17 | u4 := User{"jack", "123456", "CCMID", "C公司"}
18 |
19 | Users = append(Users, u)
20 | Users = append(Users, u2)
21 | Users = append(Users, u3)
22 | Users = append(Users, u4)
23 | }
24 |
--------------------------------------------------------------------------------
/web/static/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitchenjh/bill/f0375b41821e285ba03d68a7a189d41b97f20b77/web/static/.DS_Store
--------------------------------------------------------------------------------
/web/static/css/billCommon.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";
2 | html,body{
3 | height:100%;
4 | margin:0;
5 | }
6 | .container{
7 | width: 100%;
8 | height: 100%;
9 | background: #f0f3f4;
10 | position: relative;
11 | font-family: '微软雅黑';
12 | }
13 | .bill .top{
14 | height: 60px;
15 | line-height: 60px;
16 | color: #fff;
17 | background-color: #1199c4;
18 | padding-left: 50px;
19 | font-size: 20px;
20 | }
21 | .bill .top div{
22 | height: 40px;
23 | line-height: 40px;
24 | display: inline-block;
25 | margin-left: 150px;
26 | padding: 10px;
27 | position: relative;
28 | cursor: pointer;
29 | }
30 | .bill .top div b{
31 | display: inline-block;
32 | width: 0px;
33 | height: 0px;
34 | border-top: 10px solid #fff;
35 | border-left: 10px solid transparent;
36 | border-right: 10px solid transparent;
37 | }
38 | .bill .top div>span:nth-of-type(2){
39 | width: 80px;
40 | text-align: center;
41 | background-color: #1199c4;
42 | position: absolute;
43 | top:60px;
44 | left: 10px;
45 | display: none;
46 | z-index: 10;
47 | }
48 | .main{
49 | width: 100%;
50 | height: 100%;
51 | position: fixed;
52 | }
53 | .main .left{
54 | color: #58666e;
55 | font-family: '微软雅黑';
56 | /* width: 200px; */
57 | width: 16%;
58 | height: 100%;
59 | background-color: #dde6e9;
60 | display: inline-block;
61 | }
62 | h3{
63 | font-size: 20px;
64 | line-height: 30px;
65 | font-weight: normal;
66 | margin: 0;
67 | padding-top: 10px;
68 | }
69 | h3:hover{
70 | cursor: pointer;
71 | }
72 | h3>img{
73 | width: 20px;
74 | height: 20px;
75 | margin: 4px 20px auto;
76 | vertical-align: text-top;
77 | }
78 | h3>span img{
79 | width: 15px;
80 | height: 8px;
81 | margin-left: 40%;
82 | }
83 | #list{
84 | background-color: #e4eaec;
85 | }
86 | #list li{
87 | font-size: 18px;
88 | list-style: none;
89 | line-height: 50px;
90 | padding-left: 70px;
91 | margin-left: -45px;
92 | }
93 | #list li:hover{
94 | cursor: pointer;
95 | background: #f0f3f4;
96 | }
97 | .right{
98 | width: 84%;
99 | height: 100%;
100 | position: absolute;
101 | top: 0;
102 | left: 20%;
103 | overflow-y: scroll;
104 | /* left: 26%; */
105 | }
106 | .right table{
107 | color: #58666e;
108 | border: 1px solid #dee5e7;
109 | border-collapse:collapse;
110 | margin-top: 40px;
111 | background-color: #f6f8f8;
112 | }
113 | .right table tr:nth-child(even){
114 | background-color: #fff;
115 | }
116 | .right table td,.right table th{
117 | width: 287px;
118 | height: auto;
119 | text-align: left;
120 | word-break: break-all;
121 | word-wrap: break-word;
122 | padding: 10px;
123 | border-top: 1px solid #dee5e7;
124 | border-bottom: 1px solid #dee5e7;
125 | }
126 | /* 详情按钮 */
127 | .detail{
128 | display: block;
129 | width: 80px;
130 | height:auto;
131 | text-align: center;
132 | line-height: 30px;
133 | color: #fff;
134 | border-radius: 4px;
135 | background-color: #27c24c;
136 | }
137 | .detail:hover{
138 | cursor: pointer;
139 | }
140 |
141 | /*
142 | .delete{
143 | display: block;
144 | width: 80px;
145 | height:auto;
146 | color: #fff;
147 | border-radius: 4px;
148 | background-color: #27c24c;
149 | }
150 |
151 | .delete:hover{
152 | cursor: pointer;
153 | }*/
154 |
155 | .right>div{
156 | position: absolute;
157 | display: none;
158 | }
159 | .right>div:nth-of-type(1){
160 | display: block;
161 | }
162 | .current{
163 | background:#f0f3f4;
164 | }
165 | .publish>div,#myBillDetail>div,#myUnBillDetail>div{
166 | margin-top: 20px;
167 | }
168 | .publish>div>div,#myBillDetail>div,#myUnBillDetail>div{
169 | display: inline-block;
170 | vertical-align: top;
171 | margin-right: 30px;
172 | }
173 | .publish>div>div>input,#myBillDetail>div>input,#myUnBillDetail>div>input{
174 | width: 260px;
175 | height: 20px;
176 | line-height: 20px;
177 | padding: 10px;
178 | outline: none;
179 | border-radius: 4px;
180 | border: 1px solid lightgrey;
181 | }
182 | #myBillDetail>div>input,#myUnBillDetail>div>input{
183 | overflow: hidden;
184 | text-overflow: ellipsis;
185 | white-space: nowrap;
186 | }
187 | .publish>div>p{
188 | text-align: right;
189 | padding-right: 334px;
190 | }
191 | .publish>div>p span {
192 | display: inline-block;
193 | width: 60px;
194 | height: 20px;
195 | line-height: 20px;
196 | text-align: center;
197 | color: #fff;
198 | font-size: 18px;
199 | background-color: #27c24c;
200 | padding: 10px;
201 | margin: 30px;
202 | border-radius: 6px;
203 | }
204 | .publish>div>p span input{
205 | border: none;
206 | background: none;
207 | color: white;
208 | font-size: 18px;
209 | line-height: 20px;
210 | }
211 | .publish>div>p span:hover{
212 | cursor: pointer;
213 | }
214 | .publish>div>p span:nth-of-type(2){
215 | margin-left: -10px;
216 | border: 1px solid lightgrey;
217 | }
218 | /* 详情信息 */
219 | #myBillDetail,#myUnBillDetail{
220 | /* display: none; */
221 | color: #58666e;
222 | }
223 | #myBillDetail>form>p:nth-of-type(2) span,#myBillDetail form p:nth-of-type(1) span{
224 | display: inline-block;
225 | width: 650px;
226 | height: auto;
227 | }
228 | #myBillDetail form>p:nth-of-type(2) span{
229 | display: inline-block;
230 | width: 120px;
231 | color: #fff !important;
232 | }
233 | #myBillDetail form>p:nth-of-type(1) span:nth-of-type(1){
234 | letter-spacing: 5px;
235 | }
236 | #myBillDetail form>p:nth-of-type(2) span:nth-of-type(2) input{
237 | color: #333 !important;
238 | background: #fff;
239 | }
240 | #myBillDetail>p:nth-of-type(2) span input,#myBillDetail form p:nth-of-type(1) span input{
241 | width: 500px;
242 | height: 20px;
243 | padding: 10px;
244 | border:1px solid lightgrey;
245 | border-radius: 4px;
246 | margin-top: 10px;
247 | outline: none;
248 | }
249 | #myBillDetail>p:nth-of-type(3),#myUnBillDetail>p,#myBillDetail form p:nth-of-type(2) span input{
250 | margin-bottom: 150px;
251 | }
252 | #myBillDetail>p:nth-of-type(3) span,#myUnBillDetail>p span,#myBillDetail form p:nth-of-type(2) span input{
253 | display: inline-block;
254 | width: 100px;
255 | height: 40px;
256 | line-height: 40px;
257 | text-align: center;
258 | font-size: 18px;
259 | background-color: #27c24c;
260 | border-radius: 4px;
261 | margin-right: 20px;
262 | cursor: pointer;
263 | }
264 | #myUnBillDetail>p a{
265 | color: #fff;
266 | line-height: 20px;
267 | text-decoration: none;
268 | }
269 | #myUnBillDetail>p a:hover{
270 | cursor: pointer;
271 | text-decoration: none;
272 | }
273 | #myBillDetail>p:nth-of-type(3) span:nth-of-type(2),#myUnBillDetail>p span:nth-of-type(3){
274 | color: #58666e;
275 | border: 1px solid lightgrey;
276 | }
277 | #myUnBillDetail>p span:nth-of-type(3){
278 | background-color: #fff;
279 | }
--------------------------------------------------------------------------------
/web/static/css/login.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";
2 | html,body{
3 | height:100%;
4 | margin:0;
5 | }
6 | .container{
7 | width: 100%;
8 | height: 100%;
9 | background: #f0f3f4;
10 | position: relative;
11 | font-family: '微软雅黑';
12 | }
13 | .login{
14 | width: 500px;
15 | height: 400px;
16 | /* background: #fff; */
17 | position: absolute;
18 | left: 50%;
19 | top: 200px;
20 | margin-left: -250px;
21 | text-align: center;
22 | }
23 | .login h2{
24 | color: #58666e;
25 | }
26 | .login p{
27 | color: #7a666e;
28 | }
29 | .login input,.login button{
30 | display: block;
31 | color: #7a666e;
32 | font-family: '微软雅黑';
33 | font-size: 16px;
34 | height: 40px;
35 | line-height: 40px;
36 | margin: 0 auto;
37 | outline: none;
38 | }
39 | .login input{
40 | width: 260px;
41 | padding-left: 20px;
42 | padding-right: 20px;
43 | border: 1px solid #e7ecee;
44 | border-radius: 4px;
45 | }
46 | .login button{
47 | width: 300px;
48 | border: none;
49 | color: #fff;
50 | background-color: #9e98ce;
51 | margin-top: 20px;
52 | cursor: pointer;
53 | }
54 |
--------------------------------------------------------------------------------
/web/static/css/popout.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";
2 | #popout{
3 | width: 100%;
4 | height: 100%;
5 | font-family: '微软雅黑';
6 | background-color: rgba(0,0,0,.5);
7 | position: absolute;
8 | z-index: 1;
9 | display: block;
10 | }
11 | .popout{
12 | width: 500px;
13 | height: auto;
14 | line-height: 30px;
15 | color: #000;
16 | font-size: 20px;
17 | background: #fff;
18 | padding: 30px;
19 | text-align: left;
20 | position: relative;
21 | left:50%;
22 | top: 200px;
23 | margin-left:-250px;
24 | z-index:1;
25 | border-radius: 2px;
26 | }
27 | .popout>div,.popout>div p{
28 | width: 100%;
29 | font-family: '微软雅黑';
30 | word-break: break-all;
31 | word-wrap: break-word;
32 | }
33 | .popout>div p:nth-of-type(1){
34 | color: #333;
35 | font-size: 20px;
36 | font-weight: bolder;
37 | }
38 | .popout>div p:nth-of-type(2){
39 | color: #58666e;
40 | font-size: 16px;
41 | }
42 | .popout>p{
43 | text-align: right;
44 | }
45 | .popout>p button{
46 | width: 100px;
47 | height: 40px;
48 | line-height: 40px;
49 | border: none;
50 | border-radius: 6px;
51 | outline: none;
52 | color: #fff;
53 | font-size: 18px;
54 | background-color: #3288e6;
55 | font-family: '微软雅黑';
56 | cursor: pointer;
57 | }
58 |
--------------------------------------------------------------------------------
/web/static/images/jt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitchenjh/bill/f0375b41821e285ba03d68a7a189d41b97f20b77/web/static/images/jt.png
--------------------------------------------------------------------------------
/web/static/images/jt2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitchenjh/bill/f0375b41821e285ba03d68a7a189d41b97f20b77/web/static/images/jt2.png
--------------------------------------------------------------------------------
/web/static/images/menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitchenjh/bill/f0375b41821e285ba03d68a7a189d41b97f20b77/web/static/images/menu.png
--------------------------------------------------------------------------------
/web/static/js/billCommon.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function() {
2 | // 顶部按钮
3 | var divSpan = $(".bill .top div>span:nth-of-type(2)");
4 | $('.bill .top div span:nth-of-type(1)').on('click',function() {
5 | if(divSpan.css("display")=="none"){
6 | divSpan.show();
7 | }else{
8 | divSpan.hide();
9 | }
10 | });
11 | // 退出
12 | $('.exit').on('click',function() {
13 | $(location).attr('href','/loginout')
14 | })
15 |
16 | // 折叠菜单
17 | function filterSpaceNode(node){
18 | for(var i = 0;i背书成功
aaa111a1111111111f1111111r1112222222ffff22222222222222222ccvcv22222
');
57 | })
58 | // 票据列表关闭按钮
59 | $('#myBillDetail>p:nth-of-type(3) span:nth-of-type(2)').on('click',function() {
60 | $(location).attr('href','./bills.html');
61 | })
62 |
63 | // 待签收票据详情按钮
64 | $('.myUnBill .detail').on('click',function() {
65 | $(location).attr('href','./waitEndorseInfo.html')
66 | })
67 |
68 | // 签收背书
69 | $('#myUnBillDetail>p span:nth-of-type(1)').on('click',function() {
70 | $('#popout').css('display','block');
71 | $('.popout div').html('已签收成功
aaa111a1111111111f1111111r1112222222ffff22222222222222222ccvcv22222
');
72 | })
73 | // 拒绝背书
74 | $('#myUnBillDetail>p span:nth-of-type(2)').on('click',function() {
75 | $('#popout').css('display','block');
76 | $('.popout div').html('已拒绝成功
aaa111a1111111111f1111111r1112222222ffff22222222222222222ccvcv22222
');
77 | })*/
78 | // 待背书列表关闭按钮
79 | $('#myUnBillDetail>p span:nth-of-type(3)').on('click',function() {
80 | $(location).attr('href','/waitEndorseBills')
81 | })
82 | })
83 |
--------------------------------------------------------------------------------
/web/static/js/login.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function() {
2 | $('#btn').on('click',function() {
3 | var name = $('#name').val();
4 | var pwd = $('#pwd').val();
5 | if(name == '' || pwd == ''){
6 | $('#popout').css('display','block');
7 | $('.popout div').text('请输入用户名/密码');
8 | }else{
9 | location.href='./login'
10 | }
11 | })
12 | })
13 |
--------------------------------------------------------------------------------
/web/static/js/popout.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function() {
2 | $('.popout button').on('click',function() {
3 | $('#popout').css('display','none');
4 | })
5 | })
6 |
--------------------------------------------------------------------------------
/web/tpl/billInfo.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | issue
6 |
7 |
8 |
9 |
10 |
11 |
12 |
15 |
16 |
17 | {{if .Flag}}
18 |
19 |
20 |
{{.Msg}}
21 |
22 |
23 |
24 |
25 |
26 | {{end}}
27 |
28 |
29 |
30 |
区块链票据
31 |
32 |
33 |
34 | {{.Cuser.Acct}}
35 |
36 | 退出
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | 菜单
45 |
46 |
47 |
48 |
49 |
50 |
51 | - 发布票据
52 | - 我的票据
53 | - 待签收票据
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 | 票据信息
65 |
票据状态:新发布
66 |
67 |
68 | 历史流转记录 |
69 |
70 |
71 | 票据编号 |
72 | 操作业务 |
73 | 操作描述 |
74 | 当前持票人 |
75 |
76 | {{range .Bill.History}}
77 |
78 | {{.Bill.BillInfoID}} |
79 |
80 | {{if eq .Bill.State "NewPublish"}}
81 | 票据新发布
82 | {{else if eq .Bill.State "EndorseWaitSign"}}
83 | 票据待签收
84 | {{else if eq .Bill.State "EndorseSigned"}}
85 | 票据已签收
86 | {{else if eq .Bill.State "EndorseReject"}}
87 | 票据拒签收
88 | {{end}}
89 | |
90 |
91 | {{if eq .Bill.State "NewPublish"}}
92 | {{.Bill.HoldrAcct}}
93 | {{else if eq .Bill.State "EndorseWaitSign"}}
94 | {{.Bill.HoldrAcct}}向{{.Bill.WaitEndorseAcct}}发起背书请求
95 | {{else if eq .Bill.State "EndorseSigned"}}
96 | {{.Bill.HoldrAcct}}签收了票据
97 | {{else if eq .Bill.State "EndorseReject"}}
98 | {{.Bill.RejectEndorseAcct}}拒签票据
99 | {{end}}
100 | |
101 | {{.Bill.HoldrAcct}} |
102 |
103 | {{end}}
104 |
105 |
106 |
票据号码
107 |
108 |
票据金额
109 |
110 |
票据类型
111 |
112 |
113 |
114 |
票据出票日期
115 |
116 |
票据到期日期
117 |
118 |
119 |
120 |
出票人名称
121 |
122 |
出票人证件号码
123 |
124 |
承兑人名称
125 |
126 |
承兑人证件号码
127 |
128 |
129 |
130 |
收款人名称
131 |
132 |
收款人证件号码
133 |
134 |
持票人名称
135 |
136 |
持票人证件号码
137 |
138 |
139 | {{if ne .Bill.State "EndorseWaitSign"}}
140 |
若发起背书请填写被背书人信息
141 |
159 | {{end}}
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
--------------------------------------------------------------------------------
/web/tpl/bills.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | issue
6 |
7 |
8 |
9 |
10 |
11 |
12 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
区块链票据
22 |
23 |
24 |
25 | {{.Cuser.Acct}}
26 |
27 | 退出
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | 菜单
36 |
37 |
38 |
39 |
40 |
41 |
42 | - 发布票据
43 | - 我的票据
44 | - 待签收票据
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | 票据列表 |
55 |
56 |
57 | 票据号 |
58 | 票据状态 |
59 | 所属关系 |
60 | 操作 |
61 |
62 |
63 | {{range .Bills}}
64 |
65 | {{.BillInfoID}} |
66 |
67 | {{if eq .State "NewPublish"}}
68 | 票据新发布
69 | {{end}}
70 | {{if eq .State "EndorseWaitSign"}}
71 | 待{{.WaitEndorseAcct}}签收
72 | {{end}}
73 | {{if eq .State "EndorseSigned"}}
74 | 票据签收成功
75 | {{end}}
76 | {{if eq .State "EndorseReject"}}
77 | {{.RejectEndorseAcct}}拒签收
78 | {{end}}
79 | |
80 | {{.HoldrAcct}}持有 |
81 | 详情 |
82 |
83 |
84 | {{end}}
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/web/tpl/issue.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | issue
6 |
7 |
8 |
9 |
10 |
11 |
12 |
15 |
16 |
17 | {{if .Flag}}
18 |
19 |
20 |
{{.Msg}}
21 |
22 |
23 |
24 |
25 |
26 | {{end}}
27 |
28 |
29 |
30 |
区块链票据
31 |
32 |
33 |
34 | {{.Cuser.Acct}}
35 |
36 | 退出
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | 菜单
45 |
46 |
47 |
48 |
49 |
50 |
51 | - 发布票据
52 | - 我的票据
53 | - 待签收票据
54 |
55 |
56 |
57 |
58 |
105 |
106 |
107 |
108 |
109 |
110 |
--------------------------------------------------------------------------------
/web/tpl/login.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 银行区块链票据项目
6 |
7 |
8 |
9 |
10 |
11 |
12 |
15 |
16 |
17 |
18 | {{if .Flag}}
19 |
20 |
21 |
用户名或密码输入错误!请重新输入
22 |
23 |
24 |
25 | {{end}}
26 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/web/tpl/waitBillInfo.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | issue
6 |
7 |
8 |
9 |
10 |
11 |
12 |
15 |
16 |
17 | {{if .Flag}}
18 |
19 |
20 |
{{.Msg}}
21 |
22 |
23 |
24 |
25 |
26 | {{end}}
27 |
28 |
29 |
30 |
区块链票据
31 |
32 |
33 |
34 | {{.Cuser.Acct}}
35 |
36 | 退出
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | 菜单
45 |
46 |
47 |
48 |
49 |
50 |
51 | - 发布票据
52 | - 我的票据
53 | - 待签收票据
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | 票据信息
66 |
票据状态:背书待签收
67 |
68 |
69 | 历史流转记录 |
70 |
71 |
72 | 票据编号 |
73 | 操作业务 |
74 | 操作描述 |
75 | 当前持票人 |
76 |
77 | {{range .Bill.History}}
78 |
79 | {{.Bill.BillInfoID}} |
80 |
81 | {{if eq .Bill.State "NewPublish"}}
82 | 票据新发布
83 | {{else if eq .Bill.State "EndorseWaitSign"}}
84 | 票据待签收
85 | {{else if eq .Bill.State "EndorseSigned"}}
86 | 票据已签收
87 | {{else if eq .Bill.State "EndorseReject"}}
88 | 票据拒签收
89 | {{end}}
90 | |
91 |
92 | {{if eq .Bill.State "NewPublish"}}
93 | {{.Bill.HoldrAcct}}
94 | {{else if eq .Bill.State "EndorseWaitSign"}}
95 | {{.Bill.HoldrAcct}}向{{.Bill.WaitEndorseAcct}}发起背书请求
96 | {{else if eq .Bill.State "EndorseSigned"}}
97 | {{.Bill.HoldrAcct}}签收了票据
98 | {{else if eq .Bill.State "EndorseReject"}}
99 | {{.Bill.RejectEndorseAcct}}拒签票据
100 | {{end}}
101 | |
102 | {{.Bill.HoldrAcct}} |
103 |
104 | {{end}}
105 |
106 |
107 |
票据号码
108 |
109 |
票据金额
110 |
111 |
票据类型
112 |
113 |
114 |
115 |
票据出票日期
116 |
117 |
票据到期日期
118 |
119 |
120 |
121 |
出票人名称
122 |
123 |
出票人证件号码
124 |
125 |
承兑人名称
126 |
127 |
承兑人证件号码
128 |
129 |
130 |
131 |
收款人名称
132 |
133 |
收款人证件号码
134 |
135 |
持票人名称
136 |
137 |
持票人证件号码
138 |
139 |
140 |
141 |
142 | 签收背书
143 | 拒绝背书
144 | 关闭
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
--------------------------------------------------------------------------------
/web/tpl/waitBills.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | issue
6 |
7 |
8 |
9 |
10 |
11 |
12 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
区块链票据
22 |
23 |
24 |
25 | {{.Cuser.Acct}}
26 |
27 | 退出
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | 菜单
36 |
37 |
38 |
39 |
40 |
41 |
42 | - 发布票据
43 | - 我的票据
44 | - 待签收票据
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | 票据列表 |
56 |
57 |
58 | 票据号 |
59 | 票据状态 |
60 | 所属关系 |
61 | 操作 |
62 |
63 | {{range .Bills}}
64 |
65 | {{.BillInfoID}} |
66 |
67 | {{if eq .State "NewPublish"}}
68 | 票据新发布
69 | {{end}}
70 | {{if eq .State "EndorseWaitSign"}}
71 | 待{{.WaitEndorseAcct}}签收
72 | {{end}}
73 | {{if eq .State "EndorseSigned"}}
74 | 票据签收成功
75 | {{end}}
76 | {{if eq .State "EndorseReject"}}
77 | {{.RejectEndorseAcct}}拒签收
78 | {{end}}
79 | |
80 |
81 | {{.HoldrAcct}}持有
82 | |
83 | 详情 |
84 |
85 | {{end}}
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
--------------------------------------------------------------------------------