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日 |
#285 in 魔法豆
每月376次下载
495KB
8K SLoC
燃料客户端
燃料客户端实现。
贡献
如果您想为燃料做出贡献,请参阅我们的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版本中,默认的文件描述符限制相当低,这可能导致出现“打开文件太多”等IO错误,或者在RocksDB遇到这些问题时出现“致命运行时错误:Rust无法捕获外部异常”等错误。使用以下命令增加打开文件限制。请注意,这只会影响当前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\"}}"
依赖关系
~22–39MB
~622K SLoC