BSC 智能合约入门:5 步搞定,比想象更简单!

本教程详细介绍了如何在币安智能链(BSC)上进行智能合约开发,包括 MetaMask 配置、测试币获取、开发环境搭建、合约编写、部署和验证等步骤。即使是新手也能快速上手,开启 BSC 智能合约之旅。

币安智能链合约操作详细教程分享

准备工作

在使用币安智能链(BSC)上的智能合约之前,充分的准备工作至关重要。这包括配置一个兼容BSC的数字钱包,以便管理你的加密资产和与智能合约交互。常用的钱包包括MetaMask,它可以通过浏览器扩展或移动应用程序访问。你需要配置MetaMask以连接到币安智能链网络。这通常涉及添加BSC主网或测试网的自定义网络配置,包括网络名称、RPC URL、链ID和货币符号。

为了在BSC上进行智能合约的部署和测试,你需要获取少量的测试币。你可以从币安智能链测试网的水龙头(Faucet)免费获取测试币。访问测试网水龙头的网站,通常需要提供你的钱包地址,水龙头会将测试币发送到你的地址。注意,测试币仅用于测试目的,不具有实际价值。

你需要安装必要的开发工具,例如Node.js和npm(Node包管理器)。Node.js是一个JavaScript运行时环境,npm用于安装和管理JavaScript包。Solidity是一种用于编写智能合约的高级编程语言,你需要安装Solidity编译器,例如solc,将Solidity代码编译成可以在以太坊虚拟机(EVM)上执行的字节码。Truffle或Hardhat是流行的开发框架,可以简化智能合约的开发、测试和部署流程。这些框架提供了项目结构、编译工具、测试环境和部署脚本,可以大大提高开发效率。

1. 安装 MetaMask 钱包

MetaMask 是一款流行的浏览器扩展程序,它充当你的数字钱包和通往去中心化应用(DApps)世界的桥梁。它支持以太坊(Ethereum)以及包括币安智能链(Binance Smart Chain, BSC)在内的其他兼容 EVM(Ethereum Virtual Machine)的区块链网络。通过 MetaMask,你可以安全地管理你的加密货币资产、与区块链应用互动,并进行交易。

  • 下载与安装:

    访问 MetaMask 官方网站( https://metamask.io/ ),务必确认网址的真实性以避免钓鱼网站。选择适用于你浏览器的版本进行下载安装。MetaMask 支持 Chrome、Firefox、Brave 和 Edge 等主流浏览器。安装完成后,按照屏幕上的指示创建一个新的钱包。在创建过程中,务必牢记并妥善保管你的助记词(Seed Phrase),这是恢复你钱包的唯一方式。请勿将其存储在联网设备或泄露给任何人,最好将其手写在安全的地方。

  • 配置币安智能链网络:

    默认情况下,MetaMask 连接到以太坊主网络。要与币安智能链上的 DApp 互动,你需要手动添加 BSC 网络到 MetaMask 中。

    • 点击浏览器工具栏上的 MetaMask 扩展程序图标,打开 MetaMask 界面。
    • 在 MetaMask 界面顶部,你会看到当前连接的网络名称,例如“Ethereum Mainnet”。点击该网络名称打开网络选择下拉菜单,然后选择“添加网络”。如果“添加网络”按钮不可见,你可能需要滚动到底部才能找到。
    • 你将被重定向到一个页面,你需要在此填写币安智能链网络的详细信息。
    • 填写以下信息:
      • 网络名称: Binance Smart Chain Mainnet
      • 新的 RPC URL: https://bsc-dataseed.binance.org/ (这是一个常用的公共 RPC URL,如果此 URL 不可用,你可以尝试其他可用的 RPC URL)
      • 链ID: 56 (十六进制表示为 0x38)
      • 符号: BNB
      • 区块浏览器 URL: https://bscscan.com/ (用于在区块链上查看交易和账户信息的链接)
    • 确认所有信息准确无误后,点击“保存”按钮。
    • 现在,你就可以在 MetaMask 的网络选择下拉菜单中找到并选择 Binance Smart Chain Mainnet 网络了。你的 MetaMask 将连接到 BSC,允许你与 BSC 上的 DApp 进行交互和管理 BNB 以及其他 BEP-20 代币。

    对于测试目的,强烈建议使用币安智能链的测试网络,这允许你在不花费真实资金的情况下进行实验和开发:

    • 网络名称: Binance Smart Chain Testnet
    • 新的 RPC URL: https://data-seed-prebsc-1-s1.binance.org:8545/ (同样,如果此 URL 不可用,请查找备用测试网 RPC URL)
    • 链ID: 97 (十六进制表示为 0x61)
    • 符号: tBNB (代表 Test BNB)
    • 区块浏览器 URL: https://testnet.bscscan.com/

2. 获取测试币 (仅限测试网)

若您已成功连接至币安智能链测试网络,为进行后续交易操作,您需要获取一定数量的测试币,即 tBNB (Test BNB)。测试币仅用于测试环境,不具备实际价值。

  • 访问水龙头: 前往官方提供的币安智能链测试网水龙头,其网址为 https://testnet.binance.org/faucet-smart 。请确保链接的准确性,谨防钓鱼网站。
  • 请求测试币:
    1. 将您的 MetaMask 钱包地址复制并粘贴到水龙头页面的指定文本框中。请仔细核对地址,确保准确无误,避免测试币发送至错误的地址。
    2. 在币种选择下拉菜单中,选择 BNB。这是您需要请求的测试币类型。
    3. 点击“Give me BNB”按钮。系统可能会要求您完成一项验证码验证,以确认您的操作并非机器人自动请求。
    4. 完成验证后,测试币将会自动发送至您提供的 MetaMask 钱包地址。通常情况下,到账时间较短,但有时可能会因网络拥堵而略有延迟。您可以在 MetaMask 钱包中查看 tBNB 的余额。

3. 安装 Node.js 和 npm

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它允许开发者在服务器端运行 JavaScript 代码。npm (Node Package Manager) 是 Node.js 的默认包管理器,用于安装、共享和管理 JavaScript 模块和依赖项。在区块链开发中,许多工具和库都依赖 Node.js 和 npm,因此安装它们是搭建开发环境的必要步骤。

  • 下载与安装: 前往 Node.js 官网 下载适合您操作系统的版本。Node.js 提供了预编译的二进制文件,方便在 Windows、macOS 和 Linux 等平台上安装。安装过程中,请务必勾选 "Add to PATH" 选项,这将把 node npm 命令添加到系统的环境变量中,使您可以在任何目录下通过命令行直接调用它们。如果忘记勾选,则需要手动配置环境变量,较为繁琐。建议下载 LTS (Long Term Support) 版本,该版本经过充分测试,稳定可靠,适合长期使用。
  • 验证安装: 打开命令行工具(例如 Windows 的 cmd 或 PowerShell,macOS 的 Terminal,Linux 的 Terminal)。在命令行中输入以下命令,并按回车键执行:
    node -v
    npm -v

    如果命令行成功显示 Node.js 和 npm 的版本号,例如 v16.13.0 8.1.0 ,则表明 Node.js 和 npm 已经成功安装并配置到您的系统中。如果显示 "command not found" 或类似的错误信息,则可能需要检查环境变量的配置,或者重新安装 Node.js 并确保勾选了 "Add to PATH" 选项。您也可以尝试重启计算机,以确保环境变量的更改生效。

4. 安装 Truffle 或 Hardhat

Truffle 和 Hardhat 是两个流行的以太坊开发框架,旨在简化智能合约的开发、测试和部署流程。它们提供了诸如合约编译、单元测试、部署脚本以及与区块链交互等功能。Hardhat 以其灵活性、插件生态系统和改进的开发者体验而著称,这里我们选择 Hardhat 作为示例。

  • 创建项目目录: 在你选定的位置创建一个新的文件夹,作为项目的根目录。例如,命名为 bsc-contract 。这个目录将包含所有智能合约代码、测试脚本、配置文件以及其他项目相关的文件。
  • 初始化 Hardhat 项目: 打开命令行终端,导航至 bsc-contract 目录。然后,依次运行以下命令,以初始化一个 Hardhat 项目:
    npm init -y
    npm install --save-dev hardhat
    npx hardhat
    

    npm init -y 命令会创建一个 package. 文件,用于管理项目的依赖和脚本。 npm install --save-dev hardhat 命令会将 Hardhat 安装为项目的开发依赖。 npx hardhat 命令会启动 Hardhat 的配置向导。在配置向导中,选择 "Create a basic sample project" 以创建一个包含基本目录结构和示例合约的初始项目。

  • 安装必要的依赖: 为了能够与币安智能链 (BSC) 进行交互,并利用 Hardhat 提供的测试和部署功能,需要安装一些关键的 Hardhat 插件和库。
    npm install --save-dev @nomiclabs/hardhat-waffle ethereum-waffle chai @nomiclabs/hardhat-ethers ethers
    

    @nomiclabs/hardhat-waffle ethereum-waffle chai 共同提供了一个强大的测试环境,允许开发者编写详细的单元测试,验证智能合约的功能和行为。 @nomiclabs/hardhat-ethers ethers 库则提供了与以太坊区块链交互的工具,包括账户管理、交易签名和合约部署等功能。这些依赖项是开发过程中不可或缺的部分。

    为了验证部署到币安智能链上的合约,需要安装 @nomiclabs/hardhat-etherscan 插件。

    npm install --save-dev @nomiclabs/hardhat-etherscan
    

编写智能合约

现在我们可以开始编写我们的智能合约了。智能合约是部署在区块链上的代码,用于自动执行交易和其他操作。它们使用特定的编程语言编写,例如 Solidity,并且需要仔细设计和测试以确保安全性和正确性。

  • 创建合约文件: contracts 目录下创建一个新的文件,例如 MyContract.sol .sol 扩展名表示这是一个 Solidity 源文件。目录结构通常用于组织和管理项目中的多个智能合约。
  • 编写 Solidity 代码: MyContract.sol 文件中编写你的智能合约代码。 Solidity 是一种面向合约的、高级编程语言,用于在以太坊虚拟机 (EVM) 上编写智能合约。 例如,我们可以创建一个简单的合约,用于存储和检索一个数字:

Solidity 示例代码如下:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * @title MyContract
 * @dev 一个简单的智能合约,用于存储和检索一个数字。
 */
contract MyContract {
    uint256 public myNumber;

    /**
     * @dev 构造函数,在合约部署时设置初始数字。
     * @param initialNumber 合约部署时的初始数字。
     */
    constructor(uint256 initialNumber) {
        myNumber = initialNumber;
    }

    /**
     * @dev 设置存储的数字。
     * @param newNumber 要设置的新数字。
     */
    function setNumber(uint256 newNumber) public {
        myNumber = newNumber;
    }

    /**
     * @dev 获取存储的数字。
     * @return 返回当前存储的数字。
     */
    function getNumber() public view returns (uint256) {
        return myNumber;
    }
}

代码解释:

  • // SPDX-License-Identifier: MIT :指定合约的开源协议许可,表明代码以 MIT 许可证开源。
  • pragma solidity ^0.8.0; :指定编译器版本。 这行代码指示编译器使用 0.8.0 或更高版本来编译此合约。
  • contract MyContract { ... } :定义一个名为 MyContract 的合约。
  • uint256 public myNumber; :声明一个公共的无符号 256 位整数变量 myNumber ,用于存储数字。 public 关键字会自动生成一个 getter 函数,允许从合约外部访问此变量。
  • constructor(uint256 initialNumber) { ... } :定义构造函数。 构造函数在合约部署时执行,并初始化 myNumber 变量。
  • function setNumber(uint256 newNumber) public { ... } :定义一个公共函数 setNumber ,用于更新 myNumber 变量。
  • function getNumber() public view returns (uint256) { ... } :定义一个公共的只读函数 getNumber ,用于获取 myNumber 变量的值。 view 关键字表示该函数不会修改合约的状态。

编译智能合约

在将智能合约部署到区块链网络之前,至关重要的一步是将其编译成字节码。字节码是智能合约的低级表示形式,能够被以太坊虚拟机(EVM)理解和执行。编译过程涉及将人类可读的Solidity代码转换为EVM可以执行的指令集,这一步对于确保合约能够在区块链上正确运行至关重要。

  • 编译合约: 为了开始编译过程,你需要打开命令行工具,并导航到你的智能合约项目所在的目录。假设你已经正确安装并配置了Hardhat开发环境,可以使用以下命令进行编译:

    bash npx hardhat compile

    这条命令会指示Hardhat编译器处理项目中的所有Solidity合约文件。Hardhat会分析每个合约,执行语法检查,并将其转换为对应的字节码。如果编译过程中出现任何错误,例如语法错误或类型不匹配,编译器将会报告这些错误,你需要修复这些错误才能成功编译合约。

    一旦编译成功,你会在项目的 artifacts 目录下找到编译后的合约文件。在 artifacts/contracts 目录下,每个合约都会对应一个JSON文件,该文件包含合约的ABI (Application Binary Interface,应用程序二进制接口) 和字节码。ABI描述了合约的接口,包括合约中的函数、事件以及它们的参数类型。字节码是合约的可执行代码,将被部署到区块链上。这些编译后的文件是后续部署和与合约交互的关键。

部署智能合约

现在我们可以将智能合约部署到币安智能链(BSC)上,使其在去中心化的环境中运行。 部署过程涉及配置开发环境、编译合约以及将编译后的字节码发送到区块链。

  • 配置 Hardhat: 打开 hardhat.config.js 文件。 此文件是 Hardhat 项目的核心配置文件,用于定义 Solidity 编译器版本、网络配置和其他必要的设置。在此文件中,配置币安智能链测试网或主网的网络参数,并务必替换为你的私钥,该私钥用于签署交易。

javascript require("@nomiclabs/hardhat-waffle"); require("@nomiclabs/hardhat-etherscan");

// 替换为你自己的私钥,确保私钥的安全存储。 const PRIVATE KEY = "YOUR PRIVATE_KEY";

// 替换为你的 BSCScan API Key,用于验证和发布合约源代码。 const BSCSCAN API KEY = "YOUR BSCSCAN API_KEY";

module.exports = { solidity: "0.8.4", networks: { bscTestnet: { url: "https://data-seed-prebsc-1-s1.binance.org:8545/", chainId: 97, gasPrice: 20000000000, accounts: [PRIVATE KEY], }, bscMainnet: { url: "https://bsc-dataseed.binance.org/", chainId: 56, gasPrice: 5000000000, accounts: [PRIVATE KEY], }, }, etherscan: { apiKey: BSCSCAN API KEY, }, };

重要提示: 请务必妥善保管你的私钥,不要泄露给任何人。
  • 创建部署脚本: 在 scripts 目录下创建一个新的文件,例如 deploy.js
  • 编写部署脚本: 在 deploy.js 文件中编写部署脚本。

javascript async function main() { const MyContract = await hre.ethers.getContractFactory("MyContract"); const myContract = await MyContract.deploy(123); // 构造函数参数

await myContract.deployed();

console.log("MyContract deployed to:", myContract.address); }

main() .then(() => process.exit(0)) .catch((error) => { console.error(error); process.exit(1); });

  • 部署合约: 打开命令行工具,进入项目目录,然后运行以下命令:

    bash npx hardhat run scripts/deploy.js --network bscTestnet

    bash npx hardhat run scripts/deploy.js --network bscMainnet

    具体取决于你要部署到哪个网络。 部署成功后,你会在命令行中看到合约的地址。

与智能合约交互

智能合约成功部署到区块链后,便可进行交互。MetaMask 或其他兼容的工具,如 Trust Wallet 或 Ledger Live,可以作为用户界面,方便用户与合约进行互动。

  • 使用 MetaMask:
    • 添加合约地址: 在 MetaMask 钱包中,你需要导入合约地址,以便 MetaMask 识别并与该合约建立连接。这通常涉及在 MetaMask 界面中选择“添加合约”或类似的选项,然后粘贴合约的地址。
    • 交互合约函数: 合约地址添加完成后,你可以调用合约中定义的函数。MetaMask 会提示你确认交易,包括 gas 费用,并在你批准后将交易发送到区块链。智能合约函数可以读取链上数据,也可以修改链上状态。读取数据通常不需要 gas 费用,但修改数据则需要。
  • 使用 ethers.js: ethers.js 是一个强大的 JavaScript 库,专门用于与以太坊区块链及其相关的智能合约进行交互。
    • 连接到 Provider: 你需要使用 ethers.js 连接到一个以太坊节点,这可以通过一个 Provider 实现。Provider 可以是 Infura、Alchemy 或你自己的以太坊节点。
    • 实例化合约: 使用合约的 ABI(Application Binary Interface)和地址,你可以创建一个合约实例。ABI 定义了合约的函数和事件,使得 ethers.js 能够理解如何与合约进行交互。
    • 调用合约函数: 通过合约实例,你可以调用合约的函数。对于修改链上状态的函数,你需要发送一个交易,并使用你的私钥进行签名。Ethers.js 提供了方便的方法来创建和发送交易。
    • 监听合约事件: 智能合约可以发出事件,例如当一个交易发生时。你可以使用 ethers.js 监听这些事件,并在你的应用程序中做出相应的反应。

验证智能合约 (可选)

为了提升智能合约的透明度和可信度,便于社区成员审查和使用,建议在 BSCScan 上验证您的合约。智能合约验证后,代码将在区块链浏览器上公开,允许任何人查看合约的源代码,增加合约的安全性与可靠性。

  • 配置 API Key: hardhat.config.js 文件中配置您的 BSCScan API Key。BSCScan API Key 是连接您的开发环境和 BSCScan 验证服务的凭证。您需要前往 BSCScan 网站 注册账号并获取 API Key。将 API Key 添加到 hardhat.config.js 配置文件中的方式如下:
    
    module.exports = {
      // ...其他配置...
      etherscan: {
        apiKey: "YOUR_BSC_SCAN_API_KEY", // 将 YOUR_BSC_SCAN_API_KEY 替换为你的 API Key
      },
    };
    
  • 验证合约: 完成 API Key 配置后,打开命令行工具,导航至您的项目目录,然后使用 Hardhat 提供的 verify 任务来验证您的合约。根据您的合约部署的网络选择相应的命令:

    在测试网络 (bscTestnet) 验证:

    
    npx hardhat verify --network bscTestnet DEPLOYED_CONTRACT_ADDRESS "CONSTRUCTOR_ARGUMENT"
    

    在主网络 (bscMainnet) 验证:

    
    npx hardhat verify --network bscMainnet DEPLOYED_CONTRACT_ADDRESS "CONSTRUCTOR_ARGUMENT"
    

    请务必将 DEPLOYED_CONTRACT_ADDRESS 替换为您实际部署的合约地址。 CONSTRUCTOR_ARGUMENT 对应合约构造函数的参数。如果合约构造函数没有参数,则无需提供此参数。如果存在多个参数,请用空格分隔它们,并确保参数的顺序和类型与构造函数定义一致。

    例如,如果您的合约构造函数需要一个 uint256 类型的参数 123 和一个 string 类型的参数 "hello" ,则验证命令如下:

    
    npx hardhat verify --network bscTestnet 0xYourContractAddress 123 "hello"
    

    成功验证后,您的合约代码将会在 BSCScan 上公开显示,并附带一个绿色的勾选标记,表明合约已验证。用户可以通过 BSCScan 查看合约源代码,ABI (Application Binary Interface),以及其他相关信息。这有助于建立用户对合约的信任,并促进合约的广泛使用。

上一篇: 掌握 AM 币投资秘诀:你的朋友知道这几个技巧吗?
下一篇: 掌握OKX API:用Python轻松玩转交易所!

为您推荐