[Solidity]_유언장 스마트 계약

hanseungjune·2023년 2월 27일
0

비전공자의 IT준비

목록 보기
46/68
post-thumbnail

📌 코드

pragma solidity ^0.5.17;

contract Will {
    address owner;
    uint    fortune;
    bool    deceased;

    constructor() payable public {
        owner = msg.sender;     // 이 유서를 호출하는 사람
        fortune = msg.value;    // 전송하는 상속 이더의 양
        deceased = false;       // 유서 쓸때는 안돌아가셨음
    }

    // 이 유서를 호출하는 사람은 onwer만 된다
    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    // 사망했다면 실행하는 함수
    modifier mustBeDeceased {
        require(deceased == true);
        _;
    }

    // 가족들의 지갑 주소를 배열에 넣을 것이다.
    address payable[] familyWallets;
    // 주소를 정수형으로 변환시킨다.
    mapping(address => uint) inheritance;

    // 가족지갑에 지갑주소 넣고, 주소안에 얼마나 이더가 전송되는지 작성
     function setInheritance(address payable wallet, uint amount) public onlyOwner{
         familyWallets.push(wallet);
         inheritance[wallet] = amount;
     }

     // 각자의 지갑에 자동으로 이더가 전송되는 함수
     function payout() private mustBeDeceased {
         for(uint i=0; i<familyWallets.length; i++) {
             // transfer는 이더를 전송하는 메소드
             familyWallets[i].transfer(inheritance[familyWallets[i]]);
         }
     }

    // 유서가 발동되는 시뮬레이션 함수
     function hasDeceased() public onlyOwner {
         deceased = true;
         payout();
     }
}

설명은 주석을 통해서 이해하기.

hasDeceased 시뮬레이션 함수가 발동하면 다음처럼 트랜잭션이 발생한다. 2번째 계좌가진 사람에게 5이더, 3번째 계좌가진사람에게 25이더가 전송되었고, 이는 setInheritance 함수에 인자를 Deployed Contracts에서 각각의 주소와 금액으로 저장했기에 가능했다.

profile
필요하다면 공부하는 개발자, 한승준

0개의 댓글