Add NIP-01 compliant client code
This commit is contained in:
93
lib/nostr/event.rb
Normal file
93
lib/nostr/event.rb
Normal file
@@ -0,0 +1,93 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Nostr
|
||||
# The only object type that exists in Nostr is an event. Events are immutable.
|
||||
class Event < EventFragment
|
||||
# 32-bytes sha256 of the the serialized event data.
|
||||
# To obtain the event.id, we sha256 the serialized event. The serialization is done over the UTF-8 JSON-serialized
|
||||
# string (with no white space or line breaks)
|
||||
#
|
||||
# @api public
|
||||
#
|
||||
# @example Getting the event id
|
||||
# event.id # => 'ccf9fdf3e1466d7c20969c71ec98defcf5f54aee088513e1b73ccb7bd770d460'
|
||||
#
|
||||
# @return [String]
|
||||
#
|
||||
attr_reader :id
|
||||
|
||||
# 64-bytes signature of the sha256 hash of the serialized event data, which is
|
||||
# the same as the "id" field
|
||||
#
|
||||
# @api public
|
||||
#
|
||||
# @example Getting the event signature
|
||||
# event.sig # => ''
|
||||
#
|
||||
# @return [String]
|
||||
#
|
||||
attr_reader :sig
|
||||
|
||||
# Instantiates a new Event
|
||||
#
|
||||
# @api public
|
||||
#
|
||||
# @example Instantiating a new event
|
||||
# Nostr::Event.new(
|
||||
# id: 'ccf9fdf3e1466d7c20969c71ec98defcf5f54aee088513e1b73ccb7bd770d460',
|
||||
# pubkey: '48df4af6e240ac5f7c5de89bf5941b249880be0e87d03685b178ccb1a315f52e',
|
||||
# created_at: 1230981305,
|
||||
# kind: 1,
|
||||
# tags: [],
|
||||
# content: 'Your feedback is appreciated, now pay $8',
|
||||
# sig: '123ac2923b792ce730b3da34f16155470ab13c8f97f9c53eaeb334f1fb3a5dc9a7f643
|
||||
# 937c6d6e9855477638f5655c5d89c9aa5501ea9b578a66aced4f1cd7b3'
|
||||
# )
|
||||
#
|
||||
#
|
||||
# @param id [String] 32-bytes sha256 of the the serialized event data.
|
||||
# @param sig [String] 64-bytes signature of the sha256 hash of the serialized event data, which is
|
||||
# the same as the "id" field
|
||||
#
|
||||
def initialize(id:, sig:, **kwargs)
|
||||
super(**kwargs)
|
||||
|
||||
@id = id
|
||||
@sig = sig
|
||||
end
|
||||
|
||||
# Converts the event to a hash
|
||||
#
|
||||
# @api public
|
||||
#
|
||||
# @example Converting the event to a hash
|
||||
# event.to_h
|
||||
#
|
||||
# @return [Hash] The event as a hash.
|
||||
#
|
||||
def to_h
|
||||
{
|
||||
id:,
|
||||
pubkey:,
|
||||
created_at:,
|
||||
kind:,
|
||||
tags:,
|
||||
content:,
|
||||
sig:
|
||||
}
|
||||
end
|
||||
|
||||
# Compares two events. Returns true if all attributes are equal and false otherwise
|
||||
#
|
||||
# @api public
|
||||
#
|
||||
# @example
|
||||
# event1 == event2 # => true
|
||||
#
|
||||
# @return [Boolean] True if all attributes are equal and false otherwise
|
||||
#
|
||||
def ==(other)
|
||||
to_h == other.to_h
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user