Solidity中this、msg、block、tx、gas的用法

这篇具有很好参考价值的文章主要介绍了Solidity中this、msg、block、tx、gas的用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

1.this

2.msg

3.block

4.tx

5.gas

总结



前言

在智能合约编程中,全局变量扮演着关键的角色,提供了访问外部信息和交易上下文的重要途径。本文将重点介绍 Solidity 中的五个重要全局变量:thismsgblocktxgas,以及它们在智能合约中的用法和作用。通过深入了解这些全局变量,读者将能够更好地理解 Solidity 的编程范式,并在实际应用中编写更加灵活和高效的智能合约。

一、具体用法

1.this

在Solidity中,this 是一个关键字,用于引用当前合约的地址。通过 this 关键字,可以访问当前合约的地址以及调用其他合约中的函数。通常情况下,this 关键字与合约的自引用一起使用,用于明确指定正在调用的函数或状态变量属于当前合约。

代码如下(示例):

pragma solidity ^0.8.0;

contract HelloWorld {
    // 获取当前合约地址的余额
    function getBalance() public view returns (uint) {
        return address(this).balance;
    }
}

getBalance 函数声明为 public,并且使用 view 关键字,表明它是一个只读函数,不会修改合约状态。函数内部通过 address(this).balance 访问当前合约地址的余额,然后将其返回。

2.msg

在Solidity中,msg 是一个全局变量,提供了有关当前交易和消息的信息。它包含了多个成员变量,可以用于访问发送者地址、发送者的余额、交易数据等。

msg.sender:用于获取发送者的地址

msg.value:用于获取发送者发送的以太币数量

msg.data:完整的调用数据,包括函数签名等。

msg.sig:调用数据的前四个字节,表示函数签名。

msg.gas:获取剩余的 gas 数量。

代码如下(示例):

pragma solidity ^0.8.0;

contract HelloWorld {
    // 返回当前消息的发送者地址
    function viewMsg() public view returns (address) {
        return msg.sender;
    }
}

viewMsg 函数声明为 public,并且使用 view 关键字,表明它是一个只读函数,不会修改合约状态。函数内部通过 msg.sender 返回当前消息的发送者地址。

3.block

在 Solidity 中,block 是一个全局变量,提供了有关当前区块的信息。它包含了多个成员变量,可以用于访问区块的属性,比如区块的哈希值、时间戳、难度等。以下是一些常见的 block 成员变量以及它们的用法:

block.number:当前区块的编号。

block.timestamp:当前的时间戳。

block.difficulty:当前的难度。

block.gaslimit:当前区块的gas限制。

block.coinbase:当前区块的矿工地址。

以下是一个示例合约,演示了如何使用 block 变量:

pragma solidity ^0.8.0;

contract BlockInfo {
    // 获取当前区块的信息
    function getBlockInfo() public view returns (uint, uint, uint, address) {
        return (
            block.number,      // 当前区块的编号
            block.timestamp,   // 当前区块的时间戳
            block.difficulty,  // 当前区块的难度
            block.coinbase     // 当前区块的矿工地址
        );
    }

}

4.tx

在 Solidity 中,tx 是一个全局变量,提供了有关当前交易的信息。它包含了多个成员变量,可以用于访问交易的属性,比如发送者地址、交易哈希、gas 价格等。以下是一些常见的 tx 成员变量以及它们的用法:

tx.origin:发起当前交易的地址(最初的发送者地址)。

tx.gasprice:当前交易的gas价格。

tx.gaslimit:当前交易的gas限制。

以下是一个示例合约,演示了如何使用 tx 变量:

pragma solidity ^0.8.0;

contract TxInfo {
    // 获取当前交易的信息
    function getTxInfo() public view returns (address, uint, uint) {
        return (
            tx.origin,        // 发起当前交易的地址
            tx.gasprice,      // 当前交易的 gas 价格
            tx.gaslimit       // 当前交易的 gas 限制
        );
    }
}

5.gas

在 Solidity 中,gas 是一个全局变量,提供了有关 gas 的信息。Gas 是以太坊网络中用于支付计算和存储的单位,它限制了合约中可以执行的操作。gas 变量包含了当前合约剩余 gas 的数量。

代码如下(示例):

pragma solidity ^0.8.0;

contract HelloWorld {
    // 返回当前剩余 gas 的数量
    function viewGas() public view returns (uint) {
        return gasleft();
    }
}

viewGas 函数声明为 publicview,以便在外部调用时不修改合约状态并查看剩余 gas 的数量。函数内部通过 gasleft() 返回当前剩余 gas 的数量。


总结

在 Solidity 中,全局变量 thismsgblocktxgas 提供了关于合约、交易和区块的重要信息。它们在智能合约中扮演着不同的角色,可以用于访问合约的地址、获取交易的相关信息、获取当前区块的属性以及管理 gas 的使用。文章来源地址https://www.toymoban.com/news/detail-845489.html

  • this:用于引用当前合约的地址,可用于调用当前合约中的其他函数或外部合约的函数。
  • msg:提供有关当前消息(交易)的信息,如发送者地址、发送的以太币数量等。
  • block:提供有关当前区块的信息,如区块编号、时间戳、难度等。
  • tx:提供有关当前交易的信息,如交易发送者地址、gas 价格等。
  • gas:提供有关 gas 的信息,如当前剩余 gas 的数量。

到了这里,关于Solidity中this、msg、block、tx、gas的用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【区块链-智能合约工程师】第二篇:Solidity入门

    参考文章:一文速览2022十大智能合约开发工具 资料地址:WTF学院 HelloWorld remix:在线智能合约开发IDE(Integrated Development Environment,集成开发环境),可以在浏览器中快速部署测试智能合约。 合约HelloWorld: 事项 说明 代码所用的软件许可(license) 不写许可的话编译时会警告

    2024年02月09日
    浏览(51)
  • 区块链智能合约solidity的中的一些关键字

    目  录 pragma mapping msg对象 block对象 contract constructor struct 数据地址 地址类型 address payable revert 以下场景使用 revert() : require 以下场景使用 require() : assert 以下场景使用 assert(): 访问权限 internal public private external function returns return view pure constant event emit modifier pragma   

    2024年01月16日
    浏览(75)
  • 【区块链-智能合约工程师】第三篇:Solidity进阶(一)

    学习资料地址:WTF学院 库合约一般都是一些好用的函数合集(库函数),为了提升solidity代码的复用性和减少gas而存在。他和普通合约主要有以下几点不同: 不能存在状态变量 不能够继承或被继承 不能接收以太币 不可以被销毁 String库 String库合约是将uint256(大正整数)类型

    2024年02月06日
    浏览(51)
  • 区块链web3智能合约Solidity学习资源整理

    Solidity 是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的目的是能在以太坊虚拟机(EVM)上运行。 Solidity中文官方文档: https://solidity-cn.readthedocs.io/zh/develop/ https://learnblockchain.cn/docs/solidity/index.html 在线rem

    2024年03月19日
    浏览(69)
  • 《NFT区块链进阶指南二》Etherscan验证Solidity智能合约(Remix插件验证)

    前置参考文档:https://blog.csdn.net/sinat_34104446/article/details/130557703 合约验证是上传合约源代码到etherscan过程,在智能合约项目中,通常都是提供源码验证,增加项目信任度 验证合约后可以直接在etherscan上执行获取和设置方法,方便日常的管理员维护 以下使用remix进行验证并使用

    2024年02月05日
    浏览(72)
  • 【区块链技术开发】 Solidity使用Truffle Box工具实现预构建模板、自动化部署、创建智能合约示例代码

    专栏:区块链技术开发 Truffle Box是一个开发工具,为Truffle生态系统中的开发人员提供了预构建

    2023年04月16日
    浏览(66)
  • Solidity智能合约开发 — 3.4-抽象智能合约和接口

    假如一个智能合约中至少一个函数缺省实现时,即某个函数缺少{}中的内容,这个智能合约就当做抽象智能合约。 当我们有一个函数没想好怎么写时,必须将该合约标为 abstract ,不然编译会报错;另外,未实现的函数需要加 virtual ,以便子合约重写。抽象智能合约是将智能合

    2024年02月12日
    浏览(45)
  • 【Solidity】智能合约案例——①食品溯源合约

    目录 一、合约源码分析: 二、合约整体流程:       1.部署合约       2.管理角色       3.食品信息管理       4.食品溯源管理         Producer.sol:生产者角色的管理合约,功能为:添加新的生产者地址、移除生产者地址、判断角色地址是否被授权         Di

    2024年02月08日
    浏览(51)
  • solidity实现智能合约教程(3)-空投合约

    猛戳订阅学习专栏🍁🍁 👉 solidity系列合约源码+解析 👈 🍁🍁 空投就是一种营销策略,通过空投活动将某种数字货币或代币分发给用户,通常需要用户完成一项简单的任务,如分享新闻、介绍朋友或拥有某种数字货币,目前也被广泛应用于宣传新币种,在数字货币市场中

    2024年02月07日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包