用 IPFS、Filecoin 和 Wolfram 语言构建统一的去中心化服务接口
作为 Wolfram 的统一区块链接口的核心目标的一部分,Wolfram Blockchain Labs (WBL) 致力于为开发人员提供对于一系列区块链和去中心化技术的直接 Wolfram 语言访问。今天,我们很激动的宣布与 IPFS 和 Filecoin 合作,这是 Web3(或去中心化网页) 部分核心区块的构建。除 Wolfram 语言与 IPFS 和 Filecoin 区块链的集成外,该独特的协作还让开发员可利用存储、对等网络和其他协议来补充其现有应用程序或新的去中心化应用程序,这些都来自于 Wolfram 语言、Wolfram Cloud 和 Wolfram 笔记本等Wolfram 技术。
将这些部分组合在一起,从而为研究、教育、商业、金融以及其他领域提供新颖的计算可能性。 与我们在马克斯·普朗克数字图书馆的合作伙伴一起,我们已经为研究人员开发了一个着眼于未来可能性的优秀案例(您将在此文章中看到它),接下来让我们一起进行深入了解。
IPFS、Filecoin 和 libp2p 对 Web3 运用重要技术推动去中心化网络产生了基础性影响。
IPFS、Filecoin 和 libp2p: Web3 基础技术
Filecoin 与 IPFS 互补,是一个开源的云存储市场、协议和加密货币。 它通过功能强大且动态的去中心化云存储解决方案提供长期文件存储。 Filecoin 区块链网络上的利益相关者可以“租用”其开放的存储空间,以换取客户端存储费和区块奖励,从而使网络的长期存储能力得以延续。
常用的协议清单如下:用于构建对等网络应用的 libp2p; 用于具有自我描述文件格式面向未来系统的 Multiformats;以及用于构建完全去中心化应用的 IPLD 生态系统格式和数据结构。 随着我们的开发人员不断构建的集成,Wolfram 将带来更多的更新。
体现 IPFS 生态系统和 Wolfram 语言强大集成的简便性和重要性的最佳方法是使用真实世界范例。
将文件上传到 IPFS:

ExternalStorageUpload["ExampleData/spikey2.png", ExternalStorageBase -> "IPFS"]
从 IPFS 下载一个文件:

file = ExternalStorageDownload[ ExternalStorageObject[ "QmXpif6oKinoP8CwPMCJPqoJNwvEfzbH1cJg6yZkBLJwKu", Association[ "ExternalStorageBase" -> "IPFS", "FileHash" -> "c9ccd63d95043f5d639a76b932dba6c9"]]]
导入文件:

Import[file]
bloxberg Certify & Verify 使用案例
准备数据并上传到 IPFS
在此示例中,我们将获取中本聪(Satoshi Nakamoto)的白皮书《比特币:一种点对点的电子现金系统》的 PDF 文件,并准备将其发送给 bloxberg Certify 智能合约。 此外,我们还对功能进行了扩展,将文件上传到 IPFS ,并创建 JSON 元数据文件(包含 PDF 文件的 CID)同时上传到 IPFS 。
哈希研究文档:

filePath = FileNameJoin[{NotebookDirectory[], "bitcoin.pdf"}]

fileHash = FileHash[filePath, "SHA256", "HexString"]
获取 Unix 时间戳:

timestamp = ToString[UnixTime[Now]];
讲研究文件上传到 IPFS:

eso = ExternalStorageUpload[filePath, ExternalStorageBase -> "IPFS"]
创建文档和作者元数据:

metadata = <| "Title" -> "Bitcoin: A Peer-to-Peer Electronic Cash System", "Author" -> "Satoshi Nakamoto", "Affiliation" -> "bitcoin.org", "FileCID" -> eso["CID"] |>;

metadata // Dataset

metadataFilePath = Export[FileNameJoin[{NotebookDirectory[], "metadata.json"}], metadata, "JSON"]
将元数据上传到 IPFS:

metadataESO = ExternalStorageUpload[metadataFilePath, ExternalStorageBase -> "IPFS"]

metadataCID = metadataESO["CID"]
将数据提交给 bloxberg Certify 智能合约
在该部分中,我们将使用所有必需的数据创建交易,并将其提交给 bloxberg 区块链,以使用 Certify 智能合约对其进行认证。以下发布私钥为帮助读者理解。以下发布的私钥供读者更好理解。
初始化交易的部分变量:

key = PrivateKey[ Association[ "Type" -> "EllipticCurve", "CurveName" -> "secp256k1", "PublicCurvePoint" -> { 27112075690151519677987005437167591271987576467999908152870704903\ 750742697008, 3534019055898665520072520949331176238451788939602461575265997766\ 3077697880714}, "PrivateMultiplier" -> 8676843423833923876056101813405014181278722\ 7642250635023819795985067687832300, "Compressed" -> False, "PublicByteArray" -> ByteArray[{4, 59, 240, 228, 27, 20, 0, 72, 116, 89, 142, 194, 128, 17, 192, 43, 187, 15, 70, 187, 147, 254, 186, 247, 198, 148, 96, 23, 200, 48, 179, 228, 48, 78, 33, 214, 201, 224, 235, 43, 178, 189, 71, 151, 166, 253, 217, 43, 132, 24, 39, 185, 92, 213, 198, 0, 46, 244, 85, 165, 18, 11, 158, 130, 138}], "PrivateByteArray" -> ByteArray[{191, 213, 49, 131, 159, 167, 125, 243, 62, 158, 234, 92, 248, 2, 42, 136, 221, 127, 168, 24, 172, 124, 117, 37, 61, 155, 34, 38, 150, 88, 106, 236}]]];

address = BlockchainKeyEncode[key, "Address", BlockchainBase -> "bloxberg"]

txCount = BlockchainAddressData[address, "TransactionCount", BlockchainBase -> "bloxberg"]
准备交易:

tx = BlockchainTransaction[<|"TransactionCount" -> txCount, "Address" -> "E5a9654C7e190701016EBf18206020bf16D8Beab", "FunctionCall" -> <| "Function" -> Typed["createData", {"string", "bool", "string", "string"} -> {"bytes32"}], "Inputs" -> {fileHash, True, metadataCID, timestamp}|>, "GasPrice" -> Quantity[1, "Brox"], "BlockchainBase" -> "bloxberg"|>]
签署交易:

txSigned = BlockchainTransactionSign[tx, key]
提交交易:

txSubmitted = BlockchainTransactionSubmit[txSigned]

txid = txSubmitted["TransactionID"]
检查交易:

Dataset[BlockchainTransactionData[txid, BlockchainBase -> "bloxberg"], HiddenItems -> {"EventList" -> True}, ItemSize -> {50}]
验证 bloxberg 区块链中的认证数据
在这一部分中,我们调用 bloxberg Verify 智能合约以获取数据,并通过使用 JSON 元数据,从 IPFS 获取原始 PDF 文件。
获取验证数据:

eventsList = BlockchainTransactionData[txid, "EventList", BlockchainBase -> "Bloxberg"];

verifyData = BlockchainContractValue[ eventsList[[1]]["Address"], <| "Function" -> Typed["retrieveResearchData", {"bytes32"} -> {"string", "string", "bytes32", "string", "bool"}], "Inputs" -> eventsList[[1]]["Data"]|>, BlockchainBase -> "Bloxberg"];

Dataset[Association["StringCheckSum" -> verifyData[[1]], "IPFS" -> verifyData[[2]], "ResearchID" -> verifyData[[3]], "Timestamp" -> FromUnixTime[ToExpression[verifyData[[4]]]], "DataExists" -> verifyData[[5]]]]
获取 IPFS 元数据 CID:

ipfsCID = verifyData[[2]]
从 IPFS 下载元数据:

verifyMetadataFile = ExternalStorageDownload[ipfsCID, ExternalStorageBase -> "IPFS"]
导入元数据:

verifyMetadata = Import[verifyMetadataFile, "RawJSON"];

Dataset[verifyMetadata]
下载研究文档:

ExternalStorageDownload[verifyMetadata["FileCID"]]
继续期待: 开拓 Web3
我们相信互联网发展的下一阶段正在朝着去中心化网站和服务发展。Wolfram 语言与 IPFS 和 Filecoin 的集成将扩大人们可以创建的应用程序、服务和分析范围,无论其编程经验如何。我们计划扩大与 IPFS 的合作,包括 Filecoin 区块链的集成、使用 Filecoin 进行存储、对来自 IPFS 和 Filecoin 的数据进行符号处理、分析范例、教育功能等。
未来,我们希望会看到更多不同领域和用户示例:
- 数据分析:通过 Wolfram 语言从 Filecoin 和 IPFS 中获取数据并对文件进行分析
- NFTs:使用 Wolfram 笔记本、Wolfram 语言以及与区块链的连接来创建、下载并使用 NFT
- 学术界:存储数据以供开放和可理解的使用,以及精确的研究共享
- 商业:与 Wolfram 技术咨询合作,探索高级的原型和研究
- 开发人员:使用计算功能构建高级应用程序
我们正处于体现 IPFS 和区块链的实用性的高光时刻,通过围绕 NFT 这一免费范例,让其更加有趣且令人兴奋!
请与 Wolfram Blockchain Labs 联系了解如何将您的区块链集成到 Wolfram 语言中。请与 Wolfram 技术咨询联系来启动您的区块链项目。 |
Comments