(2.3)其他补充—— 二、solidity 基础进阶《实战NFT web3 solidity(新版本0.8.+)》

《web3 solidity0.8.+版本(持续更新新版本内容) 基础到实战NFT开发》会及时更新新版本 solidity 内容,以及完成最终的 NFT 实战商业项目部分。

注:由于是付费专栏内容,若有错误请及时联系@1_bit,博客链接:https://blog.csdn.net/A757291228 ,或在文章下留言,收到后将会对错误进行改正,若是版本更新导致的问题也希望大家对错误进行提交,尽力去保证付费用户该得到的权益。

文章目录可查看:目录(文章更新中…)
更新内容将会在目录中更新…

友情提示:本系列文章读者最好学过一门编程语言,面向对象语言更佳,文章所有代码将会完整贴出。

一、字符串与 bytes

在 solidity 中 ,string 可以转化为 bytes,并且在转换时进行的是传址操作,例如:

// SPDX-License-Identifier:MIT
pragma solidity ^0.8.7;
contract StringDemo{function StringChange()public pure returns(string memory){string memory str="Hello";bytes memory byteData;byteData=bytes(str);byteData[1]='H';return str;}
}

在以上合约中创建了一个方法 StringChange,返回 string 类型的数据,在方法中创建了一个 str 的 string 类型数据以及一个 bytes 类型的 byteData 数据,在接下来的代码中使用 bytes 对字符串进行了强转赋值给到 byteData,接着修改第 0 位的内容为 H,但是此时 return 的是转化之前的 str 变量,那么 str 字符串变量是否能够发生影响呢?

部署合约后我们可以查看结果:
在这里插入图片描述

二、循环

在 solidity 中可以使用 for 循环,for 循环的语法跟其他编程语言(例如C 等)语法相似在此不再讲解。

以下示例简单的释放了一个 for 循环的使用,由于过于简单不再赘述:

// SPDX-License-Identifier:MIT
pragma solidity ^0.8.0;
contract StringDemo{uint[] arr=[1,2,3,4,5];function ForDemo()public view returns(uint){uint sum=0;for(uint i=0;i<arr.length;i++){sum+=arr[i];}return sum;}
}

以上代码此需要注意的是,我们在 ForDemo 方法中的修饰是 view,若你写错了改成了 pure 之类的,那么将会报错,因为在你修饰成了 pure 那么就表示你不会读取状态变量,那么你即使用了 arr那么也会报错,例如:
在这里插入图片描述

三、传参怎么传数组

在一些方法中,可能需要传入的参数是数组,那么在 remix 中我们测试时该怎么传入对应的数组参数呢?

以下是一个 solidity 代码的示例:

// SPDX-License-Identifier:MIT
pragma solidity ^0.8.0;
contract StringDemo{function parameterDemo(uint[5] memory _arr)public pure returns(uint) {    return _arr[1];}
}

以上的 parameterDemo 方法接收一个固长数组,在此部署后如何进行传参呢?

我们只需要传入一个 [] 所包裹的值集合即可,记得一定要是长度为5的数组,例如传入数据 [1,3,2,5,9]:

四、方法重载

solidity中支持重载,注意,是重载而不是重写 override。

在 solidity 中的同名函数,但参数不同的函数为函数的重载,例如以下示例:

// SPDX-License-Identifier:MIT
pragma solidity ^0.8.7;
contract  PayDemo{function OverLoading(address)public pure returns(string memory){return "address";}function OverLoading(uint256)public pure returns(string memory){return "uint256";}function OverLoading(uint256[] memory)public pure returns(string memory){return "int256[]";}
}

以上示例中分别创建了 3 个同名函数,但参数不同,通过不同的参数返回不同的值,部署合约后如下:
在这里插入图片描述
你会发现这样不就是体现了可以重名嘛,和传不同参数,本质上好像没啥区别。

这是因为这是重载在外部的可视化体现是这样的,若我们在合约中使用一个函数进行调用就不一样了,例如此时再合约中添加一个方法:

uint256[] u256Arr=[1,2,3,4,5,6];
function CallOverLoading(uint256 _c)public view returns(string memory){string memory res;if(_c==1){res = OverLoading(0x7C4e30a43ecC4d3231b5B07ed082329020D141F3);}else if(_c==2){res =  OverLoading(125);}else if(_c==3){res = OverLoading(u256Arr);}return res;
} 

此时为了等下的传入数组,在这里参加农历 uint256 的数组,随后创建一个 方法 CallOverLoading 接收一个参数 _c,并且在方法中判断这个 _c 的值,从而给 OverLoading 传入不同的参数,看看是否会返回不一样的值,注意,在这里需要把 public 改为 private 会比较舒服一点,当然你不改也可以:
在这里插入图片描述

改了之后部署就会显示一个 方法,这样看起来比较爽:
在这里插入图片描述

接着输入不同的值:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这样就舒服多了。

五、constant

constant 在 solidity 中常量的修饰符,通过使用 constant 对变量修饰后,变量转为常量且不可变,若修改将会报错:
在这里插入图片描述

六、函数修改器 modifier

在 solidity 中有一个函数修改器可作为前置、中置或者后置方法,有点像 ASP.NET 中的母版页(最起码差不多十年不碰了,不懂还有没有这个概念),又有点像 ThinkPHP 中的前置方法,可以在指定某个函数调用前、中执行该函数,下面是一个示例:

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.6;
contract ModifierTest{modifier checkAge(uint val){require(val<10,"Age < 10");_;}modifier checkHeight(uint val){require(val>260,"Height < 260");_;}function osVal(uint age,uint height) external pure checkAge(age) checkHeight(height){age+=1;}
}

以上代码中使用 modifier 创建了函数修改器,modifier 之后是对应的函数修改器名称,可以接收参数或者不接收参数,其中的 “_;” 表示使用这个修改器的函数代码位置,例如:

modifier checkHeight(uint val){require(val>260,"Height < 260");_;}

在被 osVal 方法调用后,osVal 方法中代码的位置就等于在“_;”位置进行填充。在 osVal 中使用这些修改器只需要再其后说明即可,并且可以传入对应的参数,调用后效果如下:
在这里插入图片描述

“三明治”用法:

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.6;
contract ModifierTest{uint public age=0;modifier sandwich(){age+=1;_;age+=1;}function osVal() external sandwich(){age+=1;}
}

三明治用法就是用于中间:

在这里插入图片描述

七、合约销毁

在 solidity 中,selfdestruct 是一个合约销毁方法,在部署时初始化函数中记录 msg.sender 后,通过一个方法使用 selfdestruct 传入 owner 即可对当前合约进行销毁:

// SPDX-License-Identifier:MIT
pragma solidity ^0.8.7;
contract  selfdestructDemo{address owner;constructor () {owner = msg.sender;}function kill() public {require (msg.sender == owner);selfdestruct(payable(owner));}}

不过在此要注意,selfdestruct 传入 owner 参数时需要将 owner 通过 payable 类型强转,否则将会出现如下错误:
在这里插入图片描述

待完善补充 将 逐步完善(重要的知识点或在后面章节单章更新)

事件 /索引 indexed
自定义错误
abi.encode/abi.encodePacked
interface
keccak256

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

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

相关文章

如何在web api中使用SignalR

说明&#xff1a; 在webapi中使用signalr&#xff0c;使用IIS 环境&#xff1a; vs2012, .net4.5 第一步&#xff1a;建web api项目 第二步&#xff1a;nuget导入signalr Install-Package Microsoft.AspNet.SignalR Install-Package Microsoft.Owin.Cors &#xff08;用于…

Directx11学习笔记【二】 将HelloWin封装成类

我们把上一个教程的代码封装到一个类中来方便以后的使用。 首先新建一个空工程叫做MyHelloWin&#xff0c;添加一个main.cpp文件&#xff0c;然后新建一个类叫做MyWindow,将于窗体有关的操作封装到里面 MyWindow.h文件 1 /***************************************************…

Badboy自动化测试工具11 导出脚本用于Jmeter并发测试

本节主要讲解利用Jmeter进行并发测试和引入图像报表 1. 在Jmeter中打开上节课&#xff08;10&#xff09;Badboy导出的在拉手网查询KTV的脚本Lashou_Search.jmx. 2. 右击Lashou节点&#xff0c;Add->Listener->Aggregate Graph & Graph Results 3. 对图像报表进行配置…

ArcGIS实验教程——实验三十九:ArcGIS多元分类(ISO聚类分析、最大似然分类、主成分分析)案例教程

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 一、ISO聚类1. ISO聚类简介2. ISO聚类进行非监督分类实验操作二、最大似然分类1. 最大似然简介2. 最大似然分类实验案例三、主成分分析1. 主成分分析简介2. 主成分分析实验案例四、配套实…

ABP Framework 5.3.0 版本新增功能和变更说明

ABP Framework 5.3.0 稳定版已在2022年6月14日正式发布。以下是本版本的新增功能&#xff1a;• “开始”页面提供创建单层项目选项• 启动模板提供 PWA 支持• Volo.Abp.Gdpr.Abstractions 包介绍• 将发件箱中的事件批量发布到事件总线• eShopOnAbp 项目改进和电子书公告• …

智能合约开发——TypeScript 基础(全)

TS 准备 首先我们准备一个目录&#xff0c;使用 dos 进入到某目录&#xff0c;当然你直接 vs 打开终端执行也是没有问题的&#xff1a; 执行以下命令安装 typescrip&#xff08;不用进入目录&#xff0c;直接安装即可&#xff09;&#xff1a; npm install -g typescript我是…

利用Signalr实现手机端App扫码登录web页面

实现原理&#xff1a; 1、web登录页面&#xff0c;利用jquery.qrcode展示一个随机生成的登录码的二维码&#xff1b; 2、手机App扫描二维码取得登录码&#xff1b; 3、手机App将本地用户id登录码通过api提交服务器&#xff1b; 4、服务器api&#xff0c;收到手机App请求&am…

【ArcGIS风暴】ArcGIS栅格影像(NDVI)归一化处理的两种方法精解

【ArcGIS遇上Python】ArcGIS批量处理栅格影像(NDVI)归一化完整案例代码 图像归一化是指对图像进行了一系列标准的处理变换,使之变换为一固定标准形式的过程,该标准图像称作归一化图像。 原始图像在经历一些处理或攻击后可以得到多种副本图像,这些图像在经过相同参数的图像…

以小见大:一个领域建模的简单示例,理解“领域驱动”。

背景&#xff1a;航空公司为了确保飞行路线不发生冲突&#xff0c;需要开发一款飞行路线管理软件。过程&#xff1a;我们先去找这个领域的专家&#xff0c;自然是作为平时管理和维护机场飞行秩序的工作人员&#xff1b;我们第一个目标就是与他们沟通&#xff0c;也许我们并不能…

【ArcGIS遇上Python】ArcGIS批量处理栅格影像(NDVI)归一化完整案例代码

文章《ArcGIS栅格影像(NDVI)归一化处理的两种方法精解》详细介绍了ArcGIS中进行NDVI影像归一化处理的两种方法,但是无法批量进行,本文就放大招用Python实现批量NDVI归一化处理,大大提高了工作效率,还不赶快Get了? 完整Python代码: import arcpy from arcpy import env…

Spark1.0.0 属性配置

1&#xff1a;Spark1.0.0属性配置方式Spark属性提供了大部分应用程序的控制项&#xff0c;而且能够单独为每一个应用程序进行配置。在Spark1.0.0提供了3种方式的属性配置&#xff1a;SparkConf方式 SparkConf方式能够直接将属性值传递到SparkContext&#xff1b;SparkConf能够对…

Lync Server 2010迁移至Lync Server 2013部署系列 Part1: 扩展AD架构

由于最近直在忙Lync 升级&#xff0c;好久没有更新博客了&#xff0c;今天开始将对最近做的Lync Server 2010迁移至Lync Server 2013项目做一个系列的部署操作更新&#xff0c;希望能给即将在企业中部署的兄弟们有所帮助&#xff0c;在这个测试环境中&#xff0c;企业 前端池共…

Hello Playwright:(7)模拟键盘和鼠标

尽管在上一节中&#xff0c;我们已经能够通过FillAsync或ClickAsync来实现输入和点击元素。但是&#xff0c;还有其他场景&#xff0c;我们必须模拟用户使用键盘、鼠标与页面交互。例如在线文档&#xff1a;Page.Keyboard 对象Keyboard提供用于管理虚拟键盘的 API&#xff0c;它…

【ArcGIS遇上Python】Python批量将多个文件夹下的多个影像数据镶嵌至新栅格

ArcGIS虽然可以实现一次多个影像同时参与,拼接成一个整的影像,但是通常情况下,多个影像并不在同一个文件夹下,这样拼接的时候需要逐个手动进行添加,如果数据量大的话,跟不就不可取,针对这一问题,本文采用Python,实现将多个文件夹下的多个影像拼接,高效快速。 我们以…

2019全球开发者调查:仅2%的人996,Python并不是最受喜爱的语言

导读&#xff1a;开发者社区正在发生哪些变化&#xff1f;Stack Overflow 的最新调查获得了一些预料之外的结果&#xff1a;Java 语言开发者的平均收入不到 35 万元人民币&#xff0c;成为了收入最低的群体&#xff1b;另一方面&#xff0c;人工智能领域流行的 Python 并不是最…

一般地

2019独角兽企业重金招聘Python工程师标准>>> 1.EO的Updatable属性默认为Always&#xff0c;基于EO创建的VO也是。而基于SQL创建VO的Updatable属性默认为Never&#xff0c;如果要修改&#xff08;例如将VO拖至页面生成Form用于新增&#xff09;&#xff0c;则需将该属…

最新!2019 年中国程序员薪资生存调查报告出炉

此调查&#xff0c;是对北京、上海、广东和浙江等全国 29 个省、直辖市及特别行政区的 26W 优秀程序员进行了一次详细的调查&#xff0c;形成本报告。 根据中国互联网络信息中心&#xff08;CNNIC&#xff09;近日发布第 43 次《中国互联网络发展状况统计报告》。截至 2018 年 …

快速掌握 ASP.NET 身份认证框架 Identity - 登录与登出

推荐关注「码侠江湖」加星标&#xff0c;时刻不忘江湖事这是 ASP.NET Core Identity 系列的第三篇文章&#xff0c;上一篇文章讲解了如何在 ASP.NET Core Identity 中实现用户注册。那么&#xff0c;这篇文章讲一讲如何在 ASP.NET Core Identity 中实现用户的登录与登出。点击上…

C语言试题七十九之请编写函数实现自然底数 e=2.718281828

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写函数…

如何创建NFT并OpenSea上展示《alchemy How to Develop an NFT Smart Contract》译

翻译&#xff1a;1_bit 原文&#xff1a;https://docs.alchemy.com/docs/how-to-develop-an-nft-smart-contract-erc721-with-alchemy 注&#xff1a;英文不好各位多多担待 1.如何使用 Alchemy 开发一个 NFT 智能合约 在你第一次使用 solidity 时开发一个智能合约部署在区块…