본문 바로가기

블럭체인

Ethereum and Solidity: The Complete Developer's Guide - 7장

728x90

 

이번 장에 설명할 계약은 복권입니다.

 

추첨 같은 개념입니다.

 

아래는 두명의 사람이 있다고 예로 듭니다

 

 

이 두 사람은 우리 계약서로 상당한 액수를 보낼 수 있습니다.

 

 

몇 명이 계약하거나 대회에 참가하면 우리가 매니저라고 부르는 제3의 인물이 계약서에 우승자를 뽑으라고 해요

또한 한가지 분명히 하고 싶은 건 우승자를 뽑는게 매니저가 아니란거에요. 매니저가 계약서에 승자를 뽑으라고 했어요

그때 계약서는 참가자 명단을 검토해요

 

여기 있는 두 플레이어 중 한 명을 선택해 전체 상금 중에서 우승자에게만 돈을 보내겁니다.

 

그 시점에서 복권 계약이 재설정되고 새로운 선수 명단을 받을 준비가 된 다음 그 과정을 반복하는 거죠

기본적으로 자체 반복 계약으로 작은 복권이나 추첨 같은 걸 할 때 사용되는 거죠

 

계약 주변의 보안을 강화하는 방법을 훨씬 더 잘 이해하게 될 테니까요

 

 

lottery design에 대해서 이야기 할려고 합니다.

 

기본적인 수준에서 계약과 함계 저장하고자 하는 서로 다른 두 가지 정보가 있습니다.

 

우선 매니저 변수를 저장해야 할 것 같아요

이건 계약서를 작성한 사람의 주소입니다.

그래서 이 사람은 어느 시점에 계약서에 승자를 고르라고 말할 수 있는 능력이 있어요

계약서에 승패를 결정할 권한은 매니저에게만 있어요. 그 어떤 사람도 프로세스를 시작할 수 없어야 해요

따라서 계약을 만든 사람의 주소를 기록해 어떤 시점에서 계약에 승자를 선택하라고 말하는 관리자라는걸 확인 할 수 잇어요

 

추첨에 응모한 다양한 사람들의 명단도 저장해야 합니다.

계약서에 돈을 보낸 모든 사람의 주소입니다.

계약서에 돈을 보내는 순간 자동으로 가입된다는 뜻입니다.

 

 

 

 

기능에 관해서라면 두 가지가 꼭 필요합니다.

 

엔터같은 함수 입니다.

이 기능으로 누군가가 제비뽑기에 참여하고 상금을 타기 위해 트랜잭션을 보낼 수 있어요

 

엔터를 호출하려면 누군가 상당량의 이더리움를 보내는지 확인해야 해요

 

또 하나 필요한 기능은 승자를 고르는 거예요

이 기능으로 계약한 참가자 명단으로 우승자을 뽑고 상금 우승자에게 우승상금을 전송하는 거에요

 

계약의 기본행동 설명했습니다.

 

 

 

 

 

계약자 주소을 string으로 하기에는 부적절합니다. 이에 새로운 타입이 있습니다. address라는 타입입니다.

 

 

 

 

 

 

 

 

처음 게약하는 빈 배열입니다. 즉 그안에 주소가 전혀 없다는 거죠

그럼 다음 한두 명이 계약이나 추엄에 응한다고 상상해 볼 수 있습니다. 그리고 선수 배열에 그들의 추소를 추가하죠

승자를 고를때 주소 목록을 비우면 계약 상태를 초기화 할 수 있어요

처음 배포된 방식으로요 플레이어 명단을 비우면 계약 상태를 초기화하고 자동으로 다음 라운드를 준비할 수 있어요,

우리가 계약을 변경할 필요 없이요. 이제 플레이어 배여을 비워야 해요. 그렇게 하면 재분배할 필요 없이 게약을 무한대로 실행할 수 있죠.

당첨자에게 상금을 보낸 후 바로 제기능을 알려드리죠. 플레이어 배열을 재설정해서 새 주소를 입력할 수 있어요.