mirror of
https://github.com/logos-messaging/logos-messaging-nim.git
synced 2026-02-21 22:33:08 +00:00
* Introduce api/send Added events and requests for support. Reworked delivery_monitor into a featured devlivery_service, that - supports relay publish and lightpush depending on configuration but with fallback options - if available and configured it utilizes store api to confirm message delivery - emits message delivery events accordingly prepare for use in api_example * Fix edge mode config and test added * Fix some import issues, start and stop waku shall not throw exception but return with result properly * Utlize sync RequestBroker, adapt to non-async broker usage and gcsafe where appropriate, removed leftover * add api_example app to examples2 * Adapt after merge from master * Adapt code for using broker context * Fix brokerCtx settings for all usedbrokers, cover locked node init * Various fixes upon test failures. Added initial of subscribe API and auto-subscribe for send api * More test added * Fix multi propagate event emit, fix fail send test case * Fix rebase * Fix PushMessageHandlers in tests * adapt libwaku to api changes * Fix relay test by adapting publish return error in case NoPeersToPublish * Addressing all remaining review findings. Removed leftovers. Fixed loggings and typos * Fix rln relay broker, missed brokerCtx * Fix rest relay test failed, due to publish will fail if no peer avail * ignore anvil test state file * Make terst_wakunode_rln_relay broker context aware to fix * Fix waku rln tests by having them broker context aware * fix typo in test_app.nim
74 lines
1.9 KiB
Nim
74 lines
1.9 KiB
Nim
{.push raises: [].}
|
|
|
|
import std/sequtils, stew/[byteutils, endians2, arrayops], nimcrypto/sha2, results
|
|
import ../topics, ./message
|
|
|
|
## 14/WAKU2-MESSAGE: Deterministic message hashing
|
|
## https://rfc.vac.dev/spec/14/#deterministic-message-hashing
|
|
|
|
type WakuMessageHash* = array[32, byte]
|
|
|
|
func shortLog*(hash: WakuMessageHash): string =
|
|
## Returns compact string representation of ``WakuMessageHash``.
|
|
var hexhash = newStringOfCap(13)
|
|
hexhash &= hash.toOpenArray(0, 1).to0xHex()
|
|
hexhash &= "..."
|
|
hexhash &= hash.toOpenArray(hash.len - 2, hash.high).toHex()
|
|
hexhash
|
|
|
|
func `$`*(hash: WakuMessageHash): string =
|
|
shortLog(hash)
|
|
|
|
func to0xHex*(hash: WakuMessageHash): string =
|
|
var hexhash = newStringOfCap(64)
|
|
hexhash &= hash.toOpenArray(hash.low, hash.high).to0xHex()
|
|
hexhash
|
|
|
|
const EmptyWakuMessageHash*: WakuMessageHash = [
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0,
|
|
]
|
|
|
|
converter fromBytes*(array: openArray[byte]): WakuMessageHash =
|
|
var hash: WakuMessageHash
|
|
discard copyFrom(hash, array)
|
|
hash
|
|
|
|
converter toBytesArray*(digest: MDigest[256]): WakuMessageHash =
|
|
digest.data
|
|
|
|
converter toBytes*(digest: MDigest[256]): seq[byte] =
|
|
toSeq(digest.data)
|
|
|
|
proc hexToHash*(hexString: string): Result[WakuMessageHash, string] =
|
|
var hash: WakuMessageHash
|
|
|
|
try:
|
|
hash = hexString.hexToSeqByte().fromBytes()
|
|
except ValueError as e:
|
|
return err("Exception converting hex string to hash: " & e.msg)
|
|
|
|
return ok(hash)
|
|
|
|
proc computeMessageHash*(pubsubTopic: PubsubTopic, msg: WakuMessage): WakuMessageHash =
|
|
var ctx: sha256
|
|
ctx.init()
|
|
defer:
|
|
ctx.clear()
|
|
|
|
ctx.update(pubsubTopic.toBytes())
|
|
ctx.update(msg.payload)
|
|
ctx.update(msg.contentTopic.toBytes())
|
|
ctx.update(msg.meta)
|
|
ctx.update(toBytesBE(uint64(msg.timestamp)))
|
|
|
|
return ctx.finish() # Computes the hash
|
|
|
|
proc cmp*(x, y: WakuMessageHash): int =
|
|
if x < y:
|
|
return -1
|
|
elif x == y:
|
|
return 0
|
|
|
|
return 1
|