首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于ABI的几个问题

关于ABI的几个问题
EN

Stack Overflow用户
提问于 2022-01-03 14:02:47
回答 2查看 474关注 0票数 0

我正在研究Uniswapv2码,我被ABI我。https://github.com/Uniswap/v2-core/blob/master/contracts/UniswapV2Pair.sol

  1. 为什么在call方法中使用ABI,即使我们可以直接从接口调用transfer函数?

代码语言:javascript
复制
    bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));
.
.
.
    function _safeTransfer(address token, address to, uint value) private {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'UniswapV2: TRANSFER_FAILED');
    }

  1. 我读了很多关于ABI的文章,有些人说它是JSON格式,有些人说它是字节格式,我对此感到困惑。什么是对的?
EN

回答 2

Stack Overflow用户

发布于 2022-01-13 17:42:37

您可以使用简短的形式,如您的例子,没有完整的ABI。

web3js的ABI是JSON形式。它用于简单调用所有已存在的函数和参数。如果您使用许多函数和参数-- JSON,则使用起来要好得多。

您使用了带有选择器的短黑版本--这不是很好的可读性代码样式。

票数 0
EN

Stack Overflow用户

发布于 2022-01-13 18:05:15

1-

我相信token.call(abi.encodeWithSelector(SELECTOR, to, value));令牌是另一个合同实例,并在合同中调用。call用于执行另一个合同的代码。

2-

ABI编码有关智能合同的功能和事件的信息。它充当EVM级字节码和高级智能契约程序代码之间的接口.要与部署在Ethereum区块链上的智能契约进行交互,外部程序需要ABI和智能契约的地址。ABI由以下部分组成:

·所有函数名

·投入和产出职能类型

所有事件名称及其参数

契约有十六进制表示和二进制表示:

  • Contract.abi :这包含JSON格式的智能契约的ABI .

  • Contract.bin :这包含智能契约代码.

二进制文件的十六进制表示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70566931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档