Solidity初体验

news2024/9/24 5:25:57

一、概念知识

什么是智能合约?

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

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

如何构建智能合约?

尽管 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 declaration
    string public myName;

    // 5. Constructor to initialize value to declared states
    constructor() {
        myName = "Samuel";
    }

    // 6. Contract function
    function 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。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上证50ETF期权交易策略有哪些?期权交易时要注意什么?

今天带你了解上证50ETF期权交易策略有哪些?期权交易时要注意什么?上证50ETF期权是一种以华夏50etf基金为标的物的金融衍生品,它允许投资者通过买卖期权合约来对冲风险或进行投机。 期权趋势型策略 趋势型的策略就是我们通常说的追涨杀跌&am…

git代码托管仓库02(分支与冲突)

分支 所有版本控制系统都以某种形式支持分支。使用分支意味着可以把自己的工作从开发主线上分离来进行重大的bug修改,开发新的功能,以免影响主线开发 该master就是分支 查看分支:git branch 添加分支: git branch 分支名 可以看…

C++笔记17•数据结构:二叉搜索树(K模型/KV模型实现)•

二叉搜索树 1.二叉搜索树 1. 二叉搜索树的查找 a 、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。 b 、最多查找高度次,走到到空,还没找到,这个值不存在。2. 二叉搜索树的插入 插入的具…

【图解版】Likes Vs Dislikes——C语言提高题【7 kyu】

一、原题 链接:Training on Likes Vs Dislikes | Codewars YouTube had a like and a dislike button, which allowed users to express their opinions about particular content. It was set up in such a way that you cannot like and dislike a video at the…

集成电路学习:什么是PWM脉冲宽度调制

一、PWM:脉冲宽度调制 PWM,全称为脉冲宽度调制(Pulse Width Modulation),是一种通过调整脉冲信号的宽度来控制电路输出的技术。在PWM中,信号的输出由一系列等幅值的脉冲组成,这些脉冲的宽度根据…

h5适配iOS——window.open失效

在H5开发中,打开一个新的标签页一般使用window.open。安卓中没啥限制,但是iOS的Safari出于安全限制,想使用该方法打开新的网页,必须得有用户手动触发,用代码自动打开是会失效的。 也就是说,window.open必须…

VS配置QGIS二次开发(VS2019+QT5+QGIS3.14)

1.1 QGIS软件下载 QGIS软件是基于QT5开发的GIS系统,其易用性及其高效性使其已经成为当下极具竞争力的GIS系统,其占有率足以与Esri的ArcGIS等主流GIS软件分庭抗礼。QGIS软件因其开源特性也使得其广受广大GIS开发者的青睐。 在本次《地理信息系统设计与开…

风趣图解LLMs RAG的15种设计模式-第二课

全部用的是Midjourney连续性一致性绘图画成

前端报文加密

前端加密功能 前端提供简单的AES对称加密算法,注意key 和后端网关配置相同,这里打包混淆后,相对安全。 (lun-ui\src\store\modules\user.js、base-gateway-dev.yml) 后端解密功能 使用hutool提供的工具类进行解密pub…

鸿蒙开发基础知识 第二篇【页面布局】

鸿蒙开发基础知识 第二篇 1. 两端对齐 demo 2.交叉轴对齐方式 demo 3.列表项布局 demo 4.自适应伸缩布局 demo 自行练习 5.弹性布局 flex 换行布局 demo 案例 更多鸿蒙技能知识与案例 我已经整理到下面了 ↓↓↓ 快去看那看吧! 点击下方↓↓↓↓↓↓↓…

【C++】类和对象(三)再探构造函数|static成员函数|友元函数|内部类|匿名对象|对象拷贝时的编译优化

欢迎来到HarperLee的学习笔记! 一、再探构造函数 初始化列表:构造函数初始化的第二种方式(第一种是使用函数体内赋值)。使用方式:以一个冒号:开始,用逗号,分隔数据成员列表,每个成员变量后面跟…

Linux 命令行/bash脚本 批量创建文件

目录 一. 命令行1.1 需求1.2 代码 二. bash脚本2.1 需求2.2 前置知识2.3 无进度条版本2.3.1 知识点2.3.2 代码2.3.3 效果 2.4 有进度条版本2.4.1 代码2.4.2 效果 一. 命令行 1.1 需求 在当目录下生成指定年份的文件,要求从生成1月到12月,每个月份的文件…

如何使用 update-alternatives 切换软件版本 ?

Debian 中的 update-alternatives 命令是系统上多版本软件管理的利器。它允许您轻松地在同一程序的不同版本之间切换。假设您在单个系统上安装了多个 Java 版本或 Python 版本,在 update-alternatives 的帮助下,您可以将程序的任何版本设置为系统的默认版…

SAP MM模块与FI模块集成之科目配置

1. 定义评估范围 OMWD 评估范围设置在工厂层,那么系统自动建立和工厂具有相同ID的评估范围 IMG:物料管理>评估和科目设置>科目确定>无向导的科目确定>将评估范围群集分组 提示:评估层级——评估分组代码——评估范围。 2. OBYC…

【Unity案例】搭建射击系统与UI

上期将基础的移动系统搭建完毕后就可以开始搭建更加复杂的系统部分了 前排提示,由于一开始仅思考如何完成操作相关功能,以至于到后面重构稍微有些困难,继续写下去恐成屎山,故在搭完射击和武器UI后不再继续泛化到敌人和敌人状态机…

SF-HCI-SAP问题收集18:员工上级经理无效

导读 INTRODUCTION CPI集成:这几天一直在处理SuccessFactors与SAP集成的问题,因为没有给deubg权限,排查比较困难,这次讲解的案例就是一个比较难发现的案例,在同步员工主数据的时候提示,经历在某个区间无效…

前端原生Js批量修改页面元素属性的2个方法

前言 嘿,朋友们!今天咱们来聊聊一个前端原生 JS 的小技巧。 今天在做一个 RPA 机器人时,碰到一个业务需求,网页上有两个日期控件元素,它们的输入框有 readonly 属性,只能通过选择的方式来输入日期&#x…

数据库和MySQL

ER图 实体(矩形):通常是现实世界的业务对象,当然使用一些逻辑对象也可以。 属性(椭圆):实体拥有的属性。 联系(菱形):实体与实体之间的关系。 函数依赖 函数依…

idea 编译断点运行 tomcat 10.1.28 源码

idea 编译运行 tomcat 10.1.28 源码 1. 所需资源 tomcat 10.1.28 zulu JDK 22 maven idea (支持 JDK 22) 2. Idea 导入项目 10.1.28.tar.gz 解压到指定文件夹 如 ~\tomcat-source\tomcat-10.1.28 这里等待一段时间,生成 ~\tomcat-source\tomcat-10.1.28\.idea 文…

双向链表

双向链表是一种基本的数据结构,它与单向链表的主要区别在于节点的连接方式。下面我将分别描述双向链表的特点以及它与单向链表的区别。 双向链表的特点: 节点结构:在双向链表中,每个节点包含三个部分:数据域、指向前一…