Java-based connector that bridges FIWARE (via FIROS) and the public DLT network IOTA Shimmer
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
-
FIROS → FIWARE Context Broker transforms ROS topics into NGSI entities and issues HTTP notifications to the connector.
-
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. -
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.
-
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.rsRust client with the Java bindings (recommended) rather than ad-hoc REST calls — Java bindings are available foriota.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