EOS 계정명 경매 진행 방식을 알아보자

in #eso6 years ago (edited)

안녕하세요. eosBLACK 팀입니다.

eosBLACK 프로젝트의 개발 일지, 그 두번째 이야기를 전해드겠습니다.지난번 ‘에어드랍 따라잡기’에 이어 이번에 저희가 전해 드릴 이야기는 EOSIO 계정명 경매에 관한 것 입니다. EOSIO의 계정명 경매 시스템이 어떻게 이루어지고 있는지 알아보면서 어떤 부분이 더 개선되었으면 좋을지 함께 생각하는 시간이 되었으면 합니다.
먼저 댄의 제안을 먼저 살펴보도록 하겠습니다.

댄의 제안

메인넷 런칭 전, 댄은 이름 알박기를 방지하기 위해 다음과 같이 “이름 경매장”을 제안했습니다.

https://github.com/EOSIO/eos/issues/3189

간단히 정리하면

1.xyz.com 이라는 이름은 com 이라는 계정을 가진 사람만 만들 수 있다.
2.이렇게 ‘.’을 붙일 수 있는 ‘프리미엄 이름’은 하루에 한 번, 최대값을 제안한 사람이 소유권을 갖는다.

eosflare.io 오른쪽 하단의 ‘Top Name Bids’라고 보이는 것이 댄이 제안한 시스템입니다. 이 시스템은 24시간마다 비딩이 되는 것으로 아는데 몇일이 지나도 변화가 없는 것을 보면서 엉뚱한 호기심이 생겨 알아보기 시작했습니다.

먼저, EOS의 계정을 알자

이름 입찰에 대해 얘기하려면 EOS 계정에 대해 알고 가야할 것 같습니다. EOS 계정 규칙을 설명하자면, a~z까지의 영문 소문자, 또는 1~5까지의 숫자, 또는 이 둘의 조합을 통해 12자리를 반드시 채워서 만들어야 합니다. 그런데, 이 규칙대로 만들어 보면“꼭 12자리를 맞춰야 해?”라는 투덜거림이 자연스럽게 나옵니다. 내가 평소에 익숙한 이름이 12자면 모르지만 그보다 적다면 12자리를 맞추기 위해 의미없는 문자를 넣어야 한다는 거죠. “그럼 꼭 12자리만 만들 수 있는가?” 라는 질문이 생깁니다.

EOS에서12자리 미만의 계정에 대해서는 경매에 제출하여 참여자들이 원하는 가격을 제시할 수 있도록 시스템을 제공해 줍니다. 그 규칙은 제출된 전체 계정 이름 중에 24시간마다 가장 높은 비딩 가격이 제시된 계정이름 1개만이 낙찰되는 방식입니다. 즉, 내가 제시한 비딩 가격이 사람들이 제시한 모든 계정의 비딩 가격 중에 가장 높은 경우에만 낙찰을 받을 수 있는 시스템인 것입니다.

12자리의 일반 계정을 만들던가, 12자리를 채우고 싶지 않으면 계정 이름 경매를 통해서 구매하라는 얘기로 해석되어집니다.“아하, 일반계정 이외에 도메인처럼 자신만의 프리미엄 계정 이름을 만들어 거래할 수 있게 하는 구나!”라고 생각이 되는 거죠.

이렇게 높은 비용을 지불하면서까지 경매에 참여하는 이유는, 해당 계정 이름을 접미어로 하여 도메인처럼 서브 계정을 만들 수 있는 권한이 생기기 때문입니다.

시스템에 더 들어가 보자

하지만, 상식적으로 생각할 때 프리미엄 이름들은 개별적인 가치가 다르기 때문에, 당연히 각 이름별로 최대값을 제출한 사람이 승자가 될 줄 알았는데, 실제 구현은 전체 리스트 중 최대값을 제안한 사람이 그 날의 승자가 되도록 만들어졌다는 사실에서부터 의문이 시작되었습니다. 수많은 이름 입찰들 중에 단 하나의 승자라는 것도 이해가 안되지만, 소유권을 가졌다고 해도 해당 계정을 만들지 않으면 이름 경매 자체가 멈춰버리고 마는 프로세스를 보게 됩니다.

이 부분의 과정을 펼쳐 봅시다.

1.사용자가 마음에 드는 이름을 입찰하려면 eosio 컨트랙트의 bidname 액션을 사용해 이름과 입찰금액을 전송한다.
2.해당 정보는 namebids 테이블에 저장된다.
3.producer_pay.cpp 의 onblock 함수는 매 1분 마다
4.지난 소유권 인정시간으로부터 하루가 지났다면
5.이 namebids 테이블의 highbid 인덱스를 사용해, 최상위 입찰자를 선택해 입찰금액을 음수로 바꾼다.
6.입찰금액이 음수인 정보는 소유권이 인정되어 더 이상의 입찰 참여를 막는다.

멀티인덱스 namebids 는 eosio.system.hpp 의 name_bid 구조체를 기반으로 합니다. 그런데, 이 구조체의 highbid 인덱스는 역순 정렬을 위해, 구조체 멤버 high_bid의 음수 값을 리턴합니다. onblock 함수는 이 인덱스의 첫번째 값을 선택하여 사용하는데 최상위값이 이미 음수로 설정된 경우 항상 이 값만 리턴됩니다.

https://github.com/EOSIO/eos/blob/v1.2.1/contracts/eosio.system/producer_pay.cpp#L52

즉, 이런 입찰정보가 존재하는 한, 이후 소유권 지정은 더 이상 동작하지 않게 되는 것입니다.
이 문제의 심각성은 현재 메인넷 상태 (2018.08.16T04:56:32 UTC)의 namebids 테이블을 살펴보면 좀 더 확실히 알 수 있습니다.

가장 윗쪽에 app이라는 이름의 입찰값이 음수로 되어 있습니다. 입찰자인 f2poolshenyu 에게 소유권이 인정된 상태입니다. 숫자값으로는 날짜 파악이 어려우니 bidnameinfo를 살펴보도록 하겠습니다.

소유권 인정은 적어도 2018–08–04 이후에 이루어졌을 것이며, 이 입찰자가 입찰된 이름으로 계정을 생성하지 않았기 때문에 하위 입찰자들은 12일째 소유권 인정을 받지 못하고 있습니다. 다섯번째 입찰자인 dex는 최종 입찰이 무려 지난달입니다.

현재 이 문제는 eosio.contract 라는 레포지토리에 highbid 인덱스에서 양수값을 얻는 방식으로 수정되어 배포를 기다리고 있습니다.

https://github.com/EOSIO/eosio.contracts/blob/v1.2.0/eosio.system/src/producer_pay.cpp#L57

개선점을 생각해 보자

EOSIO 레포지트리를 관리하는 컨트리뷰터들이 이 문제를 힘들게 이슈를 제기해도 별다른 설명과 고민없이 “그냥 그게 기능이야~” 하면서 닫아버리는 것이 못내 못마땅했습니다.

https://github.com/EOSIO/eos/issues/5140

아무튼, 프리미엄 이름의 개별 가치가 아닌, 이름 경매 전체에서 최대값을 승자로 생각하는 방식이라면 eos 기반의 DApp을 준비하고 “.”으로 구분되는 서브계정을 사용하려는 사람들이 과연 정상적인 사업계획을 세울 수 있을지 의문이고, 내가 신청한 이름은 언제쯤 소유권이 인정되는지 대해 기약이 없다는 것이 이해가 가질 않습니다.

현재로서는 준비된 시스템 컨트랙트가 BP들의 협의를 거쳐 배포된다고 해도 내가 원하는 이름을 빨리 얻기 위해서는 “6050.0002 EOS” 보다 큰 값으로 입찰하고 하루동안 기다리는 방법밖에 없다는 것입니다.

감히 이 부분에 대해 제안하자면, 앞에서 언급한 코드 위쪽의 하루단위 체크를 주석처리하는 것 만으로도 eos에서 프리미엄 이름 관련된 DApp을 준비하는 사용자의 불만 상당부분이 해소될 것이라 생각합니다.

https://github.com/EOSIO/eosio.contracts/blob/v1.2.0/eosio.system/src/producer_pay.cpp#L54

통합 가치가 아닌 개별 프리미엄 이름의 가치를 인정하게 되고 무엇보다 프리미엄 이름 확보 시점에 대해 예측이 가능해질 것이기 때문입니다.

마무리

어떻게 보면 그냥 지나칠 수도 있는 계정 이름 비딩 시스템을 알아보면서 EOSIO에 대해 더 넓게 보게 되는 계기가 되었습니다. 앞으로도, 개발해가면서 겪었던 부분에 대해 일지를 써 나가도록 하겠습니다. 많은 의견 부탁드립니다. 그리고, 계속 지켜봐 주시기 바랍니다.

감사합니다.

eosBLACK 팀 드림.

eosBLACK Homepage : http://eosblack.io
eosBLACK Koreos : http://koreos.io/eosBLACK
eosBLACK Medium : https://medium.com/@eosblack
eosBLACK steemit : https://steemit.com/@eosblack
eosBLACK Facebook : https://www.facebook.com/eosBLACKTeam
eosBLACK twitter : https://twitter.com/EOSBLACK_IO
eosBLACK Telegram(Korean) : https://t.me/eosBLACK_Korea
eosBLACK Telegram(English) : https://t.me/eosBLACK_English
White Paper (Korean) : http://bitly.kr/nap2
White Paper (English) : http://bitly.kr/MOsA!