@feelyourprotocol/util 8141.0.0

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 (223) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +297 -0
  3. package/dist/cjs/account.d.ts +165 -0
  4. package/dist/cjs/account.d.ts.map +1 -0
  5. package/dist/cjs/account.js +530 -0
  6. package/dist/cjs/account.js.map +1 -0
  7. package/dist/cjs/address.d.ts +67 -0
  8. package/dist/cjs/address.d.ts.map +1 -0
  9. package/dist/cjs/address.js +136 -0
  10. package/dist/cjs/address.js.map +1 -0
  11. package/dist/cjs/authorization.d.ts +41 -0
  12. package/dist/cjs/authorization.d.ts.map +1 -0
  13. package/dist/cjs/authorization.js +135 -0
  14. package/dist/cjs/authorization.js.map +1 -0
  15. package/dist/cjs/bal.d.ts +129 -0
  16. package/dist/cjs/bal.d.ts.map +1 -0
  17. package/dist/cjs/bal.js +529 -0
  18. package/dist/cjs/bal.js.map +1 -0
  19. package/dist/cjs/binaryTree.d.ts +148 -0
  20. package/dist/cjs/binaryTree.d.ts.map +1 -0
  21. package/dist/cjs/binaryTree.js +240 -0
  22. package/dist/cjs/binaryTree.js.map +1 -0
  23. package/dist/cjs/blobs.d.ts +76 -0
  24. package/dist/cjs/blobs.d.ts.map +1 -0
  25. package/dist/cjs/blobs.js +175 -0
  26. package/dist/cjs/blobs.js.map +1 -0
  27. package/dist/cjs/bytes.d.ts +291 -0
  28. package/dist/cjs/bytes.d.ts.map +1 -0
  29. package/dist/cjs/bytes.js +606 -0
  30. package/dist/cjs/bytes.js.map +1 -0
  31. package/dist/cjs/constants.d.ts +91 -0
  32. package/dist/cjs/constants.d.ts.map +1 -0
  33. package/dist/cjs/constants.js +97 -0
  34. package/dist/cjs/constants.js.map +1 -0
  35. package/dist/cjs/db.d.ts +65 -0
  36. package/dist/cjs/db.d.ts.map +1 -0
  37. package/dist/cjs/db.js +14 -0
  38. package/dist/cjs/db.js.map +1 -0
  39. package/dist/cjs/env.d.ts +9 -0
  40. package/dist/cjs/env.d.ts.map +1 -0
  41. package/dist/cjs/env.js +13 -0
  42. package/dist/cjs/env.js.map +1 -0
  43. package/dist/cjs/errors.d.ts +3 -0
  44. package/dist/cjs/errors.d.ts.map +1 -0
  45. package/dist/cjs/errors.js +19 -0
  46. package/dist/cjs/errors.js.map +1 -0
  47. package/dist/cjs/helpers.d.ts +21 -0
  48. package/dist/cjs/helpers.d.ts.map +1 -0
  49. package/dist/cjs/helpers.js +50 -0
  50. package/dist/cjs/helpers.js.map +1 -0
  51. package/dist/cjs/index.d.ts +67 -0
  52. package/dist/cjs/index.d.ts.map +1 -0
  53. package/dist/cjs/index.js +93 -0
  54. package/dist/cjs/index.js.map +1 -0
  55. package/dist/cjs/internal.d.ts +72 -0
  56. package/dist/cjs/internal.d.ts.map +1 -0
  57. package/dist/cjs/internal.js +182 -0
  58. package/dist/cjs/internal.js.map +1 -0
  59. package/dist/cjs/kzg.d.ts +14 -0
  60. package/dist/cjs/kzg.d.ts.map +1 -0
  61. package/dist/cjs/kzg.js +3 -0
  62. package/dist/cjs/kzg.js.map +1 -0
  63. package/dist/cjs/lock.d.ts +15 -0
  64. package/dist/cjs/lock.d.ts.map +1 -0
  65. package/dist/cjs/lock.js +45 -0
  66. package/dist/cjs/lock.js.map +1 -0
  67. package/dist/cjs/mapDB.d.ts +17 -0
  68. package/dist/cjs/mapDB.d.ts.map +1 -0
  69. package/dist/cjs/mapDB.js +46 -0
  70. package/dist/cjs/mapDB.js.map +1 -0
  71. package/dist/cjs/package.json +3 -0
  72. package/dist/cjs/provider.d.ts +46 -0
  73. package/dist/cjs/provider.d.ts.map +1 -0
  74. package/dist/cjs/provider.js +84 -0
  75. package/dist/cjs/provider.js.map +1 -0
  76. package/dist/cjs/request.d.ts +20 -0
  77. package/dist/cjs/request.d.ts.map +1 -0
  78. package/dist/cjs/request.js +35 -0
  79. package/dist/cjs/request.js.map +1 -0
  80. package/dist/cjs/signature.d.ts +47 -0
  81. package/dist/cjs/signature.d.ts.map +1 -0
  82. package/dist/cjs/signature.js +147 -0
  83. package/dist/cjs/signature.js.map +1 -0
  84. package/dist/cjs/tasks.d.ts +32 -0
  85. package/dist/cjs/tasks.d.ts.map +1 -0
  86. package/dist/cjs/tasks.js +51 -0
  87. package/dist/cjs/tasks.js.map +1 -0
  88. package/dist/cjs/types.d.ts +64 -0
  89. package/dist/cjs/types.d.ts.map +1 -0
  90. package/dist/cjs/types.js +78 -0
  91. package/dist/cjs/types.js.map +1 -0
  92. package/dist/cjs/units.d.ts +22 -0
  93. package/dist/cjs/units.d.ts.map +1 -0
  94. package/dist/cjs/units.js +51 -0
  95. package/dist/cjs/units.js.map +1 -0
  96. package/dist/cjs/withdrawal.d.ts +72 -0
  97. package/dist/cjs/withdrawal.d.ts.map +1 -0
  98. package/dist/cjs/withdrawal.js +93 -0
  99. package/dist/cjs/withdrawal.js.map +1 -0
  100. package/dist/esm/account.d.ts +165 -0
  101. package/dist/esm/account.d.ts.map +1 -0
  102. package/dist/esm/account.js +505 -0
  103. package/dist/esm/account.js.map +1 -0
  104. package/dist/esm/address.d.ts +67 -0
  105. package/dist/esm/address.d.ts.map +1 -0
  106. package/dist/esm/address.js +125 -0
  107. package/dist/esm/address.js.map +1 -0
  108. package/dist/esm/authorization.d.ts +41 -0
  109. package/dist/esm/authorization.d.ts.map +1 -0
  110. package/dist/esm/authorization.js +126 -0
  111. package/dist/esm/authorization.js.map +1 -0
  112. package/dist/esm/bal.d.ts +129 -0
  113. package/dist/esm/bal.d.ts.map +1 -0
  114. package/dist/esm/bal.js +522 -0
  115. package/dist/esm/bal.js.map +1 -0
  116. package/dist/esm/binaryTree.d.ts +148 -0
  117. package/dist/esm/binaryTree.d.ts.map +1 -0
  118. package/dist/esm/binaryTree.js +226 -0
  119. package/dist/esm/binaryTree.js.map +1 -0
  120. package/dist/esm/blobs.d.ts +76 -0
  121. package/dist/esm/blobs.d.ts.map +1 -0
  122. package/dist/esm/blobs.js +163 -0
  123. package/dist/esm/blobs.js.map +1 -0
  124. package/dist/esm/bytes.d.ts +291 -0
  125. package/dist/esm/bytes.d.ts.map +1 -0
  126. package/dist/esm/bytes.js +562 -0
  127. package/dist/esm/bytes.js.map +1 -0
  128. package/dist/esm/constants.d.ts +91 -0
  129. package/dist/esm/constants.d.ts.map +1 -0
  130. package/dist/esm/constants.js +94 -0
  131. package/dist/esm/constants.js.map +1 -0
  132. package/dist/esm/db.d.ts +65 -0
  133. package/dist/esm/db.d.ts.map +1 -0
  134. package/dist/esm/db.js +11 -0
  135. package/dist/esm/db.js.map +1 -0
  136. package/dist/esm/env.d.ts +9 -0
  137. package/dist/esm/env.d.ts.map +1 -0
  138. package/dist/esm/env.js +9 -0
  139. package/dist/esm/env.js.map +1 -0
  140. package/dist/esm/errors.d.ts +3 -0
  141. package/dist/esm/errors.d.ts.map +1 -0
  142. package/dist/esm/errors.js +14 -0
  143. package/dist/esm/errors.js.map +1 -0
  144. package/dist/esm/helpers.d.ts +21 -0
  145. package/dist/esm/helpers.d.ts.map +1 -0
  146. package/dist/esm/helpers.js +43 -0
  147. package/dist/esm/helpers.js.map +1 -0
  148. package/dist/esm/index.d.ts +67 -0
  149. package/dist/esm/index.d.ts.map +1 -0
  150. package/dist/esm/index.js +67 -0
  151. package/dist/esm/index.js.map +1 -0
  152. package/dist/esm/internal.d.ts +72 -0
  153. package/dist/esm/internal.d.ts.map +1 -0
  154. package/dist/esm/internal.js +170 -0
  155. package/dist/esm/internal.js.map +1 -0
  156. package/dist/esm/kzg.d.ts +14 -0
  157. package/dist/esm/kzg.d.ts.map +1 -0
  158. package/dist/esm/kzg.js +2 -0
  159. package/dist/esm/kzg.js.map +1 -0
  160. package/dist/esm/lock.d.ts +15 -0
  161. package/dist/esm/lock.d.ts.map +1 -0
  162. package/dist/esm/lock.js +41 -0
  163. package/dist/esm/lock.js.map +1 -0
  164. package/dist/esm/mapDB.d.ts +17 -0
  165. package/dist/esm/mapDB.d.ts.map +1 -0
  166. package/dist/esm/mapDB.js +42 -0
  167. package/dist/esm/mapDB.js.map +1 -0
  168. package/dist/esm/package.json +3 -0
  169. package/dist/esm/provider.d.ts +46 -0
  170. package/dist/esm/provider.d.ts.map +1 -0
  171. package/dist/esm/provider.js +79 -0
  172. package/dist/esm/provider.js.map +1 -0
  173. package/dist/esm/request.d.ts +20 -0
  174. package/dist/esm/request.d.ts.map +1 -0
  175. package/dist/esm/request.js +30 -0
  176. package/dist/esm/request.js.map +1 -0
  177. package/dist/esm/signature.d.ts +47 -0
  178. package/dist/esm/signature.d.ts.map +1 -0
  179. package/dist/esm/signature.js +137 -0
  180. package/dist/esm/signature.js.map +1 -0
  181. package/dist/esm/tasks.d.ts +32 -0
  182. package/dist/esm/tasks.d.ts.map +1 -0
  183. package/dist/esm/tasks.js +47 -0
  184. package/dist/esm/tasks.js.map +1 -0
  185. package/dist/esm/types.d.ts +64 -0
  186. package/dist/esm/types.d.ts.map +1 -0
  187. package/dist/esm/types.js +71 -0
  188. package/dist/esm/types.js.map +1 -0
  189. package/dist/esm/units.d.ts +22 -0
  190. package/dist/esm/units.d.ts.map +1 -0
  191. package/dist/esm/units.js +46 -0
  192. package/dist/esm/units.js.map +1 -0
  193. package/dist/esm/withdrawal.d.ts +72 -0
  194. package/dist/esm/withdrawal.d.ts.map +1 -0
  195. package/dist/esm/withdrawal.js +86 -0
  196. package/dist/esm/withdrawal.js.map +1 -0
  197. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
  198. package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
  199. package/package.json +116 -0
  200. package/src/account.ts +630 -0
  201. package/src/address.ts +158 -0
  202. package/src/authorization.ts +180 -0
  203. package/src/bal.ts +761 -0
  204. package/src/binaryTree.ts +353 -0
  205. package/src/blobs.ts +209 -0
  206. package/src/bytes.ts +659 -0
  207. package/src/constants.ts +125 -0
  208. package/src/db.ts +86 -0
  209. package/src/env.ts +9 -0
  210. package/src/errors.ts +28 -0
  211. package/src/helpers.ts +46 -0
  212. package/src/index.ts +88 -0
  213. package/src/internal.ts +212 -0
  214. package/src/kzg.ts +24 -0
  215. package/src/lock.ts +42 -0
  216. package/src/mapDB.ts +57 -0
  217. package/src/provider.ts +109 -0
  218. package/src/request.ts +48 -0
  219. package/src/signature.ts +202 -0
  220. package/src/tasks.ts +59 -0
  221. package/src/types.ts +177 -0
  222. package/src/units.ts +56 -0
  223. package/src/withdrawal.ts +133 -0
@@ -0,0 +1,133 @@
1
+ import { Address } from './address.ts'
2
+ import { bigIntToHex, bytesToHex, toBytes } from './bytes.ts'
3
+ import { BIGINT_0 } from './constants.ts'
4
+ import { TypeOutput, toType } from './types.ts'
5
+
6
+ import type { AddressLike, BigIntLike, PrefixedHexString } from './types.ts'
7
+
8
+ /**
9
+ * Flexible input data type for EIP-4895 withdrawal data with amount in Gwei to
10
+ * match CL representation and for eventual ssz withdrawalsRoot
11
+ */
12
+ export type WithdrawalData = {
13
+ index: BigIntLike
14
+ validatorIndex: BigIntLike
15
+ address: AddressLike
16
+ amount: BigIntLike
17
+ }
18
+
19
+ /**
20
+ * JSON RPC interface for EIP-4895 withdrawal data with amount in Gwei to
21
+ * match CL representation and for eventual ssz withdrawalsRoot
22
+ */
23
+ export interface JSONRPCWithdrawal {
24
+ index: PrefixedHexString // QUANTITY - bigint 8 bytes
25
+ validatorIndex: PrefixedHexString // QUANTITY - bigint 8 bytes
26
+ address: PrefixedHexString // DATA, 20 Bytes address to withdraw to
27
+ amount: PrefixedHexString // QUANTITY - bigint amount in Gwei 8 bytes
28
+ }
29
+
30
+ export type WithdrawalBytes = [Uint8Array, Uint8Array, Uint8Array, Uint8Array]
31
+ /**
32
+ * Convert a withdrawal to a byte array
33
+ * @param withdrawal the withdrawal to convert
34
+ * @returns byte array of the withdrawal
35
+ */
36
+ export function withdrawalToBytesArray(withdrawal: Withdrawal | WithdrawalData): WithdrawalBytes {
37
+ const { index, validatorIndex, address, amount } = withdrawal
38
+ const indexBytes =
39
+ toType(index, TypeOutput.BigInt) === BIGINT_0
40
+ ? new Uint8Array()
41
+ : toType(index, TypeOutput.Uint8Array)
42
+ const validatorIndexBytes =
43
+ toType(validatorIndex, TypeOutput.BigInt) === BIGINT_0
44
+ ? new Uint8Array()
45
+ : toType(validatorIndex, TypeOutput.Uint8Array)
46
+ const addressBytes =
47
+ address instanceof Address ? address.bytes : toType(address, TypeOutput.Uint8Array)
48
+
49
+ const amountBytes =
50
+ toType(amount, TypeOutput.BigInt) === BIGINT_0
51
+ ? new Uint8Array()
52
+ : toType(amount, TypeOutput.Uint8Array)
53
+
54
+ return [indexBytes, validatorIndexBytes, addressBytes, amountBytes]
55
+ }
56
+ /**
57
+ * Representation of EIP-4895 withdrawal data
58
+ */
59
+ export class Withdrawal {
60
+ public readonly index: bigint
61
+ public readonly validatorIndex: bigint
62
+ public readonly address: Address
63
+ public readonly amount: bigint
64
+
65
+ /**
66
+ * This constructor assigns and validates the values.
67
+ * Use the static factory methods to assist in creating a Withdrawal object from varying data types.
68
+ * Its amount is in Gwei to match CL representation and for eventual ssz withdrawalsRoot
69
+ */
70
+ constructor(index: bigint, validatorIndex: bigint, address: Address, amount: bigint) {
71
+ this.index = index
72
+ this.validatorIndex = validatorIndex
73
+ this.address = address
74
+ this.amount = amount
75
+ }
76
+
77
+ raw() {
78
+ return withdrawalToBytesArray(this)
79
+ }
80
+
81
+ toValue() {
82
+ return {
83
+ index: this.index,
84
+ validatorIndex: this.validatorIndex,
85
+ address: this.address.bytes,
86
+ amount: this.amount,
87
+ }
88
+ }
89
+
90
+ toJSON() {
91
+ return {
92
+ index: bigIntToHex(this.index),
93
+ validatorIndex: bigIntToHex(this.validatorIndex),
94
+ address: bytesToHex(this.address.bytes),
95
+ amount: bigIntToHex(this.amount),
96
+ }
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Creates a validator withdrawal request to be submitted to the consensus layer
102
+ * @param withdrawalData the consensus layer index and validator index values for the
103
+ * validator requesting the withdrawal and the address and withdrawal amount of the request
104
+ * @returns a {@link Withdrawal} object
105
+ */
106
+ export function createWithdrawal(withdrawalData: WithdrawalData) {
107
+ const {
108
+ index: indexData,
109
+ validatorIndex: validatorIndexData,
110
+ address: addressData,
111
+ amount: amountData,
112
+ } = withdrawalData
113
+ const index = toType(indexData, TypeOutput.BigInt)
114
+ const validatorIndex = toType(validatorIndexData, TypeOutput.BigInt)
115
+ const address = addressData instanceof Address ? addressData : new Address(toBytes(addressData))
116
+ const amount = toType(amountData, TypeOutput.BigInt)
117
+
118
+ return new Withdrawal(index, validatorIndex, address, amount)
119
+ }
120
+
121
+ /**
122
+ * Creates a validator withdrawal request to be submitted to the consensus layer from
123
+ * an RLP list
124
+ * @param withdrawalArray decoded RLP list of withdrawal data elements
125
+ * @returns a {@link Withdrawal} object
126
+ */
127
+ export function createWithdrawalFromBytesArray(withdrawalArray: WithdrawalBytes) {
128
+ if (withdrawalArray.length !== 4) {
129
+ throw Error(`Invalid withdrawalArray length expected=4 actual=${withdrawalArray.length}`)
130
+ }
131
+ const [index, validatorIndex, address, amount] = withdrawalArray
132
+ return createWithdrawal({ index, validatorIndex, address, amount })
133
+ }