目錄
前言
1.this
2.msg
3.block
4.tx
5.gas
總結(jié)
前言
在智能合約編程中,全局變量扮演著關(guān)鍵的角色,提供了訪問外部信息和交易上下文的重要途徑。本文將重點介紹 Solidity 中的五個重要全局變量:this
、msg
、block
、tx
和 gas
,以及它們在智能合約中的用法和作用。通過深入了解這些全局變量,讀者將能夠更好地理解 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ù)聲明為 public
和 view
,以便在外部調(diào)用時不修改合約狀態(tài)并查看剩余 gas 的數(shù)量。函數(shù)內(nèi)部通過 gasleft()
返回當(dāng)前剩余 gas 的數(shù)量。文章來源:http://www.zghlxwxcb.cn/news/detail-845489.html
總結(jié)
在 Solidity 中,全局變量 this
、msg
、block
、tx
和 gas
提供了關(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)!