2018년 11월 3일 토요일

간단한 BIM 기반 스마트 계약 개발하기

이 글에서는 BIM 기반 스마트 계약을 개발할 때, 어떤 방식으로 진행하는 지를 간략히 설명한다.

스마트 계약 개발 절차
개발은 보통 요구사항 정의, 분석, 설계, 개발 및 테스트로 진행된다.  요구사항 정의 시 사용되는 방법 중 하나가 유스케이스 분석이다. 유스케이스 분석을 통해, 실제 사용 사례와 시나리오를 정리한다.

유스케이스 정의
BIM의 경우 제일 큰 이슈 중 하나가 디지털 모델 변경이 다수 관계자간에 진행되어, 모델의 신뢰성 보장이 어렵다는 것이다. 신뢰성 보장을 위해서는 모델에 대한 이슈 발생과 처리 시 과정을 추적할 수 있어야 한다. 이슈 관리 이력을 분산원장(블록체인)에 저장해, 모델 변경 이력을 추적할 수 있도록 하고, 모델에 대한 신뢰성을 확보한다. 그래서, 유스케이스를 BIM 협업 상황에서 모델 변경 관련된 모델링 이슈 이력 관리로 한다. 모델 변경 시 관련 트랜잭션 정보는 다음과 같이 가정한다.

1. BIM file URL = resource_type://address+directory
2. Issue No = IS###
3. Issue reason = enum {element_collision, element_missing, invalid_data, etc}
4. Sender = email
5. Receiver = email
6. Date = YYYY/MM/DD
7. State = enum {open, progress, solved, close}

구현해 보기
앞의 유스케이스를 스마트 계약으로 구현해 보면 다음과 같다.

pragma solidity ^0.4.0;
contract BIM_modeling_issue {
    struct Issue {
        uint no;
        string url;
        uint reason;
        string sender, receiver;
        string date;
        uint state;
    };
    Issue[] issues;

    /// Create a issue
    function BIM_modeling_issue(uint8 num) public {
        issues.length = num;
    }

    function findIssueBySender(string sender) public Issue returns (Issue _is) {
        for(uint8 i = 0; i < issues.length; i++)
        {
            if(issues[i].sender == sender) { 
               _is = issues[i];
            }
        }
    }
}



BIM 모델링 이슈 데이터를 관리하는 Issue 구조체를 정의하고, issues 배열을 만든다. sender가 생성한 issue를 찾는 findIssueBySender라는 간단한 함수를 만들어 보았다. 이 스크립트는 Solidity 계약 개발을 지원하는 REMIX등에서 실행할 수 있다.


레퍼런스
Welcome to Remix documentation!
Create Your First Smart Contract In Ethereum With Ganache And Remix IDE
Build Your First Ethereum Smart Contract with Solidity — Tutorial


댓글 없음:

댓글 쓰기