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

以太坊账⼾模型的理解,合约账⼾、EOA账⼾认识

以太坊账⼾模型的理解,合约账⼾、EOA账⼾认识

以太坊使用账户模型(Account Model)而非比特币的UTXO模型。以太坊有两种类型的账户:

1. 外部账户(EOA - Externally Owned Account)

  • 特点:
    • 由私钥控制
    • 可以发送交易
    • 没有相关代码
    • 存储以太币余额
type EOAccount struct {Nonce    uint64         // 交易计数器Balance  *big.Int       // 账户余额Address  common.Address // 账户地址
}

2. 合约账户(Contract Account)

  • 特点:
    • 由代码控制
    • 能执行智能合约代码
    • 有自己的存储空间
    • 只能被外部账户触发
type ContractAccount struct {Nonce        uint64         // 合约创建计数器Balance      *big.Int       // 合约余额Address      common.Address // 合约地址Code         []byte         // 合约代码Storage      StateDB       // 合约存储CodeHash     common.Hash    // 代码哈希
}

两种账户的主要区别

特性 EOA账户 合约账户
私钥控制
可发起交易
包含代码
gas费用 支付 执行消耗
触发方式 主动发起 被动调用

账户状态

两种账户都包含以下4个基本字段:

type AccountState struct {Nonce     uint64     // 交易序号/合约创建数Balance   *big.Int   // 以太币余额StorageRoot Hash     // 存储树根哈希CodeHash  Hash      // 代码哈希(EOA为空哈希)
}

实际应用示例

以您的代码为例,监听代币转账事件时会涉及两种账户:

// 处理账户间转账
func handleTransfer(from common.Address, to common.Address, value *big.Int) {// from可能是EOA或合约账户if from.IsContract() {// 合约账户转账逻辑} else {// EOA账户转账逻辑 }// to可能是EOA或合约账户if to.IsContract() {// 触发接收方合约的回调to.Call(transferData)} else {// 直接转账到EOAto.Transfer(value)}
}

通过理解这两种账户模型,可以更好地开发以太坊应用并处理不同类型账户之间的交互。

http://www.gsyq.cn/news/25757.html

相关文章:

  • [Tool] fzf 模糊搜索神器基础功能和操作
  • 身份运算符
  • 赋值运算符
  • 解释这些区块链核⼼概念:区块、交易、Merkle Tree、共识机制(PoW、PoS)、Gas Fee 原理1
  • 微信如何开通wx.getPhoneNumber权限
  • 日志|JAVAWEB|maven
  • ManySpeech.MoonshineAsr 使用指南
  • C++在类定义内的函数包含static代表什么含义呢?
  • 2025/10/20~2025/?/? 做题笔记 - sb
  • ansible底层文件传输机制中默认模式遇到权限拒绝后启用管道模式可以得到解决
  • Android 源码解析系列1- Android init 进程启动流程
  • 2025.10.20总结
  • goframe框架命令行工具gf在zsh下不能用
  • 从18w到1600w播放量,我的一点思考。
  • 10.20java作业
  • 题解:Luogu P14175 【MX-X23-T5】向死存魏
  • 31_创蓝短信接入资料和定价
  • CSP-S 33
  • 10.20每日总结
  • 后缀树
  • CF1606E Arena 题解(动态规划)
  • 正睿 2025 NOIP20 连测 Day5 做题记录
  • CSP-S 20
  • Flutter应用设置插件 - 轻松打开iOS和Android系统设置
  • CSP-S 22
  • /usr/bin/sudo 二进制文件的权限有问题,导致所有用户都无法使用 sudo
  • CSP-S 19
  • 研1转码自学黑马程序员Python第7天 | Python函数知识 - 指南
  • 从C10K到Reactor:事件驱动,如何重塑高并发服务器的网络架构
  • 数据范围