(九)web3面试题第二弹
1.erc20、erc721、erc1155还有其他哪些类型的合约 它们有啥区别?应用场景是啥?
ERC20–同质化代币,稳定币;项目方发行的token,gameFi游戏货币,治理代币,奖励代币挖矿空投等
ERC721(含 721A,批量铸造节省90%gas费)–数藏,链上凭证,游戏装备(非同质化)
ERC1155–游戏道具,可批量铸造和转账,半同质化资产(例如门票,同场次id不同座位不同id)
ERC165–接口检测,NFT 市场判断是否支持 721/1155,合约间安全检查,插件式合约设计
EIP-2612(Permit)–用户免手续费批准 token,Walletless onboarding(无钱包注册),Gasless 授权
ERC-2981(NFT版税)–NFT 创作者抽成,音乐 NFT 收益分配,内容 NFT 创作者收益
ERC-4626(Vault 金库)–DeFi 存款收益池,自动化收益策略,质押凭证代币,稳定币收益池(一句话总结: “把钱存进池子→拿 share” 的模式都是 4626。)
ERC-4337(Account Abstraction)–社交恢复钱包;不需要助记词的账户(World App(Worldcoin 钱包);Gas 代付,策略型钱包(自动化)
自动扣款、自动 DCA 买币;多签 / 权限控制钱包(企业钱包、DAO 多签)
⚡ 进阶(看方向)
ERC-4907(租赁 NFT)–游戏角色租赁(租别人帐号/角色一段时间);NFT 会员卡按天出租(类似「健身卡」的临时授权);共享资源(链上房间/设备使用权)
ERC-5234/5791(动态 NFT)–游戏角色升级(等级、装备、经验动态变更);活动徽章逐步进化(POAP → 达成条件 → 升级版 NFT);身份徽章(DID)(链上信用逐步提高);实时反映链上状态(清算、负债、抵押状态变化)
ERC-721C(受控可转移 NFT)–限制 NFT 在市场转卖(防倒卖);游戏内 NFT 只能留在游戏生态(游戏内 NFT 只能留在游戏生态);遵守监管要求(可冻结、可限制特定区域交易)
| 协议 | 一句话用途 |
|---|---|
| ERC20 | 同质化代币 |
| ERC721 | 独特 NFT |
| ERC721A | 低 gas NFT mint |
| ERC1155 | 游戏多资产 |
| ERC165 | 接口检测 |
| EIP-2612 | 离线授权 approve |
| ERC-2981 | NFT 版税 |
| ERC-4626 | DeFi 金库 |
| ERC-4337 | 智能钱包(AA) |
| ERC-4907 | NFT 出租 |
| ERC-5234/5791 | 动态 NFT |
| ERC-721C | 可控转移 NFT |
RC721 和 ERC721A 最大区别是什么?为什么 721A Gas 更低?
ERC721A 优化了批量 mint:多个 token 同时 mint 只更新一次 owner 数据。
通过 bitpacking、startTokenId 映射、减少存储操作降低 gas。
ERC1155 为什么比 ERC721 更适合 GameFi?
支持批量 mint 和 batch transfer(节省 80% Gas)。
一个合约支持多资产 ID(武器/皮肤/材料)。
可同时支持同质化、半同质化、非同质化资产
FT (ERC20) 和NFT(ERC721) 的区别?
FT是”商品货币” → 重在数量和流通
NFT是”数字产权” → 重在所有权和唯一性
混合型标准:ERC1155
1 | contract GameAssets is ERC1155 { |
2.自动做市商原理
AMM 不是在计算“真实价格”,而是用资金池的比例反映供需变化, 价格由数学公式(like x*y=k)自动调节。不依赖订单簿,而是让用户与合约交易,实现持续报价和流动性。
其本质是利用恒定乘积公式做市商,x*y=k
无常损失
承担的核心风险叫 无常损失(Impermanent Loss)。如果你提供了 ETH + USDC,当 ETH 涨价时:池子会自动卖 ETH(因为别人买)
你回收的 ETH 会比单纯持有 ETH 还少,损失相对价值就是无常损失;
1 | //初始价格:1 ETH = 100 USDC |
UniswapV2 和UniswapV3(区间做市)的区别?
Uniswap V2 是恒定乘积 AMM,流动性平均分布在全部价格区间,简单但资金效率低。
Uniswap V3 最大的创新是“集中流动性”,LP 可以选择一个价格区间提供流动性,从而大大提升资金利用率和交易深度。
此外,V3 提供多个手续费档位,LP 头寸是 NFT,不再是 ERC20,同样 V3 的预言机更高精度也更省 Gas。
简单来说,V2 易用但低效,V3 更复杂但效率极高,也更符合专业做市的需求
3.LaunchPad项目前期投资和获得收益的。这个份额是怎么计算的
Launchpad 的投资份额按比例分配:你占总池子多少,就给你多少项目代币。而收益取决于上线后的市场价格,而不是你投的金额本身
4.eip191 简单的扩容和算法
EIP-191 定义了一种对任意消息进行签名的格式,用来避免“把普通字符串当成交易签名”的安全问题
算法为任意消息体进行签名时,先讲消息转为字节,然后在前面拼上魔方字节(0x19)+版本号version(0x00或0x45),然后再对整个拼接的消息做keccak256,再用secp256k1私钥签名
1 | //假设有人要签 hello: |
一句话总结
EIP-191 定义了签名消息的基本格式:0x19 + version + data。
算法就是先拼接前缀,再 keccak,再 secp256k1 签名。
version 字节让它具备扩容能力,比如 EIP-712 就是 version = 0x45 的扩展版
eth_sign为何不安全?
eth_sign 没有把以下信息纳入签名:
- 链 ID
- 合约地址
- 协议版本
- 用户操作类型
导致:
- 同一签名可被在 另一个合约 / 链 使用
- 或者被重放在其他场景执行危险操作
例如:你在某个DApp登录时签的消息,在另一个完全不同的DApp也能用!
作用域隔离Domain Separator的作用
Domain Separator 是 EIP-712 里用来做签名“作用域隔离”的哈希,包含协议名、版本、链 ID、验证合约等信息。它能确保用户的签名与一个特定的 DApp 和链绑定,避免签名被攻击者拿到其他链或其他合约重放,因此是结构化签名最核心的安全保障机制
5.常见的docker命令及dockerfile脚本
6.现价委托,市价委托,计价委托,OCO?;
- 限价委托:指定价格,只有市场价格碰到你这个价位,才会成交
- 市价委托:没有指定价格,会以当前价格成交
- 计划委托:先别成交,等价格到了某个点,再自动帮我下单(你需要设置3个东西:触发价(Trigger)、委托方式(限价or市价)、委托价格(如果是限价))
- OCO 单(One Cancels the Other)——“止盈 + 止损 二合一”
✅ 一个止盈单 + 一个止损单
✅ 一个成交,另一个自动失效
tips: 还有行情这里不同分钟的分钟线,会有不同纬度的表和定时任务 需要看看行情对应的接口文档
| 类型 | 你控制什么 | 是否立即成交 | 主要用途 |
|---|---|---|---|
| 限价委托 | ✅ 价格 | ❌ 不一定 | 挂单、埋伏、吃回调 |
| 市价委托 | ✅ 速度 | ✅ 立刻 | 追涨杀跌、紧急平仓;价格到了 → 自动帮我下单(市价或限价) |
| 计划委托 | ✅ 触发条件 | ❌ 先不成交 | 突破追单、自动开仓 |
| OCO | ✅ 风控 | 取决于行情 | 止盈 + 止损 双保险 |
7.订单类型
单向止盈/止损(条件单)– 价格到了某个点 → 只触发一个方向的平仓(单边的计划委托(只止盈或只止损其一)
OCO(双向止盈止损)– 一个止盈 + 一个止损,成交一个自动取消另一个
chase(追逐限价委托,仅交割/永续)– 限价单会自动追着盘口跑(例如买入时自动追着卖1价格成交)
1 | 系统逻辑是: |
trigger —— 计划委托(条件触发),价格到了 → 自动帮我下单(市价或限价)
move_order_stop —— 移动止盈止损(跟踪止损)【行情往有利方向走 → 止损点自动往上抬】
例如:
1 | // 真实例子(经典跟踪止损) |
TWAP(Time Weighted Average Price) —— 时间加权委托(算法拆单),大单拆成小单,按时间慢慢成交 [降低冲击成本,避免砸盘或拉盘]
| 类型 | 中文 | 核心作用 | 主要用途 |
|---|---|---|---|
| conditional | 单向止盈止损 | 单边风控 | 防爆仓 |
| OCO | 双向止盈止损 | 完整风控 | 开仓后必用 |
| chase | 追逐限价 | 快速成交 + 控价 | 追涨杀跌 |
| trigger | 计划委托 | 触发后下单 | 突破 / 跌破 |
| move_order_stop | 移动止损 | 锁利润 | 趋势单 |
| TWAP | 时间加权 | 拆单不冲击市场 | 机构出货 |
7.撮合的流程需要熟悉;欧意的api文档,了解对应的一些交易策略.网格和信号交易
欧易API文档
冰山策略:
网格交易:
信号量交易:
8.交易所8大核心系统
1 | [ 客户端 / API ] - app |
8.撮合交易为啥会用disruptor技术
核心技术特性
1.无锁环形缓冲区(环形缓冲区)
中断器采用预分配的环形内存结构,通过消除锁竞争与回收压力,实现微秒级延迟的订单处理能力。在智能合约交易撮合引擎中,该技术可将订单匹配效率提升至百万级TPS,适用于高频交易场景。
2.事件驱动架构
基于发布-订阅模式,Disruptor将交易事件广播至多个并行消费者(如清算、风控模块)确保原子性与事务一致性,避免传统队列的阻塞问题。
例如,区块链交易平台可将链上事件异步推送至链下处理模块,实现混合架构的高效协同。
3.内存计算优化
通过对象复用与缓存行填充技术,中断器减少CPU伪共享现象,在虚拟货币合约交易中实现每秒600万笔订单的吞吐量(参考LMAX)外汇交易平台历史数据)
9.websocket通信的数据格式;Trade-server里面的业务渠道,订单和实时成交binaryMessage. 需要需要查一下对应的含义
Lbank
f12看下对应的心跳:
1 | { |
对应返回的Binary Message为压缩为字节的bytes {“pong”: 1733728193000},你发出去的是字符串({“ping”: 1733728193000}),但 服务器推送回来时选择了“二进制帧” (binary frame),所以收到的是 bytes压缩后的二进制帧
好处:压缩后能节省70–90%带宽,TPS更高
10.撮合的策略
1.价格优先
2.时间优先
3.成交量有限
4.按比例分配
5.最优五档/十档成交(Advanced Market Order)
一些 CEX 会把市价单限制为:
最优五档成交(best 5)
最优十档成交(best 10)
6.Iceberg(冰山单)【大单拆成多个小单显示,避免被吃单机器人盯上】
11.多线程问题,需要了解对应的线程阻塞问题以及如何解决多线程cpu爆满问题的排查处理
解决阻塞问题:减少等待、降低竞争、缩小范围、避免死锁、增加资源、加上超时
CPU爆满排查
12.了解nft对应的一些玩法以及相关实现
盲盒–1.上架盲盒;2.售卖倒计时;3.用户支付 USDT 或平台币购买;4.等待开放时间;5.“开盒”→后端给出随机NFT;6.NFT 进入用户账户,可交易/收藏
申购 – 用户提前报名参与 NFT 发行,最终按比例分配给参与者
空投
① 条件空投
满足条件即可领取:持有某 token;做任务(关注、转推、交易等);CEX 用户等级、交易量达标
② 治理空投 / 项目空投:项目方为了扩大影响力,将 NFT 直接发到用户账户。
③ 钩子空投(Retention Airdrop)
平台用来留住活跃用户:
如连续登录 7 天赠 NFT 节日卡
转赠 – 用户可以转给朋友;社群运营常使用(奖品发放);可以二级市场交易前,先“私下赠送”
预约 – 常用于 盲盒、空投、申购的预报名
13.ETCD热更新的原理
ETCD热更新本质是通过Watch机制监听Key/目录,当内容变化时实时推送事件,客户端收到后本地更新并刷新内存配置,无需重启
ETCD热更新原理 = Watch推送 → 内存更新配置 → 本地业务即时生效
核心3点:
Watch(长连接监听)
Revision(有序事件)
本地缓存(避免反复读 etcd)
14.状态机加乐观锁在订单支付在关单下的冲突场景,以及如何起作用的
15.常见的签名算法
16.合约怎么升级,如何监听线上事件?
- Title: (九)web3面试题第二弹
- Author: viEcho
- Created at : 2025-12-03 00:00:00
- Updated at : 2025-12-09 17:51:01
- Link: https://viecho.github.io/2025/1203/web3-interview2.html
- License: This work is licensed under CC BY-NC-SA 4.0.