如何在基于 Bytom 开发过程中集成 IPFS

本贴最后更新于 1885 天前,其中的信息可能已经事过景迁

本文介绍了基于 Bytom 开发过程中集成 IPFS。

step1: 搭建 bytom 节点

比原相关资料:https://github.com/Bytom-Community/Bytom_Docs

搭建 bytom 节点有很多方式,然后开启 RPC 调用模式。这里推荐用 docker 搭建比原节点: docker 搭建比原节点,同时开启 RPC 访问模式(即终端交互模式)。

我这里都是在本地操作,所以对应的端口是:9888。启动好以后我们在 postman 里请求测试一下,如下图:

image

说明我们已经搭建好了比原节点,并且可以进行远程调用。

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: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


image

先在我们已经搭建好了 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 插件:

image

比原链的 API 插件主要有:

image

如果选择的开发语言不是 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 目录下面:

image

然后我们在项目中连接 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

比原项目仓库:

Github 地址:https://github.com/Bytom/bytom

Gitee 地址:https://gitee.com/BytomBlockchain/bytom

  • 比原链
    20 引用 • 2 回帖
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 231 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...