美文网首页
浅谈Solidity:block,msg,Tx三个全局变量

浅谈Solidity:block,msg,Tx三个全局变量

作者: 温驭臣 | 来源:发表于2023-03-19 11:08 被阅读0次

    一:块函数: 可以获取块信息

    1,block.timestamp (uint) 当前块的实际戳,单位秒。

    2,block.number (uint) 当前块高度。

    3,block.chainid 当前区块的琏ID。

    4,block.difficulty (uint) 矿工会用到的出块难度。

    5,block.gaslimit (uint) 计算块需要消耗的gas限制,是转账gas和智能合约的执行gas之和

    6,block.coinbase (address payable) 矿工地址:块产生的gas费 转账地址。 也是写入块数据的地址

    7,gasleft() returns (uint256) 每个块都有执行成本,但是不一定能够完全消耗完。 矿工一般会按照最接近的gas费用来打包出块。gaslefe就是剩下的部分。

    二:Message 函数 在合约内获取用户签名后的信息。

    1,msg.data (bytes calldata) 用户发生的转账之外的内容,可以是文字备注之类的,但是如果接受信息的是智能合约那合约会对data进行解析,并执行date中指定的函数。

    2,msg.sender (address payable) 发送信息的发送者

    3,msg.sig (bytes4) calldata 前四个字节的内容,在合约内验证调用的那个函数。

    4,msg.value (uint) 用户转账的ETH额度,单位是wei(18位的整数)。 调用合约时一般都为0,如果想给合约转账可以在这定义转账的ETH数量,如果合约内部没有转账ETH的对应操纵函数,这个费用会卡在合约地址中无法转出。

    三. Tx 函数

    1,tx.gasprice (uint): 交易中发送者愿意支付的价格,发送者决定。 gasgasprice 决定矿工打包交易的收入。如果太低,只有块比较空的时候矿工才愿意打包这笔交易。所有对发送者来说需要等待的时间就会比较长。n10秒。

    2,tx.origin (address payable): 这笔交易的发送者。 在开发中避免使用,合约调用有Delegate call的方式可能不会与你的预期不一致。

    四:其他

    1,now (uint) 当前时间时间戳的别名,特别注意在老版本EVM中是系统时间,在最新规范中不推荐使用。

    2,blockhash(uint blockNumber) 把块高反算成块哈希。 这个计算量比较大,有限制。不推荐使用。

    3,assembly 在EVM 虚拟机中直接执行 open code 的关键字。

    相关文章

      网友评论

          本文标题:浅谈Solidity:block,msg,Tx三个全局变量

          本文链接:https://www.haomeiwen.com/subject/wzvsrdtx.html