向 EOA 或合约传递 data 当交易包含数据有效负载时,它很可能是发送到合约地址的,但它同样可以发送给 EOA 如果发送 data 给 EOA,数据负载(data payload) 的解释取决于钱包
EOA和CA更多讲述的是链上主体. mpc指的是你链下的. 私钥管理的一个技术方案 1.2、为什么要抽象? ,调度合约,合约扣款计算,所以必然高于eoa转账。 总之,L1还是更适合做存储一些,L2才是性能的破局之道 2、传统EOA钱包是否可以迭代出智能合约钱包的社交恢复、多签、批量付款等功能? 当前EOA钱包巨头们会被淘汰or进化成其他形态吗? 6、4337仍然依赖于EOA账户签名,真的能给用户体验带来质的飞跃吗?
典型案例包括以太坊的EOA(外部账户)和智能合约账户,以及MPC(多方计算)钱包等创新方案。 以太坊EOA是最基础的类型,由公私钥对控制,地址通过公钥推导生成。 分布式账户代码实现(以太坊示例) 生成EOA账户 使用ethers.js库创建公私钥对并导出助记词: const ethers = require('ethers'); const wallet = ethers.Wallet.createRandom
前置知识 EOA 账户和合约账户 以太坊账户分两种,外部账户(EOA)和合约账户(SCA)。 外部账户由一对公私钥进行管理,账户包含着 Ether 的余额。 外部账户 EOA 由公私钥对控制 拥有 ether 余额 可以发送交易(transactions) 不包含相关执行代码 合约账户 拥有 ether 余额 含有执行代码 代码仅在该合约地址发生交易或者收到其他合约发送的信息时才会被执行 拥有自己的独立存储状态,且可以调用其他合约 msg.sender 和 tx.origin 的区别 tx.origin:表示最初的调用者,通常取得的是 EOA 的地址。 msg.sender:表示最近的调用者,通常取得是的上级调用者的地址,可以是 EOA 地址,也可以是合约地址。 如果 EOA 用户 A 调用合约 B,合约 B 调用合约 C。 通过判断tx.origin==msg.sender来确定调用者是合约还是 EOA 账户。 思考 :可不可以通过判断一个账户的是否包含执行代码来区分这个账户是 EOA 还是 SCA? 不可以。
所有以太坊交易均源自外部拥有的帐户(EOA),这是一个由人操作的以太坊地址。以太坊交易可以从一个 EOA 转到另一个 EOA,就像你付钱给朋友一样。以太坊交易也可以从 EOA 转到合约中执行代码。 稍后我们将看到,闪电贷在其执行过程中需要多个函数调用,而这在 EOA 中是不可能完成的。相反,我们将部署包含多步骤流程的合约。 我们从 EOA 发起交易到 Aave 合约进行套利,但我们提供的部署合约的地址。另外还需要提供足够 ETH 以支付交易的 gas 成本,由于交易的复杂性,这可能会非常昂贵。
此次黑客攻击涉及六个EOA,不过其中两个EOA已经被提前发现,受害者可以通过调用“revoke.cash”拿回他们的资金。
因此,在以太坊上拥有账户的不仅是人类用户,还有两种类型的账户: 由人类用户管理的外部拥有的账户户 (EOA)。 由其底层智能合约代码管理的合约账户。 EOA 和合约账户有什么区别? 但是,合约账户有一些限制: 合约账户不能自行实例化操作——它们只能响应他们收到的交易(通常来自 EOA)。 合约账户完全由其代码控制,而 EOA 则由其关联的私钥控制。
3.1、优点源于CA的高度定制性 由于其部署出来的本质是CA地址,除了无法签名,依赖EOA交易来驱动之外,属性(含Nonce后)与正常EOA地址别无二至,所以等于让NFT具有了和EOA账户一样的承载能力 便于批量化的转移,是直接转移账号本身的所有权,类似于交易On-Chain游戏中的账号本身 但要注意,他底子依旧需要EOA交易来驱动,只是链上身份主体不是EOA中私钥所对应的地址,所以一些说法:“你的 NFT
交易数据结构 交易是包含以下数据的序列化二进制消息: nonce:由发起人EOA发出的序列号,用于防止交易消息重播。 gas price:交易发起人愿意支付的gas单价(wei)。 v,r,s:发起人EOA的ECDSA签名的三个组成部分。 交易消息的结构使用递归长度前缀(RLP)编码方案进行序列化,该方案专为在以太坊中准确和字节完美的数据序列化而创建。
以太坊账户类型 外部账户 (Externally owned account, EOA ) 合约账户 (Contract accounts) EOA 外部账户(用户账户/普通账户) 有对应的以太币余额
普通账户(EOA),存储和代码均为空 合约账户(Contract),包含存储和代码\ 地址(Address) 一般来说,这代表一个EOA或合约,它可以在区块链上接收或发送交易。
帐户类型 以太坊有两种帐户类型: 外部账户 (External Owned Accout, EOA): 私钥的所有者控制 接收、持有和发送 ETH 和 token 合约账户 (Contract Account Balance *big.Int Root common.Hash // merkle root of the storage trie CodeHash []byte } 外部账户 EOA
目前在以太坊中有两种账户,分别为外部账户(EOA)和合约账户(Contract Account)。 所以当前以太坊上所有权和签名权是一体的,这样的外部账户(EOA)设计可能会衍伸出一些值得讨论的问题: 私钥难保护:用户失去私钥(遗失、黑客攻击、密码学上的被破解)意味着地失去所有资产。 其次单纯的合约钱包(CA)也有一定问题: 对合约钱包的操作必须由 EOA 发起(实质是调用合约),每笔交易将多消耗 21000Gas。 需要 EOA 有足够的 ETH 来支付 Gas(管理两个账户),或者依靠 Relayer 支付 Gas(导致中心化)。 总之,这里很多的优点都源于合约本身的高度定制能力,同样的缺点则是依赖于EOA账户做管理员来驱动,这本质是签名算法的局限性。 相比之下对比传统多签合约钱包的方案,4337的优势则是可以自定义签名算法。
• EIP-7702:允许外部账户(EOA)临时切换为智能合约账户,增强灵活性。 3. 性能与安全优化 • 交易传播优化:CPU占用降低,节点负载更均衡。 DApp开发者:检查EIP-7702(EOA账户代码设置)和EIP-7623(calldata成本增加)对合约的影响。 3. 普通用户:无需主动操作,但需警惕分叉期间的网络延迟。
该项只有合约账户才有,而在 EOA 中, storageRoot 留空、 codeHash 则是一串空字符串的哈希值。 (3)账户存储树 以太坊中有两种账户类型:外部所有账户(Externally Owned Accounts 简称 EOA)以及合约账户。 下面就来看看账户状态中都包括什么: <1> nonce 从此地址发送出去的交易数量(如果当前为 EOA 账户)或者此账号产生的合约创建操作(现在先别管合约创建操作是什么)。 对于 EOA 账户,此处留空。 账户状态中不容忽视的一个细节是,上述对象在内的所有对象都可变(除了 codeHash)。 该项只有合约账户才有,而在 EOA 中, storageRoot 留空、 codeHash 则是一串空字符串的哈希值。所有智能合约的数据都以 32 字节映射的形式保存在账户存储树中。
EVM 账户模型账户类型 外部账户(EOA):由私钥控制,可发起交易并持有 ETH。合约账户:由代码控制,可持有 ETH 并执行逻辑,但需由 EOA 触发。
旨在解决快照同步和区块链交易历史的粒度问题 Erigon v2022.04.02[8] :从 GitHub 删除 MDBX 后[9]改为备用镜像 Condrieu Verkle 测试网[10]已公开 关于账户的需求:将 EOA EIP5005[23]: Zodiac EIP5003[24]: 用 AUTHUSURP 替换 EOA EIP4985[25]: GameFi 的 NFT,以太坊上特定于 GameFi 的 NFT 提案 realledgerwatch/status/1514898348100231171 [10] Condrieu Verkle 测试网: http://condrieu.ethdevops.io [11] 将 EOA
以太坊交易(Transaction) 签名的数据包,由EOA发送到另一个账户 消息的接收方地址 发送方签名 金额(VALUE) 数据(DATA,可选) START GAS GAS PRICE 以太坊合约
合约应用一 维护一个数据存储(账本),存放对其他合约或外部世界有用的内容 最典型的例子是模拟货币的合约(代币) 合约应用二 通过合约实现一种具有更复杂的访问策略的普通账户(EOA),这被称为“转发合同”
地址可以是EOA或合约地址。 以太坊没有进一步的验证,任何20字节的值都被认为是有效的。如果20字节值对应于没有相应私钥的地址,或不存在的合约,则该交易仍然有效。