
tech.figure.eventstream.stream.models.EncodedBlockchainEvent.kt Maven / Gradle / Ivy
package tech.figure.eventstream.stream.models
import java.util.Base64
/**
* Common interface for various blockchain event types that are encoded as an event type followed by a series of
* event key/value attributes conforming to the format defined in `provenance/attribute/v1/attribute.proto`.
*
* Example:
*
* ```
* {
* "eventType": "provenance.metadata.v1.EventRecordCreated",
* "attributes": [
* {
* "key": "cmVjb3JkX2FkZHI=",
* "value": "InJlY29yZDFxMm0zeGFneDc2dXl2ZzRrN3l2eGM3dWhudWdnOWc2bjBsY2Robm43YXM2YWQ4a3U4Z3ZmdXVnZjZ0aiI=",
* "index": false
* },
* {
* "key": "c2Vzc2lvbl9hZGRy",
* "value": "InNlc3Npb24xcXhtM3hhZ3g3NnV5dmc0azd5dnhjN3VobnVnMHpwdjl1cTNhdTMzMmsyNzY2NmplMGFxZ2o4Mmt3dWUi",
* "index": false
* },
* {
* "key": "c2NvcGVfYWRkcg==",
* "value": "InNjb3BlMXF6bTN4YWd4NzZ1eXZnNGs3eXZ4Yzd1aG51Z3F6ZW1tbTci",
* "index": false
* }
* ]
* }
* ```
*
* @see https://github.com/provenance-io/provenance/blob/v1.7.1/docs/proto-docs.md#provenanceattributev1attributeproto
*/
interface EncodedBlockchainEvent {
/**
* The type of the event, e.g. "message", "reward", "provenance.metadata.v1.EventRecordCreated", etc.
*/
val eventType: String
/**
* A list of attributes, as defined `provenance/attribute/v1/attribute.proto`.
*/
val attributes: List
/**
* A utility function which converts a list of key/value event attributes like:
*
* ```
* [
* {
* "key": "cmVjb3JkX2FkZHI=",
* "value": "InJlY29yZDFxMm0zeGFneDc2dXl2ZzRrN3l2eGM3dWhudWdnOWc2bjBsY2Robm43YXM2YWQ4a3U4Z3ZmdXVnZjZ0aiI="
* },
* {
* "key": "c2Vzc2lvbl9hZGRy",
* "value": "InNlc3Npb24xcXhtM3hhZ3g3NnV5dmc0azd5dnhjN3VobnVnMHpwdjl1cTNhdTMzMmsyNzY2NmplMGFxZ2o4Mmt3dWUi"
* },
* {
* "key": "c2NvcGVfYWRkcg==",
* "value": "InNjb3BlMXF6bTN4YWd4NzZ1eXZnNGs3eXZ4Yzd1aG51Z3F6ZW1tbTci"
* }
* ]
* ```
*
* which have been deserialized in `List`, into `Map`,
*
* where keys have been base64 decoded:
*
* ```
* {
* "record_addr" to "InJlY29yZDFxMm0zeGFneDc2dXl2ZzRrN3l2eGM3dWhudWdnOWc2bjBsY2Robm43YXM2YWQ4a3U4Z3ZmdXVnZjZ0aiI=",
* "session_addr" to "InNlc3Npb24xcXhtM3hhZ3g3NnV5dmc0azd5dnhjN3VobnVnMHpwdjl1cTNhdTMzMmsyNzY2NmplMGFxZ2o4Mmt3dWUi",
* "scope_addr" to "InNjb3BlMXF6bTN4YWd4NzZ1eXZnNGs3eXZ4Yzd1aG51Z3F6ZW1tbTci"
* }
* ```
*/
fun toDecodedMap(): Map = attributes.toDecodedMap()
}
/**
* A utility function which converts a list of key/value event attributes like:
*
* [
* {
* "key": "cmVjb3JkX2FkZHI=",
* "value": "InJlY29yZDFxMm0zeGFneDc2dXl2ZzRrN3l2eGM3dWhudWdnOWc2bjBsY2Robm43YXM2YWQ4a3U4Z3ZmdXVnZjZ0aiI="
* },
* {
* "key": "c2Vzc2lvbl9hZGRy",
* "value": "InNlc3Npb24xcXhtM3hhZ3g3NnV5dmc0azd5dnhjN3VobnVnMHpwdjl1cTNhdTMzMmsyNzY2NmplMGFxZ2o4Mmt3dWUi"
* },
* {
* "key": "c2NvcGVfYWRkcg==",
* "value": "InNjb3BlMXF6bTN4YWd4NzZ1eXZnNGs3eXZ4Yzd1aG51Z3F6ZW1tbTci"
* }
* ]
*
* which have been deserialized in `List`, into `Map`,
*
* where keys have been base64 decoded:
*
* {
* "record_addr" to "InJlY29yZDFxMm0zeGFneDc2dXl2ZzRrN3l2eGM3dWhudWdnOWc2bjBsY2Robm43YXM2YWQ4a3U4Z3ZmdXVnZjZ0aiI=",
* "session_addr" to "InNlc3Npb24xcXhtM3hhZ3g3NnV5dmc0azd5dnhjN3VobnVnMHpwdjl1cTNhdTMzMmsyNzY2NmplMGFxZ2o4Mmt3dWUi",
* "scope_addr" to "InNjb3BlMXF6bTN4YWd4NzZ1eXZnNGs3eXZ4Yzd1aG51Z3F6ZW1tbTci"
* }
*/
fun List.toDecodedMap(): Map = associate { e ->
Base64.getDecoder().decode(e.key).decodeToString() to e.value
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy