本文介绍了基于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 mainimport ("fmt""os""strings"shell "github.com/ipfs/go-ipfs-api"
)func main() {// Where your local node is running on localhost:5001sh := 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

转载于:https://blog.51cto.com/14187963/2352780

如何在基于Bytom开发过程中集成IPFS相关推荐

  1. 搬砖之路----MusicPlayer 一个基于Vlc(2.0+)开发的android音乐播放器--浅析在android开发过程中播放器选择之路!

    前言 MusicPlayer 是一款基于vlc播放器开发的一个音乐播放器,你也可以理解为在此核心上的搬砖之路,核心的内容并不是我写的,因此在正式写blog之前,感谢那些vlc核心的开发人员让我用到这么 ...

  2. matlab中结束脚本运行_MBD开发过程中的持续集成应用

    概述 MBD ,model base design ,使用模型描述需求,并采用代码自动生成技术进行嵌入式开发.为当前汽车电子软件行业,AutoSAR架构下开发的主流技术. 随着DevOps概念的持续火 ...

  3. php 项目反应理论,科学网—好文 | 纽约石溪大学:机器学习中基于项目反应理论的集成学习 - 陈培颖的博文...

    机器学习中,研究者们对分类集成的关注与日俱增,尤其关注分类精度的提升.IJAC近期发表了来自纽约石溪大学研究者的最新成果,该研究基于项目反应理论,提出一种加权投票方法---基于IRT理论的集成学习算法 ...

  4. 基于 Docker Compose 实践 .NET Core 的现代化架构 2:在容器中集成 Skywalking APM

    本章节代码已经上传至 https://github.com/siegrainwong/.NET-Core-with-Docker/tree/master/Part2 系列大纲 还是先介绍一下目录,这次 ...

  5. 基于Vue2实现的仿手机QQapp(支持对话功能,滑动删除....)—— 聊聊开发过程中踩到的一些坑与解决方案,以及个人感悟...

    使用Vue2进行的仿手机QQ的webapp的制作,在ui上,参考了设计师kaokao的作品,作品由个人独立开发,源码中进行了详细的注释. 由于自己也是初学Vue2,所以注释写的不够精简,请见谅. 目前 ...

  6. 移动应用开发过程中的迭代式原型设计

    \ 主要结论 \ 移动应用原型创建过程中采用迭代式快速开发方法的重要性. \ 可以从对手身上学到什么,如何从他们的失误中获益. \ 如何为你的应用定义USP,如何通过故事板(Storyboarding ...

  7. java 当一个文本框有值时另一个文本框置灰_【农行DevOps进行时】基于PaaS的持续集成/持续交付实践 | IDCF...

    作者:曹睿 一.概述 在互联网高速发展的背景下,产品的先发优势被互联网加倍放大,业务需求变化频繁,创新步伐越来越快,导致研发效能被越来越多企业放到极其重要的位置,为了适应日益激烈的业务竞争,必须快速响 ...

  8. 如何在 ASP.NET MVC 中集成 AngularJS

    介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务.另外,还有最新的数据库技术.最新 ...

  9. 浅谈Taro和Apollo在开发过程中的实践

    一.什么是Taro Taro是凹凸实验室研发的一套遵循React语法规范的多端开发的解决方案.使用Taro,可以只书写一套代码,再通过 Taro 的编译工具,将源代码分别编译出可以在不同端(微信/百度 ...

最新文章

  1. 牛逼!原来分布式事务可以这样玩!
  2. adb打开packages_adb shell pm list packages的用法
  3. java轻量级并行工具类_16 个超级实用的 Java 工具类
  4. jQuery学习入门总结之css()和addClass()的不同
  5. 【IM】关于多任务学习的理解
  6. 最新的推荐系统论文两篇
  7. mysql可以存储标点么_MySQL命名、设计及使用规范--------来自标点符的《MySQL命名、设计及使用规范》...
  8. MySQL的安装与配置--windows下安装
  9. 京东:Flink SQL 优化实战
  10. android数据存放map_ES6 的新鲜玩意儿——集合set、map、WeekSet、WeekMap
  11. 【超直白】算法:斐波那契数列
  12. allwinner h3 通用DMA 驱动(SylixOS 操作系统)
  13. android 7使用litepal,android数据库litepal使用记录
  14. 任意门怎么用团发_任意门日淘app官方手机版-任意门日淘安卓版下载v1.4.6-壹六下载...
  15. 按键精灵手机助手如何连接安卓版按键精灵如何连接手机助手
  16. C#微信公众号与订阅号接口开发示例代码
  17. vue中设置外部链接
  18. 中小企业建站方案和资源
  19. 常见Shell编程脚本
  20. 你好,我是计算机组成原理(计算机组成原理1)

热门文章

  1. VBA 中判断汉字的方法
  2. 使用Ubuntu挂载NTFS格式分区
  3. leetcode算法题--煎饼排序
  4. linux I/O--I/O多路复用--介绍(二)
  5. hashMap死循环
  6. 阿里云异构计算产品家族亮相 覆盖全场景AI和高性能计算需求
  7. video视频播放以及主流浏览器兼容
  8. java、intellij idea、groovy
  9. 常用命令linux下vi编辑器命令大全
  10. Extmail配置实践(一)