EVM 合约与 AMM · XY=K 模型核心知识点
前言
本文档汇总本次全部对话核心知识点,从零打通:EVM底层账户体系、合约编译/部署/初始化逻辑、EOA与CA核心关系、合约权限本质、链上交易调用链路、XYK恒定乘积AMM模型全套原理、池子深度与滑点机制、EVM与Solana核心差异,修正99%新手误区,可永久留存学习。
一、EVM底层核心:两类账户(区块链一切交互的根基)
EVM公链(ETH/BSC/Polygon/Arbitrum等)仅存在两种账户,无第三种,所有链上行为全部基于二者实现。
1.1 EOA 外部拥有账户(用户钱包)
定义:由私钥/公钥加密生成的人类可控账户(MetaMask等钱包地址)。
核心特性(EVM铁律):
-
唯一可以主动发起链上交易的账户
-
拥有私钥,可签名交易、支付Gas
-
无任何代码、无合约逻辑、无持久化存储
-
自带Nonce(交易序列号,防重放攻击)
-
可持有链原生代币(ETH/BNB/MATIC)
1.2 CA 合约账户(部署生成的链上程序)
定义:由EOA部署交易生成的独立链上账户。
核心特性:
-
无私钥、无法主动发起任何交易,只能被动被调用
-
拥有独立Bytecode(合约代码)+ 独立Storage持久化存储
-
可持有原生代币、所有ERC20代币
-
无自主意识、无决策能力,仅执行预设代码逻辑
1.3 终极核心区别(必背)
-
EOA = 交易发起者(唯一入口)
-
CA = 逻辑执行者(被动响应)
-
所有链上操作(部署、转账、调用合约、Swap)源头一定是EOA
二、合约完整生命周期:源码 → 编译 → 部署 → 初始化 → 调用
2.1 编译阶段
Solidity$.sol$源码经过编译器处理,生成两份核心文件:
-
Bytecode:上链的机器指令,区块链仅存储该数据(无源码)
-
ABI:函数接口说明书,用于前端/脚本调用合约,不上链
2.2 部署阶段(特殊交易)
部署合约 = EOA发起一笔特殊交易(交易To地址为空,Data为Bytecode)
部署全过程:
-
EOA签名交易、支付Gas
-
链生成全新唯一合约地址(CA)
-
将Bytecode写入该合约账户
-
自动且仅执行一次Constructor构造函数(初始化)
-
初始化数据永久写入合约Storage,部署完成
2.3 初始化核心规则
-
部署瞬间
msg.sender= 部署者EOA钱包地址 -
代币初始总量、初始归属、管理员地址,全部在构造函数定义
-
代币数量无技术上限(uint256极大值域),开发者可任意设定
-
链不审核代币总量、规则,仅执行代码读写存储
三、EOA与合约的归属、权限、交互关系(核心解惑)
3.1 底层无天然归属
EVM底层不存在合约归属、默认管理员。合约部署后是独立账户,和部署者EOA无任何底层绑定关系。
3.2 权限完全由代码人为定义
默认规则:无代码权限限制 = 全网所有EOA完全平等
精准结论:
-
不写owner管理员、不写权限校验、不写税费逻辑
-
部署完成后,部署者和所有普通用户调用权限完全一致
-
唯一差异:初始代币全部铸造在部署者EOA(资产差异≠权限差异)
3.3 两种人为制造的特权(仅代码控制)
-
管理员权限:手动存储owner地址,通过
require(msg.sender==owner)限制专属操作 -
税费/分润逻辑:代码内置交易抽成,自动转账至部署者EOA
3.4 部署者与合约的全程关系总结
-
部署阶段:必须依赖部署者EOA,唯一关联期
-
部署后常态:无特殊代码则完全无关,用户交互链路不经过部署者
四、链上调用链路终极规则(彻底破除误区)
4.1 普通用户调用链路
用户B$EOA$ 调用 A部署的合约C1:
正确链路:B → C1
错误链路:B→A→C1(完全不存在)
部署者A仅为历史部署记录,不参与、不中转、不校验本次交易。
4.2 两个核心变量区分
-
msg.sender:直接调用当前合约的地址(EOA/合约均可) -
tx.origin:整笔交易最源头的EOA(永远是用户钱包,不会是合约)
4.3 多层合约调用链路
B调用C1,C1内部调用C2:B→C1→C2
-
C1视角:msg.sender = B
-
C2视角:msg.sender = C1,tx.origin = B
五、XYK恒定乘积AMM模型(DEX池子核心数学)
5.1 核心公式与定义
公式:x * y = k
-
x:池子内代币A储备量
-
y:池子内代币B储备量
-
k:恒定常数(核心稳定因子)
-
瞬时价格:
P = y / x
5.2 两种操作对k的影响(最核心考点)
1. 普通用户Swap兑换(交易)
-
资产此消彼长(x增y减 / x减y增)
-
无手续费模型k绝对恒定
-
价格随供需自动涨跌,产生滑点
-
仅改变比例,不改变池子总资金体量
2. LP添加/移除流动性(增减池子本金)
-
添加流动性:x、y等比例同步增大 → k变大 → 池子加深、滑点降低
-
移除流动性:x、y等比例同步减小 → k变小 → 池子变浅、滑点升高
-
价格不变,仅改变池子深度
5.3 池子深度本质
池子深度 = k值大小
-
k越大:流动性越深,大额交易滑点越小,币价越稳定
-
k越小:流动性越浅,小额交易大幅插针、涨跌剧烈
-
滑点只和池子k有关,和代币总发行量无关
5.4 池子初始化逻辑(必懂)
-
空Pair池子创建后,reserve0、reserve1 = 0,k=0,无法交易
-
LP首次双币注入,才会生成初始x、y、k,激活交易功能
-
XYK模型必须双资产,无法单币建池交易
六、EVM架构与Solana核心差异(破除跨链误区)
6.1 EVM(ETH/BSC)架构
-
逻辑+存储绑定:一个池子 = 一个独立Pair合约
-
Factory工厂批量部署新合约生成交易对
-
每个Pair独立存储x、y、k,完全隔离
6.2 Solana架构
-
逻辑与存储分离:一套AMM程序全网复用
-
创建池子仅新建存储账户,不部署新代码
-
XYK数学模型通用不变,仅工程实现不同
七、高频核心误区汇总(100%避坑)
-
❌ 误区:部署者拥有合约特权 ✅ 纠正:无代码定义则全网平等
-
❌ 误区:用户调用合约需要经过部署者 ✅ 纠正:链路直接用户→合约
-
❌ 误区:Swap交易会改变k值 ✅ 纠正:仅LP加减流动性改变k
-
❌ 误区:代币总量决定滑点 ✅ 纠正:仅池子k值决定滑点
-
❌ 误区:合约可以主动发起交易 ✅ 纠正:仅EOA可发起交易
-
❌ 误区:Factory是合约通用部署方式 ✅ 纠正:仅AMM批量建池使用,普通合约直接部署
八、终极极简记忆口诀
-
EOA是人可发起,CA是程序只响应
-
部署靠EOA签名,初始化仅跑一次构造
-
权限全靠代码写,默认人人都平等
-
交易链路不绕人,部署历史不参与
-
Swap换手k不变,LP注资k加深
-
滑点只看池子k,无关总量和市值
(注:部分内容可能由 AI 生成)