Web3 入门:以太坊学习路线图,从零到 DApp 高手!
29
2025-03-08
本文将引导开发者如何在Bitget智能链(BGL)上构建去中心化应用程序(DApp)。BGL以其高性能、低 gas 费和与以太坊的兼容性,正吸引越来越多的开发者。我们将探讨DApp开发的关键步骤,从环境搭建到合约部署,再到前端集成。
在启动去中心化应用程序(DApp)的开发工作之前,至关重要的是要建立一个稳定、高效且安全的开发环境。一个精心配置的环境能够显著提升开发效率,并减少潜在的错误和兼容性问题。
solc
)将 Solidity 代码编译成以太坊虚拟机 (EVM) 可以执行的字节码。Truffle 和 Hardhat 通常会自动处理 Solidity 编译,但您也可以手动安装和使用
solc
。
安装完成后,可以在终端运行以下命令来验证安装:
bash node -v npm -v
使用 npm 安装 Hardhat:
bash npm install --save-dev hardhat
创建并初始化一个新的 Hardhat 项目:
bash mkdir my-bgl-dapp cd my-bgl-dapp npm init -y npx hardhat
选择 "Create a basic sample project" 选项。
配置 Metamask 连接到 BGL 测试网:
手动输入 BGL 测试网络信息:
https://testnet.bglchain.io
或 https://rpc.testnet.bglchain.io
)2025
)https://testnetscan.bglchain.io/
)hardhat.config.js
文件中配置 Solidity 版本。智能合约是运行在区块链上的自动化协议,使用如Solidity等编程语言编写。它们定义了参与者之间的协议条款,并在满足预定条件时自动执行。Solidity是专为以太坊虚拟机(EVM)设计的,它是一种静态类型、面向合约的高级编程语言,语法上类似于JavaScript、C++和Python,但专门用于编写智能合约。
以下是一个使用Solidity编写的简单存储合约示例,用于存储和检索单个无符号256位整数:
// SPDX-License-Identifier: MIT
这行代码声明了合约的许可证类型,推荐使用,有助于开源社区的代码复用和版权声明。 MIT许可证是一种非常宽松的开源许可证。
pragma solidity ^0.8.0;
pragma
关键字用于指定Solidity编译器的版本。
^0.8.0
表示此合约兼容Solidity编译器版本0.8.0及以上,但不包括0.9.0。这样做是为了确保合约在特定编译器版本下能够正确编译,避免因编译器更新导致的不兼容问题。
contract SimpleStorage { ... }
这定义了一个名为
SimpleStorage
的合约。在Solidity中,合约是代码和数据的集合(状态),它们共同存在于以太坊区块链上的一个特定地址。合约是区块链应用的基本构建块。
uint256 private storedData;
这声明了一个名为
storedData
的私有状态变量,类型为
uint256
(无符号256位整数)。
private
关键字意味着只有合约内部的函数才能访问此变量。状态变量的值存储在区块链上,并且是持久的。
constructor(uint256 initialValue) {
storedData = initialValue;
}
function set(uint256 x) public {
storedData = x;
}
function get() public view returns (uint256) {
return storedData;
}
constructor(uint256 initialValue) { storedData = initialValue; }
这是一个构造函数,在合约部署到区块链时执行一次。它接收一个
uint256
类型的参数
initialValue
,并将其赋值给状态变量
storedData
。构造函数用于初始化合约的状态。
function set(uint256 x) public { storedData = x; }
这是一个名为
set
的公共函数,用于修改
storedData
的值。它接收一个
uint256
类型的参数
x
,并将其赋值给
storedData
。
public
关键字意味着任何外部账户或合约都可以调用此函数。调用
set
函数会产生交易,需要消耗Gas。
function get() public view returns (uint256) { return storedData; }
这是一个名为
get
的公共视图函数,用于检索
storedData
的值。
view
关键字表示该函数不会修改合约的状态。
returns (uint256)
声明该函数返回一个
uint256
类型的值。调用
get
函数不会产生交易,也不需要消耗Gas,因为它只是读取区块链上的数据。
建议将此合约保存为
contracts/SimpleStorage.sol
,以便于后续的编译和部署操作。
使用 Hardhat 编译智能合约,确保合约代码没有错误,并生成可部署的字节码文件。执行以下命令:
npx hardhat compile
此命令会读取
contracts
目录下的所有 Solidity 合约文件,并将其编译到
artifacts
目录中。
创建一个部署脚本
scripts/deploy.js
,用于自动化合约的部署过程。以下是一个示例脚本:
const { ethers } = require("hardhat");
async function main() {
// 获取 SimpleStorage 合约的工厂
const SimpleStorage = await ethers.getContractFactory("SimpleStorage");
// 部署 SimpleStorage 合约,并初始化值为 100
const simpleStorage = await SimpleStorage.deploy(100);
// 等待合约部署完成
await simpleStorage.deployed();
// 打印合约部署地址
console.log("SimpleStorage deployed to:", simpleStorage.address);
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
在这个脚本中,
ethers.getContractFactory("SimpleStorage")
获取了
SimpleStorage
合约的工厂,用于创建合约实例。
simpleStorage.deploy(100)
部署合约,并将初始值设置为 100。
await simpleStorage.deployed()
确保合约已经成功部署到区块链上,然后打印出合约的地址。
修改
hardhat.config.js
文件,配置 BGL 测试网络。你需要提供 BGL 测试网络的 RPC URL、Chain ID 以及你的私钥。注意:**务必妥善保管你的私钥,避免泄露。** 建议使用环境变量来存储私钥,而不是直接写在配置文件中。
require("@nomicfoundation/hardhat-toolbox");
/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
solidity: "0.8.9",
networks: {
bglTestnet: {
url: "https://testnet.bglchain.io", // 替换为你的 BGL 测试网 RPC URL
chainId: 2025, // 替换为你的 BGL 测试网 Chain ID
accounts: ["YOUR_PRIVATE_KEY"], // 替换为你的 Metamask 私钥,建议使用环境变量
},
},
};
在此配置中,
url
指定了 BGL 测试网络的 RPC URL,Hardhat 将通过此 URL 与区块链进行交互。
chainId
指定了 BGL 测试网络的 Chain ID,用于确保连接到正确的网络。
accounts
数组包含了用于部署合约的账户私钥。为了安全起见,建议使用环境变量来存储私钥,并在
hardhat.config.js
文件中引用它。 例如:
accounts: [process.env.PRIVATE_KEY]
。然后在命令行中使用 `export PRIVATE_KEY='你的私钥'` 命令设置环境变量。
使用 Hardhat 部署合约:
bash npx hardhat run scripts/deploy.js --network bglTestnet
成功部署后,控制台将显示合约地址。
前端开发在去中心化应用(DApp)中扮演着至关重要的角色,它负责构建用户界面,并使用户能够与区块链上的智能合约进行交互。通常,开发者会选择 JavaScript 语言,并结合 Web3.js 或 ethers.js 这样的库来实现这些功能。
使用 npm 安装 Ethers.js:
bash npm install ethers
创建一个 HTML 文件 index.
:
Current value:
替换 YOUR_CONTRACT_ADDRESS
和 YOUR_CONTRACT_ABI
为你的合约地址和 ABI。合约 ABI 可以在编译后的 artifacts 文件夹中找到(例如:artifacts/contracts/SimpleStorage.sol/SimpleStorage.
)。
使用浏览器打开 index.
文件。如果一切顺利,你应该能够连接到 Metamask,读取并设置智能合约中的值。
在将 DApp 部署到 Bitget 智能链(BGL)主网之前,必须在测试网上进行全面且充分的测试。这一阶段至关重要,能够帮助开发者发现并修复潜在的漏洞和错误,从而保障DApp在真实环境中的稳定性和安全性。为了实现有效的测试,建议利用 Hardhat 提供的测试环境,编写详尽的单元测试和集成测试。单元测试侧重于验证合约中各个独立函数的正确性,而集成测试则用于检验合约之间的交互以及与外部系统的集成是否顺畅。测试范围应覆盖所有关键功能和边界情况,以确保合约在各种场景下都能按预期运行。
为了更细致地监控和分析测试网上的交易和合约状态,可以利用 BGL 测试网区块浏览器。该区块浏览器提供了一个可视化的界面,允许开发者查看交易的详细信息,包括交易发起者、接收者、交易金额、Gas 消耗以及交易状态(成功或失败)。还可以通过区块浏览器查看合约的存储状态、事件日志以及其他相关信息,从而深入了解合约的运行机制。通过仔细分析区块浏览器上的数据,开发者可以更好地诊断问题并优化合约性能。
本指南旨在为开发者提供一个在 Bitget 智能链(BGL)上进行 DApp 开发的基础框架。实际开发过程中,可能需要根据具体需求进行更复杂的设计和实现。务必深入研究 BGL 官方文档,该文档提供了关于 BGL 智能链的全面信息,包括其架构、API、工具以及最佳实践。积极参与 BGL 社区,与其他开发者交流经验、分享知识,并获取最新的行业动态和技术支持。官方文档和社区资源是成功开发 BGL DApp 的关键。