[이더리움] 블록과 계약의 연결(스마트 컨트랙트)

in #kr7 years ago (edited)

대문1.jpg

이더리움을 공부하기 시작하면서 스마트 컨트랙트를 어떻게 설명해야하는지 고민에 빠졌었습니다.

그냥 정말 쉽게 컴퓨터 프로그래밍으로 만든 계약이야 하고 끝낼 수는 없으니까요.

그래서 한마디를 붙이면? 조건이 맞으면 자동실행되고 강제로 되는 거라 무를 수 없어.

또 붙이면? 프로그래밍으로 모든 것을 구현할 수 있는 튜링 완전한 언어로 되어있어서 무슨 계약이든 만들 수 있어

이렇게 설명하면 안 하니만 못하겠죠. 어디에 사용하는지도 설명해야하고, 어떻게 굴러가는지도 설명해야하고, 어떻게 생겨먹은 놈인지도 설명해야하고.. 그러다 보니 이것 저것 찾아서 읽기만 하게 되고..흐음..

그러다 문득 생각이 났습니다. 튜링 완전한 언어를 설명하는데 예시로 자주 나오는 것이 스마트 폰 입니다. 거의 모든 것을 할 수 있다는 의미로 자주 거론되죠.

그럼 저희가 거의 손에서 떼지 못하는 스마트폰의 정의를 내리면??? 글쎄요... 전 못하겠네요.ㅎ

제가 너무 크게 생각한 거 아닌가 싶어서 적어봤습니다. 그냥 궁금했던 것부터 쉽게 가자 싶어서.ㅎ
조금씩 내용을 모아서 스마트 컨트랙트가 이런거다 말할 수 있음 좋겠네요.

그래두 시작은 해야하니 우선 스마트 컨트랙트가 조건을 달아서 그 조건이 맞으면 다음 행동을 하게 하는 계약이라고 간단히 이해하고 넘어가보겠습니다.

이더리움을 알게 되면서 제가 제일 궁금했던 것은 스마트 컨트랙트가 블록체인에서 어떻게 구현되는 가 하는 것이었습니다.

비트코인은 당사자끼리의 약속에 따라 거래가 이루어 집니다.

비트 거래.jpg

A와 B가 자동차 계약을 하면서 A가 그 자동차의 댓가로 5BTC를 주겠다고 하면 (그 차 비싸네요..) A는 자신이 보내는 5BTC에 관한 거래 트랜잭션을 블록에 포함시키고 B는 그 거래가 승인되는 순간 5BTC를 받을 수 있었습니다.
거래를 담은 블록 하나로 끝나는 것이었죠.

그런데 스마트 컨트랙트는 여러가지 조건을 담고 그 조건이 충족되면 실행되게 만든 것입니다.

위에 예를 가져와서 조건을 만들어 보면,
B가 A에게 계약금조로 1BTC를 요구합니다. A는 B에게 계약금 1BTC를 보내 자동차를 다른 사람에게 못 팔도록 계약을 하고 B에게 중고차가 아니라는 품질 보증이 안되면 계약을 파기한다는 조건을 달았습니다. 중고차가 아니라면 A가 나머지 4BTC의 잔금을 내고 자동차를 사게 되겠죠.

이 모든 내용을 하나의 블록에 담아 한번에 처리할 수는 없을 것입니다. 만나서 한꺼번에 처리하고 블록에 신고하는게 아니라면요.
블록체인이 시간순으로 쌓이는 것이니만큼 저 계약 내용도 하나씩 시간 순으로 쌓이게 됩니다.

차를 거래하기로 서로 합의를 하는 과정부터 시작할 수 있겠지만, 여기선 위에 조건만 이해해 보겠습니다.

우선 B는 A에게 계약금을 요구하는 메세지를 블록에 포함시킵니다.

블록201.jpg

A가 동의를 한다면, A는 자신이 가진 1BTC 보내면서 중고차가 아니라는 품질 보증을 요구하는 계약 내용을 다음 블록에 포함시켜 보내겠죠.

블록 202.jpg

비트코인에서는 트랜잭션의 의미가 비트코인의 움직임만을 담는 것이었습니다. 그래서 TXID라고 하면 그 안에 비트코인 거래에 관한 내용을 담고 있었죠. 하지만 이더리움 블록체인에서는 트랜잭션 안에 메세지 자체만 보내거나 저 1BTC라는 화폐의 전송과 더불어 계약 내용을 담을 수 있습니다. 위에 경우에서 계약금을 요구하거나, 계약금을 주면 다른 사람에게 차를 팔지 못한다 등의 내용이 되겠죠.

비트코인의 지갑과 다르게 이더리움에는 Account라는 개념이 있습니다. 이 계정(Account)에는 비트코인의 지갑과 같이 화폐의 움직임을 다루는 계정(External Owned Account)과 계약 내용을 다루는 계정(Contract Account)이 따로 있는데, 이 두 계정에서 만든 내용이 트랜잭션에 같이 들어가게 됩니다.
이 계정의 개념이 비트코인과 차이가 나는 중요한 부분입니다. 우선 블록체인에 담기는 과정에 대해서 보고 있으니 이 계정(Account)에 대한 내용은 다음 포스트에서 다루겠습니다.

계약으로 돌아가서, B가 A가 보낸 계약 내용에 동의를 한다면 B는 품질 보증서를 보내는 트랜잭션을 다음 블록에 포함시킬 것입니다.

블록 203.jpg

그리고 A가 그 내용에 만족한다면 나머지 잔금 4BTC를 보내는 트랜잭션을 만들어 블록에 담을 것입니다. 그러면 B가 4BTC를 받고 A는 자동차를 받아 계약이 끝나겠죠.

블록 204.jpg

차를 받는 건? 하실지 모르겠지만.ㅎ 단순화 시켜서 블록의 담기는 과정을 살펴봤습니다.

위와 같이 블록에 담기기만 하면 계약이 안전하게 성사되는 게 아니겠죠. 중간에 계약을 어길 수도 있으니까요.

비트코인 블록체인에서도 봤듯이 블록체인은 전 블록의 해시를 연결하여 체인을 만드는 것이고 그 과정이 제 3자의 신뢰가 필요없게 만들어줍니다. 이더리움 블록체인도 마찬가지로 전 블록의 해시를 새로 생성하는 블록에 포함시킵니다. 여기서 다른 점이 있다면 비트코인은 비트코인의 이동 과정만을 담는다면, 이더리움은 계약의 내용과 진행과정이 담긴다는 것입니다. 위의 예와 같이 계약이 성사되어 가는 과정이 전 블록에 해시 형태로 담겨있으니 변경할 수 없는 계약이 되는 것이죠.
비트코인이 화폐의 흐름을 블록 해시로 연결하여 이중지불문제나 신뢰성 문제를 해결했다면, 이더리움은 계약의 내용까지 블록 해시로 연결하여 자동차 딜러와 같이 신뢰할 수 있는 제 3자가 필요없는 계약을 만든 것입니다.

처음 이더리움을 접하면서 Dapp(Decentralized Application)이라는 개념이 잡혀있지 않아 이 부분이 상당히 궁금했습니다.
제가 아는 앱은 애니팡 같은 거였거든요. 접속하면 제 핸드폰으로 즐길 수 있는.
그래서 스마트 컨트랙트를 Dapp에서 구동시키고 그 결과를 블록체인에 올리는 건가 했습니다. 댑이 블록체인 위에서 운용되는 것이니 만큼 결론적으로는 맞는 이야기인데, 제가 잘못 이해한 것은 Dapp을 내 핸드폰에서 구동시키는
게 아니라는 것과 계약 내용 하나하나가 트랜잭션이 된다는 것이었습니다.

이렇게 모든 계약 내용이 하나의 트랜잭션을 이루고 그것을 블록에 다 담아야하는데 수많은 트랜잭션을 일으키는 댑들이 우후죽순 생기면 저걸 우찌 감당하지라는 생각이 드시죠? ㅎㅎ(또 저만 그런가요...)
댑 하나에 트랜잭션 문제가 생기던 이더리움의 스케일링 문제가 새삼 심각하게 느껴지네요.

다음 글에서는 위에 말씀드린 계정(Account)과 비트코인과는 다른 트랜잭션의 구성에 대해서 글을 써보겠습니다.
확실히 고민만 하는 것보다 글을 쓰니 방향이 보이네요.

긴 글 읽어주셔서 감사합니다~~ 틀린 점 있으면 꼭 댓글로!! 도와주세요~~



마지막으로 동계올림픽도 다가오는데,
너무 바빠서 스트레스 많이 받으시고 고생하시는 제 선생님을 위해 동영상 하나 올립니다.

근데 바빠서 못 보시면 우짜죠?ㅎ

흐음 유튜부 올리면 저작권에 문제가 되나요?..

Ourselves 캠페인
셀프보팅을 하지 않고 글을 올리시고
ourselves 테그를 달아 주시면
많은 분들이 관심 가져 줄꺼에요

Sort:  
@feyee95님 안녕하세요. 겨울이 입니다. @joeuhw님이 이 글을 너무 좋아하셔서, 저에게 홍보를 부탁 하셨습니다. 이 글은 @krguidedog에 의하여 리스팀 되었으며, 가이드독 서포터들로부터 보팅을 받으셨습니다. 축하드립니다!

가상 화폐와 관련된 설명 글 중에 가장 이해가 쉬웠습니다. 특히 실제 계약을 사례로 설명해 주시니 확 와닿네요. 잘 읽고 갑니다.

아공 그렇게 말씀해주시니 몸둘 바를 모르겠네요... 정말 감사드립니다. ^^
어떻게 글을 써야하는 지 몰라서 제가 우선 이해하자고 쓴 글이라.ㅎ
저두 찾아뵙고 인사드릴게요~~ 지식 욕구를 자극하는 글들이 엄청 많네요.. ^^

항상 비트코인을 중심으로 생각하다 이더리움을 축으로 생각을 옮겨보니 내용과 진행 과정이 담긴다는 차이를 확인하게 되네요. 워낙 알기 쉽게 이야기해주셔서 가볍게 두 번정도 쭈루룩 읽으니 이해가 되었습니다. 감사합니다 feyee님~~

ㅎㅎ 월드님 여행 잘 다녀오셨나요? 일본가서 밋업도 하셨던데..이동중에 봐서 댓글도 못달아드렸어요..죄송 ^^
여기저기 정말 활동적이신 게 넘 보기 좋아요. ^^ 분명 그 마인드면 새로 하신다는 것도 잘 하실 듯!!!
새해부터 효도도 하셨는데 보답이 있겠죠 ㅎㅎ
감사합니다~~ ^^

feyee님! 여행 정말 즐겁게 잘다녀왔습니다:) 좋은 말씀 정말 감사합니다 저도 제가 할 수 있는 걸 하면서 스팀잇에 기여할 수 있도록 노력해보려고 합니다ㅎㅎ화이팅입니다!!좋은밤되세요~

쉽게 쏙쏙 알려주셔서 감사합니다.
귀에 솔솔 들어오네요 ㅎㅎ

쉽다고 해주셔서 감사드려요.ㅎㅎ 항상 글이 어려워져가지고 고민했었거든요.ㅎ
찾아주시구 댓글 남겨주셔서 감사하구 저두 찾아뵐게요~~
좋은 밤 꿀잠 되세요~~ ^^

예시를 잘 들어 설명해 주셔서 머리에 쏙쏙 들어옵니다. 감사합니다. 외부링크 사용은 저작권 문제 없지 않나요?

아 그렇군요.. 글에 영상이 바로 떠서 문제가 되는게 아닌 가 싶어서 ^^
가르쳐주셔서 감사합니다~~
글 실력이 짧다보니 예 만드는 게 항상 제일 힘드네요.ㅎㅎ
좋게 봐주셔서 감사해요 ^^
에니그마 글 정말 재밌게 봤는데.. 팔로우를 못했었네요..에공
포스팅 가서 인사드리고 팔로우 할게요~~ ^^ 애픽스에도 관심이 많답니다.ㅎ

이더리움에서 가스는 언제 사용하는건가요?

가스는 저렇게 트랜잭션을 만들 때 마다 사용되요. 그 트랜잭션이 굴러가게 하는 연료라고 생각하심 편할 듯 하네요.ㅎ 또 다른 사용처도 있는데 다음에 가스 관련해서도 포스팅 올리겠습니다. ^^
찾아주셔서 감사드려요~ ^^ 저두 찾아뵙고 인사드릴게요 내일.ㅎㅎ

빠른 답변 감사합니다. 트렌젝션 어디에 가스 정보가 저장되어 있는지. 그리고 가스가 소비되고 나면 잔고가 줄텐데, 현재 값은 어디게 기록되어 있는지 이런 것이 궁금합니다. 위 설명을 보면 가스 보시 행위도 모두 별도 transaction으로 기록되는 것 같은데, 이렇게 되면 이더리움 블럭체인은 금방 capacity가 over될 것 같아서요.

저두 공부중이라 정확히 말씀드리긴 힘든데...
트랜잭션을 만들면서 최대한 쓰려고 하는 가스 리미트를 정하고 가스로 쓰이는 ether와 같이 보내는 것으로 알고 있습니다. ^^ 이렇게 설명드리면 이해하시기가 어려우실 텐데... 제가 제대로 공부해서 포스팅 올리겠습니다. 답변을 제대로 못해드려 죄송합니다~~ ^^

아닙니다. 덕분에 많이 배우고 있습니다. 가스가 어떻게 기록되고 업데이트 되는지 궁금해서요.

Amazing
UpVote / Resteem / Follow @noumanhafez
Thanks for visiting!!
Please Upvote, Share, and Follow!! @noumanhafeez
THANKS SO MUCH!!
방문해 주셔서 감사합니다 !!
Upvote, 공유 및 팔로우하십시오! @noumanhafeez
정말 고마워!!

와~ 그냥 "조건을 충족시키면 전송시킨다" 라는것까지만 알았지 이렇게 세부적인 순서 전부에 트랜잭션이 필요한건줄은 몰랐어요!ㅎㅎ 예시가 있어서 이해하기 쉽게 쏙쏙 들어오네요^^

좋게 봐주셔서 감사해요~~ ^^
저두 공부하면서 알았어요 이건.ㅋ 걍 스마트 컨트랙트가 블록체인에서 돌아가는구나 정도였는데.ㅎ
도움이 되셨다니 다행입니다!!! 어떻게 쓸까 고민하다가 걍 쓰자! 해서 쓴거라.ㅎ

쉽게 예를 잘 들어주시니 이해가 되네요~
팔로우 합니다~

etainclub님 예전 글이 공부하는 데 정말 많이 도움이 되고 있습니다.
예전 글이라 검색이 잘 안되는 게 넘 아쉽다능...보팅도 안되고..ㅠㅠ
팔로우 감사드립니다~~~ 앞으로 많이 도와주세요 ㅎ 미리 감사드립니다. ^^

뉴비가 이해하기가 그래도 쉽게 적으신 것 같아요. 아직 모르는게 더 많지만요. 계속 조금씩 배울게요. 감사합니다.

bluesky81님 찾아주셔서 감사해요~~ 조금더 쉽게 쓰도록 노력해보겠습니다.ㅎ
제가 확실히 이해가 되야 쉽게 쓰는데 아직 그게 잘 안되요. ^^
도움이 되셨길 바래요~~

Coin Marketplace

STEEM 0.23
TRX 0.26
JST 0.040
BTC 97955.34
ETH 3472.91
USDT 1.00
SBD 3.29