我正在研究Uniswapv2码,我被ABI我。https://github.com/Uniswap/v2-core/blob/master/contracts/UniswapV2Pair.sol
call方法中使用ABI,即使我们可以直接从接口调用transfer函数? 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');
}发布于 2022-01-13 17:42:37
您可以使用简短的形式,如您的例子,没有完整的ABI。
web3js的ABI是JSON形式。它用于简单调用所有已存在的函数和参数。如果您使用许多函数和参数-- JSON,则使用起来要好得多。
您使用了带有选择器的短黑版本--这不是很好的可读性代码样式。
发布于 2022-01-13 18:05:15
1-
我相信token.call(abi.encodeWithSelector(SELECTOR, to, value));令牌是另一个合同实例,并在合同中调用。call用于执行另一个合同的代码。
2-
ABI编码有关智能合同的功能和事件的信息。它充当EVM级字节码和高级智能契约程序代码之间的接口.要与部署在Ethereum区块链上的智能契约进行交互,外部程序需要ABI和智能契约的地址。ABI由以下部分组成:
·所有函数名
·投入和产出职能类型
所有事件名称及其参数
契约有十六进制表示和二进制表示:
二进制文件的十六进制表示。
https://stackoverflow.com/questions/70566931
复制相似问题