mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-10-04 19:53:28 +02:00
add PollNoteEvent type
This commit is contained in:
@@ -0,0 +1,76 @@
|
|||||||
|
package com.vitorpamplona.amethyst.service.model
|
||||||
|
|
||||||
|
import com.vitorpamplona.amethyst.model.HexKey
|
||||||
|
import com.vitorpamplona.amethyst.model.toHexKey
|
||||||
|
import nostr.postr.Utils
|
||||||
|
import java.util.Date
|
||||||
|
|
||||||
|
class PollNoteEvent(
|
||||||
|
id: HexKey,
|
||||||
|
pubKey: HexKey,
|
||||||
|
createdAt: Long,
|
||||||
|
tags: List<List<String>>,
|
||||||
|
content: String,
|
||||||
|
sig: HexKey
|
||||||
|
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
|
||||||
|
fun mentions() = tags.filter { it.firstOrNull() == "p" }.mapNotNull { it.getOrNull(1) }
|
||||||
|
fun taggedAddresses() = tags.filter { it.firstOrNull() == "a" }.mapNotNull {
|
||||||
|
val aTagValue = it.getOrNull(1)
|
||||||
|
val relay = it.getOrNull(2)
|
||||||
|
|
||||||
|
if (aTagValue != null) ATag.parse(aTagValue, relay) else null
|
||||||
|
}
|
||||||
|
|
||||||
|
fun replyTos() = tags.filter { it.firstOrNull() == "e" }.mapNotNull { it.getOrNull(1) }
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val kind = 6969
|
||||||
|
|
||||||
|
fun create(msg: String,
|
||||||
|
replyTos: List<String>?,
|
||||||
|
mentions: List<String>?,
|
||||||
|
addresses: List<ATag>?,
|
||||||
|
privateKey: ByteArray,
|
||||||
|
createdAt: Long = Date().time / 1000): PollNoteEvent {
|
||||||
|
val pubKey = Utils.pubkeyCreate(privateKey).toHexKey()
|
||||||
|
val tags = mutableListOf<List<String>>()
|
||||||
|
replyTos?.forEach {
|
||||||
|
tags.add(listOf("e", it))
|
||||||
|
}
|
||||||
|
mentions?.forEach {
|
||||||
|
tags.add(listOf("p", it))
|
||||||
|
}
|
||||||
|
addresses?.forEach {
|
||||||
|
tags.add(listOf("a", it.toTag()))
|
||||||
|
}
|
||||||
|
val id = generateId(pubKey, createdAt, kind, tags, msg)
|
||||||
|
val sig = Utils.sign(id, privateKey)
|
||||||
|
return PollNoteEvent(id.toHexKey(), pubKey, createdAt, tags, msg, sig.toHexKey())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
"id": <32-bytes lowercase hex-encoded sha256 of the serialized event data>
|
||||||
|
"pubkey": <32-bytes lowercase hex-encoded public key of the event creator>,
|
||||||
|
"created_at": <unix timestamp in seconds>,
|
||||||
|
"kind": 6969,
|
||||||
|
"tags": [
|
||||||
|
["e", <32-bytes hex of the id of the poll event>, <primary poll host relay URL>],
|
||||||
|
["p", <32-bytes hex of the key>, <primary poll host relay URL>],
|
||||||
|
["poll_options",
|
||||||
|
"[[0, 'poll option 0 description string'],
|
||||||
|
[1, 'poll option 1 description string'],
|
||||||
|
[<n>, 'poll option <n> description string']]"
|
||||||
|
],
|
||||||
|
["value_maximum", "maximum satoshi value for inclusion in tally"],
|
||||||
|
["value_minimum", "minimum satoshi value for inclusion in tally"],
|
||||||
|
["consensus_threshold", "required percentage to attain consensus <0..100>"],
|
||||||
|
["closed_at", "unix timestamp in seconds"],
|
||||||
|
],
|
||||||
|
"ots": <base64-encoded OTS file data>
|
||||||
|
"content": <primary poll description string>,
|
||||||
|
"sig": <64-bytes hex of the signature of the sha256 hash of the serialized event data, which is the same as the "id" field>
|
||||||
|
}
|
||||||
|
*/
|
Reference in New Issue
Block a user