如何在基於Bytom開發過程當中集成IPFS

本文介紹了基於Bytom開發過程當中集成IPFS。java

step1: 搭建bytom節點

比原相關資料:https://github.com/Bytom-Community/Bytom_Docsnode

搭建bytom節點有不少方式,而後開啓RPC調用模式。這裏推薦用docker搭建比原節點: docker搭建比原節點,同時開啓RPC訪問模式(即終端交互模式)。git

我這裏都是在本地操做,因此對應的端口是:9888。啓動好之後咱們在postman裏請求測試一下,以下圖:github

說明咱們已經搭建好了比原節點,而且能夠進行遠程調用。docker

step2: 搭建IPFS節點

IPFS中文社區官網:http://ipfser.orgshell

IPFS項目地址:https://github.com/ipfsapi

各類語言實現源碼:網絡

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

JavaScript:https://github.com/ipfs/js-ipfs測試

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

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

搭建IPFS節點,這裏若是隻是本地開發,就只須要搭建本地單節點就足夠了。接下來咱們進行具體的搭建。這裏能夠源碼搭建和docker鏡像搭建,具體過程能夠參考(由於它支持多種語言,這裏咱們以go語言版本爲例):

搭建IPFS環境:https://blog.csdn.net/weixin_41160534/article/details/81358613

搭建好之後必定要開啓端口監聽:

ipfs daemon

先在咱們已經搭建好了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插件:

比原鏈的API插件主要有:

若是選擇的開發語言不是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目錄下面:

而後咱們在項目中鏈接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

相關文章
相關標籤/搜索