У меня есть контракт со следующим отображением:
mapping (uint16 => uint256[]) public barLengthToBarIndexForSale;
Каков наилучший способ получить длину массива для данного ключа во внешнем интерфейсе с помощью трюфеля?
Что-то вроде этого...
barERC721Inst.barLengthToBarIndexForSale(5).length;
... кажется, не работает.
Использование дополнительной функции в моем контракте для получения длины...
function getBarLengthToBarIndexForSaleLength(uint16 _length) external view returns (uint) {
return barLengthToBarIndexForSale[_length].length;
}
... кажется, тоже не работает :(
Я попытался вызвать его на интерфейсе следующим образом:
barERC721Inst.barLengthToBarAmtForSale.call(5)
и
barERC721Inst.barLengthToBarAmtForSale(5)
оба выдают ошибки.
Любая помощь приветствуется.
Вы можете просто написать функцию-получатель в своем контракте, которая возвращает длину массива. Обязательно сделайте это view
.
function getSize(uint16 key) public view returns (uint){
return barLengthToBarAmtForSale[5].length
}
если это невозможно (контракт уже развернут), вы можете «попробовать» перебрать массив (это не требует газа), пока не получите ошибку. Это немного грязно, но должно работать.
Надеюсь, поможет.
хорошая вибрация
_length
to_index
. Кроме того, вам нужно будет объяснить, что именно «кажется, тоже не работает».