В моем контракте есть функция, которая принимает 2 числа и дает случайное число между этими двумя. Могу ли я вызвать эту функцию внутри некоторых других функций в том же контракте?
Что-то вроде:
function point(min, max) public view returns (uint256) {
return /* A number betwwen "min" and "max" */;
}
function generateSVG() public pure returns (string memory) {
.
.
.
svg = string(abi.encodePacked(svg, "stroke-width='" , point(1, 5) , "' "));
.
.
.
}
Спасибо :D
Краткий ответ: иногда.
Длинный ответ:
В солидности указываем видимость функций и переменных состояния. Существует 4 вида видимости:
Если не указано явно, видимость по умолчанию равна internal
.
Переменная функции/состояния видна только контрактам, которые ее содержат, или наследует контракт, который ее содержит.
Может вызываться только другими контрактами
Любой контракт, независимо от того, содержит он код или нет, может вызвать
Только контракт, который объявляет его, может вызывать, а не те, которые его наследуют.
В Эфириуме нет настоящей случайности. Вы можете либо создавать псевдослучайные значения с блок-хэшем/высотой блока, либо использовать оракул, обеспечивающий истинную случайность, например Чайнлик.
Ага может быть. Но имейте в виду, что люди могут предсказать это значение
Я новичок в Blockchain, я пытаюсь создать коллекцию произведений искусства NFT со случайным SVG, если я правильно понимаю, узлы могут предсказать это случайное число, и с его помощью предсказать, на что будет похожа вся коллекция. Но они не могут получить доступ к балансу или каким-либо образом обновить контракт, верно? Спасибо за терпение.
Я думаю, вам нужно задать другой вопрос для этого, это не входит в рамки этого вопроса.
Потрясающе, хе-хе, спасибо за внимание.
Как мне проголосовать? Я здесь новенький. Я попробовал использовать стрелку вверх, но: "Спасибо за отзыв! Вам нужно как минимум 15 <a href = "/help/whats-reputation">репутации</a>, чтобы проголосовать, но ваш отзыв был записан".
«псевдослучайные значения с блок-хэшем / высотой блока» вы имеете в виду что-то вроде: keccak256 (abi.encodePacked (block.timestamp, block.difficulty, msg.sender)) ??