@blinklabs/dingo 0.7.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/README.md +2 -1
  2. package/{bin/dingo → dingo} +0 -0
  3. package/dingo.yaml.example +53 -0
  4. package/package.json +2 -2
  5. package/.github/CODEOWNERS +0 -5
  6. package/.github/assets/dingo-ate-my-blockchain.png +0 -0
  7. package/.github/assets/dingo-illustration.png +0 -0
  8. package/.github/assets/dingo-logo-with-text-horizontal.png +0 -0
  9. package/.github/assets/dingo-logo-with-text.png +0 -0
  10. package/.github/dependabot.yml +0 -19
  11. package/.github/dingo-20241210.png +0 -0
  12. package/.github/dingo.md +0 -56
  13. package/.github/workflows/ci-docker.yml +0 -36
  14. package/.github/workflows/conventional-commits.yml +0 -17
  15. package/.github/workflows/go-test.yml +0 -29
  16. package/.github/workflows/golangci-lint.yml +0 -23
  17. package/.github/workflows/publish.yml +0 -207
  18. package/Dockerfile +0 -25
  19. package/Makefile +0 -53
  20. package/blockfetch.go +0 -144
  21. package/chain/chain.go +0 -504
  22. package/chain/chain_test.go +0 -468
  23. package/chain/errors.go +0 -80
  24. package/chain/event.go +0 -33
  25. package/chain/iter.go +0 -64
  26. package/chainsync/chainsync.go +0 -97
  27. package/chainsync.go +0 -223
  28. package/cmd/dingo/load.go +0 -52
  29. package/cmd/dingo/main.go +0 -118
  30. package/cmd/dingo/serve.go +0 -49
  31. package/config/cardano/node.go +0 -192
  32. package/config/cardano/node_test.go +0 -85
  33. package/config/cardano/preview/README.md +0 -4
  34. package/config/cardano/preview/alonzo-genesis.json +0 -196
  35. package/config/cardano/preview/byron-genesis.json +0 -117
  36. package/config/cardano/preview/config.json +0 -114
  37. package/config/cardano/preview/conway-genesis.json +0 -297
  38. package/config/cardano/preview/shelley-genesis.json +0 -68
  39. package/config.go +0 -245
  40. package/connmanager/connection_manager.go +0 -105
  41. package/connmanager/connection_manager_test.go +0 -185
  42. package/connmanager/event.go +0 -37
  43. package/connmanager/listener.go +0 -140
  44. package/connmanager/outbound.go +0 -93
  45. package/connmanager/socket.go +0 -55
  46. package/connmanager/unix.go +0 -78
  47. package/custom-p2p-topology.json +0 -24
  48. package/custom-p2p-topology.json.backup +0 -24
  49. package/custom-p2p-topology.json.mainnet +0 -37
  50. package/database/account.go +0 -180
  51. package/database/block.go +0 -362
  52. package/database/certs.go +0 -53
  53. package/database/commit_timestamp.go +0 -77
  54. package/database/database.go +0 -118
  55. package/database/database_test.go +0 -62
  56. package/database/drep.go +0 -47
  57. package/database/epoch.go +0 -121
  58. package/database/immutable/chunk.go +0 -182
  59. package/database/immutable/immutable.go +0 -350
  60. package/database/immutable/immutable_test.go +0 -59
  61. package/database/immutable/primary.go +0 -106
  62. package/database/immutable/secondary.go +0 -103
  63. package/database/immutable/testdata/08893.chunk +0 -0
  64. package/database/immutable/testdata/08893.primary +0 -0
  65. package/database/immutable/testdata/08893.secondary +0 -0
  66. package/database/immutable/testdata/08894.chunk +0 -0
  67. package/database/immutable/testdata/08894.primary +0 -0
  68. package/database/immutable/testdata/08894.secondary +0 -0
  69. package/database/immutable/testdata/README.md +0 -4
  70. package/database/plugin/blob/badger/commit_timestamp.go +0 -50
  71. package/database/plugin/blob/badger/database.go +0 -152
  72. package/database/plugin/blob/badger/logger.go +0 -63
  73. package/database/plugin/blob/badger/metrics.go +0 -98
  74. package/database/plugin/blob/blob.go +0 -19
  75. package/database/plugin/blob/store.go +0 -40
  76. package/database/plugin/log.go +0 -27
  77. package/database/plugin/metadata/metadata.go +0 -19
  78. package/database/plugin/metadata/sqlite/account.go +0 -313
  79. package/database/plugin/metadata/sqlite/certs.go +0 -58
  80. package/database/plugin/metadata/sqlite/commit_timestamp.go +0 -68
  81. package/database/plugin/metadata/sqlite/database.go +0 -218
  82. package/database/plugin/metadata/sqlite/drep.go +0 -140
  83. package/database/plugin/metadata/sqlite/epoch.go +0 -120
  84. package/database/plugin/metadata/sqlite/models/account.go +0 -118
  85. package/database/plugin/metadata/sqlite/models/auth_committee_hot.go +0 -26
  86. package/database/plugin/metadata/sqlite/models/drep.go +0 -52
  87. package/database/plugin/metadata/sqlite/models/epoch.go +0 -31
  88. package/database/plugin/metadata/sqlite/models/models.go +0 -46
  89. package/database/plugin/metadata/sqlite/models/pool.go +0 -97
  90. package/database/plugin/metadata/sqlite/models/pparam_update.go +0 -27
  91. package/database/plugin/metadata/sqlite/models/pparams.go +0 -27
  92. package/database/plugin/metadata/sqlite/models/resign_committee_cold.go +0 -27
  93. package/database/plugin/metadata/sqlite/models/stake_vote_delegation.go +0 -27
  94. package/database/plugin/metadata/sqlite/models/tip.go +0 -26
  95. package/database/plugin/metadata/sqlite/models/update_drep.go +0 -27
  96. package/database/plugin/metadata/sqlite/models/utxo.go +0 -30
  97. package/database/plugin/metadata/sqlite/models/vote_delegation.go +0 -26
  98. package/database/plugin/metadata/sqlite/models/vote_registration_delegation.go +0 -15
  99. package/database/plugin/metadata/sqlite/pool.go +0 -240
  100. package/database/plugin/metadata/sqlite/pparams.go +0 -110
  101. package/database/plugin/metadata/sqlite/tip.go +0 -83
  102. package/database/plugin/metadata/sqlite/utxo.go +0 -292
  103. package/database/plugin/metadata/store.go +0 -198
  104. package/database/plugin/option.go +0 -190
  105. package/database/plugin/plugin.go +0 -20
  106. package/database/plugin/register.go +0 -118
  107. package/database/pparams.go +0 -145
  108. package/database/tip.go +0 -45
  109. package/database/txn.go +0 -147
  110. package/database/types/types.go +0 -74
  111. package/database/types/types_test.go +0 -83
  112. package/database/utxo.go +0 -263
  113. package/dist/artifacts.json +0 -1
  114. package/dist/checksums.txt +0 -22
  115. package/dist/config.yaml +0 -253
  116. package/dist/dingo-0.5.0-SNAPSHOT-d9431e4.tar.gz +0 -0
  117. package/dist/dingo-0.5.0-SNAPSHOT-d9431e4.tar.gz.sbom.json +0 -1
  118. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_darwin_arm64.tar.gz +0 -0
  119. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_darwin_arm64.tar.gz.sbom.json +0 -1
  120. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_darwin_x86_64.tar.gz +0 -0
  121. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_darwin_x86_64.tar.gz.sbom.json +0 -1
  122. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_amd64.apk +0 -0
  123. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_amd64.apk.sbom.json +0 -1
  124. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_amd64.deb +0 -0
  125. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_amd64.deb.sbom.json +0 -1
  126. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_amd64.rpm +0 -0
  127. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_amd64.rpm.sbom.json +0 -1
  128. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.apk +0 -0
  129. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.apk.sbom.json +0 -1
  130. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.deb +0 -0
  131. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.deb.sbom.json +0 -1
  132. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.rpm +0 -0
  133. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.rpm.sbom.json +0 -1
  134. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.tar.gz +0 -0
  135. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_arm64.tar.gz.sbom.json +0 -1
  136. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_x86_64.tar.gz +0 -0
  137. package/dist/dingo_0.5.0-SNAPSHOT-d9431e4_linux_x86_64.tar.gz.sbom.json +0 -1
  138. package/dist/dingo_darwin_amd64_v1/dingo +0 -0
  139. package/dist/dingo_darwin_arm64_v8.0/dingo +0 -0
  140. package/dist/dingo_linux_amd64_v1/dingo +0 -0
  141. package/dist/dingo_linux_arm64_v8.0/dingo +0 -0
  142. package/dist/homebrew/dingo.rb +0 -51
  143. package/dist/metadata.json +0 -1
  144. package/event/event.go +0 -141
  145. package/event/event_test.go +0 -115
  146. package/event/metrics.go +0 -44
  147. package/go.mod +0 -98
  148. package/go.sum +0 -358
  149. package/internal/config/config.go +0 -145
  150. package/internal/config/config_test.go +0 -118
  151. package/internal/node/load.go +0 -149
  152. package/internal/node/node.go +0 -176
  153. package/internal/version/version.go +0 -33
  154. package/ledger/certs.go +0 -164
  155. package/ledger/chainsync.go +0 -504
  156. package/ledger/delta.go +0 -99
  157. package/ledger/eras/allegra.go +0 -154
  158. package/ledger/eras/alonzo.go +0 -156
  159. package/ledger/eras/babbage.go +0 -154
  160. package/ledger/eras/byron.go +0 -42
  161. package/ledger/eras/conway.go +0 -166
  162. package/ledger/eras/eras.go +0 -44
  163. package/ledger/eras/mary.go +0 -154
  164. package/ledger/eras/shelley.go +0 -164
  165. package/ledger/error.go +0 -19
  166. package/ledger/event.go +0 -50
  167. package/ledger/metrics.go +0 -53
  168. package/ledger/queries.go +0 -258
  169. package/ledger/slot.go +0 -127
  170. package/ledger/slot_test.go +0 -147
  171. package/ledger/state.go +0 -821
  172. package/ledger/view.go +0 -73
  173. package/localstatequery.go +0 -50
  174. package/localtxmonitor.go +0 -44
  175. package/localtxsubmission.go +0 -52
  176. package/mempool/consumer.go +0 -98
  177. package/mempool/mempool.go +0 -322
  178. package/node.go +0 -320
  179. package/peergov/event.go +0 -27
  180. package/peergov/peer.go +0 -67
  181. package/peergov/peergov.go +0 -290
  182. package/peersharing.go +0 -70
  183. package/preview-local-topology.json +0 -23
  184. package/topology/topology.go +0 -69
  185. package/topology/topology_test.go +0 -179
  186. package/tracing.go +0 -65
  187. package/txsubmission.go +0 -233
  188. package/utxorpc/query.go +0 -311
  189. package/utxorpc/submit.go +0 -395
  190. package/utxorpc/sync.go +0 -276
  191. package/utxorpc/utxorpc.go +0 -166
  192. package/utxorpc/watch.go +0 -310
@@ -1,292 +0,0 @@
1
- // Copyright 2025 Blink Labs Software
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
-
15
- package sqlite
16
-
17
- import (
18
- "fmt"
19
-
20
- "github.com/blinklabs-io/dingo/database/plugin/metadata/sqlite/models"
21
- "github.com/blinklabs-io/gouroboros/ledger"
22
- "gorm.io/gorm"
23
- )
24
-
25
- // GetUtxo returns a Utxo by reference
26
- func (d *MetadataStoreSqlite) GetUtxo(
27
- txId []byte,
28
- idx uint32,
29
- txn *gorm.DB,
30
- ) (models.Utxo, error) {
31
- ret := models.Utxo{}
32
- tmpUtxo := models.Utxo{}
33
- if txn != nil {
34
- result := txn.Where("deleted_slot = 0").
35
- First(&tmpUtxo, "tx_id = ? AND output_idx = ?", txId, idx)
36
- if result.Error != nil {
37
- return ret, result.Error
38
- }
39
- } else {
40
- result := d.DB().Where("deleted_slot = 0").First(&tmpUtxo, "tx_id = ? AND output_idx = ?", txId, idx)
41
- if result.Error != nil {
42
- return ret, result.Error
43
- }
44
- }
45
- ret = tmpUtxo
46
- return ret, nil
47
- }
48
-
49
- // GetUtxosAddedAfterSlot returns a list of Utxos added after a given slot
50
- func (d *MetadataStoreSqlite) GetUtxosAddedAfterSlot(
51
- slot uint64,
52
- txn *gorm.DB,
53
- ) ([]models.Utxo, error) {
54
- var ret []models.Utxo
55
- if txn != nil {
56
- result := txn.Where("added_slot > 0", slot).
57
- Order("id DESC").
58
- Find(&ret)
59
- if result.Error != nil {
60
- return ret, result.Error
61
- }
62
- } else {
63
- result := d.DB().Where("added_slot > 0", slot).
64
- Order("id DESC").
65
- Find(&ret)
66
- if result.Error != nil {
67
- return ret, result.Error
68
- }
69
- }
70
- return ret, nil
71
- }
72
-
73
- // GetUtxosDeletedBeforeSlot returns a list of Utxos marked as deleted before a given slot
74
- func (d *MetadataStoreSqlite) GetUtxosDeletedBeforeSlot(
75
- slot uint64,
76
- txn *gorm.DB,
77
- ) ([]models.Utxo, error) {
78
- var ret []models.Utxo
79
- if txn != nil {
80
- result := txn.Where("deleted_slot > 0 AND deleted_slot <= ?", slot).
81
- Order("id DESC").
82
- Find(&ret)
83
- if result.Error != nil {
84
- return ret, result.Error
85
- }
86
- } else {
87
- result := d.DB().Where("deleted_slot > 0 AND deleted_slot <= ?", slot).
88
- Order("id DESC").
89
- Find(&ret)
90
- if result.Error != nil {
91
- return ret, result.Error
92
- }
93
- }
94
- return ret, nil
95
- }
96
-
97
- // GetUtxosByAddress returns a list of Utxos
98
- func (d *MetadataStoreSqlite) GetUtxosByAddress(
99
- addr ledger.Address,
100
- txn *gorm.DB,
101
- ) ([]models.Utxo, error) {
102
- var ret []models.Utxo
103
- // Build sub-query for address
104
- var addrQuery *gorm.DB
105
- if addr.PaymentKeyHash() != ledger.NewBlake2b224(nil) {
106
- addrQuery = txn.Where("payment_key = ?", addr.PaymentKeyHash().Bytes())
107
- }
108
- if addr.StakeKeyHash() != ledger.NewBlake2b224(nil) {
109
- if addrQuery != nil {
110
- addrQuery = addrQuery.Or(
111
- "staking_key = ?",
112
- addr.StakeKeyHash().Bytes(),
113
- )
114
- } else {
115
- addrQuery = txn.Where("staking_key = ?", addr.StakeKeyHash().Bytes())
116
- }
117
- }
118
- result := txn.
119
- Where("deleted_slot = 0").
120
- Where(addrQuery).
121
- Find(&ret)
122
- if result.Error != nil {
123
- return nil, result.Error
124
- }
125
- return ret, nil
126
- }
127
-
128
- func (d *MetadataStoreSqlite) DeleteUtxo(
129
- utxo any,
130
- txn *gorm.DB,
131
- ) error {
132
- tmpUtxo, ok := utxo.(models.Utxo)
133
- if !ok {
134
- return fmt.Errorf("failed to convert utxo from %T", utxo)
135
- }
136
- if txn != nil {
137
- result := txn.Delete(&tmpUtxo)
138
- if result.Error != nil {
139
- return result.Error
140
- }
141
- } else {
142
- result := d.DB().Delete(&tmpUtxo)
143
- if result.Error != nil {
144
- return result.Error
145
- }
146
- }
147
- return nil
148
- }
149
-
150
- func (d *MetadataStoreSqlite) DeleteUtxos(
151
- utxos []any,
152
- txn *gorm.DB,
153
- ) error {
154
- tmpUtxos := []models.Utxo{}
155
- for _, utxo := range utxos {
156
- tmpUtxo, ok := utxo.(models.Utxo)
157
- if !ok {
158
- return fmt.Errorf("failed to convert utxo from %T", utxo)
159
- }
160
- tmpUtxos = append(tmpUtxos, tmpUtxo)
161
- }
162
- if txn != nil {
163
- result := txn.Delete(&tmpUtxos)
164
- if result.Error != nil {
165
- return result.Error
166
- }
167
- } else {
168
- result := d.DB().Delete(&tmpUtxos)
169
- if result.Error != nil {
170
- return result.Error
171
- }
172
- }
173
- return nil
174
- }
175
-
176
- func (d *MetadataStoreSqlite) DeleteUtxosAfterSlot(
177
- slot uint64,
178
- txn *gorm.DB,
179
- ) error {
180
- if txn != nil {
181
- result := txn.Where("deleted_slot > ?", slot).
182
- Delete(&models.Utxo{})
183
- if result.Error != nil {
184
- return result.Error
185
- }
186
- } else {
187
- result := d.DB().Where("deleted_slot > ?", slot).
188
- Delete(&models.Utxo{})
189
- if result.Error != nil {
190
- return result.Error
191
- }
192
- }
193
- return nil
194
- }
195
-
196
- // DeleteUtxosBeforeSlot deletes Utxos marked as deleted before a given slot
197
- func (d *MetadataStoreSqlite) DeleteUtxosBeforeSlot(
198
- slot uint64,
199
- txn *gorm.DB,
200
- ) error {
201
- if txn != nil {
202
- result := txn.Where("deleted_slot > 0 AND deleted_slot < ?", slot).
203
- Delete(&models.Utxo{})
204
- if result.Error != nil {
205
- return result.Error
206
- }
207
- } else {
208
- result := d.DB().Where("deleted_slot >0 AND deleted_slot < ?", slot).
209
- Delete(&models.Utxo{})
210
- if result.Error != nil {
211
- return result.Error
212
- }
213
- }
214
- return nil
215
- }
216
-
217
- // SetUtxo saves a UTxO
218
- func (d *MetadataStoreSqlite) SetUtxo(
219
- txId []byte, // hash
220
- idx uint32, // idx
221
- slot uint64, // slot
222
- payment []byte, // payment
223
- stake []byte, // stake
224
- txn *gorm.DB,
225
- ) error {
226
- tmpUtxo := models.Utxo{
227
- TxId: txId,
228
- OutputIdx: idx,
229
- AddedSlot: slot,
230
- PaymentKey: payment,
231
- StakingKey: stake,
232
- }
233
- if txn != nil {
234
- result := txn.Create(&tmpUtxo)
235
- if result.Error != nil {
236
- return result.Error
237
- }
238
- } else {
239
- result := d.DB().Create(&tmpUtxo)
240
- if result.Error != nil {
241
- return result.Error
242
- }
243
- }
244
- return nil
245
- }
246
-
247
- // SetUtxoDeletedAtSlot marks a UTxO as deleted at a given slot
248
- func (d *MetadataStoreSqlite) SetUtxoDeletedAtSlot(
249
- utxoId ledger.TransactionInput,
250
- slot uint64,
251
- txn *gorm.DB,
252
- ) error {
253
- if txn != nil {
254
- result := txn.Model(models.Utxo{}).
255
- Where("tx_id = ? AND output_idx = ?", utxoId.Id().Bytes(), utxoId.Index()).
256
- Update("deleted_slot", slot)
257
- if result.Error != nil {
258
- return result.Error
259
- }
260
- } else {
261
- result := d.DB().Model(models.Utxo{}).
262
- Where("tx_id = ? AND output_idx = ?", utxoId.Id().Bytes(), utxoId.Index()).
263
- Update("deleted_slot", slot)
264
- if result.Error != nil {
265
- return result.Error
266
- }
267
- }
268
- return nil
269
- }
270
-
271
- // SetUtxosNotDeletedAfterSlot marks a list of Utxos as not deleted after a given slot
272
- func (d *MetadataStoreSqlite) SetUtxosNotDeletedAfterSlot(
273
- slot uint64,
274
- txn *gorm.DB,
275
- ) error {
276
- if txn != nil {
277
- result := txn.Model(models.Utxo{}).
278
- Where("deleted_slot > ?", slot).
279
- Update("deleted_slot", 0)
280
- if result.Error != nil {
281
- return result.Error
282
- }
283
- } else {
284
- result := d.DB().Model(models.Utxo{}).
285
- Where("deleted_slot > ?", slot).
286
- Update("deleted_slot", 0)
287
- if result.Error != nil {
288
- return result.Error
289
- }
290
- }
291
- return nil
292
- }
@@ -1,198 +0,0 @@
1
- // Copyright 2025 Blink Labs Software
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
-
15
- package metadata
16
-
17
- import (
18
- "log/slog"
19
-
20
- "github.com/blinklabs-io/dingo/database/plugin/metadata/sqlite"
21
- "github.com/blinklabs-io/dingo/database/plugin/metadata/sqlite/models"
22
- "github.com/blinklabs-io/gouroboros/ledger"
23
- lcommon "github.com/blinklabs-io/gouroboros/ledger/common"
24
- ochainsync "github.com/blinklabs-io/gouroboros/protocol/chainsync"
25
- "gorm.io/gorm"
26
- )
27
-
28
- type MetadataStore interface {
29
- // Database
30
- Close() error
31
- DB() *gorm.DB
32
- GetCommitTimestamp() (int64, error)
33
- SetCommitTimestamp(*gorm.DB, int64) error
34
- Transaction() *gorm.DB
35
-
36
- // Ledger state
37
- GetPoolRegistrations(
38
- lcommon.PoolKeyHash,
39
- *gorm.DB,
40
- ) ([]lcommon.PoolRegistrationCertificate, error)
41
- GetStakeRegistrations(
42
- []byte, // stakeKey
43
- *gorm.DB,
44
- ) ([]lcommon.StakeRegistrationCertificate, error)
45
- GetTip(*gorm.DB) (ochainsync.Tip, error)
46
-
47
- GetAccount(
48
- []byte, // stakeKey
49
- *gorm.DB,
50
- ) (models.Account, error)
51
- GetPParams(
52
- uint64, // epoch
53
- *gorm.DB,
54
- ) ([]models.PParams, error)
55
- GetPParamUpdates(
56
- uint64, // epoch
57
- *gorm.DB,
58
- ) ([]models.PParamUpdate, error)
59
- GetUtxo(
60
- []byte, // txId
61
- uint32, // idx
62
- *gorm.DB,
63
- ) (models.Utxo, error)
64
-
65
- SetAccount(
66
- []byte, // stakeKey
67
- []byte, // pkh
68
- []byte, // drep
69
- uint64, // slot
70
- bool, // active
71
- *gorm.DB,
72
- ) error
73
- SetDeregistration(
74
- *lcommon.DeregistrationCertificate,
75
- uint64, // slot
76
- *gorm.DB,
77
- ) error
78
- SetDeregistrationDrep(
79
- *lcommon.DeregistrationDrepCertificate,
80
- uint64, // slot
81
- uint64, // deposit
82
- *gorm.DB,
83
- ) error
84
- SetEpoch(
85
- uint64, // slot
86
- uint64, // epoch
87
- []byte, // nonce
88
- uint, // era
89
- uint, // slotLength
90
- uint, // lengthInSlots
91
- *gorm.DB,
92
- ) error
93
- SetPoolRegistration(
94
- *lcommon.PoolRegistrationCertificate,
95
- uint64, // slot
96
- uint64, // deposit
97
- *gorm.DB,
98
- ) error
99
- SetPoolRetirement(
100
- *lcommon.PoolRetirementCertificate,
101
- uint64, // slot
102
- *gorm.DB,
103
- ) error
104
- SetPParams(
105
- []byte, // pparams
106
- uint64, // slot
107
- uint64, // epoch
108
- uint, // era
109
- *gorm.DB,
110
- ) error
111
- SetPParamUpdate(
112
- []byte, // genesis
113
- []byte, // update
114
- uint64, // slot
115
- uint64, // epoch
116
- *gorm.DB,
117
- ) error
118
- SetRegistration(
119
- *lcommon.RegistrationCertificate,
120
- uint64, // slot
121
- uint64, // deposit
122
- *gorm.DB,
123
- ) error
124
- SetRegistrationDrep(
125
- *lcommon.RegistrationDrepCertificate,
126
- uint64, // slot
127
- uint64, // deposit
128
- *gorm.DB,
129
- ) error
130
- SetStakeDelegation(
131
- *lcommon.StakeDelegationCertificate,
132
- uint64, // slot
133
- *gorm.DB,
134
- ) error
135
- SetStakeDeregistration(
136
- *lcommon.StakeDeregistrationCertificate,
137
- uint64, // slot
138
- *gorm.DB,
139
- ) error
140
- SetStakeRegistration(
141
- *lcommon.StakeRegistrationCertificate,
142
- uint64, // slot
143
- uint64, // deposit
144
- *gorm.DB,
145
- ) error
146
- SetStakeRegistrationDelegation(
147
- *lcommon.StakeRegistrationDelegationCertificate,
148
- uint64, // slot
149
- uint64, // deposit
150
- *gorm.DB,
151
- ) error
152
- SetStakeVoteRegistrationDelegation(
153
- *lcommon.StakeVoteRegistrationDelegationCertificate,
154
- uint64, // slot
155
- uint64, // deposit
156
- *gorm.DB,
157
- ) error
158
- SetTip(
159
- ochainsync.Tip,
160
- *gorm.DB,
161
- ) error
162
- SetUtxo(
163
- []byte, // hash
164
- uint32, // idx
165
- uint64, // slot
166
- []byte, // payment
167
- []byte, // stake
168
- *gorm.DB,
169
- ) error
170
- SetVoteRegistrationDelegation(
171
- *lcommon.VoteRegistrationDelegationCertificate,
172
- uint64, // slot
173
- uint64, // deposit
174
- *gorm.DB,
175
- ) error
176
-
177
- // Helpers
178
- DeleteUtxo(any, *gorm.DB) error
179
- DeleteUtxos([]any, *gorm.DB) error
180
- DeleteUtxosAfterSlot(uint64, *gorm.DB) error
181
- DeleteUtxosBeforeSlot(uint64, *gorm.DB) error
182
- GetEpochLatest(*gorm.DB) (models.Epoch, error)
183
- GetEpochsByEra(uint, *gorm.DB) ([]models.Epoch, error)
184
- GetEpochs(*gorm.DB) ([]models.Epoch, error)
185
- GetUtxosAddedAfterSlot(uint64, *gorm.DB) ([]models.Utxo, error)
186
- GetUtxosByAddress(ledger.Address, *gorm.DB) ([]models.Utxo, error)
187
- GetUtxosDeletedBeforeSlot(uint64, *gorm.DB) ([]models.Utxo, error)
188
- SetUtxoDeletedAtSlot(ledger.TransactionInput, uint64, *gorm.DB) error
189
- SetUtxosNotDeletedAfterSlot(uint64, *gorm.DB) error
190
- }
191
-
192
- // For now, this always returns a sqlite plugin
193
- func New(
194
- pluginName, dataDir string,
195
- logger *slog.Logger,
196
- ) (MetadataStore, error) {
197
- return sqlite.New(dataDir, logger)
198
- }
@@ -1,190 +0,0 @@
1
- // Copyright 2025 Blink Labs Software
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
-
15
- package plugin
16
-
17
- import (
18
- "flag"
19
- "fmt"
20
- "os"
21
- "strconv"
22
- "strings"
23
- )
24
-
25
- type PluginOptionType int
26
-
27
- const (
28
- PluginOptionTypeString PluginOptionType = 1
29
- PluginOptionTypeBool PluginOptionType = 2
30
- PluginOptionTypeInt PluginOptionType = 3
31
- PluginOptionTypeUint PluginOptionType = 4
32
- )
33
-
34
- type PluginOption struct {
35
- Name string
36
- Type PluginOptionType
37
- CustomEnvVar string
38
- CustomFlag string
39
- Description string
40
- DefaultValue interface{}
41
- Dest interface{}
42
- }
43
-
44
- func (p *PluginOption) AddToFlagSet(
45
- fs *flag.FlagSet,
46
- pluginType string,
47
- pluginName string,
48
- ) error {
49
- var flagName string
50
- if p.CustomFlag != "" {
51
- flagName = fmt.Sprintf("%s-%s", pluginType, p.CustomFlag)
52
- } else {
53
- flagName = fmt.Sprintf("%s-%s-%s", pluginType, pluginName, p.Name)
54
- }
55
- switch p.Type {
56
- case PluginOptionTypeString:
57
- fs.StringVar(
58
- p.Dest.(*string),
59
- flagName,
60
- p.DefaultValue.(string),
61
- p.Description,
62
- )
63
- case PluginOptionTypeBool:
64
- fs.BoolVar(
65
- p.Dest.(*bool),
66
- flagName,
67
- p.DefaultValue.(bool),
68
- p.Description,
69
- )
70
- case PluginOptionTypeInt:
71
- fs.IntVar(p.Dest.(*int), flagName, p.DefaultValue.(int), p.Description)
72
- case PluginOptionTypeUint:
73
- fs.UintVar(
74
- p.Dest.(*uint),
75
- flagName,
76
- p.DefaultValue.(uint),
77
- p.Description,
78
- )
79
- default:
80
- return fmt.Errorf(
81
- "unknown plugin option type %d for option %s",
82
- p.Type,
83
- p.Name,
84
- )
85
- }
86
- return nil
87
- }
88
-
89
- func (p *PluginOption) ProcessEnvVars(envPrefix string) error {
90
- envVars := []string{
91
- // Automatically generate env var from specified prefix and option name
92
- strings.ToUpper(
93
- strings.ReplaceAll(
94
- fmt.Sprintf(
95
- "%s%s",
96
- envPrefix,
97
- p.Name,
98
- ),
99
- "-",
100
- "_",
101
- ),
102
- ),
103
- }
104
- // Also check any custom env var specified
105
- if p.CustomEnvVar != "" {
106
- envVars = append(envVars, p.CustomEnvVar)
107
- }
108
- for _, envVar := range envVars {
109
- if value, ok := os.LookupEnv(envVar); ok {
110
- switch p.Type {
111
- case PluginOptionTypeString:
112
- *(p.Dest.(*string)) = value
113
- case PluginOptionTypeBool:
114
- value, err := strconv.ParseBool(value)
115
- if err != nil {
116
- return fmt.Errorf("error processing env vars: %w", err)
117
- }
118
- *(p.Dest.(*bool)) = value
119
- case PluginOptionTypeInt:
120
- // We limit to 32-bit to not get inconsistent behavior on 32-bit platforms
121
- value, err := strconv.ParseInt(value, 10, 32)
122
- if err != nil {
123
- return fmt.Errorf("error processing env vars: %w", err)
124
- }
125
- *(p.Dest.(*int)) = int(value)
126
- case PluginOptionTypeUint:
127
- // We limit to 32-bit to not get inconsistent behavior on 32-bit platforms
128
- value, err := strconv.ParseUint(value, 10, 32)
129
- if err != nil {
130
- return fmt.Errorf("error processing env vars: %w", err)
131
- }
132
- *(p.Dest.(*uint)) = uint(value)
133
- default:
134
- return fmt.Errorf(
135
- "unknown plugin option type %d for option %s",
136
- p.Type,
137
- p.Name,
138
- )
139
- }
140
- }
141
- }
142
- return nil
143
- }
144
-
145
- func (p *PluginOption) ProcessConfig(
146
- pluginData map[interface{}]interface{},
147
- ) error {
148
- if optionData, ok := pluginData[p.Name]; ok {
149
- switch p.Type {
150
- case PluginOptionTypeString:
151
- switch value := optionData.(type) {
152
- case string:
153
- *(p.Dest.(*string)) = value
154
- default:
155
- return fmt.Errorf("invalid value for option '%s': expected string and got %T", p.Name, optionData)
156
- }
157
- case PluginOptionTypeBool:
158
- switch value := optionData.(type) {
159
- case bool:
160
- *(p.Dest.(*bool)) = value
161
- default:
162
- return fmt.Errorf("invalid value for option '%s': expected bool and got %T", p.Name, optionData)
163
- }
164
- case PluginOptionTypeInt:
165
- switch value := optionData.(type) {
166
- case int:
167
- *(p.Dest.(*int)) = value
168
- default:
169
- return fmt.Errorf("invalid value for option '%s': expected int and got %T", p.Name, optionData)
170
- }
171
- case PluginOptionTypeUint:
172
- switch value := optionData.(type) {
173
- case int:
174
- if value < 0 {
175
- return fmt.Errorf("invalid value for option '%s': negative value: %T", p.Name, optionData)
176
- }
177
- *(p.Dest.(*uint)) = uint(value)
178
- default:
179
- return fmt.Errorf("invalid value for option '%s': expected uint and got %T", p.Name, optionData)
180
- }
181
- default:
182
- return fmt.Errorf(
183
- "unknown plugin option type %d for option %s",
184
- p.Type,
185
- p.Name,
186
- )
187
- }
188
- }
189
- return nil
190
- }
@@ -1,20 +0,0 @@
1
- // Copyright 2025 Blink Labs Software
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
-
15
- package plugin
16
-
17
- type Plugin interface {
18
- Start() error
19
- Stop() error
20
- }