以太坊地址Address介绍附代码示例

news2024/11/24 4:48:28

Address是什么

通常情况下,地址代表一外部账户或合约账户,它们都可以在区块链上接收(目标地址)或发送(源地址)。 更具体地说,它是根据ECDSA算法,从公钥的Keccak-256哈希值的最后20个字节导出的标识符,一个十六进制数字

账户类型

There are two types of accounts in the Ethereum Chain

(1). Externally Owned Accounts(EOA) [Person]

(2). Contracts Accounts [Contracts on Chain]​​​​​

翻译过来就是:

以太坊链中有两种类型的账户

  • 外部账户(个人持有)
  • 合约账户(链上合约)

外部账户

外部帐户 (EOA) 是由控制帐户私钥的用户所管理的帐户,通常使用助记词生成。 外部帐户是没有任何关联代码的帐户。 通常,这些帐户与钱包
一起使用。

合约账户

一个包含代码的帐户,只要接收到来自其他帐户(外部帐户或合约)的交易,就会执行该代码。

代码示例

1、获取合约账户

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract AddressExample {

    function getContractAddress() external view returns(address) {
        return address(this); 
        // return this; // 报错
    }

}

注意:合约账户需要使用address()进行显示转换为address类型。

如果直接返回this的话,则会抛出如下错误;

TypeError: Return argument type contract AddressExample is not implicitly convertible to expected type (type of first return variable) address.
--> contract-demo/AddressExample.sol:15:16:
|
15 | return this;
| ^^^^

2、获取msg.sender

 function getSenderAddress() external view returns(address) {
        return msg.sender;
    }

msg.sender 表示消息的发送者(当前通话)。它可以指代调用函数或创建交易的地址,可以是合约地址,或者是像你我这样的人的账户地址。

随着上面选取的地址切换而关联改变的。 

但不少人(包括我)曾经一度认为msg.sender就是部署合约的外部账户,是唯一的。造成这种错觉的原因是忽略了一个细节。

address ownerAddress;

constructor() {
      ownerAddress = msg.sender;
}

就是说合约创建者在构造函数已经初始化,将msg.sender定死为合约的拥有者(owner),所以之后的一系列对合约的操作,都可以借助ownerAddress这一凭证实现访问权限控制。

3、获取余额

 function getBalance() external view returns(uint, uint, uint) {
        uint contractBalance = address(this).balance; // 合约账户余额
        uint senderBalance = msg.sender.balance;  // 调用者账户余额
        uint ownerBalance = ownerAddress.balance; // 合约拥有者余额

        return (contractBalance, senderBalance, ownerBalance);
    }

注意我切换到另一个账户,调用的getBalance方法,这样可以比较调用者和拥有者的余额。

 

参考:  https://ethereum.org/zh/glossary/#address

             blockchain - Solidity basics: what "msg.sender" stands for - Stack Overflow

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/87074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MapRecuce 词频统计案例

文章目录初探MapReduce一、MapReduce核心思想二、MapReduce编程实例-词频统计思路1、map阶段(映射)2、reduce阶段(归并阶段)三、词频统计编程实现1、准备数据文件2、将文件上传到hdfs指定路径3、在java里创建词频统计映射器类4、创建词频统计驱动类5、运行词频统计驱动类&#…

【机器学习】SVM多分类问题及基于sklearn的Python代码实现

SVM多分类问题及Python代码实现1. 什么是SVM&#xff1f;2. SVM的分类3. SVM决策函数类型4. SVM多分类的Python代码实现参考资料1. 什么是SVM&#xff1f; 对于这个点已经介绍的非常多了&#xff0c;不管是西瓜书还是各种博客&#xff0c;就是需要找到一个超平面&#xff0c;用…

【Redis】Zset和Hash类型

Hash类型 Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表&#xff0c;hash特别适合用于存储对象。 Hash 类型的底层数据结构是由压缩列表或哈希表实现的&#xff1a; 如果哈希类型元素小于512个&#xff0c;所有值的大小小于64字节。Redis…

一不小心手动实现了k8s的自动化构建

背景 由于公司需要对公司内部的软件需要对外部署&#xff0c;对于前端的部署&#xff0c;需要一套部署的方案。尝试了写了一个适配多模块可配置的部署脚本&#xff0c;本文对实现的过程进行一个记录。 目的 脚本采用的是node&#xff0c;前端同学的首选。脚本的目的就是实现k8s…

企业在ERP系统下的全面预算管理系统的实现

现代企业的发展离不开各种管理系统的建立和应用&#xff0c;针对于企业预算管理而言&#xff0c;全面的管理系统对于企业实现现代化管理有着较为深入的影响&#xff0c;ERP系统可以帮助企业更好的实现此项功能&#xff0c;本文就是在此背景下展开论述的。 编辑搜图 一、全面预算…

文件上传自动化测试方案

一、概述 【测试地址】&#xff1a;https://pan.baidu.com 【测试工具】selenium、requests 【脚本语言】Python 【运行环境】Windows 百度网盘作为文件存储及分享的平台&#xff0c;核心功能大部分是对文件的操作&#xff0c;如果要对它进行自动化测试&#xff0c;优先覆…

马克思主义基本原理笔记(黄色标记要求会背)

马克思主义基本组成部分 马克思主义哲学马克思主义政治经济学科学社会主义历史学、政治学、法学、文化学、新闻学、军事学等 唯物主义&#xff0c;唯心主义划分标准 唯物主义&#xff1a;把世界的本原归结为物质&#xff0c;主张物质是第一性&#xff0c;意识第二性&#xff0c…

Docker容器网络入门

1、查看默认网络模式 首先假定已经安装好docker了&#xff0c;不会安装的可以看我其他文章&#xff0c;很简单。docker安装好后默认是提供三种网络模式&#xff08;bridge、host、none&#xff09;&#xff0c;可以使用命令docker network ls查看网络状态 [rootlocalhost ~]#…

构建平衡二叉树(数据结构)

构建二又平衡树&#xff0c;插入的节点序列依次为:70 60 40 90 80 98 我们先了解一个构造规则 1、将每一个节点按照顺序依次使用 2、先将第一个节点画在图上&#xff0c;将第二个节点与第一个节点比较&#xff0c; &#xff08;1&#xff09;若比该节点大&#xff0c;第二个…

飞行员兄弟(蓝桥杯C/C++B组真题详解)

目录 题目链接&#xff1a;116. 飞行员兄弟 - AcWing题库​​​​​​ 题目思路&#xff1a; 代码详解&#xff1a; 题目链接&#xff1a;116. 飞行员兄弟 - AcWing题库​​​​​​ 题目思路&#xff1a; 1.我们可以知道 对于任意一个点 重复的按两次的话 回不改变原状…

ADI Blackfin DSP处理器-BF533的开发详解43:图像处理专题-ReverseColor (图像反色处理)(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 代码实现了图像反色处理&#xff0c;代码运行时&#xff0c;会通过文件系统打开工程文件根目下" …/ImageView"路径中的 tes…

Linux下局域网yum源配置

文章目录一 需求二 搭建环境准备三 服务端1 创建镜像存放目录与挂载目录2 上传centos7镜像3 对镜像文件进行挂载4 配置本地yum源5 对挂载点建立软链接6 安装http服务7 浏览器验证http服务是否正常启动四 客户端1 修改yum配置文件2 查看yum源一 需求 公司集群架构中&#xff0c…

【linux】之大数据基础平台实施及运维上

一、大数据介绍 学习目标 能够了解为什么使用大数据技术 能够了解大数据指的是什么 为什么使用大数据技术&#xff1f; 数据量越来越大 数据量越来越大数据分析的实时性越来越强数据结果的应用越来越广泛 结论&#xff1a;我们需要使用大数据技术 大数据的定义 大数据是收…

GC垃圾回收器

分代收集器 新生代回收器 Serial&#xff1a;复制算法 | 单线程 | 适合内存不大的场景 ParNew&#xff1a;复制算法 | 多线程 | Serial收集器多线程版本 Parallel Scavenge&#xff1a;复制算法 | 多线程 | 类ParNew&#xff0c;更关注吞吐量 老年代回收器 Serial Old&#xf…

postgresql文件结构

一、控制文件 pg_controldata $PGDATA 二、数据文件 pg中&#xff0c;每个索引、每个表都是一个单独的文件&#xff0c;pg中称为page&#xff08;也称为段&#xff09;,默认是每个大于1G的page会被分割。例如某个表有200g的大小&#xff0c;那么会被分割为200个文件存储 sel…

Gateway限流的使用

目录 1. 限流的使用场景 2. gateway限流实现 2.1 前提&#xff1a; 2.2 导入依赖包 2.3 在项目配置文件中配置redis​编辑 2.4 开发限流需要的Bean​编辑 2.5 为服务配置限流参数 2.6 压力测试 3. 熔断 3.1 熔断的使用场景 1. 限流的使用场景 为什么限流 限流就是限制…

web网页设计期末课程大作业 基于HTML+CSS+JavaScript制作八大菜系介绍舌尖上的美食5页

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

4、Metasploit系列----未知目标测试

靶机Metasploitable2&#xff1a;192.168.11.105 攻击机kail&#xff1a;192.168.11.106 一、创建工作空间 显示数据库未连接&#xff1a;使用msfdb init对数据进行初始化&#xff1a;db_status显示数据库已连接。使用命令workspace -a 192.168.11.105创建目标工作空间。二、信…

Spring Batch 批处理-作业参数校验

引言 接着上篇&#xff1a;Spring Batch 批处理-作业参数设置与获取&#xff0c;了解作业参数设置与获取后&#xff0c;本篇就来了解一下Spirng Batch 作业参数的校验。 作业参数校验 当外部传入的参数进入步骤处理时&#xff0c;我们需要确保参数符合期望。比如&#xff1a…

前端实现电子签名(web、移动端)通用

前言 在现在的时代发展中&#xff0c;从以前的手写签名&#xff0c;逐渐衍生出了电子签名。电子签名和纸质手写签名一样具有法律效应。电子签名目前主要还是在需要个人确认的产品环节和司法类相关的产品上较多。 举个常用的例子&#xff0c;大家都用过钉钉&#xff0c;钉钉上…