이더리움을 공부하기 시작하면서 스마트 컨트랙트를 어떻게 설명해야하는지 고민에 빠졌었습니다.
그냥 정말 쉽게 컴퓨터 프로그래밍으로 만든 계약이야 하고 끝낼 수는 없으니까요.
그래서 한마디를 붙이면? 조건이 맞으면 자동실행되고 강제로 되는 거라 무를 수 없어.
또 붙이면? 프로그래밍으로 모든 것을 구현할 수 있는 튜링 완전한 언어로 되어있어서 무슨 계약이든 만들 수 있어
이렇게 설명하면 안 하니만 못하겠죠. 어디에 사용하는지도 설명해야하고, 어떻게 굴러가는지도 설명해야하고, 어떻게 생겨먹은 놈인지도 설명해야하고.. 그러다 보니 이것 저것 찾아서 읽기만 하게 되고..흐음..
그러다 문득 생각이 났습니다. 튜링 완전한 언어를 설명하는데 예시로 자주 나오는 것이 스마트 폰 입니다. 거의 모든 것을 할 수 있다는 의미로 자주 거론되죠.
그럼 저희가 거의 손에서 떼지 못하는 스마트폰의 정의를 내리면??? 글쎄요... 전 못하겠네요.ㅎ
제가 너무 크게 생각한 거 아닌가 싶어서 적어봤습니다. 그냥 궁금했던 것부터 쉽게 가자 싶어서.ㅎ
조금씩 내용을 모아서 스마트 컨트랙트가 이런거다 말할 수 있음 좋겠네요.
그래두 시작은 해야하니 우선 스마트 컨트랙트가 조건을 달아서 그 조건이 맞으면 다음 행동을 하게 하는 계약이라고 간단히 이해하고 넘어가보겠습니다.
이더리움을 알게 되면서 제가 제일 궁금했던 것은 스마트 컨트랙트가 블록체인에서 어떻게 구현되는 가 하는 것이었습니다.
비트코인은 당사자끼리의 약속에 따라 거래가 이루어 집니다.
A와 B가 자동차 계약을 하면서 A가 그 자동차의 댓가로 5BTC를 주겠다고 하면 (그 차 비싸네요..) A는 자신이 보내는 5BTC에 관한 거래 트랜잭션을 블록에 포함시키고 B는 그 거래가 승인되는 순간 5BTC를 받을 수 있었습니다.
거래를 담은 블록 하나로 끝나는 것이었죠.
그런데 스마트 컨트랙트는 여러가지 조건을 담고 그 조건이 충족되면 실행되게 만든 것입니다.
위에 예를 가져와서 조건을 만들어 보면,
B가 A에게 계약금조로 1BTC를 요구합니다. A는 B에게 계약금 1BTC를 보내 자동차를 다른 사람에게 못 팔도록 계약을 하고 B에게 중고차가 아니라는 품질 보증이 안되면 계약을 파기한다는 조건을 달았습니다. 중고차가 아니라면 A가 나머지 4BTC의 잔금을 내고 자동차를 사게 되겠죠.
이 모든 내용을 하나의 블록에 담아 한번에 처리할 수는 없을 것입니다. 만나서 한꺼번에 처리하고 블록에 신고하는게 아니라면요.
블록체인이 시간순으로 쌓이는 것이니만큼 저 계약 내용도 하나씩 시간 순으로 쌓이게 됩니다.
차를 거래하기로 서로 합의를 하는 과정부터 시작할 수 있겠지만, 여기선 위에 조건만 이해해 보겠습니다.
우선 B는 A에게 계약금을 요구하는 메세지를 블록에 포함시킵니다.
A가 동의를 한다면, A는 자신이 가진 1BTC 보내면서 중고차가 아니라는 품질 보증을 요구하는 계약 내용을 다음 블록에 포함시켜 보내겠죠.
비트코인에서는 트랜잭션의 의미가 비트코인의 움직임만을 담는 것이었습니다. 그래서 TXID라고 하면 그 안에 비트코인 거래에 관한 내용을 담고 있었죠. 하지만 이더리움 블록체인에서는 트랜잭션 안에 메세지 자체만 보내거나 저 1BTC라는 화폐의 전송과 더불어 계약 내용을 담을 수 있습니다. 위에 경우에서 계약금을 요구하거나, 계약금을 주면 다른 사람에게 차를 팔지 못한다 등의 내용이 되겠죠.
비트코인의 지갑과 다르게 이더리움에는 Account라는 개념이 있습니다. 이 계정(Account)에는 비트코인의 지갑과 같이 화폐의 움직임을 다루는 계정(External Owned Account)과 계약 내용을 다루는 계정(Contract Account)이 따로 있는데, 이 두 계정에서 만든 내용이 트랜잭션에 같이 들어가게 됩니다.
이 계정의 개념이 비트코인과 차이가 나는 중요한 부분입니다. 우선 블록체인에 담기는 과정에 대해서 보고 있으니 이 계정(Account)에 대한 내용은 다음 포스트에서 다루겠습니다.
계약으로 돌아가서, B가 A가 보낸 계약 내용에 동의를 한다면 B는 품질 보증서를 보내는 트랜잭션을 다음 블록에 포함시킬 것입니다.
그리고 A가 그 내용에 만족한다면 나머지 잔금 4BTC를 보내는 트랜잭션을 만들어 블록에 담을 것입니다. 그러면 B가 4BTC를 받고 A는 자동차를 받아 계약이 끝나겠죠.
차를 받는 건? 하실지 모르겠지만.ㅎ 단순화 시켜서 블록의 담기는 과정을 살펴봤습니다.
위와 같이 블록에 담기기만 하면 계약이 안전하게 성사되는 게 아니겠죠. 중간에 계약을 어길 수도 있으니까요.
비트코인 블록체인에서도 봤듯이 블록체인은 전 블록의 해시를 연결하여 체인을 만드는 것이고 그 과정이 제 3자의 신뢰가 필요없게 만들어줍니다. 이더리움 블록체인도 마찬가지로 전 블록의 해시를 새로 생성하는 블록에 포함시킵니다. 여기서 다른 점이 있다면 비트코인은 비트코인의 이동 과정만을 담는다면, 이더리움은 계약의 내용과 진행과정이 담긴다는 것입니다. 위의 예와 같이 계약이 성사되어 가는 과정이 전 블록에 해시 형태로 담겨있으니 변경할 수 없는 계약이 되는 것이죠.
비트코인이 화폐의 흐름을 블록 해시로 연결하여 이중지불문제나 신뢰성 문제를 해결했다면, 이더리움은 계약의 내용까지 블록 해시로 연결하여 자동차 딜러와 같이 신뢰할 수 있는 제 3자가 필요없는 계약을 만든 것입니다.
처음 이더리움을 접하면서 Dapp(Decentralized Application)이라는 개념이 잡혀있지 않아 이 부분이 상당히 궁금했습니다.
제가 아는 앱은 애니팡 같은 거였거든요. 접속하면 제 핸드폰으로 즐길 수 있는.
그래서 스마트 컨트랙트를 Dapp에서 구동시키고 그 결과를 블록체인에 올리는 건가 했습니다. 댑이 블록체인 위에서 운용되는 것이니 만큼 결론적으로는 맞는 이야기인데, 제가 잘못 이해한 것은 Dapp을 내 핸드폰에서 구동시키는
게 아니라는 것과 계약 내용 하나하나가 트랜잭션이 된다는 것이었습니다.
이렇게 모든 계약 내용이 하나의 트랜잭션을 이루고 그것을 블록에 다 담아야하는데 수많은 트랜잭션을 일으키는 댑들이 우후죽순 생기면 저걸 우찌 감당하지라는 생각이 드시죠? ㅎㅎ(또 저만 그런가요...)
댑 하나에 트랜잭션 문제가 생기던 이더리움의 스케일링 문제가 새삼 심각하게 느껴지네요.
다음 글에서는 위에 말씀드린 계정(Account)과 비트코인과는 다른 트랜잭션의 구성에 대해서 글을 써보겠습니다.
확실히 고민만 하는 것보다 글을 쓰니 방향이 보이네요.
긴 글 읽어주셔서 감사합니다~~ 틀린 점 있으면 꼭 댓글로!! 도와주세요~~
마지막으로 동계올림픽도 다가오는데,
너무 바빠서 스트레스 많이 받으시고 고생하시는 제 선생님을 위해 동영상 하나 올립니다.
근데 바빠서 못 보시면 우짜죠?ㅎ
흐음 유튜부 올리면 저작권에 문제가 되나요?..
Ourselves 캠페인
셀프보팅을 하지 않고 글을 올리시고
ourselves 테그를 달아 주시면
많은 분들이 관심 가져 줄꺼에요