図書館のスマートコントラクト
このスマートコントラクトは本をアップデートして、付けることができます。そして本の使用可能をたしかめることができます。
qiita.solc
pragma solidity ^0.4.18;
このコードはsolidityのバージョン用です。
qiita.solc
struct Book {
uint id;
string bookTitle;
bool isBorrowed;
address borrower;
}
Bookストラクトを作りました。
Bookの識別子はidです。
Bookのborrowerは契約の所有者です。
qiita.solc
mapping (uint => Book) public book;
uint incrementBookId;
uintを本にマップしました。そしてBookのidをインクリメントします。
qiita.solc
function addBook(string _bookTitle) public {
incrementBookId++;
book[incrementBookId] = Book(incrementBookId, _bookTitle, false, address(0));
}
この関数は本を付けることができています。
qiita.solc
function borrowBook(uint _bookId) public {
require(book[_bookId].isBorrowed == false);
book[_bookId] = Book(incrementBookId, book[_bookId].bookTitle, true, msg.sender);
}
この関数は本のステータスをfalseに変更する。本のステータスがfalseの場合は、trueに変更します。msg.senderも契約の所有者です。
qiita.solc
function returnBook(uint _bookId) public {
require(book[_bookId].isBorrowed == true);
book[_bookId] = Book(incrementBookId, book[_bookId].bookTitle, false, msg.sender);
}
この関数は本のステータスをtrueに変更する。本のステータスがtrueの場合は、falseに変更します。
qiita.solc
function checkBookStatus(uint _bookId) public view returns(bool) {
return book[_bookId].isBorrowed;
}
この関数は書籍のステータスを確認しています。そして、trueとfalseに変更します。
qiita.solc
pragma solidity ^0.4.18;
contract LibraryContract {
struct Book {
uint id;
string bookTitle;
bool isBorrowed;
address borrower;
}
mapping (uint => Book) public book;
uint incrementBookId;
function addBook(string _bookTitle) public {
incrementBookId++;
book[incrementBookId] = Book(incrementBookId, _bookTitle, false, address(0));
}
function borrowBook(uint _bookId) public {
require(book[_bookId].isBorrowed == false);
book[_bookId] = Book(incrementBookId, book[_bookId].bookTitle, true, msg.sender);
}
function returnBook(uint _bookId) public {
require(book[_bookId].isBorrowed == true);
book[_bookId] = Book(incrementBookId, book[_bookId].bookTitle, false, msg.sender);
}
function checkBookStatus(uint _bookId) public view returns(bool) {
return book[_bookId].isBorrowed;
}
}