Solidty基础篇2-映射、msg、require、继承、引入、存储变量、函数内部和外部可见性

这篇具有很好参考价值的文章主要介绍了Solidty基础篇2-映射、msg、require、继承、引入、存储变量、函数内部和外部可见性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

映射(Mapping)和地址(Address)

映射_ 是另一种在 Solidity 中存储有组织数据的方法。

//对于金融应用程序,将用户的余额保存在一个 uint类型的变量中:
mapping (address => uint) public accountBalance;
//或者可以用来通过userId 存储/查找的用户名
mapping (uint => string) userIdToName;

映射本质上是存储和查找数据所用的键-值对。在第一个例子中,键是一个 address,值是一个 uint,在第二个例子中,键是一个uint,值是一个 string。

msg.sender

有一些全局变量可以被所有函数调用。 其中一个就是 msg.sender,它指的是当前调用者(或智能合约)的 address

require

require使得函数在执行过程中,当不满足某些条件时抛出错误,并停止执行

合约 inheritance (继承):

contract Doge {
  function catchphrase() public returns (string) {
    return "So Wow CryptoDoge";
  }
}

contract BabyDoge is Doge {
  function anotherCatchphrase() public returns (string) {
    return "Such Moon BabyDoge";
  }
}

合约 inheritance (继承)

由于 子集 是从 父集 那里 inherits (继承)过来的。 这意味着当你编译和部署了 父函数,它将可以访问 父函数 和 子函数和其他我们在 父集 中定义的其他公共函数。

这可以用于逻辑继承(比如表达子类的时候,Cat 是一种 Animal)。 但也可以简单地将类似的逻辑组合到不同的合约中以组织代码。

引入(Import)

在 Solidity 中,当你有多个文件并且想把一个文件导入另一个文件时,可以使用 import 语句:

import "./someothercontract.sol";

contract newContract is SomeOtherContract {

}

存储变量 —— storage 或 memory

Storage 变量是指永久存储在区块链中的变量。
Memory 变量则是临时的,当外部函数对某合约调用完成时,内存型变量即被移除。
大多数时候你都用不到这些关键字,默认情况下 Solidity 会自动处理它们。 状态变量(在函数之外声明的变量)默认为“存储”形式,并永久写入区块链;而在函数内部声明的变量是“内存”型的,它们函数调用结束后消失。

然而也有一些情况下,你需要手动声明存储类型,主要用于处理函数内的 _ 结构体 _ 和 _ 数组 _ 时, 一般这时solidty会提示;

更多关于函数可见性:internal(内部) 和 external(外部)

父集中的private函数在子集中不可见;
另外两个描述函数可见性的修饰词:internal(内部) 和 external(外部)
internal 和 private 类似,不过, 如果某个合约继承自其父合约,这个合约即可以访问父合约中定义的“内部”函数。
external 与public 类似,只不过这些函数只能在合约之外调用 - 它们不能被合约内的其他函数调用。
声明函数 internal 或 external 类型的语法,与声明 private 和 public类 型相同文章来源地址https://www.toymoban.com/news/detail-405901.html

到了这里,关于Solidty基础篇2-映射、msg、require、继承、引入、存储变量、函数内部和外部可见性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零开始 Spring Boot 63:Hibernate 继承映射

    图源:简书 (jianshu.com) 关系型数据库设计中是不存在继承概念的,但实体类可以用继承来组织代码结构,所以需要用一种方式将实体类的继承结构映射到表结构。 本文将介绍几种在 JPA(Hibernate)中映射实体类继承层次的方式。 第一种方式是用 @MappedSuperclass 标记超类(Super

    2024年02月12日
    浏览(52)
  • 在Vue中动态引入图片为什么要用require

    静态资源和动态资源 静态资源 动态的添加src 动态资源 我们通过网络请求从后端获取的资源 动态的添加src会被当成静态资源 动态的添加src最终会被打包成: 动态的添加图片最会会被编译成一个静态的字符串,然后再浏览器运行中会去项目中查找这个资源, 静态资源编译 默

    2024年02月13日
    浏览(52)
  • Vue中使用require.context自动引入组件的方法介绍

    目录 一、自动引入组件 1、语法 2、使用 2.1、在compoents文件下随便创建index.js文件 2.2、mian.js引入该js 二、自动生成路由 1、示例: 2、使用 2.1、在router文件下随便创建autoRouter.js文件 2.2、在router文件下index.js文件中引入autoRouter.js文件 三、总结 一、自动引入组件 我们项目开发

    2024年02月03日
    浏览(50)
  • 前端 ES6 环境下 require 动态引入图片以及问题

    ES6 环境中,通过 require 的方式引入图片很方便,一直以来也没有出过什么问题,后来项目中,需要动态引入图片。 require 动态引入也容易实现,百度也能搜到很多博客介绍。 偶然发现项目中 require 引入图片好像对打包体积影响挺大 ,js 会变大很多,经过测试,终于确定原因

    2024年02月07日
    浏览(44)
  • vue路由中component的动态引入(import、require的各种写法)

    常用import写法(如下图): 常用写发,先用import通过路径引入组件对象,再赋给component。 稍微高级一点 直接“@”到目标主文件夹,不用敲那么多点点点。 来源转化:

    2024年02月06日
    浏览(66)
  • 解决react,<img>src使用require方法引入图片不显示问题

    解决方法: 再导入的图片后加.default即可 img src={require(\\\'../../images/bg.png\\\').default} alt=\\\"\\\" /   推荐阅读:https://www.cnblogs.com/qianxiaoniantianxin/p/14789826.html

    2024年02月15日
    浏览(45)
  • Vue 项目路由、自定义指令、api方法自动引入资源(require.context使用)

    require.context(directory,useSubdirectories,regExp) 1:directory:哪个文件夹 2:useSubdirectories:是否需要找到子文件夹 3: regExp:正则表达式(一般指文件的后缀) 以下是单个js文件 接口的命名不能重复。 如果项目较大,建议接口命名需要有一个统一的规范来避免出现命名重复的问题

    2024年02月16日
    浏览(38)
  • 1.0、Java 继承与多态 - 成员变量访问特点

    父类:Father.java 文件如下所示 - 子类:Child.java 文件如下所示 - - 父类对象只能访问父类中的成员变量; - 而子类对象既可以访问父类中的成员变量,也可以访问自己类中的成员变量;   在父子类的继承关系当中,如果父类和子类的成员变量重名时,子类对象有下面两种访问

    2023年04月08日
    浏览(38)
  • 端口映射问题:Bad Request This combination of host and port requires TLS.

    错误信息: 遇到上面的错误信息:如果是通过域名访问,则该域名后配置的转发端口映射错误。 如果是通过ip+端口 或者 域名+端口访问,则为你端口填写错误。 我出现过若干次以上问题,所以将其记录,原因为在配置端口时,为服务配置了一个server port 一个http port。但在访

    2024年02月11日
    浏览(38)
  • 解决报错Parameter 0 of constructor in XXX required a bean...elasticsearch 继承ElasticsearchConfiguration方法

    报错内容 报错信息是由于ElasticsearchRestTemplate中定义了含参数的构造函数,Spring自动构造和注入时未为该Bean传入参数,引起报错。 解决方案:使用@Bean注解手动创建ElasticsearchRestTemplate的实例,具体步骤如下: 在ElasticRestClientConfig extends AbstractElasticsearchConfiguration里面添加方法

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包