¥
立即购买

区块链术语专业解析

30 浏览
1 试用
0 购买
Dec 3, 2025更新

本提示词专为区块链开发者和学习者设计,提供精准的区块链术语定义服务。通过结构化解析框架,深入阐释术语的核心概念、技术原理、应用场景及关联概念,确保内容权威准确、逻辑清晰。适用于技术文档编写、教育培训、项目开发等多种场景,帮助用户快速掌握区块链专业术语的内涵与外延,提升技术理解与沟通效率。

术语定义

  • 基本概念
    • 乐观式汇总(Optimistic Rollup,简称 ORU)是一类二层扩容方案:在二层执行交易、在一层(如以太坊)发布交易数据并定期提交状态承诺(state/output root),默认“乐观”地认为提交的数据是正确的,仅当有人在挑战期内提出欺诈证明(Fraud Proof)时才回滚并惩罚作恶者。
  • 技术分类
    • 按数据可用性(DA)来源:
      • 真正的 Rollup:所有交易数据发布到 L1(历史上用 calldata;Dencun 升级后主流使用 EIP-4844 blobs)。
      • “Optimium/AnyTrust/Alt-DA”变体:交易数据发布到外部 DA 层(不完全继承 L1 安全性,严格意义上不属于“rollup”)。
    • 按欺诈证明协议:
      • 单轮(one-shot)欺诈证明
      • 多轮交互式(bisection/二分交互)欺诈证明
  • 核心特征
    • 继承 L1 的安全性(前提:数据在 L1 可用,且至少有一个诚实挑战者在线)
    • 执行在 L2、结算在 L1;提现需要等待挑战期(常见配置约 7 天)
    • 单序列器(sequencer)主导打包,配合 L1 强制包含队列(force inclusion)确保最终活性
    • 成本显著下降:批量打包、压缩、EIP-4844 降低 DA 成本

技术原理

  • 工作机制
    1. 交易收集与排序
      • L2 用户将交易发送给 L2 序列器;序列器按时间顺序打包交易,生成批次(batch)。
      • 为防审查,L1 提供“延迟/强制”队列,用户可将交易直接提交到 L1,序列器必须在窗口内纳入。
    2. 数据发布与状态承诺
      • 批次交易数据被压缩后发布到 L1(calldata 或 4844 blobs),并提交对应的状态根或输出根(包含版本、状态根、消息传递相关承诺等)。
    3. 补全与复算(derivation)
      • L2 全节点根据 L1 上的批次数据重放交易,独立计算得到相同状态根,以验证序列器的提交。
    4. 欺诈证明与挑战期
      • 在挑战期内,任何人可对某批次或状态承诺发起挑战。
      • 挑战协议最终在 L1 通过“最小争议片段”的一小步证明(one-step proof)判定对错;若原提交为恶意,状态回滚到上一个有效根,并对作恶者押金进行惩罚。
    5. 跨域通信与桥接
      • L1→L2 存款:用户将资产锁定在 L1 桥合约,消息在 L2 被执行。
      • L2→L1 提现:在 L2 燃烧/锁定资产,生成 L2 出站消息承诺,待挑战期结束后在 L1 证明并释放资产。
  • 算法描述
    • 多轮交互式欺诈证明(以二分法为例)
      1. 挑战者与被挑战者就一段执行轨迹的起止状态达成共识(相同的起点、不同的终点)。
      2. 通过二分将执行轨迹分割为更小区间,不断定位到首次产生分歧的单步指令。
      3. 最终在 L1 上对该单步进行“可验证执行”(one-step proof),由合约/预编译验证正确性。
      4. 若提交方错误,合约回滚该批次及其后续状态,没收其保证金;否则挑战者被罚。
    • 数据可用性与成本
      • 交易数据采用差分压缩(RLP/字节码表/字典)、批量签名聚合等手段。
      • EIP-4844 blobs 提供廉价的短期可用数据通道,由共识层保证可传播与可检索,显著降低 DA 成本。
  • 技术实现
    • L1 合约组件(常见抽象)
      • Rollup/Verifier 合约:存储批次/输出根、管理挑战期、处理欺诈证明和惩罚。
      • Bridge/Inbox/Outbox:跨域消息通道,存取存款与提现消息,维护消息承诺(Merkle root)。
      • SystemConfig:记录批次提交者、DA 配置、挑战参数等。
    • 参与者角色与经济约束
      • Sequencer/Batcher:收集交易、压缩并发布 L1 数据;可能需要质押。
      • Proposer:提交状态承诺;需质押,遭挑战失败则被罚。
      • Challenger:监控并在发现无效状态时发起挑战,赢得被罚押金。
    • 同步与回滚
      • L2 节点“派生管线”(derivation pipeline)从 L1 获取批次数据,重放并构建 L2 状态。
      • 如 L1 发生链重组,L2 将相应回滚到 L1 最终确定的分叉点,重新派生。
    • 安全与可升级
      • 关键参数:挑战期时长、强制包含窗口、最小保证金、批次大小限制等。
      • 升级路径需受时间锁/多签/治理约束,降低单点治理风险。

应用场景

  • 典型用例
    • DeFi:AMM、借贷、衍生品在 L2 获得低费用高吞吐,同时通过 L1 结算保证安全性。
    • 链上游戏与社交:高频交互、状态更新多,L2 降低交互成本。
    • 支付与结算:企业级批量支付、微支付,结算安全锚定 L1。
  • 系统集成
    • 开发工具:与以太坊兼容的 EVM、solc、Hardhat/Foundry,RPC 兼容,迁移成本低。
    • 节点与基础设施:执行客户端(L2 geth/derivation client)、批次提交器、监控/挑战节点、索引服务。
    • 钱包与桥接:标准 Web3 钱包无缝连接;官方/第三方桥负责消息证明与资金释放。
  • 实际案例
    • Optimism(Bedrock/OP Stack)
      • 使用输出根、分层合约(SystemConfig、OptimismPortal、L2OutputOracle 等)。
      • 通过 EIP-4844 blobs 降低 DA 成本;提供强制包含与跨域消息接口。
    • Arbitrum One(Nitro)
      • 采用多轮交互式欺诈证明(bisection),终局一小步证明在 L1 验证。
      • L1 DA、7 天量级挑战期、与 EVM 高度兼容。
    • Base(基于 OP Stack)
      • 使用以太坊 DA、EIP-4844,提高吞吐并保持以太坊安全锚定。

关联概念

  • 相关术语
    • ZK Rollup:用有效性证明(Validity Proof)即时证明正确性,无需挑战期。
    • Validium/AnyTrust:数据不全部上链,依赖外部 DA 委员会/假设,成本更低、安全性不同。
    • Plasma:仅提交承诺和欺诈证明,不发布完整数据,退出复杂且对数据可用性敏感。
    • 侧链(Sidechain):独立共识与安全,不直接继承 L1 安全性。
    • EIP-4844(Proto-danksharding):提供廉价短期 DA 的 blob 载体,显著降低 rollup 成本。
  • 区别对比
    • ORU vs ZKRU:ORU 延迟最终性(挑战期),证明成本低、通用性强;ZKRU 即时最终性、证明生成昂贵但验证高效。
    • ORU vs Validium:二者执行相似,但 Validium 不把数据放到 L1,成本更低、安全前提更强。
    • ORU vs 侧链:ORU 结算与数据(在真 rollup 情形)锚定 L1,侧链则不继承 L1 安全。
  • 技术演进
    • DA 演进:从 calldata 迁移至 4844 blobs,未来进一步走向全分片数据可用性。
    • 去中心化排序:从单序列器过渡到去中心化/共享序列器,降低审查与停机风险。
    • 更通用与快速的欺诈证明:覆盖更多 EVM 指令、优化一小步证明开销,向更高“安全阶段”(如 L2Beat Stage 2)推进。

实例说明

  • 代码示例(简化伪代码,仅示意)
    1. 跨域消息(以 OP Stack 风格接口为例)
    interface ICrossDomainMessenger {
        function sendMessage(address target, bytes calldata message, uint32 gasLimit) external;
        event SentMessage(address indexed target, address sender, bytes message);
    }
    
    // L2 合约:调用 L1 合约
    contract L2Caller {
        address constant L2_MESSENGER = 0x4200000000000000000000000000000000000007; // 例:OP Stack 默认地址
        function callL1(address l1Target, bytes calldata data) external {
            ICrossDomainMessenger(L2_MESSENGER).sendMessage(l1Target, data, 1_000_000);
        }
    }
    
    1. 批次提交与挑战(高度抽象伪代码)
    contract Rollup {
        struct Batch { bytes32 prevStateRoot; bytes blobCommitment; bytes32 postStateRoot; }
        uint256 public challengePeriod = 7 days;
    
        mapping(uint256 => Batch) public batches;
        mapping(uint256 => uint256) public batchTimestamp;
        mapping(uint256 => bool) public challenged;
    
        function submitBatch(uint256 id, Batch calldata b) external payable {
            require(id == 0 || batches[id-1].postStateRoot == b.prevStateRoot, "bad link");
            batches[id] = b;
            batchTimestamp[id] = block.timestamp;
        }
    
        function challenge(uint256 id, bytes calldata proof) external {
            require(block.timestamp < batchTimestamp[id] + challengePeriod, "finalized");
            // 触发交互式争议游戏(链下多轮,链上最终一步)
            challenged[id] = true;
        }
    
        function resolve(uint256 id, bool valid) external {
            require(challenged[id], "no dispute");
            if (!valid) {
                // 回滚与惩罚(省略)
                delete batches[id];
            }
            challenged[id] = false;
        }
    
        function finalized(uint256 id) public view returns (bool) {
            return block.timestamp >= batchTimestamp[id] + challengePeriod && !challenged[id];
        }
    }
    
  • 配置示例(OP Stack 风格,节选)
    {
      "l1ChainId": 1,
      "l2ChainId": 8453,
      "batchInboxAddress": "0xYourBatchInbox",
      "systemConfig": {
        "sequencer": "0xSequencer",
        "batcher": "0xBatchSubmitter",
        "gasLimit": "0x1c9c380",
        "overhead": "0x0",
        "scaler": "0x0"
      },
      "rollup": {
        "challengePeriodSeconds": 604800,
        "l2OutputOracle": "0xL2OutputOracle",
        "optimismPortal": "0xOptimismPortal"
      },
      "da": {
        "mode": "blob-4844",
        "maxBlobPerBatch": 6
      }
    }
    
  • 操作示例
    • L1→L2 存款
      1. 用户向 L1 桥合约存入资产并指定 L2 接收地址。
      2. 序列器将该 L1→L2 消息纳入批次;L2 执行存款逻辑,用户在 L2 快速获得可用余额(经济最终性仍受 L1 结算约束)。
    • L2→L1 提现
      1. 用户在 L2 发起提现,生成出站消息并在 L2 状态树中记录承诺。
      2. 等待挑战期结束(期间如无人成功发起欺诈证明),在 L1 提交 Merkle 证明/输出根证明,桥合约验证后释放资金。
    • 强制包含(防审查)
      1. 若序列器不打包某笔 L2 交易,用户可将交易发布到 L1 延迟收件箱。
      2. 到达强制窗口后,序列器必须包含该交易;否则他人可通过 L1 触发强制推进流程。

备注与实践要点

  • 选择真 Rollup(L1 DA)可获得最强的 L1 级安全;选择 Alt-DA 则需评估 DA 委员会/采样网络的安全假设。
  • 挑战期直接影响用户提现延迟与资金效率;不同实现可通过流动性网络做“迅速提现”,但这引入额外信任/流动性方风险。
  • 生产环境需部署挑战节点并持续比对 L2 状态与 L1 公布数据,确保有诚实观察者在线。
  • Dencun/EIP-4844 上线后,应优先使用 blobs 发布批次以获得显著成本下降,同时完善 blob 留存与检索策略以保障数据可用性。

术语定义

  • 基本概念
    • 零知识证明(Zero-Knowledge Proof, ZKP)是一类密码学证明方法,使证明者在不泄露除“命题为真”之外任何额外信息的前提下,让验证者确信某个陈述(例如“我知道某个秘密”或“某计算结果正确”)为真。
    • 典型示例:证明“我知道 x,使得 y = g^x(离散对数)”或“我输入的密码经哈希后等于某值”,但不泄露 x 或密码本身。
  • 技术分类
    • 交互式 vs 非交互式(Interactive vs NIZK):是否需要多轮挑战-响应。非交互式常通过Fiat–Shamir变换将交互转为一次性证明。
    • 证明(Proof)vs 论证(Argument):证明在信息论或统计意义上安全;论证在计算难度假设下安全(更贴近现代区块链中的SNARK、STARK)。
    • 主流系统:Sigma协议、zk-SNARK、zk-STARK、Bulletproofs 等。
    • 透明 vs 信任设置(Trusted Setup):是否依赖预先的公共参考字符串(CRS)生成仪式(如Powers of Tau)。STARK与Bulletproofs为透明,无需信任设置;多数传统SNARK需要(但也有无需或“通用”设置的现代方案)。
  • 核心特征
    • 完备性(Completeness):若命题为真,诚实证明者能使诚实验证者接受。
    • 可靠性/健壮性(Soundness):若命题为假,任何证明者都很难使验证者接受。
    • 零知识性(Zero-Knowledge):验证者在接收证明后,除“命题为真”外不学到额外信息。
    • 性能属性:证明大小(Succinctness)、验证时间、证明时间、是否支持递归(将一个证明作为另一个证明的输入)。

技术原理

  • 工作机制
    • 承诺-挑战-响应(Commit–Challenge–Response)范式:证明者先提交与秘密相关但不泄密的“承诺”,验证者发出随机挑战,证明者据此响应。协议设计保证零知识与可靠性。
    • 利用模拟器(Simulator)概念证明“零知识性”:存在一个只用公开信息就能生成与真实交互不可区分的“模拟 transcript”,说明验证者无法额外获知秘密。
    • 非交互式化(Fiat–Shamir变换):将验证者随机挑战替换为哈希(随机预言机模型),实现一次性、可广播的证明。
  • 算法描述
    • Sigma协议(以离散对数为例):
      1. 承诺:证明者选随机 r,计算 t = g^r;
      2. 挑战:验证者给随机 c;
      3. 响应:证明者给 z = r + c·x;
      4. 验证:检查 g^z 是否等于 t · y^c(y = g^x)。若成立则接受。
    • zk-SNARK(以Groth16/PLONK流派为例,抽象流程):
      1. 程序到算术化:把目标计算编译成约束系统(如R1CS)或多项式关系;
      2. 预设公共参数(CRS/SRS):常通过“Powers of Tau”生成;
      3. 证明:证明者将秘密输入作为“见证”,用多项式承诺(如KZG)与椭圆曲线配对等手段构造简短证明;
      4. 验证:验证者用少量椭圆曲线运算(配对)快速检查所有约束被满足。证明体积通常为数百字节。
    • zk-STARK(透明设置):
      1. 算术中间表示(AIR):将计算转为对轨迹的代数约束;
      2. IOP + FRI:使用交互式开销证明与快速里德-所罗门编码(FRI)验证多项式低度性质;
      3. 承诺与一致性:基于哈希和Merkle树承诺轨迹,挑战来自随机性,最终生成可公开验证的证明。无需信任设置,证明更大但可扩展性更好。
    • Bulletproofs(内积论证):
      • 利用向量承诺与对数规模的内积论证实现紧凑的范围证明(如证明“余额在某范围内”),无需信任设置,证明大小通常随对数增长。
  • 技术实现
    • 基础构件:承诺方案(如Pedersen)、哈希函数、椭圆曲线(BLS12-381/BN254)、多项式承诺(KZG/FRI)、Merkle树。
    • 约束表示:R1CS、QAP、PLONKish约束、AIR。
    • 工具链:circom + snarkjs、Halo2、PLONK实现(如Polygon zkEVM、Aztec)、STARK系(StarkWare, Winterfell)。

应用场景

  • 典型用例
    • 隐私交易与资产保护:在不泄露金额、账户的前提下验证交易合法性(如Zcash的Shielded Transactions)。
    • 可验证计算与扩容:将大量链下计算用简短证明在链上验证(zkRollup:StarkNet、zkSync Era、Polygon zkEVM)。
    • 身份与凭证选择性披露:证明“满足某条件”(如年满18岁、通过KYC)而不暴露具体数据(与可验证凭证VC结合)。
    • 合规与审计:交易所储备证明(Proof of Reserves)、供应链合规检查、数据一致性证明。
    • 去中心化治理与投票:匿名/隐私投票,同时可验证票数与资格。
  • 系统集成
    • L1/L2:在以太坊等公链上通过预编译或合约(Verifier合约)验证证明,降低链上开销。
    • 跨域:链下服务生成ZKP,链上合约只做验证;或在轻客户端/区块同步中用递归ZKP压缩历史。
  • 实际案例
    • Zcash:使用Groth16 zk-SNARK(Sapling升级后采用BLS12-381)实现隐私转账。
    • StarkNet:采用STARK证明为交易批次提供可验证计算,提升吞吐。
    • Mina Protocol:使用递归SNARK压缩区块链状态,保持极小链大小。

关联概念

  • 相关术语
    • 承诺方案(Commitment)、多方安全计算(MPC)、安全硬件(TEE)、同态加密、Merkle证明、PCP/IOP、Fiat–Shamir变换、CRS/SRS(公共参考字符串)。
  • 区别对比
    • SNARK vs STARK vs Bulletproofs
      • 设置:SNARK常需信任设置;STARK与Bulletproofs透明;
      • 安全假设:SNARK依赖椭圆曲线与知识假设;STARK主要依赖哈希安全与编码理论;Bulletproofs依赖离散对数困难;
      • 证明大小与性能:SNARK证明短、验证快;STARK证明较大但扩展性和透明性好;Bulletproofs适合范围证明与余额证明,大小随对数增长。
    • zkRollup vs Optimistic Rollup:
      • zkRollup用ZKP即时证明正确性;Optimistic基于挑战期与欺诈证明,确认延迟更高但执行成本低。
  • 技术演进
    • 从PCP到IOP,再到现代多项式承诺与新型算术化(PLONK、Halo2、Pickles递归等)。
    • 从电路专用设置到“通用/统一设置”,提升开发与复用效率。
    • 递归证明与原生ZK友好链加速更多应用场景。

实例说明

  • 代码示例(Sigma协议:Schnorr身验证明,伪代码)
    • 目标:证明者知道 x 使得 y = g^x(不泄露 x)
    • 步骤:
      1. Prover: 选随机 r;计算 t = g^r;发送 t
      2. Verifier: 选随机 c;发送 c
      3. Prover: 计算 z = r + c·x;发送 z
      4. Verifier: 检查 g^z == t · y^c;若成立接受
    • 特点:满足完备性与可靠性;零知识性可由模拟器证明。
  • 代码示例(基础SNARK电路:乘法约束,circom)
    • multiplier.circom
      template Multiplier() {
          signal input a;      // 私有输入
          signal input b;      // 私有输入
          signal output c;     // 公开输出
          c <== a * b;
      }
      component main = Multiplier();
      
    • snarkjs(Groth16,简化流程示意;命令可能因版本略有差异)
      1. 编译电路
        • circom multiplier.circom --r1cs --wasm --sym -o build
      2. 生成Powers of Tau(一次性仪式;生产环境应多人贡献)
        • snarkjs powersoftau new bn128 12 pot12_0000.ptau
        • snarkjs powersoftau contribute pot12_0000.ptau pot12_final.ptau
      3. 生成ZKey
        • snarkjs groth16 setup build/multiplier.r1cs pot12_final.ptau build/multiplier_0000.zkey
        • snarkjs zkey contribute build/multiplier_0000.zkey build/multiplier_final.zkey
        • snarkjs zkey export verificationkey build/multiplier_final.zkey vk.json
      4. 生成见证与证明
        • 准备 input.json: {"a":"3","b":"5"}
        • node build/multiplier_js/generate_witness.js build/multiplier_js/multiplier.wasm input.json witness.wtns
        • snarkjs groth16 prove build/multiplier_final.zkey witness.wtns proof.json public.json
      5. 验证证明
        • snarkjs groth16 verify vk.json public.json proof.json
      6. 在链上(以太坊)部署Verifier合约后,提交 proof 与 public(此例中 c=15)即可链上验证。
  • 操作示例(教育场景思路)
    • 设计任务:证明“我知道一个密码,其Poseidon哈希等于公开值 H”
    • 实现要点:
      • 电路输入:secret(私有)、H(公开)
      • 约束:Poseidon(secret) == H
      • 证明与验证:用snarkjs生成证明,链上Verifier合约验证。这样可在不泄露密码的情况下完成“口令拥有权”验证。

说明与建议:

  • 选型建议(技术角度):隐私支付可选Groth16/PLONK类SNARK;高扩展与透明性需求可选STARK;范围证明等场景可选Bulletproofs。
  • 常见注意事项:信任设置的安全性管理、约束正确性(避免旁路信息泄露)、电路效率(哈希/签名在ZK中的成本)、参数曲线选择(BLS12-381、BN254)及审计。

术语定义

  • 基本概念
    • 账户抽象(Account Abstraction, AA)是将“账户的签名验证与交易执行逻辑”从协议的固定规则中抽离出来,使账户自身可编程。AA使得账户可以定义自有的验证规则(签名算法、权限模型、支付策略等)和交易打包方式,从而实现超越传统 EOA(Externally Owned Account,外部账户)的体验与安全能力。
  • 技术分类
    • 合约级 AA(无共识层改动):以以太坊 ERC-4337(俗称 EIP-4337)为代表,通过 EntryPoint 合约、Bundler 替代共识层的“替代内存池”实现 AA。
    • 协议级/原生 AA(需协议或执行层改动):如早期的 EIP-2938(未落地)、EIP-3074(AUTH/AUTHCALL 授权调用,待推进)、EIP-7702(临时将 EOA 赋予合约字节码的提案,2024 年提出,尚在演进)。这类方案直接在协议层支持可编程账户。
    • Rollup/链级原生 AA:如 StarkNet、zkSync 等 L2 在其执行环境内将账户定义为合约,原生提供自定义验证逻辑。
  • 核心特征
    • 签名/验证抽象:不局限于 secp256k1/ECDSA,可支持多签、阈值签名、Schnorr、Ed25519、WebAuthn/Passkeys、硬件多因子等。
    • Gas 支付抽象:通过 Paymaster 由第三方代付或使用代币支付手续费,提升用户无感上链体验。
    • 批量与流水线执行:在一次 UserOperation 内批量调用多笔操作,减少交互与成本。
    • 更强的权限与恢复:社交恢复、时间锁、会话密钥、白名单策略、限额与风控等。
    • 与现有生态兼容:以 4337 为例,不需要共识层硬分叉即可使用 AA。

技术原理

  • 工作机制
    • ERC-4337 架构角色
      • 用户账户(Smart Account/Contract Account):实现验证与执行逻辑的智能合约账户。
      • UserOperation(用户操作):取代传统交易的“操作描述”,包含 sender、nonce、initCode、callData、gas 限额、费用、签名、paymasterAndData 等字段。
      • Bundler:从专用内存池收集 UserOperation,打包为 handleOps 调用发送至 EntryPoint。
      • EntryPoint:核心合约,负责模拟与执行流程、扣费结算、DoS/经济激励约束(质押、押金、限制等)。
      • Paymaster:可为用户操作代付 gas,需在 EntryPoint 中质押并通过验证。
      • 工厂(Factory):负责账户的 CREATE2 创建(initCode)。
    • 关键流程(简化)
      1. 用户或 DApp 构造 UserOperation,并本地计算 userOpHash,使用账户支持的签名方案签名。
      2. 将 UserOperation 广播至 Bundler 专用内存池(非共识层 mempool)。
      3. Bundler 对 UserOperation 执行模拟(simulateValidation),筛除无效/恶意操作。
      4. Bundler 批量调用 EntryPoint.handleOps(userOps, beneficiary)。
      5. EntryPoint 逐个调用账户的 validateUserOp(以及 Paymaster 的 validatePaymasterUserOp),校验签名、nonce、押金等,并在必要时由账户补足缺失资金。
      6. 验证通过后,调用账户的执行逻辑(通常是 execute/executeBatch),完成目标调用。
      7. 执行结束后结算 gas,按规则向 Bundler 支付费用,并向受益地址转移奖励。
  • 算法描述
    • userOpHash 计算(概念性)
      • hash = keccak256(pack(userOp fields except signature) || address(EntryPoint) || chainId)
      • 账户使用自选签名方案对 hash 进行签名(可整合域分离/版本号以避免重放)。
    • 验证阶段(EntryPoint 驱动)
      • 模拟执行确保:账户/Paymaster 有足够押金或可补足资金;nonce 合规;签名有效;gas 估算合理;合约创建(initCode)可成功。
    • DoS 与经济安全
      • Paymaster/Factory/Bundler 要求质押与冻结期,约束垃圾操作与拒绝服务。
      • 预验证 gas、校验 gas 与执行 gas 分离计量,攻击者难以利用“免费模拟”消耗节点资源。
  • 技术实现
    • 账户合约需实现:
      • validateUserOp(userOp, userOpHash, missingFunds) 返回 validationData(可编码签名过期、聚合者等)。
      • 执行函数 execute/executeBatch,仅允许 EntryPoint 调用。
    • Paymaster 需实现:
      • validatePaymasterUserOp(...) 验证代付策略(额度、白名单、会话、链上余额/押金)。
    • 聚合签名(可选):
      • 对多笔 UserOperation 使用统一签名聚合器,减少验证开销(如 Schnorr/BLS 聚合)。

应用场景

  • 典型用例
    • 无助记词上手:新用户用邮箱/Passkey 创建账户,后台使用 WebAuthn 签名验证。
    • 免 Gas 上链:新手注册/首次交互由 Paymaster 赞助手续费。
    • 多步骤原子化:一次操作同时完成 Approve + Swap + Bridge。
    • 风控与企业合规:多签、额度、时间窗、审批流、地理/合规黑名单。
    • 游戏与社交 DApp:会话密钥在限时/限额内自动签发游戏内资产交易。
  • 系统集成
    • 前端
      • 使用 4337 SDK 或自研打包器构建 UserOperation 与签名流程。
      • 集成 Passkeys/WebAuthn 或移动端安全芯片签名。
    • 后端/基础设施
      • 自建或使用第三方 Bundler 与 Paymaster 服务。
      • 运营配置策略:赞助额度、代币支付路径(如允许用稳定币支付 Gas)。
    • 运维与监控
      • 追踪 UserOperation 状态、重试、失败回执原因(模拟失败/验证失败/执行失败)。
  • 实际案例(截至 2024 年的通用情况)
    • L2 原生/良好支持:StarkNet、zkSync 等在其 VM/执行环境内支持合约账户。
    • 以太坊主网与 OP Stack/Arbitrum 等 L2:广泛部署 EntryPoint(常见版本 v0.6),生态钱包与 SDK 已支持 4337 流程。
    • 生产钱包形态:多采用“模块化账户内核 + 插件策略(限额、会话、社交恢复)+ Paymaster”的组合。

关联概念

  • 相关术语
    • EOA vs 合约账户(CA):EOA 由私钥直接控制;CA 由代码逻辑控制。AA 使 CA 具备类似 EOA 的一等公民体验。
    • ERC-1271:合约账户签名验证标准接口 isValidSignature。
    • EIP-2771(元交易):通过受信转发器转发用户交易;AA 能覆盖更广泛的代付与验证模式。
  • 区别对比
    • ERC-4337 vs EIP-3074:前者无需协议改动,功能更全面;后者更轻量,增强 EOA 授权调用,但不直接提供 Paymaster、批处理等完整 AA 生态能力。
    • ERC-4337 vs EIP-7702:7702 允许在单笔交易中赋予 EOA 临时合约逻辑,简化迁移与兼容;4337 是完整的“替代交易管道”,具备专用内存池、Paymaster、聚合等。
    • Rollup 原生 AA vs 4337:原生 AA 更高效且更可定制,但链间兼容性各异;4337 统一了主网与多 L2 的接口与工具链。
  • 技术演进(截至 2024)
    • 4337 生态迭代 EntryPoint 合约版本与 SDK 支持,围绕 DoS 防护、模拟一致性、签名聚合与开发者体验持续改进。
    • 协议级提案(3074/7702)探索与 4337 的互补关系,长期目标是让账户高度可编程且与现有应用完全互操作。

实例说明

  • 代码示例(Solidity:极简 4337 账户,演示核心接口,非生产可用)

    • 要点:仅示范 validateUserOp/execute/onlyEntryPoint;省略升级、防重放域分离、模块化权限、聚合签名等生产要件。
    • 注意:接口签名与返回值需与当前使用的 EntryPoint 版本匹配(以下贴近 v0.6 范式)。
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.20;
    
    interface IEntryPoint {
        function depositTo(address account) external payable;
    }
    
    struct UserOperation {
        address sender;
        uint256 nonce;
        bytes initCode;
        bytes callData;
        uint256 callGasLimit;
        uint256 verificationGasLimit;
        uint256 preVerificationGas;
        uint256 maxFeePerGas;
        uint256 maxPriorityFeePerGas;
        bytes paymasterAndData;
        bytes signature;
    }
    
    library ECDSA {
        function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
            return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
        }
        function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
            require(signature.length == 65, "bad sig len");
            bytes32 r; bytes32 s; uint8 v;
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            require(v == 27 || v == 28, "bad v");
            return ecrecover(hash, v, r, s);
        }
    }
    
    contract SimpleAAAccount {
        using ECDSA for bytes32;
    
        IEntryPoint public immutable entryPoint;
        address public owner;
        uint256 public nonce; // 简化:单一 nonce
    
        modifier onlyEntryPoint() {
            require(msg.sender == address(entryPoint), "only EntryPoint");
            _;
        }
    
        constructor(address _entryPoint, address _owner) payable {
            entryPoint = IEntryPoint(_entryPoint);
            owner = _owner;
        }
    
        // 4337 调用:验证签名/nonce,并在需要时补足资金
        // 返回值 validationData:此处返回 0(表示无限期有效,无聚合器)。生产中应包含有效期/链ID域分离等。
        function validateUserOp(
            UserOperation calldata userOp,
            bytes32 userOpHash,
            uint256 missingAccountFunds
        ) external onlyEntryPoint returns (uint256 validationData) {
            // 1) 验证 sender/nonce
            require(userOp.sender == address(this), "wrong sender");
            require(userOp.nonce == nonce, "bad nonce");
    
            // 2) 验证签名(示例使用 ECDSA 与 EIP-191 前缀)
            address sigAddr = userOpHash.toEthSignedMessageHash().recover(userOp.signature);
            require(sigAddr == owner, "bad signature");
    
            // 3) 递增 nonce
            unchecked { nonce++; }
    
            // 4) 如果 EntryPoint 指示账户需要补足资金,则充值到 EntryPoint
            if (missingAccountFunds > 0) {
                entryPoint.depositTo{value: missingAccountFunds}(address(this));
            }
            return 0;
        }
    
        // 执行目标调用,仅允许通过 EntryPoint 调用(即 4337 执行阶段)
        function execute(address target, uint256 value, bytes calldata data) external onlyEntryPoint {
            (bool ok, bytes memory ret) = target.call{value: value}(data);
            require(ok, string(abi.encodePacked("execute failed: ", ret)));
        }
    
        // 可选:批量执行
        function executeBatch(address[] calldata targets, bytes[] calldata datas) external onlyEntryPoint {
            require(targets.length == datas.length, "len mismatch");
            for (uint256 i = 0; i < targets.length; i++) {
                (bool ok, bytes memory ret) = targets[i].call(datas[i]);
                require(ok, string(abi.encodePacked("batch item failed: ", ret)));
            }
        }
    
        receive() external payable {}
    }
    

    生产要点补充:

    • 增加 ERC-1271 isValidSignature 支持,便于 DApp 验证合约账户签名。
    • 支持可插拔的验证模块(多签、阈值、会话密钥、时间锁)。
    • 使用 CREATE2 工厂实现确定性地址创建;确保 initCode 在模拟中可成功。
    • 严格的域分离(chainId、EntryPoint 地址、版本号)避免跨链/跨入口重放。
    • 采用可升级模式(如 UUPS/Proxy)并加设安全延迟、守护人、应急暂停。
  • 配置示例(以 ERC-4337 客户端为例)

    • EntryPoint 地址:根据所选网络(主网或 L2)使用相应部署版本(常见为 v0.6 版本系列,具体以所用网络官方部署为准)。
    • Bundler RPC(常见方法)
      • eth_sendUserOperation
      • eth_estimateUserOperationGas
      • eth_getUserOperationByHash
      • eth_getUserOperationReceipt
    • Paymaster 策略
      • 白名单 DApp、限时免 Gas、代币支付路径(稳定币或项目代币),设置每地址/每天额度,防止滥用。
  • 操作示例(构造并发送 UserOperation,TypeScript 伪代码)

    import { ethers } from "ethers";
    // bundler 的 RPC 端点(非标准以太坊节点),由你自建或第三方提供
    const BUNDLER_RPC = "https://bundler.example.org";
    
    // 账户相关参数
    const entryPoint = "0xEntryPoint...";
    const sender = "0xYourSmartAccount"; // 若未部署,sender 为未来地址,需填写 initCode
    const chainId = 1; // 主网示例
    
    // 1) 构造待签名的 UserOperation(示例:调用某 ERC20 转账)
    const userOp = {
      sender,
      nonce: "0x0",
      initCode: "0x", // 未部署时填工厂合约 + calldata
      callData: "0x...", // encodeWithSelector(account.execute, token, 0, transferData)
      callGasLimit: "0x0", // 先置 0,由 bundler 估算
      verificationGasLimit: "0x0",
      preVerificationGas: "0x0",
      maxFeePerGas: "0x0",
      maxPriorityFeePerGas: "0x0",
      paymasterAndData: "0x",
      signature: "0x" // 先留空用于计算 hash
    };
    
    // 2) 请求 bundler 预估 gas
    const estimate = await fetch(BUNDLER_RPC, {
      method: "POST",
      headers: {"content-type": "application/json"},
      body: JSON.stringify({
        id: 1,
        jsonrpc: "2.0",
        method: "eth_estimateUserOperationGas",
        params: [ userOp, entryPoint ],
      })
    }).then(r => r.json());
    
    const filled = { ...userOp, ...estimate.result };
    
    // 3) 计算 userOpHash(由本地工具或 SDK 按 4337 规范打包并加入链 ID、EntryPoint)
    // 这里假设你有一个工具函数 getUserOpHash(userOp, entryPoint, chainId)
    const userOpHash = getUserOpHash(filled, entryPoint, chainId);
    
    // 4) 使用账户支持的签名方案签名(示例为 ECDSA)
    const wallet = new ethers.Wallet(process.env.PRIV_KEY!);
    const signature = await wallet.signMessage(ethers.getBytes(userOpHash));
    
    // 5) 发送 UserOperation
    const sendRes = await fetch(BUNDLER_RPC, {
      method: "POST",
      headers: {"content-type": "application/json"},
      body: JSON.stringify({
        id: 2,
        jsonrpc: "2.0",
        method: "eth_sendUserOperation",
        params: [ { ...filled, signature }, entryPoint ],
      })
    }).then(r => r.json());
    
    const uoHash = sendRes.result;
    
    // 6) 轮询回执
    const receipt = await fetch(BUNDLER_RPC, {
      method: "POST",
      headers: {"content-type": "application/json"},
      body: JSON.stringify({
        id: 3,
        jsonrpc: "2.0",
        method: "eth_getUserOperationReceipt",
        params: [ uoHash ],
      })
    }).then(r => r.json());
    console.log(receipt.result);
    
  • Paymaster 骨架(Solidity 片段,演示结构化校验)

    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.20;
    
    interface IEntryPointPM {
        function balanceOf(address account) external view returns (uint256);
        function depositTo(address account) external payable;
    }
    
    interface IPaymaster {
        function validatePaymasterUserOp(
            bytes calldata userOp,
            bytes32 userOpHash,
            uint256 maxCost
        ) external returns (bytes memory context, uint256 validationData);
    
        function postOp(
            uint8 mode, // PostOpMode
            bytes calldata context,
            uint256 actualGasCost
        ) external;
    }
    
    contract SimplePaymaster {
        IEntryPointPM public immutable entryPoint;
        address public owner;
        mapping(address => bool) public dappWhitelist;
        uint256 public perUserDailyQuota;
    
        modifier onlyOwner() { require(msg.sender == owner, "only owner"); _; }
    
        constructor(address _entryPoint) {
            entryPoint = IEntryPointPM(_entryPoint);
            owner = msg.sender;
            perUserDailyQuota = 1e18; // 示例额度
        }
    
        function validatePaymasterUserOp(
            bytes calldata /*userOp*/,
            bytes32 /*userOpHash*/,
            uint256 /*maxCost*/
        ) external returns (bytes memory context, uint256 validationData) {
            require(msg.sender == address(entryPoint), "only EntryPoint");
            // 在此解析 userOp,做白名单/时间/额度检查(略)
            // 返回 context 以便 postOp 结算
            return (abi.encode(msg.sender), 0); // validationData=0 表示有效
        }
    
        function postOp(
            uint8 /*mode*/,
            bytes calldata /*context*/,
            uint256 /*actualGasCost*/
        ) external {
            require(msg.sender == address(entryPoint), "only EntryPoint");
            // 在此结算赞助成本、记账或从金库扣款(略)
        }
    
        receive() external payable {}
    }
    
  • 开发与安全清单(项目落地要点)

    • 签名与重放
      • 在 userOpHash 中绑定 chainId、EntryPoint 地址与版本;对跨链/跨入口重放进行防护。
      • 使用不可变/可升级的域分离策略,避免升级导致签名失效或被滥用。
    • Nonce 设计
      • 支持多通道 nonce(如 channel << 64 | seq),实现并发与策略隔离(支付/会话/批量)。
    • 权限与策略
      • 插件化模块:多签、社交恢复、TOTP/时间锁、限额/白名单、会话密钥(限制目标合约/函数/调用频率/金额/过期时间)。
    • Paymaster 风控
      • 防薅羊毛:KYC/限额/黑白名单/签名前挑战;代币支付时需稳定的定价与预言机冗余。
    • 失败语义
      • 验证失败(不会消耗用户资金)与执行失败(可能已产生费用)需在前端明确区分与提示。
    • 兼容性
      • 与 ERC-1271、EIP-2612(Permit)、EIP-712(结构化数据签名)良好组合,提升 DApp 兼容性。
    • 运维
      • 监控 Bundler 可用性、模拟一致性与费率;多提供商冗余与路由;对 handleOps 失败做重试/降级。

结论

  • 账户抽象通过将“验证与执行”从固定协议规则解耦,使账户逻辑可编程,带来无助记词、免 Gas、批量原子化、细粒度权限与社交恢复等面向用户与企业的全新体验。对于以太坊生态,ERC-4337 提供了在无需共识层变更前提下的大规模落地路径;而协议级提案(如 3074/7702)与 L2 原生 AA 的持续演进,共同指向一个更通用、更安全、开发者体验更佳的账户层未来。上述示例与清单可作为项目开发的起步模板,实际生产需结合最新 EntryPoint 版本与链上部署信息进行对齐与加固。

示例详情

解决的问题

让区块链相关岗位(研发、产品、教育、市场、运营)以最低学习门槛,快速产出权威、清晰、可直接落地的术语解析内容,从而:

  • 快速搭建“术语百科”,统一团队认知与沟通口径
  • 将复杂概念转化为可用于文档、培训、汇报的成品文本
  • 通过可调节的解析深度与输出偏好,精准适配不同场景
  • 显著缩短检索与写作时间,提升跨部门协作效率
  • 以标准化、可复用的结构,持续沉淀企业知识资产,促进试用转化与付费价值显性化 推荐首批试用任务:白皮书术语章节速成、培训讲义模块成稿、技术博客/社区答疑模板、术语对比与案例化说明。

适用用户

区块链研发工程师

快速生成术语定义与工作机制说明,补齐技术文档与评审材料,统一代码注释与命名口径。

智能合约审计与安全工程师

梳理关键概念与差异点,补充操作示例与潜在风险说明,产出培训手册与审计前置材料。

Web3产品经理与项目负责人

一键产出白皮书术语章节与场景解读,对齐跨团队语言,支持路演答辩的概念问答准备。

特征总结

一键输入术语与深度偏好,立刻生成结构化解析,涵盖定义、原理、场景与案例。
自动将复杂概念转译为易懂语言,显著降低沟通成本与学习门槛,新人也能快速上手。
为技术文档与白皮书写作提供可复用分节模板与示例,减少改稿次数,提升交付效率。
给出关联概念对照与差异点,构建术语知识网络,避免误用,减少设计与实现返工。
结合真实用例与操作示例,帮助研发与产品快速落地,把抽象名词变成可执行步骤。
支持自定义解析深度与表达风格,课堂讲解、评审材料、社区分享一键切换。
内容基于权威资料与客观原则,自动规避投机话题,确保专业合规,便于对外引用。
以工作流程视角梳理技术要点,便于跨部门对齐思路,提升评审通过率与协作效率。
沉淀团队统一口径的术语定义模板,长期复用,支撑培训上新与多项目同步推进。

如何使用购买的提示词模板

1. 直接在外部 Chat 应用中使用

将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

2. 发布为 API 接口调用

把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

3. 在 MCP Client 中配置使用

在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

AI 提示词价格
¥20.00元
先用后买,用好了再付款,超安全!

您购买后可以获得什么

获得完整提示词模板
- 共 582 tokens
- 3 个可调节参数
{ 目标术语 } { 解析深度 } { 输出格式偏好 }
获得社区贡献内容的使用权
- 精选社区优质案例,助您快速上手提示词
使用提示词兑换券,低至 ¥ 9.9
了解兑换券 →
限时半价

不要错过!

半价获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59