#javascript #ethereum #solidity
#javascript #ethereum #надежность
Вопрос:
У меня есть следующий контракт
pragma solidity >=0.4.21 <0.7.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract Sketch is ERC721 {
string[] public sketchs;
mapping(string => bool) _sketchExists;
constructor() ERC721("Sketch", "SKETCH") public {
}
function mint(string memory _sketch) public {
uint _id = sketchs.push(_sketch);
_mint(msg.sender, _id);
_sketchExists[_sketch] = true;
}
}
Но когда я запускаю тест truffle, я получаю сообщение об ошибке
Ошибка типа: разное количество компонентов с левой стороны (1), чем с правой стороны (0) «
По отношению к строке
uint _id = sketchs.push(_sketch)
Как бы мне обойти это? Должен ли я заранее инициировать эскизы? Как это будет выглядеть?
Любая помощь будет оценена
Ответ №1:
Поскольку solidity docs members-> push(x): push(x)
метод ничего не возвращает
push(x): динамические массивы хранения и байты (не строки) имеют функцию-член с именем push(x), которую можно использовать для добавления заданного элемента в конец массива. Функция ничего не возвращает.
Вы можете изменить код и получить идентификатор следующим образом:
sketchs.push(_sketch);
uint _id = sketchs.length - 1;