当前位置:网站首页>如何用 Solidity 创建一个“Hello World”智能合约
如何用 Solidity 创建一个“Hello World”智能合约
2022-08-05 00:34:00 【Chainlink资讯】
最近发几篇简单的入门文章,帮助刚刚进入行业的工程师。
这篇文章将带你学习如何使用智能合约开发语言 Solidity 创建一个名为“Hello World”的智能合约。这篇文章不需要先验知识,初学者也很容易上手,跟着下面的步骤操作也可以轻松地的创建你的第一个智能合约。
什么是智能合约
智能合约是在区块链环境中发布和运行的计算机程序。由于它运行在区块链上,所以其运行不需要中心化的组织或服务器。
由于区块链的不变性,智能合约一旦被发布,就无法对其更新或修改。但智能合约中可能编写有具有更改数据功能的函数。信息可以在一个块中记录并在另一个块中删除,其历史记录会被保存并可以对其审核。
Solidity 编程语言
Solidity 是用于实现智能合约的一种面向对象的高级编程语言。它是一种[花括号]编程语言,即使用字符“{”和“}”定义语句块。
Solidity 被设计运行在以太坊虚拟机 (EVM) 上,语法上受 C++、Python 和 JavaScript 的影响。它是一种静态型语言,且支持继承、库和复杂的用户定义类型等。
Remix
Remix 一款基于浏览器的 IDE(集成开发环境),它可用于在线编写、编译、部署和调试 Solidity 代码。 Remix 中有一个在浏览器中运行的区块链模拟器,称为 JavaScriptVM 的环境。接下来我们就会使用到它。
创建智能合约
点击左侧活动栏第一个按钮:“文件浏览器”(File Explorers)(译者注:由于界面会不时更新,图标顺序可能会变化,点击活动栏按钮会打开对应功能的侧边栏)
点击“创建新文件”(Create New File)按钮(译者注:在打开的侧边栏中,下同)。
将文件命名为:HelloWord.sol。
Solidity 文件的扩展名为“.sol”。
复制并粘贴下面的示例代码:
// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;
contract HelloWorld {
function sayHelloWorld() public pure returns (string memory) {
return "Hello World";
}
}
现在我们看下智能合约中都是有什么内容。
// SPDX-License-Identifier
“//”表示这行是注释,而不是代码。
SPDX 许可证列表规范是免费和开放或协作软件中使用的通用许可证列表。
自Solidity 0.6.8 引入了 SPDX 许可证标识符,便于开发人员指定智能合约使用的许可证。
SPDX 许可证标识符应添加到合约代码的顶部,并使用“//”标识。
pragma
pragma用于指定 Solidity 版本,使用语义化版本控制。Solidity 官网有进一步介绍。
pragma solidity 0.8.13;
HelloWorld 合约
这句代码定义了一个名为“HelloWorld”的合约。
合约是函数和数据(其状态)的集合。
一旦部署,合约将存在于以太坊区块链的某个地址上,以太坊官网有进一步介绍。
sayHelloWorld 函数
这里定义了一个公有函数,该函数的功能是返回字符串“Hello World”。函数声明中的关键字 pure
表示该函数不读取或不修改区块链状态。
编译智能合约
在Remix活动栏中找到“Solidity 编译器”(Solidity compiler)按钮并点击。
点击“Compile HelloWorld.sol”按钮。
也可以勾选启用自动编译(auto-compile)选项。
检查编译按钮上是否出现绿色标识,若出现绿色标识,鼠标放在按钮上会有编译成功提示信息。
部署智能合约
在活动栏中,点击“部署和运行事务”(Deploy and run transactions)按钮。
因为我们现在只创建了一个智能合约,侧边栏里 “CONTRACT”(合约) 下拉菜单会自动选择该合约。
单击“部署”按钮。
与智能合约交互
当在 Remix 中部署完智能合约后,我们可以在活动栏的 “部署和运行交易”(Deploy and run transactions)里看到它:
- 在侧边栏中向下滚动鼠标,找到“已部署合约”( “Deployed Contracts”)。
- 展开“HelloWorld”。
- 点击按钮“sayHelloWorld”。
- 它将返回记录在合约中的信息:“Hello World”。
恭喜,你成功创建了一个“Hello World”智能合约!
下一步
现在你已经使用 Solidity 创建了你的“Hello World”智能合约,你还可以做很多其它尝试,比如将合约部署到测试网甚至主网,更改消息,通过创建状态变量来存储消息,通过创建函数来更新消息,或将消息永久保存到区块链!
Chainlink 中国开发者社区持续服务开发者,欢迎私信加入 Chainlink 开发者社区。
边栏推荐
- 软件开发工具的技术要素
- 2022 Hangzhou Electric Power Multi-School Session 3 K Question Taxi
- 软件测试面试题:负载测试、容量测试、强度测试的区别?
- tiup telemetry
- Pytorch usage and tricks
- 软件测试面试题:LoadRunner 分为哪三个模块?
- Software testing interview questions: What are the three modules of LoadRunner?
- Software testing interview questions: Have you used some tools for software defect (Bug) management in your past software testing work? If so, please describe the process of software defect (Bug) trac
- leetcode经典例题——单词拆分
- tensor.nozero(), mask, [mask]
猜你喜欢
论文解读( AF-GCL)《Augmentation-Free Graph Contrastive Learning with Performance Guarantee》
国内网站用香港服务器会被封吗?
找不到DiscoveryClient类型的Bean
matlab中rcosdesign函数升余弦滚降成型滤波器
电子行业MES管理系统的主要功能与用途
性能测试如何准备测试数据
标识符、关键字、常量 和变量(C语言)
oracle创建用户
SV class virtual method of polymorphism
[FreeRTOS] FreeRTOS and stm32 built-in stack occupancy
随机推荐
倒计时1天!8月2日—4日与你聊聊开源与就业那些事!
D - I Hate Non-integer Number (选数的计数dp
阅读笔记:如何理解DevOps?
E - Many Operations (按位考虑 + dp思想记录操作后的结果
"WEB Security Penetration Testing" (28) Burp Collaborator-dnslog out-band technology
数据类型及输入输出初探(C语言)
MongoDB搭建及基础操作
2 用D435i运行VINS-fusion
软件测试面试题:设计测试用例时应该考虑哪些方面,即不同的测试用例针对那些方面进行测试?
matlab 采用描点法进行数据模拟和仿真
【无标题】
日志(logging模块)
matlab中rcosdesign函数升余弦滚降成型滤波器
Software testing interview questions: Please draw the seven-layer network structure diagram of OSI and the four-layer structure diagram of TCP/IP?
leetcode:267. 回文排列 II
软件测试面试题:软件测试类型都有哪些?
JUC线程池(一): FutureTask使用
软件测试面试题:黑盒测试、白盒测试以及单元测试、集成测试、系统测试、验收测试的区别与联系?
uinty lua 关于异步函数的终极思想
QSunSync Qiniu cloud file synchronization tool, batch upload