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 ...
Cosmos 普通交易手续费调研
背景分析 cosmos 的交易手续费的实现细节,以了解其实现手续费模型用于实现参考。在 cosmos 中,gas 用于跟踪执行期间的资源消耗。普通交易消耗的也是 gas。gas 通常在对存储进行读取和写入时使用,但如果需要执行昂贵的计算,也可以使用。
重点关注的两件事情:
如果计算、校验,即交易做了哪些操作,是否合法
每个操作的收费是如何定价的,包括:读取、存储、计算。
tx 会产生所有状态读取/写入、签名验证以及与 tx 大小成比例的成本的 gas 成本。运营商在启动节点时会设定最低 gas 价格。
需要消耗 gas的交易类型每个交易在执行过程中都会消耗一定数量的Gas,该Gas用于跟踪执行过程中的资源消耗。在Cosmos SDK应用程序中,交易可以是发送消息(Message)的操作,例如
发送代币
执行智能合约
当执行这些消息时,相关的Gas会被消耗,并且可能会生成相应的费用(Fees)。
请注意,Gas的消耗和费用的生成通常由应用程序开发者定义和管理,可以根据具体的应用逻辑和需求进行设置。
Cosmos SDK提供了Gas计量器(GasMeter)(主要就是通过个是来记录 ...
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 笔交易的性能实在是太弱了。所以以太坊迫切需要扩容来解决性能问题。
以太坊由于智能合约的存在,每个交易的内容各不相同,所以每个区块可以处理多少笔交易( ...
tron-节点-witness加载过程
简述witness 即在tron链中就是产块节点的代名词,一般称为SR。一般节点不产块,要配置成witness,需要启动时指定私钥,并使用--witness或-w指定成为产块节点。
witness 加载过程有两种加载方式:
参数或配置文件
指定localwitness启动
参数或配置文件通过参数指定为witness节点,但是私钥建议写在配置文件中,否则ps查看一下进程就能看到启动参数,就全暴露了,但是如果有人能上机器,也能查看配置文件。
1java -jar FullNode.jar --witness -p xxxxxxxxxxxxxxxxxx
输入上面的命令后,节点就会以SR类型启动,具体是如何加载的,调用栈如下:
1234567FullNode.main()\--Args.setParam(args, Constant.TESTNET_CONF); //381 \--PARAMETER.privateKey //优先加载 参数 \--Constant.LOCAL_WITNESS & ...
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自己搭建节点,第一步是要能使用,如果不 ...
tron 接收交易和广播交易
前言分析tron是如何接收到交易,并在接收到交易后,后续是如何处理的,交易处理细节可以看看:tron 交易处理--交易执行逻辑
接收交易节点使用netty进行P2P连接,主要使用到的类:
TransactionsMsgHandler: netty Handler处理器
TronNetService: 消息分发
AdvService: 消息广播
FetchInvDataMsgHandler: 消息拉取
交易处理调用栈:
123TronNetHandler.channelRead0 接收消息\--TronNetService.onMessage 分发消息 \--transactionsMsgHandler.processMessage; 具体业务处理
TronNetService.onMessage 分发消息1234567891011121314151617181920212223242526272829303132333435363738394041protected void onMessage(PeerConnection peer, TronMessage msg) ...
ethereum原理-RLP编码
简述RLP(Recursive Length Prefix),中文翻译过来叫递归长度前缀编码,它是以太坊序列化所采用的编码方式。RLP主要用于以太坊中数据的网络传输和持久化存储。为什么要说这个东西,因为ETH在构建状态树的时候,使用到了这个编码,有比较强的关联性。
为什么要有RLP这种编码?是为了通用性,使数据成为平台无关性的数据。
递归长度前缀的目的在于,对任意嵌套的二进制数据数组进行编码,而递归长度前缀是用于序列化以太坊执行层中对象的主要编码方法。 递归长度前缀的唯一目的是对结构进行编码;而对特定数据类型(例如字符串、浮点数)进行编码的工作,则留给高阶协议;但正递归长度前缀整数必须以不带前导零的大端序二进制形式表示(从而使整数值零相当于空字节数组)。 带有前导零的反序列化正整数被视为无效。 字符串长度的整数表示也必须以这种方式编码,有效载荷中的整数也是如此。
意思就是说,底层存储的数据要保持一致,如果通过别的工具序列化出来的二进制数据,具有平台相关性,所以索性自己规定一种编码格式,上层使用者,自行解码。
编码RLP主要用于以太坊中数据的网络传输和持久化存储。分四种情况:1.单一 ...
tron-网络模型-AdvService广播服务
AdvService 作用AdvService 负责将数据广播到tron网络当中。基础框架是netty,在此之上开发AdvService对业务进行了封装。
数据包括:
交易
区块
需要注意的是,tron的AdvService的这套广播逻辑,不是单向广播,而是双向互动。啥意思,就是说,一般理解,一条数据广播出去后,就广播到对方节上了。但是tron的广播不是这样,而是先广播一个交易ID到目录节点上,目标节点收到ID后,再发一条请求接取的网络请求,把数据接回去!!!!是不是有点反直觉!!!
AdvService 主要成员invToFetch:invToSpread: 待广播的数据:交易、区块invToFetchCache:
主要方法consumerInvToSpread: 处理发送队列consumerInvToFetch: 处理拉取队列broadcast: 广播
处理流程
broadcast: 构建广播消息体:只包含ID
将数据添加入trxCache/blockCache
封装item
保存待发送消息: invToSpread.put(item)
consumerInvToSpre ...