二维码

11.2 快速构建超级账本网络 - 数据结构 - 机器学习

1337 人阅读 | 时间:2021年01月15日 01:20
11.2 快速构建超级账本网络 - 数据结构 - 机器学习 #daohang ul li t,.reed .riqi,a.shangg,a.xiatt,a.shangg:hover,a.xiatt:hover,a.shang,a.xiat,a.shang:hover,a.xiat:hover,.reed-pinglun-anniu,span.now-page,#daohangs-around,#caidan-tubiao,#daohangs,#daohangs li,#btnPost{background-color:#D10B04;} .dinglanyou1 h3{border-bottom:3px solid #D10B04;} #dibuer{border-top:2px solid #D10B04;}.cebianlan .rongqi h3{border-bottom:1px solid #D10B04;} #edtSearch{border:1px solid #D10B04;} #daohang .zuo ul li{border-right:1px solid #;} #daohang ul li t a{border-top:1px solid #;border-right:1px solid #D10B04;} #daohang ul li t a:hover{border-right:1px solid #;} #daohang .you ul li a:hover,#daohang .zuo ul li a:hover,.reed-pinglun-anniu:hover{background-color:#;} a:hover,.reed h6 a:hover,#dibuer a:hover,.reed .riqiding,.cebianlan .rongqi li a:hover,#pinglun-liebiao ul.fubens li.depth-1 dl dd span.shu a,#pinglun-liebiao ul.fubens li.depth-1 dl dd span.huifuliuyan a:hover,.reed-biaoti h6 span{color:#D10B04;} .reed .kan a{color:#0A0AF5;}.reed .kan a:hover{color:#D10101;} @media screen and (max-width:1492px){a.shang,a.xiat{background:none;} a.xiat:hover,a.shang:hover{background-color:#f9f9f9;background-image:none;text-decoration:none;}} var _hmt = _hmt || [];(function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?b19db5ba3b437a9e8698d2bc8fc64334"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s);})(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?b19db5ba3b437a9e8698d2bc8fc64334"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?2d748c9763cfc72fb7d1ccab29f0770d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f6d451f3f1be23f3abf240c64c469c1b"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();

当前位置:首页 » 区块链精品文章 » 正文

(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646201", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646162", container: s }); })();

11.2 快速构建超级账本网络

1180 人参与  2018年10月10日 13:03  分类 : 区块链精品文章  评论

我们基于fabric-samples里的BYFN(Build Your First Network)介绍超级账本的构建过程,首先是利用提供的脚本快速地构建网络,后面是详细的构建过程。

11.2.1 下载BYFN的代码

BYFN是包含在fabric-samples的first-network目录下的,先通过git下载源代码:


cd $GOPATH/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric-samples.git
cd fabric-samples/first-network


后面的操作默认都在此路径下进行。

11.2.2 BYFN脚本介绍

运行BYFN脚本需要已经安装好Docker基础环境,编译出镜像文件和系统工具cryptogen、configtxgen等。BYFN脚本的帮助说明如下:


claritys-MacBook-Pro:first-network clarity$ ./byfn.sh -h
// 用法:
byfn.sh -m up|down|restart|generate [-c <channel name>] [-t <timeout>]
byfn.sh -h|--help 显示帮助信息
   -m <mode> - one of 'up', 'down', 'restart' or 'generate'
       - 'up' - 使用docker-compose启动网络
       - 'down' - 使用docker-compose停止网络
       - 'restart' - 重启网络
       - 'generate' - 生成证书和创世区块
   -c <channel name> - 通道名称,默认是"mychannel"
   -t <timeout> - 超时时间,默认是10000毫秒

   // 下面是通用的流程,先生成证书和创世区块,再启动网络:
   byfn.sh -m generate -c <channelname>
   byfn.sh -m up -c <channelname>
   byfn.sh -m down -c <channelname>

   //默认选项:
   byfn.sh -m generate
   byfn.sh -m up
   byfn.sh -m down


其中,'-c'参数指定通道名称,默认是mychannel,'-t'是连接的超时时间,默认是10秒。下面简要介绍其中的几个功能,如表11-4所示。

表11-4 BYFN脚本的命令选项

11.2 快速构建超级账本网络 - 数据结构 - 机器学习

下面我们利用BYFN脚本构建出超级账本网络。

11.2.3 生成网络初始化配置

执行脚本./byfn.sh-m generate生成MSP证书和创世区块:


./byfn.sh -m generate


执行结果如下:


Generating certs and genesis block for with channel 'mychannel' and CLI timeout
of '10000'
Continue (y/n)? y
proceeding ...
/Users/clarity/Projects/bin/cryptogen

##########################################################
#########            用cryptogen 工具生成证书     #########
##########################################################
org1.example.com
org2.example.com

/Users/clarity/Projects/bin/configtxgen
##########################################################
#########         生成排序服务的创世区块     ##############
##########################################################
2017-08-09 14:03:16.410 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2017-08-09 14:03:16.437 CST [common/configtx/tool] doOutputBlock -> INFO 002 Generating
genesis block
2017-08-09 14:03:16.440 CST [common/configtx/tool] doOutputBlock -> INFO 003 Writing
genesis block

#################################################################
#########         生成通道配置交易 'channel.tx'          #########
#################################################################
2017-08-09 14:03:16.460 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2017-08-09 14:03:16.464 CST [common/configtx/tool]
doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
2017-08-09 14:03:16.464 CST [common/configtx/tool]
doOutputChannelCreateTx -> INFO 003 Writing new channel tx

#################################################################
#########              生成Org1MSP锚节点配置             #########
#################################################################
2017-08-09 14:03:16.488 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2017-08-09 14:03:16.493 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO
002 Generating anchor peer update
2017-08-09 14:03:16.493 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO
003 Writing anchor peer update

#################################################################
#########              生成Org2MSP锚节点配置             #########
#################################################################
2017-08-09 14:03:16.525 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2017-08-09 14:03:16.529 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO
002 Generating anchor peer update
2017-08-09 14:03:16.531 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO
003 Writing anchor peer update


执行成功以后生成的Peer节点和排序服务节点的MSP证书文件在目录crypto-config下,包含4个 Peer节点(分成两个组织,即org1.example.com和org2.example.com)和1个排序服务节点,排序后端默认使用SOLO, 详细的目录结构参考第8章的内容。

生成的创世区块在目录channel-artifacts下:


claritys-MacBook-Pro:first-network clarity$ tree channel-artifacts
channel-artifacts
├── Org1MSPanchors.tx
├── Org2MSPanchors.tx
├── channel.tx
└── genesis.block

0 directories, 4 files


其中几个参数说明如下。

·genesis.block:排序服务创世区块;

·channel.tx:通道配置创世区块;

·Org1MSPanchors.tx:Org1锚节点的配置;

·Org2MSPanchors.tx:Org2锚节点的配置。

11.2.4 启动超级账本网络

执行脚本./byfn.sh-m up会根据Docker Compose配置文件docker-compose-cli.yaml启动超级账本网络,还会执行scripts/script.sh脚本安装和实例化链码,并且执行简单链码调用和查询操作。


./byfn.sh -m up 


输出的结果如下:


localhost:first-network clarity$ ./byfn.sh -m up
Starting with channel 'mychannel' and CLI timeout of '10000'
Continue (y/n)? y
proceeding ...
/Users/clarity/Projects/bin/cryptogen

##########################################################
##########     使用cryptogen工具生成密钥和证书    #########
##########################################################
org1.example.com
org2.example.com

/Users/clarity/Projects/bin/configtxgen
##########################################################
#########       生成排序服务启动的创世区块    ##############
##########################################################
2017-08-09 19:53:51.192 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2017-08-09 19:53:51.225 CST [common/configtx/tool] doOutputBlock -> INFO 002 Generating
genesis block
2017-08-09 19:53:51.227 CST [common/configtx/tool] doOutputBlock -> INFO 003 Writing
genesis block

#################################################################
#########       生成通道配置交易文件'channel.tx'         #########
#################################################################
2017-08-09 19:53:51.253 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2017-08-09 19:53:51.256 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO
002 Generating new channel configtx
2017-08-09 19:53:51.256 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO
003 Writing new channel tx

#################################################################
##########         生成组织Org1MSP的锚节点配置          ##########
#################################################################
2017-08-09 19:53:51.280 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2017-08-09 19:53:51.284 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO
002 Generating anchor peer update
2017-08-09 19:53:51.285 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO
003 Writing anchor peer update

#################################################################
##########         生成组织Org2MSP的锚节点配置          ##########
#################################################################
2017-08-09 19:53:51.303 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2017-08-09 19:53:51.306 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO
002 Generating anchor peer update
2017-08-09 19:53:51.306 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO
003 Writing anchor peer update

Creating network "net_byfn" with the default driver
Creating orderer.example.com ...
Creating peer1.org2.example.com ...
Creating peer0.org2.example.com ...
Creating peer0.org1.example.com ...
Creating peer1.org1.example.com ...
Creating peer1.org1.example.com
Creating peer0.org2.example.com
Creating orderer.example.com
Creating peer1.org2.example.com
Creating peer0.org1.example.com ... done
Creating cli ...
Creating cli ... done


看到上面的信息,表明超级账本网络已经启动完毕。在启动cli容器的时候会自动执行 scripts/script.sh脚本,包括创建通道、Peer节点加入通道、更新通道锚节点信息、安装链码、实例化链码、链码调用和链码查询等,每一 步操作都会显示对应的日志信息。下面是创建通道的结果:


____    _____      _      ____    _____
/ ___|  |_   _|    / \    |  _ \  |_   _|
\___ \    | |     / _ \   | |_) |   | |
___) |   | |    / ___ \  |  _ <    | |
|____/    |_|   /_/   \_\ |_| \_\   |_|
Build your first network (BYFN) end-to-end test

Channel name : mychannel
Creating channel...
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
CORE_PEER_LOCALMSPID=Org1MSP
CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
CORE_PEER_TLS_ENABLED=true
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ID=cli
CORE_LOGGING_LEVEL=DEBUG
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
...
============= Channel "mychannel" is created successfully ==============
 


4个Peer节点依次加入通道:


Having all peers join the channel...
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
CORE_PEER_LOCALMSPID=Org1MSP
CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
CORE_PEER_TLS_ENABLED=true
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ID=cli
CORE_LOGGING_LEVEL=DEBUG
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
...
================ PEER0 joined on the channel "mychannel" ================

CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
CORE_PEER_LOCALMSPID=Org1MSP
CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
CORE_PEER_TLS_ENABLED=true
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ID=cli
CORE_LOGGING_LEVEL=DEBUG
CORE_PEER_ADDRESS=peer1.org1.example.com:7051
...
=============== PEER1 joined on the channel "mychannel" ==============

CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
CORE_PEER_LOCALMSPID=Org2MSP
CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
CORE_PEER_TLS_ENABLED=true
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ID=cli
CORE_LOGGING_LEVEL=DEBUG
CORE_PEER_ADDRESS=peer0.org2.example.com:7051
...
=============== PEER2 joined on the channel "mychannel" ===============

CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
CORE_PEER_LOCALMSPID=Org2MSP
CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
CORE_PEER_TLS_ENABLED=true
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ID=cli
CORE_LOGGING_LEVEL=DEBUG
CORE_PEER_ADDRESS=peer1.org2.example.com:7051
...
=============== PEER3 joined on the channel "mychannel" ================


更新组织的锚节点:


Updating anchor peers for org1...
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
CORE_PEER_LOCALMSPID=Org1MSP
CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
CORE_PEER_TLS_ENABLED=true
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ID=cli
CORE_LOGGING_LEVEL=DEBUG
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
...
=== Anchor peers for org "Org1MSP" on "mychannel" is updated successfully ===

Updating anchor peers for org2...
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
CORE_PEER_LOCALMSPID=Org2MSP
CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
CORE_PEER_TLS_ENABLED=true
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ID=cli
CORE_LOGGING_LEVEL=DEBUG
CORE_PEER_ADDRESS=peer0.org2.example.com:7051
...
=== Anchor peers for org "Org2MSP" on "mychannel" is updated successfully ===


在Peer节点peer0.org1.example.com、peer0.org2.example.com上安装链码:


Installing chaincode on org1/peer0...
...
========== Chaincode is installed on remote peer PEER0 ===========

Install chaincode on org2/peer2...
...
=========== Chaincode is installed on remote peer PEER2 ==========


在Peer节点peer0.org2.example.com上实例化链码:


Instantiating chaincode on org2/peer2...
...
====== Chaincode Instantiation on PEER2 on channel 'mychannel' is successful ======


调用前在Peer节点peer0.org1.example.com上执行链码查询a的值:


Querying chaincode on org1/peer0...
...
Query Result: 100
...
====== Query on PEER0 on channel 'mychannel' is successful ======


在Peer节点peer0.org1.example.com上执行链码调用,从a转移10到b:


Sending invoke transaction on org1/peer0...
...
2017-09-10 02:56:13.627 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 00a
Chaincode invoke successful. result: status:200
...
====== Invoke transaction on PEER0 on channel 'mychannel' is successful ======


在Peer节点peer1.org2.example.com上安装链码并查询a的值:


Installing chaincode on org2/peer3...
...
============ Chaincode is installed on remote peer PEER3 ===========

Querying chaincode on org2/peer3...
====== Querying on PEER3 on channel 'mychannel'... ======
...
Query Result: 90
...
====== Query on PEER3 on channel 'mychannel' is successful ======


可以看到,Peer节点peer1.org2.example.com并没有参与背书的过程,在转移调用完成以后再安装链码,也能查询到最新的结果。到此,脚本自动执行的过程就结束了,超级账本网络还在继续运行:


========= All GOOD, BYFN execution completed ===========
_____   _   _   ____
| ____| | \ | | |  _ \
|  _|   |  \| | | | | |
| |___  | |\  | | |_| |
|_____| |_| \_| |____/


11.2.5 关闭超级账本网络

测试完成以后,调用脚本关闭超级账本网络:


./byfn.sh -m down


显示如下结果:


Stopping with channel 'mychannel' and CLI timeout of '10000'
Continue (y/n)? y
proceeding ...
WARNING: The CHANNEL_NAME variable is not set. Defaulting to a blank string.
WARNING: The TIMEOUT variable is not set. Defaulting to a blank string.
Stopping cli                    ... done
Stopping peer0.org1.example.com ... done

Removing cli                    ... done
Removing peer0.org1.example.com ... done

Removing network net_byfn
d1866048b1d5
b091ac28a1db
2a840ddfb530
Untagged: dev-peer1.org2.example.com-mycc-1.0:latest
Deleted: sha256:fd58f0b0679c2509acb668400c7b041d7d3a266f454e56bb1b49ff4484d30185


以上日志显示已经关闭Peer节点、排序服务节点容器和链码容器,删除自动生成的链码镜像文件。执行docker ps-a可以看到容器已经全部停止,执行docker images可以看到已经没有了dev-peer1.org2.example.com-mycc-1.0等容器镜像。


来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=1049

(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();
window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdPic":"","bdStyle":"0","bdSize":"16"},"share":{},"image":{"viewList":["qzone","tsina","tqq","renren","weixin"],"viewText":"分享到:","viewSize":"16"},"selectShare":{"bdContainerClass":null,"bdSelectMiniList":["qzone","tsina","tqq","renren","weixin"]}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];
区块链是什么  

微信号:qq444848023    QQ号:444848023

加入【我是码农】QQ群:864689844(加群验证:我是码农)

<< 上一篇 下一篇 >>
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646186", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646175", container: s }); })();
搜索

网站分类

标签列表

最近发表

    (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https'){ bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else{ bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();

全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试

var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!

jQuery(document).ready(function($){ /* prepend menu icon */ $('#daohangs-around').prepend('
'); /* toggle nav */ $("#caidan-tubiao").on("click", function(){ $("#daohangs").slideToggle(); $(this).toggleClass("active"); }); });

©著作权归作者所有:来自ZhiKuGroup博客作者没文化的原创作品,如需转载,请注明出处,否则将追究法律责任 来源:ZhiKuGroup博客,欢迎分享。

评论专区
  • 昵 称必填
  • 邮 箱选填
  • 网 址选填
◎已有 0 人评论
搜索
作者介绍
30天热门
×
×
本站会员尊享VIP特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×