区块链logo | 您所在的位置:网站首页 › 武冈有多少平方公里有多少人口 › 区块链logo |
最近在用Hyperledger Fabric平台做一个项目,要使用区块链浏览器。以下是我的基础环境的情况以及搭建过程。 版本 Ubuntu22.04.1 LTS运行内存8.0 GiB处理器Intel® Core™ i7-8700 CPU @ 3.20GHz × 12Hyperledger Fabric2.2golang1.17.5docker20.10.12docker-compose1.29.2nodejsv12.22.9npm8.5.1在基础环境配好之后,就可以搭建区块链浏览器了。首先要在项目目录里面建立explorer文件夹,并需要进入explorer文件夹,以下为对应命令。 mkdir explorer cd explorer 在建立好explorer文件夹之后,项目目录结构是这样的。 更具体的目录结构是这样的(这是搭建完成之后的),此处使用了tree -L 9命令。 . ├── chaincode │ ├── go.mod │ ├── go.sum │ ├── med.go │ └── vendor │ ├── github.com │ │ ├── golang │ │ │ └── protobuf │ │ │ ├── AUTHORS │ │ │ ├── CONTRIBUTORS │ │ │ ├── LICENSE │ │ │ ├── proto │ │ │ │ ├── clone.go │ │ │ │ ├── decode.go │ │ │ │ ├── deprecated.go │ │ │ │ ├── discard.go │ │ │ │ ├── encode.go │ │ │ │ ├── equal.go │ │ │ │ ├── extensions.go │ │ │ │ ├── lib.go │ │ │ │ ├── message_set.go │ │ │ │ ├── pointer_reflect.go │ │ │ │ ├── pointer_unsafe.go │ │ │ │ ├── properties.go │ │ │ │ ├── table_marshal.go │ │ │ │ ├── table_merge.go │ │ │ │ ├── table_unmarshal.go │ │ │ │ ├── text.go │ │ │ │ └── text_parser.go │ │ │ └── ptypes │ │ │ ├── any │ │ │ │ ├── any.pb.go │ │ │ │ └── any.proto │ │ │ ├── any.go │ │ │ ├── doc.go │ │ │ ├── duration │ │ │ │ ├── duration.pb.go │ │ │ │ └── duration.proto │ │ │ ├── duration.go │ │ │ ├── empty │ │ │ │ ├── empty.pb.go │ │ │ │ └── empty.proto │ │ │ ├── timestamp │ │ │ │ ├── timestamp.pb.go │ │ │ │ └── timestamp.proto │ │ │ └── timestamp.go │ │ └── hyperledger │ │ ├── fabric-chaincode-go │ │ │ ├── LICENSE │ │ │ └── shim │ │ │ ├── chaincodeserver.go │ │ │ ├── handler.go │ │ │ ├── interfaces.go │ │ │ ├── internal │ │ │ │ ├── client.go │ │ │ │ ├── config.go │ │ │ │ └── server.go │ │ │ ├── response.go │ │ │ ├── shim.go │ │ │ └── stub.go │ │ └── fabric-protos-go │ │ ├── common │ │ │ ├── collection.pb.go │ │ │ ├── common.pb.go │ │ │ ├── configtx.pb.go │ │ │ ├── configuration.pb.go │ │ │ ├── ledger.pb.go │ │ │ └── policies.pb.go │ │ ├── ledger │ │ │ ├── queryresult │ │ │ │ └── kv_query_result.pb.go │ │ │ └── rwset │ │ │ └── rwset.pb.go │ │ ├── LICENSE │ │ ├── msp │ │ │ ├── identities.pb.go │ │ │ ├── msp_config.pb.go │ │ │ └── msp_principal.pb.go │ │ └── peer │ │ ├── chaincode_event.pb.go │ │ ├── chaincode.pb.go │ │ ├── chaincode_shim.pb.go │ │ ├── collection.pb.go │ │ ├── configuration.pb.go │ │ ├── events.pb.go │ │ ├── peer.pb.go │ │ ├── policy.pb.go │ │ ├── proposal.pb.go │ │ ├── proposal_response.pb.go │ │ ├── query.pb.go │ │ ├── resources.pb.go │ │ ├── signed_cc_dep_spec.pb.go │ │ ├── snapshot.pb.go │ │ └── transaction.pb.go │ ├── golang.org │ │ └── x │ │ ├── net │ │ │ ├── AUTHORS │ │ │ ├── CONTRIBUTORS │ │ │ ├── http │ │ │ │ └── httpguts │ │ │ │ ├── guts.go │ │ │ │ └── httplex.go │ │ │ ├── http2 │ │ │ │ ├── ciphers.go │ │ │ │ ├── client_conn_pool.go │ │ │ │ ├── databuffer.go │ │ │ │ ├── Dockerfile │ │ │ │ ├── errors.go │ │ │ │ ├── flow.go │ │ │ │ ├── frame.go │ │ │ │ ├── go111.go │ │ │ │ ├── gotrack.go │ │ │ │ ├── headermap.go │ │ │ │ ├── hpack │ │ │ │ │ ├── encode.go │ │ │ │ │ ├── hpack.go │ │ │ │ │ ├── huffman.go │ │ │ │ │ └── tables.go │ │ │ │ ├── http2.go │ │ │ │ ├── Makefile │ │ │ │ ├── not_go111.go │ │ │ │ ├── pipe.go │ │ │ │ ├── README │ │ │ │ ├── server.go │ │ │ │ ├── transport.go │ │ │ │ ├── write.go │ │ │ │ ├── writesched.go │ │ │ │ ├── writesched_priority.go │ │ │ │ └── writesched_random.go │ │ │ ├── idna │ │ │ │ ├── idna10.0.0.go │ │ │ │ ├── idna9.0.0.go │ │ │ │ ├── punycode.go │ │ │ │ ├── tables10.0.0.go │ │ │ │ ├── tables11.0.0.go │ │ │ │ ├── tables9.0.0.go │ │ │ │ ├── trie.go │ │ │ │ └── trieval.go │ │ │ ├── internal │ │ │ │ └── timeseries │ │ │ │ └── timeseries.go │ │ │ ├── LICENSE │ │ │ ├── PATENTS │ │ │ └── trace │ │ │ ├── events.go │ │ │ ├── histogram.go │ │ │ └── trace.go │ │ ├── sys │ │ │ ├── AUTHORS │ │ │ ├── CONTRIBUTORS │ │ │ ├── LICENSE │ │ │ ├── PATENTS │ │ │ └── unix │ │ │ ├── affinity_linux.go │ │ │ ├── aliases.go │ │ │ ├── asm_aix_ppc64.s │ │ │ ├── asm_darwin_386.s │ │ │ ├── asm_darwin_amd64.s │ │ │ ├── asm_darwin_arm64.s │ │ │ ├── asm_darwin_arm.s │ │ │ ├── asm_dragonfly_amd64.s │ │ │ ├── asm_freebsd_386.s │ │ │ ├── asm_freebsd_amd64.s │ │ │ ├── asm_freebsd_arm64.s │ │ │ ├── asm_freebsd_arm.s │ │ │ ├── asm_linux_386.s │ │ │ ├── asm_linux_amd64.s │ │ │ ├── asm_linux_arm64.s │ │ │ ├── asm_linux_arm.s │ │ │ ├── asm_linux_mips64x.s │ │ │ ├── asm_linux_mipsx.s │ │ │ ├── asm_linux_ppc64x.s │ │ │ ├── asm_linux_riscv64.s │ │ │ ├── asm_linux_s390x.s │ │ │ ├── asm_netbsd_386.s │ │ │ ├── asm_netbsd_amd64.s │ │ │ ├── asm_netbsd_arm64.s │ │ │ ├── asm_netbsd_arm.s │ │ │ ├── asm_openbsd_386.s │ │ │ ├── asm_openbsd_amd64.s │ │ │ ├── asm_openbsd_arm64.s │ │ │ ├── asm_openbsd_arm.s │ │ │ ├── asm_solaris_amd64.s │ │ │ ├── bluetooth_linux.go │ │ │ ├── cap_freebsd.go │ │ │ ├── constants.go │ │ │ ├── dev_aix_ppc64.go │ │ │ ├── dev_aix_ppc.go │ │ │ ├── dev_darwin.go │ │ │ ├── dev_dragonfly.go │ │ │ ├── dev_freebsd.go │ │ │ ├── dev_linux.go │ │ │ ├── dev_netbsd.go │ │ │ ├── dev_openbsd.go │ │ │ ├── dirent.go │ │ │ ├── endian_big.go │ │ │ ├── endian_little.go │ │ │ ├── env_unix.go │ │ │ ├── errors_freebsd_386.go │ │ │ ├── errors_freebsd_amd64.go │ │ │ ├── errors_freebsd_arm.go │ │ │ ├── fcntl_darwin.go │ │ │ ├── fcntl.go │ │ │ ├── fcntl_linux_32bit.go │ │ │ ├── gccgo_c.c │ │ │ ├── gccgo.go │ │ │ ├── gccgo_linux_amd64.go │ │ │ ├── ioctl.go │ │ │ ├── mkall.sh │ │ │ ├── mkerrors.sh │ │ │ ├── pagesize_unix.go │ │ │ ├── pledge_openbsd.go │ │ │ ├── race0.go │ │ │ ├── race.go │ │ │ ├── readdirent_getdents.go │ │ │ ├── readdirent_getdirentries.go │ │ │ ├── README.md │ │ │ ├── sockcmsg_linux.go │ │ │ ├── sockcmsg_unix.go │ │ │ ├── str.go │ │ │ ├── syscall_aix.go │ │ │ ├── syscall_aix_ppc64.go │ │ │ ├── syscall_aix_ppc.go │ │ │ ├── syscall_bsd.go │ │ │ ├── syscall_darwin_386.go │ │ │ ├── syscall_darwin_amd64.go │ │ │ ├── syscall_darwin_arm64.go │ │ │ ├── syscall_darwin_arm.go │ │ │ ├── syscall_darwin.go │ │ │ ├── syscall_darwin_libSystem.go │ │ │ ├── syscall_dragonfly_amd64.go │ │ │ ├── syscall_dragonfly.go │ │ │ ├── syscall_freebsd_386.go │ │ │ ├── syscall_freebsd_amd64.go │ │ │ ├── syscall_freebsd_arm64.go │ │ │ ├── syscall_freebsd_arm.go │ │ │ ├── syscall_freebsd.go │ │ │ ├── syscall.go │ │ │ ├── syscall_linux_386.go │ │ │ ├── syscall_linux_amd64_gc.go │ │ │ ├── syscall_linux_amd64.go │ │ │ ├── syscall_linux_arm64.go │ │ │ ├── syscall_linux_arm.go │ │ │ ├── syscall_linux_gc_386.go │ │ │ ├── syscall_linux_gccgo_386.go │ │ │ ├── syscall_linux_gccgo_arm.go │ │ │ ├── syscall_linux_gc.go │ │ │ ├── syscall_linux.go │ │ │ ├── syscall_linux_mips64x.go │ │ │ ├── syscall_linux_mipsx.go │ │ │ ├── syscall_linux_ppc64x.go │ │ │ ├── syscall_linux_riscv64.go │ │ │ ├── syscall_linux_s390x.go │ │ │ ├── syscall_linux_sparc64.go │ │ │ ├── syscall_netbsd_386.go │ │ │ ├── syscall_netbsd_amd64.go │ │ │ ├── syscall_netbsd_arm64.go │ │ │ ├── syscall_netbsd_arm.go │ │ │ ├── syscall_netbsd.go │ │ │ ├── syscall_openbsd_386.go │ │ │ ├── syscall_openbsd_amd64.go │ │ │ ├── syscall_openbsd_arm64.go │ │ │ ├── syscall_openbsd_arm.go │ │ │ ├── syscall_openbsd.go │ │ │ ├── syscall_solaris_amd64.go │ │ │ ├── syscall_solaris.go │ │ │ ├── syscall_unix_gc.go │ │ │ ├── syscall_unix_gc_ppc64x.go │ │ │ ├── syscall_unix.go │ │ │ ├── timestruct.go │ │ │ ├── unveil_openbsd.go │ │ │ ├── xattr_bsd.go │ │ │ ├── zerrors_aix_ppc64.go │ │ │ ├── zerrors_aix_ppc.go │ │ │ ├── zerrors_darwin_386.go │ │ │ ├── zerrors_darwin_amd64.go │ │ │ ├── zerrors_darwin_arm64.go │ │ │ ├── zerrors_darwin_arm.go │ │ │ ├── zerrors_dragonfly_amd64.go │ │ │ ├── zerrors_freebsd_386.go │ │ │ ├── zerrors_freebsd_amd64.go │ │ │ ├── zerrors_freebsd_arm64.go │ │ │ ├── zerrors_freebsd_arm.go │ │ │ ├── zerrors_linux_386.go │ │ │ ├── zerrors_linux_amd64.go │ │ │ ├── zerrors_linux_arm64.go │ │ │ ├── zerrors_linux_arm.go │ │ │ ├── zerrors_linux_mips64.go │ │ │ ├── zerrors_linux_mips64le.go │ │ │ ├── zerrors_linux_mips.go │ │ │ ├── zerrors_linux_mipsle.go │ │ │ ├── zerrors_linux_ppc64.go │ │ │ ├── zerrors_linux_ppc64le.go │ │ │ ├── zerrors_linux_riscv64.go │ │ │ ├── zerrors_linux_s390x.go │ │ │ ├── zerrors_linux_sparc64.go │ │ │ ├── zerrors_netbsd_386.go │ │ │ ├── zerrors_netbsd_amd64.go │ │ │ ├── zerrors_netbsd_arm64.go │ │ │ ├── zerrors_netbsd_arm.go │ │ │ ├── zerrors_openbsd_386.go │ │ │ ├── zerrors_openbsd_amd64.go │ │ │ ├── zerrors_openbsd_arm64.go │ │ │ ├── zerrors_openbsd_arm.go │ │ │ ├── zerrors_solaris_amd64.go │ │ │ ├── zptrace386_linux.go │ │ │ ├── zptracearm_linux.go │ │ │ ├── zptracemipsle_linux.go │ │ │ ├── zptracemips_linux.go │ │ │ ├── zsyscall_aix_ppc64_gccgo.go │ │ │ ├── zsyscall_aix_ppc64_gc.go │ │ │ ├── zsyscall_aix_ppc64.go │ │ │ ├── zsyscall_aix_ppc.go │ │ │ ├── zsyscall_darwin_386.1_11.go │ │ │ ├── zsyscall_darwin_386.go │ │ │ ├── zsyscall_darwin_386.s │ │ │ ├── zsyscall_darwin_amd64.1_11.go │ │ │ ├── zsyscall_darwin_amd64.go │ │ │ ├── zsyscall_darwin_amd64.s │ │ │ ├── zsyscall_darwin_arm.1_11.go │ │ │ ├── zsyscall_darwin_arm64.1_11.go │ │ │ ├── zsyscall_darwin_arm64.go │ │ │ ├── zsyscall_darwin_arm64.s │ │ │ ├── zsyscall_darwin_arm.go │ │ │ ├── zsyscall_darwin_arm.s │ │ │ ├── zsyscall_dragonfly_amd64.go │ │ │ ├── zsyscall_freebsd_386.go │ │ │ ├── zsyscall_freebsd_amd64.go │ │ │ ├── zsyscall_freebsd_arm64.go │ │ │ ├── zsyscall_freebsd_arm.go │ │ │ ├── zsyscall_linux_386.go │ │ │ ├── zsyscall_linux_amd64.go │ │ │ ├── zsyscall_linux_arm64.go │ │ │ ├── zsyscall_linux_arm.go │ │ │ ├── zsyscall_linux_mips64.go │ │ │ ├── zsyscall_linux_mips64le.go │ │ │ ├── zsyscall_linux_mips.go │ │ │ ├── zsyscall_linux_mipsle.go │ │ │ ├── zsyscall_linux_ppc64.go │ │ │ ├── zsyscall_linux_ppc64le.go │ │ │ ├── zsyscall_linux_riscv64.go │ │ │ ├── zsyscall_linux_s390x.go │ │ │ ├── zsyscall_linux_sparc64.go │ │ │ ├── zsyscall_netbsd_386.go │ │ │ ├── zsyscall_netbsd_amd64.go │ │ │ ├── zsyscall_netbsd_arm64.go │ │ │ ├── zsyscall_netbsd_arm.go │ │ │ ├── zsyscall_openbsd_386.go │ │ │ ├── zsyscall_openbsd_amd64.go │ │ │ ├── zsyscall_openbsd_arm64.go │ │ │ ├── zsyscall_openbsd_arm.go │ │ │ ├── zsyscall_solaris_amd64.go │ │ │ ├── zsysctl_openbsd_386.go │ │ │ ├── zsysctl_openbsd_amd64.go │ │ │ ├── zsysctl_openbsd_arm64.go │ │ │ ├── zsysctl_openbsd_arm.go │ │ │ ├── zsysnum_darwin_386.go │ │ │ ├── zsysnum_darwin_amd64.go │ │ │ ├── zsysnum_darwin_arm64.go │ │ │ ├── zsysnum_darwin_arm.go │ │ │ ├── zsysnum_dragonfly_amd64.go │ │ │ ├── zsysnum_freebsd_386.go │ │ │ ├── zsysnum_freebsd_amd64.go │ │ │ ├── zsysnum_freebsd_arm64.go │ │ │ ├── zsysnum_freebsd_arm.go │ │ │ ├── zsysnum_linux_386.go │ │ │ ├── zsysnum_linux_amd64.go │ │ │ ├── zsysnum_linux_arm64.go │ │ │ ├── zsysnum_linux_arm.go │ │ │ ├── zsysnum_linux_mips64.go │ │ │ ├── zsysnum_linux_mips64le.go │ │ │ ├── zsysnum_linux_mips.go │ │ │ ├── zsysnum_linux_mipsle.go │ │ │ ├── zsysnum_linux_ppc64.go │ │ │ ├── zsysnum_linux_ppc64le.go │ │ │ ├── zsysnum_linux_riscv64.go │ │ │ ├── zsysnum_linux_s390x.go │ │ │ ├── zsysnum_linux_sparc64.go │ │ │ ├── zsysnum_netbsd_386.go │ │ │ ├── zsysnum_netbsd_amd64.go │ │ │ ├── zsysnum_netbsd_arm64.go │ │ │ ├── zsysnum_netbsd_arm.go │ │ │ ├── zsysnum_openbsd_386.go │ │ │ ├── zsysnum_openbsd_amd64.go │ │ │ ├── zsysnum_openbsd_arm64.go │ │ │ ├── zsysnum_openbsd_arm.go │ │ │ ├── ztypes_aix_ppc64.go │ │ │ ├── ztypes_aix_ppc.go │ │ │ ├── ztypes_darwin_386.go │ │ │ ├── ztypes_darwin_amd64.go │ │ │ ├── ztypes_darwin_arm64.go │ │ │ ├── ztypes_darwin_arm.go │ │ │ ├── ztypes_dragonfly_amd64.go │ │ │ ├── ztypes_freebsd_386.go │ │ │ ├── ztypes_freebsd_amd64.go │ │ │ ├── ztypes_freebsd_arm64.go │ │ │ ├── ztypes_freebsd_arm.go │ │ │ ├── ztypes_linux_386.go │ │ │ ├── ztypes_linux_amd64.go │ │ │ ├── ztypes_linux_arm64.go │ │ │ ├── ztypes_linux_arm.go │ │ │ ├── ztypes_linux_mips64.go │ │ │ ├── ztypes_linux_mips64le.go │ │ │ ├── ztypes_linux_mips.go │ │ │ ├── ztypes_linux_mipsle.go │ │ │ ├── ztypes_linux_ppc64.go │ │ │ ├── ztypes_linux_ppc64le.go │ │ │ ├── ztypes_linux_riscv64.go │ │ │ ├── ztypes_linux_s390x.go │ │ │ ├── ztypes_linux_sparc64.go │ │ │ ├── ztypes_netbsd_386.go │ │ │ ├── ztypes_netbsd_amd64.go │ │ │ ├── ztypes_netbsd_arm64.go │ │ │ ├── ztypes_netbsd_arm.go │ │ │ ├── ztypes_openbsd_386.go │ │ │ ├── ztypes_openbsd_amd64.go │ │ │ ├── ztypes_openbsd_arm64.go │ │ │ ├── ztypes_openbsd_arm.go │ │ │ └── ztypes_solaris_amd64.go │ │ └── text │ │ ├── AUTHORS │ │ ├── CONTRIBUTORS │ │ ├── LICENSE │ │ ├── PATENTS │ │ ├── secure │ │ │ └── bidirule │ │ │ ├── bidirule10.0.0.go │ │ │ ├── bidirule9.0.0.go │ │ │ └── bidirule.go │ │ ├── transform │ │ │ └── transform.go │ │ └── unicode │ │ ├── bidi │ │ │ ├── bidi.go │ │ │ ├── bracket.go │ │ │ ├── core.go │ │ │ ├── prop.go │ │ │ ├── tables10.0.0.go │ │ │ ├── tables9.0.0.go │ │ │ └── trieval.go │ │ └── norm │ │ ├── composition.go │ │ ├── forminfo.go │ │ ├── input.go │ │ ├── iter.go │ │ ├── normalize.go │ │ ├── readwriter.go │ │ ├── tables10.0.0.go │ │ ├── tables9.0.0.go │ │ ├── transform.go │ │ └── trie.go │ ├── google.golang.org │ │ ├── genproto │ │ │ ├── googleapis │ │ │ │ └── rpc │ │ │ │ └── status │ │ │ │ └── status.pb.go │ │ │ └── LICENSE │ │ └── grpc │ │ ├── AUTHORS │ │ ├── backoff.go │ │ ├── balancer │ │ │ ├── balancer.go │ │ │ ├── base │ │ │ │ ├── balancer.go │ │ │ │ └── base.go │ │ │ └── roundrobin │ │ │ └── roundrobin.go │ │ ├── balancer_conn_wrappers.go │ │ ├── balancer.go │ │ ├── balancer_v1_wrapper.go │ │ ├── binarylog │ │ │ └── grpc_binarylog_v1 │ │ │ └── binarylog.pb.go │ │ ├── call.go │ │ ├── clientconn.go │ │ ├── codec.go │ │ ├── codegen.sh │ │ ├── codes │ │ │ ├── codes.go │ │ │ └── code_string.go │ │ ├── connectivity │ │ │ └── connectivity.go │ │ ├── CONTRIBUTING.md │ │ ├── credentials │ │ │ ├── credentials.go │ │ │ ├── internal │ │ │ │ ├── syscallconn_appengine.go │ │ │ │ └── syscallconn.go │ │ │ └── tls13.go │ │ ├── dialoptions.go │ │ ├── doc.go │ │ ├── encoding │ │ │ ├── encoding.go │ │ │ └── proto │ │ │ └── proto.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── grpclog │ │ │ ├── grpclog.go │ │ │ ├── logger.go │ │ │ └── loggerv2.go │ │ ├── install_gae.sh │ │ ├── interceptor.go │ │ ├── internal │ │ │ ├── backoff │ │ │ │ └── backoff.go │ │ │ ├── balancerload │ │ │ │ └── load.go │ │ │ ├── binarylog │ │ │ │ ├── binarylog.go │ │ │ │ ├── binarylog_testutil.go │ │ │ │ ├── env_config.go │ │ │ │ ├── method_logger.go │ │ │ │ ├── regenerate.sh │ │ │ │ ├── sink.go │ │ │ │ └── util.go │ │ │ ├── channelz │ │ │ │ ├── funcs.go │ │ │ │ ├── types.go │ │ │ │ ├── types_linux.go │ │ │ │ ├── types_nonlinux.go │ │ │ │ ├── util_linux.go │ │ │ │ └── util_nonlinux.go │ │ │ ├── envconfig │ │ │ │ └── envconfig.go │ │ │ ├── grpcrand │ │ │ │ └── grpcrand.go │ │ │ ├── grpcsync │ │ │ │ └── event.go │ │ │ ├── internal.go │ │ │ ├── syscall │ │ │ │ ├── syscall_linux.go │ │ │ │ └── syscall_nonlinux.go │ │ │ └── transport │ │ │ ├── bdp_estimator.go │ │ │ ├── controlbuf.go │ │ │ ├── defaults.go │ │ │ ├── flowcontrol.go │ │ │ ├── handler_server.go │ │ │ ├── http2_client.go │ │ │ ├── http2_server.go │ │ │ ├── http_util.go │ │ │ ├── log.go │ │ │ └── transport.go │ │ ├── keepalive │ │ │ └── keepalive.go │ │ ├── LICENSE │ │ ├── Makefile │ │ ├── metadata │ │ │ └── metadata.go │ │ ├── naming │ │ │ ├── dns_resolver.go │ │ │ └── naming.go │ │ ├── peer │ │ │ └── peer.go │ │ ├── picker_wrapper.go │ │ ├── pickfirst.go │ │ ├── preloader.go │ │ ├── proxy.go │ │ ├── README.md │ │ ├── resolver │ │ │ ├── dns │ │ │ │ └── dns_resolver.go │ │ │ ├── passthrough │ │ │ │ └── passthrough.go │ │ │ └── resolver.go │ │ ├── resolver_conn_wrapper.go │ │ ├── rpc_util.go │ │ ├── server.go │ │ ├── serviceconfig │ │ │ └── serviceconfig.go │ │ ├── service_config.go │ │ ├── stats │ │ │ ├── handlers.go │ │ │ └── stats.go │ │ ├── status │ │ │ └── status.go │ │ ├── stream.go │ │ ├── tap │ │ │ └── tap.go │ │ ├── trace.go │ │ ├── version.go │ │ └── vet.sh │ └── modules.txt ├── clean_docker.sh ├── config.yaml ├── explorer │ ├── config.json │ ├── connection-profile │ │ └── org1-network.json │ ├── docker-compose.yaml │ └── organizations │ ├── ordererOrganizations │ │ └── example.com │ │ ├── ca │ │ │ ├── ca.example.com-cert.pem │ │ │ └── priv_sk │ │ ├── msp │ │ │ ├── cacerts │ │ │ │ └── ca.example.com-cert.pem │ │ │ ├── config.yaml │ │ │ └── tlscacerts │ │ │ └── tlsca.example.com-cert.pem │ │ ├── orderers │ │ │ └── orderer.example.com │ │ │ ├── msp │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.example.com-cert.pem │ │ │ │ ├── config.yaml │ │ │ │ ├── keystore │ │ │ │ │ └── priv_sk │ │ │ │ ├── signcerts │ │ │ │ │ └── orderer.example.com-cert.pem │ │ │ │ └── tlscacerts │ │ │ │ └── tlsca.example.com-cert.pem │ │ │ └── tls │ │ │ ├── ca.crt │ │ │ ├── server.crt │ │ │ └── server.key │ │ ├── tlsca │ │ │ ├── priv_sk │ │ │ └── tlsca.example.com-cert.pem │ │ └── users │ │ └── [email protected] │ │ ├── msp │ │ │ ├── cacerts │ │ │ │ └── ca.example.com-cert.pem │ │ │ ├── config.yaml │ │ │ ├── keystore │ │ │ │ └── priv_sk │ │ │ ├── signcerts │ │ │ │ └── [email protected] │ │ │ └── tlscacerts │ │ │ └── tlsca.example.com-cert.pem │ │ └── tls │ │ ├── ca.crt │ │ ├── client.crt │ │ └── client.key │ └── peerOrganizations │ └── org1.example.com │ ├── ca │ │ ├── ca.org1.example.com-cert.pem │ │ └── priv_sk │ ├── msp │ │ ├── cacerts │ │ │ └── ca.org1.example.com-cert.pem │ │ ├── config.yaml │ │ └── tlscacerts │ │ └── tlsca.org1.example.com-cert.pem │ ├── peers │ │ ├── peer0.org1.example.com │ │ │ ├── msp │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ │ ├── config.yaml │ │ │ │ ├── keystore │ │ │ │ │ └── priv_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 │ │ │ ├── cacerts │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ ├── config.yaml │ │ │ ├── keystore │ │ │ │ └── priv_sk │ │ │ ├── signcerts │ │ │ │ └── peer1.org1.example.com-cert.pem │ │ │ └── tlscacerts │ │ │ └── tlsca.org1.example.com-cert.pem │ │ └── tls │ │ ├── ca.crt │ │ ├── server.crt │ │ └── server.key │ ├── tlsca │ │ ├── priv_sk │ │ └── tlsca.org1.example.com-cert.pem │ └── users │ ├── [email protected] │ │ ├── msp │ │ │ ├── cacerts │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ ├── config.yaml │ │ │ ├── keystore │ │ │ │ └── priv_sk │ │ │ ├── signcerts │ │ │ │ └── [email protected] │ │ │ └── tlscacerts │ │ │ └── tlsca.org1.example.com-cert.pem │ │ └── tls │ │ ├── ca.crt │ │ ├── client.crt │ │ └── client.key │ └── [email protected] │ ├── msp │ │ ├── cacerts │ │ │ └── ca.org1.example.com-cert.pem │ │ ├── config.yaml │ │ ├── keystore │ │ │ └── priv_sk │ │ ├── signcerts │ │ │ └── [email protected] │ │ └── tlscacerts │ │ └── tlsca.org1.example.com-cert.pem │ └── tls │ ├── ca.crt │ ├── client.crt │ └── client.key ├── fixtures │ ├── channel-artifacts │ │ ├── channel.tx │ │ ├── genesis.block │ │ └── Org1MSPanchors.tx │ ├── configtx.yaml │ ├── crypto-config │ │ ├── ordererOrganizations │ │ │ └── example.com │ │ │ ├── ca │ │ │ │ ├── ca.example.com-cert.pem │ │ │ │ └── priv_sk │ │ │ ├── msp │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.example.com-cert.pem │ │ │ │ ├── config.yaml │ │ │ │ └── tlscacerts │ │ │ │ └── tlsca.example.com-cert.pem │ │ │ ├── orderers │ │ │ │ └── orderer.example.com │ │ │ │ ├── msp │ │ │ │ │ ├── cacerts │ │ │ │ │ │ └── ca.example.com-cert.pem │ │ │ │ │ ├── config.yaml │ │ │ │ │ ├── keystore │ │ │ │ │ │ └── priv_sk │ │ │ │ │ ├── signcerts │ │ │ │ │ │ └── orderer.example.com-cert.pem │ │ │ │ │ └── tlscacerts │ │ │ │ │ └── tlsca.example.com-cert.pem │ │ │ │ └── tls │ │ │ │ ├── ca.crt │ │ │ │ ├── server.crt │ │ │ │ └── server.key │ │ │ ├── tlsca │ │ │ │ ├── priv_sk │ │ │ │ └── tlsca.example.com-cert.pem │ │ │ └── users │ │ │ └── [email protected] │ │ │ ├── msp │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.example.com-cert.pem │ │ │ │ ├── config.yaml │ │ │ │ ├── keystore │ │ │ │ │ └── priv_sk │ │ │ │ ├── signcerts │ │ │ │ │ └── [email protected] │ │ │ │ └── tlscacerts │ │ │ │ └── tlsca.example.com-cert.pem │ │ │ └── tls │ │ │ ├── ca.crt │ │ │ ├── client.crt │ │ │ └── client.key │ │ └── peerOrganizations │ │ └── org1.example.com │ │ ├── ca │ │ │ ├── ca.org1.example.com-cert.pem │ │ │ └── priv_sk │ │ ├── msp │ │ │ ├── cacerts │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ ├── config.yaml │ │ │ └── tlscacerts │ │ │ └── tlsca.org1.example.com-cert.pem │ │ ├── peers │ │ │ ├── peer0.org1.example.com │ │ │ │ ├── msp │ │ │ │ │ ├── cacerts │ │ │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ │ │ ├── config.yaml │ │ │ │ │ ├── keystore │ │ │ │ │ │ └── priv_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 │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ │ ├── config.yaml │ │ │ │ ├── keystore │ │ │ │ │ └── priv_sk │ │ │ │ ├── signcerts │ │ │ │ │ └── peer1.org1.example.com-cert.pem │ │ │ │ └── tlscacerts │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ │ └── tls │ │ │ ├── ca.crt │ │ │ ├── server.crt │ │ │ └── server.key │ │ ├── tlsca │ │ │ ├── priv_sk │ │ │ └── tlsca.org1.example.com-cert.pem │ │ └── users │ │ ├── [email protected] │ │ │ ├── msp │ │ │ │ ├── cacerts │ │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ │ ├── config.yaml │ │ │ │ ├── keystore │ │ │ │ │ └── priv_sk │ │ │ │ ├── signcerts │ │ │ │ │ └── [email protected] │ │ │ │ └── tlscacerts │ │ │ │ └── tlsca.org1.example.com-cert.pem │ │ │ └── tls │ │ │ ├── ca.crt │ │ │ ├── client.crt │ │ │ └── client.key │ │ └── [email protected] │ │ ├── msp │ │ │ ├── cacerts │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ ├── config.yaml │ │ │ ├── keystore │ │ │ │ └── priv_sk │ │ │ ├── signcerts │ │ │ │ └── [email protected] │ │ │ └── tlscacerts │ │ │ └── tlsca.org1.example.com-cert.pem │ │ └── tls │ │ ├── ca.crt │ │ ├── client.crt │ │ └── client.key │ ├── crypto-config.yaml │ └── docker-compose.yaml ├── go.mod ├── go.sum ├── LICENSE ├── main.go ├── medical ├── README.md ├── sdkInit │ ├── integration.go │ ├── sdkInfo.go │ └── sdkSetting.go ├── service │ ├── domain.go │ └── medService.go └── web ├── controller │ ├── controllerHandler.go │ ├── controllerResponse.go │ └── userInfo.go ├── static │ ├── css │ │ ├── bootstrap.min.css │ │ ├── help.css │ │ ├── index.css │ │ ├── login.css │ │ ├── process.css │ │ ├── query.css │ │ ├── queryResult.css │ │ └── reset.css │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── images │ │ ├── head.jpg │ │ ├── icon_input.png │ │ ├── icon_list.png │ │ ├── logo.png │ │ └── vline.gif │ └── js │ ├── bootstrap.min.js │ └── jquery.min.js ├── tpl │ ├── accessMedHistory.html │ ├── accessMed.html │ ├── accessMedResult.html │ ├── auditAllRecords.html │ ├── auditByMedicalRecord.html │ ├── auditByOrganisation.html │ ├── auditByOriginalAuthor.html │ ├── auditByPatient.html │ ├── auditByUser.html │ ├── auditMed.html │ ├── auditReportByTimeRangeAndOrg.html │ ├── auditReportResult.html │ ├── auditResult.html │ ├── auditTimeRangeStartEnd.html │ ├── deleteMed.html │ ├── favicon.ico │ ├── index.html │ ├── login.html │ ├── operateMed.html │ ├── updateMed.html │ └── uploadMed.html └── webServer.go 217 directories, 696 files 进入explorer文件夹之后,需要执行以下命令。 wget https://raw.githubusercontent.com/hyperledger/blockchain-explorer/main/examples/net1/config.json wget https://raw.githubusercontent.com/hyperledger/blockchain-explorer/main/examples/net1/connection-profile/test-network.json -P connection-profile wget https://raw.githubusercontent.com/hyperledger/blockchain-explorer/main/docker-compose.yaml 以下为下载下来的配置文件的内容,如果下载不了可以复制下面三个文件的内容。 config.json { "network-configs": { "test-network": { "name": "Test Network", "profile": "./connection-profile/test-network.json" } }, "license": "Apache-2.0" }test-network.json { "name": "test-network", "version": "1.0.0", "client": { "tlsEnable": true, "adminCredential": { "id": "exploreradmin", "password": "exploreradminpw" }, "enableAuthentication": true, "organization": "Org1MSP", "connection": { "timeout": { "peer": { "endorser": "300" }, "orderer": "300" } } }, "channels": { "mychannel": { "peers": { "peer0.org1.example.com": {} } } }, "organizations": { "Org1MSP": { "mspid": "Org1MSP", "adminPrivateKey": { "path": "/tmp/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp/keystore/priv_sk" }, "peers": ["peer0.org1.example.com"], "signedCert": { "path": "/tmp/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp/signcerts/[email protected]" } } }, "peers": { "peer0.org1.example.com": { "tlsCACerts": { "path": "/tmp/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" }, "url": "grpcs://peer0.org1.example.com:7051" } } }docker-compose.yaml # SPDX-License-Identifier: Apache-2.0 version: '2.1' volumes: pgdata: walletstore: networks: mynetwork.com: name: fabric_test services: explorerdb.mynetwork.com: image: hyperledger/explorer-db:latest container_name: explorerdb.mynetwork.com hostname: explorerdb.mynetwork.com environment: - DATABASE_DATABASE=fabricexplorer - DATABASE_USERNAME=hppoc - DATABASE_PASSWORD=password healthcheck: test: "pg_isready -h localhost -p 5432 -q -U postgres" interval: 30s timeout: 10s retries: 5 volumes: - pgdata:/var/lib/postgresql/data networks: - mynetwork.com explorer.mynetwork.com: image: hyperledger/explorer:latest container_name: explorer.mynetwork.com hostname: explorer.mynetwork.com environment: - DATABASE_HOST=explorerdb.mynetwork.com - DATABASE_DATABASE=fabricexplorer - DATABASE_USERNAME=hppoc - DATABASE_PASSWD=password - LOG_LEVEL_APP=info - LOG_LEVEL_DB=info - LOG_LEVEL_CONSOLE=debug - LOG_CONSOLE_STDOUT=true - DISCOVERY_AS_LOCALHOST=false - PORT=${PORT:-8080} volumes: - ${EXPLORER_CONFIG_FILE_PATH}:/opt/explorer/app/platform/fabric/config.json - ${EXPLORER_PROFILE_DIR_PATH}:/opt/explorer/app/platform/fabric/connection-profile - ${FABRIC_CRYPTO_PATH}:/tmp/crypto - walletstore:/opt/explorer/wallet ports: - ${PORT:-8080}:${PORT:-8080} depends_on: explorerdb.mynetwork.com: condition: service_healthy networks: - mynetwork.com之后,将fixtures文件夹下的crypto-config文件夹复制到explorer文件夹,并将explorer文件夹中的crypto-config文件夹重命名为organizations。此时的目录结构应该是这样的。 docker-compose.yaml config.json connection-profile/test-network.json organizations/ordererOrganizations/ organizations/peerOrganizations/
此处需要修改配置文件的内容,需要和区块链网络匹配,这样才能在启动的时候打开区块链浏览器,具体如下所示。 将test-network.json重命名为org1-network.json,并修改为以下内容。此处需要重点注意几个path字段是否能跟organizations文件夹里面的对应文件对上。此外,adminCredential字段指定了区块链浏览器的登录用户名和密码。 { "name": "org1-network", "version": "1.0.0", "client": { "tlsEnable": true, "adminCredential": { "id": "exploreradmin", "password": "exploreradminpw" }, "enableAuthentication": true, "organization": "Org1MSP", "connection": { "timeout": { "peer": { "endorser": "300" }, "orderer": "300" } } }, "channels": { "mychannel": { "peers": { "peer0.org1.example.com": {} }, "connection": { "timeout": { "peer": { "endorser": "6000", "eventHub": "6000", "eventReg": "6000" } } } } }, "organizations": { "Org1MSP": { "mspid": "Org1MSP", "adminPrivateKey": { "path": "/tmp/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp/keystore/priv_sk" }, "peers": ["peer0.org1.example.com"], "signedCert": { "path": "/tmp/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp/signcerts/[email protected]" } } }, "peers": { "peer0.org1.example.com": { "tlsCACerts": { "path": "/tmp/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" }, "url": "grpcs://peer0.org1.example.com:7051" } } }将config.json修改为以下内容,要与connection-profile文件夹对应。 { "network-configs": { "org1-network": { "name": "org1-network", "profile": "./connection-profile/org1-network.json" } }, "license": "Apache-2.0" }将docker-compose.yaml文件的内容修改为如下所示。此处需要指定网络名称与区块链网络的名称相同(我的为fixtures_test),并指定端口号。此外需要指定DISCOVERY_AS_LOCALHOST=false,以便禁止将主机名映射为localhost。 # SPDX-License-Identifier: Apache-2.0 version: '2.1' volumes: pgdata: walletstore: networks: mynetwork.com: external: name: fixtures_test services: explorerdb.mynetwork.com: image: hyperledger/explorer-db:latest container_name: explorerdb.mynetwork.com hostname: explorerdb.mynetwork.com environment: - DATABASE_DATABASE=fabricexplorer - DATABASE_USERNAME=hppoc - DATABASE_PASSWORD=password healthcheck: test: "pg_isready -h localhost -p 5432 -q -U postgres" interval: 30s timeout: 10s retries: 5 volumes: - pgdata:/var/lib/postgresql/data networks: - mynetwork.com explorer.mynetwork.com: image: hyperledger/explorer:latest container_name: explorer.mynetwork.com hostname: explorer.mynetwork.com environment: - DATABASE_HOST=explorerdb.mynetwork.com - DATABASE_DATABASE=fabricexplorer - DATABASE_USERNAME=hppoc - DATABASE_PASSWD=password - LOG_LEVEL_APP=debug - LOG_LEVEL_DB=debug - LOG_LEVEL_CONSOLE=debug - LOG_CONSOLE_STDOUT=true - DISCOVERY_AS_LOCALHOST=false volumes: - ./config.json:/opt/explorer/app/platform/fabric/config.json - ./connection-profile:/opt/explorer/app/platform/fabric/connection-profile - ./organizations:/tmp/crypto - walletstore:/opt/explorer/wallet ports: - 8080:8080 depends_on: explorerdb.mynetwork.com: condition: service_healthy networks: - mynetwork.com此时的目录结构如下所示。 具体的目录结构如下所示,此处使用tree -L 8命令。 . ├── config.json ├── connection-profile │ └── org1-network.json ├── docker-compose.yaml └── organizations ├── ordererOrganizations │ └── example.com │ ├── ca │ │ ├── ca.example.com-cert.pem │ │ └── priv_sk │ ├── msp │ │ ├── cacerts │ │ │ └── ca.example.com-cert.pem │ │ ├── config.yaml │ │ └── tlscacerts │ │ └── tlsca.example.com-cert.pem │ ├── orderers │ │ └── orderer.example.com │ │ ├── msp │ │ │ ├── cacerts │ │ │ │ └── ca.example.com-cert.pem │ │ │ ├── config.yaml │ │ │ ├── keystore │ │ │ │ └── priv_sk │ │ │ ├── signcerts │ │ │ │ └── orderer.example.com-cert.pem │ │ │ └── tlscacerts │ │ │ └── tlsca.example.com-cert.pem │ │ └── tls │ │ ├── ca.crt │ │ ├── server.crt │ │ └── server.key │ ├── tlsca │ │ ├── priv_sk │ │ └── tlsca.example.com-cert.pem │ └── users │ └── [email protected] │ ├── msp │ │ ├── cacerts │ │ │ └── ca.example.com-cert.pem │ │ ├── config.yaml │ │ ├── keystore │ │ │ └── priv_sk │ │ ├── signcerts │ │ │ └── [email protected] │ │ └── tlscacerts │ │ └── tlsca.example.com-cert.pem │ └── tls │ ├── ca.crt │ ├── client.crt │ └── client.key └── peerOrganizations └── org1.example.com ├── ca │ ├── ca.org1.example.com-cert.pem │ └── priv_sk ├── msp │ ├── cacerts │ │ └── ca.org1.example.com-cert.pem │ ├── config.yaml │ └── tlscacerts │ └── tlsca.org1.example.com-cert.pem ├── peers │ ├── peer0.org1.example.com │ │ ├── msp │ │ │ ├── cacerts │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ ├── config.yaml │ │ │ ├── keystore │ │ │ │ └── priv_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 │ │ ├── cacerts │ │ │ └── ca.org1.example.com-cert.pem │ │ ├── config.yaml │ │ ├── keystore │ │ │ └── priv_sk │ │ ├── signcerts │ │ │ └── peer1.org1.example.com-cert.pem │ │ └── tlscacerts │ │ └── tlsca.org1.example.com-cert.pem │ └── tls │ ├── ca.crt │ ├── server.crt │ └── server.key ├── tlsca │ ├── priv_sk │ └── tlsca.org1.example.com-cert.pem └── users ├── [email protected] │ ├── msp │ │ ├── cacerts │ │ │ └── ca.org1.example.com-cert.pem │ │ ├── config.yaml │ │ ├── keystore │ │ │ └── priv_sk │ │ ├── signcerts │ │ │ └── [email protected] │ │ └── tlscacerts │ │ └── tlsca.org1.example.com-cert.pem │ └── tls │ ├── ca.crt │ ├── client.crt │ └── client.key └── [email protected] ├── msp │ ├── cacerts │ │ └── ca.org1.example.com-cert.pem │ ├── config.yaml │ ├── keystore │ │ └── priv_sk │ ├── signcerts │ │ └── [email protected] │ └── tlscacerts │ └── tlsca.org1.example.com-cert.pem └── tls ├── ca.crt ├── client.crt └── client.key 62 directories, 65 files 在编写完配置文件之后,就可以启动区块链浏览器了。首先需要启动区块链网络,然后需要进入explorer文件夹,输入docker-compose up -d命令。
输入docker ps -a命令,可以看到已经启动的docker容器情况。如果hyperledger/explorer:latest容器出现Exited(1)的情况,则输入docker logs [对应的容器ID],查看错误情况(此处一般是配置文件没有和区块链网络对应)。 区块链浏览器启动后在浏览器输入localhost:8080,单击回车。此处,登录用户名为exploreradmin,密码为exploreradminpw。 登录之后可以查看区块链网络、区块和交易等信息。 若要关闭区块链浏览器,则还需要进入explorer文件夹,输入docker-compose down -v(此处-v不能去掉,因为删除持久化数据才能在下一次启动区块链浏览器时启动成功)命令。 |
CopyRight 2018-2019 实验室设备网 版权所有 |