Packages
An Ethereum Virtual Machine in pure Elixir: bytecode, transactions, and blocks from Frontier to Osaka, with no native code.
Current section
Files
Jump to
Current section
Files
mix.exs
defmodule EEVM.MixProject do
use Mix.Project
@version "0.1.0"
@source_url "https://github.com/mw2000/eevm"
def project do
[
app: :eevm,
name: "eevm",
version: @version,
elixir: "~> 1.18",
description:
"An Ethereum Virtual Machine in pure Elixir: bytecode, transactions, and blocks " <>
"from Frontier to Osaka, with no native code.",
package: package(),
source_url: @source_url,
homepage_url: @source_url,
start_permanent: Mix.env() == :prod,
elixirc_paths: elixirc_paths(Mix.env()),
deps: deps(),
dialyzer: [
plt_add_deps: :app_tree,
plt_add_apps: [:ex_unit, :mix],
ignore_warnings: "dialyzer_ignore.exs",
list_unused_filters: true
],
aliases: aliases(),
docs: docs()
]
end
def cli do
[
preferred_envs: [
bench: :prod,
dialyzer: :dev,
docs: :dev,
"eevm.state_tests": :test,
"eevm.blockchain_tests": :test,
"hex.publish": :dev
]
]
end
def application do
[
extra_applications: [:logger]
]
end
defp package do
[
licenses: ["MIT"],
links: %{
"GitHub" => @source_url,
"Changelog" => "#{@source_url}/blob/v#{@version}/CHANGELOG.md"
},
files: ~w(lib mix.exs README.md CHANGELOG.md LICENSE .formatter.exs)
]
end
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
defp deps do
[
{:ex_rlp, "~> 0.6.0"},
{:jason, "~> 1.4"},
# Optional so projects that depend on eevm never fetch it; :prod so `mix bench`
# measures the build users run.
{:benchee, "~> 1.3", only: [:dev, :prod], runtime: false, optional: true},
{:credo, "~> 1.7", only: [:dev, :test], runtime: false},
{:dialyxir, "~> 1.4", only: [:dev], runtime: false},
{:ex_doc, "~> 0.34", only: :dev, runtime: false}
]
end
defp aliases do
[
bench: &bench/1,
quality: [
"format --check-formatted",
"compile --warnings-as-errors",
"credo --strict",
"dialyzer",
"cmd mix test --warnings-as-errors"
]
]
end
# `mix bench` runs every bench/*_bench.exs suite except state_fixtures, which needs the
# ethereum-tests submodule; `mix bench interpreter state_fixtures` runs only the named ones.
defp bench(suites) do
Mix.Task.run("app.start")
files =
case suites do
[] -> Path.wildcard("bench/*_bench.exs") -- ["bench/state_fixtures_bench.exs"]
names -> Enum.map(names, &"bench/#{&1}_bench.exs")
end
Enum.each(files, &Code.require_file/1)
end
defp docs do
[
main: "EEVM",
source_url: @source_url,
source_ref: "v#{@version}",
extras: [
"README.md",
"CHANGELOG.md",
{"bench/README.md", filename: "benchmarks", title: "Benchmarks"},
"LICENSE"
],
# Public API first, then extension points; everything under
# "Internals" is an implementation detail and may change in any release.
groups_for_modules: [
"Getting started": [
EEVM,
EEVM.ABI,
EEVM.CallResult,
EEVM.Config,
EEVM.Error,
EEVM.BlockEnv,
EEVM.TxEnv
],
Transactions: [
EEVM.Handler,
EEVM.TransactionResult,
EEVM.TransactionError,
~r/^EEVM\.Transaction\.(Legacy|AccessList|FeeMarket|Blob|SetCode|Authorization)$/,
EEVM.Transaction,
EEVM.Transaction.Envelope,
EEVM.Transaction.Signer
],
Blocks: [
EEVM.Block,
EEVM.Block.Header,
EEVM.Block.Withdrawal,
EEVM.Block.Receipt,
EEVM.Block.Result
],
State: [
EEVM.Database,
EEVM.Database.InMemory,
EEVM.Database.ReadError,
EEVM.StateChanges,
EEVM.StateRoot
],
Extending: [
EEVM.Precompile,
EEVM.Tracer,
EEVM.Tracer.TraceStep,
EEVM.Block.Processor,
EEVM.Block.Requests,
EEVM.Block.Bloom,
EEVM.SystemContracts,
~r/^EEVM\.SystemContracts\./
],
Deprecated: [EEVM.Context.Block, EEVM.Context.Transaction, EEVM.Database.Legacy],
Internals: [~r/^EEVM\./]
]
]
end
end