block相关

  1. block.number 它指的是区块链上的一个块的编号。在区块链上,块是一组交易的集合,他们是按线性、时间顺序添加到链上。每个块都有一个唯一的编号,也叫”块高”,它在被添加到链上时分配。块编号可用于在区块链中识别和引用特定块。
  2. block.timestamp 它指区块链上的一个块的时间戳。按线性、时间顺序添加到链上。每个块有一个时间戳,在它被添加到链上时分配。
  3. block.difficulty 它指的是在区块链上生成一个新块所需要的难度。
  4. block.coinbase 它指的是区块链上的一个块的coinbase交易。在区块链上,每个新块都会一笔coinbase交易,这笔交易是为了奖励矿工在挖掘新块时所做出的贡献而生成的。coinbase交易通常是块链上的第一笔交易,并且不需要输入。这笔交易的输出会被用来发放挖矿奖励。
  5. block.blockhash 它指区块链上一个块的哈希值。在区块链上,每个块都有一个唯一的哈希值,用来验证区块的完整性和不可变性。
  6. block.gaslimit 它指当前区块的最大可用gas限制。是uint类型的值。它是全局的,在每次执行之前可以访问,它是所有智能合约在当前区块中可用的气体总量。只能在合约执行期间才能获取到,不能在编译期间使用。

msg相关

  1. msg.sender 是全局变量,表示当前合约调用者的发送者地址。是address类型,也是当前交易的发送者地址。
  2. msg.value 是全局变量,是当前合约调用时传递的以太币的值。是uint256类型。
  3. msg.data 可能是一个字符串、数字、对象,具体内容取决于程序设计和实现。
  4. msg.gas 指定交易或智能合约所需要的gas。每次交易或执行职能合约都需要消耗一定量的gas。
  5. msg.sig 签名。用来验证消息的完整性和发送者的身份。

错误处理

  1. assert() 条件表达式为false,终止合约的执行,并抛出异常。assert主要检查程序内部的状态是否满足预期。
  2. require() 条件表达式为false,终止合约的执行,并抛出异常。 require主要用来检查输入的数据是否正确。
  3. revert() 用来回滚合约函数的执行并抛出异常。也就是说修改都会被撤销,交易也会失败。不仅仅会终止合约函数的执行,还会回滚所有对状态的修改,适用于在设计合约时处理失败情况。
    solidity 0.6版本以后,require、assert、revert都会触发回滚。

其他

  1. tx.gasprice 以wei为耽误的整数,表示一次智能合约操作支付的价格。当调用者发送交易的时候,可以设置gas price,矿工可以选择执行gas price最高的交易,如果交易是由合约自己发出的,tx.gasprice为0.
  2. tx.origin 是当前交易的发起者地址。用于验证发起者的身份。注:tx.origin不能被用来验证用户身份,因为可以通过构造伪造的交易来欺骗tx.origin.
  3. modifier 是一种特殊类型的函数,它可以在其他函数调用之前或者之后执行特定的操作。可以做权限管理,检查参数的合法性等。
  4. events 是一种用于在智能合约中记录日志的方式。它可以用来记录合约中发生的重要事件,并且可以被外部监听和访问。事件可以被触发(emit)。事件可以带有参数,并且可以被链上工具监控和分析。