1. 程式人生 > >區塊鏈技術探索(一), 構造比特幣的創世區塊

區塊鏈技術探索(一), 構造比特幣的創世區塊

0. 從一種更簡單的角度理解區塊鏈技術

如果我們使用搜索引擎去搜索 區塊鏈, 我們看到最多的是 去中心化分散式信任不可更改不可偽造共識工作量證明POW權益證明POS公鏈私鏈聯盟鏈智慧合約未來 等等一堆類似的詞彙。

現在讓我們將這些詞彙從大腦中一個個剔除掉,讓我們對區塊鏈的認識歸零。

傳統中心和區塊鏈的礦工

在傳統的中心化應用裡, 中心需要做很多繁雜的事情, 而在比特幣世界裡, 礦工只做三件事情: 1.驗證交易 2.寫交易 3.讀交易, 當然為了做成這三件事情,礦工需要做很多其他幕後的工作。

在傳統的中心化應用裡, 中心接收你的命令,為你完成相關的任務, 而在比特幣世界裡, 礦工只做三件事情: 1.驗證交易 2.寫交易 3.讀交易, 礦工不會接受你的任何命令。

在傳統的中心化應用裡, 中心即使沒有你的命令,也可以為你完成意想不到的任務,比如將你的帳號充值清零, 刪除你的訂單, 刪除你的評論,帖子等等, 而在比特幣世界裡, 礦工只做三件事情: 1.驗證交易 2.寫交易 3.讀交易, 礦工無法替你建立任何交易, 也無法修改你的任何交易.

在傳統的中心化應用裡, 中心制定規則,中心想要什麼樣的規則就可以有什麼樣的規則, 而在比特幣的世界裡, 規則塑造本尊,改變規則預示著分裂.

在傳統的中心化應用裡, 中心總是試圖瞭解你,變得很懂你,知道你想做什麼, 而在比特幣世界裡, 礦工只做三件事情: 1.驗證交易 2.寫交易 3.讀交易, 礦工不關心你是誰,也不關心你想做什麼.

在傳統的中心化應用裡,中心經常背鍋,發生了錯誤和損失,你第一時間想到的是向中心追責, 而在比特幣世界裡, 礦工只做三件事情: 1.驗證交易 2.寫交易 3.讀交易, 所有的錯誤你都得自己負責.

在某種傳統的中心化應用裡, 比如某個電商網站,你在上面購買了一盒牙刷, 為了購買這盒牙刷,網站中心會為你完成一系列的業務操作, 生成一系列的業務資料比如訂單,支付,物流,積分等, 和網站中心相比,你實際上什麼都沒有幹, 當然你其實點選了很多次滑鼠, 打了很多字,讀了很多商品評價。 

但是在比特幣世界裡,你給某個地址轉賬,和礦工相比, 轉賬這件事情其實百分之百是你自己完成的, 交易是你建立的,礦工做的事情只不過是驗證下交易,然後將交易寫到區塊中.

現在我們將上面的礦工都改成中心,其他不變:

傳統中心和區塊鏈的中心

在傳統的中心化應用裡, 中心需要做很多繁雜的事情, 而在比特幣世界裡, 中心只做三件事情: 1.驗證交易 2.寫交易 3.讀交易, 當然為了做成這三件事情,中心需要做很多其他幕後的工作。

在傳統的中心化應用裡, 中心接收你的命令,為你完成相關的任務, 而在比特幣世界裡, 中心只做三件事情: 1.驗證交易 2.寫交易 3.讀交易, 中心不會接受你的任何命令。

在傳統的中心化應用裡, 中心即使沒有你的命令,也可以為你完成意想不到的任務,比如將你的帳號充值清零, 刪除你的訂單, 刪除你的評論,帖子等等, 而在比特幣世界裡, 中心只做三件事情: 1.驗證交易 2.寫交易 3.讀交易, 中心無法替你建立任何交易, 也無法修改你的任何交易.

在傳統的中心化應用裡, 中心制定規則,中心想要什麼樣的規則就可以有什麼樣的規則, 而在比特幣的世界裡, 規則塑造本尊,改變規則預示著分裂.

在傳統的中心化應用裡, 中心總是試圖瞭解你,變得很懂你,知道你想做什麼, 而在比特幣世界裡, 中心只做三件事情: 1.驗證交易 2.寫交易 3.讀交易, 中心不關心你是誰,也不關心你想做什麼.

在傳統的中心化應用裡,中心經常背鍋,發生了錯誤和損失,你第一時間想到的是向中心追責, 而在比特幣世界裡, 中心只做三件事情: 1.驗證交易 2.寫交易 3.讀交易, 所有的錯誤你都得自己負責.

在某種傳統的中心化應用裡, 比如某個電商網站,你在上面購買了一盒牙刷, 為了購買這盒牙刷,網站中心會為你完成一系列的業務操作, 生成一系列的業務資料比如訂單,支付,物流,積分等, 和網站中心相比,你實際上什麼都沒有幹, 當然你其實點選了很多次滑鼠, 打了很多字,讀了很多商品評價。 

但是在比特幣世界裡,你給某個地址轉賬,和中心相比, 轉賬這件事情其實百分之百是你自己完成的, 交易是你建立的,中心做的事情只不過是驗證下交易,然後將交易寫到區塊中.

所以我們可以認為區塊鏈技術是: 該由使用者做的事情,只能由使用者自己去做, 我們只能按規則驗證使用者所做的事情, 並將使用者自己所做的事情如實地記錄在一條鏈上,這條鏈就是區塊鏈。

1. 解析交易

創世區塊即比特幣的第一個區塊,這個區塊只包含了一筆交易我們把此交易叫做創世交易, 並將它記作 Tx0,為了構造創世區塊,我們首先要構造 Tx0, 為了構造 Tx0 我們需要理解比特幣中的交易的資料結構.

general format of a Bitcoin transaction (inside a block)

Field Description Size
Version no currently 1 4 bytes
In-counter positive integer VI = VarInt 1 - 9 bytes
list of inputs the first input of the first transaction is also called “coinbase” (its content was ignored in earlier versions) <in-counter>-many inputs
Out-counter positive integer VI = VarInt 1 - 9 bytes
list of outputs the outputs of the first transaction spend the mined bitcoins for the block <out-counter>-many outputs
lock_time if non-zero and sequence numbers are < 0xFFFFFFFF: block height or timestamp when transaction is final 4 bytes


為了確認自己理解了比特幣交易的資料結構,最好的方式是自己寫一個 parser, 然後使用自己寫的這個 parser 去解析比特幣交易資料的內容。我們可以使用任何自己熟悉的程式語言去寫這個 parser, 但是在這篇文章中我會大部分使用 c 語言, 包括用 c 去寫這個 parser, 因為我認為使用 c 語言研究區塊鏈技術會比較直接和方便。

1.1 解析 Version no

/* parse_tx_version.c */

#include <stdio.h>

int main()
{
  FILE *fp;
  unsigned int tx_version;

  fp = fopen("tx0.bin", "rb");
  fread(&tx_version, sizeof(tx_version), 1, fp);

  printf("Tx Version: %u\n", tx_version);
}

通過分析 parse_tx_version.c 的程式碼我們可以看到用 c 語言解析比特幣交易的資料結構非常直接: 定義一個 unsigned int 型別的 tx_version 變數, tx_version也是 4 bytes, 然後從 tx0.bin 的開始位置讀 1 次, 讀取的位元組大小是 4 個位元組, 這個 4 由 sizeof(tx_version) 計算出來, 讀取的結果存放到 tx_version 變數裡,編譯上述程式碼,並執行,我們得到下面的輸出:

Tx Version: 1

1.2 解析 In-counter

In-counter 的結構定義如下:

Variable length integer

Value Storage length Format
< 0xFD 1 uint8_t
<= 0xFFFF 3 0xFD followed by the length as uint16_t
<= 0xFFFF FFFF 5 0xFE followed by the length as uint32_t
- 9 0xFF followed by the length as uint64_t

解析的步驟如下:

  • 讀取第 1 個位元組, 假設它的值為 v1

  • 如果 v1 < 0xF, 那麼 v1 就是 In-counter 的值

  • 如果 v1 == 0xFD, 那麼再讀取 2 個位元組, 這 2 個位元組是以 little-endian 形式儲存的

  • 如果 v1 == 0xFE, 那麼再讀取 4 個位元組, 這 4 個位元組是以 little-endian 形式儲存的

  • 如果 v1 == 0xFF, 那麼再讀取 8 個位元組, 這 8 個位元組是以 little-endian 形式儲存的


/* parse_tx_vinc.c */

#include <stdio.h>
#include <stdint.h>

int main()
{
  FILE *fp;
  unsigned int tx_version;

  
  uint8_t  tx_vin1;
  uint16_t tx_vin2;
  uint32_t tx_vin4;
  uint64_t tx_vin8;
  uint64_t tx_vin;

  fp = fopen("tx0.bin", "rb");
  fread(&tx_version, sizeof(tx_version), 1, fp);
  fread(&tx_vin1, sizeof(tx_vin1), 1, fp);
  if(tx_vin1 < 0xFD){
    tx_vin = tx_vin1;
  } else if(tx_vin1 == 0xFD){
    fread(&tx_vin2, sizeof(tx_vin2), 1, fp);
    tx_vin = bbp_eint16(BBP_LITTLE, tx_vin2); /* 處理 little-endian 形式的 uint16_t */
  } else if(tx_vin1 == 0xFE) {
    fread(&tx_vin4, sizeof(tx_vin4), 1, fp);
    tx_vin = bbp_eint32(BBP_LITTLE, tx_vin4); /* 處理 little-endian 形式的 uint32_t */
  } else if(tx_vin1 == 0xFF) {
    fread(&tx_vin8, sizeof(tx_vin8), 1, fp);
    tx_vin = bbp_eint64(BBP_LITTLE, tx_vin8); /* 處理 little-endian 形式的 uint64_t */
  } else {
    tx_vin = 0;
  }


  printf("Tx Version: %u\n", tx_version);
  printf("Tx In-counter: %lld\n", tx_vin);
  
}

執行程式:

$ make parse_tx_vinc
$ ./parse_tx_vinc.out

Tx Version: 1
Tx In-counter: 1

1.3 解析 list of inputs

list of inputs 是由一組 Txin 構成的, Txin 的結構如下:

general format (inside a block) of each input of a transaction - Txin

Field Description Size
Previous Transaction hash doubled SHA256-hashed of a (previous) to-be-used transaction 32 bytes
Previous Txout-index non negative integer indexing an output of the to-be-used transaction 4 bytes
Txin-script length non negative integer VI = VarInt 1 - 9 bytes
Txin-script / scriptSig Script <in-script length>-many bytes
sequence_no normally 0xFFFFFFFF; irrelevant unless transaction’s lock_time is > 0 4 bytes

為簡單起見,我們只解析第一個 Txin, 我們以解析 Previous Transaction hash 為例子來講講解析過程。

  1. Previous Transaction hash 一共有 32 個位元組,為此我們定義一個長度為 32,型別為 uint8_t 的陣列來儲存 Hash, 這個陣列定義為 uint8_t pre_tx_hash[32];

  2. 將 Hash 以 16 進位制的形式儲存到一個字串中, 這個字串定義為 char pre_tx_hash_str[65]

因為 Tx0 的 Previous Transaction hash 是 “0000000000000000000000000000000000000000000000000000000000000000”, 有一定的特殊性,為了 確認解析結果是否正確,我們可以解析其他一些不特殊的交易資料,比如 https://webbtc.com/tx/703fc5…, 編譯程式碼後我們可以給程式提供一個待解析的交易檔名為引數,比如:

$ ./a.out tx0.bin

$ ./a.out tx0.bin 
Tx Version: 1
Tx In-counter: 1
Txin Previous Tx Hash: 0000000000000000000000000000000000000000000000000000000000000000
Txin Previous Txout-index: ffffffff
Txin-script length: 77
Txin-script / scriptSig: 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73
Txin sequence_no: ffffffff

或者

$ ./a.out tx_703fc5ee.bin

$ ./a.out tx_703fc5ee.bin 
Tx Version: 1
Tx In-counter: 1
Txin Previous Tx Hash: a59238577c596d2caa367c0855a76a75efcde6953186507fa51ee2dff3eb8b41
Txin Previous Txout-index: 1
Txin-script length: 106
Txin-script / scriptSig: 47304402207b9e4d1c1e126f47db3d74f981b8ee9c124f44a92637a657dc94cd4b05216a9a022014fe5df34c6e2c3b1bb1de3f69097873e220b97c0beefd29cc714abeb8180c880121030e1e08f6d4ba2b71207c961109f9d0b7eaad24b106ecc9b691c297c732d47fcc
Txin sequence_no: ffffffff

我們會發現解析 tx_703fc5ee.bin 的結果中 scriptSig 和 https://webbtc.com/tx/703fc5ee.json 中的 scriptSig 有些不一樣, 一眼可以看出我們自己解析出的 scriptSig 前面多了 47, 這是什麼原因導致的呢?回頭再看 Txin 的結構表, Txin-script / scriptSig 的描述是一個 Script(https://en.bitcoin.it/wiki/Script), 比特幣的 Script 是一個類似 Forth 語言的東西,我們自己寫的解析器已經可以將 Script 的內容原原本本地讀出來了,但是還需要將它翻譯下。在後面的解析中我們會知道 47 準確地說是 0x47 其實是一個 Script Constant[28], Script Constant 是 Script OP_CODE 中的一種.

703fc5ee.json 中的 txin 的 scriptSig 的內容如下:

scriptSig: "304402207b9e4d1c1e126f47db3d74f981b8ee9c124f44a92637a657dc94cd4b05216a9a022014fe5df34c6e2c3b1bb1de3f69097873e220b97c0beefd29cc714abeb8180c8801 030e1e08f6d4ba2b71207c961109f9d0b7eaad24b106ecc9b691c297c732d47fcc"

我們自己寫的解析器解析 tx_703fc5ee.bin 得到的 scriptSig 的內容如下:

scriptSig: "47304402207b9e4d1c1e126f47db3d74f981b8ee9c124f44a92637a657dc94cd4b05216a9a022014fe5df34c6e2c3b1bb1de3f69097873e220b97c0beefd29cc714abeb8180c880121030e1e08f6d4ba2b71207c961109f9d0b7eaad24b106ecc9b691c297c732d47fcc"

到目前為止, 我們的主要目的是解析 Tx0 的資料結構, 同時我們又通過解析檔案 tx_703fc5ee.bin 來做一個參考檢驗, 我們會先把主要的精力放在解析 tx0.bin 和 tx_703fc5ee.bin 上面,所以在這篇文章中,我們後續的解析工作會繼續圍繞在 tx0.bin 和 tx_703fc5ee.bin 這兩個檔案上面, 程式碼的編寫也會主要針對這兩個檔案。

1.4 解析 Txin-script / scriptSig

在這一節中我們將主要討論解析 tx_703fc5ee.bin 和 tx0.bin 這兩個檔案的 Txin-script / scriptSig, 其中 tx0.bin 的 Txin-script / scriptSig 的更準確的名字應該是 coinbase.

scriptSig 的結構是: <Signature> <PubKey>, 也就是說 scriptSig 分為兩部分:第 1 部分是 Signature, 第 2 部分是 PubKey, 那麼我們如何將檔案 tx_703fc5ee.bin 的 scriptSig 解析成 Signature 和 PubKey 兩部分呢?

首先我們看一個表:

When talking about scripts, these value-pushing words are usually omitted.

Word Opcode Hex Input Output Description
OP_0, OP_FALSE 0 0x00 Nothing. (empty value) An empty array of bytes is pushed onto the stack. (This is not a no-op: an item is added to the stack.)
N/A 1-75 0x01-0x4b (special) data The next opcode bytes is data to be pushed onto the stack
OP_PUSHDATA1 76 0x4c (special) data The next byte contains the number of bytes to be pushed onto the stack.
OP_PUSHDATA2 77 0x4d (special) data The next two bytes contain the number of bytes to be pushed onto the stack.
OP_PUSHDATA4 78 0x4e (special) data The next four bytes contain the number of bytes to be pushed onto the stack.
OP_1NEGATE 79 0x4f Nothing. -1 The number -1 is pushed onto the stack.
OP_1, OP_TRUE 81 0x51 Nothing. 1 The number 1 is pushed onto the stack.
OP_2-OP_16 82-96 0x52-0x60 Nothing. 2-16 The number in the word name (2-16) is pushed onto the stack.

為簡單起見,我們先只分析 Opcode 為 1-75 的情況, 當 1 <= Opcode <= 75 時, Opcode 後面的 Opcode 個位元組的資料將被壓入到棧中,這個會被壓入到棧中的資料就是 Signature 或者 PubKey, 這裡的棧是比特幣腳本系統的一種資料結構,用於執行 Script.

通過下面的圖我們可以更加直觀地理解 scriptSig.

sig-pubkey

通過上圖我們已經可以手工地解析出 Signature 和 PubKey, 接下來我們通過編寫程式碼來實現解析。

編譯檔案 parse_txin_script_sig.c, 然後分別使用 tx0.bin 和 tx_703fc5ee.bin 作為輸入檔案進行測試,測試結果如下:

$ ./a.out tx0.bin 

Tx Version: 1
Tx In-counter: 1
Txin Previous Tx Hash: 0000000000000000000000000000000000000000000000000000000000000000
Txin Previous Txout-index: ffffffff
Txin-script length: 77
Txin-script / coinbase: 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73
Txin sequence_no: ffffffff
$ ./a.out tx_703fc5ee.bin 

Tx Version: 1
Tx In-counter: 1
Txin Previous Tx Hash: a59238577c596d2caa367c0855a76a75efcde6953186507fa51ee2dff3eb8b41
Txin Previous Txout-index: 1
Txin-script length: 106
Txin-script / scriptSig: 304402207b9e4d1c1e126f47db3d74f981b8ee9c124f44a92637a657dc94cd4b05216a9a022014fe5df34c6e2c3b1bb1de3f69097873e220b97c0beefd29cc714abeb8180c8801 030e1e08f6d4ba2b71207c961109f9d0b7eaad24b106ecc9b691c297c732d47fcc
Txin sequence_no: ffffffff

將上面的測試結果分別與 webbtc.com 上的 TX-0 和 TX-703fc5ee 作比較,我們會發現結果是吻合的。

解析的過程是這樣的,首先定義了一系列的巨集, 我們只敘述用到的巨集:

#define COINBASE_INX       0xffffffff
#define NULL_HASH          "0000000000000000000000000000000000000000000000000000000000000000"
#define OP_PUSHDATA0_START 0x01
#define OP_PUSHDATA0_END   0x4b
#define SIG_BUF_SIZE       1000

COINBASE_INX 和 NULL_HASH 結合起來使用,用於判斷 Txin(交易輸入) 是否是 coinbase 型別的輸入, 什麼是 coinbase 呢? 簡單地說就是比特幣系統給你輸入了一筆錢,這筆錢不是來自任何的個人。如果一個 Txin 的 Previous Txout-index 等於 COINBASE_INX 並且 Previous Tx Hash 等於 NULL_HASH, 那麼這個 Txin 就是 coinbase 型別的輸入.

OP_PUSHDATA0_START 和 OP_PUSHDATA0_END 結合起來使用,用於解析下面的規則:

Word Opcode Hex Input Output Description
N/A 1-75 0x01-0x4b (special) data The next opcode bytes is data to be pushed onto the stack


對於一個非 coinbase 型別的 Txin, 當讀取它的 scriptSig 時, 如果 opcode 的值是在 OP_PUSHDATA0_START 和 OP_PUSHDATA0_END 之間就需要使用上述的規則解析 scriptSig.

SIG_BUF_SIZE 用於給 coinbase 和 scriptSig 固定分配一段足夠大的記憶體,因為 coinbase 和 scriptSig 是變長的,如果在程式執行時動態分配記憶體會是一件比較複雜的事情,所以我們預先設定 SIG_BUF_SIZE 為 1000 個位元組,足夠容納 coinbase 或者 scriptSig.

然後我們定義 coinbase 和 scriptSig 的資料結構:

typedef struct coinbase_sig {
  char sig[SIG_BUF_SIZE];
  uint64_t len;
} coinbase_sig;

typedef struct script_sig {
  char sig[SIG_BUF_SIZE];
  char pubkey[SIG_BUF_SIZE];
  uint64_t len;
} script_sig;

我們用 struct coinbase_sig 來儲存 coinbase, 用 struct script_sig 來儲存 scriptSig.

接著定義用於解析 coinbase 和 scriptSig 的函式:

void btc_cb_sig(coinbase_sig *sig_ptr, FILE *fp)
{
  uint64_t len = sig_ptr -> len;
  uint8_t sig_buf[len];
  char buf3[3];
  
  fread(sig_buf, sizeof(uint8_t), len, fp);
  for(uint64_t i=0; i < len; i++)
  {
    get_hex2_str(buf3, sig_buf[i]);
    sig_ptr->sig[i * 2] = buf3[0];
    sig_ptr->sig[i * 2 + 1] = buf3[1];
  }

  sig_ptr->sig[len * 2] = '\0';

}

void btc_sc_sig(script_sig *sig_ptr, FILE *fp)
{
  uint8_t op_code;
  char buf3[3];

  fread(&op_code, sizeof(uint8_t), 1, fp);
  if(op_code >= OP_PUSHDATA0_START && op_code <= OP_PUSHDATA0_END){
    read_op_pushdata0(sig_ptr -> sig, op_code, fp);
  } else {
  }

  fread(&op_code, sizeof(uint8_t), 1, fp);
  if(op_code >= OP_PUSHDATA0_START && op_code <= OP_PUSHDATA0_END){
    read_op_pushdata0(sig_ptr -> pubkey, op_code, fp);
  } else {
  }

}

其中 void btc_cb_sig(coinbase_sig *sig_ptr, FILE *fp) 用於解析 coinbase, void btc_sc_sig(script_sig *sig_ptr, FILE *fp) 用於解析 scriptSig.

最後實際的解析過程如下, 去掉了一些不相關的程式碼,

相關推薦

區塊技術探索(), 構造創世區塊

0. 從一種更簡單的角度理解區塊鏈技術 如果我們使用搜索引擎去搜索 區塊鏈, 我們看到最多的是 去中心化, 分散式, 信任, 不可更改, 不可偽造, 共識, 工作量證明, POW, 權益證明, POS, 公鏈, 私鏈, 聯盟鏈, 智慧合約, 未來 等等一堆類似的詞彙。 現在讓我們將這些詞彙

何璽:區塊的價值不止產,在對未來商業邏輯的重構與創新

中心 共享 用戶界面 網關 驗證 全能 研究 成本 能耗 徐小平說“區塊鏈革命已經到來。這是一場順之者昌,逆之者亡的偉大技術革命。它對傳統的顛覆,將會比互聯網、移動互聯網來得更加迅猛、徹底。”作為從2012年就開始關註區塊鏈技術愛好者,何璽今天也來聊聊火熱的區塊鏈。 一、區

區塊是儲蓄和記錄交易的資料庫

與其他金融行業和銀行所使用的資料庫和財務賬本不同,世界金融學主管詹卡洛布魯諾曾說:區塊鏈是儲蓄和記錄比特幣交易的資料庫。區塊鏈不是由單一的公司或政府負責更新和維護的而是由所以使用者共同完成的與維基百科類似。而銀行業卻不願意通用比特幣,因為比特幣曾被用於不法場所交易,所以很多銀行都成立了自己的

深入淺出區塊-第2講:的轉賬機制和學習區塊需要掌握的7個基本名詞

  第2講:比特幣的轉賬機制和學習區塊鏈需要掌握的7個基本名詞 在第2講開始前,先簡單複習下第1講的核心內容: 記賬貨幣,是一種中心化記賬的模式; 比特幣是一種非中心化記賬機制,人人可記賬,並且具備傳遞資訊的同時同步傳遞價值。 這一切的背後都依賴於比特幣的底層技術區塊鏈

瞭解一下區塊,到底什麼是,什麼是區塊

比特幣區塊鏈無疑是當今業界的最熱門的。通過這篇部落格,我將盡力向大家介紹加密貨幣比特幣的概念,以及它如何創造我們稱之為區塊鏈的革命性技術。 這個問題經常引起混淆。這篇文章可以快速解釋和清理這方面的混亂! 什麼是比特幣? 在我們開始之前,讓我簡要介紹一下貨幣交易

[區塊]數字貨幣交易所之(BTC)錢包對接 | 自建節點JSON-RPC訪問

關閉 參數 info 密碼 重新 說明 賬戶 none ransac BTC錢包對接流程 一. 部署BTC錢包節點 二. 分析BTC錢包的API 三. 通過JSON-RPC訪問BTC錢包API 四. 部署測試 一、部署錢包節點 交易平臺對接BTC之前,要

從零開始學習區塊技術)--從原始碼編譯

寫在開始之前,為什麼你一定要學習區塊鏈技術? 技術的變革和迭代一直在飛速發展中,作為有著15年程式開發經驗的我,常常在思考現在的我們到底改如何做,到底應該學習些什麼,才能跟上新的時代變革,保持自身的競爭力,並且能為這個世界帶來更好的改變呢? 答案是,學習

下車, 區塊不死: 資本下站, 請關註這些公司

區塊鏈ICO被封殺,比特幣也就隨之被普遍認為是“死了”。問題是下一步會怎樣?不管市場如何變化,資本是永遠不會“死”的。在這個流動性早就嚴重過剩的時代,人們實際上關心的並不是哪個項目的死與活,而是資本將會往哪個方向流動?這才是最具本質性的問題。這些年來隨著比特幣的炒作,多數人似懂非懂地都知道了另一個詞:區塊鏈。

區塊時代,由雙十暢想的未來前景

昨天全國人民最關注的莫過於淘寶雙十一狂歡節了,不出意外昨天又創造了記錄,當天淘寶天貓成交金額2135億。果洛在京東也貢獻了5千大洋,所以實際上昨天的電商成交金額還要多不少。 同時昨天媒體還報道螞蟻區塊鏈也首次參與了雙十一,為1.5件商品保駕護航。 區塊鏈作為近兩年網際網路業最火的詞

Blockchain(區塊)技術打造去中心化物聯網

比特幣和物聯網這兩個看上去似乎毫不相關的術語,隨著IBM&Samsung在15年2月份演示的ADEPT物聯網解決方案DEMO後,硬是把比特幣和物聯網結合在一起了。 本文就簡單剖析下比特幣和物聯網是否如何結合在一起的,以及它們的結合對未來物聯網又有怎樣的影響。 說明:本文為運維派原創,若你對

Bitcoin Blockchain 區塊 基礎技術解釋

前言: 好長時間沒寫Blog了,因為都在搞Bitcoin這玩意,現在網上大部分都是些概念性的東西,真正的實質內容不多,聽到最多的詞就是去中心化,去第三方,這對於理解比特幣或是區塊鏈技術根本沒有半毛錢的幫助,因此我在這總結下關於比特幣的種種。 比特幣,區塊鏈簡述: 這個簡述

揭祕區塊基礎技術原理

作者:李豔鵬,現任螞蟻金服高階技術專家,著有《分散式服務架構:原理、設計與實戰》和《可伸縮服務架構:框架與中介軟體》,曾經在易寶支付、花旗銀行、甲骨文、新浪微博、路透社等大型IT網際網路公司擔任技術負責人和首席架構師的工作,現專注於區塊鏈平臺的研發與推廣,

區塊入門筆記()——的原理和挖礦機制

一、比特幣:1. 分散式的虛擬貨幣。    區別於現實銀行的中央系統貨幣。2. 基礎設施搭建    1)完全公開    2)只是記錄每筆交易資訊    3)記錄完全公開,個人資訊不公開,有完整的公鑰加密系統,可以保證唯一性和安全性    4)礦工:挖礦來增加區塊鏈、挖礦成功獎

文看懂區塊

最近的比特幣病毒事件,使的比特幣,區塊鏈技術再次受到人們的廣泛關注。有人把它比做早期的網際網路技術,區塊鏈技術誕生於比特幣。本文簡單介紹比特幣及比特幣的底層技術區塊鏈,分析區塊鏈技術的特點及應用場景。 什麼是比特幣 特幣的概念最初由中本聰在2009年提出,根據中本聰的思

區塊

場景 不容易 但是 兩種 相差 對象 大堆 底層 發出 早上看到一則新聞,說比特幣可能要分裂比特幣現金,很多持有者可能會憑空多出很多財富,又聯想到前端時間微信群中討論的很火熱的區塊鏈的話題,記得當時有人曾說這可能是影響未來幾年最重要的技術之一,覺得為看懂未來趨勢,有必要再

以及區塊原理學習

管理 base58 分布式系 過程 現實社會 ali 同步 結果 計算   2018年春節過後區塊鏈技術一下子火爆起來了,本人也對該技術十分感興趣,因此想研究下區塊鏈技術的原理,看看區塊鏈背後那些技術值得去研究。由於自己缺乏實際的開發經驗和使用經驗,文中難免會有些理解不到位

雖老套但確屬乾貨 | 愛德華·斯諾登:我眼中的區塊

  譯者注:本文作者是本·維茲納(Ben Wizner),他是美國公民自由聯盟的律師,同時還是作家和公民自由倡導者。自2013年7月起,他一直擔任愛德華·斯諾登(Edward Snowden)的首席律師。本文以對話形式,向讀者展示了這個因揭露美國“稜鏡”計劃和“監聽門”的“英雄”

區塊快速入門

區塊鏈本質上是一個去中心化的分散式賬本資料庫。 泛泛而談就是說,區塊鏈是比特幣的底層技術,而比特幣是一種區塊鏈。 1.具有以下三個性質的系統就是區塊鏈: (1)區塊鏈是一個放在非安全環境中的分散式資料庫(系統); (2)區塊鏈採用密碼學的方法來保證已有資料不可能被篡改; (3)區塊鏈採用共識演算

什麼是區塊

區塊是一堆交易記錄的集合,我們可以理解成普通記賬本中的一頁,每個頁面記錄很多不同的交易資訊,這些書頁按時間順序裝訂起來便是區塊鏈,分散式賬本便是區塊鏈技術的一種體現。        在比特幣網路中,每個10分鐘會將全網的交易打包起來,加上時間戳形成區塊,併入比特幣賬本,此賬本便是區塊鏈。打包是由各節點競爭來決

區塊 到底是什麼鬼?

作者 | 丹華 文章來源Gitchat,CSDN獨家合作釋出,點選「閱讀原文」檢視交流實錄 專場前言 在全球範圍內,比特幣和區塊鏈已經成為熱潮,有圖為證: 當前區塊鏈行業的現狀和矛盾是什麼? 簡單說,現狀是冰火兩重天。火的一