Solidity Interface & Canonical Declaration
function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external returns (uint256 amountA, uint256 amountB, uint256 liquidity)
向 ERC-20⇄ERC-20 交易对资金池注入流动性,并为流动性提供者铸造 LP 凭证代币。
理论基础执行 Gas: 140,000 ~ 210,000 gas
返回值类型: (uint256,uint256,uint256)
Calldata 调用数据 ABI 编码布局账本
| Calldata Offset | Type | Parameter Name | Semantic Role |
|---|---|---|---|
| 0x00 ~ 0x03 (4B) | bytes4 | Method ID (msg.sig) | addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256) 的 4 字节函数选择器 |
| 0x04 ~ 0x23 (32B) | address | tokenA | 交易对第一种资产地址 |
| 0x24 ~ 0x43 (32B) | address | tokenB | 交易对第二种资产地址 |
| 0x44 ~ 0x63 (32B) | uint256 | amountADesired | 期望注入的 tokenA 数量 |
| 0x64 ~ 0x83 (32B) | uint256 | amountBDesired | 期望注入的 tokenB 数量 |
| 0x84 ~ 0xa3 (32B) | uint256 | amountAMin | 最少注入的 tokenA 下限 |
| 0xa4 ~ 0xc3 (32B) | uint256 | amountBMin | 最少注入的 tokenB 下限 |
| 0xc4 ~ 0xe3 (32B) | address | to | 接收 LP 凭证的地址 |
| 0xe4 ~ 0x103 (32B) | uint256 | deadline | 截止时间戳 |
Keccak-256 密码学哈希推导链
标准 ASCII 签名字符串: addLiquidity(address,address,uint256,uint256,uint256,uint256,address,uint256)
完整 256 位 Keccak 哈希: 0xe8e337003368fc77c2595d117bb98b627132bf8afacee71c7334a2a489802c4c
截取前 4 字节 (Big-Endian): 0xe8e33700
EVM 运行时调度器汇编代码特征 (Dispatcher Opcodes)
// 1. Load the first 32 bytes of transaction calldata
[0x0000] PUSH1 0x00
[0x0002] CALLDATALOAD
// 2. Right-shift by 224 bits (0xe0) to isolate the 4-byte selector
[0x0003] PUSH1 0xe0
[0x0005] SHR
// 3. Match against target selector 0xe8e33700 and branch
[0x0006] DUP1
[0x0007] PUSH4 0xe8e33700
[0x000c] EQ
[0x000d] PUSH2 0x0050
[0x0010] JUMPI // Jump to implementation if matched