当前位置: 首页 > 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.dtcms.com/a/292160.html

相关文章:

  • 高速AC耦合电容挨得很近,PCB串扰会不会很大……
  • vue2使用v-viewer实现自动预览
  • 能协调控制器的硬件与软件组成及解决方案
  • 网易视觉算法面试30问全景精解
  • 【node】npm包本地开发与调试
  • 【自动化运维神器Ansible】Ansible介绍与架构详解
  • Events
  • UE5 UI scaleBox 缩放框
  • 基于开源AI智能名片链动2+1模式与S2B2C商城小程序的淘宝新店引流与好评优化策略研究
  • 现在希望用git将本地文件crawler目录下的文件更新到远程仓库指定crawler目录下,命名相同的文件本地文件将其覆盖
  • Elastic Cloud 简化版:GCP Marketplace
  • 【LeetCode数据结构】栈和队列的应用——用队列实现栈问题、用栈实现队列问题详解
  • Leetcode力扣解题记录--第73题(矩阵置零)
  • ecflow服务的搭建,源码编译方式
  • Gerrit多仓库对应多邮箱配置办法
  • Stirling PDF本地PDF编辑器:cpolar内网穿透实验室第628个成功挑战
  • Apache Ignite 索引(Indexes)定义和使用
  • 【运维】SGLang服务器参数配置详解
  • Vue开发常用库(含npm安装命令)
  • IPv4枯竭时代:从NAT技术到IPv6的演进之路
  • C++函数 vs Go函数
  • C++ 中重载函数右值引用和左值引用匹配的优先级
  • 【机器学习】第四章 回归算法
  • 主流开源LLM架构对比与突破·
  • 控制器(Controller)模块的架构与工作流程 -OpenExo
  • Azure可靠性架构指南:构建云时代的高可用系统
  • Java函数指南:从Function到BiFunction的深度解析
  • 电商项目_秒杀_架构及核心
  • 【Linux】进程概念
  • 以Java程序员角度理解MCP