diff --git a/apps/block_scout_web/assets/css/_typography.scss b/apps/block_scout_web/assets/css/_typography.scss index 1dfa898a9..1d50904fa 100644 --- a/apps/block_scout_web/assets/css/_typography.scss +++ b/apps/block_scout_web/assets/css/_typography.scss @@ -127,4 +127,4 @@ textarea.form-control { [data-transaction-status^="Error"], [data-internal-transaction-type="Suicide"] { color: $danger; -} \ No newline at end of file +} diff --git a/apps/block_scout_web/assets/css/components/_tile.scss b/apps/block_scout_web/assets/css/components/_tile.scss index 3288d5fc3..974ae0701 100644 --- a/apps/block_scout_web/assets/css/components/_tile.scss +++ b/apps/block_scout_web/assets/css/components/_tile.scss @@ -19,7 +19,7 @@ $tile-body-a-color: #5959d8 !default; @mixin generate-tile-block($prefix, $color, $label-color: false) { &#{ $prefix } { - border-left: 4px solid $color; + border-left: 4px solid $color !important; .tile-transaction-type-block { a { @@ -246,6 +246,10 @@ $tile-body-a-color: #5959d8 !default; ".tile-type-internal-transaction", $tile-type-internal-transaction-color ); + @include generate-tile-block( + ".tile-type-internal-transaction-outside", + $cyan + ); @include generate-tile-block( ".tile-type-api-documentation", $tile-type-api-documentation-color diff --git a/apps/block_scout_web/lib/block_scout_web/schema/scalars.ex b/apps/block_scout_web/lib/block_scout_web/schema/scalars.ex index b7a8939a3..a6331de32 100644 --- a/apps/block_scout_web/lib/block_scout_web/schema/scalars.ex +++ b/apps/block_scout_web/lib/block_scout_web/schema/scalars.ex @@ -105,6 +105,22 @@ defmodule BlockScoutWeb.Schema.Scalars do value(:callcode) value(:delegatecall) value(:staticcall) + value(:beforetransfer) + value(:aftertransfer) + value(:beforemint) + value(:aftermint) + value(:beforeburn) + value(:afterburn) + end + + enum :purpose do + value(:fee_collection) + value(:fee_payment) + value(:deposit) + value(:escrow) + value(:prepaid) + value(:refund) + value(:l1_send) end enum :type do diff --git a/apps/block_scout_web/lib/block_scout_web/schema/types.ex b/apps/block_scout_web/lib/block_scout_web/schema/types.ex index 0968cdaa2..7fe70c9b7 100644 --- a/apps/block_scout_web/lib/block_scout_web/schema/types.ex +++ b/apps/block_scout_web/lib/block_scout_web/schema/types.ex @@ -73,6 +73,7 @@ defmodule BlockScoutWeb.Schema.Types do """ node object(:internal_transaction, id_fetcher: &internal_transaction_id_fetcher/2) do field(:call_type, :call_type) + field(:purpose, :purpose) field(:created_contract_code, :data) field(:error, :string) field(:gas, :decimal) diff --git a/apps/block_scout_web/lib/block_scout_web/templates/internal_transaction/_tile.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/internal_transaction/_tile.html.eex index 63fbe96bc..468cf2259 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/internal_transaction/_tile.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/internal_transaction/_tile.html.eex @@ -1,5 +1,17 @@ <% error = @internal_transaction.error %> -
" data-test="internal_transaction" data-key="<%= @internal_transaction.transaction_hash %>_<%= @internal_transaction.index %>" data-internal-transaction-transaction-hash="<%= @internal_transaction.transaction_hash %>" data-internal-transaction-index="<%= @internal_transaction.index %>"> +
+ <%= case @internal_transaction.call_type do + :beforetransfer -> "tile-type-internal-transaction-outside" + :aftertransfer -> "tile-type-internal-transaction-outside" + :beforemint -> "tile-type-internal-transaction-outside" + :aftermint -> "tile-type-internal-transaction-outside" + :beforeburn -> "tile-type-internal-transaction-outside" + :afterburn -> "tile-type-internal-transaction-outside" + _ -> "tile-type-internal-transaction" + end + %>" + data-test="internal_transaction" data-key="<%= @internal_transaction.transaction_hash %>_<%= @internal_transaction.index %>" data-internal-transaction-transaction-hash="<%= @internal_transaction.transaction_hash %>" data-internal-transaction-index="<%= @internal_transaction.index %>">
@@ -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"}]