共计 2708 个字符,预计需要花费 7 分钟才能阅读完成。
本文介绍了基于 Bytom 开发过程中集成 IPFS。
step1: 搭建 bytom 节点
比原相关资料:https://github.com/Bytom-Community/Bytom_Docs
搭建 bytom 节点有很多方式,然后开启 RPC 调用模式。这里推荐用 docker 搭建比原节点: docker 搭建比原节点, 同时开启 RPC 访问模式 (即终端交互模式)。
我这里都是在本地操作,所以对应的端口是:9888。启动好以后我们在 postman 里请求测试一下,如下图:
说明我们已经搭建好了比原节点,并且可以进行远程调用。
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
先在我们已经搭建好了 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