Как определить возвращаемый тип массива структур в 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)
Другие вопросы по тегам