Published February 15, 2026 | Version 1.0.0
Software Open

Java-based connector that bridges FIWARE (via FIROS) and the public DLT network IOTA Shimmer

  • 1. ROR icon Universidad Internacional De La Rioja

Description

Abstract 

This repository implements a Java-based connector that receives NGSI notifications produced by FIROS (ROS→NGSI bridge) and anchors a compact cryptographic proof (SHA-256 digest + metadata) on the IOTA Shimmer network using an indexation payload in a Tangle message/block. The connector is meant to realize the hybrid on-chain/off-chain pattern described in the reference paper: raw AGV/ROS data remain off-chain in FIWARE repositories while short, verifiable event proofs are publicly anchored on the DLT for auditability and tamper evidence. Use of indexation payloads (small, indexed message data) is the standard lightweight approach for non-value data on IOTA/Shimmer.

Design and architecture

Components

  • ROS / ROS2 (AGV event producers)

  • FIROS (ROS→NGSI adaptor) and FIWARE Context Broker (notification source).

  • Java Connector (this project): HTTP endpoint that accepts FIWARE notifications, computes a digest, constructs a compact anchor message and submits it to an IOTA/Shimmer node using an indexation payload (via the node REST API).

  • IOTA Shimmer (public DLT) — indexable messages provide immutable anchoring and a publicly verifiable timestamp.

Event flow

  1. FIROS → FIWARE Context Broker transforms ROS topics into NGSI entities and issues HTTP notifications to the connector.

  2. The connector receives the NGSI JSON, canonicalizes it (compact deterministic JSON), computes a SHA-256 digest of the payload, and constructs a small anchor JSON with entityId, entityType, timestamp, digest, and small metadata.

  3. The connector submits an indexation message to a Shimmer node (HTTP POST to the node REST API). Nodes accept indexation payloads (type 2 payloads) and will fill missing block fields like parents/nonce if not provided.

  4. The connector returns to FIWARE a JSON response containing the node response (message/block id, index, and digest) so FIWARE can keep the mapping (off-chain record ↔ on-chain anchor).

Anchored message format (example)

This is the anchor stored on the tangle indexation payload (small JSON), not the full NGSI payload:

 
{ "entityId": "AGV-001", "entityType": "AGV", "eventTimestamp": "2026-02-15T10:23:45Z", "digest": "3f786850e387550fdab836ed7e6dc881de23001b", "source": "fiware-context-broker", "rawLength": 1234 }

In the indexation payload we store the JSON above (UTF-8) or its Base64 encoding under an index like fiware/agv/anchors. Indexation allows efficient retrieval by index.

Security and operational notes

  • Node endpoint and credentials (if any) must be provided through environment variables or a secrets vault; do not embed private keys in source.

  • The connector endpoint MUST run behind TLS and an auth layer (JWT, mTLS, or API gateway) before production exposure.

  • Keep anchor payloads small: Shimmer nodes limit payload sizes and nodes may time out on large messages. Use digest+metadata rather than full event storage.

  • For production-grade Java integration, consider using the official iota.rs Rust client with the Java bindings (recommended) rather than ad-hoc REST calls — Java bindings are available for iota.rs.

Files

firos-shimmer-connector-v1.0.0.zip

Files (4.7 kB)

Name Size Download all
md5:2cd0c3436a55966543f8dcb0ae52a97c
4.7 kB Preview Download

Additional details

Software

Programming language
Java