A PoC console implementation for spawning an Iota Streams Author instance. By running the service, a new Streams channel will be initiated and an api port opened for commands.
Adjust the config.json
file to match the configuration of your node structure.
Example:
{
"node": "http://localhost:14265",
"mwm": 5,
"local_pow": true,
"api_port": 8080,
"seed": null
}
Firstly, start a new Author instance and listener services with:
cargo run
This will return something like the following:
Making Streams channel...
Channel Address - 2cd768499b14cbdb4f9d5c0fcd2bd0f0089d7729e2bb12c2e48bbb877a17672c0000000000000000:82bff4907f5cfdb84786de26
^--- This is the Channel Root => AppInst:MsgId
Retrieval thread spawning. Searching for new messages...
API listening on http://0.0.0.0:8080
Next place the channel address into the AnnAddress field of the configurations on the simulator, then build and run it.
The simulator will generate new subscribers and automatically communicate the subscription link to the Author Console.
Once the author console sees this request, it will process it, and return a keyload link. The Subscriber should be able
to see this new keyload message appear if they use a get_next_msgs()
command (conducted authomatically in the
await_keyload()
function of the simulator's Subscriber class).
Sensor readings and annotations can then be sent as signed_packets over the tangle within the channel. The author will detect these new messages and store the annotations and readings accordingly.
See the models module to see the formatting of an Annotation
and Reading
as well as Alvarium
based
data types for compatibility with JSON structure of sdk.
Basic examples of available HTTP based curl commands
Fetches the current channel application instance.
N/A
curl --location --request GET '127.0.0.1:8080/get_channel_address' --header 'Content-Type: application/json'
Iota Streams ChannelAddress/ApplicationInstance
for the current channel.
Channel Address: 2cd768499b14cbdb4f9d5c0fcd2bd0f0089d7729e2bb12c2e48bbb877a17672c0000000000000000
Fetches the current channel announcement message address.
N/A
curl --location --request GET '127.0.0.1:8080/get_announcement_id' --header 'Content-Type: application/json'
Iota Streams TangleAddress
for the Channel Announcement message.
Announcement Id: 2cd768499b14cbdb4f9d5c0fcd2bd0f0089d7729e2bb12c2e48bbb877a17672c0000000000000000:82bff4907f5cfdb84786de26
Inform the Author instance of a new subscribing party, providing a message link for it to look for in the tangle. Once the message is retrieved and processed by the author, a keyload message will be generated for the new subscribed party to begin messaging in.
msgid: Streams MsgId of subscription message for author to process
pk: Hex string representation of subscribers ed25519 public key
curl --location --request POST '127.0.0.1:8080/subscribe' --header 'Content-Type: application/json' --data-raw '{ "msgid": "30429f489e59579bd49768a3", "pk": "3d4d8b668e4a399e1ed8dd0bc4e0692cc80ca6d892c2cd7563a266e2ef24e4a8" }'
Iota Streams sequence TangleAddress
of the generated Keyload
message.
Subscription processed, keyload link: <2cd768499b14cbdb4f9d5c0fcd2bd0f0089d7729e2bb12c2e48bbb877a17672c0000000000000000:3787799e7745c4603c344b70>
Retrieve a list of all Readings
associated with a given SensorId
sensor_id: Hex string representation of subscribed sensor's ed25519 public key
curl --location --request POST '127.0.0.1:8080/subscribe' --header 'Content-Type: application/json' --data-raw '{ "sensor_id": "3d4d8b668e4a399e1ed8dd0bc4e0692cc80ca6d892c2cd7563a266e2ef24e4a8" }'
Vector of Readings
associated with the given SensorId
.
[
{
"sensor_id":"ae05dfbf86ff76361f9c1b0c02fa3143560766bc069cba16fc2ca5379664c1de",
"reading_id":"01",
"data":"Some Masked Data Here"
},
{
"sensor_id":"ae05dfbf86ff76361f9c1b0c02fa3143560766bc069cba16fc2ca5379664c1de",
"reading_id":"02",
"data":"More Masked Data Here"
},
...
]
Retrieve a list of all Annotations
associated with a given ReadingId
reading_id: identifier for a specific reading
curl --location --request GET '127.0.0.1:8080/get_annotations' --header 'Content-Type: application/json' --data-raw '{ "reading_id": "02" }'
Vector of Annotations
associated with the given ReadingId
.
[
{
"reading_id":"02",
"annotation": {
"header": {
"alg":"RS256",
"typ":"JWT"
},
"payload": {
"iss":"HostName",
"sub":"0123456789",
"iat":"1602350950120",
"jti":"0987654321",
"ann":"pki",
"avl":1
},
"signature": "ABC123"
}
},
...
]
Retrieve a list of all Annotations
associated with a given ReadingId
reading_id: identifier for a specific reading
curl --location --request GET '127.0.0.1:8080/get_confidence_score' --header 'Content-Type: application/json' --data-raw '{ "reading_id": "02" }'
Current Confidence Score
based off the annotation values of associated annotations for a given ReadingId
.
confidence_score: 8
Retrieve a list of all Annotations
filtered by the provided arguments
<Optional> iss: Host name of the annotation issuing machine
<Optional> sub: The ID/key of the application data that is being annotated
<Optional> iat: Timestamp for annotation generation
<Optional> jti: Unique Json Web Token ID for annotation
<Optional> ann: Type of annotation
curl --location --request GET '127.0.0.1:8080/get_filtered_annotations' --header 'Content-Type: application/json' --data-raw '{ "iss": null, "sub": "0123456789", "iat": null, "jti": null, "ann": null }'
Vector of filtered Annotations
.
[
{
"reading_id":"02",
"annotation": {
"header": {
"alg":"RS256",
"typ":"JWT"
},
"payload": {
"iss":"HostName",
"sub":"0123456789",
"iat":"1602350950120",
"jti":"0987654321",
"ann":"pki",
"avl":1
},
"signature": "ABC123"
}
},
...
]