npm create fuels
是一个命令行工具,可帮助您搭建新的全栈 Fuel dApp。在本指南中,我们将使用 npm create fuels
创建一个新的计数器 dApp,并为其添加递减功能。最终结果将如下所示:
首先要做的是运行以下命令:
pnpm create fuels@0.89.1
一旦运行命令,您将会看到一些简单的问题。我们将按以下方式回答:
◇ 您的项目名称是什么?
│ my-fuel-project
│
◇ 选择一个包管理器:
│ pnpm
│
◆ 您想要哪些 Sway 程序?(切换空格)
│ ● 合约
│ ○ 断言
│ ○ 脚本
└
该工具将为您搭建项目并安装必要的依赖项。然后,您将看到以下消息:
⚡️ 成功!已在 my-fuel-project 中创建了一个全栈 Fuel dapp
要开始使用:
- 进入项目目录:cd my-fuel-project
- 启动本地 Fuel 开发服务器:pnpm fuels:dev
- 运行前端:pnpm dev
-> TS SDK 文档:https://docs.fueldev.xyz/docs/fuels-ts/
-> Sway 文档:https://docs.fueldev.xyz/docs/sway/
-> 如果您有任何问题,请查看 Fuel 论坛:https://forum.fuel.network/
由 npm create fuels
搭建的项目大致具有以下目录结构:
my-fuel-project
├── src
│ ├── pages
│ │ ├── index.tsx
│ │ └── ...
│ ├── components
│ │ └── ...
│ ├── styles
│ │ └── ...
│ └── lib.ts
├── public
│ └── ...
├── sway-programs
│ ├── contract
│ │ └── src
│ │ └── main.sw
│ ├── Forc.lock
│ └── Forc.toml
├── fuels.config.ts
├── package.json
└── ...
这是一个 Next.js 项目,带有一些额外的文件和文件夹。让我们更详细地查看一些重要的文件:
./fuels.config.ts
这是 fuels
CLI 的配置文件,该 CLI 和工具为项目提供支持。它确保所有的 Sway 程序都持续编译并部署到您的本地 Fuel 节点。您可以在 Fuels CLI 文档 中了解有关 fuels.config.ts
文件的更多信息。
./sway-programs/contract/src/main.sw
这是我们的 Sway 合约所在的位置。默认情况下,它是一个简单的计数器合约,只能递增。我们将在下一步中为其添加递减功能。
./src/pages/index.tsx
该文件包含我们的 dApp 前端的源代码。它是一个 Next.js 页面,用于呈现计数器值,并允许用户递增计数器。
现在我们已经搭建了项目,让我们设置开发环境。
首先启动我们的 Fuel Dev 服务器。这将启动一个本地 Fuel 节点,并持续编译和部署我们的 Sway 程序。
pnpm fuels:dev
一旦服务器启动,我们可以在另一个终端中启动我们的 Next.js 开发服务器。
pnpm dev
现在,您应该能够在 http://localhost:3000
看到计数器 dApp 正在运行。您可以尝试更改 ./sway-programs/contract/src/main.sw
文件的内容,并在不重新启动服务器的情况下看到 UI 中的更改。
为了向我们的计数器添加递减功能,我们需要做两件事:1. 在我们的 Sway 合约中添加一个 decrement_counter
函数,2. 修改 ./src/pages/index.tsx
文件以添加一个调用此函数的按钮。
要向我们的 Sway 合约添加一个 decrement_counter
函数,我们将修改 ./sway-programs/contract/src/main.sw
文件。
添加新函数到 Sway 程序时有两个步骤。第一步是指定函数的 ABI。
在文件顶部,您将找到合约的 ABI 部分。让我们向其中添加一个新函数:
abi Counter {
#[storage(read)]
fn get_count() -> u64;
#[storage(write, read)]
fn increment_counter(amount: u64) -> u64;
#[storage(write, read)]
fn decrement_counter(amount: u64) -> u64;
}
第二步是实现函数。
我们将在 increment_counter
函数的下方添加 decrement_counter
函数的实现。
impl Counter for Contract {
#[storage(read)]
fn get_count() -> u64 {
storage.counter.read()
}
#[storage(write, read)]
fn increment_counter(amount: u64) -> u64 {
let current = storage.counter.read();
storage.counter.write(current + amount);
storage.counter.read()
}
#[storage(write, read)]
fn decrement_counter(amount: u64) -> u64 {
let current = storage.counter.read();
storage.counter.write(current - amount);
storage.counter.read()
}
}
我们现在将在前端添加一个新按钮,当点击时将调用 decrement_counter
函数。为此,我们将修改 ./src/pages/index.tsx
文件。
首先,我们将添加一个名为 onDecrementPressed
的函数,类似于 onIncrementPressed
函数:
const onDecrementPressed = async () => {
if (!contract) {
return toast.error("Contract not loaded");
}
if (walletBalance?.eq(0)) {
return toast.error(
"Your wallet does not have enough funds. Please click the 'Top-up Wallet' button in the top right corner, or use the local faucet.",
);
}
const { value } = await contract.functions.decrement_counter(bn(1)).call();
setCounter(value.toNumber());
await refreshWalletBalance?.();
};
其次,我们将在界面上添加一个新的按钮,当点击时将调用 onDecrementPressed
函数:
<Button onClick={onDecrementPressed} className="mt-6">
减少计数器
</Button>
恭喜!这就是全部。您现在应该能够在 http://localhost:3000
上看到计数器 dApp 运行,并且具有我们新添加的减少功能。
您可以在这里 找到我们构建的完整 dApp 的源代码。
每当您想要为您的 dApp 添加新功能并快速原型设计时,您可以按照本指南中的相同步骤操作。
现在您已经有了一个基本的计数器 dApp,并且拥有 npm create fuels
工作流支持,您可以开始使用 Fuel Stack 构建更复杂的 dApps。一个好的起点是 Sway Applications Repo ,那里有关于想法和参考代码的好地方。
如果您想要将您的 dApp 部署到测试网,请查看我们的将 dApp 部署到测试网 指南。
如果您有任何问题或需要帮助,请随时在官方 Fuel 论坛 上联系我们。
如果您想了解更多关于 Fuel Stack 的信息,请查阅 Fuel 文档 。