Class: BSV::Wallet::FileStore

Inherits:
MemoryStore show all
Defined in:
lib/bsv/wallet_interface/file_store.rb

Overview

JSON file-backed storage adapter.

Persists actions, outputs, and certificates as JSON files in a configurable directory (default: ~/.bsv-wallet/). Data survives process restarts.

Inherits all filtering and pagination logic from MemoryStore and adds load-on-init / save-on-mutation.

Examples:

Default location

store = BSV::Wallet::FileStore.new
# Data written to ~/.bsv-wallet/

Custom directory

store = BSV::Wallet::FileStore.new(dir: '/var/lib/my-app/wallet')

Constant Summary collapse

DEFAULT_DIR =
File.expand_path('~/.bsv-wallet')

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from MemoryStore

#count_actions, #count_certificates, #count_outputs, #find_actions, #find_certificates, #find_outputs, #find_proof, #find_setting, #find_spendable_outputs, #find_transaction, #release_stale_pending!, warn_in_production?

Methods included from StorageAdapter

#count_actions, #count_certificates, #count_outputs, #find_actions, #find_certificates, #find_outputs, #find_proof, #find_setting, #find_spendable_outputs, #find_transaction, #release_stale_pending!

Constructor Details

#initialize(dir: nil, logger: nil) ⇒ FileStore

Returns a new instance of FileStore.

Parameters:

  • dir (String) (defaults to: nil)

    directory for JSON files (default: ~/.bsv-wallet/ or BSV_WALLET_DIR env var)

  • dir (String) (defaults to: nil)

    directory for JSON files

  • logger (Logger, nil) (defaults to: nil)

    logger for permission warnings (default: Logger to STDERR)



31
32
33
34
35
36
37
38
# File 'lib/bsv/wallet_interface/file_store.rb', line 31

def initialize(dir: nil, logger: nil)
  super()
  @dir = dir || ENV.fetch('BSV_WALLET_DIR', DEFAULT_DIR)
  @logger = logger || Logger.new($stderr, progname: 'bsv-wallet')
  FileUtils.mkdir_p(@dir, mode: 0o700)
  check_permissions
  load_from_disk
end

Instance Attribute Details

#dirString (readonly)

Returns the storage directory path.

Returns:

  • (String)

    the storage directory path



41
42
43
# File 'lib/bsv/wallet_interface/file_store.rb', line 41

def dir
  @dir
end

Instance Method Details

#delete_action(txid) ⇒ Object



57
58
59
60
61
# File 'lib/bsv/wallet_interface/file_store.rb', line 57

def delete_action(txid)
  result = super
  save_actions if result
  result
end

#delete_certificate(type:, serial_number:, certifier:) ⇒ Object



93
94
95
96
97
# File 'lib/bsv/wallet_interface/file_store.rb', line 93

def delete_certificate(type:, serial_number:, certifier:)
  result = super
  save_certificates if result
  result
end

#delete_output(outpoint) ⇒ Object



69
70
71
72
73
# File 'lib/bsv/wallet_interface/file_store.rb', line 69

def delete_output(outpoint)
  result = super
  save_outputs if result
  result
end

#lock_utxos(outpoints, reference:, no_send: false) ⇒ Object



81
82
83
84
85
# File 'lib/bsv/wallet_interface/file_store.rb', line 81

def lock_utxos(outpoints, reference:, no_send: false)
  locked = super
  save_outputs unless locked.empty?
  locked
end

#store_action(action_data) ⇒ Object

— Mutations: delegate to super, then persist —



45
46
47
48
49
# File 'lib/bsv/wallet_interface/file_store.rb', line 45

def store_action(action_data)
  result = super
  save_actions
  result
end

#store_certificate(cert_data) ⇒ Object



87
88
89
90
91
# File 'lib/bsv/wallet_interface/file_store.rb', line 87

def store_certificate(cert_data)
  result = super
  save_certificates
  result
end

#store_output(output_data) ⇒ Object



63
64
65
66
67
# File 'lib/bsv/wallet_interface/file_store.rb', line 63

def store_output(output_data)
  result = super
  save_outputs
  result
end

#store_proof(txid, bump_hex) ⇒ Object



99
100
101
102
# File 'lib/bsv/wallet_interface/file_store.rb', line 99

def store_proof(txid, bump_hex)
  super
  save_proofs
end

#store_setting(key, value) ⇒ Object



109
110
111
112
# File 'lib/bsv/wallet_interface/file_store.rb', line 109

def store_setting(key, value)
  super
  save_settings
end

#store_transaction(txid, tx_hex) ⇒ Object



104
105
106
107
# File 'lib/bsv/wallet_interface/file_store.rb', line 104

def store_transaction(txid, tx_hex)
  super
  save_transactions
end

#update_action_status(txid, new_status) ⇒ Object



51
52
53
54
55
# File 'lib/bsv/wallet_interface/file_store.rb', line 51

def update_action_status(txid, new_status)
  result = super
  save_actions
  result
end

#update_output_state(outpoint, new_state, pending_reference: nil, no_send: nil) ⇒ Object



75
76
77
78
79
# File 'lib/bsv/wallet_interface/file_store.rb', line 75

def update_output_state(outpoint, new_state, pending_reference: nil, no_send: nil)
  result = super
  save_outputs
  result
end