![](/img/trans.png)
[英]Private ethereum blockchain mining on a Raspberry Pi - is it possible?
[英]Is it possible to store images on the Ethereum blockchain?
我正在加紧学习 Solidity,并有一些想法。 目前我很好奇文件/图像是否可以放在区块链上。 我在想另一种方法是一些混合方法,其中一些东西在区块链上,一些东西在更传统的文件存储中,并使用地址引用来抓取它。 我预见的一个问题是文件上传的汽油价格。
是否可以在以太坊区块链上存储图像?
绝对可能!
你应该这样做吗? 几乎肯定不是!
我预见的一个问题是文件上传的汽油价格。
每千字节的成本不到2美元。
我不能告诉你这是否对你的应用来说太昂贵了,但是你也应该考虑到Gas和Ether的价格随着时间的推移而变化很大,你应该期望这个数字会明显更高。
注意:我尝试存储 100kb 图像的 +10,000 长 base64 字符串,但它不接受。 但是当我尝试 1kb 图像时,它起作用了。
是的。 这是执行此操作的可靠代码:-
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract ImgStorage {
uint i=0;
mapping(uint => string[]) public base64_images;
function push(string memory base64_img) public {
base64_images[i].push(base64_img);
i++;
}
function returnImage(uint n) public view returns(string[] memory){
return base64_images[n];
}
}
您可以在线将图像转换为 base64,反之亦然。 这是将图像转换为 base64 字符串的 NodeJS 代码:
const imageToBase64 = require('image-to-base64');
const fs=require('fs')
imageToBase64("img/1kb.png")
.then(data => {fs.writeFile('1kb_png.md',data, (err)=>{console.log(err)})})
.catch(err =>console.log(err))
从技术上讲,是的,你可以存储非常小的图像。 但你不应该。
将图像存储在分布式文件存储(例如,Swarm或IPFS)中,并将图像的哈希值存储在链上,如果图像对于可证明未被篡改非常重要。 如果这不重要,那么也许不要把任何东西放在链上。
主要是块的气体限制。 目前,以太坊主网拥有8Mgas的限制。 每个新的32字节存储使用20k气体。 因此,您无法存储总和超过12.8kb的数据,因为它不适合块。
区块链不是为这种用法而设计的(这就是存在Swarm和IPFS等其他项目的原因)。 它会使所有内容变得臃肿并减速,而不会为您提供超过其他文件存储系统的任何好处。 通过类比,您通常也不会将文件存储在SQL数据库中。
我完全赞同@Peter Hall将图像存储在以太坊上太昂贵了。
那么,你可以做什么而不是这个呢?
在链上存储图像是一个有力的NO !
将图像存储在数据库中也不是一个好习惯,我假设你只是指S3 / firebase等文件存储解决方案。 将图像存储在中央服务器上是可以的,但这取决于您想要实现的目标,您可以查看IPFS和Swarm等分散存储解决方案。
以太坊太重而且太昂贵,无法存储图像、视频等大块。 因此,需要一些外部存储来存储更大的对象。 这就是星际文件系统(IPFS)出现的地方。 以太坊 Dapp 可以保存少量数据,而为了保存更多或更大的数据,例如图像、文字、PDF 文件等,我们使用 IPFS。
IPFS 是一种开源协议和网络,旨在创建一种存储和共享数据的点对点方法。 它类似于 Bit Torrent。
如果您想将 PDF、Word 或图像文件上传到 IPFS。
1- 您将 PDF、Word 或图像文件放在您的工作目录中。
2- 您通知 IPFS 添加此文件,这会生成文件的哈希值。 请注意,IPFS 哈希始终以“Qm ....”开头
3- 您的文件在 IPFS 网络上可用。
现在您上传了文件并希望与 Bob 共享该文件。 您将文件的哈希发送给 Bob,Bob 使用该哈希并为该文件调用 IPFS。 该文件现在已在 Bob 的末尾下载。 这里的问题是任何可以访问哈希的人也可以访问该文件。
假设您将文件上传到 IPFS,并且只想与 Bob 共享。
Bob 会向您发送一个公钥。 您将使用 Bob 的公钥加密文件,然后将其上传到 IPFS 网络。
您将文件的哈希值发送给 Bob。 Bob 使用此散列并获取文件。
Bob 使用他用来加密文件的公钥的私钥来解密文件。
在非对称密码术中,公钥由私钥生成,如果您用公钥锁定某物,则唯一可以解锁该事物的密钥是生成给定公钥的私钥。
在区块链上处理文件的更好方法是使用某种文件存储服务,如AWS-S3、IPFS、Swarm 等。
您可以将文件上传到上述文件存储服务器之一并生成 hash 密钥(用于访问文件),并将此密钥保存在区块链中。
使用这种方法的优点是 -
您可以将图像存储在以太坊区块链上,但由于高质量区块链的“区块空间溢价”,它太贵了。
其他更实惠的去中心化存储解决方案包括
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.