Copyright © 2022-2025 aizws.net · 网站版本: v1.2.6·内部版本: v1.25.2·
页面加载耗时 0.00 毫秒·物理内存 146.5MB ·虚拟内存 1437.8MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
Solidity 中 this 代表合约对象本身,可以通过 address(this) 获取合约地址。合约地址与合约创建者地址、合约调用者地址并不相同。
Solidity 中 msg.sender 代表合约调用者地址。一个智能合约既可以被合约创建者调用,也可以被其它人调用。
合约创建者,即合约拥有者,也就是指合约部署者,它的地址可以在合约的 constructor() 中,通过 msg.sender 获得,因为合约在部署的时候会首先调用 constructor()。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract SolidityTest {
address public owner;
event log(address);
constructor() {
owner = msg.sender;
emit log(msg.sender);
emit log(address(this));
}
}
owner 被赋值为合约部署者的地址。
log(msg.sender) 在日志中输出了合约部署者的地址。
log(address(this)) 在日志中输出了合约地址。
查看合约在部署时的日志结果:
[
{
"from": "0xE3Ca443c9fd7AF40A2B5a95d43207E763e56005F",
"topic": "0x2c2ecbc2212ac38c2f9ec89aa5fcef7f532a5db24dbf7cad1f48bc82843b7428",
"event": "log",
"args": {
// 合约部署者的地址
"0": "0x5B38Da6a701c568545dCfcB03FcB875f56beddC4"
}
},
{
"from": "0xE3Ca443c9fd7AF40A2B5a95d43207E763e56005F",
"topic": "0x2c2ecbc2212ac38c2f9ec89aa5fcef7f532a5db24dbf7cad1f48bc82843b7428",
"event": "log",
"args": {
// 合约地址
"0": "0xE3Ca443c9fd7AF40A2B5a95d43207E763e56005F"
}
}
]
以太坊中的地址 address 的长度为20字节,一字节等于8位,一共160位,所以 address 也可以用 uint160 来声明。我的以太坊钱包地址为 0xDF12793CA392f ...