BigchainDB區(qū)塊鏈技術和分布式數(shù)據(jù)庫的主要優(yōu)點分析
區(qū)塊鏈生態(tài)系統(tǒng)中的許多人可能會批評,甚至討厭BigchainDB聲稱“它不是一個真正的區(qū)塊鏈”, 他們可能是對的,但Hyperledger Fabric也不是。在我看來,BigchainDB是一項值得了解的技術,特別是如果您打算在企業(yè)環(huán)境中部署分散的或分布式的系統(tǒng)。
BigchainDB是一個開源的分布式存儲系統(tǒng),它的目標是將“傳統(tǒng)”NoSQL數(shù)據(jù)庫的主要優(yōu)點與區(qū)塊鏈技術的優(yōu)點結合起來(有點像AWS最近發(fā)布的QLDB - Quantum Ledger數(shù)據(jù)庫)。我在BignchianDB中看到的一個主要好處是,它能夠使用可生產的技術部署一個類似區(qū)塊鏈的分散系統(tǒng)。讓我解釋一下,在企業(yè)環(huán)境中部署區(qū)塊鏈系統(tǒng)的主要關注點之一是當前技術的不成熟。但是等一下,我們已經(jīng)在當前系統(tǒng)中部署了NoSQL數(shù)據(jù)庫,對嗎?BigchainDB基于一個可生產的數(shù)據(jù)庫,這使得它在生產環(huán)境中部署非常有吸引力,而無需等待區(qū)塊鏈平臺的其他平臺趕上來并被企業(yè)大量采用。
BigchainDB分享了區(qū)塊鏈技術和分布式數(shù)據(jù)庫的主要優(yōu)點。
BigchainDB是由企業(yè)可用的數(shù)據(jù)庫節(jié)點(如MongoDB實例)聯(lián)合構建的,這些節(jié)點以同步的方式存儲關于資產的不可更改信息。通過執(zhí)行Tendermint的BFT共識算法,將網(wǎng)絡中存儲的數(shù)據(jù)在所有節(jié)點之間進行傳播和同步,保證了網(wǎng)絡的完整性。總之,BigchainDB是一個MongoDB數(shù)據(jù)庫,它使用Tendermint來獲得它的區(qū)塊鏈特性。
根據(jù)實體對系統(tǒng)的訪問權限,BigchainDB網(wǎng)絡可以是公共的、私有的。在公共BigchainDB中,任何參與者都應該能夠訪問網(wǎng)絡或部署自己的MongoDB+Tendermint節(jié)點,并將其連接到數(shù)據(jù)庫上;獲得許可的BigchainDB可以由財團或治理實體管理,其中財團的每個成員都管理自己在網(wǎng)絡中的節(jié)點,沒有人可以在未經(jīng)許可的情況下加入(類似于其他獲得許可的區(qū)塊鏈技術所發(fā)生的情況)。
BigchainDB中的基本信息結構是資產。資產在MobgoDB中“物理上”表示為JSON文檔。這些資產屬于系統(tǒng)中的用戶,他是唯一有權對其進行更改的人。為了創(chuàng)建、傳輸或修改資產,必須將事務發(fā)送到BigchainDB網(wǎng)絡。這將觸發(fā)Tendermint的共識算法,該算法負責處理事務、驗證事務、同步所有節(jié)點,并在網(wǎng)絡的每個MongoDB節(jié)點上存儲對資產的相應更改。
BigchainDB的交易模型與比特幣的交易模型類似,在某種意義上,資產交易接收資產輸入,然后將資產輸入轉換為資產輸出,在未來可能用作新交易的輸入。資產輸出只能作為事務的輸入使用一次。BigchainDB中有兩種類型的事務:
· 創(chuàng)建事務在系統(tǒng)中生成一個新資產(作為MongoDB中的JSON文檔),其中包含兩種類型的信息:1資產信息,它是不可變的,一旦創(chuàng)建資產就不能修改;2元數(shù)據(jù),它們可以通過后續(xù)的傳輸事務進行修改。
· 轉移事務允許轉移資產所有權,或修改元數(shù)據(jù)。唯一有權在資產上執(zhí)行此交易的是其所有者。這些事務使用資產未使用的輸出作為輸入,生成一個新的輸出,并進行相應的修改(更改其所有權或元數(shù)據(jù))。如上所述,資產輸出不能兩次用作傳輸事務的輸入。
BigchainDB資產可以代表任何東西。從自行車、汽車、政府債券、代幣、虛擬財產或不可替代資產。
在簡要概述之后,您可能想知道,我如何開始使用BigchainDB?你想知道它是否值得我關注,或者它只是一個新的無用的項目,在區(qū)塊鏈生態(tài)系統(tǒng)中沒有價值。最簡單的方法是訪問BigchainDB的官方網(wǎng)站,并嘗試入門。這將直接通過BigchainDB的testnet發(fā)布一條消息。
對于更有經(jīng)驗和更有冒險精神的人(那些真正想了解這項技術的人),我建議他們在本地部署自己的BigchainDB網(wǎng)絡。如果您已經(jīng)安裝了Docker和Docker Compose,那么可以通過克隆BigchainDB的github并執(zhí)行themake run命令來輕松地完成這項工作。(如果您喜歡在后臺運行它,請嘗試make start)。
git clone https://github.com/bigchaindb/bigchaindb.git
cd bigchaindb
make run
我們已經(jīng)準備好了我們的BigchainDB,我們如何創(chuàng)建我們的第一個資產?我將向您展示如何使用Nodejs (Java和Python中也有官方驅動程序)。首先,讓我們下載JS-driver npm安裝bigchaindb-driver。
一旦我們的基礎設施和JS驅動程序準備好了,就是時候在系統(tǒng)中創(chuàng)建一個新的標識,并連接到相應的BigchainDB端點:
// Require JS driver
const driver = require(‘bigchaindb-driver’)
// Create an identity key pair
const myIdenTIty = new driver.Ed25519Keypair()
//Connect to the BigchainDB test network
const conn = new driver.ConnecTIon(‘https://test.bigchaindb.com/api/v1/’)
//Connect or our local infrastructure
const conn = new driver.ConnecTIon(‘http://localhost:9984/api/v1/’)
我們在系統(tǒng)中的身份是通過一個非對稱密鑰對表示的。作為資產所有者,我們將使用我們的私鑰簽署所有資產交易。為了創(chuàng)建一個新的資產,我們需要構建一個新的事務,用我們的私鑰簽名,并將其發(fā)送到網(wǎng)絡,以便Tendermint可以為我們完成剩余的工作,并創(chuàng)建資產:
// Create a new CREATE transacTIon (new output)
const tx = driver.Transaction.makeCreateTransaction(
{ name: ‘My Asset’, immutable_attr1: “bla bla” },
{ metadata1: “here goes”, metadata2: “my metadata attributes”},
[ driver.Transaction.makeOutput(
driver.Transaction.makeEd25519Condition(myIdentity.publicKey))],
alice.publicKey)
//Sign the transaction
const txSigned = driver.Transaction.signTransaction(tx, myIdentity.privateKey)
//Send it to the network
conn.postTransactionCommit(txSigned)
一旦事務被驗證,并且投標輪已經(jīng)結束,我們應該在網(wǎng)絡中看到新的資產。如果我們使用個人的BigchainDB網(wǎng)絡,我們將看到在MongoDB節(jié)點中如何神奇地出現(xiàn)一個新資產。此外,如果我們的網(wǎng)絡中有多個BigchainDB實例(即MongoDB聯(lián)合中的多個節(jié)點),我們應該看到如何在網(wǎng)絡的每個節(jié)點中同時創(chuàng)建和存儲新資產。
另一方面,如果我們使用BigchainDB的測試網(wǎng)絡,我們可以使用驅動程序查詢基礎設施,我們的資產是否已經(jīng)成功創(chuàng)建如下:
//Search asset
conn.searchAssets(‘My Asset’).then(assets =》 console.log(‘Found assets with name My asset:’, assets))
//Search metadata
conn.searchMetadata(‘here goes’).then(metadata =》 console.log(‘Found asset metadata with metadata1 here goes:’, metadata))
最后,您將看到資產創(chuàng)建的所有代碼(只是為了復制粘貼目的)。