Icon HelpCircleForumIcon Link

⌘K

Icon HelpCircleForumIcon Link
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 download or copy the local snapshot from here Icon Link, then run the following command:

fuel-core run --db-type in-memory --debug --snapshot ./your/path/to/chain_config_folder

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 with the default signer that is pre-funded by fuel-core:

forc deploy --default-signer --node-url 127.0.0.1:4000/graphql

Icon LinkChain Configuration

To modify the initial state of the chain, you must configure the state_config.json file in your chain configuration folder. Here is an example of what that looks like using version 0.26.0 of fuel-core:

Here is the specific configuration Icon Link

chain_config.json

{
  "chain_name": "Upgradable Testnet",
  "consensus_parameters": {
    "V1": {
      "tx_params": {
        "V1": {
          "max_inputs": 255,
          "max_outputs": 255,
          "max_witnesses": 255,
          "max_gas_per_tx": 30000000,
          "max_size": 112640,
          "max_bytecode_subsections": 256
        }
      },
      "predicate_params": {
        "V1": {
          "max_predicate_length": 102400,
          "max_predicate_data_length": 102400,
          "max_message_data_length": 102400,
          "max_gas_per_predicate": 30000000
        }
      },
      "script_params": {
        "V1": {
          "max_script_length": 102400,
          "max_script_data_length": 102400
        }
      },
      "contract_params": {
        "V1": {
          "contract_max_size": 102400,
          "max_storage_slots": 1760
        }
      },
      "fee_params": {
        "V1": {
          "gas_price_factor": 92,
          "gas_per_byte": 63
        }
      },
      "chain_id": 0,
      "gas_costs": {
        "V1": {
          "add": 2,
          "addi": 2,
          "aloc": 1,
          "and": 2,
          "andi": 2,
          "bal": 366,
          "bhei": 2,
          "bhsh": 2,
          "burn": 33949,
          "cb": 2,
          "cfei": 2,
          "cfsi": 2,
          "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
            }
          },
          "croo": {
            "LightOperation": {
              "base": 1,
              "units_per_gas": 1
            }
          },
          "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",
      "block_gas_limit": 30000000,
      "privileged_address": "0000000000000000000000000000000000000000000000000000000000000000"
    }
  },
  "consensus": {
    "PoA": {
      "signing_key": "f65d6448a273b531ee942c133bb91a6f904c7d7f3104cdaf6b9f7f50d3518871"
    }
  }
}

metadata.json

{
  "chain_config": "chain_config.json",
  "table_encoding": {
    "Json": {
      "filepath": "state_config.json"
    }
  }
}

state_config.json

{
  "coins": [],
  "messages": [],
  "contracts": [
    {
      "contract_id": "7777777777777777777777777777777777777777777777777777777777777777",
      "code": "9000000994318e6e453f30e85bf6088f7161d44e57b86a6af0c955d22b353f91b2465f5e6140000a504d00205d4d30001a4860004945048076440001240400005050c0043d51345024040000",
      "tx_id": "0000000000000000000000000000000000000000000000000000000000000000",
      "output_index": 0,
      "tx_pointer_block_height": 0,
      "tx_pointer_tx_idx": 0,
      "states": [],
      "balances": []
    }
  ],
  "last_block": null
}

state_transition_bytecode.wasm

Which is too large to display on this page, but you can find it here Icon Link

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

fuel-core run --snapshot ./your/path/to/chain_config_folder --db-type in-memory --debug

To find an example chain configuration folder 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 state_config.json 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 numerical value. In this example, the value translates to 11,152,921,504 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 --snapshot ./your/path/to/chain_config_folder --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