如何在基于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

相关文章
相关标签/搜索