Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 68.5MB ·虚拟内存 1300.5MB
欢迎来到 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 ...