Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Missing state updates or optimizable state variables

オープン
#96 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
25/100
issue の種類
バグ
明瞭さ
説明が足りない
活発さ
停滞
技術スタック
solidity
領域
blockchain

調査の方向性

Start by reading dynamic-nft-3-services/SuperDynamicNFT.sol and ultimate-nft-repo/contracts/RandomIpfsNft.sol. Trace every use and assignment of callbackGasLimit, requestConfirmations, numWords, and s_tokenIdToBreed, then compare their roles with Solidity constant and immutable documentation. Done means each reported variable has a documented decision about whether it needs updates or a modifier change.

索引モデルが issue の本文から書いたものです。

説明

Hi, we are a research group on programming languages and software engineering. We recently conducted a systematic study on the causes, effects, and fixes of the inconsistent state update vulnerability in solidity. We are attempting to build a tool to detect bugs about state updates based on our findings. We have tried our prototype tool on some popular Github solidity repositories, and for your repository, we found that there are missing state updates or gas consumption that can be optimized.

The point is that when we declare a state variable in the contract, if the variable is not reassigned throughout the project, it may be a missed state update, including balance, order number, counter, contract status flag, etc. Of course, it may also be a state variable with special purposes that does not need to be changed, such as maximum supply, contract administrator address, configuration information, etc. When declaring these state variables that do not need to be changed, the constant or immutable modifier should be used as required, which will save gas.

For your repository, we found the following state variables that may need attention. If you are not forgetting to update them, perhaps you should declare them with the constant or immutable modifier:

SuperDynamicNFT.sol
State variable: callbackGasLimit, requestConfirmations, numWords

uint32 private callbackGasLimit = 2500000;
uint16 private requestConfirmations = 3;
uint32 private numWords = 6;

RandomIpfsNft.sol
State variable: s_tokenIdToBreed

mapping(uint256 => Breed) private s_tokenIdToBreed;

Do you find our results useful? Your reply and invaluable suggestions would be greatly appreciated, and are vital for improving our tool. Thanks a lot for your time!
(The reason why constant and immutable modifiers can save gas is that they do not consume storage space within the EVM. Their values are compiled directly into smart contract bytecode, which reduces the gas cost of storage. This storage method also avoids the SLOAD operation that reads EVM storage (costs about 100 gas in EVM). The main difference between constant and immutable variables is that the value of immutable variables can be set in the constructor, and immutable variables may cost more gas than constant variables. In addition, there is a slight difference in the variable types they support. The official documentation describes more details: https://docs.soliditylang.org/en/latest/contracts.html)

主要言語
Solidity
スター
243
フォーク
116
PR マージ指標
30日以内にマージされた PR はありません

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

smartcontractkit/smart-contract-examples のほかの issue

smartcontractkit/smart-contract-examples の issue をすべて見る

似ている issue

Blockchain の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。