区块链:单位(Units) 和 全局变量(Globally Available Variables)

博客介绍了Solidity中Ether和时间的单位换算,如1 ether = 10 ** 18 wei,1 minutes == 60 seconds等。还提及全局命名空间中存在的特殊变量和函数,可提供区块相关信息,包括区块和交易属性。此外,介绍了错误处理方法,如assert、require、revert等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ether Units

一个整数的后面可以跟一个单位,etherfinneyszabo或者wei

他们的单位换算如下:

1 ether = 1000 finney
1 ether = 1000000 szabo 1
ether = 10 ** 18 wei

Time Units

时间的单位有seconds, minutes, hours, days, weeksyears。换算如下:

1 == 1 seconds
1 minutes == 60 seconds
1 hours == 60 minutes
1 days == 24 hours
1 weeks == 7 days
1 years == 365 days

特殊的变量和函数和函数

有一些特殊的变量和函数存在于全局的命名空间以提供区块相关信息。

区块和交易属性

  • block.blockhash(uint blockNumber) returns (bytes32): 某个区块的区块链hash值
  • block.coinbase (address): 当前区块的挖矿地址
  • block.difficulty (uint): 当前区块的难度
  • block.gaslimit (uint): 当前区块的gaslimit
  • block.number (uint): 当前区块编号
  • block.timestamp (uint): 当前区块时间戳
  • msg.data (bytes): 参数
  • msg.gas (uint): 剩余的gas
  • msg.sender (address): 当前发送消息的地址
  • msg.sig (bytes4): 方法ID
  • msg.value (uint): 伴随消息附带的以太币数量
  • now (uint): 时间戳,等价于block.timestamp (uint)
  • tx.gasprice (uint): 交易的gas单价
  • tx.origin (address):交易发送地址

    错误处理

  • assert(bool condition):不满足条件,将抛出异常

  • require(bool condition):不满足条件,将抛出异常
  • revert() 抛出异常

在Solidity 0.4.10版本之前,使用throw来处理异常。如下所示:

contract HasAnOwner {

    address owner;

    function useSuperPowers(){ 
        if (msg.sender != owner) { 
            throw; 
        }
    }
}

Solidity 0.4.10版本之后,我们通常如下使用:

  • if(msg.sender != owner) { revert(); }
  • assert(msg.sender == owner);
  • require(msg.sender == owner);
在Python中,全局变量(Global Variables局部变量(Local Variables)有以下几个关键区别: 1. **作用域**: - **全局变量**:在程序的整个范围内都可见,无论是在哪里定义的,只要在同一模块内,都可以访问到。 - **局部变量**:只在其定义所在的函数内部有效,一旦函数执行完毕,局部变量就会自动消失。 2. **生命周期**: - **全局变量**:在整个程序运行期间一直存在,直到程序结束。 - **局部变量**:随着函数的调用而创建,在函数结束后销毁,如果函数内有同名的全局变量,函数内的局部变量不会覆盖全局变量。 3. **初始化**: - **全局变量**:可以在任何时候赋值,无需特别声明。 - **局部变量**:需要在函数内部通过赋值操作来初始化。 4. **修改**: - **全局变量**:在任何地方都可以被修改。 - **局部变量**:除非使用`global`关键字明确指定在函数外部修改,否则仅能在函数内部修改。 为了在函数内部访问全局变量,你需要使用`global`关键字告知Python这是全局变量,避免意外地创建新的局部变量。反之,如果想在函数外改变一个局部变量的值,那么它就变成了全局变量。 ```python global_var = "I am global" def func(): local_var = "I am local" # 这里是局部变量 global global_var # 如果需要在函数内部修改全局变量 global_var = "Changed globally" func() print(global_var) # 输出:"Changed globally" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值