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


    映射(Mapping)和地址(Address)

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

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

    映射本质上是存储和查找数据所用的键-值对。在第一个例子中,键是一个 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";
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    合约 inheritance (继承)

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

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

    引入(Import)

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

    import "./someothercontract.sol";
    
    contract newContract is SomeOtherContract {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    存储变量 —— storage 或 memory

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

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

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

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

  • 相关阅读:
    MySQL高可用
    Open CASCADE学习|一个点的坐标变换
    Vue路由进阶--VueRouter声明式导航
    java-net-php-python-springboot大学生家教平台计算机毕业设计程序
    ZMQ之脱机可靠性--巨人模式
    从零开始构建基于YOLOv5的目标检测系统
    数据库sql查询成绩第二高
    原创|对接三方服务商回调鉴权的程序代码设计
    SpringCloud之nacos
    Matplotlib绘图基础
  • 原文地址:https://blog.csdn.net/weixin_52723971/article/details/125548374