🛠️
実践的Solidity開発ガイド
実践的 Solidity 開発ガイド
概要
Solidity は、イーサリアム仮想マシン (EVM) 上でスマートコントラクトを書くために設計されたプログラミング言語です。本ガイドでは、Solidity 開発の基礎から高度な概念まで、段階的に説明します。
Solidity 言語の基本
変数とデータ型
Solidity には、以下の基本データ型があります。
-
uint
: 符号なし整数 -
int
: 符号付き整数 -
bool
: ブール値 -
address
: イーサリアムアドレス -
string
: 文字列
変数は次のように宣言します。
uint myUint = 10;
関数
関数は、スマートコントラクトで動作を実行するコードブロックです。関数は次のように宣言します。
function myFunction() public {
// 関数のコードをここに記述
}
構造体と配列
構造体は、関連するデータをグループ化するのに使用します。配列は、同じデータ型の要素のリストを格納します。
struct Person {
uint age;
string name;
}
Person[] people;
イベント
イベントは、ブロックチェーンにログを記録するために使用します。イベントは次のように宣言します。
event MyEvent(uint value);
スマートコントラクトの開発
スマートコントラクトの作成
スマートコントラクトを作成するには、contract
キーワードを使用します。
contract MyContract {
// コントラクトのコードをここに記述
}
state 変数
state
変数は、コントラクトの永続的なデータを格納します。
state uint myStateVariable;
関数の実装
コントラクト関数を実装するには、function
キーワードを使用します。
function myFunction(uint param) public {
// 関数のコードをここに記述
}
イベントの発生
イベントを発生させるには、emit
キーワードを使用します。
emit MyEvent(value);
高度な概念
アクセス制御
Solidity では、関数のアクセスレベルを指定できます。
-
public
: 公開(外部からアクセス可能) -
private
: プライベート(コントラクト内でのみアクセス可能) -
internal
: 内部(コントラクトとその派生コントラクトからのみアクセス可能)
継承とポリモーフィズム
Solidity では、コントラクトは他のコントラクトから継承できます。継承により、派生コントラクトはベースコントラクトの機能を再利用できます。
contract BaseContract {
function baseFunction() public {
// ベース関数のコードをここに記述
}
}
contract DerivedContract is BaseContract {
function derivedFunction() public {
baseFunction();
// 派生関数のコードをここに記述
}
}
モディファイア
モディファイアは、関数の動作を変更するために使用できます。モディファイアは次のように宣言します。
modifier onlyOwner() {
require(msg.sender == owner, "Only the owner can call this function.");
_;
}
function onlyOwnerFunction() public onlyOwner {
// オーナーのみがアクセスできる関数のコードをここに記述
}
実践的な例
シンプルな投票システム
Solidity で簡単な投票システムを実装しましょう。
contract VotingSystem {
struct Candidate {
uint id;
string name;
uint votes;
}
mapping(uint => Candidate) candidates;
mapping(address => bool) hasVoted;
uint nextCandidateId;
function addCandidate(string name) public {
candidates[nextCandidateId] = Candidate({
id: nextCandidateId,
name: name,
votes: 0
});
nextCandidateId++;
}
function vote(uint candidateId) public {
require(!hasVoted[msg.sender], "You have already voted.");
candidates[candidateId].votes++;
hasVoted[msg.sender] = true;
}
function getWinningCandidate() public view returns (Candidate) {
uint winningCandidateId;
uint maxVotes = 0;
for (uint i = 0; i < nextCandidateId; i++) {
if (candidates[i].votes > maxVotes) {
winningCandidateId = i;
maxVotes = candidates[i].votes;
}
}
return candidates[winningCandidateId];
}
}
結論
このガイドでは、Solidity 開発の基礎と高度な概念を紹介しました。これらの概念を理解することで、強力なスマートコントラクトを構築し、ブロックチェーンアプリケーションを開発できます。
Discussion