@arkiv-network/sdk 0.7.0-dev.1 → 0.8.0-dev.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 (210) hide show
  1. package/README.md +29 -16
  2. package/dist/attr/index.cjs +34 -0
  3. package/dist/attr/index.d.cts +2 -0
  4. package/dist/attr/index.d.ts +2 -0
  5. package/dist/attr/index.js +3 -0
  6. package/dist/attr-BDZ-APg5.js +809 -0
  7. package/dist/attr-BDZ-APg5.js.map +1 -0
  8. package/dist/attr-BvxHN99W.cjs +1029 -0
  9. package/dist/chains/index.cjs +2 -3
  10. package/dist/chains/index.d.cts +22 -60
  11. package/dist/chains/index.d.cts.map +1 -1
  12. package/dist/chains/index.d.ts +22 -60
  13. package/dist/chains/index.d.ts.map +1 -1
  14. package/dist/chains/index.js +2 -2
  15. package/dist/chains-BJrZs6sG.js +57 -0
  16. package/dist/chains-BJrZs6sG.js.map +1 -0
  17. package/dist/chains-BYRTTipa.cjs +73 -0
  18. package/dist/changeOwnership-B7bEgla4.d.cts +509 -0
  19. package/dist/changeOwnership-B7bEgla4.d.cts.map +1 -0
  20. package/dist/changeOwnership-DwgtdSFc.d.ts +509 -0
  21. package/dist/changeOwnership-DwgtdSFc.d.ts.map +1 -0
  22. package/dist/entity/index.cjs +19 -0
  23. package/dist/entity/index.d.cts +4 -0
  24. package/dist/entity/index.d.ts +4 -0
  25. package/dist/entity/index.js +6 -0
  26. package/dist/entity-B0t6sN7F.cjs +71 -0
  27. package/dist/entity-BIp_df9u.js +67 -0
  28. package/dist/entity-BIp_df9u.js.map +1 -0
  29. package/dist/entity-CFhbAv0R.js +70 -0
  30. package/dist/entity-CFhbAv0R.js.map +1 -0
  31. package/dist/entity-wfBnZd91.cjs +98 -0
  32. package/dist/errors-D-eJkGVc.cjs +56 -0
  33. package/dist/errors-DGB8AgT2.js +33 -0
  34. package/dist/errors-DGB8AgT2.js.map +1 -0
  35. package/dist/expiry-BUYIXTGb.cjs +135 -0
  36. package/dist/expiry-BxOlvVWC.d.ts +79 -0
  37. package/dist/expiry-BxOlvVWC.d.ts.map +1 -0
  38. package/dist/expiry-DGRzrSan.js +95 -0
  39. package/dist/expiry-DGRzrSan.js.map +1 -0
  40. package/dist/expiry-DRV29F1r.d.cts +79 -0
  41. package/dist/expiry-DRV29F1r.d.cts.map +1 -0
  42. package/dist/flags-0Vl5rrHq.d.cts +41 -0
  43. package/dist/flags-0Vl5rrHq.d.cts.map +1 -0
  44. package/dist/flags-Ct8k0gpB.cjs +43 -0
  45. package/dist/flags-ZtlvOIIk.js +33 -0
  46. package/dist/flags-ZtlvOIIk.js.map +1 -0
  47. package/dist/flags-wmcMoAnN.d.ts +41 -0
  48. package/dist/flags-wmcMoAnN.d.ts.map +1 -0
  49. package/dist/index-Cgw1u5aY.d.cts +278 -0
  50. package/dist/index-Cgw1u5aY.d.cts.map +1 -0
  51. package/dist/index-ClgIuxJ8.d.ts +159 -0
  52. package/dist/index-ClgIuxJ8.d.ts.map +1 -0
  53. package/dist/index-D0CmtiWT.d.cts +159 -0
  54. package/dist/index-D0CmtiWT.d.cts.map +1 -0
  55. package/dist/index-D8LZt-3J.d.cts +417 -0
  56. package/dist/index-D8LZt-3J.d.cts.map +1 -0
  57. package/dist/index-DVYFaXNV.d.ts +417 -0
  58. package/dist/index-DVYFaXNV.d.ts.map +1 -0
  59. package/dist/index-VCqgn29D.d.ts +278 -0
  60. package/dist/index-VCqgn29D.d.ts.map +1 -0
  61. package/dist/index.cjs +676 -375
  62. package/dist/index.d.cts +247 -208
  63. package/dist/index.d.cts.map +1 -1
  64. package/dist/index.d.ts +247 -208
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +626 -368
  67. package/dist/index.js.map +1 -1
  68. package/dist/payload-Bnw1hrvb.cjs +83 -0
  69. package/dist/payload-CIxSn_DW.js +67 -0
  70. package/dist/payload-CIxSn_DW.js.map +1 -0
  71. package/dist/payload-Dgx3PQeK.d.ts +94 -0
  72. package/dist/payload-Dgx3PQeK.d.ts.map +1 -0
  73. package/dist/payload-P0nWyjLg.d.cts +94 -0
  74. package/dist/payload-P0nWyjLg.d.cts.map +1 -0
  75. package/dist/query/index.cjs +24 -150
  76. package/dist/query/index.d.cts +5 -3
  77. package/dist/query/index.d.ts +5 -3
  78. package/dist/query/index.js +6 -138
  79. package/dist/queryBuilder-BXDvX1K_.cjs +1123 -0
  80. package/dist/queryBuilder-CbLL4pG5.js +963 -0
  81. package/dist/queryBuilder-CbLL4pG5.js.map +1 -0
  82. package/dist/selection-BvK6yX0g.d.cts +433 -0
  83. package/dist/selection-BvK6yX0g.d.cts.map +1 -0
  84. package/dist/selection-fpmI3ADQ.d.ts +433 -0
  85. package/dist/selection-fpmI3ADQ.d.ts.map +1 -0
  86. package/dist/types/index.cjs +3 -3
  87. package/dist/types/index.d.cts +7 -2
  88. package/dist/types/index.d.ts +7 -2
  89. package/dist/types/index.js +3 -3
  90. package/dist/utils/index.cjs +4 -17
  91. package/dist/utils/index.d.cts +3 -17
  92. package/dist/utils/index.d.ts +3 -17
  93. package/dist/utils/index.js +4 -18
  94. package/package.json +26 -5
  95. package/src/actions/public/getEntity.ts +27 -43
  96. package/src/actions/public/getEntityNonce.ts +30 -0
  97. package/src/actions/public/predictEntityKeys.test.ts +143 -0
  98. package/src/actions/public/predictEntityKeys.ts +138 -0
  99. package/src/actions/public/query.ts +33 -69
  100. package/src/actions/public/watchEntityEvents.test.ts +414 -0
  101. package/src/actions/public/watchEntityEvents.ts +225 -0
  102. package/src/actions/wallet/changeOwnership.ts +2 -2
  103. package/src/actions/wallet/createEntity.ts +99 -24
  104. package/src/actions/wallet/extendEntity.ts +37 -13
  105. package/src/actions/wallet/mutateEntities.test.ts +76 -0
  106. package/src/actions/wallet/mutateEntities.ts +19 -21
  107. package/src/actions/wallet/patchEntity.ts +90 -0
  108. package/src/attr/attributes.test.ts +120 -0
  109. package/src/attr/attributes.ts +190 -0
  110. package/src/attr/codec.test.ts +162 -0
  111. package/src/attr/codec.ts +220 -0
  112. package/src/attr/decimal.ts +86 -0
  113. package/src/attr/errors.ts +145 -0
  114. package/src/attr/index.ts +50 -0
  115. package/src/attr/names.ts +106 -0
  116. package/src/attr/types.ts +150 -0
  117. package/src/attr/values.test.ts +271 -0
  118. package/src/attr/values.ts +502 -0
  119. package/src/chains/cheesecake.ts +22 -0
  120. package/src/chains/index.ts +1 -2
  121. package/src/clients/createPublicClient.test.ts +3 -5
  122. package/src/clients/createPublicClient.ts +5 -4
  123. package/src/clients/createWalletClient.test.ts +2 -2
  124. package/src/clients/createWalletClient.ts +13 -7
  125. package/src/clients/decorators/arkivPublic.ts +160 -139
  126. package/src/clients/decorators/arkivWallet.ts +86 -94
  127. package/src/entity/create.test.ts +184 -0
  128. package/src/entity/errors.ts +38 -0
  129. package/src/entity/events.ts +16 -0
  130. package/src/entity/expiry.test.ts +195 -0
  131. package/src/entity/expiry.ts +181 -0
  132. package/src/entity/flags.ts +65 -0
  133. package/src/entity/index.ts +14 -0
  134. package/src/entity/key.ts +68 -0
  135. package/src/entity/operations.ts +134 -0
  136. package/src/entity/params.ts +15 -0
  137. package/src/errors.ts +26 -49
  138. package/src/index.ts +6 -0
  139. package/src/query/engine.ts +59 -139
  140. package/src/query/errors.ts +151 -0
  141. package/src/query/expression.test.ts +286 -0
  142. package/src/query/expression.ts +493 -0
  143. package/src/query/index.ts +40 -4
  144. package/src/query/injection.test.ts +151 -0
  145. package/src/query/queryBuilder.test.ts +322 -637
  146. package/src/query/queryBuilder.ts +126 -359
  147. package/src/query/queryResult.ts +54 -51
  148. package/src/query/selection.test.ts +48 -98
  149. package/src/query/selection.ts +77 -65
  150. package/src/types/entity.test.ts +44 -155
  151. package/src/types/entity.ts +60 -52
  152. package/src/types/events.ts +59 -16
  153. package/src/types/index.ts +20 -17
  154. package/src/types/rpcSchema.ts +69 -37
  155. package/src/utils/arkivTransactions.test.ts +600 -155
  156. package/src/utils/arkivTransactions.ts +181 -190
  157. package/src/utils/chains.test.ts +21 -24
  158. package/src/utils/compression.ts +1 -1
  159. package/src/utils/entities.test.ts +62 -0
  160. package/src/utils/entities.ts +109 -37
  161. package/src/utils/expirationTime.ts +114 -10
  162. package/src/utils/logger.ts +2 -2
  163. package/src/utils/revert.test.ts +99 -0
  164. package/src/utils/revert.ts +145 -0
  165. package/dist/chains-BifaY04V.cjs +0 -108
  166. package/dist/chains-CrtkVbBh.js +0 -86
  167. package/dist/chains-CrtkVbBh.js.map +0 -1
  168. package/dist/consts-Bz0LZQZY.js +0 -7
  169. package/dist/consts-Bz0LZQZY.js.map +0 -1
  170. package/dist/consts-CxT1-RXU.cjs +0 -18
  171. package/dist/entity-BhSXaB23.cjs +0 -81
  172. package/dist/entity-CN41IOrq.d.cts +0 -401
  173. package/dist/entity-CN41IOrq.d.cts.map +0 -1
  174. package/dist/entity-DGfVyB-a.js +0 -71
  175. package/dist/entity-DGfVyB-a.js.map +0 -1
  176. package/dist/entity-NnEVlePN.d.ts +0 -401
  177. package/dist/entity-NnEVlePN.d.ts.map +0 -1
  178. package/dist/index-ClkpS6s_.d.ts +0 -481
  179. package/dist/index-ClkpS6s_.d.ts.map +0 -1
  180. package/dist/index-w4qop0Pe.d.cts +0 -481
  181. package/dist/index-w4qop0Pe.d.cts.map +0 -1
  182. package/dist/payload-BpNUPOnY.js +0 -13
  183. package/dist/payload-BpNUPOnY.js.map +0 -1
  184. package/dist/payload-C2KHOUoj.d.ts +0 -6
  185. package/dist/payload-C2KHOUoj.d.ts.map +0 -1
  186. package/dist/payload-CJN8fTvX.d.cts +0 -6
  187. package/dist/payload-CJN8fTvX.d.cts.map +0 -1
  188. package/dist/payload-D8YLKcJj.cjs +0 -23
  189. package/dist/query/index.js.map +0 -1
  190. package/dist/queryBuilder-BE_XhLLa.js +0 -735
  191. package/dist/queryBuilder-BE_XhLLa.js.map +0 -1
  192. package/dist/queryBuilder-J37buGCi.cjs +0 -865
  193. package/dist/utils/index.d.cts.map +0 -1
  194. package/dist/utils/index.d.ts.map +0 -1
  195. package/dist/utils/index.js.map +0 -1
  196. package/src/actions/public/buildQuery.ts +0 -10
  197. package/src/actions/public/subscribeEntityEvents.ts +0 -93
  198. package/src/actions/wallet/updateEntity.ts +0 -59
  199. package/src/chains/braga.ts +0 -26
  200. package/src/chains/kaolin.ts +0 -29
  201. package/src/query/engine.test.ts +0 -571
  202. package/src/query/predicate.test.ts +0 -461
  203. package/src/query/predicate.ts +0 -144
  204. package/src/query/queryResult.test.ts +0 -270
  205. package/src/query/selectQueryBuilder.test.ts +0 -213
  206. package/src/types/attributes.ts +0 -28
  207. package/src/utils/validation.test.ts +0 -106
  208. package/src/utils/validation.ts +0 -80
  209. /package/dist/{types-Ci4BRClw.js → types-Bx1EKe0v.js} +0 -0
  210. /package/dist/{types-a8gm_IaQ.cjs → types-CKPddlfS.cjs} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/utils/expirationTime.ts"],"sourcesContent":[],"mappings":";;;cAEa;;;EAAA,SAAA,EAAA,CAAA,KAUZ,EAAA,MAAA,EAAA,GADkB,MAAI;;;;;;mBAAJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/utils/expirationTime.ts"],"sourcesContent":[],"mappings":";;;cAEa;;;EAAA,SAAA,EAAA,CAAA,KAUZ,EAAA,MAAA,EAAA,GADkB,MAAI;;;;;;mBAAJ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/utils/expirationTime.ts"],"sourcesContent":["import { BLOCK_TIME } from \"../consts\"\n\nexport const ExpirationTime = {\n fromSeconds: (seconds: number) => seconds,\n fromMinutes: (minutes: number) => minutes * 60,\n fromHours: (hours: number) => hours * 60 * 60,\n fromDays: (days: number) => days * 24 * 60 * 60,\n fromWeeks: (weeks: number) => weeks * 7 * 24 * 60 * 60,\n fromMonths: (months: number) => months * 30 * 24 * 60 * 60,\n fromYears: (years: number) => years * 365 * 24 * 60 * 60,\n fromBlocks: (blocks: number) => blocks * BLOCK_TIME,\n fromDate: (date: Date) => Math.floor(date.getTime() / 1000) - Math.floor(Date.now() / 1000),\n}\n"],"mappings":";;;;AAEA,MAAa,iBAAiB;CAC5B,cAAc,YAAoB;CAClC,cAAc,YAAoB,UAAU;CAC5C,YAAY,UAAkB,QAAQ,KAAK;CAC3C,WAAW,SAAiB,OAAO,KAAK,KAAK;CAC7C,YAAY,UAAkB,QAAQ,IAAI,KAAK,KAAK;CACpD,aAAa,WAAmB,SAAS,KAAK,KAAK,KAAK;CACxD,YAAY,UAAkB,QAAQ,MAAM,KAAK,KAAK;CACtD,aAAa,WAAmB,SAAS;CACzC,WAAW,SAAe,KAAK,MAAM,KAAK,SAAS,GAAG,IAAK,GAAG,KAAK,MAAM,KAAK,KAAK,GAAG,IAAK;CAC5F"}
@@ -1,10 +0,0 @@
1
- import type { ArkivClient } from "../../clients/baseClient"
2
- import { QueryBuilder } from "../../query/queryBuilder"
3
-
4
- /**
5
- * @deprecated Use `client.select()` (see SelectQueryBuilder) instead. `buildQuery()` returns
6
- * only the entity `key` unless data is explicitly opted in to, which is an easy mistake.
7
- */
8
- export async function buildQuery(client: ArkivClient) {
9
- return new QueryBuilder(client)
10
- }
@@ -1,93 +0,0 @@
1
- import { decodeEventLog, type Hex } from "viem"
2
- import type { ArkivClient } from "../../clients/baseClient"
3
- import type { PublicArkivClient } from "../../clients/createPublicClient"
4
- import { EntityOperationType } from "../../types/entity"
5
- import type {
6
- OnEntityCreatedEvent,
7
- OnEntityDeletedEvent,
8
- OnEntityExpiredEvent,
9
- OnEntityExpiresInExtendedEvent,
10
- OnEntityOwnerChangedEvent,
11
- OnEntityUpdatedEvent,
12
- } from "../../types/events"
13
- import { ENTITY_OPERATION_EVENT_ABI } from "../../utils/arkivTransactions"
14
- import { getLogger } from "../../utils/logger"
15
-
16
- const logger = getLogger("actions:public:subscribe-entity-events")
17
-
18
- export const arkivABI = ENTITY_OPERATION_EVENT_ABI
19
-
20
- export async function subscribeEntityEvents(
21
- client: ArkivClient,
22
- {
23
- onError,
24
- onEntityCreated,
25
- onEntityUpdated,
26
- onEntityDeleted,
27
- onEntityExpired,
28
- onEntityExpiresInExtended,
29
- onEntityOwnerChanged,
30
- }: {
31
- onError: ((error: Error) => void) | undefined
32
- onEntityCreated?: ((event: OnEntityCreatedEvent) => void) | undefined
33
- onEntityUpdated?: ((event: OnEntityUpdatedEvent) => void) | undefined
34
- onEntityDeleted?: ((event: OnEntityDeletedEvent) => void) | undefined
35
- onEntityExpired?: ((event: OnEntityExpiredEvent) => void) | undefined
36
- onEntityExpiresInExtended?: ((event: OnEntityExpiresInExtendedEvent) => void) | undefined
37
- onEntityOwnerChanged?: ((event: OnEntityOwnerChangedEvent) => void) | undefined
38
- },
39
- pollingInterval?: number,
40
- fromBlock?: bigint,
41
- ): Promise<() => void> {
42
- const unsubscribe = (client as PublicArkivClient).watchEvent({
43
- pollingInterval: pollingInterval ?? 1000,
44
- fromBlock,
45
- events: arkivABI,
46
- onLogs: (logs) => {
47
- logger("logs from subscribeEntityEvents %o", logs)
48
- for (const log of logs) {
49
- const event = decodeEventLog({
50
- abi: arkivABI,
51
- topics: log.topics as [Hex, ...Hex[]] | [],
52
- data: log.data,
53
- })
54
- logger("event from subscribeEntityEvents %o", event)
55
-
56
- if (event.eventName !== "EntityOperation") continue
57
-
58
- const entityKey = event.args.entityKey as Hex
59
- const owner = event.args.owner
60
- const expiresAt = event.args.expiresAt
61
- const entityHash = event.args.entityHash as Hex
62
- const opType = Number(event.args.operationType)
63
-
64
- switch (opType) {
65
- case EntityOperationType.Create:
66
- onEntityCreated?.({ entityKey, owner, expiresAt, entityHash })
67
- break
68
- case EntityOperationType.Update:
69
- onEntityUpdated?.({ entityKey, owner, expiresAt, entityHash })
70
- break
71
- case EntityOperationType.Extend:
72
- onEntityExpiresInExtended?.({ entityKey, owner, expiresAt, entityHash })
73
- break
74
- case EntityOperationType.Transfer:
75
- onEntityOwnerChanged?.({ entityKey, owner, entityHash })
76
- break
77
- case EntityOperationType.Delete:
78
- onEntityDeleted?.({ entityKey, owner })
79
- break
80
- default:
81
- onEntityExpired?.({ entityKey, owner })
82
- break
83
- }
84
- }
85
- },
86
- onError: (error) => {
87
- console.error("error from subscribeEntityEvents", error)
88
- onError?.(error)
89
- },
90
- })
91
-
92
- return unsubscribe
93
- }
@@ -1,59 +0,0 @@
1
- import type { Hash, Hex } from "viem"
2
- import type { ArkivClient } from "../../clients/baseClient"
3
- import type { Attribute, MimeType, TxParams } from "../../types"
4
- import { sendArkivTransaction } from "../../utils/arkivTransactions"
5
- import { getLogger } from "../../utils/logger"
6
-
7
- const logger = getLogger("actions:wallet:update-entity")
8
-
9
- /**
10
- * Parameters for the updateEntity function.
11
- * - entityKey: The key of the entity to update.
12
- * - payload: The payload of the entity.
13
- * - attributes: The attributes of the entity. Attribute values may be strings
14
- * or numbers, but numeric values **must be integers**. To store a non-integer,
15
- * scale it to an integer (e.g. `1.5` -> `1500`) to preserve numeric ordering,
16
- * or pass it as a string (e.g. `"1.5"`). A non-integer numeric value throws an
17
- * {@link InvalidAttributeError}.
18
- * - contentType: The content type of the entity.
19
- * - expiresIn: How long until the entity expires, in seconds. Because Arkiv
20
- * measures expiration in blocks (1 block = 2 seconds), this **must be a
21
- * positive integer and a multiple of the block time (2 seconds)**.
22
- * Invalid values throw an {@link InvalidExpirationError}.
23
- */
24
- export type UpdateEntityParameters = {
25
- entityKey: Hex
26
- payload: Uint8Array
27
- /** Entity attributes. Numeric values must be integers (scale non-integers, e.g. `1.5` -> `1500`, or use a string). Throws {@link InvalidAttributeError} otherwise. */
28
- attributes: Attribute[]
29
- contentType: MimeType | string
30
- /** Seconds until expiry. Must be a positive integer and a multiple of the 2s block time.
31
- * Throws {@link InvalidExpirationError} otherwise. */
32
- expiresIn: number
33
- }
34
-
35
- /**
36
- * Return type for the updateEntity function.
37
- * - entityKey: The key of the entity.
38
- * - txHash: The transaction hash.
39
- */
40
- export type UpdateEntityReturnType = {
41
- entityKey: Hex
42
- txHash: Hash
43
- }
44
-
45
- export async function updateEntity(
46
- client: ArkivClient,
47
- data: UpdateEntityParameters,
48
- txParams?: TxParams,
49
- ): Promise<UpdateEntityReturnType> {
50
- logger("updateEntity %o", data)
51
- const { receipt } = await sendArkivTransaction(client, { updates: [data] }, txParams)
52
-
53
- logger("Receipt from updateEntity %o", receipt)
54
-
55
- return {
56
- txHash: receipt.transactionHash as Hash,
57
- entityKey: data.entityKey,
58
- }
59
- }
@@ -1,26 +0,0 @@
1
- import { defineChain } from "viem"
2
-
3
- export const braga = defineChain({
4
- id: 60138453102,
5
- name: "Braga",
6
- network: "braga",
7
- nativeCurrency: {
8
- name: "Golem",
9
- symbol: "GLM",
10
- decimals: 18,
11
- },
12
- rpcUrls: {
13
- default: {
14
- http: ["https://braga.hoodi.arkiv.network/rpc"],
15
- webSocket: ["wss://braga.hoodi.arkiv.network/rpc/ws"],
16
- },
17
- },
18
- blockExplorers: {
19
- default: {
20
- name: "Braga Arkiv Explorer",
21
- url: "https://explorer.braga.hoodi.arkiv.network",
22
- apiUrl: "https://explorer.braga.hoodi.arkiv.network/api",
23
- },
24
- },
25
- testnet: true,
26
- })
@@ -1,29 +0,0 @@
1
- import { defineChain } from "viem"
2
-
3
- /**
4
- * @deprecated The kaolin network is getting removed on may 15th 2026. Migration guide: https://docs.arkiv.network/networks/migrate-from-kaolin/
5
- */
6
- export const kaolin = defineChain({
7
- id: 60138453025,
8
- name: "Kaolin",
9
- network: "kaolin",
10
- nativeCurrency: {
11
- name: "Ethereum",
12
- symbol: "ETH",
13
- decimals: 18,
14
- },
15
- rpcUrls: {
16
- default: {
17
- http: ["https://kaolin.hoodi.arkiv.network/rpc"],
18
- webSocket: ["wss://kaolin.hoodi.arkiv.network/rpc/ws"],
19
- },
20
- },
21
- blockExplorers: {
22
- default: {
23
- name: "Kaolin Arkiv Explorer",
24
- url: "https://explorer.kaolin.hoodi.arkiv.network",
25
- apiUrl: "https://explorer.kaolin.hoodi.arkiv.network/api",
26
- },
27
- },
28
- testnet: true,
29
- })