fabric 1.4網(wǎng)絡(luò)搭建以及fabric瀏覽器搭建

1. fabric網(wǎng)絡(luò)搭建

環(huán)境準(zhǔn)備

  1. 一臺(tái)空閑服務(wù)器,需要安裝docker和go環(huán)境,安裝步驟自行百度
  2. 點(diǎn)擊下載fabric-samples源代碼
  3. 將fabric-samples的分支切換到release-1.4,然后進(jìn)行打包,上傳到服務(wù)器上

安裝fabric網(wǎng)絡(luò)

生成配置文件

在服務(wù)器上對(duì)fabric-samples進(jìn)行解壓,并切換到fabric-samples/first-network目錄下,執(zhí)行命令./byfn.sh generate,控制臺(tái)輸入Y或者回車,即可完成配置文件生成,然后出現(xiàn)一堆信息,控制臺(tái)找不到了,從官網(wǎng)截了個(gè)圖

fabric_byfn.png

具體的步驟可以看byfn.sh中的內(nèi)容

fabric_byfn_generate.png

主要是生成證書和替換密鑰文件,最后一步是創(chuàng)建channelArtifacts
fabric_byfn_channelartifacts.png

看這命令是不是有點(diǎn)熟悉,其實(shí)就是你的控制臺(tái)輸出,默認(rèn)CONSENSUS_TYPEsolo,主要就是創(chuàng)建錨節(jié)點(diǎn)然后更新transactions

啟動(dòng)網(wǎng)絡(luò)

fabric-samples/first-network目錄下執(zhí)行命令./byfn.sh up,控制臺(tái)輸入Y或者回車,就會(huì)出現(xiàn)如下的輸出

fabric_docker_up.png

具體邏輯可以看byfn.sh,大概意思就是docker創(chuàng)建了幾個(gè)容器,創(chuàng)建OrdererMSP,Org1MSP以及Org2MSP,然后創(chuàng)建節(jié)點(diǎn)和通道,然后讓節(jié)點(diǎn)加入通道
fabric_docker_ps.png

是否安裝完成的如下圖
fabric_docker_end.png

注意將first-network目錄下的crypto-config目錄進(jìn)行打包,并下載到本地,區(qū)塊鏈瀏覽器會(huì)進(jìn)行使用

進(jìn)行peer節(jié)點(diǎn)操作

查詢啟動(dòng)的容器,我們可以看到有個(gè)cli的容器,它是可以操作peer節(jié)點(diǎn)的容器,我們只需要進(jìn)入cli容器即可進(jìn)行peer節(jié)點(diǎn)的操作

  1. 進(jìn)入cli容器
    docker exec -it cli bash
  2. 進(jìn)行操作
    點(diǎn)擊查看peer命令,查看peer版本執(zhí)行peer version
    fabric_peer_version.png

    查看peer的通道有哪些,執(zhí)行 peer channel list
    fabric_peer_channel.png

2. fabric瀏覽器搭建

環(huán)境準(zhǔn)備

點(diǎn)擊下載fabric-explorer源代碼,或者下載漢化版fabric-explorer-cn,記得閱讀README.md文件

代碼依賴安裝和編譯

進(jìn)入下載目錄,例如使用fabric-explorer-cn,則進(jìn)入fabric-explorer-cn,然后執(zhí)行命令./main.sh install,等待執(zhí)行完成,時(shí)間較久,如果要清除node_modules的話,可以執(zhí)行./main.sh clean

數(shù)據(jù)庫(kù)配置文件修改

如果進(jìn)行數(shù)據(jù)庫(kù)地址修改的話,可以編輯app/explorerconfig.json文件,修改postgreSQL字段下的host等信息,注意你的pg數(shù)據(jù)庫(kù)要有對(duì)應(yīng)的賬戶和schema,然后進(jìn)入app/persistence/fabric/postgreSQL/db/explorerpg.sql,將腳本進(jìn)行整理,并在數(shù)據(jù)庫(kù)執(zhí)行,文末提供sql內(nèi)容,或者是使用README.md推薦的在本地執(zhí)行./createdb.sh進(jìn)行pg創(chuàng)建

區(qū)塊鏈瀏覽器配置文件修改

編輯根目錄下的appconfig.json文件,如果需要?jiǎng)e人訪問你的瀏覽器的話,就將host改為自己的ip地址,如果端口沖突的話,就修改port

fabric客戶端配置

app/platform/fabric/config.json文件中,可以看到引用的profile為./connection-profile/first-network.json,打開同目錄的connection-profile/first-network.json文件,進(jìn)行修改,看到有很多參數(shù),其實(shí)里面很多我們都可以不用管,只需要修改證書文件路徑,還記得上面說讓下載的crypto-config目錄到本地嗎,將如下幾個(gè)地方修改成自己的路徑即可

注意path要全部換掉,因?yàn)橛锌赡?code>adminPrivateKey的path最后生成的sk文件的hash不一樣

blockchain_explorer_first_network.png

配置hosts域名映射

在自己的hosts文件中,新增兩個(gè)域名映射,即orderer.example.compeer0.org1.example.com都映射到自己的服務(wù)器ip上

blockchain_explorer_hosts.png

配置啟動(dòng)腳本

編寫根目錄下的start.shsyncstart.sh文件,將他們的export DISCOVERY_AS_LOCALHOST=true,改成export DISCOVERY_AS_LOCALHOST=false,當(dāng)然如果你的fabric網(wǎng)絡(luò)運(yùn)行在你本機(jī)的話,就使用默認(rèn)的即可

啟動(dòng)區(qū)塊鏈瀏覽器

打開控制臺(tái),執(zhí)行./start.sh,logs/app/app.log是查看應(yīng)用日志,logs/console/console.log是查看控制臺(tái)的,logs/db/db.log是查看數(shù)據(jù)庫(kù)日志

訪問區(qū)塊鏈瀏覽器

打開瀏覽器,輸入localhost:8080,或者是你在appconfig.json文件中配置的host:port進(jìn)行訪問,輸入用戶名admin以及密碼adminpw,點(diǎn)擊登錄即可進(jìn)入?yún)^(qū)塊鏈瀏覽器主頁(yè)

blockchain_explorer_overview.png

3.fabric-explorer sql

--
--    SPDX-License-Identifier: Apache-2.0

-- ----------------------------
--  Table structure for `blocks`
-- ----------------------------
DROP TABLE IF EXISTS blocks;

CREATE TABLE blocks
(
  id SERIAL PRIMARY KEY,
  blocknum integer DEFAULT NULL,
  datahash character varying(256) DEFAULT NULL,
  prehash character varying(256) DEFAULT NULL,
  txcount integer DEFAULT NULL,
  createdt Timestamp DEFAULT NULL,
  prev_blockhash character varying(256) DEFAULT NULL,
  blockhash character varying(256) DEFAULT NULL,
  channel_genesis_hash character varying(256) DEFAULT NULL,
  blksize integer DEFAULT NULL
);

-- ----------------------------
--  Table structure for `chaincodes`
-- ----------------------------
DROP TABLE IF EXISTS chaincodes;

CREATE TABLE chaincodes
(
  id SERIAL PRIMARY KEY,
  name character varying(255) DEFAULT NULL,
  version character varying(255) DEFAULT NULL,
  path character varying(255) DEFAULT NULL,
  channel_genesis_hash character varying(256) DEFAULT NULL,
  txcount integer DEFAULT 0,
  createdt Timestamp DEFAULT NULL
);

Alter sequence chaincodes_id_seq restart with 10;

-- ---------------------------
--  Table structure for `peer_ref_chaincode`
-- ----------------------------
DROP TABLE IF EXISTS peer_ref_chaincode;

CREATE TABLE peer_ref_chaincode
(
  id SERIAL PRIMARY KEY,
  peerid varchar(64) DEFAULT NULL,
  chaincodeid varchar(64) DEFAULT NULL,
  cc_version varchar(64) DEFAULT NULL,
  channelid character varying(256) DEFAULT NULL,
  createdt Timestamp DEFAULT NULL
);

-- ----------------------------
--  Table structure for `channel`
-- ----------------------------
DROP TABLE IF EXISTS channel;

--   state character(1) NOT NULL DEFAULT A CHECK (state in (A, D, S))

CREATE TABLE channel
(
  id SERIAL PRIMARY KEY,
  name varchar(256) DEFAULT NULL,
  blocks integer DEFAULT NULL,
  trans integer DEFAULT NULL,
  createdt Timestamp DEFAULT NULL,
  channel_genesis_hash character varying(256) DEFAULT NULL,
  channel_hash character varying(256) DEFAULT NULL,
  channel_config bytea default NULL,
  channel_block bytea DEFAULT NULL,
  channel_tx bytea DEFAULT NULL,
  channel_version character varying(128) DEFAULT NULL
);

Alter sequence channel_id_seq restart with 3;
-- ----------------------------
--  Table structure for `peer`
-- ----------------------------
DROP TABLE IF EXISTS peer;

--   state character(1) NOT NULL DEFAULT A CHECK (state in (A, D, S))

CREATE TABLE peer
(
  id SERIAL PRIMARY KEY,
  org integer DEFAULT NULL,
  channel_genesis_hash character varying(256) DEFAULT NULL,
  mspid varchar(64) DEFAULT NULL,
  requests varchar(64) DEFAULT NULL,
  events varchar(64) DEFAULT NULL,
  server_hostname varchar(64) DEFAULT NULL,
  createdt timestamp DEFAULT NULL,
  peer_type character varying(64) DEFAULT NULL
);
-- ---------------------------
--  Table structure for `peer_ref_channel`
-- ----------------------------
DROP TABLE IF EXISTS peer_ref_channel;

CREATE TABLE peer_ref_channel
(
  id SERIAL PRIMARY KEY,
  createdt Timestamp DEFAULT NULL,
  peerid varchar(64),
  channelid character varying(256),
  peer_type character varying(64) DEFAULT NULL
);

-- ====================Orderer BE-303=====================================
-- ----------------------------
--  Table structure for `orderer`
-- ----------------------------
DROP TABLE IF EXISTS orderer;

--   state character(1) NOT NULL DEFAULT A CHECK (state in (A, D, S))

CREATE TABLE orderer
(
  id SERIAL PRIMARY KEY,
  requests varchar(64) DEFAULT NULL,
  server_hostname varchar(64) DEFAULT NULL,
  createdt timestamp DEFAULT NULL
);

--// ====================Orderer BE-303=====================================
-- ----------------------------
--  Table structure for `transactions`
-- ----------------------------
DROP TABLE IF EXISTS transactions;
CREATE TABLE transactions
(
  id SERIAL PRIMARY KEY,
  blockid integer DEFAULT NULL,
  txhash character varying(256) DEFAULT NULL,
  createdt timestamp DEFAULT NULL,
  chaincodename character varying(255) DEFAULT NULL,
  status integer DEFAULT NULL,
  creator_msp_id character varying(128) DEFAULT NULL,
  endorser_msp_id character varying(800) DEFAULT NULL,
  chaincode_id character varying(256) DEFAULT NULL,
  type character varying(128) DEFAULT NULL,
  read_set json default NULL,
  write_set json default NULL,
  channel_genesis_hash character varying(256) DEFAULT NULL,
  validation_code character varying(50) DEFAULT NULL,
  envelope_signature character varying DEFAULT NULL,
  payload_extension character varying DEFAULT NULL,
  creator_id_bytes character varying DEFAULT NULL,
  creator_nonce character varying DEFAULT NULL,
  chaincode_proposal_input character varying DEFAULT NULL,
  tx_response character varying DEFAULT NULL,
  payload_proposal_hash character varying DEFAULT NULL,
  endorser_id_bytes character varying DEFAULT NULL,
  endorser_signature character varying DEFAULT NULL
);

Alter sequence transactions_id_seq restart with 6;

DROP TABLE IF EXISTS write_lock;
CREATE TABLE write_lock
(
  write_lock SERIAl PRIMARY KEY
);

Alter sequence write_lock_write_lock_seq restart with 2;

DROP INDEX IF EXISTS blocks_blocknum_idx;
CREATE INDEX ON Blocks
(blocknum);

DROP INDEX IF EXISTS blocks_channel_genesis_hash_idx;
CREATE INDEX ON Blocks
(channel_genesis_hash);

DROP INDEX IF EXISTS blocks_createdt_idx;
CREATE INDEX ON Blocks
(createdt);

DROP INDEX IF EXISTS transaction_txhash_idx;
CREATE INDEX ON Transactions
(txhash);

DROP INDEX IF EXISTS transaction_channel_genesis_hash_idx;
CREATE INDEX ON Transactions
(channel_genesis_hash);

DROP INDEX IF EXISTS transaction_createdt_idx;
CREATE INDEX ON Transactions
(createdt);

DROP INDEX IF EXISTS transaction_blockid_idx;
CREATE INDEX ON Transactions
(blockid);

DROP INDEX IF EXISTS transaction_chaincode_proposal_input_idx;
CREATE INDEX ON Transactions
((md5
(chaincode_proposal_input)));

DROP INDEX IF EXISTS channel_channel_genesis_hash_idx;
CREATE INDEX ON channel
(channel_genesis_hash);

DROP INDEX IF EXISTS channel_channel_hash_idx;
CREATE INDEX ON channel
(channel_hash);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市滑潘,隨后出現(xiàn)的幾起案子甚带,更是在濱河造成了極大的恐慌蜂桶,老刑警劉巖先朦,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哄孤,死亡現(xiàn)場(chǎng)離奇詭異裆操,居然都是意外死亡蹭劈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門弛秋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)器躏,“玉大人俐载,你說我怎么就攤上這事〉鞘В” “怎么了遏佣?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)揽浙。 經(jīng)常有香客問我状婶,道長(zhǎng),這世上最難降的妖魔是什么馅巷? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任膛虫,我火速辦了婚禮,結(jié)果婚禮上钓猬,老公的妹妹穿的比我還像新娘稍刀。我一直安慰自己,他們只是感情好敞曹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布账月。 她就那樣靜靜地躺著,像睡著了一般澳迫。 火紅的嫁衣襯著肌膚如雪局齿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天纲刀,我揣著相機(jī)與錄音,去河邊找鬼担平。 笑死示绊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的暂论。 我是一名探鬼主播面褐,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼取胎!你這毒婦竟也來(lái)了展哭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤闻蛀,失蹤者是張志新(化名)和其女友劉穎匪傍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體觉痛,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡役衡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了薪棒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片手蝎。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡榕莺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出棵介,到底是詐尸還是另有隱情钉鸯,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布邮辽,位于F島的核電站唠雕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏逆巍。R本人自食惡果不足惜及塘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锐极。 院中可真熱鬧笙僚,春花似錦、人聲如沸灵再。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)翎迁。三九已至栋猖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汪榔,已是汗流浹背蒲拉。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痴腌,地道東北人雌团。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像士聪,于是被迫代替她去往敵國(guó)和親锦援。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353