@feelyourprotocol/block 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 (133) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +466 -0
  3. package/dist/cjs/block/block.d.ts +147 -0
  4. package/dist/cjs/block/block.d.ts.map +1 -0
  5. package/dist/cjs/block/block.js +415 -0
  6. package/dist/cjs/block/block.js.map +1 -0
  7. package/dist/cjs/block/constructors.d.ts +77 -0
  8. package/dist/cjs/block/constructors.d.ts.map +1 -0
  9. package/dist/cjs/block/constructors.js +298 -0
  10. package/dist/cjs/block/constructors.js.map +1 -0
  11. package/dist/cjs/block/index.d.ts +3 -0
  12. package/dist/cjs/block/index.d.ts.map +1 -0
  13. package/dist/cjs/block/index.js +19 -0
  14. package/dist/cjs/block/index.js.map +1 -0
  15. package/dist/cjs/consensus/clique.d.ts +52 -0
  16. package/dist/cjs/consensus/clique.d.ts.map +1 -0
  17. package/dist/cjs/consensus/clique.js +144 -0
  18. package/dist/cjs/consensus/clique.js.map +1 -0
  19. package/dist/cjs/consensus/ethash.d.ts +9 -0
  20. package/dist/cjs/consensus/ethash.d.ts.map +1 -0
  21. package/dist/cjs/consensus/ethash.js +13 -0
  22. package/dist/cjs/consensus/ethash.js.map +1 -0
  23. package/dist/cjs/consensus/index.d.ts +3 -0
  24. package/dist/cjs/consensus/index.d.ts.map +1 -0
  25. package/dist/cjs/consensus/index.js +29 -0
  26. package/dist/cjs/consensus/index.js.map +1 -0
  27. package/dist/cjs/from-beacon-payload.d.ts +36 -0
  28. package/dist/cjs/from-beacon-payload.d.ts.map +1 -0
  29. package/dist/cjs/from-beacon-payload.js +48 -0
  30. package/dist/cjs/from-beacon-payload.js.map +1 -0
  31. package/dist/cjs/header/constructors.d.ts +39 -0
  32. package/dist/cjs/header/constructors.d.ts.map +1 -0
  33. package/dist/cjs/header/constructors.js +127 -0
  34. package/dist/cjs/header/constructors.js.map +1 -0
  35. package/dist/cjs/header/header.d.ts +134 -0
  36. package/dist/cjs/header/header.d.ts.map +1 -0
  37. package/dist/cjs/header/header.js +699 -0
  38. package/dist/cjs/header/header.js.map +1 -0
  39. package/dist/cjs/header/index.d.ts +3 -0
  40. package/dist/cjs/header/index.d.ts.map +1 -0
  41. package/dist/cjs/header/index.js +19 -0
  42. package/dist/cjs/header/index.js.map +1 -0
  43. package/dist/cjs/helpers.d.ts +59 -0
  44. package/dist/cjs/helpers.d.ts.map +1 -0
  45. package/dist/cjs/helpers.js +172 -0
  46. package/dist/cjs/helpers.js.map +1 -0
  47. package/dist/cjs/index.d.ts +8 -0
  48. package/dist/cjs/index.d.ts.map +1 -0
  49. package/dist/cjs/index.js +31 -0
  50. package/dist/cjs/index.js.map +1 -0
  51. package/dist/cjs/package.json +3 -0
  52. package/dist/cjs/params.d.ts +3 -0
  53. package/dist/cjs/params.d.ts.map +1 -0
  54. package/dist/cjs/params.js +97 -0
  55. package/dist/cjs/params.js.map +1 -0
  56. package/dist/cjs/types.d.ts +228 -0
  57. package/dist/cjs/types.d.ts.map +1 -0
  58. package/dist/cjs/types.js +3 -0
  59. package/dist/cjs/types.js.map +1 -0
  60. package/dist/esm/block/block.d.ts +147 -0
  61. package/dist/esm/block/block.d.ts.map +1 -0
  62. package/dist/esm/block/block.js +411 -0
  63. package/dist/esm/block/block.js.map +1 -0
  64. package/dist/esm/block/constructors.d.ts +77 -0
  65. package/dist/esm/block/constructors.d.ts.map +1 -0
  66. package/dist/esm/block/constructors.js +286 -0
  67. package/dist/esm/block/constructors.js.map +1 -0
  68. package/dist/esm/block/index.d.ts +3 -0
  69. package/dist/esm/block/index.d.ts.map +1 -0
  70. package/dist/esm/block/index.js +3 -0
  71. package/dist/esm/block/index.js.map +1 -0
  72. package/dist/esm/consensus/clique.d.ts +52 -0
  73. package/dist/esm/consensus/clique.d.ts.map +1 -0
  74. package/dist/esm/consensus/clique.js +132 -0
  75. package/dist/esm/consensus/clique.js.map +1 -0
  76. package/dist/esm/consensus/ethash.d.ts +9 -0
  77. package/dist/esm/consensus/ethash.d.ts.map +1 -0
  78. package/dist/esm/consensus/ethash.js +10 -0
  79. package/dist/esm/consensus/ethash.js.map +1 -0
  80. package/dist/esm/consensus/index.d.ts +3 -0
  81. package/dist/esm/consensus/index.d.ts.map +1 -0
  82. package/dist/esm/consensus/index.js +3 -0
  83. package/dist/esm/consensus/index.js.map +1 -0
  84. package/dist/esm/from-beacon-payload.d.ts +36 -0
  85. package/dist/esm/from-beacon-payload.d.ts.map +1 -0
  86. package/dist/esm/from-beacon-payload.js +45 -0
  87. package/dist/esm/from-beacon-payload.js.map +1 -0
  88. package/dist/esm/header/constructors.d.ts +39 -0
  89. package/dist/esm/header/constructors.d.ts.map +1 -0
  90. package/dist/esm/header/constructors.js +120 -0
  91. package/dist/esm/header/constructors.js.map +1 -0
  92. package/dist/esm/header/header.d.ts +134 -0
  93. package/dist/esm/header/header.d.ts.map +1 -0
  94. package/dist/esm/header/header.js +695 -0
  95. package/dist/esm/header/header.js.map +1 -0
  96. package/dist/esm/header/index.d.ts +3 -0
  97. package/dist/esm/header/index.d.ts.map +1 -0
  98. package/dist/esm/header/index.js +3 -0
  99. package/dist/esm/header/index.js.map +1 -0
  100. package/dist/esm/helpers.d.ts +59 -0
  101. package/dist/esm/helpers.d.ts.map +1 -0
  102. package/dist/esm/helpers.js +161 -0
  103. package/dist/esm/helpers.js.map +1 -0
  104. package/dist/esm/index.d.ts +8 -0
  105. package/dist/esm/index.d.ts.map +1 -0
  106. package/dist/esm/index.js +8 -0
  107. package/dist/esm/index.js.map +1 -0
  108. package/dist/esm/package.json +3 -0
  109. package/dist/esm/params.d.ts +3 -0
  110. package/dist/esm/params.d.ts.map +1 -0
  111. package/dist/esm/params.js +94 -0
  112. package/dist/esm/params.js.map +1 -0
  113. package/dist/esm/types.d.ts +228 -0
  114. package/dist/esm/types.d.ts.map +1 -0
  115. package/dist/esm/types.js +2 -0
  116. package/dist/esm/types.js.map +1 -0
  117. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
  118. package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
  119. package/package.json +75 -0
  120. package/src/block/block.ts +526 -0
  121. package/src/block/constructors.ts +407 -0
  122. package/src/block/index.ts +2 -0
  123. package/src/consensus/clique.ts +171 -0
  124. package/src/consensus/ethash.ts +11 -0
  125. package/src/consensus/index.ts +12 -0
  126. package/src/from-beacon-payload.ts +82 -0
  127. package/src/header/constructors.ts +169 -0
  128. package/src/header/header.ts +890 -0
  129. package/src/header/index.ts +2 -0
  130. package/src/helpers.ts +223 -0
  131. package/src/index.ts +13 -0
  132. package/src/params.ts +95 -0
  133. package/src/types.ts +254 -0
@@ -0,0 +1,169 @@
1
+ import { RLP } from '@feelyourprotocol/rlp'
2
+ import { EthereumJSErrorWithoutCode, bigIntToBytes, equalsBytes } from '@feelyourprotocol/util'
3
+
4
+ import { generateCliqueBlockExtraData } from '../consensus/clique.ts'
5
+ import { numberToHex, valuesArrayToHeaderData } from '../helpers.ts'
6
+ import { BlockHeader } from '../index.ts'
7
+
8
+ import type { BlockHeaderBytes, BlockOptions, HeaderData, JSONRPCBlock } from '../types.ts'
9
+
10
+ /**
11
+ * Static constructor to create a block header from a header data dictionary
12
+ *
13
+ * @param headerData
14
+ * @param opts
15
+ */
16
+ export function createBlockHeader(headerData: HeaderData = {}, opts: BlockOptions = {}) {
17
+ return new BlockHeader(headerData, opts)
18
+ }
19
+
20
+ /**
21
+ * Static constructor to create a block header from an array of bytes values
22
+ *
23
+ * @param values
24
+ * @param opts
25
+ */
26
+ export function createBlockHeaderFromBytesArray(values: BlockHeaderBytes, opts: BlockOptions = {}) {
27
+ const headerData = valuesArrayToHeaderData(values)
28
+ const { number, baseFeePerGas, excessBlobGas, blobGasUsed, parentBeaconBlockRoot, requestsHash } =
29
+ headerData
30
+ const header = createBlockHeader(headerData, opts)
31
+ if (header.common.isActivatedEIP(1559) && baseFeePerGas === undefined) {
32
+ const eip1559ActivationBlock = bigIntToBytes(header.common.eipBlock(1559)!)
33
+ if (
34
+ eip1559ActivationBlock !== undefined &&
35
+ equalsBytes(eip1559ActivationBlock, number as Uint8Array)
36
+ ) {
37
+ throw EthereumJSErrorWithoutCode('invalid header. baseFeePerGas should be provided')
38
+ }
39
+ }
40
+ if (header.common.isActivatedEIP(4844)) {
41
+ if (excessBlobGas === undefined) {
42
+ throw EthereumJSErrorWithoutCode('invalid header. excessBlobGas should be provided')
43
+ } else if (blobGasUsed === undefined) {
44
+ throw EthereumJSErrorWithoutCode('invalid header. blobGasUsed should be provided')
45
+ }
46
+ }
47
+ if (header.common.isActivatedEIP(4788) && parentBeaconBlockRoot === undefined) {
48
+ throw EthereumJSErrorWithoutCode('invalid header. parentBeaconBlockRoot should be provided')
49
+ }
50
+
51
+ if (header.common.isActivatedEIP(7685) && requestsHash === undefined) {
52
+ throw EthereumJSErrorWithoutCode('invalid header. requestsHash should be provided')
53
+ }
54
+ if (header.common.isActivatedEIP(7928) && header.blockAccessListHash === undefined) {
55
+ throw EthereumJSErrorWithoutCode('invalid header. blockAccessListHash should be provided')
56
+ }
57
+ if (header.common.isActivatedEIP(7843) && header.slotNumber === undefined) {
58
+ throw EthereumJSErrorWithoutCode('invalid header. slotNumber should be provided')
59
+ }
60
+ return header
61
+ }
62
+
63
+ /**
64
+ * Static constructor to create a block header from a RLP-serialized header
65
+ *
66
+ * @param serializedHeaderData
67
+ * @param opts
68
+ */
69
+ export function createBlockHeaderFromRLP(
70
+ serializedHeaderData: Uint8Array,
71
+ opts: BlockOptions = {},
72
+ ) {
73
+ const values = RLP.decode(serializedHeaderData)
74
+ if (!Array.isArray(values)) {
75
+ throw EthereumJSErrorWithoutCode('Invalid serialized header input. Must be array')
76
+ }
77
+ return createBlockHeaderFromBytesArray(values as Uint8Array[], opts)
78
+ }
79
+
80
+ /**
81
+ * Creates a Clique block header with the seal applied during instantiation.
82
+ * @param headerData Header fields for the Clique block
83
+ * @param cliqueSigner Private key bytes used to sign the header
84
+ * @param opts {@link BlockOptions}
85
+ * @returns A sealed {@link BlockHeader}
86
+ */
87
+ export function createSealedCliqueBlockHeader(
88
+ headerData: HeaderData = {},
89
+ cliqueSigner: Uint8Array,
90
+ opts: BlockOptions = {},
91
+ ): BlockHeader {
92
+ const sealedCliqueBlockHeader = new BlockHeader(headerData, {
93
+ ...opts,
94
+ ...{ skipConsensusFormatValidation: true },
95
+ })
96
+ ;(sealedCliqueBlockHeader.extraData as any) = generateCliqueBlockExtraData(
97
+ sealedCliqueBlockHeader,
98
+ cliqueSigner,
99
+ )
100
+ if (opts.skipConsensusFormatValidation === false)
101
+ // We need to validate the consensus format here since we skipped it when constructing the block header
102
+ sealedCliqueBlockHeader['_consensusFormatValidation']()
103
+ return sealedCliqueBlockHeader
104
+ }
105
+
106
+ /**
107
+ * Creates a new block header object from Ethereum JSON RPC.
108
+ *
109
+ * @param blockParams - Ethereum JSON RPC of block (eth_getBlockByNumber)
110
+ * @param options - An object describing the blockchain
111
+ */
112
+ export function createBlockHeaderFromRPC(blockParams: JSONRPCBlock, options?: BlockOptions) {
113
+ const {
114
+ parentHash,
115
+ sha3Uncles,
116
+ miner,
117
+ stateRoot,
118
+ transactionsRoot,
119
+ receiptsRoot,
120
+ logsBloom,
121
+ difficulty,
122
+ number,
123
+ gasLimit,
124
+ gasUsed,
125
+ timestamp,
126
+ extraData,
127
+ mixHash,
128
+ nonce,
129
+ baseFeePerGas,
130
+ withdrawalsRoot,
131
+ blobGasUsed,
132
+ excessBlobGas,
133
+ parentBeaconBlockRoot,
134
+ requestsHash,
135
+ blockAccessListHash,
136
+ slotNumber,
137
+ } = blockParams
138
+
139
+ const blockHeader = new BlockHeader(
140
+ {
141
+ parentHash,
142
+ uncleHash: sha3Uncles,
143
+ coinbase: miner,
144
+ stateRoot,
145
+ transactionsTrie: transactionsRoot,
146
+ receiptTrie: receiptsRoot,
147
+ logsBloom,
148
+ difficulty: numberToHex(difficulty),
149
+ number,
150
+ gasLimit,
151
+ gasUsed,
152
+ timestamp,
153
+ extraData,
154
+ mixHash,
155
+ nonce,
156
+ baseFeePerGas,
157
+ withdrawalsRoot,
158
+ blobGasUsed,
159
+ excessBlobGas,
160
+ parentBeaconBlockRoot,
161
+ requestsHash,
162
+ blockAccessListHash,
163
+ slotNumber,
164
+ },
165
+ options,
166
+ )
167
+
168
+ return blockHeader
169
+ }