Solidity 101 - Hackquest平台Web3课程笔记(4)

124 阅读2分钟
  • 直达Hackquest链接 - Solidity 101 - 中文
  • 重点
    • contract
      • 它类似于面向对象编程中的
      • 智能合约的代码逻辑包含了一系列函数事件,用于定义合约的行为和功能
      • 和其他编程语言不同的是,每一个 contract 对应着一个地址,且不可更改
    • 合约的名字遵循“大驼峰”:每个单词的首字母都大写,例如:MyContract
    • 在 Solidity 中,没有内置的浮点数数据类型
      • 在 UniswapV2中,开发者为了实现 solidity 的小数表示,将 uint256 拆分为了uint224 = uint112 x uint112,前面的112个 bit 用于表示整数部分,后112个bit用于表示小数部分。所以这个数可以有大概33位整数部分,和33位小数部分。
      • 		  uint224 constant Q112 = 2**112;
        
    • 优化和成本:public 函数通常需要更多的燃气( gas )来执行,因为它们需要处理许多安全性和访问控制检查。
      • 通过将某些非必要公开函数标记为 private ,可以减少合约执行时的燃气成本,从而提高效率。
    • publicexternalinternal 和 private关键字的区别
      • public:
        • 函数:可以被合约内部和外部调用。
        • 变量:可以被任何人读取,但只能在合约内部修改。
      • external:
        • 函数:只能被合约外部调用,不能被合约内部的其他函数直接调用(可以通过 this 关键字在合约内部调用)。
        • 变量:没有 external 修饰符用于变量。
      • internal:
        • 函数和变量:可以在当前合约以及所有继承该合约的子合约中访问。
      • private:
        • 函数和变量:只能在当前合约内部访问,不能在任何继承该合约的子合约中访问。
    • pure函数的意义
      • pure 函数就像计算器
      • 使用 pure 定义的函数被调用时不用花费 gas,并且可以保证该函数不会访问和改变状态变量,有益于开发时的模块化管理。
    • view函数
      • view 函数就像只具有“”权限的数据库,它既可以使用参数进行计算,也可以在数据库中查找数据进行运算
    • 在 solidity 中,只能对申明为 payable 的地址进行转账。
    • 状态变量
      • 是永久存在于区块链上的变量
      • 通常需要更多的 gas 来读写,所以应当仅在必要时使用