从本地开发到全球部署,Fleek 都是构建基于 IPFS 的快速现代网站所需的一切,欢迎使用新的互联网。
我们新的 Fleek Storage 产品通过简单的拖放界面将网络资产存储在 IPFS 上,并获得了令人赞叹的积极反馈!
但是您知道我们的 SDK 可以通过编程方式上传文件到 Web 吗?它的许多用例之一是用于存储 NFT(不可替代令牌)资产。
在接下来的几分钟中,我们将通过 NFT 资产存储了解 Fleek Storage SDK。
NFT 代表不可替代令牌,它们通常用于将数字艺术的所有权授予用户。令牌可以通过 ERC-721 接口以分散方式进行传输。链上元数据可跟踪其他信息,例如名称,描述,甚至是数字艺术中的图像 URL。
问题就在这里。
使用散式 NFT 中的数字资产永生不衰,但通过链接到集中式服务器的 URL 保存到这些资产的链接既矛盾又自欺欺人。
Pinata 的精彩演讲进一步描述了这个问题。
解决方案?将资产保存在 IPFS 中,并通过 IPFS 哈希(也称为CID)进行标识。
哈希确保标识符永远不会改变,并且 IPFS 上的托管确保文件存储具有抗审查性,并且与产生 NFT 的值保持一致。
实际情况如何?让我们看一下 Fleek Storage 可以做什么的演示。
加密博物馆是完全分散的 dapp。由于我们的Fleek网站产品,它托管在 IPFS 上,但更重要的是,它使用 Fleek Storage SDK 允许用户将其数字作品的副本上载到 IPFS。
亲自看一下演示!
Dapp 在 Ropsten 测试网络上运行,因此您将需要 Metamask 和一些免费的 Ropsten Ether。如果您需要上传一些艺术品,请查看此随机艺术品生成器。
上传到加密博物馆的 ERC-721 资产存储在 IPFS 中,并通过不可变的 IPFS 哈希进行标识
让我们快速了解引擎盖下正在发生的事情。
当用户单击 Create NFT 按钮时,由于我们的SDK,文件被上传到 Fleek Storage。然后,Fleek 返回 IPFS 哈希或 CID,该哈希用于使用令牌元数据中的 CID 铸造新令牌。
该数据(包括所有权和CID的注册表)位于以太坊区块链上。
您可以在下面查阅 ERC-721 令牌的智能合约代码,并查看铸造和 CID 设置的工作方式。该合同基于 OpenZeppelin 库。
pragma solidity >=0.5.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract CryptoMuseum is ERC721 {
constructor() ERC721("CryptoMuseum", "CM") public {
}
mapping(uint256 => string) private _CIDS;
function CID(uint256 tokenId) public view returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: CID query for nonexistent token");
string memory _CID = _CIDS[tokenId];
return _CID;
}
function _setTokenCID(uint256 tokenId, string memory _CID) internal virtual {
require(_exists(tokenId), "ERC721Metadata: CID set of nonexistent token");
_CIDS[tokenId] = _CID;
}
function mint(string memory _CID) public {
uint256 _newId = totalSupply() + 1;
_safeMint(msg.sender, _newId);
_setTokenCID(_newId, _CID);
}
}
dapp“收集”部分搜索属于该用户的所有令牌,然后读取包含 IPFS 哈希的元数据并显示作品。
NFT 向前发展的一个很好的解决方案是使用 CID 和 CID 本身作为单独的元数据存储 URL 到 IPFS 网关。该 URL 将允许平滑过渡到仅 CID 的分散式生态系统,而仅存储 CID 的实践变得更加普遍。
最终目标是让 CID 成为 NFT 代币基础资产的唯一标识符。
Fleek Storage SDK 提供了类似于 Amazon S3 的界面,可用于与 IPFS 上的文件进行交互。
让我们看看它如何在 Crypto Museum dapp 中以编程方式工作。
// We initialize the S3 client
const s3 = new AWS.S3({
apiVersion: '2006-03-01',
accessKeyId: <access-key-id>,
secretAccessKey: <secret-access-key>,
endpoint: 'https://storageapi.fleek.co',
region: 'us-east-1',
s3ForcePathStyle: true
});
// We defined the params
// including the bucket which can be created either
// programatically or on the Fleek Web app
const params = {
Bucket: bucket,
Key: `nft/${newTokenId}-${timestamp}`,
ContentType: artwork.type,
// Body contains the uploaded file
Body: artwork,
ACL: 'public-read',
};
const request = s3.putObject(params);
request.on('httpHeaders', (statusCode, headers) => {
const ipfsHash = headers['x-fleek-ipfs-hash'];
// Do stuff with the IPFS hash. E.G.: Create an Ethereum Transaction...
}).send();
上面的代码是从 Crypto Museum 代码中复制粘贴的。就这么简单。
AWS s3 SDK 和 fleek storage 的文档提供了有关如何使用SDK的更多信息。
Fleek Storage 是在 IPFS 中存储资产的绝佳解决方案。它通过识别通过 IPFS 散列表示的文件,解决了不可替代令牌的持久问题。
借助 IPFS,可以使 NFT 变得更好!
End
非常感谢您对 IPFS&Filecoin 项目的持续支持。我们很高兴继续与您一起,为人类信息建立一个强大的,去中心化和高效的基础。
FilCloud 帮你迅速了解 IPFS 领域的热点技术和应用
公众号:filcloud