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

Solidity初体验

一、概念知识

什么是智能合约?

智能合约是仅在满足特定条件时才在区块链上部署和执行的功能,无需任何第三方参与。

由于智能合约本质上是不可变的和分布式的,因此它们在编写和部署后无法修改或更新。此外,分布式的意义在于任何人都可以检查和查看区块链上的智能合约状态和交易历史。

如何构建智能合约?

尽管 Solidity 是使用最广泛的官方智能合约语言,但智能合约也可以用多种编程语言编写,包括 Javascript、Rust、Go 和 Yul。

什么是Solidity?

Solidity 是一种面向对象的高级编译编程语言,用于编写智能合约。对于有 JavaScript 知识的人来说,Solidity 更容易,因为它在语法上类似于 JavaScript。

Solidity 语法

// 1. SPDX-License-Identifier: MIT// 2. Solidity Version
pragma solidity ^ 0.8.13;// 3. Contract
contract My_Smart_Contract {// 4. Contract state declarationstring public myName;// 5. Constructor to initialize value to declared statesconstructor() {myName = "Samuel";}// 6. Contract functionfunction showMyName() public view returns (string memory) {return myName;}
}

代码解释说明

1、 Solidity 智能合约许可证
鼓励每个开发人员在其 Solidity 源文件的顶部添加机器可读许可证,如下所示:

// SPDX-License-Identifier: MIT

2. Solidity Pragma

一个 pragma 指令指示 Solidity 编译器运行智能合约的版本。

下面的 pragma 指令显示智能合约是为 Solidity 版本 0.8.13 编写的。^符号表示 Solidity 程序不低于 0.8.0 的版本或以 0.9.0 开头的版本一起使用。

pragma solidity ^ 0.8.13;

pragma 指令始终位于源文件的本地,这意味着您必须将其添加到所有源文件中。

3. Solidity 合约

合约是部署在区块链上指定地址的状态和功能的集合。

contract My_Smart_Contract {}

4. Solidity 中的变量

Solidity 是一种静态类型的编程语言,这意味着 Solidity 程序中的状态和局部变量必须由程序员在编译智能合约之前声明。

下面是在 Solidity 中声明变量的示例:

string public myName;

定义的变量初始化如下:

myName = "Samuel";

上面的变量可以像这样声明和初始化:

string myName = "Samuel";

Solidity 中有 3 种主要类型的变量:局部变量、状态变量和全局变量。

类型说明
局部变量这些是在solidity 函数中声明的变量,它们不存储在区块链上。
状态变量状态变量是在solidity 函数之外声明的变量,它们永久存储在区块链上。
全局变量Solidity 全局变量是其他函数可以访问的变量。它们保存有关区块链及其交易属性的信息。

5 Solidity 构造函数

在 Solidity 中,构造函数是一个特殊的关键字,用于创建一个可选函数,用于初始化智能合约中的状态变量。

智能合约只能有一个构造函数,并且只有在编译智能合约后才会执行。

constructor() {myName = "Samuel";
}

6 Solidity 函数

在编程中,函数是执行任务的代码块。它们是封装在单个对象中的代码组件。

该function关键字用于在 Solidity 中创建函数,类似于在 JavaScript 中创建函数的方式。

function showMyName() public view returns (string memory) {}

解释说明:
1、public关键字表示该函数可以被其他合约访问。
2、view 关键字表示该函数在区块链上是只读的,它不会改变区块链上的数据。
3、returns关键字表示函数返回的数据类型。
4、string关键字指定返回值的数据类型。
5、memory关键字意味着函数的变量将在函数被调用时存储在一个临时位置。

7 Solidity 字符串连接

连接通常是将一个字符串连接到另一个字符串末尾的过程。串联在任何编程语言中都是一个非常重要的概念。

在 Solidity 中连接一个字符串与使用流行的 +符号 连接两个或多个字符串有很大不同。

在 Solidity 中,我们将使用一种调用方法abi来连接两个或多个字符串。这abi是Application Binary Interface的缩写形式,它允许我们将参数编码或解码为 ABI。

string a = "A ";
string b = "B ";
string c = "C ";string(abi.encodePacked(a, b, c));

输出结果

A B C

二、创建一个智能合约

step1:Solidity IDE - Remix

运行 Solidity 智能合约的最快方法是使用在线 Solidity IDE,如 Remix(推荐)。

Remix IDE 是一个功能强大的开源 Solidity IDE,它允许我们直接从 Web 浏览器快速编写、编译和部署智能合约。

访问 http://remix.ethereum.org 在您的浏览器上启动 Remix IDE。
在这里插入图片描述

相关文章:

Solidity初体验

一、概念知识 什么是智能合约? 智能合约是仅在满足特定条件时才在区块链上部署和执行的功能,无需任何第三方参与。 由于智能合约本质上是不可变的和分布式的,因此它们在编写和部署后无法修改或更新。此外,分布式的意义在于任何…...

大模型笔记01--基于ollama和open-webui快速部署chatgpt

大模型笔记01--基于ollama和open-webui快速部署chatgpt 介绍部署&测试安装ollama运行open-webui测试 注意事项说明 介绍 近年来AI大模型得到快速发展,各种大模型如雨后春笋一样涌出,逐步融入各行各业。与之相关的各类开源大模型系统工具也得到了快速…...

html前段小知识点

1. 什么是HTML? 超文本标记语言是一种 用于创建网页的标准标记语言 HTML 文档包含了HTML 标签及文本内容 也叫文档1.什么是css? CSS (层叠样式表),是一种用来为结构化文档添加样式的计算机语言,CSS 文件扩展名为 .css。 可以设…...

AD7606工作原理以及FPGA控制验证(串行和并行模式)

文章目录 一、AD7606介绍二、AD7606采集原理2.1 AD7606功能框图2.2 AD7606管脚说明 三、AD7606并行模式时序分析以及实现3.1 并行模式时序图3.2 并行模式时序要求3.3 代码编写3.4 仿真观察 四、AD7606串行模式时序分析以及实现4.1 串行模式时序图4.2 串行模式时序要求4.3 代码编…...

如何查看Pod的Container资源占用情况

云原生学习路线导航页(持续更新中) 方法一:直接查看pod的资源占用 kubectl top pods ${pod-name} -n ${ns} 方法二:通过运行的进程,查看pod的某个容器资源占用 1.找到pod所在node容器号:kubectl descri…...

WordPress上可以内容替换的插件

插件下载地址:WordPress内容替换插件 – 果果开发 类型 替换的类型:文章、自定义文章类型、分类、标签、媒体库、页面、评论、数据库表,不同的类型可以替换不同的字段。 替换字段 替换的字段,哪些字段内容需要替换。除了数据库…...

C++ | Leetcode C++题解之第355题设计推特

题目&#xff1a; 题解&#xff1a; class Twitter {struct Node {// 哈希表存储关注人的 Idunordered_set<int> followee;// 用链表存储 tweetIdlist<int> tweet;};// getNewsFeed 检索的推文的上限以及 tweetId 的时间戳int recentMax, time;// tweetId 对应发送…...

构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行分类

深度学习实践&#xff1a;构建并训练卷积神经网络&#xff08;CNN&#xff09;对CIFAR-10数据集进行分类 引言 在计算机视觉领域中&#xff0c;CIFAR-10数据集是一个经典的基准数据集&#xff0c;广泛用于图像分类任务。本文将介绍如何使用PyTorch框架构建一个简单的卷积神经…...

flowable 根据xml 字符串生成流程图

//获取xml InputStream stream repositoryService.getProcessModel(processDefinitionId); String result IOUtils.toString(stream, StandardCharsets.UTF_8); // 创建 XMLInputFactory XMLInputFactory factory XMLInputFactory.newInstance(); // 从字符…...

AI建模——AI生成3D内容算法产品介绍与模型免费下载

说明&#xff1a; 记录AI文生3D模型、图生3D模型的相关产品&#xff1b;记录其性能、功能、收费与免费方法 0.AI建模产品 Rodin MeshAnything Meshy 生成效果比较&#xff1a; Rodin效果最好、Meshy其次 1.Rodin 官网&#xff1a;gHyperHuman 支持&#xff1a;文生模型、…...

在Go中迅速使用RabbitMQ

文章目录 1 认识1.1 MQ分类1.2 安装1.3 基本流程 2 [Work模型](https://www.rabbitmq.com/tutorials/tutorial-two-go#preparation)3 交换机3.1 fanout3.2 direct3.3 [topic](https://www.rabbitmq.com/tutorials/tutorial-five-go) 4 Golang创建交换机/队列/Publish/Consume/B…...

Windows JDK安装详细教程

一、关于JDK 1.1 简介 Java是一种广泛使用的计算机编程语言&#xff0c;拥有跨平台、面向对象、泛型编程的特性&#xff0c;广泛应用于企业级Web应用开发和移动应用开发。 JDK&#xff08;Java Development Kit&#xff09;是用于开发 Java 应用程序的工具包。它由以下几个主要…...

Ribbon负载均衡底层原理

springcloude服务实例与服务实例之间发送请求&#xff0c;首先根据服务名注册到nacos&#xff0c;然后发送请求&#xff0c;nacos可以根据服务名找到对应的服务实例。 SpringCloudRibbon的底层采用了一个拦截器&#xff0c;拦截了openfeign发出的请求&#xff0c;对地址做了修…...

【C语言可变参数函数的使用与原理分析】

文章目录 1 前言2 实例2.1实例程序2.2程序执行结果2.3 程序分析 3 补充4 总结 1 前言 在编程过程中&#xff0c;有时会遇到需要定义参数数量不固定的函数的情况。 C语言提供了一种灵活的解决方案&#xff1a;变参函数。这种函数能够根据实际调用时的需求&#xff0c;接受任意…...

【笔记】Java EE应用开发环境配置(JDK+Maven+Tomcat+MySQL+IDEA)

一、安装JDK17 1.下载JDK17 https://download.oracle.com/java/17/archive/jdk-17.0.7_windows-x64_bin.zip 2.配置环境变量 下载后&#xff0c;解压到本地&#xff08;目录中最好不要有中文或特殊字符&#xff09; 打开【控制面板】-【系统和安全】-【系统】-【高级系统…...

一文讲懂扩散模型

一文讲懂扩散模型 扩散模型&#xff08;Diffusion Models, DM&#xff09;是近年来在计算机视觉、自然语言处理等领域取得显著进展的一种生成模型。其思想根源可以追溯到非平衡热力学&#xff0c;通过模拟数据的扩散和去噪过程来生成新的样本。以下将详细阐述扩散模型的基本原理…...

学习笔记八:基于Jenkins+k8s+Git+DockerHub等技术链构建企业级DevOps容器云平台

基于Jenkinsk8sGitDockerHub等技术链构建企业级DevOps容器云平台 测试jenkins的CI/CD在Jenkins中安装kubernetes插件安装blueocean插件配置jenkins连接到我们存在的k8s集群配置pod-template添加自己的dockerhub凭据测试通过Jenkins部署应用发布到k8s开发环境、测试环境、生产环…...

科研绘图系列:R语言柱状图分布(histogram plot)

文章目录 介绍加载R包读取数据画图介绍 柱状图(Bar Chart)是一种常用的数据可视化图表,用于展示和比较不同类别或组的数据。它通过在二维平面上绘制一系列垂直或水平的柱子来表示数据的大小,每个柱子的长度或高度代表一个数据点的数值。柱状图非常适合于展示分类数据的分布…...

vue3+ts封装类似于微信消息的组件

组件代码如下&#xff1a; <template><div:class"[voice-message, { sent: isSent, received: !isSent }]":style"{ backgroundColor: backgroundColor }"click"togglePlayback"><!-- isSent为false在左侧&#xff0c;为true在右…...

ES6 reduce方法详解:示例、应用场景与实用技巧

在JavaScript中&#xff0c;reduce 方法是一个非常强大的数组方法&#xff0c;它允许你将数组中的元素归并&#xff08;reduce&#xff09;为单个值。reduce 方法执行一个由你提供的reducer函数&#xff08;归并函数&#xff09;&#xff0c;将其结果汇总为单一的返回值。 一.…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...

前端工具库lodash与lodash-es区别详解

lodash 和 lodash-es 是同一工具库的两个不同版本&#xff0c;核心功能完全一致&#xff0c;主要区别在于模块化格式和优化方式&#xff0c;适合不同的开发环境。以下是详细对比&#xff1a; 1. 模块化格式 lodash 使用 CommonJS 模块格式&#xff08;require/module.exports&a…...

Qwen系列之Qwen3解读:最强开源模型的细节拆解

文章目录 1.1分钟快览2.模型架构2.1.Dense模型2.2.MoE模型 3.预训练阶段3.1.数据3.2.训练3.3.评估 4.后训练阶段S1: 长链思维冷启动S2: 推理强化学习S3: 思考模式融合S4: 通用强化学习 5.全家桶中的小模型训练评估评估数据集评估细节评估效果弱智评估和民间Arena 分析展望 如果…...