Cómo usar IPFS, Filecoin y Wolfram Language para crear una interfaz unificada de servicios descentralizados
Como parte del objetivo central de Wolfram de crear una interfaz unificada de cadena de bloques, Wolfram Blockchain Labs (WBL) trabaja para brindar a los desarrolladores acceso directo un amplio rango de cadenas de bloques y tecnologías descentralizadas a través de Wolfram Language. Hoy, nos complace anunciar la colaboración con IPFS y Filecoin, componentes esenciales de la Web3 (o la web “descentralizada”). Además de la integración de Wolfram Language con IPFS y la cadena de bloques de Filecoin, esta colaboración única le permitirá a los desarrolladores aprovechar almacenamiento, redes de pares y otros protocolos para complementar sus aplicaciones existentes o sus nuevas aplicaciones descentralizadas, todo en tecnologías Wolfram como nuestro Wolfram Language, Wolfram Cloud y los cuadernos Wolfram.
La combinación de estos componentes permite nuevas posibilidades computacionales para la investigación, educación, comercio, finanzas y más. Junto con nuestros socios de Max Planck Digital Library, hemos desarrollado un magnífico ejemplo para investigadores que podrá ver en esta publicación. Además estamos enfocados en las futuras posibilidades, así que revisemos los detalles.
IPFS, Filecoin y libp2p han tenido un impacto fundamental en el movimiento Web3 para descentralizar el internet mediante tecnologías esenciales.
IPFS, Filecoin & libp2p: tecnologías fundamentales de la Web3
Filecoin complementa a IPFS y es un mercado de almacenamiento en la nube, protocolo y criptomoneda de código abierto. Ofrece almacenamiento de archivos a largo plazo por medio de una potente y dinámica solución de almacenamiento de nube descentralizada. Las partes interesadas en la red de cadena de bloques de Filecoin pueden “alquilar” el espacio de almacenamiento libre a cambio de una comisión de almacenamiento y recompensas de bloque, las cuales prolongarán la capacidad de almacenamiento a largo plazo de la red.
La lista de protocolos útiles continúa: libp2p para crear aplicaciones de redes de pares; Multiformats para proteger a los sistemas con formatos de archivos autodescritos contra la obsolescencia, y el ecosistema IPLD de formatos y estructuras de datos para crear aplicaciones totalmente descentralizadas. Wolfram contará con más actualizaciones a medida que nuestros desarrolladores continúen creando integraciones.
La mejor manera de ilustrar la facilidad e importancia del ecosistema IPFS y la potencia de la integración con Wolfram Language es con ejemplos del mundo real.
Cargue un archivo a IPFS:
ExternalStorageUpload["ExampleData/spikey2.png", ExternalStorageBase -> "IPFS"]
Descargue un archivo de IPFS:
file = ExternalStorageDownload[ ExternalStorageObject[ "QmXpif6oKinoP8CwPMCJPqoJNwvEfzbH1cJg6yZkBLJwKu", Association[ "ExternalStorageBase" -> "IPFS", "FileHash" -> "c9ccd63d95043f5d639a76b932dba6c9"]]]
Importe el archivo:
Import[file]
Caso práctico de bloxberg Certify & Verify
Cómo preparar los datos y cargar a IPFS
En este ejemplo utilizaremos un archivo PDF del libro blanco de Satoshi Nakamoto “Bitcoin: A Peer-to-Peer Electronic Cash System”, y lo prepararemos para ser enviado al contrato inteligente Certify de bloxberg. Adicionalmente, extendemos la funcionalidad al cargar el archivo a IPFS y crear un archivo de metadatos JSON que también será cargado a IPFS, y contiene el CID del archivo PDF.
Aplique hash al documento de investigación:
filePath = FileNameJoin[{NotebookDirectory[], "bitcoin.pdf"}]
fileHash = FileHash[filePath, "SHA256", "HexString"]
Obtenga la marca temporal Unix:
timestamp = ToString[UnixTime[Now]];
Cargue el archivo de investigación a IPFS:
eso = ExternalStorageUpload[filePath, ExternalStorageBase -> "IPFS"]
Cree los metadatos del documento y el autor:
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"]
Cargue los metadatos a IPFS:
metadataESO = ExternalStorageUpload[metadataFilePath, ExternalStorageBase -> "IPFS"]
metadataCID = metadataESO["CID"]
Cómo enviar datos al contrato inteligente Certify de bloxberg
En esta sección crearemos la transacción con todos los datos requeridos y la enviaremos a la cadena de bloques bloxberg para certificarla mediante el contrato inteligente Certify. Las siguientes claves privadas han sido publicadas para una mejor comprensión por parte de los lectores.
Inicialice algunas variables para la transacción:
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"]
Prepare la transacción:
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"|>]
Firme la transacción:
txSigned = BlockchainTransactionSign[tx, key]
Envíe la transacción:
txSubmitted = BlockchainTransactionSubmit[txSigned]
txid = txSubmitted["TransactionID"]
Revise la transacción:
Dataset[BlockchainTransactionData[txid, BlockchainBase -> "bloxberg"], HiddenItems -> {"EventList" -> True}, ItemSize -> {50}]
Cómo verificar los datos certificados en la cadena de bloques bloxberg
En esta sección llamaremos al contrato inteligente Verify de bloxberg para obtener los datos, y obtendremos el archivo PDF original de IPFS utilizando los metadatos JSON.
Obtenga los datos de verificación:
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]]]]
Obtenga el CID de los metadatos de IPFS:
ipfsCID = verifyData[[2]]
Descargue los metadatos de IPFS:
verifyMetadataFile = ExternalStorageDownload[ipfsCID, ExternalStorageBase -> "IPFS"]
Importe los metadatos:
verifyMetadata = Import[verifyMetadataFile, "RawJSON"];
Dataset[verifyMetadata]
Descargue el documento de investigación:
ExternalStorageDownload[verifyMetadata["FileCID"]]
Manténgase conectado: cómo causar un impacto en la Web3
Consideramos que la siguiente etapa del desarrollo del internet es un movimiento hacia la descentralización de páginas web y servicios. La integración de Wolfram Language con IPFS y Filecoin ampliará el rango de aplicaciones, servicios y análisis que las personas puedan crear, sin importar su experiencia de programación. Nuestro plan es ampliar nuestra colaboración con IPFS para incluir una integración de la cadena de bloques Filecoin, utilizando Filecoin para almacenamiento, manipulación simbólica de datos de IPFS y Filecoin, ejemplos analíticos, características educativas y más.
Esperamos contar con ejemplos de distintos campos y usuarios en el futuro:
- Análisis de datos: tomar datos de Filecoin e IPFS y realizar análisis en los documentos, todo mediante Wolfram Language
- NFT: utilizar cuadernos Wolfram, Wolfram Language y conexiones con cadenas de bloques para crear, descargar y utilizas los NFT
- Círculos académicos: almacenar datos para uso abierto y comprensible, y un intercambio sofisticado de investigaciones
- Comercio: trabajar con el Asesoramiento Técnico Wolfram para explorar prototipos avanzados y exploraciones
- Desarrolladores: crear aplicaciones avanzadas por medio de capacidades computacionales
¡Nos encontramos en la cúspide de resaltar la utilidad de IPFS y las cadenas de bloques mediante un magnífico ejemplo acerca de los NFT que será divertido, emocionante y GRATUITO!
Conéctese con Wolfram Blockchain Labs para descubrir más sobre cómo integrar su cadena de bloques en Wolfram Language. Conéctese con el Asesoramiento Técnico Wolfram para iniciar un proyecto de cadena de bloques. |