题目
一个面板读取代币总量时把 uint256 交给 Number,在大额数值上出现精度丢失;另一个页面按 bytes20 手工编码地址字段,合约解出的参数与预期不同。请说明 ABI 编解码的规则与前端类型映射的注意点。
考察目标
- ABI 静态类型与动态类型的编码差异。
- uint/int、address、tuple 在前端侧的类型映射。
- 类型推导与运行时解码失败的处理。
说明整数、地址、动态类型与 tuple 在编解码上的差异,以及前端借助 ABI 推导类型时仍要处理的运行时边界。
一个面板读取代币总量时把 uint256 交给 Number,在大额数值上出现精度丢失;另一个页面按 bytes20 手工编码地址字段,合约解出的参数与预期不同。请说明 ABI 编解码的规则与前端类型映射的注意点。
ABI 规定了函数选择器与参数编码:选择器取自函数签名 keccak256 哈希的前四字节,静态类型按字长直接编码,动态类型以偏移与长度描述;地址在编码中占一个 32 字节字,整数按 256 位字处理。返回值按 ABI 结构解码。实现差异与工程取舍见深入回答。
发现这道题有问题? 反馈此题