Wolfram Computation Meets Knowledge

Eine Schnittstelle zu einheitlichen dezentralen Diensten mit IPFS, Filecoin und der Wolfram Language

Using IPFS, Filecoin and the Wolfram Language to Build a Unified Decentralized Services Interface

Im Rahmen von Wolframs Zielsetzung, eine einheitliche Blockchain-Schnittstelle zu schaffen, arbeitet Wolfram Blockchain Labs (WBL) daran, Entwicklerinnen und Entwicklern direkten Zugriff auf eine Reihe von Blockchains und dezentralisierten Technologien zu ermöglichen. Heute freuen wir uns, eine Zusammenarbeit mit IPFS und Filecoin bekanntzugeben, die zu den Kernbausteinen des Web3 (oder des “dezentralen” Internets) gehören. Zusätzlich zur Integration von IPFS und der Filecoin-Blockchain in der Wolfram Language ermöglicht diese einzigartige Zusammenarbeit Entwicklerinnen und Entwicklern die Speicherung ihrer Arbeiten, die Nutzung von Peer-to-Peer-Netzwerken und anderen Protokollen für ihre bestehenden und neuen dezentralen Anwendungen. All das kann mit Wolfram-Technologien wie unserer Wolfram Language, der Wolfram Cloud und Wolfram Notebooks gemacht werden.

Die Kombination dieser Komponenten eröffnet neue Möglichkeiten, wie Technologie in der Wissenschaft, im Bildungsbereich, in der Finanz, in Unternehmen und mehr eingesetzt werden kann. Mit unseren Partnerinnen und Partnern von der Max Planck Digital Library haben wir bereits ein tolles Beispiel für Forscherinnen und Forscher entwickelt (davon mehr in diesem Blogpost) und wir rechnen mit weiteren wegweisenden Anwendungen in der Zukunft. Aber sehen wir uns zuerst die Details an.

IPFS, Filecoin und libp2p: Das Grundgerüst des Web3

IPFS, Filecoin und libp2p haben mit wichtigen Technologien maßgeblich zur Web3-Bewegung zur Dezentralisierung des Internets beigetragen.

Filecoin ergänzt IPFS als quelloffener Cloud-Storage-Marktplatz, Protokoll und Kryptowährung. Filecoin bietet eine langfristige Dateispeicherung durch eine leistungsstarke und dynamische dezentrale Cloud-Speicherlösung. Die Teilnehmerinnen und Teilnehmer des Filecoin-Blockchain-Netzwerks können ihren offenen Speicherplatz gegen Client-Speichergebühren und finanzielle Anreize “mieten” und “vermieten”, wodurch die langfristige Speicherkapazität des Netzwerks gewährleistet wird.

Die Liste der nützlichen Protokolle ist lang: libp2p zur Erstellung Peer-to-Peer-Netzwerk-basierter Anwendungen, Multiformats für zukunftssichere Systeme mit selbstbeschreibenden Dateiformaten und das IPLD-Ökosystem aus Formaten und Datenstrukturen zur Erstellung komplett dezentraler Anwendungen. Wolfram veröffentlicht laufend Updates zu weiteren integrierten Technologien, an denen unsere Entwicklerinnen und Entwickler arbeiten.

Am besten lässt sich die Einfachheit und Bedeutung der Integration des IPFS-Ökosystems in die Leistungsfähigkeit der Wolfram Language anhand eines Beispiels veranschaulichen.

Stellen Sie eine Datei auf IPFS:

ExternalStorageUpload
&#10005

ExternalStorageUpload["ExampleData/spikey2.png", 
 ExternalStorageBase -> "IPFS"]

Laden Sie eine Datei von IPFS herunter:

file = ExternalStorageDownload
&#10005

file = ExternalStorageDownload[
ExternalStorageObject[
  "QmXpif6oKinoP8CwPMCJPqoJNwvEfzbH1cJg6yZkBLJwKu", 
Association[
   "ExternalStorageBase" -> "IPFS", 
    "FileHash" -> "c9ccd63d95043f5d639a76b932dba6c9"]]]

Importieren Sie die Datei:

Import
&#10005

Import[file]

bloxbergs Certify & Verify in der Anwendung

Daten vorbereiten und auf IPFS stellen

In diesem Beispiel nehmen wir eine PDF-Datei von Satoshi Nakamotos Whitepaper “Bitcoin: A Peer-to-Peer Electronic Cash System” und bereiten sie vor, um sie an den bloxberg Certify-Smart Contract zu senden. Außerdem erweitern wir die Funktionalität, indem wir die Datei ins IPFS-Netzwerk stellen und eine JSON-Metadaten-Datei erstellen, die ebenfalls ins IPFS gestellt wird und die CID der PDF-Datei enthält.

Berechnen Sie den Hash-Wert des Forschungsdokuments:

filePath = FileNameJoin
&#10005

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

fileHash = FileHash
&#10005

fileHash = FileHash[filePath, "SHA256", "HexString"]

Versehen Sie die Daten mit dem Unix-Zeitstempel:

timestamp = ToString
&#10005

timestamp = ToString[UnixTime[Now]];

Stellen Sie die Forschungsdatei auf IPFS:

eso = ExternalStorageUpload
&#10005

eso = ExternalStorageUpload[filePath, ExternalStorageBase -> "IPFS"]

Erstellen Sie die Metadaten zum Dokument und Autor:

metadata = <|
   "Title" -> "Bitcoin: A Peer-to-Peer Electronic Cash System", 
   "Author" -> "Satoshi Nakamoto", "Affiliation" -> "bitcoin.org", 
   "FileCID" -> eso
&#10005

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

metadata // Dataset
&#10005

metadata // Dataset

metadataFilePath = 
 Export
&#10005

metadataFilePath = 
 Export[FileNameJoin[{NotebookDirectory[], "metadata.json"}], 
  metadata, "JSON"]

Stellen Sie die Metadaten ins IPFS:

metadataESO = 
 ExternalStorageUpload
&#10005

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

metadataCID = metadataESO
&#10005

metadataCID = metadataESO["CID"]

Daten zur Zertifizierung als “smarter Vertrag” auf das bloxberg-Netzwerk laden

In diesem Abschnitt werden wir die Transaktion mit allen erforderlichen Daten erstellen und an die bloxberg-Blockchain schicken, um sie durch einen Certify-Smart Contract zertifizieren zu lassen. Die folgenden Private Keys werden zum Verständnis der Leser angezeigt.

Initialisieren Sie einige Variablen für die Transaktion:

key = PrivateKey
&#10005

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
&#10005

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

txCount = 
 BlockchainAddressData
&#10005

txCount = 
 BlockchainAddressData[address, "TransactionCount", 
  BlockchainBase -> "bloxberg"]

Bereiten Sie die Transaktion vor:

tx = BlockchainTransaction
&#10005

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"|>]

Signieren Sie die Transaktion:

txSigned = BlockchainTransactionSign
&#10005

txSigned = BlockchainTransactionSign[tx, key]

Senden Sie die Transaktion:

txSubmitted = BlockchainTransactionSubmit
&#10005

txSubmitted = BlockchainTransactionSubmit[txSigned]

txid = txSubmitted
&#10005

txid = txSubmitted["TransactionID"]

Überprüfen Sie die Transaktion:

Dataset
&#10005

Dataset[BlockchainTransactionData[txid, BlockchainBase -> "bloxberg"],
  HiddenItems -> {"EventList" -> True}, ItemSize -> {50}]

Verifizierte Daten in der bloxberg-Blockchain überprüfen

In diesem Abschnitt rufen wir den bloxberg Verify-Smart Contract auf, um die Daten abzurufen und mit Hilfe der JSON-Metadaten die Original-PDF-Datei aus dem IPFS abzurufen.

Rufen Sie die Verifizierungsdaten ab:

eventsList = 
  BlockchainTransactionData
&#10005

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

verifyData = 
  BlockchainContractValue
&#10005

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

Dataset
&#10005

Dataset[Association["StringCheckSum" -> verifyData[[1]], 
  "IPFS" -> verifyData[[2]], "ResearchID" -> verifyData[[3]], 
  "Timestamp" -> FromUnixTime[ToExpression[verifyData[[4]]]], 
  "DataExists" -> verifyData[[5]]]]

Rufen Sie die IPFS-Metadaten-CID ab:

ipfsCID = verifyData
&#10005

ipfsCID = verifyData[[2]]

Laden Sie die Metadaten von IPFS herunter:

verifyMetadataFile = 
 ExternalStorageDownload
&#10005

verifyMetadataFile = 
 ExternalStorageDownload[ipfsCID, ExternalStorageBase -> "IPFS"]

Importieren Sie die Metadaten:

verifyMetadata = Import
&#10005

verifyMetadata = Import[verifyMetadataFile, "RawJSON"];

Dataset
&#10005

Dataset[verifyMetadata]

Downloaden Sie das Forschungsdokument:

ExternalStorageDownload
&#10005

ExternalStorageDownload[verifyMetadata["FileCID"]]

Zukunftsweisend für das Web3

Wir glauben, dass die nächste Phase in der Entwicklung des Internets eine Bewegung in Richtung Dezentralisierung von Webseiten und Diensten ist. Die Integration von IPFS und Filecoin in der Wolfram Language erweitert das Spektrum an Anwendungen, Diensten und Analysen, die man unabhängig von der eigenen Programmiererfahrung erstellen kann. Wir planen, unsere Zusammenarbeit mit IPFS zu vertiefen, um eine Integration der Filecoin-Blockchain, die Verwendung von Filecoin für die Speicherung, die symbolische Manipulation von Daten von IPFS und Filecoin, Analysebeispiele, Anwendungen für den Unterricht und mehr zu ermöglichen.

Wir sind überzeugt, dass es in Zukunft Beispiele in verschiedenen Bereichen und für verschiedene Anwenderinnen und Anwender geben wird:

  • Datenanalyse: Daten von Filecoin und IPFS abrufen und damit Analysen durchführen, alles in der Wolfram Language
  • NFTs: NFTs mit Wolfram Notebooks, der Wolfram Language und Verbindungen zu Blockchains erstellen, downloaden und verwenden
  • Hochschulen: Daten für eine offene und transparente Nutzung speichern und Forschungsergebnisse gemeinsam nutzen und bearbeiten
  • Unternehmen: In Zusammenarbeit mit Wolfram Technical Consulting innovative Prototypen entwickeln und Analysen durchführen
  • Entwickler: Zukunftsweisende Anwendungen mit Rechenkapazitäten entwickeln
  • Demnächst stellen wir die Einsatzmöglichkeiten und Vorteile von IPFS und Blockchains mit einem spannenden, kurzweiligen und KOSTENLOSEN Beispiel zu NFTs vor!

Kontaktieren Sie Wolfram Blockchain Labs, um mehr darüber zu erfahren, wie Sie Ihre Blockchain in die Wolfram Language integrieren können. Kontaktieren Sie Wolfram Technical Consulting, um ein Blockchain-Projekt zu starten.

Comments

Join the discussion

!Please enter your comment (at least 5 characters).

!Please enter your name.

!Please enter a valid email address.