Solidity 샘플 코드: 간단한 도서관 시스템

오늘은 간단한 스마트 계약을 작성했습니다.

코드



libraryContract.sol
pragma solidity ^0.4.25;
contract LibraryContract {
  struct Book {
    string title;
    bool isBorrowed;
    address holder;
  }

  Book[] bookCollection;

  function addBook(string _title) public {
    bookCollection.push(Book(_title, false, address(0)));
  }

  function borrowBook(uint _index) public {
    require(!bookCollection[_index].isBorrowed);
    bookCollection[_index].isBorrowed = true;
    bookCollection[_index].holder = msg.sender;
  }

  function returnBook(uint _index) public {
    require(bookCollection[_index].isBorrowed);
    require(bookCollection[_index].holder == msg.sender);
    bookCollection[_index].isBorrowed = false;
    bookCollection[_index].holder = address(0);
  }

  function getBookHolder(uint _index) public view returns (address) {
    require(bookCollection[_index].isBorrowed);
    return bookCollection[_index].holder;
  }

  function isBookAvailable(uint _index) public view returns (bool) {
    return !bookCollection[_index].isBorrowed;
  }
}

이 코드는 간단한 도서관 시스템. 책을 추가하고, 빌리거나, 반환할 수 있습니다.

시작과 도서 (책) 구조


pragma solidity ^0.4.25;
contract LibraryContract {
  struct Book {
    string title;
    bool isBorrowed;
    address holder;
  }

  Book[] bookCollection;
  ...
}

첫 번째 줄에 Solidity 버전을 넣습니다. 다음 줄부터 끝까지 스마트 계약은 "LibraryContract"로 묶입니다. 다음으로 'Book'이라는 struct에서 Book object란 무엇인가를 정의하고 있습니다. 'title'이라는 변수에 책 제목이 포함되어 있습니다. 누군가가 책을 빌리면 'isBorrowed'라는 변수는 true입니다. 'holder'라는 변수에 책의 임차인이 포함되어 있습니다. 그리고 "bookCollection"이라는 책 동위 열이 있습니다.

책을 덧붙여 빌려서 돌려줄게


pragma solidity ^0.4.25;
contract LibraryContract {
  ...
  function addBook(string _title) public {
    bookCollection.push(Book(_title, false, address(0)));
  }

  function borrowBook(uint _index) public {
    require(!bookCollection[_index].isBorrowed);
    bookCollection[_index].isBorrowed = true;
    bookCollection[_index].holder = msg.sender;
  }

  function returnBook(uint _index) public {
    require(bookCollection[_index].isBorrowed);
    require(bookCollection[_index].holder == msg.sender);
    bookCollection[_index].isBorrowed = false;
    bookCollection[_index].holder = address(0);
  }
  ...
}

첫 번째 함수에서 책을 추가할 수 있습니다. 다음 함수로 책을 빌릴 수 있습니다. 마지막 함수로 책을 반환할 수 있습니다. 책을 빌릴 수 있는지 반환할 수 있는지 확인합니다.

보충


pragma solidity ^0.4.25;
contract LibraryContract {
  ...
  function getBookHolder(uint _index) public view returns (address) {
    require(bookCollection[_index].isBorrowed);
    return bookCollection[_index].holder;
  }

  function isBookAvailable(uint _index) public view returns (bool) {
    return !bookCollection[_index].isBorrowed;
  }
}

이 보충의 함수는 "책의 임차인은 누구입니까?"와 "이 책을 빌릴 수 있습니까?"라는 질문에 대답합니다.

EthFiddle 에서 이 코드를 볼 수도 있습니다.

좋은 웹페이지 즐겨찾기