当前位置: 首页 > news >正文

solidity从入门到精通 第二章:Solidity初相见

第二章:Solidity初相见

初次约会:搭建开发环境

欢迎回来,勇敢的区块链探险家!在上一章,我们了解了区块链和智能合约的基本概念。现在,是时候卷起袖子,真正开始我们的Solidity编程之旅了。但在我们写出第一行代码之前,我们需要准备好我们的"武器装备"——也就是开发环境。

别担心,搭建Solidity的开发环境比组装宜家家具简单多了(而且不会剩下奇怪的螺丝)。

Remix IDE:初学者的最佳伙伴

如果编程语言是一场派对,那么IDE(集成开发环境)就是你的派对场地。对于Solidity初学者来说,Remix IDE就像是一个全包式的豪华派对场所——一切都已经为你准备好了。

Remix是一个基于Web的IDE,专为Solidity开发设计。它的优点是:

  • 无需安装任何东西(浏览器就是你的开发工具)
  • 内置编译器和调试工具
  • 可以直接部署和测试合约
  • 有一堆实用的插件和扩展

如何访问Remix:

  1. 打开你的浏览器(希望不是IE6)
  2. 访问 https://remix.ethereum.org/
  3. 瞧!你的Solidity开发环境已就绪

MetaMask:你的区块链钱包

如果你想在真实的区块链网络上部署和测试你的合约,你需要一个钱包。MetaMask是最受欢迎的以太坊钱包之一,它作为浏览器扩展运行。

想象MetaMask是你的数字世界护照,允许你在区块链王国中旅行和交易。安装步骤:

  1. 访问 https://metamask.io/
  2. 下载适合你浏览器的扩展
  3. 按照设置向导创建一个钱包
  4. 保存你的助记词(这就像你钱包的超级密码,丢失它就像把家门钥匙扔进火山——基本上是灾难性的)

警告:永远不要向任何人分享你的助记词或私钥。即使是那个自称是"尼日利亚王子"并承诺给你1000个以太币的人。特别是那种人。

测试网络:练习不花钱

在你成为下一个区块链亿万富翁之前,你可能想在不花真钱的情况下测试你的合约。这就是测试网络的用途。

测试网络是以太坊主网络的复制品,但使用的是没有实际价值的测试以太币。最受欢迎的测试网络包括:

  • Sepolia
  • Goerli

你可以通过"水龙头"网站获取免费的测试以太币。搜索"Sepolia faucet"或"Goerli faucet"就能找到这些网站。

你好,Solidity:第一个智能合约

好了,环境已经准备就绪,是时候写我们的第一个Solidity合约了!就像所有编程语言教程一样,我们将从经典的"Hello World"开始。

打开Remix IDE,创建一个新文件,命名为HelloWorld.sol。然后,输入以下代码:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract HelloWorld {string public message;constructor() {message = "Hello, Blockchain World!";}function updateMessage(string memory newMessage) public {message = newMessage;}
}

看起来很简单,对吧?让我们一行一行地解释这段代码:

  1. // SPDX-License-Identifier: MIT:这是一个许可证标识符。它告诉世界你的代码是在什么许可证下发布的。MIT许可证基本上是说:“嘿,随便用我的代码,但别怪我如果它把你的电脑变成了烤面包机。”

  2. pragma solidity ^0.8.0;:这行告诉编译器我们使用的Solidity版本。^符号表示"这个版本或更高的兼容版本"。这就像告诉餐厅:“我要一个8.0或更新版本的汉堡,但不要太新,以免有奇怪的配料。”

  3. contract HelloWorld { ... }:这定义了一个名为HelloWorld的合约。在Solidity中,合约类似于其他编程语言中的类。

  4. string public message;:这声明了一个公共字符串变量messagepublic关键字意味着任何人都可以读取这个变量。

  5. constructor() { ... }:构造函数在合约部署时执行一次。这里我们将message设置为初始值。

  6. function updateMessage(string memory newMessage) public { ... }:这是一个可以更新message值的函数。public意味着任何人都可以调用这个函数。

编译和部署你的第一个合约

现在我们有了代码,是时候让它在区块链上运行了!

编译合约

在Remix中编译合约非常简单:

  1. 点击左侧的"Solidity Compiler"图标(看起来像一个S)
  2. 确保编译器版本与你的pragma语句匹配
  3. 点击"Compile HelloWorld.sol"按钮
  4. 如果一切顺利,你会看到绿色的勾号。如果看到红色的错误,检查你的代码是否与上面的示例完全匹配

部署合约

编译成功后,是时候部署了:

  1. 点击左侧的"Deploy & Run Transactions"图标(看起来像一个小箭头)
  2. 在"Environment"下拉菜单中,选择"JavaScript VM"(这是Remix内置的模拟区块链环境)
  3. 点击"Deploy"按钮
  4. 瞧!你的合约现在"活"在(模拟的)区块链上了

与合约交互

部署后,你会在"Deployed Contracts"部分看到你的合约。展开它,你会看到两个按钮:

  • message:点击这个按钮会显示当前存储的消息
  • updateMessage:这里你可以输入一个新消息并更新它

试着点击message按钮,你应该会看到"Hello, Blockchain World!“。然后,在updateMessage输入框中输入一个新消息,如"Solidity is awesome!”,点击按钮,然后再次点击message按钮查看更新后的值。

恭喜!你刚刚创建并与你的第一个智能合约进行了交互!

Solidity语法速成:基本结构

现在你已经尝到了Solidity的甜头,让我们更深入地了解这门语言的基本结构。

合约结构

Solidity合约的基本结构如下:

// SPDX-License-Identifier: 许可证类型
pragma solidity 版本;contract 合约名称 {// 状态变量类型 可见性 变量名;// 事件event 事件名(参数);// 构造函数constructor() {// 初始化代码}// 函数function 函数名(参数) 可见性 返回类型 {// 函数体}
}

这就像一个食谱的基本结构:许可证是你的版权声明,pragma是你的烹饪工具版本,合约名称是菜名,状态变量是原料,函数是烹饪步骤。

注释

Solidity支持两种注释风格:

// 这是单行注释,计算机会忽略它/*
这是多行注释
你可以写很多行
计算机依然会忽略它们
*/

注释就像是你写给未来的自己(或其他开发者)的便条。几个月后当你回头看代码时,你会感谢当初写注释的自己。

数据类型

Solidity是一种静态类型语言,这意味着每个变量的类型必须在编译时确定。主要的数据类型包括:

  1. 布尔型(bool)truefalse。就像是"是"或"否"的问题。

    bool isReady = true;
    
  2. 整型(int/uint):带符号和无符号整数,从8位到256位。

    uint256 bigNumber = 123456789;
    int8 smallNumber = -5;
    
  3. 地址(address):以太坊地址,20字节。

    address myWallet = 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4;
    
  4. 字符串(string):文本数据。

    string greeting = "Hello, Solidity!";
    
  5. 数组:固定大小或动态大小的集合。

    uint[] numbers;  // 动态数组
    uint[5] fixedNumbers;  // 固定大小数组
    
  6. 映射(mapping):键值对存储,类似其他语言中的字典或哈希表。

    mapping(address => uint) balances;  // 地址到余额的映射
    

函数

函数是Solidity中的可执行单元。基本语法是:

function 函数名(参数类型 参数名) 可见性 状态可变性 返回(返回类型) {// 函数体
}

可见性修饰符包括:

  • public:任何人都可以调用
  • private:只能在当前合约内调用
  • internal:只能在当前合约及其子合约中调用
  • external:只能从合约外部调用

状态可变性修饰符包括:

  • view:不修改状态(只读取)
  • pure:不读取也不修改状态
  • payable:可以接收以太币

例如:

function add(uint a, uint b) public pure returns(uint) {return a + b;
}

这个函数接受两个无符号整数,执行加法运算,并返回结果。它是public的,所以任何人都可以调用它,而pure表示它不读取或修改任何状态。

小结:你的Solidity旅程已经开始

恭喜!你已经迈出了成为Solidity开发者的第一步。我们已经:

  • 设置了开发环境
  • 创建了第一个智能合约
  • 了解了Solidity的基本语法结构

这就像学习一门新语言的第一天——你可能还不能流利地"说",但你已经知道如何说"你好"了。

在下一章,我们将深入探讨Solidity的变量、数据类型和函数,让你的智能合约更加强大和灵活。

记住,编程就像骑自行车——刚开始可能会摔跤,但只要坚持练习,你很快就会掌握它。所以,继续编码,继续探索,我们下一章见!

练习挑战:尝试修改我们的HelloWorld合约,添加一个函数来返回消息的长度。提示:你可能需要查找Solidity中处理字符串的方法。

http://www.xdnf.cn/news/1166689.html

相关文章:

  • AI 音频产品开发模板及流程(二)
  • 数据结构 堆(2)---堆的实现
  • Markdown 转 PDF API 数据接口
  • Android ViewModel 深度解析:原理、使用与最佳实践
  • Redis——Redis进阶命令集详解(下)
  • Docker Compose UI远程访问教程:结合贝锐花生壳实现内网穿透
  • Qt中QObject类的核心作用与使用
  • C++函数 vs Go函数
  • Qt基本控件使用:按钮、标签、文本框等
  • 【打怪升级 - 01】保姆级机器视觉入门指南:硬件选型 + CUDA/cuDNN/Miniconda/PyTorch 安装全流程(附版本匹配秘籍)
  • Kotlin多线程调试
  • freertos关键函数理解 uxListRemove
  • 拼多多视觉算法面试30问全景精解
  • 【AI时代速通QT】第五节:Qt Creator如何引入第三方库,以OpenCV为例
  • 《汇编语言:基于X86处理器》第9章 字符串和数组(2)
  • 库制作与原理
  • Vue 3 面试题全套题库
  • Elasticsearch安装指南
  • 【集群】MySQL的主从复制了解吗?会有延迟吗,原因是什么?
  • AngularJS 动画
  • RabbitMQ--批量处理
  • Linux 内核与底层开发
  • Axios 二次封装
  • 用org.apache.pdfbox 转换 PDF 到 图片格式
  • EMA《2025-2028年药品监管中的数据与AI 1.3版》信息分析
  • OEC 刷机Armbain 25.05后配置说明
  • 扣子Coze智能体实战:自动化拆解抖音对标账号,输出完整分析报告(喂饭级教程)
  • Java 大视界 -- Java 大数据在智能医疗医疗设备维护与管理中的应用(358)
  • Apache Ignite 中乐观事务(OPTIMISTIC Transactions)的工作机制
  • Rabbit安装