1use std::sync::Arc;
2
3use arrow::array::builder;
4use arrow::datatypes::{DataType, Field, Fields, Schema};
5use arrow::record_batch::RecordBatch;
6
7pub fn blocks_schema() -> Schema {
8 Schema::new(vec![
9 Field::new("number", DataType::UInt64, true),
10 Field::new("hash", DataType::Binary, true),
11 Field::new("parent_hash", DataType::Binary, true),
12 Field::new("nonce", DataType::Binary, true),
13 Field::new("sha3_uncles", DataType::Binary, true),
14 Field::new("logs_bloom", DataType::Binary, true),
15 Field::new("transactions_root", DataType::Binary, true),
16 Field::new("state_root", DataType::Binary, true),
17 Field::new("receipts_root", DataType::Binary, true),
18 Field::new("miner", DataType::Binary, true),
19 Field::new("difficulty", DataType::Decimal256(76, 0), true),
20 Field::new("total_difficulty", DataType::Decimal256(76, 0), true),
21 Field::new("extra_data", DataType::Binary, true),
22 Field::new("size", DataType::Decimal256(76, 0), true),
23 Field::new("gas_limit", DataType::Decimal256(76, 0), true),
24 Field::new("gas_used", DataType::Decimal256(76, 0), true),
25 Field::new("timestamp", DataType::Decimal256(76, 0), true),
26 Field::new(
27 "uncles",
28 DataType::List(Arc::new(Field::new("item", DataType::Binary, true))),
29 true,
30 ),
31 Field::new("base_fee_per_gas", DataType::Decimal256(76, 0), true),
32 Field::new("blob_gas_used", DataType::Decimal256(76, 0), true),
33 Field::new("excess_blob_gas", DataType::Decimal256(76, 0), true),
34 Field::new("parent_beacon_block_root", DataType::Binary, true),
35 Field::new("withdrawals_root", DataType::Binary, true),
36 Field::new(
37 "withdrawals",
38 DataType::List(Arc::new(Field::new("item", withdrawal_dt(), true))),
39 true,
40 ),
41 Field::new("l1_block_number", DataType::UInt64, true),
42 Field::new("send_count", DataType::Decimal256(76, 0), true),
43 Field::new("send_root", DataType::Binary, true),
44 Field::new("mix_hash", DataType::Binary, true),
45 ])
46}
47
48fn withdrawal_dt() -> DataType {
49 DataType::Struct(Fields::from(vec![
50 Arc::new(Field::new("index", DataType::UInt64, true)),
51 Arc::new(Field::new("validator_index", DataType::UInt64, true)),
52 Arc::new(Field::new("address", DataType::Binary, true)),
53 Arc::new(Field::new("amount", DataType::Decimal256(76, 0), true)),
54 ]))
55}
56
57pub fn transactions_schema() -> Schema {
58 Schema::new(vec![
59 Field::new("block_hash", DataType::Binary, true),
60 Field::new("block_number", DataType::UInt64, true),
61 Field::new("from", DataType::Binary, true),
62 Field::new("gas", DataType::Decimal256(76, 0), true),
63 Field::new("gas_price", DataType::Decimal256(76, 0), true),
64 Field::new("hash", DataType::Binary, true),
65 Field::new("input", DataType::Binary, true),
66 Field::new("nonce", DataType::Decimal256(76, 0), true),
67 Field::new("to", DataType::Binary, true),
68 Field::new("transaction_index", DataType::UInt64, true),
69 Field::new("value", DataType::Decimal256(76, 0), true),
70 Field::new("v", DataType::UInt8, true),
71 Field::new("r", DataType::Binary, true),
74 Field::new("s", DataType::Binary, true),
75 Field::new(
76 "max_priority_fee_per_gas",
77 DataType::Decimal256(76, 0),
78 true,
79 ),
80 Field::new("max_fee_per_gas", DataType::Decimal256(76, 0), true),
81 Field::new("chain_id", DataType::Decimal256(76, 0), true),
82 Field::new("cumulative_gas_used", DataType::Decimal256(76, 0), true),
83 Field::new("effective_gas_price", DataType::Decimal256(76, 0), true),
84 Field::new("gas_used", DataType::Decimal256(76, 0), true),
85 Field::new("contract_address", DataType::Binary, true),
86 Field::new("logs_bloom", DataType::Binary, true),
87 Field::new("type", DataType::UInt8, true),
88 Field::new("root", DataType::Binary, true),
89 Field::new("status", DataType::UInt8, true),
90 Field::new("sighash", DataType::Binary, true),
91 Field::new("y_parity", DataType::Boolean, true),
92 Field::new(
93 "access_list",
94 DataType::List(Arc::new(Field::new("item", access_list_elem_dt(), true))),
95 true,
96 ),
97 Field::new("l1_fee", DataType::Decimal256(76, 0), true),
98 Field::new("l1_gas_price", DataType::Decimal256(76, 0), true),
99 Field::new("l1_gas_used", DataType::Decimal256(76, 0), true),
100 Field::new("l1_fee_scalar", DataType::Decimal256(76, 0), true),
101 Field::new("gas_used_for_l1", DataType::Decimal256(76, 0), true),
102 Field::new("max_fee_per_blob_gas", DataType::Decimal256(76, 0), true),
103 Field::new(
104 "blob_versioned_hashes",
105 DataType::List(Arc::new(Field::new("item", DataType::Binary, true))),
106 true,
107 ),
108 Field::new("deposit_nonce", DataType::Decimal256(76, 0), true),
109 Field::new("blob_gas_price", DataType::Decimal256(76, 0), true),
110 Field::new("deposit_receipt_version", DataType::Decimal256(76, 0), true),
111 Field::new("blob_gas_used", DataType::Decimal256(76, 0), true),
112 Field::new("l1_base_fee_scalar", DataType::Decimal256(76, 0), true),
113 Field::new("l1_blob_base_fee", DataType::Decimal256(76, 0), true),
114 Field::new("l1_blob_base_fee_scalar", DataType::Decimal256(76, 0), true),
115 Field::new("l1_block_number", DataType::UInt64, true),
116 Field::new("mint", DataType::Decimal256(76, 0), true),
117 Field::new("source_hash", DataType::Binary, true),
118 ])
119}
120
121fn access_list_elem_dt() -> DataType {
122 DataType::Struct(Fields::from(vec![
123 Arc::new(Field::new("address", DataType::Binary, true)),
124 Arc::new(Field::new(
125 "storage_keys",
126 DataType::List(Arc::new(Field::new("item", DataType::Binary, true))),
127 true,
128 )),
129 ]))
130}
131
132pub fn logs_schema() -> Schema {
133 Schema::new(vec![
134 Field::new("removed", DataType::Boolean, true),
135 Field::new("log_index", DataType::UInt64, true),
136 Field::new("transaction_index", DataType::UInt64, true),
137 Field::new("transaction_hash", DataType::Binary, true),
138 Field::new("block_hash", DataType::Binary, true),
139 Field::new("block_number", DataType::UInt64, true),
140 Field::new("address", DataType::Binary, true),
141 Field::new("data", DataType::Binary, true),
142 Field::new("topic0", DataType::Binary, true),
143 Field::new("topic1", DataType::Binary, true),
144 Field::new("topic2", DataType::Binary, true),
145 Field::new("topic3", DataType::Binary, true),
146 ])
147}
148
149pub fn traces_schema() -> Schema {
150 Schema::new(vec![
151 Field::new("from", DataType::Binary, true),
152 Field::new("to", DataType::Binary, true),
153 Field::new("call_type", DataType::Utf8, true),
154 Field::new("gas", DataType::Decimal256(76, 0), true),
155 Field::new("input", DataType::Binary, true),
156 Field::new("init", DataType::Binary, true),
157 Field::new("value", DataType::Decimal256(76, 0), true),
158 Field::new("author", DataType::Binary, true),
159 Field::new("reward_type", DataType::Utf8, true),
160 Field::new("block_hash", DataType::Binary, true),
161 Field::new("block_number", DataType::UInt64, true),
162 Field::new("address", DataType::Binary, true),
163 Field::new("code", DataType::Binary, true),
164 Field::new("gas_used", DataType::Decimal256(76, 0), true),
165 Field::new("output", DataType::Binary, true),
166 Field::new("subtraces", DataType::UInt64, true),
167 Field::new(
168 "trace_address",
169 DataType::List(Arc::new(Field::new("item", DataType::UInt64, true))),
170 true,
171 ),
172 Field::new("transaction_hash", DataType::Binary, true),
173 Field::new("transaction_position", DataType::UInt64, true),
174 Field::new("type", DataType::Utf8, true),
175 Field::new("error", DataType::Utf8, true),
176 Field::new("sighash", DataType::Binary, true),
177 Field::new("action_address", DataType::Binary, true),
178 Field::new("balance", DataType::Decimal256(76, 0), true),
179 Field::new("refund_address", DataType::Binary, true),
180 ])
181}
182
183#[derive(Default)]
184pub struct BlocksBuilder {
185 pub number: builder::UInt64Builder,
186 pub hash: builder::BinaryBuilder,
187 pub parent_hash: builder::BinaryBuilder,
188 pub nonce: builder::BinaryBuilder,
189 pub sha3_uncles: builder::BinaryBuilder,
190 pub logs_bloom: builder::BinaryBuilder,
191 pub transactions_root: builder::BinaryBuilder,
192 pub state_root: builder::BinaryBuilder,
193 pub receipts_root: builder::BinaryBuilder,
194 pub miner: builder::BinaryBuilder,
195 pub difficulty: builder::Decimal256Builder,
196 pub total_difficulty: builder::Decimal256Builder,
197 pub extra_data: builder::BinaryBuilder,
198 pub size: builder::Decimal256Builder,
199 pub gas_limit: builder::Decimal256Builder,
200 pub gas_used: builder::Decimal256Builder,
201 pub timestamp: builder::Decimal256Builder,
202 pub uncles: builder::ListBuilder<builder::BinaryBuilder>,
203 pub base_fee_per_gas: builder::Decimal256Builder,
204 pub blob_gas_used: builder::Decimal256Builder,
205 pub excess_blob_gas: builder::Decimal256Builder,
206 pub parent_beacon_block_root: builder::BinaryBuilder,
207 pub withdrawals_root: builder::BinaryBuilder,
208 pub withdrawals: WithdrawalsBuilder,
209 pub l1_block_number: builder::UInt64Builder,
210 pub send_count: builder::Decimal256Builder,
211 pub send_root: builder::BinaryBuilder,
212 pub mix_hash: builder::BinaryBuilder,
213}
214
215pub struct WithdrawalsBuilder(pub builder::ListBuilder<builder::StructBuilder>);
216
217impl Default for WithdrawalsBuilder {
218 fn default() -> Self {
219 Self(builder::ListBuilder::new(builder::StructBuilder::new(
220 match withdrawal_dt() {
221 DataType::Struct(fields) => fields,
222 _ => unreachable!(),
223 },
224 vec![
225 Box::new(builder::UInt64Builder::default()),
226 Box::new(builder::UInt64Builder::default()),
227 Box::new(builder::BinaryBuilder::default()),
228 Box::new(
229 builder::Decimal256Builder::default()
230 .with_precision_and_scale(76, 0)
231 .unwrap(),
232 ),
233 ],
234 )))
235 }
236}
237
238impl BlocksBuilder {
239 pub fn finish(mut self) -> RecordBatch {
240 RecordBatch::try_new(
241 Arc::new(blocks_schema()),
242 vec![
243 Arc::new(self.number.finish()),
244 Arc::new(self.hash.finish()),
245 Arc::new(self.parent_hash.finish()),
246 Arc::new(self.nonce.finish()),
247 Arc::new(self.sha3_uncles.finish()),
248 Arc::new(self.logs_bloom.finish()),
249 Arc::new(self.transactions_root.finish()),
250 Arc::new(self.state_root.finish()),
251 Arc::new(self.receipts_root.finish()),
252 Arc::new(self.miner.finish()),
253 Arc::new(
254 self.difficulty
255 .with_precision_and_scale(76, 0)
256 .unwrap()
257 .finish(),
258 ),
259 Arc::new(
260 self.total_difficulty
261 .with_precision_and_scale(76, 0)
262 .unwrap()
263 .finish(),
264 ),
265 Arc::new(self.extra_data.finish()),
266 Arc::new(self.size.with_precision_and_scale(76, 0).unwrap().finish()),
267 Arc::new(
268 self.gas_limit
269 .with_precision_and_scale(76, 0)
270 .unwrap()
271 .finish(),
272 ),
273 Arc::new(
274 self.gas_used
275 .with_precision_and_scale(76, 0)
276 .unwrap()
277 .finish(),
278 ),
279 Arc::new(
280 self.timestamp
281 .with_precision_and_scale(76, 0)
282 .unwrap()
283 .finish(),
284 ),
285 Arc::new(self.uncles.finish()),
286 Arc::new(
287 self.base_fee_per_gas
288 .with_precision_and_scale(76, 0)
289 .unwrap()
290 .finish(),
291 ),
292 Arc::new(
293 self.blob_gas_used
294 .with_precision_and_scale(76, 0)
295 .unwrap()
296 .finish(),
297 ),
298 Arc::new(
299 self.excess_blob_gas
300 .with_precision_and_scale(76, 0)
301 .unwrap()
302 .finish(),
303 ),
304 Arc::new(self.parent_beacon_block_root.finish()),
305 Arc::new(self.withdrawals_root.finish()),
306 Arc::new(self.withdrawals.0.finish()),
307 Arc::new(self.l1_block_number.finish()),
308 Arc::new(
309 self.send_count
310 .with_precision_and_scale(76, 0)
311 .unwrap()
312 .finish(),
313 ),
314 Arc::new(self.send_root.finish()),
315 Arc::new(self.mix_hash.finish()),
316 ],
317 )
318 .unwrap()
319 }
320}
321
322#[derive(Default)]
323pub struct TransactionsBuilder {
324 pub block_hash: builder::BinaryBuilder,
325 pub block_number: builder::UInt64Builder,
326 pub from: builder::BinaryBuilder,
327 pub gas: builder::Decimal256Builder,
328 pub gas_price: builder::Decimal256Builder,
329 pub hash: builder::BinaryBuilder,
330 pub input: builder::BinaryBuilder,
331 pub nonce: builder::Decimal256Builder,
332 pub to: builder::BinaryBuilder,
333 pub transaction_index: builder::UInt64Builder,
334 pub value: builder::Decimal256Builder,
335 pub v: builder::UInt8Builder,
336 pub r: builder::BinaryBuilder,
337 pub s: builder::BinaryBuilder,
338 pub max_priority_fee_per_gas: builder::Decimal256Builder,
339 pub max_fee_per_gas: builder::Decimal256Builder,
340 pub chain_id: builder::Decimal256Builder,
341 pub cumulative_gas_used: builder::Decimal256Builder,
342 pub effective_gas_price: builder::Decimal256Builder,
343 pub gas_used: builder::Decimal256Builder,
344 pub contract_address: builder::BinaryBuilder,
345 pub logs_bloom: builder::BinaryBuilder,
346 pub type_: builder::UInt8Builder,
347 pub root: builder::BinaryBuilder,
348 pub status: builder::UInt8Builder,
349 pub sighash: builder::BinaryBuilder,
350 pub y_parity: builder::BooleanBuilder,
351 pub access_list: AccessListBuilder,
352 pub l1_fee: builder::Decimal256Builder,
353 pub l1_gas_price: builder::Decimal256Builder,
354 pub l1_gas_used: builder::Decimal256Builder,
355 pub l1_fee_scalar: builder::Decimal256Builder,
356 pub gas_used_for_l1: builder::Decimal256Builder,
357 pub max_fee_per_blob_gas: builder::Decimal256Builder,
358 pub blob_versioned_hashes: builder::ListBuilder<builder::BinaryBuilder>,
359 pub deposit_nonce: builder::Decimal256Builder,
360 pub blob_gas_price: builder::Decimal256Builder,
361 pub deposit_receipt_version: builder::Decimal256Builder,
362 pub blob_gas_used: builder::Decimal256Builder,
363 pub l1_base_fee_scalar: builder::Decimal256Builder,
364 pub l1_blob_base_fee: builder::Decimal256Builder,
365 pub l1_blob_base_fee_scalar: builder::Decimal256Builder,
366 pub l1_block_number: builder::UInt64Builder,
367 pub mint: builder::Decimal256Builder,
368 pub source_hash: builder::BinaryBuilder,
369}
370
371pub struct AccessListBuilder(pub builder::ListBuilder<builder::StructBuilder>);
372
373impl Default for AccessListBuilder {
374 fn default() -> Self {
375 Self(builder::ListBuilder::new(builder::StructBuilder::new(
376 match access_list_elem_dt() {
377 DataType::Struct(fields) => fields,
378 _ => unreachable!(),
379 },
380 vec![
381 Box::new(builder::BinaryBuilder::default()),
382 Box::new(builder::ListBuilder::new(builder::BinaryBuilder::default())),
383 ],
384 )))
385 }
386}
387
388impl TransactionsBuilder {
389 pub fn finish(mut self) -> RecordBatch {
390 RecordBatch::try_new(
391 Arc::new(transactions_schema()),
392 vec![
393 Arc::new(self.block_hash.finish()),
394 Arc::new(self.block_number.finish()),
395 Arc::new(self.from.finish()),
396 Arc::new(self.gas.with_precision_and_scale(76, 0).unwrap().finish()),
397 Arc::new(
398 self.gas_price
399 .with_precision_and_scale(76, 0)
400 .unwrap()
401 .finish(),
402 ),
403 Arc::new(self.hash.finish()),
404 Arc::new(self.input.finish()),
405 Arc::new(self.nonce.with_precision_and_scale(76, 0).unwrap().finish()),
406 Arc::new(self.to.finish()),
407 Arc::new(self.transaction_index.finish()),
408 Arc::new(self.value.with_precision_and_scale(76, 0).unwrap().finish()),
409 Arc::new(self.v.finish()),
410 Arc::new(self.r.finish()),
411 Arc::new(self.s.finish()),
412 Arc::new(
413 self.max_priority_fee_per_gas
414 .with_precision_and_scale(76, 0)
415 .unwrap()
416 .finish(),
417 ),
418 Arc::new(
419 self.max_fee_per_gas
420 .with_precision_and_scale(76, 0)
421 .unwrap()
422 .finish(),
423 ),
424 Arc::new(
425 self.chain_id
426 .with_precision_and_scale(76, 0)
427 .unwrap()
428 .finish(),
429 ),
430 Arc::new(
431 self.cumulative_gas_used
432 .with_precision_and_scale(76, 0)
433 .unwrap()
434 .finish(),
435 ),
436 Arc::new(
437 self.effective_gas_price
438 .with_precision_and_scale(76, 0)
439 .unwrap()
440 .finish(),
441 ),
442 Arc::new(
443 self.gas_used
444 .with_precision_and_scale(76, 0)
445 .unwrap()
446 .finish(),
447 ),
448 Arc::new(self.contract_address.finish()),
449 Arc::new(self.logs_bloom.finish()),
450 Arc::new(self.type_.finish()),
451 Arc::new(self.root.finish()),
452 Arc::new(self.status.finish()),
453 Arc::new(self.sighash.finish()),
454 Arc::new(self.y_parity.finish()),
455 Arc::new(self.access_list.0.finish()),
456 Arc::new(
457 self.l1_fee
458 .with_precision_and_scale(76, 0)
459 .unwrap()
460 .finish(),
461 ),
462 Arc::new(
463 self.l1_gas_price
464 .with_precision_and_scale(76, 0)
465 .unwrap()
466 .finish(),
467 ),
468 Arc::new(
469 self.l1_gas_used
470 .with_precision_and_scale(76, 0)
471 .unwrap()
472 .finish(),
473 ),
474 Arc::new(
475 self.l1_fee_scalar
476 .with_precision_and_scale(76, 0)
477 .unwrap()
478 .finish(),
479 ),
480 Arc::new(
481 self.gas_used_for_l1
482 .with_precision_and_scale(76, 0)
483 .unwrap()
484 .finish(),
485 ),
486 Arc::new(
487 self.max_fee_per_blob_gas
488 .with_precision_and_scale(76, 0)
489 .unwrap()
490 .finish(),
491 ),
492 Arc::new(self.blob_versioned_hashes.finish()),
493 Arc::new(
494 self.deposit_nonce
495 .with_precision_and_scale(76, 0)
496 .unwrap()
497 .finish(),
498 ),
499 Arc::new(
500 self.blob_gas_price
501 .with_precision_and_scale(76, 0)
502 .unwrap()
503 .finish(),
504 ),
505 Arc::new(
506 self.deposit_receipt_version
507 .with_precision_and_scale(76, 0)
508 .unwrap()
509 .finish(),
510 ),
511 Arc::new(
512 self.blob_gas_used
513 .with_precision_and_scale(76, 0)
514 .unwrap()
515 .finish(),
516 ),
517 Arc::new(
518 self.l1_base_fee_scalar
519 .with_precision_and_scale(76, 0)
520 .unwrap()
521 .finish(),
522 ),
523 Arc::new(
524 self.l1_blob_base_fee
525 .with_precision_and_scale(76, 0)
526 .unwrap()
527 .finish(),
528 ),
529 Arc::new(
530 self.l1_blob_base_fee_scalar
531 .with_precision_and_scale(76, 0)
532 .unwrap()
533 .finish(),
534 ),
535 Arc::new(self.l1_block_number.finish()),
536 Arc::new(self.mint.with_precision_and_scale(76, 0).unwrap().finish()),
537 Arc::new(self.source_hash.finish()),
538 ],
539 )
540 .unwrap()
541 }
542}
543
544#[derive(Default)]
545pub struct LogsBuilder {
546 pub removed: builder::BooleanBuilder,
547 pub log_index: builder::UInt64Builder,
548 pub transaction_index: builder::UInt64Builder,
549 pub transaction_hash: builder::BinaryBuilder,
550 pub block_hash: builder::BinaryBuilder,
551 pub block_number: builder::UInt64Builder,
552 pub address: builder::BinaryBuilder,
553 pub data: builder::BinaryBuilder,
554 pub topic0: builder::BinaryBuilder,
555 pub topic1: builder::BinaryBuilder,
556 pub topic2: builder::BinaryBuilder,
557 pub topic3: builder::BinaryBuilder,
558}
559
560impl LogsBuilder {
561 pub fn finish(mut self) -> RecordBatch {
562 RecordBatch::try_new(
563 Arc::new(logs_schema()),
564 vec![
565 Arc::new(self.removed.finish()),
566 Arc::new(self.log_index.finish()),
567 Arc::new(self.transaction_index.finish()),
568 Arc::new(self.transaction_hash.finish()),
569 Arc::new(self.block_hash.finish()),
570 Arc::new(self.block_number.finish()),
571 Arc::new(self.address.finish()),
572 Arc::new(self.data.finish()),
573 Arc::new(self.topic0.finish()),
574 Arc::new(self.topic1.finish()),
575 Arc::new(self.topic2.finish()),
576 Arc::new(self.topic3.finish()),
577 ],
578 )
579 .unwrap()
580 }
581}
582
583#[derive(Default)]
584pub struct TracesBuilder {
585 pub from: builder::BinaryBuilder,
586 pub to: builder::BinaryBuilder,
587 pub call_type: builder::StringBuilder,
588 pub gas: builder::Decimal256Builder,
589 pub input: builder::BinaryBuilder,
590 pub init: builder::BinaryBuilder,
591 pub value: builder::Decimal256Builder,
592 pub author: builder::BinaryBuilder,
593 pub reward_type: builder::StringBuilder,
594 pub block_hash: builder::BinaryBuilder,
595 pub block_number: builder::UInt64Builder,
596 pub address: builder::BinaryBuilder,
597 pub code: builder::BinaryBuilder,
598 pub gas_used: builder::Decimal256Builder,
599 pub output: builder::BinaryBuilder,
600 pub subtraces: builder::UInt64Builder,
601 pub trace_address: builder::ListBuilder<builder::UInt64Builder>,
602 pub transaction_hash: builder::BinaryBuilder,
603 pub transaction_position: builder::UInt64Builder,
604 pub type_: builder::StringBuilder,
605 pub error: builder::StringBuilder,
606 pub sighash: builder::BinaryBuilder,
607 pub action_address: builder::BinaryBuilder,
608 pub balance: builder::Decimal256Builder,
609 pub refund_address: builder::BinaryBuilder,
610}
611
612impl TracesBuilder {
613 pub fn finish(mut self) -> RecordBatch {
614 RecordBatch::try_new(
615 Arc::new(traces_schema()),
616 vec![
617 Arc::new(self.from.finish()),
618 Arc::new(self.to.finish()),
619 Arc::new(self.call_type.finish()),
620 Arc::new(self.gas.with_precision_and_scale(76, 0).unwrap().finish()),
621 Arc::new(self.input.finish()),
622 Arc::new(self.init.finish()),
623 Arc::new(self.value.with_precision_and_scale(76, 0).unwrap().finish()),
624 Arc::new(self.author.finish()),
625 Arc::new(self.reward_type.finish()),
626 Arc::new(self.block_hash.finish()),
627 Arc::new(self.block_number.finish()),
628 Arc::new(self.address.finish()),
629 Arc::new(self.code.finish()),
630 Arc::new(
631 self.gas_used
632 .with_precision_and_scale(76, 0)
633 .unwrap()
634 .finish(),
635 ),
636 Arc::new(self.output.finish()),
637 Arc::new(self.subtraces.finish()),
638 Arc::new(self.trace_address.finish()),
639 Arc::new(self.transaction_hash.finish()),
640 Arc::new(self.transaction_position.finish()),
641 Arc::new(self.type_.finish()),
642 Arc::new(self.error.finish()),
643 Arc::new(self.sighash.finish()),
644 Arc::new(self.action_address.finish()),
645 Arc::new(
646 self.balance
647 .with_precision_and_scale(76, 0)
648 .unwrap()
649 .finish(),
650 ),
651 Arc::new(self.refund_address.finish()),
652 ],
653 )
654 .unwrap()
655 }
656}
657
658#[cfg(test)]
659mod tests {
660 use super::*;
661
662 #[test]
663 fn smoke() {
664 BlocksBuilder::default().finish();
665 TransactionsBuilder::default().finish();
666 LogsBuilder::default().finish();
667 TracesBuilder::default().finish();
668 }
669}