@@ -15,9 +27,17 @@
<%= render BlockScoutWeb.TransactionView, "_link.html", transaction_hash: @internal_transaction.transaction_hash %>
+ <%= if !Enum.member?([:beforemint, :aftermint], @internal_transaction.call_type) do %>
<%= @internal_transaction |> BlockScoutWeb.AddressView.address_partial_selector(:from, assigns[:current_address]) |> BlockScoutWeb.RenderHelpers.render_partial() %>
+ <% end %>
+
+ <%= if !Enum.member?([:beforemint, :aftermint, :beforeburn, :afterburn], @internal_transaction.call_type) do %>
→
+ <% end %>
+
+ <%= if !Enum.member?([:beforeburn, :afterburn], @internal_transaction.call_type) do %>
<%= @internal_transaction |> BlockScoutWeb.AddressView.address_partial_selector(:to, assigns[:current_address]) |> BlockScoutWeb.RenderHelpers.render_partial() %>
+ <% end %>
diff --git a/apps/block_scout_web/lib/block_scout_web/views/internal_transaction_view.ex b/apps/block_scout_web/lib/block_scout_web/views/internal_transaction_view.ex
index 46252f72c..a11ab8de5 100644
--- a/apps/block_scout_web/lib/block_scout_web/views/internal_transaction_view.ex
+++ b/apps/block_scout_web/lib/block_scout_web/views/internal_transaction_view.ex
@@ -22,6 +22,12 @@ defmodule BlockScoutWeb.InternalTransactionView do
def type(%InternalTransaction{type: :call, call_type: :callcode}), do: gettext("Call Code")
def type(%InternalTransaction{type: :call, call_type: :delegatecall}), do: gettext("Delegate Call")
def type(%InternalTransaction{type: :call, call_type: :staticcall}), do: gettext("Static Call")
+ def type(%InternalTransaction{type: :call, call_type: :beforetransfer}), do: gettext("Transfer before EVM")
+ def type(%InternalTransaction{type: :call, call_type: :aftertransfer}), do: gettext("Transfer after EVM")
+ def type(%InternalTransaction{type: :call, call_type: :beforemint}), do: gettext("Mint before EVM")
+ def type(%InternalTransaction{type: :call, call_type: :aftermint}), do: gettext("Mint after EVM")
+ def type(%InternalTransaction{type: :call, call_type: :beforeburn}), do: gettext("Burn before EVM")
+ def type(%InternalTransaction{type: :call, call_type: :afterburn}), do: gettext("Burn after EVM")
def type(%InternalTransaction{type: :create}), do: gettext("Create")
def type(%InternalTransaction{type: :create2}), do: gettext("Create2")
def type(%InternalTransaction{type: :selfdestruct}), do: gettext("Self-Destruct")
diff --git a/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/geth/call.ex b/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/geth/call.ex
index c83b15732..839802990 100644
--- a/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/geth/call.ex
+++ b/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/geth/call.ex
@@ -300,7 +300,7 @@ defmodule EthereumJSONRPC.Geth.Call do
end
defp entry_to_elixir({key, value} = entry)
- when key in ~w(callType createdContractAddressHash createdContractCode error from init input output to transactionHash type) and
+ when key in ~w(callType createdContractAddressHash createdContractCode error from init input output to transactionHash type purpose) and
is_binary(value),
do: entry
@@ -325,6 +325,7 @@ defmodule EthereumJSONRPC.Geth.Call do
"traceAddress" => trace_address,
"type" => "call" = type,
"callType" => call_type,
+ "purpose" => purpose,
"from" => from_address_hash,
"to" => to_address_hash,
"gas" => gas,
@@ -332,7 +333,7 @@ defmodule EthereumJSONRPC.Geth.Call do
"error" => error,
"value" => value
})
- when call_type in ~w(call callcode delegatecall) do
+ when call_type in ~w(call callcode delegatecall beforetransfer aftertransfer beforemint aftermint beforeburn afterburn) do
%{
block_number: block_number,
transaction_index: transaction_index,
@@ -341,6 +342,7 @@ defmodule EthereumJSONRPC.Geth.Call do
trace_address: trace_address,
type: type,
call_type: call_type,
+ purpose: purpose,
from_address_hash: from_address_hash,
to_address_hash: to_address_hash,
gas: gas,
@@ -358,6 +360,7 @@ defmodule EthereumJSONRPC.Geth.Call do
"traceAddress" => trace_address,
"type" => "call" = type,
"callType" => call_type,
+ "purpose" => purpose,
"from" => from_address_hash,
"to" => to_address_hash,
"gas" => gas,
@@ -366,7 +369,7 @@ defmodule EthereumJSONRPC.Geth.Call do
"output" => output,
"value" => value
})
- when call_type in ~w(call callcode delegatecall) do
+ when call_type in ~w(call callcode delegatecall beforetransfer aftertransfer beforemint aftermint beforeburn afterburn) do
%{
block_number: block_number,
transaction_index: transaction_index,
@@ -375,6 +378,7 @@ defmodule EthereumJSONRPC.Geth.Call do
trace_address: trace_address,
type: type,
call_type: call_type,
+ purpose: purpose,
from_address_hash: from_address_hash,
to_address_hash: to_address_hash,
gas: gas,
@@ -394,6 +398,7 @@ defmodule EthereumJSONRPC.Geth.Call do
"traceAddress" => trace_address,
"type" => "call" = type,
"callType" => "staticcall" = call_type,
+ "purpose" => purpose,
"from" => from_address_hash,
"to" => to_address_hash,
"input" => input,
@@ -410,6 +415,7 @@ defmodule EthereumJSONRPC.Geth.Call do
trace_address: trace_address,
type: type,
call_type: call_type,
+ purpose: purpose,
from_address_hash: from_address_hash,
to_address_hash: to_address_hash,
gas: gas,
diff --git a/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/parity/trace/action.ex b/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/parity/trace/action.ex
index 4785c0d0c..3d9d82849 100644
--- a/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/parity/trace/action.ex
+++ b/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/parity/trace/action.ex
@@ -45,7 +45,7 @@ defmodule EthereumJSONRPC.Parity.Trace.Action do
end
defp entry_to_elixir({key, value} = entry)
- when key in ~w(address callType from init input refundAddress to creationMethod) and is_binary(value),
+ when key in ~w(address callType purpose from init input refundAddress to creationMethod) and is_binary(value),
do: entry
defp entry_to_elixir({key, quantity}) when key in ~w(balance gas value) do
diff --git a/apps/ethereum_jsonrpc/priv/js/ethereum_jsonrpc/geth/debug_traceTransaction/tracer.js b/apps/ethereum_jsonrpc/priv/js/ethereum_jsonrpc/geth/debug_traceTransaction/tracer.js
index 7de7afc06..6c315c9ff 100644
--- a/apps/ethereum_jsonrpc/priv/js/ethereum_jsonrpc/geth/debug_traceTransaction/tracer.js
+++ b/apps/ethereum_jsonrpc/priv/js/ethereum_jsonrpc/geth/debug_traceTransaction/tracer.js
@@ -2,6 +2,8 @@
{
// The call stack of the EVM execution.
callStack: [{}],
+ transfersBeforeEVMExecution: [],
+ transfersAfterEVMExecution: [],
// step is invoked for every opcode that the VM executes.
step(log, db) {
@@ -242,13 +244,60 @@
this.topCall().error = 'execution reverted';
},
+ captureArbitrumTransfer(transfer) {
+ const before = transfer.before;
+ var from = "0x0000000000000000000000000000000000000000";
+ var to = "0x0000000000000000000000000000000000000000";
+ var kind = "";
+
+ if (transfer.from) {
+ from = transfer.from.toLowerCase();
+ kind = "burn";
+ }
+ if (transfer.to) {
+ to = transfer.to.toLowerCase();
+ kind = "mint";
+ }
+ if (transfer.from && transfer.to) {
+ kind = "transfer";
+ }
+
+ //const purposes = ["feeCollection", "feePayment", "deposit", "escrow", "prepaid", "refund", "l1Send"];
+ //var purpose = purposes[transfer.purpose];
+
+
+ const call = {
+ type: "call",
+ callType: (before ? "before" : "after") + kind,
+ purpose: transfer.purpose,
+ from: from,
+ to: to,
+ input: "0x",
+ output: "0x",
+ traceAddress: [],
+ value: "0x" + transfer.value.toString(16),
+ gas: "0x0",
+ gasUsed: "0x0",
+ };
+
+ if (before) {
+ this.transfersBeforeEVMExecution.push(call);
+ } else {
+ this.transfersAfterEVMExecution.push(call);
+ }
+ },
+
// result is invoked when all the opcodes have been iterated over and returns
// the final result of the tracing.
result(ctx, db) {
const result = this.ctxToResult(ctx, db);
const filtered = this.filterNotUndefined(result);
const callSequence = this.sequence(filtered, [], filtered.valueBigInt, []).callSequence;
- return this.encodeCallSequence(callSequence);
+ const evmCalls = this.encodeCallSequence(callSequence);
+ const beforeCalls = this.transfersBeforeEVMExecution;
+ const afterCalls = this.transfersAfterEVMExecution;
+ const calls = beforeCalls.concat(evmCalls).concat(afterCalls);
+ return calls;
},
ctxToResult(ctx, db) {
@@ -430,6 +479,7 @@
this.putValue(call);
this.putGas(call);
this.putGasUsed(call);
+ call.purpose = "general";
return call;
},
diff --git a/apps/explorer/lib/explorer/chain/internal_transaction.ex b/apps/explorer/lib/explorer/chain/internal_transaction.ex
index 60cb8b89b..d36da31b3 100644
--- a/apps/explorer/lib/explorer/chain/internal_transaction.ex
+++ b/apps/explorer/lib/explorer/chain/internal_transaction.ex
@@ -4,7 +4,7 @@ defmodule Explorer.Chain.InternalTransaction do
use Explorer.Schema
alias Explorer.Chain.{Address, Block, Data, Gas, Hash, PendingBlockOperation, Transaction, Wei}
- alias Explorer.Chain.InternalTransaction.{Action, CallType, Result, Type}
+ alias Explorer.Chain.InternalTransaction.{Action, CallType, Purpose, Result, Type}
@typedoc """
* `block_number` - the `t:Explorer.Chain.Block.t/0` `number` that the `transaction` is collated into.
@@ -36,6 +36,7 @@ defmodule Explorer.Chain.InternalTransaction do
block_number: Explorer.Chain.Block.block_number() | nil,
type: Type.t(),
call_type: CallType.t() | nil,
+ purpose: Purpose.t() | nil,
created_contract_address: %Ecto.Association.NotLoaded{} | Address.t() | nil,
created_contract_address_hash: Hash.t() | nil,
created_contract_code: Data.t() | nil,
@@ -62,6 +63,7 @@ defmodule Explorer.Chain.InternalTransaction do
@primary_key false
schema "internal_transactions" do
field(:call_type, CallType)
+ field(:purpose, Purpose)
field(:created_contract_code, Data)
field(:error, :string)
field(:gas, :decimal)
@@ -630,6 +632,7 @@ defmodule Explorer.Chain.InternalTransaction do
defp internal_transaction_to_raw(%{type: :call} = transaction) do
%{
call_type: call_type,
+ purpose: purpose,
to_address_hash: to_address_hash,
from_address_hash: from_address_hash,
input: input,
@@ -640,6 +643,7 @@ defmodule Explorer.Chain.InternalTransaction do
action = %{
"callType" => call_type,
+ "purpose" => purpose,
"to" => to_address_hash,
"from" => from_address_hash,
"input" => input,
diff --git a/apps/explorer/lib/explorer/chain/internal_transaction/action.ex b/apps/explorer/lib/explorer/chain/internal_transaction/action.ex
index 663e30651..30c673da8 100644
--- a/apps/explorer/lib/explorer/chain/internal_transaction/action.ex
+++ b/apps/explorer/lib/explorer/chain/internal_transaction/action.ex
@@ -22,6 +22,10 @@ defmodule Explorer.Chain.InternalTransaction.Action do
{"callType", Atom.to_string(type)}
end
+ defp entry_to_raw({"purpose", type}) do
+ {"purpose", Atom.to_string(type)}
+ end
+
defp entry_to_raw({"gas" = key, %Decimal{} = decimal}) do
value =
decimal
diff --git a/apps/explorer/lib/explorer/chain/internal_transaction/call_type.ex b/apps/explorer/lib/explorer/chain/internal_transaction/call_type.ex
index 2f94ca901..f8bbfa0d2 100644
--- a/apps/explorer/lib/explorer/chain/internal_transaction/call_type.ex
+++ b/apps/explorer/lib/explorer/chain/internal_transaction/call_type.ex
@@ -13,7 +13,7 @@ defmodule Explorer.Chain.InternalTransaction.CallType do
when fuzzing these if the memory layout differs between the current contract and the delegated contract.
* `:staticcall`
"""
- @type t :: :call | :callcode | :delegatecall | :staticcall
+ @type t :: :call | :callcode | :delegatecall | :staticcall | :beforetransfer | :aftertransfer | :beforemint | :aftermint | :beforeburn | :afterburn
@doc """
Casts `term` to `t:t/0`
@@ -48,11 +48,17 @@ defmodule Explorer.Chain.InternalTransaction.CallType do
"""
@impl Ecto.Type
@spec cast(term()) :: {:ok, t()} | :error
- def cast(t) when t in ~w(call callcode delegatecall staticcall)a, do: {:ok, t}
+ def cast(t) when t in ~w(call callcode delegatecall staticcall beforetransfer aftertransfer beforemint aftermint beforeburn afterburn)a, do: {:ok, t}
def cast("call"), do: {:ok, :call}
def cast("callcode"), do: {:ok, :callcode}
def cast("delegatecall"), do: {:ok, :delegatecall}
def cast("staticcall"), do: {:ok, :staticcall}
+ def cast("beforetransfer"), do: {:ok, :beforetransfer}
+ def cast("aftertransfer"), do: {:ok, :aftertransfer}
+ def cast("beforemint"), do: {:ok, :beforemint}
+ def cast("aftermint"), do: {:ok, :aftermint}
+ def cast("beforeburn"), do: {:ok, :beforeburn}
+ def cast("afterburn"), do: {:ok, :afterburn}
def cast(_), do: :error
@doc """
@@ -79,6 +85,13 @@ defmodule Explorer.Chain.InternalTransaction.CallType do
def dump(:callcode), do: {:ok, "callcode"}
def dump(:delegatecall), do: {:ok, "delegatecall"}
def dump(:staticcall), do: {:ok, "staticcall"}
+ def dump(:beforetransfer), do: {:ok, "beforetransfer"}
+ def dump(:aftertransfer), do: {:ok, "aftertransfer"}
+ def dump(:beforemint), do: {:ok, "beforemint"}
+ def dump(:aftermint), do: {:ok, "aftermint"}
+ def dump(:beforeburn), do: {:ok, "beforeburn"}
+ def dump(:afterburn), do: {:ok, "afterburn"}
+
def dump(_), do: :error
@doc """
@@ -105,6 +118,12 @@ defmodule Explorer.Chain.InternalTransaction.CallType do
def load("callcode"), do: {:ok, :callcode}
def load("delegatecall"), do: {:ok, :delegatecall}
def load("staticcall"), do: {:ok, :staticcall}
+ def load("beforetransfer"), do: {:ok, :beforetransfer}
+ def load("aftertransfer"), do: {:ok, :aftertransfer}
+ def load("beforemint"), do: {:ok, :beforemint}
+ def load("aftermint"), do: {:ok, :aftermint}
+ def load("beforeburn"), do: {:ok, :beforeburn}
+ def load("afterburn"), do: {:ok, :afterburn}
def load(_), do: :error
@doc """
diff --git a/apps/explorer/lib/explorer/chain/internal_transaction/purpose.ex b/apps/explorer/lib/explorer/chain/internal_transaction/purpose.ex
new file mode 100644
index 000000000..81717a03c
--- /dev/null
+++ b/apps/explorer/lib/explorer/chain/internal_transaction/purpose.ex
@@ -0,0 +1,52 @@
+defmodule Explorer.Chain.InternalTransaction.Purpose do
+ @moduledoc """
+ Internal transaction purposes
+ """
+
+ use Ecto.Type
+
+ @type t :: :fee_collection | :fee_payment | :deposit | :escrow | :prepaid | :refund | :l1_send | :general
+
+ @impl Ecto.Type
+ @spec cast(term()) :: {:ok, t()} | :error
+ def cast(t) when t in ~w(fee_collection fee_payment deposit escrow prepaid refund l1_send general)a, do: {:ok, t}
+ def cast("feeCollection"), do: {:ok, :fee_collection}
+ def cast("feePayment"), do: {:ok, :fee_payment}
+ def cast("deposit"), do: {:ok, :deposit}
+ def cast("escrow"), do: {:ok, :escrow}
+ def cast("prepaid"), do: {:ok, :prepaid}
+ def cast("refund"), do: {:ok, :refund}
+ def cast("l1Send"), do: {:ok, :l1_send}
+ def cast("general"), do: {:ok, :general}
+ def cast(_), do: :error
+
+ @impl Ecto.Type
+ @spec dump(term()) :: {:ok, String.t()} | :error
+ def dump(:fee_collection), do: {:ok, "feeCollection"}
+ def dump(:fee_payment), do: {:ok, "feePayment"}
+ def dump(:deposit), do: {:ok, "deposit"}
+ def dump(:escrow), do: {:ok, "escrow"}
+ def dump(:prepaid), do: {:ok, "prepaid"}
+ def dump(:refund), do: {:ok, "refund"}
+ def dump(:l1_send), do: {:ok, "l1Send"}
+ def dump(:general), do: {:ok, "general"}
+ def dump(_), do: :error
+
+ @impl Ecto.Type
+ @spec load(term()) :: {:ok, t()} | :error
+ def load("feeCollection"), do: {:ok, :fee_collection}
+ def load("feePayment"), do: {:ok, :fee_payment}
+ def load("deposit"), do: {:ok, :deposit}
+ def load("escrow"), do: {:ok, :escrow}
+ def load("prepaid"), do: {:ok, :prepaid}
+ def load("refund"), do: {:ok, :refund}
+ def load("l1Send"), do: {:ok, :l1_send}
+ def load("general"), do: {:ok, :general}
+
+ @doc """
+ The underlying database type: `:string`
+ """
+ @impl Ecto.Type
+ @spec type() :: :string
+ def type, do: :string
+end
diff --git a/apps/explorer/priv/repo/migrations/20180221001948_create_internal_transactions.exs b/apps/explorer/priv/repo/migrations/20180221001948_create_internal_transactions.exs
index cb7c64c7c..f2b9c7f34 100644
--- a/apps/explorer/priv/repo/migrations/20180221001948_create_internal_transactions.exs
+++ b/apps/explorer/priv/repo/migrations/20180221001948_create_internal_transactions.exs
@@ -4,6 +4,7 @@ defmodule Explorer.Repo.Migrations.CreateInternalTransactions do
def change do
create table(:internal_transactions) do
add(:call_type, :string, null: true)
+ add(:purpose, :string, null: true)
add(:created_contract_code, :bytea, null: true)
# null unless there is an error
add(:error, :string, null: true)
diff --git a/apps/indexer/lib/indexer/fetcher/internal_transaction.ex b/apps/indexer/lib/indexer/fetcher/internal_transaction.ex
index 6a112dfeb..39b8d3769 100644
--- a/apps/indexer/lib/indexer/fetcher/internal_transaction.ex
+++ b/apps/indexer/lib/indexer/fetcher/internal_transaction.ex
@@ -126,10 +126,12 @@ defmodule Indexer.Fetcher.InternalTransaction do
import_internal_transaction(internal_transactions_params, unique_numbers)
{:error, reason} ->
- Logger.error(fn -> ["failed to fetch internal transactions for blocks: ", inspect(reason)] end,
+ Logger.error(fn -> ["failed to fetch internal transactions for blocks: ", inspect(reason), "\n", inspect(block_numbers)] end,
error_count: unique_numbers_count
)
+ :timer.sleep(:timer.seconds(1))
+
# re-queue the de-duped entries
{:retry, unique_numbers}
@@ -237,6 +239,8 @@ defmodule Indexer.Fetcher.InternalTransaction do
error_count: Enum.count(unique_numbers)
)
+ :timer.sleep(:timer.seconds(1))
+
# re-queue the de-duped entries
{:retry, unique_numbers}
end
diff --git a/init/data/ArbGasInfo.abi b/init/data/ArbGasInfo.abi
index 89007bd20..ff6e52331 100644
--- a/init/data/ArbGasInfo.abi
+++ b/init/data/ArbGasInfo.abi
@@ -1 +1 @@
-[{"inputs":[],"name":"getCurrentTxL1GasFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGasAccountingParams","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGasBacklog","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGasBacklogTolerance","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getL1BaseFeeEstimate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getL1BaseFeeEstimateInertia","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getL1GasPriceEstimate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumGasPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPricesInArbGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"aggregator","type":"address"}],"name":"getPricesInArbGasWithAggregator","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPricesInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"aggregator","type":"address"}],"name":"getPricesInWeiWithAggregator","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPricingInertia","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"}]
+[{"inputs":[],"name":"getCurrentTxL1GasFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGasAccountingParams","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGasBacklog","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGasBacklogTolerance","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGasPool","outputs":[{"internalType":"int64","name":"","type":"int64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGasPoolSeconds","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGasPoolTarget","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGasPoolWeight","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getL1BaseFeeEstimate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getL1BaseFeeEstimateInertia","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getL1GasPriceEstimate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumGasPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPricesInArbGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"aggregator","type":"address"}],"name":"getPricesInArbGasWithAggregator","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPricesInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"aggregator","type":"address"}],"name":"getPricesInWeiWithAggregator","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPricingInertia","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRateEstimate","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRateEstimateInertia","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"}]
diff --git a/init/data/ArbOwner.abi b/init/data/ArbOwner.abi
index 87624d783..a6993cdfe 100644
--- a/init/data/ArbOwner.abi
+++ b/init/data/ArbOwner.abi
@@ -1 +1 @@
-[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes4","name":"method","type":"bytes4"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"OwnerActs","type":"event"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"addChainOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllChainOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNetworkFeeAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isChainOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ownerToRemove","type":"address"}],"name":"removeChainOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"newVersion","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"scheduleArbOSUpgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceInWei","type":"uint256"}],"name":"setL1BaseFeeEstimate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"inertia","type":"uint64"}],"name":"setL1BaseFeeEstimateInertia","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceInWei","type":"uint256"}],"name":"setL2BaseFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"sec","type":"uint64"}],"name":"setL2GasBacklogTolerance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"sec","type":"uint64"}],"name":"setL2GasPricingInertia","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"limit","type":"uint64"}],"name":"setMaxTxGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceInWei","type":"uint256"}],"name":"setMinimumL2BaseFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newNetworkFeeAccount","type":"address"}],"name":"setNetworkFeeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"limit","type":"uint64"}],"name":"setSpeedLimit","outputs":[],"stateMutability":"nonpayable","type":"function"}]
+[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes4","name":"method","type":"bytes4"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"OwnerActs","type":"event"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"addChainOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllChainOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNetworkFeeAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isChainOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ownerToRemove","type":"address"}],"name":"removeChainOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"newVersion","type":"uint64"},{"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"scheduleArbOSUpgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"factor","type":"uint64"}],"name":"setGasPoolSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"target","type":"uint64"}],"name":"setGasPoolTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"weight","type":"uint64"}],"name":"setGasPoolWeight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceInWei","type":"uint256"}],"name":"setL1BaseFeeEstimate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"inertia","type":"uint64"}],"name":"setL1BaseFeeEstimateInertia","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceInWei","type":"uint256"}],"name":"setL2BaseFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"sec","type":"uint64"}],"name":"setL2GasBacklogTolerance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"sec","type":"uint64"}],"name":"setL2GasPricingInertia","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"limit","type":"uint64"}],"name":"setMaxTxGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceInWei","type":"uint256"}],"name":"setMinimumL2BaseFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newNetworkFeeAccount","type":"address"}],"name":"setNetworkFeeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"inertia","type":"uint64"}],"name":"setRateEstimateInertia","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"limit","type":"uint64"}],"name":"setSpeedLimit","outputs":[],"stateMutability":"nonpayable","type":"function"}]
diff --git a/init/data/ArbosActs.abi b/init/data/ArbosActs.abi
index 7e4e1720d..d067c545b 100644
--- a/init/data/ArbosActs.abi
+++ b/init/data/ArbosActs.abi
@@ -1 +1 @@
-[{"inputs":[],"name":"CallerNotArbOS","type":"error"},{"inputs":[{"internalType":"uint256","name":"l1BaseFee","type":"uint256"},{"internalType":"uint64","name":"l1BlockNumber","type":"uint64"},{"internalType":"uint64","name":"timePassed","type":"uint64"}],"name":"startBlock","outputs":[],"stateMutability":"nonpayable","type":"function"}]
+[{"inputs":[],"name":"CallerNotArbOS","type":"error"},{"inputs":[{"internalType":"uint256","name":"l1BaseFee","type":"uint256"},{"internalType":"uint256","name":"l2BaseFeeLastBlock","type":"uint256"},{"internalType":"uint64","name":"l1BlockNumber","type":"uint64"},{"internalType":"uint64","name":"timePassed","type":"uint64"}],"name":"startBlock","outputs":[],"stateMutability":"nonpayable","type":"function"}]