ETH-EIP-4337
EIP-4337首先声明以下几点:
用户钱包都采用 contract 实现,每个用户对应一个合约地址
用户初次发起交易时,会自动创建合约
用户可以指定一个 payment 合约地址,用该地址中的余额支付手续费
整体架构
ERC-4337 定义了一个基于 ETH 的账户抽象标准,以下为简单介绍。
UserOperation:类比原生交易,不过为另一种格式的交易,比如支持携带自定义签名、交易的基础信息(gas、sender、limit等)
UserOperation mempool:专门的一些节点搭建的P2P网络构成的交易缓存池,用于接受UserOperation
Bundler:负责收集、校验、打包UserOperation,并将打包好的交易发送给产块人,交易上链的费用由Bundler支付,但是Bundler会从UserOperation中获取用户的手续费作为奖励。
Note:本质上是启动了一个独立于主链的P2P网络,用于接收抽象账户的交易并打包上链。
https://github.com/ethereum/EIPs/blob/3fd65b1a782912bfc18cb975c6 ...
EIP-4844-blob 简单说明
简述Blob交易是专门为Rollups而设计的特殊交易。它从 EVM 执行环境中分离出来,并以状态最小化的方式,来促进rollup机制原生嵌入以太坊网络中的实施(包括 optimistic 和 zk)的方式大幅增加交易吞吐量。大白话就是,为了省钱(手续费)专门设计的一种交易类型。
第一阶段EIP4844 主要即为第一个阶段所要完成的工作。主要包括:
1.新增一种交易类型,该交易类型新增了一种字段:blob,为该字段设置单独的gas收费标准,且收费较低,rollup 可采用该字段存储数据
2.新增blob会增大区块数据量,新增历史数据清理功能,超过30天的blob数据可以从节点移除,或迁移至第三方去中心化存储
3.blob与 tx 存储分离,并通过一个 commitment 来进行关联,commitment采用 KZG 算法来实现,KZG 算法可以看做类似 merkle 树的证明算法
4.KZG 在 sharding 中扮演着重要的角色,Rollup 校验中除了 KZG,采用别的验证算法都无法达到很好的效果。
数据结构
1.消息与签名12345678910111213141516clas ...
以太坊 EIP-4844 简述
简述是由Vitalik Buterin和其他来自以太坊生态系统的程序员共同创建的,它关注的是分片技术。
目的EIP-4844的主要目的是在不牺牲去中心化的情况下,降低网络上的gas费用,特别是对rollup解决方案。Arbitrum和Optimism等rollup解决方案可以将gas费用降低100到1000倍。
EIP-4844 提案是作为以太坊2.0更新完成之前的临时解决方案。该提案解释了一种新方法,以帮助划分交易中所需的信息,如验证规则和交易格式,而无需实际实现任何分片。
这是一个很大的EIP,细分下来,需要用很多篇文章才能讲完整个EIP的细节经及EIP-4844要做的事。
背景每个区块 12 秒的出块时间 TPS 大概为 13~30 笔交易左右,但根据目前已知以太坊的 TPS 最高可以达到每秒 45 笔交易。以太坊做为最主流的区块链,这个TPS就非常拉夸,还要号称世界计算机。
所以想要成为 “世界计算机” 的以太坊每秒最多处理 45 笔交易的性能实在是太弱了。所以以太坊迫切需要扩容来解决性能问题。
以太坊由于智能合约的存在,每个交易的内容各不相同,所以每个区块可以处理多少笔交易( ...
Merkle Tree、Merkle Patricia Tree
前言如果是接触区块链开发相关的话题,Merkle Tree 是一个必需要了解的话题。BTC和ETH都使用这项技术,但是数据结构不同。应用侧重点也不同。
用意Merkle tree
注意这里的虚线,最后的叶子节点是真正挂数据的节点。
Merkle Patricia TreeTODO
以太坊 Merkle Patricia Tree 应用参考链接https://en.wikipedia.org/wiki/Merkle_tree
ethereum-geth常用操作
前言eth已经2.0了,但是1.0除了挖矿之外大部分功能都还是一样的。
geth 能做什么
与eth链交互:console
查看区块链状态
管理账号: personal
发送交易:
挖矿 miner
交互操作: console通过console启动,可以进行一系统的操作。
1.连接eth主网默认连接最新的主网。
--datadir: 数据存放目录,不指定默认:/home/$user/.ethereum
1geth --datadir /data/geth --goerli console
2.连接eth测试网--goerli: 加入 goerli测试网--rpcapi: 开启rpc服务,开启后才可以进行操作
1geth --datadir "/data/geth" --rpc --rpcport 8545 --rpcapi "personal,eth,net,web3,admin" --rpccorsdomain "*" --goerli console
节点管理: admin自己搭建节点,第一步是要能使用,如果不 ...
ethereum原理-RLP编码
简述RLP(Recursive Length Prefix),中文翻译过来叫递归长度前缀编码,它是以太坊序列化所采用的编码方式。RLP主要用于以太坊中数据的网络传输和持久化存储。为什么要说这个东西,因为ETH在构建状态树的时候,使用到了这个编码,有比较强的关联性。
为什么要有RLP这种编码?是为了通用性,使数据成为平台无关性的数据。
递归长度前缀的目的在于,对任意嵌套的二进制数据数组进行编码,而递归长度前缀是用于序列化以太坊执行层中对象的主要编码方法。 递归长度前缀的唯一目的是对结构进行编码;而对特定数据类型(例如字符串、浮点数)进行编码的工作,则留给高阶协议;但正递归长度前缀整数必须以不带前导零的大端序二进制形式表示(从而使整数值零相当于空字节数组)。 带有前导零的反序列化正整数被视为无效。 字符串长度的整数表示也必须以这种方式编码,有效载荷中的整数也是如此。
意思就是说,底层存储的数据要保持一致,如果通过别的工具序列化出来的二进制数据,具有平台相关性,所以索性自己规定一种编码格式,上层使用者,自行解码。
编码RLP主要用于以太坊中数据的网络传输和持久化存储。分四种情况:1.单一 ...
ethereum--Account账户模型
以太坊帐户一个以太坊帐户是一个具有以太币 (ETH) 余额的实体,可以在以太坊上发送交易。 帐户可以由用户控制,也可以作为智能合约部署。
帐户类型以太坊有两种帐户类型:
外部账户 (External Owned Accout, EOA): 私钥的所有者控制
接收、持有和发送 ETH 和 token
合约账户 (Contract Account, CA): 一种由代码控制,部署在网络上的智能合约。
与已部署的智能合约进行交互
外部和合约账户使用相同的数据结构,只是使用的字段不同。
12345678// StateAccount is the Ethereum consensus representation of accounts.// These objects are stored in the main account trie.type StateAccount struct { Nonce uint64 Balance *big.Int Root common.Hash // merkle root of the storage trie ...
ethereum原理--关于keccak256
关于 keccak256看以太坊代码,发现很多地方使用的加密函数是:keccak256,了解了一下做个输出。
Keccak算法(读作为“ket-chak”)是Guido Bertoni, Joan Daemen, Michael Peters, and Giles Van Assche的工作。 SHA-3的候选人在2008年10月提交。Keccak采用了创新的的“海绵引擎”散列消息文本。它是快速的,在英特尔酷睿2处理器下的平均速度为12.5周期每字节。它设计简单,方便硬件实现。Keccak已可以抵御最小的复杂度为2n的攻击,其中N为散列的大小。它具有广泛的安全边际。至目前为止,第三方密码分析已经显示出Keccak没有严重的弱点。尽管如此,Keccak的创建者已经启动Crunchy加密比赛,挑起人们发现和报告成功且可核查的攻击Keccak的兴趣。
Keccak-256被设计为于2007年举行的SHA-3密码哈希函数竞赛的候选者。Keccak是获胜的算法,在2015年被标准化为 FIPS(联邦信息处理标准)。不过NIST接受原始的Keccak256设计后,更改了Padding的格式, ...
以太坊 chainlist
简述Chainlist 是 EVM 网络的列表。 用户可以使用这些信息将他们的钱包和 Web3 中间件提供商连接到适当的Chain ID 和网络 ID,以连接到正确的链。因为每条ETH的链都有自己的ID,不能重复,相当于是一个ID。
查询chainIDchainId不能重,在配置自己的chainID时,先查一下。可以看到ETH自己的chainID是1,BNB是56,polygon 是137,往下拉一堆链。
https://chainlist.org/
https://chainlist.wtf/
官方源码https://github.com/ethereum-lists/chains
ethereum原理-gas说明
前言简单的说就是手续费的一种变体,本质还是转账费用,只能在设计上,功能更复杂,用处更多。即然是手续费,为什么不干脆一次性收取或者设定一个转账比例,不是更简单?这个后面说。
Gas 说明以太坊自称要成为世界计算机,但是这个计算机是烧Gas而不是用电,也不知是汽化天燃气还是液化天燃气。也有可能是以太坊想说,发电要用天燃气,所以Gas代表了消耗。
参数
作用
Gas(也称:GasUsed)
EVM中的每个操作都指定了要消耗的gas量
Gas Price
每个操作的单价,就是说这笔交易,不只一处需要使用到Gas
Gas Limit
本次交易的Gas限额
所以一笔交易的手续费就是:
Transaction Fee = Gas * GasPrice
就是这么简单粗暴。
作用:资源限制手段,以及网络矿工奖励手段。
作为以太坊价格(具有波动性)和矿工对其工作的奖励之间的抽象层。
另一种是抵御拒绝服务攻击。
为了防止网络中的意外或恶意无限循环或其他计算浪费,每个交易的发起者需要设置他们愿意花费在gas上的金额的限制。因此,gas系统阻止攻击者发送垃圾邮件交易,因为他们必须 ...