Skip to content

Commit f227edd

Browse files
committed
Merge branch 'main' into integrate-kurtosis
2 parents 53a5e0b + a6526d8 commit f227edd

File tree

13 files changed

+186
-249
lines changed

13 files changed

+186
-249
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,9 @@ jobs:
139139
steps:
140140
- uses: actions/checkout@v4
141141
- name: Set up Docker Buildx
142-
uses: docker/setup-buildx-action@v1
142+
uses: docker/setup-buildx-action@v3
143143
- name: Build Docker image
144-
uses: docker/build-push-action@v2
144+
uses: docker/build-push-action@v5
145145
with:
146146
context: .
147147
file: ./Dockerfile

Dockerfile

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,37 @@ RUN apt-get update && apt-get install -y cmake protobuf-compiler
3333
# Install protobuf for elixir
3434
RUN mix escript.install --force hex protobuf
3535

36+
# Download openapi spec
37+
COPY Makefile .oapi_version /consensus/
38+
RUN make download-beacon-node-oapi
39+
3640
# Install rust
3741
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
3842

3943
ENV PATH="${PATH}:/root/.cargo/bin:/root/.mix/escripts"
4044

45+
# Precompile rust crates. Rustler stores targets under _build
46+
COPY ./native /consensus/native
47+
RUN cd /consensus/native/bls_nif && cargo build --release \
48+
--target-dir="/consensus/_build/prod/lib/lambda_ethereum_consensus/native/bls_nif"
49+
RUN cd /consensus/native/kzg_nif && cargo build --release \
50+
--target-dir="/consensus/_build/prod/lib/lambda_ethereum_consensus/native/kzg_nif"
51+
RUN cd /consensus/native/snappy_nif && cargo build --release \
52+
--target-dir="/consensus/_build/prod/lib/lambda_ethereum_consensus/native/snappy_nif"
53+
RUN cd /consensus/native/ssz_nif && cargo build --release \
54+
--target-dir="/consensus/_build/prod/lib/lambda_ethereum_consensus/native/ssz_nif"
55+
56+
# Precompile elixir dependencies
57+
COPY mix.exs mix.lock .fork_version ./
58+
COPY ./config/config.exs /consensus/config/config.exs
59+
RUN mix deps.get
60+
RUN mix deps.compile
61+
4162
COPY . .
4263
COPY --from=libp2p_builder /libp2p_port/libp2p_port /consensus/priv/native/libp2p_port
4364

4465
RUN protoc --elixir_out=./lib proto/libp2p.proto
4566

46-
RUN make download-beacon-node-oapi
47-
48-
RUN mix deps.get
4967
RUN mix compile
5068

5169
ENTRYPOINT [ "iex", "-S", "mix", "run", "--"]

lib/bls.ex

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,48 +5,50 @@ defmodule Bls do
55
use Rustler, otp_app: :lambda_ethereum_consensus, crate: "bls_nif"
66

77
@type privkey() :: <<_::256>>
8+
@type pubkey :: <<_::384>>
9+
@type signature :: <<_::768>>
810

9-
@spec sign(privkey(), binary()) :: {:ok, Types.bls_signature()} | {:error, any()}
11+
@spec sign(privkey(), binary()) :: {:ok, signature()} | {:error, any()}
1012
def sign(_private_key, _message) do
1113
:erlang.nif_error(:nif_not_loaded)
1214
end
1315

14-
@spec aggregate([Types.bls_signature()]) :: {:ok, Types.bls_signature()} | {:error, any()}
16+
@spec aggregate([signature()]) :: {:ok, signature()} | {:error, any()}
1517
def aggregate(_signatures) do
1618
:erlang.nif_error(:nif_not_loaded)
1719
end
1820

19-
@spec verify(Types.bls_pubkey(), binary(), Types.bls_signature()) ::
21+
@spec verify(pubkey(), binary(), signature()) ::
2022
{:ok, boolean} | {:error, binary()}
2123
def verify(_public_key, _message, _signature) do
2224
:erlang.nif_error(:nif_not_loaded)
2325
end
2426

25-
@spec fast_aggregate_verify([Types.bls_pubkey()], binary(), Types.bls_signature()) ::
27+
@spec fast_aggregate_verify([pubkey()], binary(), signature()) ::
2628
{:ok, boolean} | {:error, binary()}
2729
def fast_aggregate_verify(_public_keys, _message, _signature) do
2830
:erlang.nif_error(:nif_not_loaded)
2931
end
3032

31-
@spec eth_fast_aggregate_verify([Types.bls_pubkey()], binary(), Types.bls_signature()) ::
33+
@spec eth_fast_aggregate_verify([pubkey()], binary(), signature()) ::
3234
{:ok, boolean} | {:error, binary()}
3335
def eth_fast_aggregate_verify(_public_keys, _message, _signature) do
3436
:erlang.nif_error(:nif_not_loaded)
3537
end
3638

37-
@spec aggregate_verify([Types.bls_pubkey()], [binary()], Types.bls_signature()) ::
39+
@spec aggregate_verify([pubkey()], [binary()], signature()) ::
3840
{:ok, boolean} | {:error, binary()}
3941
def aggregate_verify(_public_keys, _messages, _signature) do
4042
:erlang.nif_error(:nif_not_loaded)
4143
end
4244

43-
@spec eth_aggregate_pubkeys([Types.bls_pubkey()]) ::
44-
{:ok, Types.bls_pubkey()} | {:error, any()}
45+
@spec eth_aggregate_pubkeys([pubkey()]) ::
46+
{:ok, pubkey()} | {:error, any()}
4547
def eth_aggregate_pubkeys(_public_keys) do
4648
:erlang.nif_error(:nif_not_loaded)
4749
end
4850

49-
@spec key_validate(Types.bls_pubkey()) ::
51+
@spec key_validate(pubkey()) ::
5052
{:ok, boolean} | {:error, binary()}
5153
def key_validate(_public_key) do
5254
:erlang.nif_error(:nif_not_loaded)
@@ -56,7 +58,7 @@ defmodule Bls do
5658
@doc """
5759
Same as ``Bls.verify``, but treats errors as invalid signatures.
5860
"""
59-
@spec valid?(Types.bls_pubkey(), binary(), Types.bls_signature()) :: boolean()
61+
@spec valid?(pubkey(), binary(), signature()) :: boolean()
6062
def valid?(public_key, message, signature) do
6163
case Bls.verify(public_key, message, signature) do
6264
{:ok, bool} -> bool
@@ -68,7 +70,7 @@ defmodule Bls do
6870
@doc """
6971
Same as ``Bls.fast_aggregate_verify``, but treats errors as invalid signatures.
7072
"""
71-
@spec fast_aggregate_valid?([Types.bls_pubkey()], binary(), Types.bls_signature()) :: boolean()
73+
@spec fast_aggregate_valid?([pubkey()], binary(), signature()) :: boolean()
7274
def fast_aggregate_valid?(public_keys, message, signature) do
7375
case Bls.fast_aggregate_verify(public_keys, message, signature) do
7476
{:ok, bool} -> bool

lib/kzg.ex

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,44 +4,47 @@ defmodule Kzg do
44
"""
55
use Rustler, otp_app: :lambda_ethereum_consensus, crate: "kzg_nif"
66

7-
@spec blob_to_kzg_commitment(Types.blob()) :: {:ok, Types.kzg_commitment()} | {:error, binary()}
7+
@type commitment :: <<_::384>>
8+
@type proof :: <<_::768>>
9+
10+
@spec blob_to_kzg_commitment(Types.blob()) :: {:ok, commitment()} | {:error, binary()}
811
def blob_to_kzg_commitment(_blob) do
912
:erlang.nif_error(:nif_not_loaded)
1013
end
1114

1215
@spec compute_kzg_proof(Types.blob(), Types.bytes32()) ::
13-
{:ok, {Types.kzg_proof(), Types.bytes32()}} | {:error, binary()}
16+
{:ok, {proof(), Types.bytes32()}} | {:error, binary()}
1417
def compute_kzg_proof(_blob, _z) do
1518
:erlang.nif_error(:nif_not_loaded)
1619
end
1720

1821
@spec verify_kzg_proof(
19-
Types.kzg_commitment(),
22+
commitment(),
2023
Types.bytes32(),
2124
Types.bytes32(),
22-
Types.kzg_proof()
25+
proof()
2326
) ::
2427
{:ok, boolean} | {:error, binary()}
2528
def verify_kzg_proof(_kzg_commitment, _z, _y, _kzg_proof) do
2629
:erlang.nif_error(:nif_not_loaded)
2730
end
2831

29-
@spec compute_blob_kzg_proof(Types.blob(), Types.kzg_commitment()) ::
30-
{:ok, Types.kzg_proof()} | {:error, binary()}
32+
@spec compute_blob_kzg_proof(Types.blob(), commitment()) ::
33+
{:ok, proof()} | {:error, binary()}
3134
def compute_blob_kzg_proof(_blob, _kzg_commitment) do
3235
:erlang.nif_error(:nif_not_loaded)
3336
end
3437

35-
@spec verify_blob_kzg_proof(Types.blob(), Types.kzg_commitment(), Types.kzg_proof()) ::
38+
@spec verify_blob_kzg_proof(Types.blob(), commitment(), proof()) ::
3639
{:ok, boolean} | {:error, binary()}
3740
def verify_blob_kzg_proof(_blob, _kzg_commitment, _kzg_proof) do
3841
:erlang.nif_error(:nif_not_loaded)
3942
end
4043

4144
@spec verify_blob_kzg_proof_batch(
4245
list(Types.blob()),
43-
list(Types.kzg_commitment()),
44-
list(Types.kzg_proof())
46+
list(commitment()),
47+
list(proof())
4548
) ::
4649
{:ok, boolean} | {:error, binary()}
4750
def verify_blob_kzg_proof_batch(_blobs, _kzg_commitments, _kzg_proofs) do
@@ -54,8 +57,8 @@ defmodule Kzg do
5457

5558
@spec blob_kzg_proof_batch_valid?(
5659
list(Types.blob()),
57-
list(Types.kzg_commitment()),
58-
list(Types.kzg_proof())
60+
list(commitment()),
61+
list(proof())
5962
) :: boolean()
6063
def blob_kzg_proof_batch_valid?(blobs, kzg_commitments, kzg_proofs) do
6164
case verify_blob_kzg_proof_batch(blobs, kzg_commitments, kzg_proofs) do

lib/lambda_ethereum_consensus/beacon/beacon_node.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ defmodule LambdaEthereumConsensus.Beacon.BeaconNode do
5050
LambdaEthereumConsensus.P2P.IncomingRequests,
5151
LambdaEthereumConsensus.Beacon.PendingBlocks,
5252
LambdaEthereumConsensus.Beacon.SyncBlocks,
53-
LambdaEthereumConsensus.P2P.GossipSub,
5453
LambdaEthereumConsensus.P2P.Gossip.Attestation,
5554
LambdaEthereumConsensus.P2P.Gossip.BeaconBlock,
56-
LambdaEthereumConsensus.P2P.Gossip.BlobSideCar
55+
LambdaEthereumConsensus.P2P.Gossip.BlobSideCar,
56+
LambdaEthereumConsensus.P2P.Gossip.OperationsCollector
5757
] ++ validator_children
5858

5959
Supervisor.init(children, strategy: :one_for_all)

lib/lambda_ethereum_consensus/beacon/sync_blocks.ex

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,19 @@ defmodule LambdaEthereumConsensus.Beacon.SyncBlocks do
7575

7676
if Enum.empty?(chunks) do
7777
Logger.info("[Optimistic Sync] Sync completed")
78-
Gossip.BeaconBlock.start()
79-
Gossip.BlobSideCar.start()
78+
start_subscriptions()
8079
else
8180
Process.sleep(1000)
8281
perform_sync(remaining_chunks)
8382
end
8483
end
8584

85+
defp start_subscriptions() do
86+
Gossip.BeaconBlock.start()
87+
Gossip.BlobSideCar.start()
88+
Gossip.OperationsCollector.start()
89+
end
90+
8691
@spec fetch_blocks_by_slot(Types.slot(), non_neg_integer()) ::
8792
{:ok, [SignedBeaconBlock.t()]} | {:error, String.t()}
8893
def fetch_blocks_by_slot(from, count) do

lib/lambda_ethereum_consensus/p2p/gossip/consumer.ex

Lines changed: 0 additions & 57 deletions
This file was deleted.

lib/lambda_ethereum_consensus/p2p/gossip/gossipsub.ex

Lines changed: 0 additions & 42 deletions
This file was deleted.

0 commit comments

Comments
 (0)