ox 0.9.16 → 0.10.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 (216) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +4 -4
  3. package/TxEnvelope/package.json +6 -0
  4. package/TxEnvelopeEip1559/package.json +6 -0
  5. package/TxEnvelopeEip2930/package.json +6 -0
  6. package/TxEnvelopeEip4844/package.json +6 -0
  7. package/TxEnvelopeEip7702/package.json +6 -0
  8. package/TxEnvelopeLegacy/package.json +6 -0
  9. package/_cjs/core/{TransactionEnvelope.js → TxEnvelope.js} +1 -1
  10. package/_cjs/core/TxEnvelope.js.map +1 -0
  11. package/_cjs/core/{TransactionEnvelopeEip1559.js → TxEnvelopeEip1559.js} +2 -2
  12. package/_cjs/core/TxEnvelopeEip1559.js.map +1 -0
  13. package/_cjs/core/{TransactionEnvelopeEip2930.js → TxEnvelopeEip2930.js} +2 -2
  14. package/_cjs/core/TxEnvelopeEip2930.js.map +1 -0
  15. package/_cjs/core/{TransactionEnvelopeEip4844.js → TxEnvelopeEip4844.js} +4 -4
  16. package/_cjs/core/TxEnvelopeEip4844.js.map +1 -0
  17. package/_cjs/core/{TransactionEnvelopeEip7702.js → TxEnvelopeEip7702.js} +4 -4
  18. package/_cjs/core/TxEnvelopeEip7702.js.map +1 -0
  19. package/_cjs/core/{TransactionEnvelopeLegacy.js → TxEnvelopeLegacy.js} +2 -2
  20. package/_cjs/core/TxEnvelopeLegacy.js.map +1 -0
  21. package/_cjs/core/WebAuthnP256.js +1 -1
  22. package/_cjs/core/WebAuthnP256.js.map +1 -1
  23. package/_cjs/erc8021/Attribution.js +36 -6
  24. package/_cjs/erc8021/Attribution.js.map +1 -1
  25. package/_cjs/index.docs.js +1 -0
  26. package/_cjs/index.docs.js.map +1 -1
  27. package/_cjs/index.js +7 -7
  28. package/_cjs/index.js.map +1 -1
  29. package/_cjs/tempo/AuthorizationTempo.js +101 -0
  30. package/_cjs/tempo/AuthorizationTempo.js.map +1 -0
  31. package/_cjs/tempo/KeyAuthorization.js +123 -0
  32. package/_cjs/tempo/KeyAuthorization.js.map +1 -0
  33. package/_cjs/tempo/PoolId.js +10 -0
  34. package/_cjs/tempo/PoolId.js.map +1 -0
  35. package/_cjs/tempo/SignatureEnvelope.js +394 -0
  36. package/_cjs/tempo/SignatureEnvelope.js.map +1 -0
  37. package/_cjs/tempo/Tick.js +77 -0
  38. package/_cjs/tempo/Tick.js.map +1 -0
  39. package/_cjs/tempo/TokenId.js +28 -0
  40. package/_cjs/tempo/TokenId.js.map +1 -0
  41. package/_cjs/tempo/TokenRole.js +26 -0
  42. package/_cjs/tempo/TokenRole.js.map +1 -0
  43. package/_cjs/tempo/Transaction.js +80 -0
  44. package/_cjs/tempo/Transaction.js.map +1 -0
  45. package/_cjs/tempo/TransactionReceipt.js +26 -0
  46. package/_cjs/tempo/TransactionReceipt.js.map +1 -0
  47. package/_cjs/tempo/TransactionRequest.js +53 -0
  48. package/_cjs/tempo/TransactionRequest.js.map +1 -0
  49. package/_cjs/tempo/TxEnvelopeTempo.js +267 -0
  50. package/_cjs/tempo/TxEnvelopeTempo.js.map +1 -0
  51. package/_cjs/tempo/index.js +15 -0
  52. package/_cjs/tempo/index.js.map +1 -0
  53. package/_cjs/version.js +1 -1
  54. package/_esm/core/Blobs.js +8 -8
  55. package/_esm/core/{TransactionEnvelope.js → TxEnvelope.js} +11 -11
  56. package/_esm/core/TxEnvelope.js.map +1 -0
  57. package/_esm/core/{TransactionEnvelopeEip1559.js → TxEnvelopeEip1559.js} +42 -42
  58. package/_esm/core/TxEnvelopeEip1559.js.map +1 -0
  59. package/_esm/core/{TransactionEnvelopeEip2930.js → TxEnvelopeEip2930.js} +43 -43
  60. package/_esm/core/TxEnvelopeEip2930.js.map +1 -0
  61. package/_esm/core/{TransactionEnvelopeEip4844.js → TxEnvelopeEip4844.js} +42 -42
  62. package/_esm/core/TxEnvelopeEip4844.js.map +1 -0
  63. package/_esm/core/{TransactionEnvelopeEip7702.js → TxEnvelopeEip7702.js} +40 -40
  64. package/_esm/core/TxEnvelopeEip7702.js.map +1 -0
  65. package/_esm/core/{TransactionEnvelopeLegacy.js → TxEnvelopeLegacy.js} +42 -42
  66. package/_esm/core/TxEnvelopeLegacy.js.map +1 -0
  67. package/_esm/core/WebAuthnP256.js +1 -1
  68. package/_esm/core/WebAuthnP256.js.map +1 -1
  69. package/_esm/erc8021/Attribution.js +58 -13
  70. package/_esm/erc8021/Attribution.js.map +1 -1
  71. package/_esm/index.docs.js +1 -0
  72. package/_esm/index.docs.js.map +1 -1
  73. package/_esm/index.js +192 -192
  74. package/_esm/index.js.map +1 -1
  75. package/_esm/tempo/AuthorizationTempo.js +664 -0
  76. package/_esm/tempo/AuthorizationTempo.js.map +1 -0
  77. package/_esm/tempo/KeyAuthorization.js +426 -0
  78. package/_esm/tempo/KeyAuthorization.js.map +1 -0
  79. package/_esm/tempo/PoolId.js +28 -0
  80. package/_esm/tempo/PoolId.js.map +1 -0
  81. package/_esm/tempo/SignatureEnvelope.js +660 -0
  82. package/_esm/tempo/SignatureEnvelope.js.map +1 -0
  83. package/_esm/tempo/Tick.js +147 -0
  84. package/_esm/tempo/Tick.js.map +1 -0
  85. package/_esm/tempo/TokenId.js +71 -0
  86. package/_esm/tempo/TokenId.js.map +1 -0
  87. package/_esm/tempo/TokenRole.js +40 -0
  88. package/_esm/tempo/TokenRole.js.map +1 -0
  89. package/_esm/tempo/Transaction.js +167 -0
  90. package/_esm/tempo/Transaction.js.map +1 -0
  91. package/_esm/tempo/TransactionReceipt.js +138 -0
  92. package/_esm/tempo/TransactionReceipt.js.map +1 -0
  93. package/_esm/tempo/TransactionRequest.js +99 -0
  94. package/_esm/tempo/TransactionRequest.js.map +1 -0
  95. package/_esm/tempo/TxEnvelopeTempo.js +607 -0
  96. package/_esm/tempo/TxEnvelopeTempo.js.map +1 -0
  97. package/_esm/tempo/index.js +298 -0
  98. package/_esm/tempo/index.js.map +1 -0
  99. package/_esm/version.js +1 -1
  100. package/_types/core/Blobs.d.ts +8 -8
  101. package/_types/core/{TransactionEnvelope.d.ts → TxEnvelope.d.ts} +11 -11
  102. package/_types/core/TxEnvelope.d.ts.map +1 -0
  103. package/_types/core/{TransactionEnvelopeEip1559.d.ts → TxEnvelopeEip1559.d.ts} +54 -54
  104. package/_types/core/TxEnvelopeEip1559.d.ts.map +1 -0
  105. package/_types/core/{TransactionEnvelopeEip2930.d.ts → TxEnvelopeEip2930.d.ts} +55 -55
  106. package/_types/core/TxEnvelopeEip2930.d.ts.map +1 -0
  107. package/_types/core/{TransactionEnvelopeEip4844.d.ts → TxEnvelopeEip4844.d.ts} +54 -54
  108. package/_types/core/TxEnvelopeEip4844.d.ts.map +1 -0
  109. package/_types/core/{TransactionEnvelopeEip7702.d.ts → TxEnvelopeEip7702.d.ts} +49 -49
  110. package/_types/core/TxEnvelopeEip7702.d.ts.map +1 -0
  111. package/_types/core/{TransactionEnvelopeLegacy.d.ts → TxEnvelopeLegacy.d.ts} +54 -54
  112. package/_types/core/TxEnvelopeLegacy.d.ts.map +1 -0
  113. package/_types/core/WebAuthnP256.d.ts +1 -1
  114. package/_types/core/WebAuthnP256.d.ts.map +1 -1
  115. package/_types/erc8021/Attribution.d.ts +20 -6
  116. package/_types/erc8021/Attribution.d.ts.map +1 -1
  117. package/_types/index.d.ts +192 -192
  118. package/_types/index.d.ts.map +1 -1
  119. package/_types/index.docs.d.ts +1 -0
  120. package/_types/index.docs.d.ts.map +1 -1
  121. package/_types/tempo/AuthorizationTempo.d.ts +688 -0
  122. package/_types/tempo/AuthorizationTempo.d.ts.map +1 -0
  123. package/_types/tempo/KeyAuthorization.d.ts +437 -0
  124. package/_types/tempo/KeyAuthorization.d.ts.map +1 -0
  125. package/_types/tempo/PoolId.d.ts +33 -0
  126. package/_types/tempo/PoolId.d.ts.map +1 -0
  127. package/_types/tempo/SignatureEnvelope.d.ts +438 -0
  128. package/_types/tempo/SignatureEnvelope.d.ts.map +1 -0
  129. package/_types/tempo/Tick.d.ts +120 -0
  130. package/_types/tempo/Tick.d.ts.map +1 -0
  131. package/_types/tempo/TokenId.d.ts +55 -0
  132. package/_types/tempo/TokenId.d.ts.map +1 -0
  133. package/_types/tempo/TokenRole.d.ts +29 -0
  134. package/_types/tempo/TokenRole.d.ts.map +1 -0
  135. package/_types/tempo/Transaction.d.ts +208 -0
  136. package/_types/tempo/Transaction.d.ts.map +1 -0
  137. package/_types/tempo/TransactionReceipt.d.ts +165 -0
  138. package/_types/tempo/TransactionReceipt.d.ts.map +1 -0
  139. package/_types/tempo/TransactionRequest.d.ts +89 -0
  140. package/_types/tempo/TransactionRequest.d.ts.map +1 -0
  141. package/_types/tempo/TxEnvelopeTempo.d.ts +551 -0
  142. package/_types/tempo/TxEnvelopeTempo.d.ts.map +1 -0
  143. package/_types/tempo/index.d.ts +300 -0
  144. package/_types/tempo/index.d.ts.map +1 -0
  145. package/_types/version.d.ts +1 -1
  146. package/core/Blobs.ts +8 -8
  147. package/core/{TransactionEnvelope.ts → TxEnvelope.ts} +10 -10
  148. package/core/{TransactionEnvelopeEip1559.ts → TxEnvelopeEip1559.ts} +60 -69
  149. package/core/{TransactionEnvelopeEip2930.ts → TxEnvelopeEip2930.ts} +61 -72
  150. package/core/{TransactionEnvelopeEip4844.ts → TxEnvelopeEip4844.ts} +62 -71
  151. package/core/{TransactionEnvelopeEip7702.ts → TxEnvelopeEip7702.ts} +58 -67
  152. package/core/{TransactionEnvelopeLegacy.ts → TxEnvelopeLegacy.ts} +59 -68
  153. package/core/WebAuthnP256.ts +3 -1
  154. package/erc8021/Attribution.ts +77 -15
  155. package/index.docs.ts +1 -0
  156. package/index.ts +192 -195
  157. package/package.json +91 -31
  158. package/tempo/AuthorizationTempo/package.json +6 -0
  159. package/tempo/AuthorizationTempo.test.ts +1293 -0
  160. package/tempo/AuthorizationTempo.ts +884 -0
  161. package/tempo/KeyAuthorization/package.json +6 -0
  162. package/tempo/KeyAuthorization.test.ts +1373 -0
  163. package/tempo/KeyAuthorization.ts +622 -0
  164. package/tempo/PoolId/package.json +6 -0
  165. package/tempo/PoolId.test.ts +33 -0
  166. package/tempo/PoolId.ts +42 -0
  167. package/tempo/SignatureEnvelope/package.json +6 -0
  168. package/tempo/SignatureEnvelope.test.ts +1877 -0
  169. package/tempo/SignatureEnvelope.ts +973 -0
  170. package/tempo/Tick/package.json +6 -0
  171. package/tempo/Tick.test.ts +281 -0
  172. package/tempo/Tick.ts +186 -0
  173. package/tempo/TokenId/package.json +6 -0
  174. package/tempo/TokenId.test.ts +40 -0
  175. package/tempo/TokenId.ts +80 -0
  176. package/tempo/TokenRole/package.json +6 -0
  177. package/tempo/TokenRole.test.ts +16 -0
  178. package/tempo/TokenRole.ts +45 -0
  179. package/tempo/Transaction/package.json +6 -0
  180. package/tempo/Transaction.test.ts +523 -0
  181. package/tempo/Transaction.ts +339 -0
  182. package/tempo/TransactionReceipt/package.json +6 -0
  183. package/tempo/TransactionReceipt.ts +200 -0
  184. package/tempo/TransactionRequest/package.json +6 -0
  185. package/tempo/TransactionRequest.ts +160 -0
  186. package/tempo/TxEnvelopeTempo/package.json +6 -0
  187. package/tempo/TxEnvelopeTempo.test.ts +1371 -0
  188. package/tempo/TxEnvelopeTempo.ts +972 -0
  189. package/tempo/e2e.test.ts +1387 -0
  190. package/tempo/index.ts +308 -0
  191. package/tempo/package.json +6 -0
  192. package/version.ts +1 -1
  193. package/TransactionEnvelope/package.json +0 -6
  194. package/TransactionEnvelopeEip1559/package.json +0 -6
  195. package/TransactionEnvelopeEip2930/package.json +0 -6
  196. package/TransactionEnvelopeEip4844/package.json +0 -6
  197. package/TransactionEnvelopeEip7702/package.json +0 -6
  198. package/TransactionEnvelopeLegacy/package.json +0 -6
  199. package/_cjs/core/TransactionEnvelope.js.map +0 -1
  200. package/_cjs/core/TransactionEnvelopeEip1559.js.map +0 -1
  201. package/_cjs/core/TransactionEnvelopeEip2930.js.map +0 -1
  202. package/_cjs/core/TransactionEnvelopeEip4844.js.map +0 -1
  203. package/_cjs/core/TransactionEnvelopeEip7702.js.map +0 -1
  204. package/_cjs/core/TransactionEnvelopeLegacy.js.map +0 -1
  205. package/_esm/core/TransactionEnvelope.js.map +0 -1
  206. package/_esm/core/TransactionEnvelopeEip1559.js.map +0 -1
  207. package/_esm/core/TransactionEnvelopeEip2930.js.map +0 -1
  208. package/_esm/core/TransactionEnvelopeEip4844.js.map +0 -1
  209. package/_esm/core/TransactionEnvelopeEip7702.js.map +0 -1
  210. package/_esm/core/TransactionEnvelopeLegacy.js.map +0 -1
  211. package/_types/core/TransactionEnvelope.d.ts.map +0 -1
  212. package/_types/core/TransactionEnvelopeEip1559.d.ts.map +0 -1
  213. package/_types/core/TransactionEnvelopeEip2930.d.ts.map +0 -1
  214. package/_types/core/TransactionEnvelopeEip4844.d.ts.map +0 -1
  215. package/_types/core/TransactionEnvelopeEip7702.d.ts.map +0 -1
  216. package/_types/core/TransactionEnvelopeLegacy.d.ts.map +0 -1
@@ -0,0 +1,147 @@
1
+ import * as Errors from '../core/Errors.js';
2
+ /**
3
+ * Minimum allowed tick value (-2% from peg).
4
+ *
5
+ * [Stablecoin DEX Pricing](https://docs.tempo.xyz/protocol/exchange/spec#key-concepts)
6
+ */
7
+ export const minTick = -2000;
8
+ /**
9
+ * Maximum allowed tick value (+2% from peg).
10
+ *
11
+ * [Stablecoin DEX Pricing](https://docs.tempo.xyz/protocol/exchange/spec#key-concepts)
12
+ */
13
+ export const maxTick = 2000;
14
+ /**
15
+ * Price scaling factor (5 decimal places for 0.1 bps precision).
16
+ *
17
+ * The DEX uses a tick-based pricing system where `price = PRICE_SCALE + tick`.
18
+ * Orders must be placed at ticks divisible by `TICK_SPACING = 10` (1 bp grid).
19
+ *
20
+ * [Stablecoin DEX Pricing](https://docs.tempo.xyz/protocol/exchange/spec#key-concepts)
21
+ */
22
+ export const priceScale = 100_000;
23
+ /**
24
+ * Converts a tick to a price string.
25
+ *
26
+ * [Stablecoin DEX Pricing](https://docs.tempo.xyz/protocol/exchange/spec#key-concepts)
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * import { Tick } from 'ox/tempo'
31
+ *
32
+ * // Tick 0 = price of 1.0
33
+ * const price1 = Tick.toPrice(0) // "1"
34
+ *
35
+ * // Tick 100 = price of 1.001 (0.1% higher)
36
+ * const price2 = Tick.toPrice(100) // "1.001"
37
+ *
38
+ * // Tick -100 = price of 0.999 (0.1% lower)
39
+ * const price3 = Tick.toPrice(-100) // "0.999"
40
+ * ```
41
+ *
42
+ * @param tick - The tick value (range: -2000 to +2000).
43
+ * @returns The price as a string with exact decimal representation.
44
+ * @throws `TickOutOfBoundsError` If tick is out of bounds.
45
+ */
46
+ export function toPrice(tick) {
47
+ if (tick < minTick || tick > maxTick) {
48
+ throw new TickOutOfBoundsError({ tick });
49
+ }
50
+ // Use integer arithmetic to avoid floating point errors
51
+ const price = priceScale + tick;
52
+ const whole = Math.floor(price / priceScale);
53
+ let decimal = (price % priceScale).toString().padStart(5, '0');
54
+ decimal = decimal.replace(/0+$/, '');
55
+ if (decimal.length === 0)
56
+ return whole.toString();
57
+ return `${whole}.${decimal}`;
58
+ }
59
+ /**
60
+ * Converts a price string to a tick.
61
+ *
62
+ * [Stablecoin DEX Pricing](https://docs.tempo.xyz/protocol/exchange/spec#key-concepts)
63
+ *
64
+ * @example
65
+ * ```ts
66
+ * import { Tick } from 'ox/tempo'
67
+ *
68
+ * // Price of 1.0 = tick 0
69
+ * const tick1 = Tick.fromPrice('1.0') // 0
70
+ * const tick2 = Tick.fromPrice('1.00000') // 0
71
+ *
72
+ * // Price of 1.001 = tick 100
73
+ * const tick3 = Tick.fromPrice('1.001') // 100
74
+ *
75
+ * // Price of 0.999 = tick -100
76
+ * const tick4 = Tick.fromPrice('0.999') // -100
77
+ * ```
78
+ *
79
+ * @param price - The price as a string (e.g., "1.001", "0.999").
80
+ * @returns The tick value.
81
+ */
82
+ export function fromPrice(price) {
83
+ const priceStr = price.trim();
84
+ if (!/^-?\d+(\.\d+)?$/.test(priceStr))
85
+ throw new InvalidPriceFormatError({ price });
86
+ // Parse price using string manipulation to avoid float precision issues
87
+ const [w, d = '0'] = priceStr.split('.');
88
+ const whole = BigInt(w);
89
+ // Pad or truncate decimal to exactly 5 digits
90
+ const decimal = BigInt(d.padEnd(5, '0').slice(0, 5));
91
+ // Calculate price
92
+ const priceInt = whole * BigInt(priceScale) + decimal;
93
+ // Calculate tick
94
+ const tick = Number(priceInt - BigInt(priceScale));
95
+ if (tick < minTick || tick > maxTick)
96
+ throw new PriceOutOfBoundsError({ price, tick });
97
+ return tick;
98
+ }
99
+ /**
100
+ * Error thrown when a tick value is out of the allowed bounds.
101
+ */
102
+ export class TickOutOfBoundsError extends Errors.BaseError {
103
+ constructor(options) {
104
+ super(`Tick ${options.tick} is out of bounds.`, {
105
+ metaMessages: [`Tick must be between ${minTick} and ${maxTick}.`],
106
+ });
107
+ Object.defineProperty(this, "name", {
108
+ enumerable: true,
109
+ configurable: true,
110
+ writable: true,
111
+ value: 'Tick.TickOutOfBoundsError'
112
+ });
113
+ }
114
+ }
115
+ /**
116
+ * Error thrown when a price string has an invalid format.
117
+ */
118
+ export class InvalidPriceFormatError extends Errors.BaseError {
119
+ constructor(options) {
120
+ super(`Invalid price format: "${options.price}".`, {
121
+ metaMessages: ['Price must be a decimal number string (e.g., "1.001").'],
122
+ });
123
+ Object.defineProperty(this, "name", {
124
+ enumerable: true,
125
+ configurable: true,
126
+ writable: true,
127
+ value: 'Tick.InvalidPriceFormatError'
128
+ });
129
+ }
130
+ }
131
+ /**
132
+ * Error thrown when a price string results in an out-of-bounds tick.
133
+ */
134
+ export class PriceOutOfBoundsError extends Errors.BaseError {
135
+ constructor(options) {
136
+ super(`Price "${options.price}" results in tick ${options.tick} which is out of bounds.`, {
137
+ metaMessages: [`Tick must be between ${minTick} and ${maxTick}.`],
138
+ });
139
+ Object.defineProperty(this, "name", {
140
+ enumerable: true,
141
+ configurable: true,
142
+ writable: true,
143
+ value: 'Tick.PriceOutOfBoundsError'
144
+ });
145
+ }
146
+ }
147
+ //# sourceMappingURL=Tick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tick.js","sourceRoot":"","sources":["../../tempo/Tick.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import * as Address from '../core/Address.js';
2
+ import * as Hex from '../core/Hex.js';
3
+ const tip20Prefix = '0x20c0';
4
+ /**
5
+ * Converts a token ID or address to a token ID.
6
+ *
7
+ * TIP-20 is Tempo's native token standard for stablecoins with deterministic addresses
8
+ * derived from sequential token IDs (prefix `0x20c0`).
9
+ *
10
+ * [TIP-20 Token Standard](https://docs.tempo.xyz/protocol/tip20/overview)
11
+ *
12
+ * @example
13
+ * ```ts twoslash
14
+ * import { TokenId } from 'ox/tempo'
15
+ *
16
+ * const tokenId = TokenId.from(1n)
17
+ * ```
18
+ *
19
+ * @param tokenIdOrAddress - The token ID or address.
20
+ * @returns The token ID.
21
+ */
22
+ export function from(tokenIdOrAddress) {
23
+ if (typeof tokenIdOrAddress === 'bigint' ||
24
+ typeof tokenIdOrAddress === 'number')
25
+ return BigInt(tokenIdOrAddress);
26
+ return fromAddress(tokenIdOrAddress);
27
+ }
28
+ /**
29
+ * Converts a TIP-20 token address to a token ID.
30
+ *
31
+ * [TIP-20 Token Standard](https://docs.tempo.xyz/protocol/tip20/overview)
32
+ *
33
+ * @example
34
+ * ```ts twoslash
35
+ * import { TokenId } from 'ox/tempo'
36
+ *
37
+ * const tokenId = TokenId.fromAddress('0x20c00000000000000000000000000000000000000001')
38
+ * ```
39
+ *
40
+ * @param address - The token address.
41
+ * @returns The token ID.
42
+ */
43
+ export function fromAddress(address) {
44
+ if (!address.toLowerCase().startsWith(tip20Prefix))
45
+ throw new Error('invalid tip20 address.');
46
+ return Hex.toBigInt(Hex.slice(address, tip20Prefix.length));
47
+ }
48
+ /**
49
+ * Converts a TIP-20 token ID to an address.
50
+ *
51
+ * [TIP-20 Token Standard](https://docs.tempo.xyz/protocol/tip20/overview)
52
+ *
53
+ * @example
54
+ * ```ts twoslash
55
+ * import { TokenId } from 'ox/tempo'
56
+ *
57
+ * const address = TokenId.toAddress(1n)
58
+ * ```
59
+ *
60
+ * @param tokenId - The token ID.
61
+ * @returns The address.
62
+ */
63
+ export function toAddress(tokenId) {
64
+ if (typeof tokenId === 'string') {
65
+ Address.assert(tokenId);
66
+ return tokenId;
67
+ }
68
+ const tokenIdHex = Hex.fromNumber(tokenId, { size: 18 });
69
+ return Hex.concat(tip20Prefix, tokenIdHex);
70
+ }
71
+ //# sourceMappingURL=TokenId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenId.js","sourceRoot":"","sources":["../../tempo/TokenId.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AAErC,MAAM,WAAW,GAAG,QAAQ,CAAA;AAK5B;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,IAAI,CAAC,gBAA2C;IAC9D,IACE,OAAO,gBAAgB,KAAK,QAAQ;QACpC,OAAO,gBAAgB,KAAK,QAAQ;QAEpC,OAAO,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACjC,OAAO,WAAW,CAAC,gBAAgB,CAAC,CAAA;AACtC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CAAC,OAAwB;IAClD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;IAC3C,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;AAC7D,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,SAAS,CAAC,OAAyB;IACjD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACvB,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IACxD,OAAO,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;AAC5C,CAAC"}
@@ -0,0 +1,40 @@
1
+ import * as Hash from '../core/Hash.js';
2
+ import * as Hex from '../core/Hex.js';
3
+ export const roles = [
4
+ 'defaultAdmin',
5
+ 'pause',
6
+ 'unpause',
7
+ 'issuer',
8
+ 'burnBlocked',
9
+ ];
10
+ export const toPreHashed = {
11
+ defaultAdmin: 'DEFAULT_ADMIN_ROLE',
12
+ pause: 'PAUSE_ROLE',
13
+ unpause: 'UNPAUSE_ROLE',
14
+ issuer: 'ISSUER_ROLE',
15
+ burnBlocked: 'BURN_BLOCKED_ROLE',
16
+ };
17
+ /**
18
+ * Serializes a token role to its keccak256 hash representation.
19
+ *
20
+ * TIP-20 includes a built-in RBAC system with roles like `ISSUER_ROLE` (mint/burn),
21
+ * `PAUSE_ROLE`/`UNPAUSE_ROLE` (emergency controls), and `BURN_BLOCKED_ROLE` (compliance).
22
+ *
23
+ * [TIP-20 RBAC](https://docs.tempo.xyz/protocol/tip20/overview#role-based-access-control-rbac)
24
+ *
25
+ * @example
26
+ * ```ts twoslash
27
+ * import { TokenRole } from 'ox/tempo'
28
+ *
29
+ * const hash = TokenRole.serialize('issuer')
30
+ * ```
31
+ *
32
+ * @param role - The token role to serialize.
33
+ * @returns The keccak256 hash of the role.
34
+ */
35
+ export function serialize(role) {
36
+ if (role === 'defaultAdmin')
37
+ return '0x0000000000000000000000000000000000000000000000000000000000000000';
38
+ return Hash.keccak256(Hex.fromString(toPreHashed[role] ?? role));
39
+ }
40
+ //# sourceMappingURL=TokenRole.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenRole.js","sourceRoot":"","sources":["../../tempo/TokenRole.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AAErC,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,cAAc;IACd,OAAO;IACP,SAAS;IACT,QAAQ;IACR,aAAa;CACL,CAAA;AAGV,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,YAAY,EAAE,oBAAoB;IAClC,KAAK,EAAE,YAAY;IACnB,OAAO,EAAE,cAAc;IACvB,MAAM,EAAE,aAAa;IACrB,WAAW,EAAE,mBAAmB;CACY,CAAA;AAE9C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,SAAS,CAAC,IAAe;IACvC,IAAI,IAAI,KAAK,cAAc;QACzB,OAAO,oEAAoE,CAAA;IAC7E,OAAO,IAAI,CAAC,SAAS,CACnB,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,IAAgC,CAAC,IAAI,IAAI,CAAC,CACtE,CAAA;AACH,CAAC"}
@@ -0,0 +1,167 @@
1
+ import * as Hex from '../core/Hex.js';
2
+ import * as Signature from '../core/Signature.js';
3
+ import * as ox_Transaction from '../core/Transaction.js';
4
+ import * as AuthorizationTempo from './AuthorizationTempo.js';
5
+ import * as KeyAuthorization from './KeyAuthorization.js';
6
+ import * as SignatureEnvelope from './SignatureEnvelope.js';
7
+ /** Type to RPC Type mapping. */
8
+ export const toRpcType = {
9
+ ...ox_Transaction.toRpcType,
10
+ tempo: '0x76',
11
+ };
12
+ /** RPC Type to Type mapping. */
13
+ export const fromRpcType = {
14
+ ...ox_Transaction.fromRpcType,
15
+ '0x76': 'tempo',
16
+ };
17
+ /**
18
+ * Converts an {@link ox#Transaction.Rpc} to an {@link ox#Transaction.Transaction}.
19
+ *
20
+ * @example
21
+ * ```ts twoslash
22
+ * import { Transaction } from 'ox/tempo'
23
+ *
24
+ * const transaction = Transaction.fromRpc({
25
+ * hash: '0x353fdfc38a2f26115daadee9f5b8392ce62b84f410957967e2ed56b35338cdd0',
26
+ * nonce: '0x357',
27
+ * blockHash:
28
+ * '0xc350d807505fb835650f0013632c5515592987ba169bbc6626d9fc54d91f0f0b',
29
+ * blockNumber: '0x12f296f',
30
+ * calls: [
31
+ * {
32
+ * input: '0xdeadbeef',
33
+ * to: '0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad',
34
+ * value: '0x9b6e64a8ec60000',
35
+ * },
36
+ * ],
37
+ * feeToken: '0x20c0000000000000000000000000000000000000',
38
+ * transactionIndex: '0x2',
39
+ * from: '0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6',
40
+ * value: '0x9b6e64a8ec60000',
41
+ * gas: '0x43f5d',
42
+ * maxFeePerGas: '0x2ca6ae494',
43
+ * maxPriorityFeePerGas: '0x41cc3c0',
44
+ * input:
45
+ * '0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000006643504700000000000000000000000000000000000000000000000000000000000000040b080604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000009b6e64a8ec600000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000009b6e64a8ec60000000000000000000000000000000000000000000000000000019124bb5ae978c000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000c56c7a0eaa804f854b536a5f3d5f49d2ec4b12b80000000000000000000000000000000000000000000000000000000000000060000000000000000000000000c56c7a0eaa804f854b536a5f3d5f49d2ec4b12b8000000000000000000000000000000fee13a103a10d593b9ae06b3e05f2e7e1c00000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000060000000000000000000000000c56c7a0eaa804f854b536a5f3d5f49d2ec4b12b800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000190240001b9872b',
46
+ * signature: {
47
+ * r: '0x635dc2033e60185bb36709c29c75d64ea51dfbd91c32ef4be198e4ceb169fb4d',
48
+ * s: '0x50c2667ac4c771072746acfdcf1f1483336dcca8bd2df47cd83175dbe60f0540',
49
+ * type: 'secp256k1',
50
+ * yParity: '0x0',
51
+ * },
52
+ * chainId: '0x1',
53
+ * accessList: [],
54
+ * type: '0x76',
55
+ * })
56
+ * ```
57
+ *
58
+ * @param transaction - The RPC transaction to convert.
59
+ * @returns An instantiated {@link ox#Transaction.Transaction}.
60
+ */
61
+ export function fromRpc(transaction, _options = {}) {
62
+ if (!transaction)
63
+ return null;
64
+ const transaction_ = ox_Transaction.fromRpc(transaction);
65
+ transaction_.type = fromRpcType[transaction.type];
66
+ if (transaction.aaAuthorizationList) {
67
+ transaction_.authorizationList = AuthorizationTempo.fromRpcList(transaction.aaAuthorizationList);
68
+ delete transaction_.aaAuthorizationList;
69
+ }
70
+ if (transaction.calls)
71
+ transaction_.calls = transaction.calls.map((call) => ({
72
+ to: call.to,
73
+ value: call.value && call.value !== '0x' ? BigInt(call.value) : undefined,
74
+ // @ts-expect-error
75
+ data: call.input || call.data || '0x',
76
+ }));
77
+ if (transaction.feeToken)
78
+ transaction_.feeToken = transaction.feeToken;
79
+ if (transaction.nonceKey)
80
+ transaction_.nonceKey = BigInt(transaction.nonceKey);
81
+ if (transaction.signature)
82
+ transaction_.signature = SignatureEnvelope.fromRpc(transaction.signature);
83
+ if (transaction.validAfter)
84
+ transaction_.validAfter = Number(transaction.validAfter);
85
+ if (transaction.validBefore)
86
+ transaction_.validBefore = Number(transaction.validBefore);
87
+ if (transaction.keyAuthorization)
88
+ transaction_.keyAuthorization = KeyAuthorization.fromRpc(transaction.keyAuthorization);
89
+ if (transaction.feePayerSignature) {
90
+ transaction_.feePayerSignature = Signature.fromRpc(transaction.feePayerSignature);
91
+ transaction_.feePayerSignature.v = Signature.yParityToV(transaction_.feePayerSignature.yParity);
92
+ }
93
+ return transaction_;
94
+ }
95
+ /**
96
+ * Converts an {@link ox#Transaction.Transaction} to an {@link ox#Transaction.Rpc}.
97
+ *
98
+ * @example
99
+ * ```ts twoslash
100
+ * import { Transaction } from 'ox/tempo'
101
+ *
102
+ * const transaction = Transaction.toRpc({
103
+ * accessList: [],
104
+ * blockHash:
105
+ * '0xc350d807505fb835650f0013632c5515592987ba169bbc6626d9fc54d91f0f0b',
106
+ * blockNumber: 19868015n,
107
+ * calls: [
108
+ * {
109
+ * data: '0xdeadbeef',
110
+ * to: '0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad',
111
+ * value: 700000000000000000n,
112
+ * },
113
+ * ],
114
+ * chainId: 1,
115
+ * feeToken: '0x20c0000000000000000000000000000000000000',
116
+ * from: '0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6',
117
+ * gas: 278365n,
118
+ * hash: '0x353fdfc38a2f26115daadee9f5b8392ce62b84f410957967e2ed56b35338cdd0',
119
+ * input:
120
+ * '0x3593564c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000006643504700000000000000000000000000000000000000000000000000000000000000040b080604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000009b6e64a8ec600000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000009b6e64a8ec60000000000000000000000000000000000000000000000000000019124bb5ae978c000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000c56c7a0eaa804f854b536a5f3d5f49d2ec4b12b80000000000000000000000000000000000000000000000000000000000000060000000000000000000000000c56c7a0eaa804f854b536a5f3d5f49d2ec4b12b8000000000000000000000000000000fee13a103a10d593b9ae06b3e05f2e7e1c00000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000060000000000000000000000000c56c7a0eaa804f854b536a5f3d5f49d2ec4b12b800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000190240001b9872b',
121
+ * maxFeePerGas: 11985937556n,
122
+ * maxPriorityFeePerGas: 68993984n,
123
+ * nonce: 855n,
124
+ * signature: {
125
+ * signature: {
126
+ * r: 44944627813007772897391531230081695102703289123332187696115181104739239197517n,
127
+ * s: 36528503505192438307355164441104001310566505351980369085208178712678799181120n,
128
+ * yParity: 0,
129
+ * },
130
+ * type: 'secp256k1',
131
+ * },
132
+ * transactionIndex: 2,
133
+ * type: 'tempo',
134
+ * })
135
+ * ```
136
+ *
137
+ * @param transaction - The transaction to convert.
138
+ * @returns An RPC-formatted transaction.
139
+ */
140
+ export function toRpc(transaction, _options) {
141
+ const rpc = ox_Transaction.toRpc(transaction);
142
+ rpc.type = toRpcType[transaction.type];
143
+ if (transaction.authorizationList)
144
+ rpc.aaAuthorizationList = AuthorizationTempo.toRpcList(transaction.authorizationList);
145
+ if (transaction.calls)
146
+ rpc.calls = transaction.calls.map((call) => ({
147
+ to: call.to,
148
+ value: call.value ? Hex.fromNumber(call.value) : undefined,
149
+ data: call.data,
150
+ }));
151
+ if (transaction.feeToken)
152
+ rpc.feeToken = transaction.feeToken;
153
+ if (transaction.keyAuthorization)
154
+ rpc.keyAuthorization = KeyAuthorization.toRpc(transaction.keyAuthorization);
155
+ if (transaction.feePayerSignature) {
156
+ rpc.feePayerSignature = Signature.toRpc(transaction.feePayerSignature);
157
+ rpc.feePayerSignature.v = Hex.fromNumber(Signature.yParityToV(transaction.feePayerSignature?.yParity));
158
+ }
159
+ if (transaction.signature)
160
+ rpc.signature = SignatureEnvelope.toRpc(transaction.signature);
161
+ if (typeof transaction.validAfter === 'number')
162
+ rpc.validAfter = Hex.fromNumber(transaction.validAfter);
163
+ if (typeof transaction.validBefore === 'number')
164
+ rpc.validBefore = Hex.fromNumber(transaction.validBefore);
165
+ return rpc;
166
+ }
167
+ //# sourceMappingURL=Transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../../tempo/Transaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ import * as ox_TransactionReceipt from '../core/TransactionReceipt.js';
2
+ /** RPC type to type mapping. */
3
+ export const fromRpcType = {
4
+ ...ox_TransactionReceipt.fromRpcType,
5
+ '0x76': 'tempo',
6
+ };
7
+ /** Type to RPC type mapping. */
8
+ export const toRpcType = {
9
+ ...ox_TransactionReceipt.toRpcType,
10
+ tempo: '0x76',
11
+ };
12
+ /**
13
+ * Converts an RPC receipt to a TransactionReceipt.
14
+ *
15
+ * @see {@link https://docs.tempo.xyz/protocol/transactions Tempo Transactions}
16
+ *
17
+ * @example
18
+ * ```ts twoslash
19
+ * import { TransactionReceipt } from 'ox/tempo'
20
+ *
21
+ * const receipt = TransactionReceipt.fromRpc({
22
+ * blobGasPrice: '0x42069',
23
+ * blobGasUsed: '0x1337',
24
+ * blockHash:
25
+ * '0xc350d807505fb835650f0013632c5515592987ba169bbc6626d9fc54d91f0f0b',
26
+ * blockNumber: '0x12f296f',
27
+ * contractAddress: null,
28
+ * cumulativeGasUsed: '0x82515',
29
+ * effectiveGasPrice: '0x21c2f6c09',
30
+ * feePayer: '0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6',
31
+ * feeToken: '0x20c0000000000000000000000000000000000001',
32
+ * from: '0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6',
33
+ * gasUsed: '0x2abba',
34
+ * logs: [],
35
+ * logsBloom:
36
+ * '0x00200000000000000000008080000000000000000040000000000000000000000000000000000000000000000000000022000000080000000000000000000000000000080000000000000008000000200000000000000000000200008020400000000000000000280000000000100000000000000000000000000010000000000000000000020000000000000020000000000001000000080000004000000000000000000000000000000000000000000000400000000000001000000000000000000002000000000000000020000000000000000000001000000000000000000000200000000000000000000000000000001000000000c00000000000000000',
37
+ * status: '0x1',
38
+ * to: '0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad',
39
+ * transactionHash:
40
+ * '0x353fdfc38a2f26115daadee9f5b8392ce62b84f410957967e2ed56b35338cdd0',
41
+ * transactionIndex: '0x2',
42
+ * type: '0x2',
43
+ * })
44
+ * // @log: {
45
+ * // @log: blobGasPrice: 270441n,
46
+ * // @log: blobGasUsed: 4919n,
47
+ * // @log: blockHash: "0xc350d807505fb835650f0013632c5515592987ba169bbc6626d9fc54d91f0f0b",
48
+ * // @log: blockNumber: 19868015n,
49
+ * // @log: contractAddress: null,
50
+ * // @log: cumulativeGasUsed: 533781n,
51
+ * // @log: effectiveGasPrice: 9062804489n,
52
+ * // @log: feePayer: "0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6",
53
+ * // @log: feeToken: "0x20c0000000000000000000000000000000000001",
54
+ * // @log: from: "0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6",
55
+ * // @log: gasUsed: 175034n,
56
+ * // @log: logs: [],
57
+ * // @log: logsBloom: "0x00200000000000000000008080000000000000000040000000000000000000000000000000000000000000000000000022000000080000000000000000000000000000080000000000000008000000200000000000000000000200008020400000000000000000280000000000100000000000000000000000000010000000000000000000020000000000000020000000000001000000080000004000000000000000000000000000000000000000000000400000000000001000000000000000000002000000000000000020000000000000000000001000000000000000000000200000000000000000000000000000001000000000c00000000000000000",
58
+ * // @log: root: undefined,
59
+ * // @log: status: "success",
60
+ * // @log: to: "0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad",
61
+ * // @log: transactionHash: "0x353fdfc38a2f26115daadee9f5b8392ce62b84f410957967e2ed56b35338cdd0",
62
+ * // @log: transactionIndex: 2,
63
+ * // @log: type: "eip1559",
64
+ * // @log: }
65
+ * ```
66
+ *
67
+ * @param receipt - The RPC receipt to convert.
68
+ * @returns A TransactionReceipt.
69
+ */
70
+ export function fromRpc(receipt) {
71
+ return ox_TransactionReceipt.fromRpc(receipt);
72
+ }
73
+ /**
74
+ * Converts a TransactionReceipt to an RPC receipt.
75
+ *
76
+ * @example
77
+ * ```ts twoslash
78
+ * import { TransactionReceipt } from 'ox/tempo'
79
+ *
80
+ * const receipt = TransactionReceipt.toRpc({
81
+ * blobGasPrice: 270441n,
82
+ * blobGasUsed: 4919n,
83
+ * blockHash:
84
+ * '0xc350d807505fb835650f0013632c5515592987ba169bbc6626d9fc54d91f0f0b',
85
+ * blockNumber: 19868015n,
86
+ * contractAddress: null,
87
+ * cumulativeGasUsed: 533781n,
88
+ * effectiveGasPrice: 9062804489n,
89
+ * feePayer: '0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6',
90
+ * feeToken: '0x20c0000000000000000000000000000000000001',
91
+ * from: '0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6',
92
+ * gasUsed: 175034n,
93
+ * logs: [],
94
+ * logsBloom:
95
+ * '0x00200000000000000000008080000000000000000040000000000000000000000000000000000000000000000000000022000000080000000000000000000000000000080000000000000008000000200000000000000000000200008020400000000000000000280000000000100000000000000000000000000010000000000000000000020000000000000020000000000001000000080000004000000000000000000000000000000000000000000000400000000000001000000000000000000002000000000000000020000000000000000000001000000000000000000000200000000000000000000000000000001000000000c00000000000000000',
96
+ * root: undefined,
97
+ * status: 'success',
98
+ * to: '0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad',
99
+ * transactionHash:
100
+ * '0x353fdfc38a2f26115daadee9f5b8392ce62b84f410957967e2ed56b35338cdd0',
101
+ * transactionIndex: 2,
102
+ * type: 'eip1559',
103
+ * })
104
+ * // @log: {
105
+ * // @log: blobGasPrice: "0x042069",
106
+ * // @log: blobGasUsed: "0x1337",
107
+ * // @log: blockHash: "0xc350d807505fb835650f0013632c5515592987ba169bbc6626d9fc54d91f0f0b",
108
+ * // @log: blockNumber: "0x012f296f",
109
+ * // @log: contractAddress: null,
110
+ * // @log: cumulativeGasUsed: "0x082515",
111
+ * // @log: effectiveGasPrice: "0x021c2f6c09",
112
+ * // @log: feePayer: "0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6",
113
+ * // @log: feeToken: "0x20c0000000000000000000000000000000000001",
114
+ * // @log: from: "0x814e5e0e31016b9a7f138c76b7e7b2bb5c1ab6a6",
115
+ * // @log: gasUsed: "0x02abba",
116
+ * // @log: logs: [],
117
+ * // @log: logsBloom: "0x00200000000000000000008080000000000000000040000000000000000000000000000000000000000000000000000022000000080000000000000000000000000000080000000000000008000000200000000000000000000200008020400000000000000000280000000000100000000000000000000000000010000000000000000000020000000000000020000000000001000000080000004000000000000000000000000000000000000000000000400000000000001000000000000000000002000000000000000020000000000000000000001000000000000000000000200000000000000000000000000000001000000000c00000000000000000",
118
+ * // @log: root: undefined,
119
+ * // @log: status: "0x1",
120
+ * // @log: to: "0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad",
121
+ * // @log: transactionHash: "0x353fdfc38a2f26115daadee9f5b8392ce62b84f410957967e2ed56b35338cdd0",
122
+ * // @log: transactionIndex: "0x02",
123
+ * // @log: type: "eip1559",
124
+ * // @log: }
125
+ * ```
126
+ *
127
+ * @param receipt - The receipt to convert.
128
+ * @returns An RPC receipt.
129
+ */
130
+ export function toRpc(receipt) {
131
+ const rpc = ox_TransactionReceipt.toRpc(receipt);
132
+ return {
133
+ ...rpc,
134
+ feePayer: receipt.feePayer,
135
+ feeToken: receipt.feeToken,
136
+ };
137
+ }
138
+ //# sourceMappingURL=TransactionReceipt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionReceipt.js","sourceRoot":"","sources":["../../tempo/TransactionReceipt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAA;AA4CtE,gCAAgC;AAChC,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,GAAG,qBAAqB,CAAC,WAAW;IACpC,MAAM,EAAE,OAAO;CACP,CAAA;AAEV,gCAAgC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,GAAG,qBAAqB,CAAC,SAAS;IAClC,KAAK,EAAE,MAAM;CACL,CAAA;AAEV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,MAAM,UAAU,OAAO,CACrB,OAA6B;IAE7B,OAAO,qBAAqB,CAAC,OAAO,CAClC,OAAoC,CAC5B,CAAA;AACZ,CAAC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,MAAM,UAAU,KAAK,CAAC,OAA2B;IAC/C,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CACrC,OAAmD,CAC7C,CAAA;IACR,OAAO;QACL,GAAG,GAAG;QACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAA;AACH,CAAC"}