diff --git a/.circleci/config.yml b/.circleci/config.yml index c7ece304b9..aeeff10d39 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -55,6 +55,11 @@ commands: name: Attach workspace at: . + docker_login: + description: login to dockerhub for private repo access + steps: + - run: printf "%s\\n" "$DOCKER_PASS" | docker login -u "$DOCKER_USER" --password-stdin + make_docker_images: description: Builds docker images steps: @@ -483,6 +488,7 @@ jobs: name: Setup data dir command: | [ -d data ] || mkdir data && chmod 777 data + - docker_login - make_docker_images - run: name: Start daemon services @@ -527,6 +533,7 @@ jobs: name: Setup data dir command: | [ -d data ] || mkdir data && chmod 777 data + - docker_login - make_docker_images - run: name: Start daemon services @@ -578,6 +585,7 @@ jobs: [ -d data1 ] || mkdir data1 && chmod 777 data1 [ -d data2 ] || mkdir data2 && chmod 777 data2 [ -d data ] || mkdir data && chmod 777 data + - docker_login - make_docker_images - run: name: Start daemon services @@ -628,8 +636,9 @@ jobs: git submodule init git submodule update --remote - run: echo 'export PATH=~/.cargo/bin:$PATH' >> $BASH_ENV + - docker_login - run: - name: Start geth, postgres and pull in blockchain snapshot + name: Start geth, postgres, feefeed and pull in blockchain snapshot command: make start-services background: true - run: echo 'export PATH=~/.cargo/bin:$PATH' >> $BASH_ENV diff --git a/.gitignore b/.gitignore index 4698c9417e..af83f6c9e7 100644 --- a/.gitignore +++ b/.gitignore @@ -66,6 +66,8 @@ priv/apps/watcher_security_critical_api # where Geth gets it's snapshot data data/ +data1/ +data2/ # local test setup localchain_contract_addresses.env diff --git a/.gitmodules b/.gitmodules index a343bb6c6e..e06fe9e2c8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "priv/cabbage"] path = priv/cabbage - url = git@github.com:omgnetwork/specs.git - branch = master \ No newline at end of file + url = https://github.com/omgnetwork/specs.git + branch = master diff --git a/Makefile b/Makefile index ff3d96425c..422dafe9f7 100644 --- a/Makefile +++ b/Makefile @@ -427,7 +427,7 @@ docker-remote-childchain: ### start-services: SNAPSHOT=SNAPSHOT_MIX_EXIT_PERIOD_SECONDS_120 make init_test && \ - docker-compose up geth nginx postgres + docker-compose up postgres_feefeed feefeed geth nginx postgres start-child_chain: . ${OVERRIDING_VARIABLES} && \ diff --git a/bin/variables b/bin/variables index 5e23c036c5..cbce4ce913 100755 --- a/bin/variables +++ b/bin/variables @@ -12,7 +12,10 @@ export ETHEREUM_EVENTS_CHECK_INTERVAL_MS=800 export ETHEREUM_STALLED_SYNC_THRESHOLD_MS=20000 export EXIT_PROCESSOR_SLA_MARGIN=5520 export FEE_CLAIMER_ADDRESS=0x3b9f4c1dd26e0be593373b1d36cee2008cbeb837 -export FEE_ADAPTER=file +export FEE_ADAPTER=feed +export FEE_FEED_URL=http://127.0.0.1:4000/api/v1 +export STORED_FEE_UPDATE_INTERVAL_MINUTES=1 +export FEE_CHANGE_TOLERANCE_PERCENT=1 export FEE_SPECS_FILE_PATH=./priv/dev-artifacts/fee_specs.dev.json export DD_HOSTNAME=localhost export DD_DISABLED=true diff --git a/bin/variables_test_barebone b/bin/variables_test_barebone index 25c1392a5f..897d6fa5a4 100755 --- a/bin/variables_test_barebone +++ b/bin/variables_test_barebone @@ -19,7 +19,10 @@ export ETHEREUM_HEIGHT_CHECK_INTERVAL_MS=800 export ETHEREUM_EVENTS_CHECK_INTERVAL_MS=800 export ETHEREUM_STALLED_SYNC_THRESHOLD_MS=20000 export FEE_CLAIMER_ADDRESS=0x3b9f4c1dd26e0be593373b1d36cee2008cbeb837 -export FEE_ADAPTER=file +export FEE_ADAPTER=feed +export FEE_FEED_URL=http://127.0.0.1:4000/api/v1 +export STORED_FEE_UPDATE_INTERVAL_MINUTES=1 +export FEE_CHANGE_TOLERANCE_PERCENT=1 # Fee specs file path needs to be an absolute path as the childchain will start deep in the _build subdirectory export FEE_SPECS_FILE_PATH=$(pwd)/priv/dev-artifacts/fee_specs.dev.json export DD_HOSTNAME=localhost diff --git a/docker-compose.yml b/docker-compose.yml index c85a3b97b2..5969357709 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,7 +16,7 @@ services: retries: 5 networks: chain_net: - ipv4_address: 172.27.0.106 + ipv4_address: 172.27.0.100 geth: image: ethereum/client-go:v1.9.12 @@ -99,7 +99,8 @@ services: - ETHEREUM_EVENTS_CHECK_INTERVAL_MS=800 - ETHEREUM_STALLED_SYNC_THRESHOLD_MS=20000 - FEE_CLAIMER_ADDRESS=0x3b9f4c1dd26e0be593373b1d36cee2008cbeb837 - - FEE_ADAPTER=file + - FEE_ADAPTER=feed + - FEE_FEED_URL=http://172.27.0.107:4000/api/v1 - STORED_FEE_UPDATE_INTERVAL_MINUTES=1 - FEE_CHANGE_TOLERANCE_PERCENT=1 - FEE_SPECS_FILE_PATH=/dev-artifacts/fee_specs.dev.json @@ -124,6 +125,8 @@ services: depends_on: nginx: condition: service_healthy + feefeed: + condition: service_healthy networks: chain_net: ipv4_address: 172.27.0.103 @@ -181,7 +184,7 @@ services: - ETHEREUM_NETWORK=LOCALCHAIN - ETHEREUM_RPC_URL=http://172.27.0.102:80 - CHILD_CHAIN_URL=http://172.27.0.103:9656 - - DATABASE_URL=postgresql://omisego_dev:omisego_dev@172.27.0.106:5432/omisego_dev + - DATABASE_URL=postgresql://omisego_dev:omisego_dev@172.27.0.100:5432/omisego_dev - PORT=7534 - APP_ENV=local_docker_development - DD_HOSTNAME=datadog @@ -216,6 +219,61 @@ services: chain_net: ipv4_address: 172.27.0.105 + postgres_feefeed: + image: postgres:12.2-alpine + ports: + - "5433:5432" + restart: always + healthcheck: + test: pg_isready -U feefeed + interval: 5s + timeout: 3s + retries: 5 + environment: + POSTGRES_USER: feefeed + POSTGRES_PASSWORD: feefeed + POSTGRES_DB: feefeed + networks: + chain_net: + ipv4_address: 172.27.0.106 + + feefeed: + image: "omisego/feefeed:latest" + command: "start" + container_name: feefeed + environment: + - GITHUB_TOKEN="" + - GITHUB_ORGANISATION=omgnetwork + - GITHUB_REPO=fee-rules-public + - GITHUB_BRANCH=master + - RULES_FETCH_INTERVAL=20 + - RATES_FETCH_INTERVAL=20 + - GITHUB_FILENAME=fee_rules + - DATABASE_URL=postgresql://feefeed:feefeed@172.27.0.106:5432/feefeed + - SECRET_KEY_BASE="Y8naENMR8b+vbPHILjwNtEfWFrnbGi2k+UYWm75VnKHfsavmyGLtTmmeJxAGK+zJ" + - DATADOG_DISABLED=true + - DATADOG_HOST="localhost" + - ETHEREUM_NODE_URL=http://172.27.0.102:80 + ports: + - "4000:4000" + expose: + - "4000" + depends_on: + postgres_feefeed: + condition: service_healthy + nginx: + condition: service_healthy + restart: always + healthcheck: + test: curl localhost:4000 + interval: 30s + timeout: 1s + retries: 5 + start_period: 30s + networks: + chain_net: + ipv4_address: 172.27.0.107 + networks: chain_net: driver: bridge diff --git a/priv/cabbage b/priv/cabbage index cd262a3b62..e64b25529e 160000 --- a/priv/cabbage +++ b/priv/cabbage @@ -1 +1 @@ -Subproject commit cd262a3b624a347b05208b154e0c2d7f85dd92a9 +Subproject commit e64b25529e5bef7bc36177d8f53fbe5133b8207b diff --git a/priv/perf/apps/load_test/lib/common/byzantine_events.ex b/priv/perf/apps/load_test/lib/common/byzantine_events.ex index bb9a27f272..0c70901abb 100644 --- a/priv/perf/apps/load_test/lib/common/byzantine_events.ex +++ b/priv/perf/apps/load_test/lib/common/byzantine_events.ex @@ -30,7 +30,7 @@ defmodule LoadTest.Common.ByzantineEvents do You probably want to prefill the child chain with transactions, see `OMG.Performance.ExtendedPerftest` or just: ``` - LoadTest.Common.ExtendedPerftest.start(10_000, 16, randomized: false) + LoadTest.Common.ExtendedPerftest.start(10_000, 16, 75, randomized: false) ``` (`randomized: false` is useful to test massive honest-standard-exiting, since it will create many unspent UTXOs for each of the spenders) diff --git a/priv/perf/apps/load_test/lib/common/extended_perftest.ex b/priv/perf/apps/load_test/lib/common/extended_perftest.ex index 8e8b37331c..6cd097a879 100644 --- a/priv/perf/apps/load_test/lib/common/extended_perftest.ex +++ b/priv/perf/apps/load_test/lib/common/extended_perftest.ex @@ -39,7 +39,7 @@ defmodule LoadTest.Common.ExtendedPerftest do Performance.init() spenders = Generators.generate_users(2) - LoadTest.Common.ExtendedPerftest.start(100, spenders, destdir: destdir) + LoadTest.Common.ExtendedPerftest.start(100, spenders, fee_amount, destdir: destdir) ``` The results are going to be waiting for you in a file within `destdir` and will be logged. @@ -49,8 +49,8 @@ defmodule LoadTest.Common.ExtendedPerftest do - :randomized - whether the non-change outputs of the txs sent out will be random or equal to sender (if `false`), defaults to `true` """ - @spec start(pos_integer(), list(map()), keyword()) :: :ok - def start(ntx_to_send, spenders, opts \\ []) do + @spec start(pos_integer(), list(map()), pos_integer(), keyword()) :: :ok + def start(ntx_to_send, spenders, fee_amount, opts \\ []) do _ = Logger.info( "Number of spenders: #{inspect(length(spenders))}, number of tx to send per spender: #{inspect(ntx_to_send)}" <> @@ -61,18 +61,18 @@ defmodule LoadTest.Common.ExtendedPerftest do opts = Keyword.merge(defaults, opts) - utxos = create_deposits(spenders, ntx_to_send) + utxos = create_deposits(spenders, ntx_to_send, fee_amount) - result = LoadTest.Common.Runner.run(ntx_to_send, utxos, opts, false) + result = LoadTest.Common.Runner.run(ntx_to_send, utxos, fee_amount, opts, false) Process.sleep(20_000) result end - @spec create_deposits(list(map()), pos_integer()) :: list() - defp create_deposits(spenders, ntx_to_send) do - Enum.map(make_deposits(ntx_to_send * 2, spenders), fn {:ok, owner, blknum, amount} -> + @spec create_deposits(list(map()), pos_integer(), pos_integer()) :: list() + defp create_deposits(spenders, ntx_to_send, fee_amount) do + Enum.map(make_deposits(ntx_to_send * 2 * fee_amount, spenders), fn {:ok, owner, blknum, amount} -> utxo_pos = ExPlasma.Utxo.pos(%{blknum: blknum, txindex: 0, oindex: 0}) %{owner: owner, utxo_pos: utxo_pos, amount: amount} end) diff --git a/priv/perf/apps/load_test/lib/common/runner.ex b/priv/perf/apps/load_test/lib/common/runner.ex index a9c4a65546..1a34bad6d5 100644 --- a/priv/perf/apps/load_test/lib/common/runner.ex +++ b/priv/perf/apps/load_test/lib/common/runner.ex @@ -24,15 +24,21 @@ defmodule LoadTest.Common.Runner do Foreach user runs n submit_transaction requests to the chain server. Requests are done sequentially for every user """ - @spec run(pos_integer(), list(), keyword(), profile :: boolean()) :: :ok - def run(ntx_to_send, utxos, opts, true), do: do_profiled_run(ntx_to_send, utxos, opts) - def run(ntx_to_send, utxos, opts, false), do: do_run(ntx_to_send, utxos, opts) + @spec run(pos_integer(), list(), pos_integer(), keyword(), profile :: boolean()) :: :ok + def run(ntx_to_send, utxos, fee_amount, opts, true), do: do_profiled_run(ntx_to_send, utxos, fee_amount, opts) + def run(ntx_to_send, utxos, fee_amount, opts, false), do: do_run(ntx_to_send, utxos, fee_amount, opts) - defp do_run(ntx_to_send, utxos, opts) do + defp do_run(ntx_to_send, utxos, fee_amount, opts) do {duration, _result} = :timer.tc(fn -> # fire async transaction senders - manager = LoadTest.Common.SenderManager.start_link_all_senders(ntx_to_send, utxos, opts) + manager = + LoadTest.Common.SenderManager.start_link_all_senders( + ntx_to_send, + utxos, + fee_amount, + opts + ) # Wait all senders do their job, checker will stop when it happens and stops itself wait_for(manager) @@ -43,8 +49,8 @@ defmodule LoadTest.Common.Runner do :ok end - defp do_profiled_run(ntx_to_send, utxos, opts) do - :fprof.apply(&do_run/3, [ntx_to_send, utxos, opts], procs: [:all]) + defp do_profiled_run(ntx_to_send, utxos, fee_amount, opts) do + :fprof.apply(&do_run/4, [ntx_to_send, utxos, fee_amount, opts], procs: [:all]) :fprof.profile() destfile = Path.join(opts[:destdir], "perf_result_profiling_#{:os.system_time(:seconds)}") diff --git a/priv/perf/apps/load_test/lib/common/sender_manager.ex b/priv/perf/apps/load_test/lib/common/sender_manager.ex index 29d2141dfa..15cbcee64b 100644 --- a/priv/perf/apps/load_test/lib/common/sender_manager.ex +++ b/priv/perf/apps/load_test/lib/common/sender_manager.ex @@ -32,17 +32,17 @@ defmodule LoadTest.Common.SenderManager do @doc """ Starts the sender's manager process """ - @spec start_link_all_senders(pos_integer(), list(), keyword()) :: pid - def start_link_all_senders(ntx_to_send, utxos, opts) do - {:ok, mypid} = GenServer.start_link(__MODULE__, {ntx_to_send, utxos, opts}, name: __MODULE__) + @spec start_link_all_senders(pos_integer(), list(), pos_integer(), keyword()) :: pid + def start_link_all_senders(ntx_to_send, utxos, fee_amount, opts) do + {:ok, mypid} = GenServer.start_link(__MODULE__, {ntx_to_send, utxos, fee_amount, opts}, name: __MODULE__) mypid end @doc """ Starts sender processes """ - @spec init({pos_integer(), list(), keyword()}) :: {:ok, map()} - def init({ntx_to_send, utxos, opts}) do + @spec init({pos_integer(), list(), pos_integer(), keyword()}) :: {:ok, map()} + def init({ntx_to_send, utxos, fee_amount, opts}) do Process.flag(:trap_exit, true) _ = Logger.debug("init called with utxos: #{inspect(length(utxos))}, ntx_to_send: #{inspect(ntx_to_send)}") @@ -50,7 +50,7 @@ defmodule LoadTest.Common.SenderManager do utxos |> Enum.with_index(1) |> Enum.map(fn {utxo, seqnum} -> - {:ok, pid} = LoadTest.Common.SenderServer.start_link({seqnum, utxo, ntx_to_send, opts}) + {:ok, pid} = LoadTest.Common.SenderServer.start_link({seqnum, utxo, ntx_to_send, fee_amount, opts}) {seqnum, pid} end) @@ -63,6 +63,7 @@ defmodule LoadTest.Common.SenderManager do {:ok, %{ senders: senders, + fee_amount: fee_amount, events: [], block_times: [], goal: ntx_to_send, diff --git a/priv/perf/apps/load_test/lib/common/sender_server.ex b/priv/perf/apps/load_test/lib/common/sender_server.ex index df8da6f8ba..60c689ddff 100644 --- a/priv/perf/apps/load_test/lib/common/sender_server.ex +++ b/priv/perf/apps/load_test/lib/common/sender_server.ex @@ -19,7 +19,6 @@ defmodule LoadTest.Common.SenderServer do # Waiting time (in milliseconds) before unsuccessful Tx submission is retried. @tx_retry_waiting_time_ms 333 - @fees_amount 1 use GenServer @@ -46,6 +45,7 @@ defmodule LoadTest.Common.SenderServer do :seqnum, :ntx_to_send, :spender, + :fee_amount, # {blknum, txindex, oindex, amount}, @see %LastTx above :last_tx, :child_chain_url, @@ -80,7 +80,7 @@ defmodule LoadTest.Common.SenderServer do defaults to `true` """ @spec init({pos_integer(), map(), pos_integer(), keyword()}) :: {:ok, state()} - def init({seqnum, utxo, ntx_to_send, opts}) do + def init({seqnum, utxo, ntx_to_send, fee_amount, opts}) do defaults = [randomized: true] opts = Keyword.merge(defaults, opts) @@ -90,7 +90,7 @@ defmodule LoadTest.Common.SenderServer do ) send(self(), :do) - {:ok, init_state(seqnum, utxo, ntx_to_send, opts)} + {:ok, init_state(seqnum, utxo, ntx_to_send, fee_amount, opts)} end @doc """ @@ -120,7 +120,7 @@ defmodule LoadTest.Common.SenderServer do defp prepare_and_submit_tx(state) do to_spend = 1 - new_amount = state.last_tx.amount - to_spend - @fees_amount + new_amount = state.last_tx.amount - to_spend - state.fee_amount recipient = if state.randomized do @@ -186,14 +186,16 @@ defmodule LoadTest.Common.SenderServer do end # Generates module's initial state - @spec init_state(pos_integer(), map(), pos_integer(), keyword()) :: __MODULE__.state() - defp init_state(seqnum, %{owner: spender, utxo_pos: utxo_pos, amount: amount}, ntx_to_send, opts) do + @spec init_state(pos_integer(), map(), pos_integer(), pos_integer(), keyword()) :: __MODULE__.state() + defp init_state(seqnum, utxo, ntx_to_send, fee_amount, opts) do + %{owner: spender, utxo_pos: utxo_pos, amount: amount} = utxo {:ok, %ExPlasma.Utxo{blknum: blknum, txindex: txindex, oindex: oindex}} = ExPlasma.Utxo.new(utxo_pos) %__MODULE__{ seqnum: seqnum, ntx_to_send: ntx_to_send, spender: spender, + fee_amount: fee_amount, last_tx: %LastTx{ # initial state takes deposited value, put there on :init blknum: blknum, diff --git a/priv/perf/apps/load_test/test/load_tests/common/byzantine_events_test.exs b/priv/perf/apps/load_test/test/load_tests/common/byzantine_events_test.exs index 6009f26a83..c87a607358 100755 --- a/priv/perf/apps/load_test/test/load_tests/common/byzantine_events_test.exs +++ b/priv/perf/apps/load_test/test/load_tests/common/byzantine_events_test.exs @@ -37,14 +37,18 @@ defmodule LoadTest.Common.ByzantineEventsTest do _ = String.to_atom("last_validated_child_block_timestamp") {:ok, destdir} = Briefly.create(directory: true, prefix: "temp_results") - {:ok, %{destdir: destdir}} + + fee_amount = Application.fetch_env!(:load_test, :fee_amount) + + {:ok, %{destdir: destdir, fee_amount: fee_amount}} end - test "can provide timing of response when asking for exit data", %{destdir: destdir} do + test "can provide timing of response when asking for exit data", %{destdir: destdir, fee_amount: fee_amount} do spenders = Generators.generate_users(2) alice = Enum.at(spenders, 0) - :ok = ExtendedPerftest.start(@number_of_transactions_to_send, spenders, randomized: false, destdir: destdir) + :ok = + ExtendedPerftest.start(@number_of_transactions_to_send, spenders, fee_amount, randomized: false, destdir: destdir) :ok = ByzantineEvents.watcher_synchronize() @@ -54,11 +58,12 @@ defmodule LoadTest.Common.ByzantineEventsTest do # since we're using the same geth node for all tests, this test is not compatible with the test on line 76 @tag :skip - test "can provide timing of status.get under many valid SEs", %{destdir: destdir} do + test "can provide timing of status.get under many valid SEs", %{destdir: destdir, fee_amount: fee_amount} do spenders = Generators.generate_users(2) alice = Enum.at(spenders, 0) - :ok = ExtendedPerftest.start(@number_of_transactions_to_send, spenders, randomized: false, destdir: destdir) + :ok = + ExtendedPerftest.start(@number_of_transactions_to_send, spenders, fee_amount, randomized: false, destdir: destdir) :ok = ByzantineEvents.watcher_synchronize() @@ -72,11 +77,12 @@ defmodule LoadTest.Common.ByzantineEventsTest do assert ByzantineEvents.get_byzantine_events("invalid_exit") == [] end - test "can provide timing of status.get under many valid/invalid SEs", %{destdir: destdir} do + test "can provide timing of status.get under many valid/invalid SEs", %{destdir: destdir, fee_amount: fee_amount} do spenders = Generators.generate_users(2) alice = Enum.at(spenders, 0) - :ok = ExtendedPerftest.start(@number_of_transactions_to_send, spenders, randomized: true, destdir: destdir) + :ok = + ExtendedPerftest.start(@number_of_transactions_to_send, spenders, fee_amount, randomized: true, destdir: destdir) :ok = ByzantineEvents.watcher_synchronize() @@ -90,11 +96,12 @@ defmodule LoadTest.Common.ByzantineEventsTest do assert Enum.count(ByzantineEvents.get_byzantine_events("invalid_exit")) >= @take end - test "can provide timing of challenging", %{destdir: destdir} do + test "can provide timing of challenging", %{destdir: destdir, fee_amount: fee_amount} do spenders = Generators.generate_users(2) alice = Enum.at(spenders, 0) - :ok = ExtendedPerftest.start(@number_of_transactions_to_send, spenders, randomized: true, destdir: destdir) + :ok = + ExtendedPerftest.start(@number_of_transactions_to_send, spenders, fee_amount, randomized: true, destdir: destdir) :ok = ByzantineEvents.watcher_synchronize() @@ -114,11 +121,12 @@ defmodule LoadTest.Common.ByzantineEventsTest do assert Enum.count(challenge_responses) >= @take end - test "can provide timing of status.get under many challenged SEs", %{destdir: destdir} do + test "can provide timing of status.get under many challenged SEs", %{destdir: destdir, fee_amount: fee_amount} do spenders = Generators.generate_users(2) alice = Enum.at(spenders, 0) - :ok = ExtendedPerftest.start(@number_of_transactions_to_send, spenders, randomized: true, destdir: destdir) + :ok = + ExtendedPerftest.start(@number_of_transactions_to_send, spenders, fee_amount, randomized: true, destdir: destdir) :ok = ByzantineEvents.watcher_synchronize() diff --git a/priv/perf/apps/load_test/test/load_tests/common/extended_perftest_test.exs b/priv/perf/apps/load_test/test/load_tests/common/extended_perftest_test.exs index 70c56d843e..6ed5cf98b5 100644 --- a/priv/perf/apps/load_test/test/load_tests/common/extended_perftest_test.exs +++ b/priv/perf/apps/load_test/test/load_tests/common/extended_perftest_test.exs @@ -30,7 +30,9 @@ defmodule LoadTest.Common.ExtendedPerftestTest do ntxs = 3000 senders = Generators.generate_users(2) - assert :ok = ExtendedPerftest.start(ntxs, senders, destdir: destdir) + fee_amount = Application.fetch_env!(:load_test, :fee_amount) + + assert :ok = ExtendedPerftest.start(ntxs, senders, fee_amount, destdir: destdir) assert ["perf_result" <> _ = perf_result] = File.ls!(destdir) smoke_test_statistics(Path.join(destdir, perf_result), ntxs * length(senders)) diff --git a/priv/perf/config/test.exs b/priv/perf/config/test.exs index 52f8273020..d406f97fbf 100644 --- a/priv/perf/config/test.exs +++ b/priv/perf/config/test.exs @@ -8,6 +8,8 @@ config :load_test, watcher_security_url: "http://localhost:7434", watcher_info_url: "http://localhost:7534", faucet_deposit_amount: trunc(:math.pow(10, 18) * 10), + # fee testing setup: https://github.com/omgnetwork/fee-rules-public/blob/master/fee_rules.json + fee_amount: 75, utxo_load_test_config: %{ concurrent_sessions: 10, utxos_to_create_per_session: 5,