很多区块链浏览器会显示:
Contract;
Read Contract;
Write Contract;
Function。
对于普通用户来说,这些内容看起来像程序员专用界面。
其中一个核心概念就是ABI。
ABI是什么?
ABI全称是Application Binary Interface。
在智能合约场景中,可以把它理解为:
“告诉外部程序如何与这个合约交互的接口说明。”
它描述了合约有哪些函数、参数以及返回值等信息。
为什么钱包需要ABI?
当用户在DApp里点击:
Deposit;
Withdraw;
Stake;
Claim。
这些按钮最终通常需要调用智能合约函数。
前端需要知道应该如何构造调用数据。
ABI就相当于一份接口说明。
ABI和智能合约源代码一样吗?
不完全一样。
源代码是开发者编写的程序。
ABI更像是外部调用这个程序时需要知道的接口信息。
一个合约即使源代码没有公开,也可能存在可以使用的接口数据。
为什么区块浏览器能够显示“Read Contract”?
如果合约代码已经被识别或者验证,浏览器可以根据ABI把函数整理成用户更容易理解的形式。
例如:
查看余额;
查看管理员;
查看Token名称。
Write Contract为什么更危险?
Read通常是读取链上状态。
Write则可能改变链上状态。
例如:
转账;
授权;
质押;
铸造;
修改配置。
所以普通用户看到Write Contract页面时,需要更加谨慎。
为什么不能随便调用Write Contract?
因为你可能直接与智能合约交互。
如果不知道参数含义,可能造成资产损失或者执行意外操作。
尤其是:
approve;
transfer;
setApprovalForAll;
withdraw。
这些函数都可能涉及真实资产。
ABI对imToken用户有什么实际帮助?
虽然普通用户不需要自己编写ABI,但了解这个概念以后,可以更容易理解:
DApp按钮;
钱包签名;
智能合约调用;
区块浏览器。
之间到底是什么关系。
为什么同一个Token可以有不同函数?
因为Token本身也是由智能合约实现的。
不同Token合约可以拥有不同的扩展功能。
所以不能看到某个函数名称,就默认所有Token都完全一样。
判断合约时为什么还要看源代码验证?
ABI只能帮助理解接口。
真正判断合约逻辑,还需要结合:
源代码;
权限;
事件;
历史交易;
项目说明。
因此,ABI只是理解智能合约的一扇窗口,而不是完整安全证明。

