你如何部署你的第一个 Solidity 合约?🤔

2026-05-20 21:553阅读0评论SEO优化
  • 内容介绍
  • 文章标签
  • 相关推荐

你如何部署你的第一个 Solidity 合约?🤔

雪糕刺客。 部署一个Solidity合约就像是在茫茫大海中航行,你需要合适的工具和指南来指引方向。准备好了吗?让我们一起踏上这段旅程!🚣‍♀️

选择你的工具链

先说说你需要选择一个适合你的工具链。目前市面上流行的有Hardhat和Foundry。它们各有千秋,但都能帮助你完成Solidity合约的部署,真香!。

《纸上谈兵·solidity》第 1 课:部署你的第一个 Solidity 合约
工具 描述
Hardhat 一个基于JavaScript的开发环境,提供了丰富的插件和灵活的配置。
Foundry 一个基于Rust的开发框架,以其高性能和简洁的配置著称。

编写你的第一个Solidity合约

无论你选择哪种工具链,第一步都是编写你的Solidity合约。 我可是吃过亏的。 下面是一个简单的例子:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract HelloWorld {
    string public greet = "Hello, Hardhat!";
}

这个合约定义了一个公共变量greet并初 拜托大家... 始化为"Hello, Hardhat!"。

使用Hardhat部署合约

如果你选择了Hardhat, 那么你可以按照以下步骤来部署你的合约:

$ mkdir hello-hardhat
$ cd hello-hardhat
$ npm init -y
$ npm install hardhat
$ npx hardhat

一言难尽。 选择Create a basic sample project然后编辑contracts/HelloWorld.sol将上面的Solidity代码粘贴进去。

接下来 编译和部署合约:

$ npx hardhat compile
$ npx hardhat node # 在另一个终端运行

然后在另一个终端中,运行:

$ npx hardhat run scripts/deploy.js --network localhost

使用Foundry部署合约

如果你更倾向于使用Foundry,那么步骤如下:

$ forge init hello-world
$ cd hello-world
$ forge build

编辑src/HelloWorld.sol输入你的Solidity代码。 心情复杂。 然后 使用anvil启动本地测试链:

$ anvil

再说说部署你的合约:

$ forge script script/Deploy.s.sol --rpc-url http://127.0.0.1:8545 --broadcast --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80

Solidity 合约自动生成 getter 函数的奥秘 🔍

当你在 Solidity 中将一个变量声明为 public 时比如在我们的 HelloWorld 合约中的 greet 变量: solidity string public greet = "Hello, World!"; Solidity 会自动为这个变量生成一个 getter 函数。 我爱我家。 这意味着你可以直接通过调用 greet 来获取 greet 变量的值,而无需自己编写 getter 函数。

为何自动生成 getter? 🤔

  1. 简化代码自动生成 getter 函数减少了你需要编写的代码量,让你的合约更加简洁。
  2. 提高可读性通过自动提供访问变量的方式,使得合约逻辑更加清晰易懂。
  3. 遵循封装原则虽然变量是 public 的, 但通过函数访问仍然保持了一定程度的封装性,使得未来可能的修改不会影响到调用者。

示例 🌟

假设我们有一个更复杂的合约, 其中包含多个 public 状态变量: solidity contract ComplexContract { string public name = "MyContract"; uint public count = 0; } 你可以直接调用 name 和 count 来获取相应的值: javascript const complexContract = await ers.getContractAt; console.log); // 输出: MyContract console.log); // 输出: 0,开搞。

对比其他语言 🔄

在其他编程语言中,比如 Java 或 C++,通常需要显式地编写 getter 和 setter 方法来访问私有字段。Solidity getter简化了这一过程, 但一边也意味着如果你需要更复杂的访问逻辑,你就需要手动实现这些函数,百感交集。。

最佳实践 💡

  • 使用 public 修饰符时要谨慎虽然方便,但过度使用 public 可能会暴露不应该被直接访问的状态。
  • 考虑封装性如果某个变量不应该被外部直接访问, 考虑将其设为 privateinternal并根据需要编写自定义的 getter 和 setter。

getter 的机制, 你可以更高效地编写和管理你的智能合约,一边保持代码的清晰和平安。 💻🔒

技术栈 功能简介
Remix 基于Web的IDE, 适合快速原型开发和学习
Hardhat 灵活且可 的开发环境,具有丰富的插件生态
Foundry 高性能的开发框架,以Rust为底层语言

CryptoZombies - 编写、部署、调用 Solidity 合约全流程 💻🔥🎉👏💕😍🙌🚀👍💪🔓💯🌟🔜💥🎊🙌🏼🚀👏🙌👍😎🕺💃🕺🔥💥🎉💐🌸🎁🤩🥳📚💻📖📰👀💭🤔📝🖋️🔗📚💡🔦💻🎨🖌️🖼️📸🎭📺🍿🎬👀🔍🧐🤝📈💸🚀📊🔒🔑🔓🔏🌐👥🤝🌈👫🤜🤛👭🕊️💖😘🥰😍😻👩‍❤️‍👨👨‍❤️‍👨👩‍❤️‍👩💏👫🚣‍♀️🏊‍♀️🌊🐠🐳🌴🏖️🎉😎🤩🥳🎊🙌🏼🚀😁🤣🎁📦📦📦🚚📦🚚📦🚚📦🚚

 问题    解决方案    备注   
构造函数为何没施行? 检查是否定义了 constructor 函数 默认不施行初始化逻辑,除非显式定义
public 变量为何自动生成 getter? Solidity 自动为 public 状态变量生成只读函数 简化了状态读取,无需手动编写 getter 函数

恭喜!🎉 你已经成功部署了人生中的第一个 Solidity 合约!接下来是时候深入了解更多关于智能合约的知识和技巧了。继续探索吧!

你如何部署你的第一个 Solidity 合约?🤔

雪糕刺客。 部署一个Solidity合约就像是在茫茫大海中航行,你需要合适的工具和指南来指引方向。准备好了吗?让我们一起踏上这段旅程!🚣‍♀️

选择你的工具链

先说说你需要选择一个适合你的工具链。目前市面上流行的有Hardhat和Foundry。它们各有千秋,但都能帮助你完成Solidity合约的部署,真香!。

《纸上谈兵·solidity》第 1 课:部署你的第一个 Solidity 合约
工具 描述
Hardhat 一个基于JavaScript的开发环境,提供了丰富的插件和灵活的配置。
Foundry 一个基于Rust的开发框架,以其高性能和简洁的配置著称。

编写你的第一个Solidity合约

无论你选择哪种工具链,第一步都是编写你的Solidity合约。 我可是吃过亏的。 下面是一个简单的例子:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract HelloWorld {
    string public greet = "Hello, Hardhat!";
}

这个合约定义了一个公共变量greet并初 拜托大家... 始化为"Hello, Hardhat!"。

使用Hardhat部署合约

如果你选择了Hardhat, 那么你可以按照以下步骤来部署你的合约:

$ mkdir hello-hardhat
$ cd hello-hardhat
$ npm init -y
$ npm install hardhat
$ npx hardhat

一言难尽。 选择Create a basic sample project然后编辑contracts/HelloWorld.sol将上面的Solidity代码粘贴进去。

接下来 编译和部署合约:

$ npx hardhat compile
$ npx hardhat node # 在另一个终端运行

然后在另一个终端中,运行:

$ npx hardhat run scripts/deploy.js --network localhost

使用Foundry部署合约

如果你更倾向于使用Foundry,那么步骤如下:

$ forge init hello-world
$ cd hello-world
$ forge build

编辑src/HelloWorld.sol输入你的Solidity代码。 心情复杂。 然后 使用anvil启动本地测试链:

$ anvil

再说说部署你的合约:

$ forge script script/Deploy.s.sol --rpc-url http://127.0.0.1:8545 --broadcast --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80

Solidity 合约自动生成 getter 函数的奥秘 🔍

当你在 Solidity 中将一个变量声明为 public 时比如在我们的 HelloWorld 合约中的 greet 变量: solidity string public greet = "Hello, World!"; Solidity 会自动为这个变量生成一个 getter 函数。 我爱我家。 这意味着你可以直接通过调用 greet 来获取 greet 变量的值,而无需自己编写 getter 函数。

为何自动生成 getter? 🤔

  1. 简化代码自动生成 getter 函数减少了你需要编写的代码量,让你的合约更加简洁。
  2. 提高可读性通过自动提供访问变量的方式,使得合约逻辑更加清晰易懂。
  3. 遵循封装原则虽然变量是 public 的, 但通过函数访问仍然保持了一定程度的封装性,使得未来可能的修改不会影响到调用者。

示例 🌟

假设我们有一个更复杂的合约, 其中包含多个 public 状态变量: solidity contract ComplexContract { string public name = "MyContract"; uint public count = 0; } 你可以直接调用 name 和 count 来获取相应的值: javascript const complexContract = await ers.getContractAt; console.log); // 输出: MyContract console.log); // 输出: 0,开搞。

对比其他语言 🔄

在其他编程语言中,比如 Java 或 C++,通常需要显式地编写 getter 和 setter 方法来访问私有字段。Solidity getter简化了这一过程, 但一边也意味着如果你需要更复杂的访问逻辑,你就需要手动实现这些函数,百感交集。。

最佳实践 💡

  • 使用 public 修饰符时要谨慎虽然方便,但过度使用 public 可能会暴露不应该被直接访问的状态。
  • 考虑封装性如果某个变量不应该被外部直接访问, 考虑将其设为 privateinternal并根据需要编写自定义的 getter 和 setter。

getter 的机制, 你可以更高效地编写和管理你的智能合约,一边保持代码的清晰和平安。 💻🔒

技术栈 功能简介
Remix 基于Web的IDE, 适合快速原型开发和学习
Hardhat 灵活且可 的开发环境,具有丰富的插件生态
Foundry 高性能的开发框架,以Rust为底层语言

CryptoZombies - 编写、部署、调用 Solidity 合约全流程 💻🔥🎉👏💕😍🙌🚀👍💪🔓💯🌟🔜💥🎊🙌🏼🚀👏🙌👍😎🕺💃🕺🔥💥🎉💐🌸🎁🤩🥳📚💻📖📰👀💭🤔📝🖋️🔗📚💡🔦💻🎨🖌️🖼️📸🎭📺🍿🎬👀🔍🧐🤝📈💸🚀📊🔒🔑🔓🔏🌐👥🤝🌈👫🤜🤛👭🕊️💖😘🥰😍😻👩‍❤️‍👨👨‍❤️‍👨👩‍❤️‍👩💏👫🚣‍♀️🏊‍♀️🌊🐠🐳🌴🏖️🎉😎🤩🥳🎊🙌🏼🚀😁🤣🎁📦📦📦🚚📦🚚📦🚚📦🚚

 问题    解决方案    备注   
构造函数为何没施行? 检查是否定义了 constructor 函数 默认不施行初始化逻辑,除非显式定义
public 变量为何自动生成 getter? Solidity 自动为 public 状态变量生成只读函数 简化了状态读取,无需手动编写 getter 函数

恭喜!🎉 你已经成功部署了人生中的第一个 Solidity 合约!接下来是时候深入了解更多关于智能合约的知识和技巧了。继续探索吧!