57 个版本 (18 个破坏性版本)

新版本 0.34.0 2024 年 8 月 20 日
0.32.1 2024 年 8 月 10 日
0.31.0 2024 年 7 月 5 日
0.24.1 2024 年 3 月 30 日
0.17.7 2023 年 3 月 31 日

#129魔法豆

Download history 14/week @ 2024-05-03 5/week @ 2024-05-17 131/week @ 2024-05-24 28/week @ 2024-05-31 144/week @ 2024-06-07 328/week @ 2024-06-14 11/week @ 2024-06-21 130/week @ 2024-07-05 2/week @ 2024-07-12 67/week @ 2024-07-19 162/week @ 2024-07-26 108/week @ 2024-08-02 127/week @ 2024-08-09 215/week @ 2024-08-16

每月 618 次下载
fuel-core-keygen-bin 中使用

BUSL-1.1

110KB
2.5K SLoC

Fuel 客户端

build crates.io docs discord

Fuel 客户端实现。

贡献

如果您有兴趣为 Fuel 贡献,请参阅我们的 CONTRIBUTING.md 指南,了解编码标准和审查流程。

在推送任何更改或创建拉取请求之前,请运行 source ci_checks.sh

构建

系统要求

包括 clang 在内的有多个系统要求。

MacOS

brew update
brew install cmake

Debian

apt update
apt install -y cmake pkg-config build-essential git clang libclang-dev

Arch

pacman -Syu --needed --noconfirm cmake gcc pkgconf git clang

Rust 设置

您需要安装 wasm32-unknown-unknown 目标。

rustup target add wasm32-unknown-unknown

编译

我们建议使用 xtask 构建 fuel-core

cargo xtask build

这将运行 cargo build 以及我们拥有的任何其他自定义构建流程,例如为客户端重新生成 GraphQL 架构。

测试

可以使用 ci_checks.sh 脚本文件运行所有 CI 检查,包括测试运行。

source ci_checks.sh

该脚本需要预先安装的工具。有关更多信息,请运行

cat ci_checks.sh

运行

通过执行fuel-core run来启动服务。可以通过help选项访问运行选项列表。

$ ./target/debug/fuel-core run --help

USAGE:
    fuel-core run [OPTIONS]

OPTIONS:
        --snapshot <SNAPSHOT>
          Snapshot from which to do (re)genesis. Defaults to local testnet configuration

          [env: SNAPSHOT=]
        ...

对于许多开发目的,拥有一个不会持久化的状态很有用,可以将db-type选项设置为in-memory,如下例所示。

示例

$ ./target/debug/fuel-core run --db-type in-memory
2023-06-13T12:45:22.860536Z  INFO fuel_core::cli::run: 230: Block production mode: Instant
2023-06-13T12:38:47.059783Z  INFO fuel_core::cli::run: 310: Fuel Core version v0.18.1
2023-06-13T12:38:47.078969Z  INFO new{name=fuel-core}:_commit_result{block_id=b1807ca9f2eec7e459b866ecf69b68679fc6b205a9a85c16bd4943d1bfc6fb2a height=0 tx_status=[]}: fuel_core_importer::importer: 231: Committed block
2023-06-13T12:38:47.097777Z  INFO new{name=fuel-core}: fuel_core::graphql_api::service: 208: Binding GraphQL provider to 127.0.0.1:4000

要禁用本地节点的区块生产,设置--poa-instant=false

示例

$ ./target/debug/fuel-core run --poa-instant=false
2023-06-13T12:44:12.857763Z  INFO fuel_core::cli::run: 232: Block production disabled

故障排除

发布

我们使用publish-crates动作来自动发布所有crate。

如果您在发布时遇到问题,可以使用act在本地进行故障排除。

act release -s GITHUB_TOKEN=<YOUR_GITHUB_TOKEN> -j publish-crates-check --container-architecture linux/amd64 --reuse

它需要GitHubToken来向GitHub发起请求。您可以使用此说明创建它。

过时数据库

如果您遇到如下错误

thread 'main' panicked at 'unable to open database: DatabaseError(Error { message: "Invalid argument: Column families not opened: column-11, column-10, column-9, column-8, column-7, column-6, column-5, column-4, column-3, column-2, column-1, column-0" })', fuel-core/src/main.rs:23:66

使用以下命令清除本地数据库:rm -rf ~/.fuel/db

文件描述符限制

在某些macOS版本中,默认的文件描述符限制相当低,这可能导致出现类似Too many open files或甚至fatal runtime error: Rust cannot catch foreign exceptions的IO错误,当RocksDB遇到这些问题时。使用以下命令增加打开文件限制。请注意,这仅影响当前shell会话,因此请考虑将其添加到~/.zshrc

ulimit -n 10240

日志级别

服务依赖于环境变量RUST_LOG。有关更多信息,请检查EnvFilter示例crate。

可以使用环境变量HUMAN_LOGGING=false禁用人类日志。

调试

有关运行本地节点调试构建的指南,请参阅调试

Docker & Kubernetes

# Create Docker Image
docker build -t fuel-core . -f deployment/Dockerfile

# Delete Docker Image
docker image rm fuel-core

# Create Kubernetes Volume, Deployment & Service
kubectl create -f deployment/fuel-core.yml

# Delete Kubernetes Volume, Deployment & Service
kubectl delete -f deployment/fuel-core.yml

GraphQL服务

客户端功能通过一个期望GraphQL查询的服务端点提供。

事务执行器

事务执行器目前执行即时区块生产。更改默认保存在RocksDB中。

  • 服务端点:/v1/graphql
  • 模式(构建后可用):crates/client/assets/schema.sdl

服务期望一个定义为submit的变异,该变异接收以十六进制编码的二进制格式表示的Transaction,如此处指定。

cURL示例

此示例将执行一个表示以下ASM序列的脚本。

ADDI(0x10, RegId::ZERO, 0xca),
ADDI(0x11, RegId::ZERO, 0xba),
LOG(0x10, 0x11, RegId::ZERO, RegId::ZERO),
RET(RegId::ONE),
$ cargo run --bin fuel-core-client -- transaction submit \
"{\"Script\":{\"script_gas_limit\":1000000,\"policies\":{\"bits\":\"GasPrice\",\"values\":[0,0,0,0]},\"maturity\":0,\"script\":[80,64,0,202,80,68,0,186,51,65,16,0,36,4,0,0],\"script_data\":[],\"inputs\":[
{
  \"CoinSigned\": {
    \"utxo_id\": {
      \"tx_id\": \"c49d65de61cf04588a764b557d25cc6c6b4bc0d7429227e2a21e61c213b3a3e2\",
      \"output_index\": 0
    },
    \"owner\": \"f1e92c42b90934aa6372e30bc568a326f6e66a1a0288595e6e3fbd392a4f3e6e\",
    \"amount\": 10599410012256088338,
    \"asset_id\": \"2cafad611543e0265d89f1c2b60d9ebf5d56ad7e23d9827d6b522fd4d6e44bc3\",
    \"tx_pointer\": {
      \"block_height\": 0,
      \"tx_index\": 0
    },
    \"witness_index\": 0,
    \"maturity\": 0,
    \"predicate_gas_used\": null,
    \"predicate\": null,
    \"predicate_data\": null
  }
}],\"outputs\":[],\"witnesses\":[{
  \"data\": [
    150,31,98,51,6,239,255,243,45,35,182,26,129,152,46,95,45,211,114,58,51,64,129,194,97,14,181,70,190,37,106,223,170,174,221,230,87,239,67,224,100,137,25,249,193,14,184,195,15,85,156,82,91,78,91,80,126,168,215,170,139,48,19,5
  ]
}],\"receipts_root\":\"0x6114142d12e0f58cfb8c72c270cd0535944fb1ba763dce83c17e882c482224a2\"}}"

依赖项

~20MB
~387K SLoC