Skip to content

Commit 47034f0

Browse files
Merge pull request #120 from ethscriptions-protocol/use_ipc
Use IPC instead of HTTP for performance
2 parents 2279f2d + 29dc822 commit 47034f0

File tree

5 files changed

+219
-146
lines changed

5 files changed

+219
-146
lines changed

app/jobs/gap_detection_job.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def get_import_range
6060
return nil if latest_l2_block_number == 0
6161

6262
# Get L1 attributes to find the corresponding L1 block
63-
l1_attributes = GethDriver.client.get_l1_attributes(latest_l2_block_number)
63+
l1_attributes = GethDriver.get_l1_attributes(latest_l2_block_number)
6464
current_l1_block = l1_attributes[:number]
6565

6666
# Check the last validated block
@@ -92,7 +92,7 @@ def get_l2_blocks_for_l1_block(l1_block_number)
9292
# Search backwards from current L2 tip to find blocks from this L1 block
9393
# This is expensive but necessary for gap filling
9494
(0..latest_l2_block_number).reverse_each do |l2_block_num|
95-
l1_attributes = GethDriver.client.get_l1_attributes(l2_block_num)
95+
l1_attributes = GethDriver.get_l1_attributes(l2_block_num)
9696

9797
if l1_attributes[:number] == l1_block_number
9898
l2_block = GethDriver.client.call("eth_getBlockByNumber", ["0x#{l2_block_num.to_s(16)}", false])

app/services/eth_block_importer.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def populate_ethscriptions_block_cache
7474
current_block = EthscriptionsBlock.from_rpc_result(block_data)
7575

7676
ImportProfiler.start("l1_attributes_fetch")
77-
l1_attributes = GethDriver.client.get_l1_attributes(current_block.number)
77+
l1_attributes = GethDriver.get_l1_attributes(current_block.number)
7878
ImportProfiler.stop("l1_attributes_fetch")
7979
current_block.assign_l1_attributes(l1_attributes)
8080

@@ -107,7 +107,7 @@ def current_block_number
107107
# Removed batch processing - now imports one block at a time
108108

109109
def find_first_l2_block_in_epoch(l2_block_number_candidate)
110-
l1_attributes = GethDriver.client.get_l1_attributes(l2_block_number_candidate)
110+
l1_attributes = GethDriver.get_l1_attributes(l2_block_number_candidate)
111111

112112
if l1_attributes[:sequence_number] == 0
113113
return l2_block_number_candidate
@@ -124,7 +124,7 @@ def set_eth_block_starting_points
124124
l1_block = EthRpcClient.l1.get_block(SysConfig.l1_genesis_block_number)
125125
eth_block = EthBlock.from_rpc_result(l1_block)
126126
ethscriptions_block = EthscriptionsBlock.from_rpc_result(latest_l2_block)
127-
l1_attributes = GethDriver.client.get_l1_attributes(latest_l2_block_number)
127+
l1_attributes = GethDriver.get_l1_attributes(latest_l2_block_number)
128128

129129
ethscriptions_block.assign_l1_attributes(l1_attributes)
130130

@@ -134,7 +134,7 @@ def set_eth_block_starting_points
134134
return [eth_block.number, 0]
135135
end
136136

137-
l1_attributes = GethDriver.client.get_l1_attributes(latest_l2_block_number)
137+
l1_attributes = GethDriver.get_l1_attributes(latest_l2_block_number)
138138

139139
l1_candidate = l1_attributes[:number]
140140
l2_candidate = latest_l2_block_number
@@ -148,7 +148,7 @@ def set_eth_block_starting_points
148148
l1_result = ethereum_client.get_block(l1_candidate)
149149
l1_hash = Hash32.from_hex(l1_result['hash'])
150150

151-
l1_attributes = GethDriver.client.get_l1_attributes(l2_candidate)
151+
l1_attributes = GethDriver.get_l1_attributes(l2_candidate)
152152

153153
l2_block = GethDriver.client.call("eth_getBlockByNumber", ["0x#{l2_candidate.to_s(16)}", false])
154154

app/services/geth_driver.rb

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,41 @@
11
module GethDriver
22
extend self
33
attr_reader :password
4-
4+
include Memery
5+
56
def client
6-
@_client ||= GethClient.new(ENV.fetch('GETH_RPC_URL'))
7+
@_client ||= EthRpcClient.l2_engine
78
end
8-
9+
910
def non_auth_client
10-
@_non_auth_client ||= GethClient.new(non_authed_rpc_url)
11+
@_non_auth_client ||= EthRpcClient.l2
12+
end
13+
14+
def get_l1_attributes(l2_block_number)
15+
if l2_block_number > 0
16+
l2_block = EthRpcClient.l2.call("eth_getBlockByNumber", ["0x#{l2_block_number.to_s(16)}", true])
17+
l2_attributes_tx = l2_block['transactions'].first
18+
L1AttributesTxCalldata.decode(
19+
ByteString.from_hex(l2_attributes_tx['input']),
20+
l2_block_number
21+
)
22+
else
23+
l1_block = EthRpcClient.l1.get_block(SysConfig.l1_genesis_block_number)
24+
eth_block = EthBlock.from_rpc_result(l1_block)
25+
{
26+
timestamp: eth_block.timestamp,
27+
number: eth_block.number,
28+
base_fee: eth_block.base_fee_per_gas,
29+
blob_base_fee: 1,
30+
hash: eth_block.block_hash,
31+
batcher_hash: Hash32.from_bin("\x00".b * 32),
32+
sequence_number: 0,
33+
base_fee_scalar: 0,
34+
blob_base_fee_scalar: 1
35+
}.with_indifferent_access
36+
end
1137
end
38+
memoize :get_l1_attributes
1239

1340
def non_authed_rpc_url
1441
ENV.fetch('NON_AUTH_GETH_RPC_URL')

0 commit comments

Comments
 (0)