当前位置: 首页 > news >正文

区块链技术原理(10)-以太坊帐户

文章目录

  • 前言
  • 帐户类型
    • 主要区别
  • 帐户详解
  • 外部持有的帐户和密钥对
  • 帐户创建
  • 合约帐户
  • 验证者密钥
  • 钱包与账户的说明
  • 账户模型的优势(对比 UTXO)
  • 总结


前言

一个以太坊帐户是一个具有以太币 (ETH) 余额的实体,可以在以太坊上发送交易。 帐户可以由用户控制,也可以作为智能合约部署。


帐户类型

以太坊有两种帐户类型:

  • 外部所有的帐户 (EOA) – 由任何拥有私钥的人控制
  • 合约帐户 – 部署到网络上的智能合约,由代码控制。

这两种帐户类型都能:

  • 接收、持有和发送 ETH 和 token
  • 与已部署的智能合约进行交互

主要区别

维度外部拥有账户(EOA)合约账户
控制者私钥持有者(人或设备)智能合约代码(自动执行)
代码存储无代码(codeHash=0x0)有智能合约代码(codeHash指向字节码)
交易发起可主动发起交易(需私钥签名)仅能被动响应调用(无法主动发起交易)
创建方式通过钱包生成私钥 - 地址对(无需上链)通过 EOA 部署智能合约(需上链并支付 Gas)
核心作用用户交互入口(转账、调用合约)执行复杂逻辑(自动化规则、数据存储)

帐户详解

以太坊帐户有四个字段:

  • balance:账户中的 ETH 余额(可接收 ETH,也可通过合约代码主动转账);
  • nonce:一个计数器,记录账户发起的交易次数(防止 “重放攻击”,确保每笔交易唯一),仅在合约创建其他合约时使用(记录创建次数);
  • storageRoot:合约存储数据的默克尔根(指向合约在链上存储的键值对数据,如用户余额、权限设置等);
  • codeHash:合约代码的哈希值(指向链上存储的合约字节码,确保代码不可篡改)。

以太坊账户

外部持有的帐户和密钥对

帐户由一对加密密钥组成:公钥私钥。 它们有助于证明交易实际上是由发送者签名的,并防止伪造。 你的私钥是你用来签名交易的密钥,所以它保障你对与自己帐户相关的资金进行管理。 你从未真正持有加密货币,你持有私钥 – 资金总是在以太坊的账本上

这将防止恶意参与者广播虚假交易,因为你总是可以验证交易的发送者。

如果 Alice 想要从她自己的帐户发送 ETH 到 Bob 的帐户,Alice 需要创建交易请求并将其发送到网络进行验证。 以太坊对公钥加密的使用确保了 Alice 可以证明她最初发起了交易请求。 没有加密机制,恶意对手 Eve 可以简单地公开广播一个看起来像“从 Alice 的帐户发送 5 ETH 到 Eve 帐户”的请求。而且没有人能够证实请求不是由 Alice 发送。

帐户创建

当你想要创建一个帐户时,大多数程序库会生成一个随机私钥。

私钥由 64 个十六进制字符组成,可以用密码加密保存。

例如:

fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f

使用椭圆曲线加密法从私钥生成公钥。 通过获取公钥 Keccak-256 哈希的最后 20 个字节并校验码前面添加 0x,可以为帐户获取公共地址。

这意味着外部帐户 (EOA) 有一个 42 字符的地址( 20 字节区块,即 40 个十六进制字符,加上 0x 前缀)。

例如:

0x5e97870f263700f46aa00d967821199b9bc5a120

下面的示例显示如何使用一种名为 Clef的签名工具生成一个新帐户。 Clef 是一个集成在以太坊客户端 Geth(这个后续专门讲解)的帐户管理和签名工具。 clef 命令创建一个新的密钥对并保存在加密的密钥库中。

> clef newaccount --keystore <path>
Please enter a password for the new account to be created:
> <password>
------------
INFO [10-28|16:19:09.156] Your new key was generated       address=0x5e97870f263700f46aa00d967821199b9bc5a120
WARN [10-28|16:19:09.306] Please backup your key file      path=/home/user/go-ethereum/data/keystore/UTC--2022-10-28T15-19-08.000825927Z--5e97870f263700f46aa00d967821199b9bc5a120
WARN [10-28|16:19:09.306] Please remember your password!
生成帐户 0x5e97870f263700f46aa00d967821199b9bc5a120

可以通过你的私钥获取公钥,但你不能通过公钥获取私钥。 确保私钥的安全性,以及顾名思义,私密性,至关重要。

你需要一个私钥来签署消息和交易并输出签名。 然后其他人可以使用签名获取你的公钥,证明信息的作者。 在你的应用程序中,你可以使用 JavaScript 程序库向网络发送交易。

合约帐户

合约帐户也有一个 42 个字符组成的十六进制地址:

例如:

0x06012c8cf97bead5deae237070f9587f8e7a266d

合约地址通常在将合约部署到以太坊区块链时给出。 地址产生自创建人的地址和从创建人地址发送的交易数量(“nonce”)。

验证者密钥

以太坊还有一另种类型的密钥,它们是在以太坊从工作量证明过渡到权益证明共识时引入的。 它们是“BLS”密钥,用来识别验证者。 这些密钥可以有效地聚合,减少网络达成共识所需要的带宽。 没有这种密钥集合,验证者的最小质押金额将会高出许多。(后续会单独讲解)

钱包与账户的说明

帐户和钱包不同。 钱包是一个界面或应用程序,可让你与以太坊帐户(外部帐户或合约帐户)进行交互。

账户模型的优势(对比 UTXO)

以太坊的账户模型(与比特币的 UTXO 模型相比)更适合智能合约:

  • 直观的余额管理:账户余额直接记录为数值(如balance=10 ETH),无需像 UTXO 那样通过 “未花费交易输出” 计算,更易理解和编程;
  • 状态持续性:合约账户可长期存储状态(如用户的抵押比例),支持复杂的逻辑交互(如循环、条件判断);
  • 交互灵活性:EOA 与合约账户、合约账户之间可直接交互,形成复杂的生态网络(如 DeFi 协议间的跨合约调用)。

总结

以太坊的账户体系是 “用户 - 合约” 交互的基础:EOA 作为用户的 “数字身份”,通过私钥控制资产和操作;合约账户作为 “自动执行的程序”,按代码逻辑处理交易和数据。两者的协同让以太坊不仅能实现价值转移,更能支撑去中心化应用的复杂功能,是 Web3 生态 “可编程价值” 的核心载体。

http://www.dtcms.com/a/331649.html

相关文章:

  • ​​vdbench 存储性能测试工具​​的详细使用教程,结合安装部署、参数配置、测试执行及结果分析
  • 电池模组奇异值分解降阶模型
  • Pandas数据处理与分析实战:Pandas数据转换与处理基础课程
  • 既然是长连接 ,资源已经占用,已经存在。那抢购就直接用长连接不更好?
  • 前端八股文-HTML5篇
  • AI绘画:从算法原理解读其风格、质量与效率变革
  • RLHF综述-GRPO之前
  • 《SeeClick: Harnessing GUI Grounding for Advanced Visual GUI Agents》论文精读笔记
  • 机器学习算法篇(八)-------svm支持向量机
  • 机器人“ChatGPT 时刻”倒计时
  • 码上爬第九题【协程+webpack】
  • 苹果正计划大举进军人工智能硬件领域
  • 【wpf】WPF 中的 MouseBinding 详解
  • Node-RED系列教程-V4版本Dashboard2使用教程
  • 【科研绘图系列】R语言绘制微生物丰度和基因表达值的相关性网络图
  • 数智先锋 | 告别运维黑盒!豪鹏科技×Bonree ONE构建全栈智能可观测体系
  • Java 中导出 Excel 文件的方法
  • Java 设计模式-装饰器模式
  • 基于51单片机万年历时钟设计
  • Auto-Coder的CLI 和 Python API
  • 顺序表插入删除
  • React 18/19 新特性 核心 API 深入讲解
  • GraphQL从入门到精通完整指南
  • Scrapy 基础框架搭建教程:从环境配置到爬虫实现(附实例)
  • 开源数据发现平台:Amundsen 第1部分:基础入门与本地环境设置
  • 数据结构:用两个栈模拟队列(Queue Using 2 Stacks)
  • 2025年商协会新运营模式,正在破局
  • NokoPrint:安卓平台上的全能打印解决方案
  • 软件测试之接口测试,接口自动化测试, request
  • 【FreeRTOS】刨根问底4: 优先级反转是啥?咋解决?