⌘K

Icon SunFilledIcon MoonStars
Running a Local Node

Icon LinkRunning a local Fuel node

In addition to deploying and testing on the Fuel Testnet, you can also run a local Fuel Node.

There are two types of Fuel networks that can be run:

  1. In-memory network (without persistence)
  2. Local network with persistence

Icon LinkIn-memory local node (without state persistence)

An in-memory node does not persist the blockchain state anywhere, it is only stored in memory as long as the node is active and running.

To spin-up a local in-memory Fuel node, run the following command:

fuel-core run --db-type in-memory --debug

To deploy a contract to the local node, run the following command:

forc deploy <signing-key> --node-url 127.0.0.1:4000/graphql

Or to deploy without using a signing key:

forc deploy --unsigned --node-url 127.0.0.1:4000/graphql

Icon LinkChain Configuration

To modify the initial state of the chain, you must configure a chainConfig.json file. Here is an example of what that looks like using version 0.22.0 of fuel-core:

{
  "chain_name": "Testnet",
  "block_gas_limit": 1000000000,
  "initial_state": {
    "coins": [
      {
        "owner": "0x6b63804cfbf9856e68e5b6e7aef238dc8311ec55bec04df774003a2c96e0418e",
        "amount": "0x1000000000000000",
        "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000"
      },
      {
        "owner": "0x54944e5b8189827e470e5a8bacfc6c3667397dc4e1eef7ef3519d16d6d6c6610",
        "amount": "0x1000000000000000",
        "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000"
      },
      {
        "owner": "0xe10f526b192593793b7a1559a391445faba82a1d669e3eb2dcd17f9c121b24b1",
        "amount": "0x1000000000000000",
        "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000"
      },
      {
        "owner": "0x577e424ee53a16e6a85291feabc8443862495f74ac39a706d2dd0b9fc16955eb",
        "amount": "0x1000000000000000",
        "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000"
      },
      {
        "owner": "0xc36be0e14d3eaf5d8d233e0f4a40b3b4e48427d25f84c460d2b03b242a38479e",
        "amount": "0x1000000000000000",
        "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000"
      },
      {
        "owner": "0xa1184d77d0d08a064e03b2bd9f50863e88faddea4693a05ca1ee9b1732ea99b7",
        "amount": "0x1000000000000000",
        "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000"
      },
      {
        "owner": "0xb5566df884bee4e458151c2fe4082c8af38095cc442c61e0dc83a371d70d88fd",
        "amount": "0x1000000000000000",
        "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000"
      },
      {
        "owner": "0x9da7247e1d63d30d69f136f0f8654ee8340362c785b50f0a60513c7edbf5bb7c",
        "amount": "0x1000000000000000",
        "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000"
      },
      {
        "owner": "0x4b2ca966aad1a9d66994731db5138933cf61679107c3cde2a10d9594e47c084e",
        "amount": "0x1000000000000000",
        "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000"
      },
      {
        "owner": "0x26183fbe7375045250865947695dfc12500dcc43efb9102b4e8c4d3c20009dcb",
        "amount": "0x1000000000000000",
        "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000"
      },
      {
        "owner": "0x81f3a10b61828580d06cc4c7b0ed8f59b9fb618be856c55d33decd95489a1e23",
        "amount": "0x1000000000000000",
        "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000"
      },
      {
        "owner": "0x587aa0482482efea0234752d1ad9a9c438d1f34d2859b8bef2d56a432cb68e33",
        "amount": "0x1000000000000000",
        "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000"
      },
      {
        "owner": "0x53a9c6a74bee79c5e04115a007984f4bddaafed75f512f68766c6ed59d0aedec",
        "amount": "0x0004000000000000",
        "asset_id": "0x0000000000000000000000000000000000000000000000000000000000000000"
      }
    ],
    "contracts": [
      {
        "contract_id": "0x7777777777777777777777777777777777777777777777777777777777777777",
        "code": "0x9000000994318e6e453f30e85bf6088f7161d44e57b86a6af0c955d22b353f91b2465f5e6140000a504d00205d4d30001a4860004945048076440001240400005050c0043d51345024040000",
        "salt": "0x1bfd51cb31b8d0bc7d93d38f97ab771267d8786ab87073e0c2b8f9ddc44b274e"
      }
    ]
  },
  "consensus_parameters": {
    "tx_params": {
      "max_inputs": 255,
      "max_outputs": 255,
      "max_witnesses": 255,
      "max_gas_per_tx": 1000000000,
      "max_size": 17825792
    },
    "predicate_params": {
      "max_predicate_length": 1048576,
      "max_predicate_data_length": 1048576,
      "max_message_data_length": 1048576,
      "max_gas_per_predicate": 1000000000
    },
    "script_params": {
      "max_script_length": 1048576,
      "max_script_data_length": 1048576
    },
    "contract_params": {
      "contract_max_size": 16777216,
      "max_storage_slots": 131072
    },
    "fee_params": {
      "gas_price_factor": 92,
      "gas_per_byte": 63
    },
    "chain_id": 0,
    "gas_costs": {
      "add": 2,
      "addi": 2,
      "aloc": 1,
      "and": 2,
      "andi": 2,
      "bal": 366,
      "bhei": 2,
      "bhsh": 2,
      "burn": 33949,
      "cb": 2,
      "cfei": 2,
      "cfsi": 2,
      "croo": 40,
      "div": 2,
      "divi": 2,
      "eck1": 3347,
      "ecr1": 46165,
      "ed19": 4210,
      "eq": 2,
      "exp": 2,
      "expi": 2,
      "flag": 1,
      "gm": 2,
      "gt": 2,
      "gtf": 16,
      "ji": 2,
      "jmp": 2,
      "jne": 2,
      "jnei": 2,
      "jnzi": 2,
      "jmpf": 2,
      "jmpb": 2,
      "jnzf": 2,
      "jnzb": 2,
      "jnef": 2,
      "jneb": 2,
      "lb": 2,
      "log": 754,
      "lt": 2,
      "lw": 2,
      "mint": 35718,
      "mlog": 2,
      "mod": 2,
      "modi": 2,
      "move": 2,
      "movi": 2,
      "mroo": 5,
      "mul": 2,
      "muli": 2,
      "mldv": 4,
      "noop": 1,
      "not": 2,
      "or": 2,
      "ori": 2,
      "poph": 3,
      "popl": 3,
      "pshh": 4,
      "pshl": 4,
      "ret_contract": 733,
      "rvrt_contract": 722,
      "sb": 2,
      "sll": 2,
      "slli": 2,
      "srl": 2,
      "srli": 2,
      "srw": 253,
      "sub": 2,
      "subi": 2,
      "sw": 2,
      "sww": 29053,
      "time": 79,
      "tr": 46242,
      "tro": 33251,
      "wdcm": 3,
      "wqcm": 3,
      "wdop": 3,
      "wqop": 3,
      "wdml": 3,
      "wqml": 4,
      "wddv": 5,
      "wqdv": 7,
      "wdmd": 11,
      "wqmd": 18,
      "wdam": 9,
      "wqam": 12,
      "wdmm": 11,
      "wqmm": 11,
      "xor": 2,
      "xori": 2,
      "call": {
        "LightOperation": {
          "base": 21687,
          "units_per_gas": 4
        }
      },
      "ccp": {
        "LightOperation": {
          "base": 59,
          "units_per_gas": 20
        }
      },
      "csiz": {
        "LightOperation": {
          "base": 59,
          "units_per_gas": 195
        }
      },
      "k256": {
        "LightOperation": {
          "base": 282,
          "units_per_gas": 3
        }
      },
      "ldc": {
        "LightOperation": {
          "base": 45,
          "units_per_gas": 65
        }
      },
      "logd": {
        "LightOperation": {
          "base": 1134,
          "units_per_gas": 2
        }
      },
      "mcl": {
        "LightOperation": {
          "base": 3,
          "units_per_gas": 523
        }
      },
      "mcli": {
        "LightOperation": {
          "base": 3,
          "units_per_gas": 526
        }
      },
      "mcp": {
        "LightOperation": {
          "base": 3,
          "units_per_gas": 448
        }
      },
      "mcpi": {
        "LightOperation": {
          "base": 7,
          "units_per_gas": 585
        }
      },
      "meq": {
        "LightOperation": {
          "base": 11,
          "units_per_gas": 1097
        }
      },
      "retd_contract": {
        "LightOperation": {
          "base": 1086,
          "units_per_gas": 2
        }
      },
      "s256": {
        "LightOperation": {
          "base": 45,
          "units_per_gas": 3
        }
      },
      "scwq": {
        "HeavyOperation": {
          "base": 30375,
          "gas_per_unit": 28628
        }
      },
      "smo": {
        "LightOperation": {
          "base": 64196,
          "units_per_gas": 1
        }
      },
      "srwq": {
        "HeavyOperation": {
          "base": 262,
          "gas_per_unit": 249
        }
      },
      "swwq": {
        "HeavyOperation": {
          "base": 28484,
          "gas_per_unit": 26613
        }
      },
      "contract_root": {
        "LightOperation": {
          "base": 45,
          "units_per_gas": 1
        }
      },
      "state_root": {
        "HeavyOperation": {
          "base": 350,
          "gas_per_unit": 176
        }
      },
      "new_storage_per_byte": 63,
      "vm_initialization": {
        "LightOperation": {
          "base": 1645,
          "units_per_gas": 14
        }
      }
    },
    "base_asset_id": "0000000000000000000000000000000000000000000000000000000000000000"
  },
  "consensus": {
    "PoA": {
      "signing_key": "f65d6448a273b531ee942c133bb91a6f904c7d7f3104cdaf6b9f7f50d3518871"
    }
  }
}

To start the node with a custom configuration, you can use the command below:

fuel-core run --chain ./chainConfig.json --db-type in-memory --debug

To find an example chain configuration file for a specific fuel-core version, refer to the fuel-core Icon Link repo.

Icon LinkFunding a wallet locally

You can edit the coins array inside the inital_state object to modify the initial assets owned by a given address.

The owner address must be a B256 type address (begins with 0x) instead of a Bech32 type (begins with fuel).

The amount is a hex value. In this example, the value translates to 1,125,899.9 ETH.

Icon LinkLocal node (with state persistence)

This node does persist the blockchain state locally. To run a local node with persistence a chain configuration file is required.

To start the node, run the following command:

fuel-core run --ip 127.0.0.1 --port 4000 --chain ./chainConfig.json --db-path ./.fueldb --debug

Icon LinkConnecting to the local node from a browser wallet

To connect to the local node using a browser wallet, import the network address as:

http://127.0.0.1:4000/graphql