天天看點

如何在基于Bytom開發過程中內建IPFS

本文介紹了基于Bytom開發過程中內建IPFS。

step1: 搭建bytom節點

比原相關資料:

https://github.com/Bytom-Community/Bytom_Docs

搭建bytom節點有很多方式,然後開啟RPC調用模式。這裡推薦用docker搭建比原節點:

docker搭建比原節點

,同時開啟RPC通路模式(即終端互動模式)。

我這裡都是在本地操作,是以對應的端口是:9888。啟動好以後我們在postman裡請求測試一下,如下圖:

如何在基于Bytom開發過程中內建IPFS

說明我們已經搭建好了比原節點,并且可以進行遠端調用。

step2: 搭建IPFS節點

IPFS中文社群官網:

http://ipfser.org

IPFS項目位址:

https://github.com/ipfs

各種語言實作源碼:

GO:

https://github.com/ipfs/go-ipfs

JavaScript:

https://github.com/ipfs/js-ipfs

Python:

C:

https://github.com/Agorise/c-ipfs

搭建IPFS節點,這裡如果隻是本地開發,就隻需要搭建本地單節點就足夠了。接下來我們進行具體的搭建。這裡可以源碼搭建和docker鏡像搭建,具體過程可以參考(因為它支援多種語言,這裡我們以go語言版本為例):

搭建IPFS環境:

https://blog.csdn.net/weixin_41160534/article/details/81358613

搭建好以後一定要開啟端口監聽:

ipfs daemon

           
如何在基于Bytom開發過程中內建IPFS

先在我們已經搭建好了IPFS的節點,并且開啟API網絡監聽。現在我們來寫個測試demo(go語言版本),往網絡上傳檔案。

package main

import (
    "fmt"
   "os"
   "strings"

   shell "github.com/ipfs/go-ipfs-api"
)

func main() {
    // Where your local node is running on localhost:5001
     sh := shell.NewShell("localhost:5001")
   cid, err := sh.Add(strings.NewReader("hello world!"))
   if err != nil {
        fmt.Fprintf(os.Stderr, "error: %s", err)
        os.Exit(1)
   }
   fmt.Println("added %s", cid)

   err = sh.Get("QmdFhFwGHy54T3e8cf1ZmovWbZ2yW4yNhNKsu5dSfcgh6H", "/Users/huangxinglong/Desktop")
   if err != nil {
       fmt.Fprintf(os.Stderr, "error: %s", err)
       os.Exit(1)
   }
}

           

我們運作以後發現傳回Hash,然後我們可以通過Hash把上傳的檔案擷取到 "/Users/huangxinglong/Desktop"目錄現在我們就可以進行開發了。

step3: 準備開發

搭建好比原節點和IPFS節點以後我們就可以根據自己選擇的開發語言選擇具體的插件。 IPFS的插件有如下幾種語言的API插件:

如何在基于Bytom開發過程中內建IPFS

比原鍊的API插件主要有:

如何在基于Bytom開發過程中內建IPFS

如果選擇的開發語言不是java,PHP,Node.js。需要我們自己去根據比原的開發文檔,然後去內建。

step4: 具體案例

目的:根據比原上的交易将資訊存儲在IPFS中

首先根據自己選擇的開發語言去選擇對應的API插件,我選擇的是go語言,IPFS有go語言的API插件:

https://github.com/ipfs/go-ipfs-api

。我們在開發過程中直接根據比原的開發文檔去開發,開發文檔位址:

https://docs.bytom.io/

首先我們去下載下傳IPFS的go語言API插件放到自己的項目中,然後放到自己的項目vender目錄下面:

如何在基于Bytom開發過程中內建IPFS

然後我們在項目中連接配接IPFS節點,同時上傳一個檔案。然後我們會發現傳回Hash。 然後我們調用比原create-key接口和create_account接口。建立key和account,然後用給自己的位址充值BTM。通過api請求3個接口,先 build → sign → submit,分别對應的api是 build-transaction、sign-transaction、submit-transaction。 然後我們就可以建立一筆交易。

存到IPFS上傳回的hash是:QmP4UDViHc78un4SyHZV2ooHkSon2EttpamqPqXQ9WHcaV,将傳回的hash放在arbitrary對應的字段,如下:

build-transaction:

{
 "base_transaction": null,
 "actions": [{
 "account_id": "0KTCS3R5G0A02",
 "amount": 10000000,
 "asset_id": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
 "type": "spend_account"
 }, {
"account_id": "0KTCS3R5G0A02",
"amount": 100,
"asset_id": "608037f96e8d1613d900c67a0730cc90e2a03311fb7d091588f7eb551a6103cd",
"type": "spend_account"
}, {
"account_id": "0KTCS3R5G0A02",
"amount": 100,
"asset_id":   "608037f96e8d1613d900c67a0730cc90e2a03311fb7d091588f7eb551a6103cd",
"arbitrary": "QmP4UDViHc78un4SyHZV2ooHkSon2EttpamqPqXQ9WHcaV",
"type": "retire"
}],
"ttl": 0,
"time_range": 1521625823

           

}

然後依次調用sign-transaction和submit-transaction接口,就可以在交易過程中将資訊存儲在IPFS上,如果我們還需要做更複雜的操作,再根據比原開發文檔去做相應的操作。

現在我們就可以根據比原上的交易hash,找到對應的IPFS存儲Hash。擷取到在IPFS上存儲的檔案。

具體項目過程請參考:

https://github.com/BytomFans/bytom-ipfs