iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何将JSON文件存储在IPFS上
  • 254
分享到

如何将JSON文件存储在IPFS上

2023-06-02 18:06:22 254人浏览 独家记忆
摘要

本篇内容介绍了“如何将JSON文件存储在IPFS上”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如何将jsON文件存储在IPFS上,并使用O

本篇内容介绍了“如何将JSON文件存储在IPFS上”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

如何将jsON文件存储在IPFS上,并使用Oraclize访问智能合约中的数据呢?

以太坊是一个成熟的区块链,使开发人员能够创建智能合约,在区块链上执行的程序可以由交易触发。人们经常将区块链称为数据库,但使用区块链作为数据存储非常昂贵。

以目前的价格(530美元,4gwei)在以太坊上存储250GB将花费你106,000,000美元。一般来说,我们可以忍受高成本因为我们:

  • 不会在以太坊区块链上保存那么多数据。

  • 区块链的审查制度,透明度和稳健性是值得的。

如果你是以太坊的新手,请查看此介绍。

去中心化存储

IPFS(星际文件系统)对区块链存储有一些保证,即去中心化和防篡改,但不比传统的磁盘空间花费更多费用。使用EBS 250GB存储运行EC2 t2.micro实例将花费你大约15美元/月。IPFS的一个独特功能是它处理文件的方式。它不使用基于位置的寻址(如域名,IP地址,文件路径等),而是使用基于内容的寻址。将文件(或目录)添加到IPFS存储库后,可以通过其加密哈希来引用它。

$ ipfs add article.jsonadded Qmd4PvCKbFbbB8krxajCSeHdLXQamdt7yFxFxzTbedwiYM article.json$ ipfs cat Qmd4PvCKbFbbB8krxajCSeHdLXQamdt7yFxFxzTbedwiYM{  "title": "This is an awesome title",  "content": "paragraph2\r\n\r\nparagraph3"}$ curl https://ipfs.io/ipfs/Qmd4PvCKbFbbB8krxajCSeHdLXQamdt7yFxFxzTbedwiYM{  "title": "This is an awesome title",  "content": "paragraph2\r\n\r\nparagraph3"}

然后,你可以使用IPFS客户端或任何公共网关访问文件。你还可以创建非公共网关,默认情况下使其成为可写(只读),并实现授权方案,以便以编程方式访问IPFS网络

重要的是要了解IPFS不是一种服务,其他节点将存储你的内容。如果你的内容不受欢迎,如果他们没有固定哈希(他们不想租用磁盘空间),垃圾收集器会将其从其他节点中删除。只要网络上至少有一个对等体确实关心你的文件并且有兴趣存储它们,网络上的其他节点就可以轻松获取该文件。即使你的文件从网络中消失,也可以在以后再次添加,除非其内容发生更改,否则其地址(哈希)将相同。

IPFS和以太坊智能合约

尽管以太坊协议没有提供任何连接到IPFS的本地方式,但我们可以回到像Oraclize这样的离线解决方案来解决这个问题。Oraclize允许使用各种数据提供智能合约。其中一个可用的数据源是URL。我们可以使用公共网关从IPFS上的JSON文件中读取。依靠单个网关会很单薄。我们将要使用的另一个数据源是IPFS。通过使用JSON解析器(它是查询的一部分)读取Oraclize智能合约,我们可以在JSON文档中提取特定字段。

oraclize_query("IPFS", "json(Qmd4PvCKbFbbB8krxajCSeHdLXQamdt7yFxFxzTbedwiYM).title"));

如果Oraclize可以在20秒内获取文件,则可以预期获得异步请求。如果使用连接良好的节点上传文件,则不需要关注超时。我们的EC2(欧盟法兰克福)实例连接到大约750个同行。通过公共网关或本地运行守护进程获取文件几乎是即时的。响应是异步的,oraclize_query调用返回查询id(bytes32)。你可以将其作为来自Oraclize的数据的标识符。

function __callback(bytes32 _queryId, string _data) public {  require(msg.sender == oraclize_cbAddress());  process_data(_data);}

出于安全原因,我们希望确保只允许Oraclize调用__callback函数。

你可以在GitHub上找到博客示例的完整代码库:tooploox/ipfs-eth-database

性能和实施

最初,我很担心性能表现。它是否可以像集中服务发送响应一样快速地获取IPFS上托管的JSON文件?结果令我很惊喜。

$ wrk -d10s Https://ipfs.io/ipfs/Qmd4PvCKbFbbB8krxajCSeHdLXQamdt7yFxFxzTbedwiYMRunning 10s test @ https://ipfs.io/ipfs/Qmd4PvCKbFbbB8krxajCSeHdLXQamdt7yFxFxzTbedwiYM  2 threads and 10 connections  Thread Stats Avg Stdev Max +/- Stdev    Latency 59.18ms 24.36ms 307.93ms 94.73%    Req/Sec 86.34 15.48 101.00 85.57%  1695 requests in 10.05s, 1.38MB readRequests/sec: 168.72Transfer/sec: 140.70KB

在我们审查博客时,作者必须在智能合约上调用addPost时仅输入IPFS哈希值。我们使用IPFS和Oraclize从文件中读取标题,以使用以太坊事件存储它。我们不需要为其他智能合约保留标题,因此使用事件对于我们的用例来说已经足够了。这可能不是最具开创性的例子,但很好地展示了如何优化低交易费用。

pragma solidity 0.4.24;import "openzeppelin-solidity/contracts/ownership/Ownable.sol";import "./lib/usinGoraclize.sol";import "./lib/strings.sol";contract Blog is usingOraclize, Ownable {  using strings for *;  mapping(address => string[]) public hashesByAuthor;  mapping(bytes32 => string) public hashByQueryId;  mapping(bytes32 => address) public authorByHash;  event PostAdded(address indexed author, string hash, uint timestamp, string title);  event PostSubmitted(address indexed author, string hash, bytes32 queryId);  uint private gasLimit;  constructor(uint _gasPrice, uint _gasLimit) public {    setCustomOraclizeGasPrice(_gasPrice);    setCustomOraclizeGasLimit(_gasLimit);  }  function getPrice(string _source) public view returns (uint) {    return oraclize_getPrice(_source);  }  function setCustomOraclizeGasPrice(uint _gasPrice) public onlyOwner {    oraclize_setCustomGasPrice(_gasPrice);  }  function setCustomOraclizeGasLimit(uint _gasLimit) public onlyOwner {    gasLimit = _gasLimit;  }  function withdraw() public onlyOwner {    owner.transfer(address(this).balance);  }  function __callback(bytes32 _queryId, string _title) public {    require(msg.sender == oraclize_cbAddress());    require(bytes(hashByQueryId[_queryId]).length != 0);    string memory hash = hashByQueryId[_queryId];    address author = authorByHash[keccak256(bytes(hash))];    hashesByAuthor[author].push(hash);    emit PostAdded(author, hash, now, _title);  }  function addPost(string _hash) public payable returns (bool) {    require(authorByHash[keccak256(bytes(_hash))] == address(0), "This post already exists");    require(msg.value >= oraclize_getPrice("IPFS"), "The fee is too low");    bytes32 queryId = oraclize_query("IPFS", "json(".toSlice().concat(_hash.toSlice()).toSlice().concat(").title".toSlice()), gasLimit);    authorByHash[keccak256(bytes(_hash))] = msg.sender;    hashByQueryId[queryId] = _hash;    emit PostSubmitted(msg.sender, _hash, queryId);    return true;  }  function getPriceOfAddingPost() public view returns (uint) {    return oraclize_getPrice("IPFS");  }}

前端使用WEB3读取事件,并为给定作者构建所有博客帖子的列表。

降价商品的内容也存储在IPFS上。它允许保留添加新博客帖子的固定费用。我们使用一系列公共IPFS,从我们自己开始。这有意义,尤其是当您从同一节点上传文件时。如果您决定以写入模式运行网关,则还可以以编程方式固定文件(默认情况下,它是只读的)。我们还允许用户指定自己的网关。 如果用户安装了IPFS CompaNIOn,他可以利用自己的节点运行。

BlogEvents.getPastEvents("PostAdded", { fromBlock: 0, filter: { author } }).then(events => {  this.setState({ addedPosts: events.map(e => e.returnValues) });});// ...getPost(gatewayIndex = 0) {  this.fetchPostFromIpfs(gateways[gatewayIndex])    .catch(() => this.retry(gatewayIndex))}

“如何将JSON文件存储在IPFS上”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 如何将JSON文件存储在IPFS上

本文链接: https://www.lsjlt.com/news/230972.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何将JSON文件存储在IPFS上
    本篇内容介绍了“如何将JSON文件存储在IPFS上”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如何将JSON文件存储在IPFS上,并使用O...
    99+
    2023-06-02
  • ASP 文件 path 存储:如何将文件路径存储在 ASP 中?
    在 ASP 程序中,我们经常需要存储文件路径,例如图片、文档等等。如何将文件路径存储在 ASP 中,是一个非常重要的问题。在本文中,我们将介绍几种方法来实现文件路径存储。 一、使用 Application 对象 Application 对...
    99+
    2023-07-07
    文件 path 存储
  • 如何将Go语言对象文件存储在云端?
    随着云计算的不断发展,越来越多的应用程序开始向云端转移。在这个过程中,如何将Go语言对象文件存储在云端成为了一个需要解决的问题。本文将介绍如何使用AWS S3来存储Go语言对象文件,并提供相应的演示代码。 AWS S3是Amazon We...
    99+
    2023-09-30
    对象 文件 存储
  • ASP 文件 path 存储:如何在 ASP 中存储文件路径?
    在 ASP 开发中,我们经常需要存储文件路径。这些路径可能是用于文件上传、文件下载、文件保存等操作。如何在 ASP 中存储文件路径呢?本文将为您介绍 ASP 文件 path 存储的几种方式。 一、使用 Application 对象 App...
    99+
    2023-07-07
    文件 path 存储
  • PHP 文件存储:您是否知道如何在服务器上安全地存储文件?
    在现代互联网时代,文件存储是任何网站或应用程序的基本需求之一。无论是用户上传的文件、应用程序生成的文件还是网站内容的静态文件,都需要被安全地存储在服务器上。但是,安全地存储文件并不是一件容易的事情。在本篇文章中,我们将探讨如何在服务器上安...
    99+
    2023-09-05
    文件 存储 load
  • 如何将文件存储到HTTP容器中?
    在开发Web应用程序时,我们通常需要将一些文件存储到HTTP容器中,以便程序可以访问这些文件。这些文件可以是静态文件,如图像、JavaScript和CSS文件,也可以是动态生成的内容,如用户上传的文件。在本文中,我们将探讨如何将文件存储到...
    99+
    2023-08-03
    http 容器 文件
  • 如何将文件从AWS S3存储桶复制到Azure Blob存储
    php小编苹果将为您介绍如何将文件从AWS S3存储桶复制到Azure Blob存储的方法。在云计算时代,跨云平台的数据迁移变得越来越常见。AWS S3和Azure Blob存储都是两...
    99+
    2024-02-13
  • ASP 文件 path 存储:如何在 ASP 中获取存储的文件路径?
    ASP(Active Server Pages)是一种基于服务器端的脚本语言,常用于创建动态网页和 Web 应用程序。在 ASP 中,我们经常需要读取和写入文件,因此文件路径的存储和获取是非常重要的一环。本文将介绍在 ASP 中如何获取存...
    99+
    2023-07-07
    文件 path 存储
  • ASP 文件 path 存储:如何在 ASP 中查找存储的文件路径?
    在 ASP 中,我们经常需要读取和操作文件。这时候,我们就需要知道文件的路径。ASP 提供了多种方法来查找文件路径,其中一种方法是使用 path 存储。 path 存储是一种将文件路径保存在变量中的方法。通过使用 path 存储,我们可以...
    99+
    2023-07-07
    文件 path 存储
  • ASP 文件 path 存储:如何在 ASP 中备份存储的文件路径?
    在ASP应用程序中,我们经常需要存储文件路径。在某些情况下,我们需要在应用程序中备份这些文件路径。这可以确保我们在应用程序中出现故障时,不会失去重要数据。在本文中,我们将介绍如何在ASP中备份存储的文件路径。 在ASP中,我们可以使用Fi...
    99+
    2023-07-07
    文件 path 存储
  • ASP 文件 path 存储:如何在 ASP 中恢复存储的文件路径?
    在 ASP 中,我们通常会存储一些文件路径,比如上传的文件路径、图片路径等等。而在某些情况下,我们需要恢复这些存储的文件路径,比如在页面展示图片或者下载文件时,我们需要使用这些路径来访问相应的文件。那么在 ASP 中,如何恢复存储的文件路...
    99+
    2023-07-07
    文件 path 存储
  • ASP 文件 path 存储:如何在 ASP 中编辑存储的文件路径?
    在 ASP 中,存储文件路径是非常重要的。ASP 文件路径存储是指将文件路径存储到 ASP 程序中,以便程序能够轻松地访问文件。存储文件路径的方法有很多种,包括使用数据库、文本文件或直接将路径存储在 ASP 程序中。本文将介绍如何在 AS...
    99+
    2023-07-07
    文件 path 存储
  • ASP 文件 path 存储:如何在 ASP 中删除存储的文件路径?
    在 ASP 中,我们经常需要处理文件的操作,比如读取、上传、删除等等。其中,文件的路径信息是非常重要的一部分,因为它决定了我们对文件进行操作的具体位置。ASP 提供了一些方法来处理文件路径信息,其中包括存储和删除文件路径。本文将介绍如何在...
    99+
    2023-07-07
    文件 path 存储
  • python如何读取和存储dict()与.json格式文件
    目录读取和存储dict()与.json格式文件读取.json格式文件并将数据保存到字典中保存字典数据到.json文件中在命令行中输出字典时的乱码问题将字符串数据转化为字典数据将dic...
    99+
    2024-04-02
  • java如何读取nas存储上的文件
    在Java中,可以使用Java的文件输入流来读取NAS存储上的文件。以下是一个示例代码: import java.io.Buffer...
    99+
    2024-04-23
    java
  • 如何在Linux终端上打印JSON文件
    这篇文章主要讲解了“如何在Linux终端上打印JSON文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何在Linux终端上打印JSON文件”吧!JSON 文件非常棒,因为它们以...
    99+
    2023-06-15
  • 怎么将MAC的文件存储至NAS网络存储
    怎么将MAC的文件存储至NAS网络存储,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Mac OS电脑用户可以使用TNAS PC桌面客户端来管理TNAS的文件,操...
    99+
    2023-06-04
  • c语言怎么将数据储存在文件中
    在C语言中,可以使用文件操作函数来将数据存储在文件中。以下是一个简单的示例:```c#include int main() {FIL...
    99+
    2023-08-15
    c语言
  • ASP 文件 path 存储:如何使用 ASP 存储文件路径?
    在 ASP 中,path 存储是一个非常重要的概念,尤其是在存储文件路径时。在本篇文章中,我们将介绍 ASP 中如何使用 path 存储来存储文件路径,并演示如何在代码中使用它。 一、什么是 path 存储? 在 ASP 中,path 存...
    99+
    2023-07-07
    文件 path 存储
  • 如何在阿里云服务器上设置文件存储位置
    阿里云服务器是阿里云提供的基础计算服务,用户可以通过阿里云服务器来运行应用程序和服务。在使用阿里云服务器的过程中,用户可能会遇到文件存储的问题。如何在阿里云服务器上设置文件存储位置呢?本文将详细介绍如何操作。 在阿里云服务器上设置文件存储位...
    99+
    2023-11-06
    阿里 器上 位置
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作