Hello World with solidity

news/2024/7/5 23:39:02/文章来源:https://www.cnblogs.com/lianshuiwuyi/p/18281744

1. Solidity 是什么?

Solidity 是一种面向对象的、静态类型的编程语言,专为在以太坊上编写智能合约而创建。由于以太坊上的智能合约可以处理真实世界的资产(比如加密货币),所以Solidity的设计非常关注安全性。

以下是 Solidity 的一些主要特点:

  1. 类型安全和静态类型:这可以避免在运行时出现很多类型错误。
  2. 支持复杂的用户定义类型,易于实现复杂的逻辑。
  3. 内建的函数,用于在区块链上进行数组和映射的复杂操作。

在Solidity程序中,你可以创建合约,合约可以包含状态变量、函数、函数修饰符、事件、结构类型和枚举类型。更重要的是,合约可以继承和接口,支持库的创建和使用。

Solidity的开发团队一直在不断改进语言,以保证它在区块链环境下表现优秀。尽管 Solidity 专为以太坊设计,但目前也已被其他区块链平台所使用。以下是一些支持 Solidity 的区块链平台:

  1. 以太坊(Ethereum):明显地, Solidity 是为了以太坊的智能合约开发而设计的,因此以太坊是最主要的支持 Solidity 的区块链平台。
  2. Binance Smart Chain:这是一个与以太坊兼容的区块链,也支持使用 Solidity 编写智能合约。
  3. Polygon(Matic):Polygon 是一个多链平台,旨在将以太坊扩展到多条链。 它支持与以太坊兼容的链(例如 Polygon SDK),也支持 Solidity 语言。
  4. Tron:为了兼容性和开发者友好,Tron 增设了对 Solidity 的支持。
  5. Avalanche:Avalanche 是一个开源平台,为去中心化应用、新型金融原型和去中心化资产提供阻塞验证。 它的 C-Chain 是与 Ethereum 完全兼容的,并且支持 Solidity 语言。
  6. Harmony:这是一个以太坊兼容的平台,他们的智能合约也支持 Solidity。

在这些平台上,开发者能够利用 Solidity 编写智能合约进行各种去中心化应用的开发。

2. Solidity 合约结构

Solidity合约的结构包含数字部分组成,以下是比较标准和常见的组成部分:

  1. 版本声明(Version Pragma):版本声明是Solidity文件中的第一行,用于指定编译器的版本。例如,pragma solidity ^0.8.0; 就是一条指定编译器版本的语句。
  2. 导入其他Solidity文件(Import Statement):你可以通过import命令来导入其他Solidity文件。例如:import "./AnotherContract.sol";
  3. 合约声明(Contract Declaration):定义合约是通过 contract 关键词进行的,后面跟着合约的名称。例如,contract MyContract {} 就声明了一个名为 MyContract 的合约。

在合约声明里,可以包括以下部分:

  • 状态变量(State Variables):状态变量是存储在区块链上的值。这些变量都是持久性的,意味着它们的值会在合约的各个函数调用间持久存在。
  • 函数(Functions):函数是用于修改合约状态的可执行代码单元。
  • 函数修饰符(Function Modifiers):函数修饰符可以更改函数的行为。例如,publicprivateinternalexternal等。
  • 事件(Events):事件是合约的一部分,它们会在合约函数被调用时触发,将数据添加到区块链的事务日志中。
  • 结构类型(Struct Types):结构是定义新的类型的方式。
  • 枚举类型(Enum Types):枚举是定义新的类型的另一种方式,它们是在一组预定义值中进行选择。

在使用 Solidity 编写合约时,必须遵循以上的结构,这样才能确保合约获得正确的行为和数据安全性。

3. 使用Remix IDE

Remix IDE是一个强大的开源工具,可以帮助你编写Solidity智能合约、进行测试、调试,以及部署到以太坊网络上。

以下是使用Remix IDE编写、测试智能合约的基本步骤:

3.1 打开Remix

访问它的官方网站:https://remix.ethereum.org/,界面如下:

Remix

3.2 编写智能合约

在代码编写窗口中,你可以编写新的Solidity智能合约。 例如,我们来编写一个简单的智能合约:“Hello, world!”:

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.0 <0.9.0;contract HelloWorld {function sayHello() public pure returns (string memory) {return "Hello, world!";}
}

HelloWorld

3.3 编译合约

在左边的导航栏中,选择‘Solidity编译器’,然后点击‘编译’按钮。如果你的代码无误,编译将成功完成,无需采取进一步的操作。如果有任何错误,它们将在"编译"部分底部的输出窗口中进行展示。

compoler

3.4 部署合约

在左侧的导航栏选择‘部署和运行事务’,在下拉菜单选择合适的以太坊环境,然后点击‘部署’按钮来将你的合约部署到这个环境。你的环境可以是JavaScript VM(一个沙箱环境,只在你的浏览器中运行),也可以是任何连接到的以太坊测试网络。

deploy

3.5 测试合约

测试是,你将看到在部署部分下面有一个新的面板,列出了你的合约和它的函数。如果你选择了上述“HelloWorld”合约,你可以看到'sayHello'函数。点击这个函数,应该会在下方的控制台显示"Hello, world!"。

test

以上就是使用Remix IDE编写、编译、部署和测试一个简单的Solidity智能合约的过程。不过值得注意的是,虽然这是一个基本的演示,但在开发更复杂的智能合约时,这个过程可能会变得更加复杂。


孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/736887.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何从Salesforce顾问转型为解决方案架构师?

在充满活力的Salesforce咨询领域,许多专业人士都希望从顾问转型为解决方案架构师。这种转型不仅需要掌握新技能,还需要从根本上改变思维方式。关键在于摆脱顾问典型的以职能为中心的思维模式,拥抱更广阔、更具战略性的视角。 从“如何”到“为什么” 当我们开始问“为什么”…

Modbus转Profibus主站网关连接温控表通讯技术

Modbus转ProfibusDP主站网关(XD-MDPBM20)是实现不同通讯协议设备之间联系的重要组件。本文将介绍Modbus转ProfibusDP主站网关(XD-MDPBM20)连接温控表实现高效通讯,涉及设备准备、协议介绍、配置步骤、测试通讯及注意事项。此技术可帮助实时监测温度并调节控制,提高生产效…

加解密技术原理

加解密技术概览 加解密定义 加密:数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,通过这样的途径来达到保护数据不被非法人员窃取、阅读的目的。解密:数据解密的过程就是对密文使用相应的算法和密钥进行解…

Jmeter使用CLI模式进行负载测试的注意点

在我们打开Jmeter的时候,窗口会出现如下提示:这个提示的意思是, 不要使用 GUI 模式进行负载测试:GUI 模式主要用于创建和调试测试,而不是运行大规模的负载测试。 ​使用 CLI 模式进行负载测试:CLI 模式(以前称为 NON GUI 模式)更适合进行负载测试,因为它能够更高效地使…

Golang面试:泛型

Go语言在1.18版本中引入了泛型(Generics),这是Go语言发展中的一个重要里程碑。泛型允许你编写更通用和可复用的代码,而无需牺牲类型安全性。以下是对Go中泛型的详细介绍,包括其语法、使用场景和示例代码。 1. 泛型的基本概念 泛型允许你定义可以处理多种数据类型的函数和数…

【算法】KD-tree

1. 算法简介 KD-tree(K-Dimensional),是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。 主要应用于多维空间关键数据的搜索。 KD-tree 的本质是一棵平衡树,将空间内的区域划分为一个超长方体,然后存储为节点进行维护。 以下为一个 \(k=2\) 时的 KD…

性能测试:主流性能监控工具介绍

行业流行性能监控工具有哪些Linux 自带命令 Vmstat,Top 等 Nmon Collectd + InfluxDB + Grafana Prometheus + Grafana行业流行性能监控工具的介绍 Linux 自带命令 Vmstat,Top 等 vmstat 和 top 都是 Linux 系统自带的命令,提供了实时的监控信息,对于系统管理员和开发人员来…

BTC交易流程

交易流程 比特币的交易流程涉及多个步骤和参与方,包括发送方、接收方、矿工和比特币网络中的节点。以下是比特币交易的详细流程:创建交易:生成比特币地址:比特币地址是一个由公钥生成的字符串,用于接收比特币。每个用户在创建比特币钱包时,都会生成一对公钥和私钥。公钥通…

技术手段和测试流程,不是一回事

看到这样一个问题:造测试数据时,如果失败了怎么办,如何处理这种失败的情况?失败了需要停止测试活动吗? 很久没看到这么有意思的问题了,毕竟测试数据是很重要的测试活动开展资料,如果缺失或者不准确,会对测试结果造成极大的影响。那么该如何理解和解决上述的问题呢?我们…

PaddleNLP UIE -- 药品说明书信息抽取(名称、规格、用法、用量)

目录创建项目环境配置上传代码训练定制代码结构数据标注准备语料库数据标注导出数据数据转换doccanoLabel Studio模型微调模型评估定制模型一键预测效果 PaddleNLP UIE 实体关系抽取 -- 抽取药品说明书(名称、规格、用法、用量) 对于细分场景推荐使用轻定制功能(标注少量数据…

VMware vSphere Tanzu部署_03_vCenter部署

vCenter部署 部署vCenter通过安装ISO内的webui工具进行vCenter虚机部署配置部署位置为ESXI机器配置部署规格为tiny模式配置vcsa部署的磁盘类型为精简模式配置vcsa的网络初始化vCenter配置vcsa开启ntp同步和开启SSH登录配置vsphere登录账号和登录域调整vCenter内存大小在esxi中将…

05-Excel初阶操作-学习笔记

本期继续更新函数专题DATE函数 函数格式:DATE(参数1,参数2,参数3) 参数说明:参数1:年份;参数2:月份;参数3:日 作用:将文本类型转换为正确的日期格式 应用场景:身份证号提取出生日期其中,MID()是文本截取函数 注意!如果输入2000-2-30使用date函数后会进行进位显示2000…

OpenBMB Hugging Face THUNLP,大模型课开班丨伙伴活动推荐

2022 年,OpenBMB 开源社区联合 THUNLP 开国内大模型公开课先河,全网百万级播放量,已帮助无数大模型爱好者从入门到精通。这个夏天,OpenBMB 携手 HuggingFace、THUNLP 和面壁智能,推出大模型公开课第二季。全球知名开源社区 OpenBMB Hugging Face 梦幻联动,MiniCPM、Chat…

【Unity】HoloLens2 开发日记

2022/1/12 第一天! START ! 配置环境微软官方教程:练习 - 导入和配置资源 - Learn | Microsoft DocsWindows 10 SDK 地址:Windows SDK - Windows 应用开发 (microsoft.com)MRTK(混合现实工具包):Download Mixed Reality Feature Tool from Official Microsoft Download C…

深度学习--模型优化--模型的量化--92

目录1. 什么是量化2 位宽,高精度浮点数的表示3. K-means 聚类量化4. 均匀/线性量化(linear quantization)5. Thresholding量化 1. 什么是量化 量化可以理解为:从连续到离散,针对parameters(W)、activations(A)使用整数值取代浮点数值, 模型尺寸更小 改进inference时间…

Profibus DP主站转Modbus网关连接伺服与电机通讯

文章介绍了ProfibusDP主站转Modbus网关(XD-MDPBM20)在工业自动化中的应用,包括其定义、优势及连接伺服与电机通讯的步骤。Profibus DP主站转Modbus网关(XD-MDPBM20)是一种用于不同通讯协议之间转换的设备,它可以将Profibus DP主站的信号转换为Modbus协议,实现不同设备之…

Power BI实用技巧:轻松打造专业级甘特图

Power BI实用技巧:轻松打造专业级甘特图大家好,今天我们要一起探索Power BI中一个既实用又强大的功能——制作甘特图。甘特图以其直观展示项目时间线和任务进度的特点,在项目管理中扮演着重要角色,今天将为大家带来两种不同的甘特图制作方式——堆积条形甘特图、第三方视觉…

docker相关配置

避免 Docker Hub 限制,最好配置镜像 配置文件:/lib/systemd/system/docker.service 把文件里ExecStart=/usr/bin/dockerd-current替换成ExecStart=/usr/bin/dockerd-current --registry-mirror=https://a14c78qe.mirror.aliyuncs.com即可 配置成功后可查看docker运行状态:sy…

Power BI进阶秘籍,干货满满!如何将度量值转化为切片器(动态切换分析指标),实操指南来了!

Power BI进阶秘籍,干货满满!如何将度量值转化为切片器(动态切换分析指标),实操指南来了!想要在Power BI中让度量值也能像维度一样灵活筛选?没问题,这里就为你揭秘如何将度量值转化为切片器(动态切换分析指标)的实用方法!一、了解基础:首先,要知道Power BI原生不支…

SD中的VAE,你不能不懂

要想生成一幅美丽的图片,没有VAE可不行什么是VAE? VAE,即变分自编码器(Variational Autoencoder),是一种生成模型,它通过学习输入数据的潜在表示来重构输入数据。 在Stable Diffusion 1.4 或 1.5 模型中,通过VAE对模型进行部分更新,以提升模型渲染眼睛的能力。通过这种…