国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價值的文章主要介紹了Solidity中this、msg、block、tx、gas的用法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

前言

1.this

2.msg

3.block

4.tx

5.gas

總結(jié)



前言

在智能合約編程中,全局變量扮演著關(guān)鍵的角色,提供了訪問外部信息和交易上下文的重要途徑。本文將重點介紹 Solidity 中的五個重要全局變量:this、msgblock、txgas,以及它們在智能合約中的用法和作用。通過深入了解這些全局變量,讀者將能夠更好地理解 Solidity 的編程范式,并在實際應(yīng)用中編寫更加靈活和高效的智能合約。

一、具體用法

1.this

在Solidity中,this 是一個關(guān)鍵字,用于引用當(dāng)前合約的地址。通過 this 關(guān)鍵字,可以訪問當(dāng)前合約的地址以及調(diào)用其他合約中的函數(shù)。通常情況下,this 關(guān)鍵字與合約的自引用一起使用,用于明確指定正在調(diào)用的函數(shù)或狀態(tài)變量屬于當(dāng)前合約。

代碼如下(示例):

pragma solidity ^0.8.0;

contract HelloWorld {
? ? // 獲取當(dāng)前合約地址的余額
? ? function getBalance() public view returns (uint) {
? ? ? ? return address(this).balance;
? ? }
}

getBalance 函數(shù)聲明為 public,并且使用 view 關(guān)鍵字,表明它是一個只讀函數(shù),不會修改合約狀態(tài)。函數(shù)內(nèi)部通過 address(this).balance 訪問當(dāng)前合約地址的余額,然后將其返回。

2.msg

在Solidity中,msg 是一個全局變量,提供了有關(guān)當(dāng)前交易和消息的信息。它包含了多個成員變量,可以用于訪問發(fā)送者地址、發(fā)送者的余額、交易數(shù)據(jù)等。

msg.sender:用于獲取發(fā)送者的地址

msg.value:用于獲取發(fā)送者發(fā)送的以太幣數(shù)量

msg.data:完整的調(diào)用數(shù)據(jù),包括函數(shù)簽名等。

msg.sig:調(diào)用數(shù)據(jù)的前四個字節(jié),表示函數(shù)簽名。

msg.gas:獲取剩余的 gas 數(shù)量。

代碼如下(示例):

pragma solidity ^0.8.0;

contract HelloWorld {
? ? // 返回當(dāng)前消息的發(fā)送者地址
? ? function viewMsg() public view returns (address) {
? ? ? ? return msg.sender;
? ? }
}

viewMsg 函數(shù)聲明為 public,并且使用 view 關(guān)鍵字,表明它是一個只讀函數(shù),不會修改合約狀態(tài)。函數(shù)內(nèi)部通過 msg.sender 返回當(dāng)前消息的發(fā)送者地址。

3.block

在 Solidity 中,block 是一個全局變量,提供了有關(guān)當(dāng)前區(qū)塊的信息。它包含了多個成員變量,可以用于訪問區(qū)塊的屬性,比如區(qū)塊的哈希值、時間戳、難度等。以下是一些常見的 block 成員變量以及它們的用法:

block.number:當(dāng)前區(qū)塊的編號。

block.timestamp:當(dāng)前的時間戳。

block.difficulty:當(dāng)前的難度。

block.gaslimit:當(dāng)前區(qū)塊的gas限制。

block.coinbase:當(dāng)前區(qū)塊的礦工地址。

以下是一個示例合約,演示了如何使用 block 變量:

pragma solidity ^0.8.0;

contract BlockInfo {
? ? // 獲取當(dāng)前區(qū)塊的信息
? ? function getBlockInfo() public view returns (uint, uint, uint, address) {
? ? ? ? return (
? ? ? ? ? ? block.number, ? ? ?// 當(dāng)前區(qū)塊的編號
? ? ? ? ? ? block.timestamp, ? // 當(dāng)前區(qū)塊的時間戳
? ? ? ? ? ? block.difficulty, ?// 當(dāng)前區(qū)塊的難度
? ? ? ? ? ? block.coinbase ? ? // 當(dāng)前區(qū)塊的礦工地址
? ? ? ? );
? ? }

}

4.tx

在 Solidity 中,tx 是一個全局變量,提供了有關(guān)當(dāng)前交易的信息。它包含了多個成員變量,可以用于訪問交易的屬性,比如發(fā)送者地址、交易哈希、gas 價格等。以下是一些常見的 tx 成員變量以及它們的用法:

tx.origin:發(fā)起當(dāng)前交易的地址(最初的發(fā)送者地址)。

tx.gasprice:當(dāng)前交易的gas價格。

tx.gaslimit:當(dāng)前交易的gas限制。

以下是一個示例合約,演示了如何使用 tx 變量:

pragma solidity ^0.8.0;

contract TxInfo {
? ? // 獲取當(dāng)前交易的信息
? ? function getTxInfo() public view returns (address, uint, uint) {
? ? ? ? return (
? ? ? ? ? ? tx.origin, ? ? ? ?// 發(fā)起當(dāng)前交易的地址
? ? ? ? ? ? tx.gasprice, ? ? ?// 當(dāng)前交易的 gas 價格
? ? ? ? ? ? tx.gaslimit ? ? ? // 當(dāng)前交易的 gas 限制
? ? ? ? );
? ? }
}

5.gas

在 Solidity 中,gas 是一個全局變量,提供了有關(guān) gas 的信息。Gas 是以太坊網(wǎng)絡(luò)中用于支付計算和存儲的單位,它限制了合約中可以執(zhí)行的操作。gas 變量包含了當(dāng)前合約剩余 gas 的數(shù)量。

代碼如下(示例):

pragma solidity ^0.8.0;

contract HelloWorld {
? ? // 返回當(dāng)前剩余 gas 的數(shù)量
? ? function viewGas() public view returns (uint) {
? ? ? ? return gasleft();
? ? }
}

viewGas 函數(shù)聲明為 publicview,以便在外部調(diào)用時不修改合約狀態(tài)并查看剩余 gas 的數(shù)量。函數(shù)內(nèi)部通過 gasleft() 返回當(dāng)前剩余 gas 的數(shù)量。


總結(jié)

在 Solidity 中,全局變量 this、msgblock、txgas 提供了關(guān)于合約、交易和區(qū)塊的重要信息。它們在智能合約中扮演著不同的角色,可以用于訪問合約的地址、獲取交易的相關(guān)信息、獲取當(dāng)前區(qū)塊的屬性以及管理 gas 的使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-845489.html

  • this:用于引用當(dāng)前合約的地址,可用于調(diào)用當(dāng)前合約中的其他函數(shù)或外部合約的函數(shù)。
  • msg:提供有關(guān)當(dāng)前消息(交易)的信息,如發(fā)送者地址、發(fā)送的以太幣數(shù)量等。
  • block:提供有關(guān)當(dāng)前區(qū)塊的信息,如區(qū)塊編號、時間戳、難度等。
  • tx:提供有關(guān)當(dāng)前交易的信息,如交易發(fā)送者地址、gas 價格等。
  • gas:提供有關(guān) gas 的信息,如當(dāng)前剩余 gas 的數(shù)量。

到了這里,關(guān)于Solidity中this、msg、block、tx、gas的用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【區(qū)塊鏈-智能合約工程師】第二篇:Solidity入門

    【區(qū)塊鏈-智能合約工程師】第二篇:Solidity入門

    參考文章:一文速覽2022十大智能合約開發(fā)工具 資料地址:WTF學(xué)院 HelloWorld remix:在線智能合約開發(fā)IDE(Integrated Development Environment,集成開發(fā)環(huán)境),可以在瀏覽器中快速部署測試智能合約。 合約HelloWorld: 事項 說明 代碼所用的軟件許可(license) 不寫許可的話編譯時會警告

    2024年02月09日
    瀏覽(27)
  • 【區(qū)塊鏈-智能合約工程師】第三篇:Solidity進(jìn)階(一)

    學(xué)習(xí)資料地址:WTF學(xué)院 庫合約一般都是一些好用的函數(shù)合集(庫函數(shù)),為了提升solidity代碼的復(fù)用性和減少gas而存在。他和普通合約主要有以下幾點不同: 不能存在狀態(tài)變量 不能夠繼承或被繼承 不能接收以太幣 不可以被銷毀 String庫 String庫合約是將uint256(大正整數(shù))類型

    2024年02月06日
    瀏覽(21)
  • 區(qū)塊鏈智能合約solidity的中的一些關(guān)鍵字

    區(qū)塊鏈智能合約solidity的中的一些關(guān)鍵字

    目? 錄 pragma mapping msg對象 block對象 contract constructor struct 數(shù)據(jù)地址 地址類型 address payable revert 以下場景使用 revert() : require 以下場景使用 require() : assert 以下場景使用 assert(): 訪問權(quán)限 internal public private external function returns return view pure constant event emit modifier pragma ??

    2024年01月16日
    瀏覽(27)
  • 區(qū)塊鏈web3智能合約Solidity學(xué)習(xí)資源整理

    Solidity 是一門面向合約的、為實現(xiàn)智能合約而創(chuàng)建的高級編程語言。這門語言受到了 C++,Python 和 Javascript 語言的影響,設(shè)計的目的是能在以太坊虛擬機(EVM)上運行。 Solidity中文官方文檔: https://solidity-cn.readthedocs.io/zh/develop/ https://learnblockchain.cn/docs/solidity/index.html 在線rem

    2024年03月19日
    瀏覽(30)
  • 《NFT區(qū)塊鏈進(jìn)階指南二》Etherscan驗證Solidity智能合約(Remix插件驗證)

    《NFT區(qū)塊鏈進(jìn)階指南二》Etherscan驗證Solidity智能合約(Remix插件驗證)

    前置參考文檔:https://blog.csdn.net/sinat_34104446/article/details/130557703 合約驗證是上傳合約源代碼到etherscan過程,在智能合約項目中,通常都是提供源碼驗證,增加項目信任度 驗證合約后可以直接在etherscan上執(zhí)行獲取和設(shè)置方法,方便日常的管理員維護 以下使用remix進(jìn)行驗證并使用

    2024年02月05日
    瀏覽(18)
  • 【區(qū)塊鏈技術(shù)開發(fā)】 Solidity使用Truffle Box工具實現(xiàn)預(yù)構(gòu)建模板、自動化部署、創(chuàng)建智能合約示例代碼

    專欄:區(qū)塊鏈技術(shù)開發(fā) Truffle Box是一個開發(fā)工具,為Truffle生態(tài)系統(tǒng)中的開發(fā)人員提供了預(yù)構(gòu)建

    2023年04月16日
    瀏覽(159)
  • Solidity智能合約開發(fā) — 3.4-抽象智能合約和接口

    假如一個智能合約中至少一個函數(shù)缺省實現(xiàn)時,即某個函數(shù)缺少{}中的內(nèi)容,這個智能合約就當(dāng)做抽象智能合約。 當(dāng)我們有一個函數(shù)沒想好怎么寫時,必須將該合約標(biāo)為 abstract ,不然編譯會報錯;另外,未實現(xiàn)的函數(shù)需要加 virtual ,以便子合約重寫。抽象智能合約是將智能合

    2024年02月12日
    瀏覽(26)
  • 【Solidity】智能合約案例——①食品溯源合約

    【Solidity】智能合約案例——①食品溯源合約

    目錄 一、合約源碼分析: 二、合約整體流程: ??????1.部署合約 ??????2.管理角色 ? ? ? 3.食品信息管理 ??????4.食品溯源管理 ????????Producer.sol:生產(chǎn)者角色的管理合約,功能為:添加新的生產(chǎn)者地址、移除生產(chǎn)者地址、判斷角色地址是否被授權(quán) ????????Di

    2024年02月08日
    瀏覽(40)
  • solidity實現(xiàn)智能合約教程(3)-空投合約

    solidity實現(xiàn)智能合約教程(3)-空投合約

    猛戳訂閱學(xué)習(xí)專欄???? ?? solidity系列合約源碼+解析 ?? ???? 空投就是一種營銷策略,通過空投活動將某種數(shù)字貨幣或代幣分發(fā)給用戶,通常需要用戶完成一項簡單的任務(wù),如分享新聞、介紹朋友或擁有某種數(shù)字貨幣,目前也被廣泛應(yīng)用于宣傳新幣種,在數(shù)字貨幣市場中

    2024年02月07日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包