如何在基于Bytom开发过程中集成IPFS
本文介紹了基于Bytom開(kāi)發(fā)過(guò)程中集成IPFS。
step1: 搭建bytom節(jié)點(diǎn)
比原相關(guān)資料:https://github.com/Bytom-Community/Bytom_Docs
搭建bytom節(jié)點(diǎn)有很多方式,然后開(kāi)啟RPC調(diào)用模式。這里推薦用docker搭建比原節(jié)點(diǎn): docker搭建比原節(jié)點(diǎn),同時(shí)開(kāi)啟RPC訪問(wèn)模式(即終端交互模式)。
我這里都是在本地操作,所以對(duì)應(yīng)的端口是:9888。啟動(dòng)好以后我們?cè)趐ostman里請(qǐng)求測(cè)試一下,如下圖:
說(shuō)明我們已經(jīng)搭建好了比原節(jié)點(diǎn),并且可以進(jìn)行遠(yuǎn)程調(diào)用。
step2: 搭建IPFS節(jié)點(diǎn)
IPFS中文社區(qū)官網(wǎng):http://ipfser.org
IPFS項(xiàng)目地址:https://github.com/ipfs
各種語(yǔ)言實(shí)現(xiàn)源碼:
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節(jié)點(diǎn),這里如果只是本地開(kāi)發(fā),就只需要搭建本地單節(jié)點(diǎn)就足夠了。接下來(lái)我們進(jìn)行具體的搭建。這里可以×××和docker鏡像搭建,具體過(guò)程可以參考(因?yàn)樗С侄喾N語(yǔ)言,這里我們以go語(yǔ)言版本為例):
搭建IPFS環(huán)境:https://blog.csdn.net/weixin_41160534/article/details/81358613
搭建好以后一定要開(kāi)啟端口監(jiān)聽(tīng):
ipfs daemon先在我們已經(jīng)搭建好了IPFS的節(jié)點(diǎn),并且開(kāi)啟API網(wǎng)絡(luò)監(jiān)聽(tīng)。現(xiàn)在我們來(lái)寫(xiě)個(gè)測(cè)試demo(go語(yǔ)言版本),往網(wǎng)絡(luò)上傳文件。
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)} }我們運(yùn)行以后發(fā)現(xiàn)返回Hash,然后我們可以通過(guò)Hash把上傳的文件獲取到 "/Users/huangxinglong/Desktop"目錄現(xiàn)在我們就可以進(jìn)行開(kāi)發(fā)了。
step3: 準(zhǔn)備開(kāi)發(fā)
搭建好比原節(jié)點(diǎn)和IPFS節(jié)點(diǎn)以后我們就可以根據(jù)自己選擇的開(kāi)發(fā)語(yǔ)言選擇具體的插件。 IPFS的插件有如下幾種語(yǔ)言的API插件:
比原鏈的API插件主要有:
如果選擇的開(kāi)發(fā)語(yǔ)言不是java,PHP,Node.js。需要我們自己去根據(jù)比原的開(kāi)發(fā)文檔,然后去集成。
step4: 具體案例
目的:根據(jù)比原上的交易將信息存儲(chǔ)在IPFS中
首先根據(jù)自己選擇的開(kāi)發(fā)語(yǔ)言去選擇對(duì)應(yīng)的API插件,我選擇的是go語(yǔ)言,IPFS有g(shù)o語(yǔ)言的API插件:https://github.com/ipfs/go-ipfs-api。我們?cè)陂_(kāi)發(fā)過(guò)程中直接根據(jù)比原的開(kāi)發(fā)文檔去開(kāi)發(fā),開(kāi)發(fā)文檔地址:https://docs.bytom.io/
首先我們?nèi)ハ螺dIPFS的go語(yǔ)言API插件放到自己的項(xiàng)目中,然后放到自己的項(xiàng)目vender目錄下面:
然后我們?cè)陧?xiàng)目中連接IPFS節(jié)點(diǎn),同時(shí)上傳一個(gè)文件。然后我們會(huì)發(fā)現(xiàn)返回Hash。 然后我們調(diào)用比原create-key接口和create_account接口。創(chuàng)建key和account,然后用給自己的地址充值BTM。通過(guò)api請(qǐng)求3個(gè)接口,先 build → sign → submit,分別對(duì)應(yīng)的api是 build-transaction、sign-transaction、submit-transaction。 然后我們就可以創(chuàng)建一筆交易。
存到IPFS上返回的hash是:QmP4UDViHc78un4SyHZV2ooHkSon2EttpamqPqXQ9WHcaV,將返回的hash放在arbitrary對(duì)應(yīng)的字段,如下:
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}
然后依次調(diào)用sign-transaction和submit-transaction接口,就可以在交易過(guò)程中將信息存儲(chǔ)在IPFS上,如果我們還需要做更復(fù)雜的操作,再根據(jù)比原開(kāi)發(fā)文檔去做相應(yīng)的操作。
現(xiàn)在我們就可以根據(jù)比原上的交易hash,找到對(duì)應(yīng)的IPFS存儲(chǔ)Hash。獲取到在IPFS上存儲(chǔ)的文件。
具體項(xiàng)目過(guò)程請(qǐng)參考:https://github.com/BytomFans/bytom-ipfs
轉(zhuǎn)載于:https://blog.51cto.com/14187963/2352780
總結(jié)
以上是生活随笔為你收集整理的如何在基于Bytom开发过程中集成IPFS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 简单认识Hexo的目录结构
- 下一篇: Fescar 全局锁介绍