Я полный новичок ie по прочности, и я пытаюсь написать умный контракт с подтверждением работы для назначения.
I ha sh необходимые строки с одноразовым номером и проверьте, если первые 5 байтов дайджеста равны 0. Однако я не могу получить результат, так как используемый газ достигает предела газа. Что я могу сделать, чтобы вернуть правильный одноразовый номер?
Я использую Ethereum Studio IDE. Вот мой код:
pragma solidity ^0.5.10;
contract MyContract {
uint256 nonce;
bytes32 digest;
constructor() public {
nonce = 0;
digest = getDigest();
}
function findNonce() public returns (uint256) {
while (checkDigest() != true) {
nonce++;
digest = getDigest();
}
return nonce;
}
function getDigest() public view returns (bytes32) {
return bytes32(sha256(abi.encodePacked("blockchain-course.org:", "211", nonce)));
}
function checkDigest() public view returns (bool) {
bytes5 mask = 0xffffffffff;
bytes5 first5 = bytes5(digest & mask);
return first5 == 0x0000000000;
}
}
Изменил мой код на это:
pragma solidity ^0.5.10;
contract MyContract {
uint256 nonce;
bytes5 digest;
constructor() public {
nonce = 525;
digest = getDigest();
}
function findNonce() public returns (uint256) {
while (checkDigest() != true) {
nonce++;
digest = getDigest();
}
return nonce;
}
function getDigest() public view returns (bytes5) {
return bytes5(sha256(abi.encodePacked("blockchain-course.org:", "211", nonce)));
}
function checkDigest() public view returns (bool) {
// bytes5 mask = 0xffffffffff;
// bytes5 first5 = bytes5(digest & mask);
return digest == 0x0000000000;
}
}
При запуске его в Remix Online IDE произошел сбой браузера из-за нехватки памяти.