parent
c406eb93d7
commit
63b023f5e5
@ -0,0 +1,32 @@ |
|||||||
|
defmodule Explorer.Chain.ZkevmLifecycleTxn do |
||||||
|
@moduledoc "Models an L1 lifecycle transaction for zkEVM." |
||||||
|
|
||||||
|
use Explorer.Schema |
||||||
|
|
||||||
|
alias Explorer.Chain.{Hash, ZkevmTxnBatch} |
||||||
|
|
||||||
|
@required_attrs ~w(id hash is_verify)a |
||||||
|
|
||||||
|
@type t :: %__MODULE__{ |
||||||
|
hash: Hash.t(), |
||||||
|
is_verify: boolean() |
||||||
|
} |
||||||
|
|
||||||
|
@primary_key {:id, :integer, autogenerate: false} |
||||||
|
schema "zkevm_lifecycle_l1_transactions" do |
||||||
|
field(:hash, Hash.Full) |
||||||
|
field(:is_verify, :boolean) |
||||||
|
|
||||||
|
has_many(:sequenced_batches, ZkevmTxnBatch, foreign_key: :sequence_id) |
||||||
|
has_many(:verified_batches, ZkevmTxnBatch, foreign_key: :verify_id) |
||||||
|
|
||||||
|
timestamps() |
||||||
|
end |
||||||
|
|
||||||
|
def changeset(%__MODULE__{} = txn, attrs \\ %{}) do |
||||||
|
txn |
||||||
|
|> cast(attrs, @required_attrs) |
||||||
|
|> validate_required(@required_attrs) |
||||||
|
|> unique_constraint(:id) |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,45 @@ |
|||||||
|
defmodule Explorer.Chain.ZkevmTxnBatch do |
||||||
|
@moduledoc "Models a batch of transactions for zkEVM." |
||||||
|
|
||||||
|
use Explorer.Schema |
||||||
|
|
||||||
|
alias Explorer.Chain.{Hash, ZkevmLifecycleTxn} |
||||||
|
|
||||||
|
@required_attrs ~w(number timestamp l2_transaction_hashes global_exit_root acc_input_hash state_root sequence_id verify_id)a |
||||||
|
|
||||||
|
@type t :: %__MODULE__{ |
||||||
|
number: non_neg_integer(), |
||||||
|
timestamp: DateTime.t(), |
||||||
|
l2_transaction_hashes: [Hash.t()], |
||||||
|
global_exit_root: Hash.t(), |
||||||
|
acc_input_hash: Hash.t(), |
||||||
|
state_root: Hash.t(), |
||||||
|
sequence_id: non_neg_integer() | nil, |
||||||
|
sequence_transaction: %Ecto.Association.NotLoaded{} | ZkevmLifecycleTxn.t() | nil, |
||||||
|
verify_id: non_neg_integer() | nil, |
||||||
|
verify_transaction: %Ecto.Association.NotLoaded{} | ZkevmLifecycleTxn.t() | nil |
||||||
|
} |
||||||
|
|
||||||
|
@primary_key false |
||||||
|
schema "zkevm_transaction_batches" do |
||||||
|
field(:number, :integer, primary_key: true) |
||||||
|
field(:timestamp, :utc_datetime_usec) |
||||||
|
field(:l2_transaction_hashes, {:array, Hash.Full}) |
||||||
|
field(:global_exit_root, Hash.Full) |
||||||
|
field(:acc_input_hash, Hash.Full) |
||||||
|
field(:state_root, Hash.Full) |
||||||
|
|
||||||
|
belongs_to(:sequence_transaction, ZkevmLifecycleTxn, foreign_key: :sequence_id, references: :id, type: :integer) |
||||||
|
belongs_to(:verify_transaction, ZkevmLifecycleTxn, foreign_key: :verify_id, references: :id, type: :integer) |
||||||
|
|
||||||
|
timestamps() |
||||||
|
end |
||||||
|
|
||||||
|
def changeset(%__MODULE__{} = batches, attrs \\ %{}) do |
||||||
|
batches |
||||||
|
|> cast(attrs, @required_attrs) |
||||||
|
|> validate_required(@required_attrs) |
||||||
|
|> foreign_key_constraint(:sequence_id) |
||||||
|
|> foreign_key_constraint(:verify_id) |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,35 @@ |
|||||||
|
defmodule Explorer.Repo.Migrations.CreateZkevmTables do |
||||||
|
use Ecto.Migration |
||||||
|
|
||||||
|
def change do |
||||||
|
create table(:zkevm_lifecycle_l1_transactions, primary_key: false) do |
||||||
|
add(:id, :integer, null: false, primary_key: true) |
||||||
|
add(:hash, :bytea, null: false) |
||||||
|
add(:is_verify, :boolean, null: false) |
||||||
|
timestamps(null: false, type: :utc_datetime_usec) |
||||||
|
end |
||||||
|
|
||||||
|
create table(:zkevm_transaction_batches, primary_key: false) do |
||||||
|
add(:number, :integer, null: false, primary_key: true) |
||||||
|
add(:timestamp, :"timestamp without time zone", null: false) |
||||||
|
add(:l2_transaction_hashes, {:array, :bytea}, null: false) |
||||||
|
add(:global_exit_root, :bytea, null: false) |
||||||
|
add(:acc_input_hash, :bytea, null: false) |
||||||
|
add(:state_root, :bytea, null: false) |
||||||
|
|
||||||
|
add( |
||||||
|
:sequence_id, |
||||||
|
references(:zkevm_lifecycle_l1_transactions, on_delete: :restrict, on_update: :update_all, type: :integer), |
||||||
|
null: true |
||||||
|
) |
||||||
|
|
||||||
|
add( |
||||||
|
:verify_id, |
||||||
|
references(:zkevm_lifecycle_l1_transactions, on_delete: :restrict, on_update: :update_all, type: :integer), |
||||||
|
null: true |
||||||
|
) |
||||||
|
|
||||||
|
timestamps(null: false, type: :utc_datetime_usec) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
Loading…
Reference in new issue