主頁 > 區塊鏈 > 使用圖資料分析位元幣區塊鏈

使用圖資料分析位元幣區塊鏈

2021-08-16 11:43:56 區塊鏈

使用圖資料分析位元幣區塊鏈

  • 使用圖資料分析位元幣區塊鏈
    • 一、位元幣是如何運作的,區塊鏈是什么
      • 1.1、位元幣可以用來做什么?
      • 1.2、在哪里可以找到區塊鏈?
    • 二、區塊鏈資料是什么樣子的
      • 2.1、塊`Blocks`
      • 2.2、交易`Transactions`
    • 三、如何將區塊鏈資料匯入到圖資料庫中
      • 3.1、塊`Blocks`
      • 3.2、交易`Transactions`
      • 3.3、地址`Addresses`
    • 四、Cypher查詢
      • 4.1、塊`Block`資料處理
      • 4.2、交易`Transaction`資料處理
    • 五、使用區塊鏈資料做一些查詢分析
      • 5.1、查詢塊`Bolck`
      • 5.2、查詢交易`Transaction`
      • 5.3、查詢地址`Address`
      • 5.4、查尋路徑
    • 六、總結

Here’s the table of contents:

使用圖資料分析位元幣區塊鏈

整個程序就是從一種格式(區塊鏈資料)獲取資料,并將其轉換為另一種格式(圖形資料庫),唯一讓這種轉換比典型資料轉換更棘手的是對于資料格式的理解;在開始之前,理解[位元幣資料的結構會有所幫助【在第一部分會詳細說明】,另外,可以參考一些開源工具實作區塊鏈資料匯入,bitcoin-to-graph,區塊鏈(Blockchain)和位元幣(Bitcoin)是什么關系?參考鏈接文章!
在這里插入圖片描述
在這里插入圖片描述

一旦將區塊鏈匯入到圖資料庫中,就可以在圖形資料庫上執行SQL資料庫無法執行的分析,例如,你可以跟蹤位元幣的路徑,看看兩個不同的地址是否連接:
位元幣地址截圖

一、位元幣是如何運作的,區塊鏈是什么

位元幣是一種計算機程式,運行該程式之后,它可以連接到其他運行相同程式的計算機,并共享一個檔案,然而,位元幣最酷的地方在于,任何人都可以向這個共享檔案添加資料,任何已經寫入檔案的資料都不會被篡改,因此,位元幣創建了一個在分布式網路上共享的安全檔案,
在這里插入圖片描述

1.1、位元幣可以用來做什么?

在位元幣中,添加到該檔案中的每條資料都是一筆交易,因此,這個去中心化檔案被用作數字貨幣(即加密貨幣)的“賬本”,這個“賬本”被稱為區塊鏈,
在這里插入圖片描述

1.2、在哪里可以找到區塊鏈?

如果你運行位元幣核心程式,區塊鏈將被存盤在你電腦上的一個檔案夾中:

  • Linux: ~/.bitcoin/blocks
  • Mac: ~/Library/Application Support/Bitcoin/blocks
  • Windows: C:\Users\YourUserName\Appdata\Roaming\Bitcoin\blocks

當您打開這個目錄時,您應該注意到不是一個大檔案,而是多個名為blkxxxx .dat的檔案,這是區塊鏈資料,但是分散在多個較小的檔案中,

二、區塊鏈資料是什么樣子的

blk.dat檔案包含塊blocks和交易transactions的序列化資料,
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

2.1、塊Blocks

塊被magic bytes分隔,接下來是即將到來的塊的大小,每個塊以一個塊頭開始【塊是一個交易串列的基本容器單位】:
塊基本上是事務串列的容器,標題就像頂部的元資料,
在這里插入圖片描述

  • 塊頭的例子:
000000206c77f112319ae21489b66774e8acd379044d4a23ea7498000000000000000000821fe1890186779b2cc232d5dbecfb9119fd46f8a9cfd1141649ff1cd907374487d8ae59e93c011832ec0399

2.2、交易Transactions

在區塊頭之后,有一個位元組告訴您區塊中即將到來的事務數,在此之后,您將依次獲得序列化的事務資料,交易只是另一段代碼,但它們在結構上更有意思,位元幣交易就是一堆描述位元幣移動的資料,它接收輸入,并創建新的輸出,
在這里插入圖片描述
在這里插入圖片描述

每筆交易都有相同的模式:

  1. 選擇輸出(就是得到輸入的程序):解鎖這些輸入,這樣就可以消費了,
  2. 創建輸出:將這些輸出鎖定到一個新地址,
    在這里插入圖片描述

在一系列交易之后,你會得到這樣的交易結構,這是區塊鏈的簡化圖,如你所見,它看起來像一個圖【類似于引言的那個圖】:
在這里插入圖片描述

三、如何將區塊鏈資料匯入到圖資料庫中

通過第一第二部分基本弄清楚了區塊鏈資料表示什么(它看起來很像一個圖),可以繼續將它匯入到圖資料庫中了,

  1. 讀取blk.dat檔案,
  2. 解碼每一個區塊和交易,
  3. 將解碼的塊/事務轉換為一個Cypher查詢,

以下是如何在資料庫中表示區塊、交易和地址的可視化指南:

3.1、塊Blocks

  1. 創建一種:block節點,并將其連接到所構建的前一個區塊;將區塊頭中的每個欄位設定為該節點的屬性,
  2. 為每個區塊的節點,創建一種:coinbase節點,代表了區塊提供的“新”位元幣,
    在這里插入圖片描述

3.2、交易Transactions

  1. 創建一種:tx節點,并將它連接到我們剛才創建的:block節點;設定:tx節點的屬性為(version, locktime),
  2. 合并已有:output節點,并將他們關聯[:in]:tx節點;設定unlocking code做為關系的屬性,
  3. 創建這次交易產生的新的:output節點;設定這些節點上各自的valueslocking代碼,
    在這里插入圖片描述

3.3、地址Addresses

  1. 創建一種’:address’節點,并將:output節點連接到它;同時,設定address屬性在這個節點上,(如果不同的輸出連接到相同的地址,那么它們將連接到相同的地址節點,)
    在這里插入圖片描述

四、Cypher查詢

下面是一些示例Cypher查詢,您可以使用它們作為向圖資料庫插入塊和交易資料的基準查詢,(注意點:需要解碼區塊頭和交易資料,以獲得Cypher查詢的引數,)

4.1、塊Block資料處理

  • 基準Cypher
MERGE (block:block {hash:$blockhash})
CREATE UNIQUE (block)-[:coinbase]->(:output:coinbase)
SET
   block.size=$size,
   block.prevblock=$prevblock,
   block.merkleroot=$merkleroot,
   block.time=$timestamp,
   block.bits=$bits,
   block.nonce=$nonce,
   block.txcount=$txcount,
   block.version=$version,
   
MERGE (prevblock:block {hash:$prevblock})
MERGE (block)-[:chain]->(prevblock)
  • 入參【樣例】
{
    "blockhash": "00000000000003e690288380c9b27443b86e5a5ff0f8ed2473efbfdacb3014f3",
    "version": 536870912,
    "prevblock": "000000000000050bc5c1283dceaff83c44d3853c44e004198c59ce153947cbf4",
    "merkleroot": "64027d8945666017abaf9c1b7dc61c46df63926584bed7efd6ed11a6889b0bac",
    "timestamp": 1500514748,
    "bits": "1a0707c7",
    "nonce": 2919911776,
    "size": 748959,
    "txcount": 1926,
}

4.2、交易Transaction資料處理

  • 基準Cypher

這個查詢使用FOREACH陳述句,它作為一個條件,只在$addresses引數實際包含一個地址時才創建:address節點,通常,FOREACH陳述句使用在需要動態創建圖資料的場景中,

MATCH (block :block {hash:$hash})
MERGE (tx:tx {txid:$txid})
MERGE (tx)-[:inc {i:$i}]->(block)
SET tx += {tx}    
    
WITH tx
FOREACH (input in $inputs |
         MERGE (in :output {index: input.index}) 
         MERGE (in)-[:in {vin: input.vin, scriptSig: input.scriptSig, sequence: input.sequence, witness: input.witness}]->(tx)
         )
            
FOREACH (output in $outputs |
         MERGE (out :output {index: output.index})
         MERGE (tx)-[:out {vout: output.vout}]->(out)
         SET
             out.value= output.value,
             out.scriptPubKey= output.scriptPubKey,
             out.addresses= output.addresses
         FOREACH(ignoreMe IN CASE WHEN output.addresses <> '' THEN [1] ELSE [] END |
                 MERGE (address :address {address: output.addresses})
                 MERGE (out)-[:locked]->(address)
                 )
        )
  • 入參【樣例】
{
   "txid":"2e2c43d9ef2a07f22e77ed30265cc8c3d669b93b7cab7fe462e84c9f40c7fc5c",
   "hash":"00000000000003e690288380c9b27443b86e5a5ff0f8ed2473efbfdacb3014f3",
   "i":1,
   "tx":{
      "version":1,
      "locktime":0,
      "size":237,
      "weight":840,
      "segwit":"0001"
   },
   "inputs":[
      {
         "vin":0,
         "index":"0000000000000000000000000000000000000000000000000000000000000000:4294967295",
         "scriptSig":"03779c110004bc097059043fa863360c59306259db5b0100000000000a636b706f6f6c212f6d696e65642062792077656564636f646572206d6f6c69206b656b636f696e2f",
         "sequence":4294967295,
         "witness":"01200000000000000000000000000000000000000000000000000000000000000000"
      }
   ],
   "outputs":[
      {
         "vout":0,
         "index":"2e2c43d9ef2a07f22e77ed30265cc8c3d669b93b7cab7fe462e84c9f40c7fc5c:0",
         "value":166396426,
         "scriptPubKey":"76a91427f60a3b92e8a92149b18210457cc6bdc14057be88ac",
         "addresses":"14eJ6e2GC4MnQjgutGbJeyGQF195P8GHXY"
      },
      {
         "vout":1,
         "index":"2e2c43d9ef2a07f22e77ed30265cc8c3d669b93b7cab7fe462e84c9f40c7fc5c:1",
         "value":0,
         "scriptPubKey":"6a24aa21a9ed98c67ed590e849bccba142a0f1bf5832bc5c094e197827b02211291e135a0c0e",
         "addresses":""
      }
   ]
}

五、使用區塊鏈資料做一些查詢分析

如果已經使用上面的Cypher查詢插入了塊和交易資料,那么就可以從圖資料庫中做一些查詢分析了,

5.1、查詢塊Bolck

// 查詢塊與交易資料關系
MATCH (block :block)<-[:inc]-(tx :tx)
WHERE block.hash='$blockhash'
RETURN block, tx

在這里插入圖片描述

5.2、查詢交易Transaction

// 查詢交易的輸入輸出關聯關系
MATCH (inputs)-[:in]->(tx:tx)-[:out]->(outputs)
WHERE tx.txid='$txid'
OPTIONAL MATCH (inputs)-[:locked]->(inputsaddresses)
OPTIONAL MATCH (outputs)-[:locked]->(outputsaddresses)
OPTIONAL MATCH (tx)-[:inc]->(block)
RETURN inputs, tx, outputs, block, inputsaddresses, outputsaddresses

在這里插入圖片描述

5.3、查詢地址Address

// 查詢地址和輸出的關系
MATCH (address :address {address:'1PNXRAA3dYTzVRLwWG1j3ip9JKtmzvBjdY'})<-[:locked]-(output :output)
WHERE address.address='$address'
RETURN address, output

在這里插入圖片描述

5.4、查尋路徑

查找交易和地址之間的路徑可能是你可以用位元幣區塊鏈的圖形資料庫做的最有趣的事情,所以這里有一些Cypher查詢的例子:

  • :output節點之間的路徑查詢
// 查詢兩個輸出之間的最短路徑
MATCH (start :output {index:'$txid:vout'}), (end :output {index:'$txid:out'})
MATCH path=shortestPath( (start)-[:in|:out*]-(end) )
RETURN path

在這里插入圖片描述

  • :addresses之間的路徑查詢
// 查詢兩個地址之間的最短路徑
MATCH (start :address {address:'$address1'}), (end :address {address:'$address2'})
MATCH path=shortestPath( (start)-[:in|:out|:locked*]-(end) )
RETURN path

在這里插入圖片描述

六、總結

本文是關于如何從blk.dat檔案(區塊鏈)獲取塊和交易資料并將它們匯入到圖資料庫的簡單指南,

我認為,如果你想對區塊鏈進行分析,這是值得的,圖資料庫是位元幣區塊鏈資料的最自然地表達,而使用SQL資料庫來進行位元幣交易資料分析,是非常困難甚至無法實作的,

為了盡量讓這個指南簡明扼要,所以沒有涉及以下內容:

  1. 閱讀區塊鏈,讀取blk.dat檔案很容易,然而,關于這些檔案的惱人之處在于,塊不是按順序寫入這些檔案的,這使得設定塊的高度或計算交易的費用有點棘手(但您可以圍繞它進行編碼),
  2. 解碼塊和交易,如果您想使用上面的Cypher查詢,您將需要通過解碼區塊頭和原始交易資料來獲得所需的引數,您可以撰寫自己的解碼器,或者嘗試使用現有的位元幣庫,
  3. 還有另外一些特殊格式的處理,也需要特殊考慮,但是如果你了解資料是如何組織起來的,將它轉換成不同的格式只是開發一些特定的程式而已,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/294036.html

標籤:區塊鏈

上一篇:中醫世家手游NFT+元宇宙模式決議

下一篇:【待更新】北京大學肖臻老師《區塊鏈技術與應用》公開課筆記 02-BTC-密碼學原理

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more