Как определить возвращаемый тип массива структур в ethers.js ABI
На данный момент я получил эту аби:
const stakingAbi = [
'function getStakes(address user) external view returns (Stake[] memory)',
'function stake7Days(uint128 _amount) external whenNotPaused',
'function stake14Days(uint128 _amount) external whenNotPaused',
'function stake30Days(uint128 _amount) external whenNotPaused',
'function stake90Days(uint128 _amount) external whenNotPaused'
]
В
Stake
структура выглядит так:
struct Stake {
uint16 bonusPercentage;
uint40 unlockTimestamp;
uint128 amount;
bool withdrawn;
}
В настоящее время функция getStakes не работает, потому что Ethers не знает, что
Stake[]
есть, как мне определить это в ABI?
1 ответ
Указание структур в удобочитаемом формате ABI по-прежнему не поддерживается в ethers.js. См. https://github.com/ethers-io/ethers.js/issues/315 .
Вам нужно будет использовать формат JSON ABI: https://docs.ethers.io/v5/api/utils/abi/formats/#abi-formats--solidity
В качестве альтернативы вы можете обойти это, возвращая вместо этого кортеж массивов:
function getStakes(address user) external view returns (uint16[] memory, uint40[] memory, uint128[] memory, bool[] memory)