你如何部署你的第一个 Solidity 合约?🤔
- 内容介绍
- 文章标签
- 相关推荐
你如何部署你的第一个 Solidity 合约?🤔
雪糕刺客。 部署一个Solidity合约就像是在茫茫大海中航行,你需要合适的工具和指南来指引方向。准备好了吗?让我们一起踏上这段旅程!🚣♀️
选择你的工具链
先说说你需要选择一个适合你的工具链。目前市面上流行的有Hardhat和Foundry。它们各有千秋,但都能帮助你完成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? 🤔
- 简化代码自动生成 getter 函数减少了你需要编写的代码量,让你的合约更加简洁。
- 提高可读性通过自动提供访问变量的方式,使得合约逻辑更加清晰易懂。
- 遵循封装原则虽然变量是
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可能会暴露不应该被直接访问的状态。 - 考虑封装性如果某个变量不应该被外部直接访问, 考虑将其设为
private或internal并根据需要编写自定义的 getter 和 setter。
getter 的机制, 你可以更高效地编写和管理你的智能合约,一边保持代码的清晰和平安。 💻🔒
| 技术栈 | 功能简介 |
|---|---|
| Remix | 基于Web的IDE, 适合快速原型开发和学习 |
| Hardhat | 灵活且可 的开发环境,具有丰富的插件生态 |
| Foundry | 高性能的开发框架,以Rust为底层语言 |
CryptoZombies - 编写、部署、调用 Solidity 合约全流程 💻🔥🎉👏💕😍🙌🚀👍💪🔓💯🌟🔜💥🎊🙌🏼🚀👏🙌👍😎🕺💃🕺🔥💥🎉💐🌸🎁🤩🥳📚💻📖📰👀💭🤔📝🖋️🔗📚💡🔦💻🎨🖌️🖼️📸🎭📺🍿🎬👀🔍🧐🤝📈💸🚀📊🔒🔑🔓🔏🌐👥🤝🌈👫🤜🤛👭🕊️💖😘🥰😍😻👩❤️👨👨❤️👨👩❤️👩💏👫🚣♀️🏊♀️🌊🐠🐳🌴🏖️🎉😎🤩🥳🎊🙌🏼🚀😁🤣🎁📦📦📦🚚📦🚚📦🚚📦🚚
| 问题 | 解决方案 | 备注 |
|---|---|---|
| 构造函数为何没施行? | 检查是否定义了 constructor 函数 | 默认不施行初始化逻辑,除非显式定义 |
| public 变量为何自动生成 getter? | Solidity 自动为 public 状态变量生成只读函数 | 简化了状态读取,无需手动编写 getter 函数 |
恭喜!🎉 你已经成功部署了人生中的第一个 Solidity 合约!接下来是时候深入了解更多关于智能合约的知识和技巧了。继续探索吧!
你如何部署你的第一个 Solidity 合约?🤔
雪糕刺客。 部署一个Solidity合约就像是在茫茫大海中航行,你需要合适的工具和指南来指引方向。准备好了吗?让我们一起踏上这段旅程!🚣♀️
选择你的工具链
先说说你需要选择一个适合你的工具链。目前市面上流行的有Hardhat和Foundry。它们各有千秋,但都能帮助你完成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? 🤔
- 简化代码自动生成 getter 函数减少了你需要编写的代码量,让你的合约更加简洁。
- 提高可读性通过自动提供访问变量的方式,使得合约逻辑更加清晰易懂。
- 遵循封装原则虽然变量是
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可能会暴露不应该被直接访问的状态。 - 考虑封装性如果某个变量不应该被外部直接访问, 考虑将其设为
private或internal并根据需要编写自定义的 getter 和 setter。
getter 的机制, 你可以更高效地编写和管理你的智能合约,一边保持代码的清晰和平安。 💻🔒
| 技术栈 | 功能简介 |
|---|---|
| Remix | 基于Web的IDE, 适合快速原型开发和学习 |
| Hardhat | 灵活且可 的开发环境,具有丰富的插件生态 |
| Foundry | 高性能的开发框架,以Rust为底层语言 |
CryptoZombies - 编写、部署、调用 Solidity 合约全流程 💻🔥🎉👏💕😍🙌🚀👍💪🔓💯🌟🔜💥🎊🙌🏼🚀👏🙌👍😎🕺💃🕺🔥💥🎉💐🌸🎁🤩🥳📚💻📖📰👀💭🤔📝🖋️🔗📚💡🔦💻🎨🖌️🖼️📸🎭📺🍿🎬👀🔍🧐🤝📈💸🚀📊🔒🔑🔓🔏🌐👥🤝🌈👫🤜🤛👭🕊️💖😘🥰😍😻👩❤️👨👨❤️👨👩❤️👩💏👫🚣♀️🏊♀️🌊🐠🐳🌴🏖️🎉😎🤩🥳🎊🙌🏼🚀😁🤣🎁📦📦📦🚚📦🚚📦🚚📦🚚
| 问题 | 解决方案 | 备注 |
|---|---|---|
| 构造函数为何没施行? | 检查是否定义了 constructor 函数 | 默认不施行初始化逻辑,除非显式定义 |
| public 变量为何自动生成 getter? | Solidity 自动为 public 状态变量生成只读函数 | 简化了状态读取,无需手动编写 getter 函数 |
恭喜!🎉 你已经成功部署了人生中的第一个 Solidity 合约!接下来是时候深入了解更多关于智能合约的知识和技巧了。继续探索吧!

