EOSIO, 계정 생성 비용 25% 감소

Jeeyong Um
GameXCoin
Published in
7 min readSep 9, 2018

원문: The Cost of Account Creation on EOS Has Been Reduced by 25% by EOS New York

이해를 돕기 위해 의역한 부분이 있습니다. 정확한 내용은 원문을 참조하기 바랍니다.

배경

댄 라리머는 “EOS 계정 생성 비용을 낮추기 위한 세 단계” 에서 다음과 같이 설명하였습니다.

2단계 — 계정의 메모리 사용량 줄이기

기본 설정의 EOS 블록체인은 계정당 3 KB의 RAM을 사용하도록 하드 코딩¹되어 있는데 이 중 1.5 KB는 미래의 기능 확장을 위해 예약된 공간입니다. 이는 매우 보수적인 추정에 따른 것으로, 최근 계정당 RAM 사용량을 조사한 결과 새로 생성하는 각 계정은 512바이트면 충분하다는 결론을 내렸습니다. Block.one은 계정당 1.5 KB의 RAM을 생성하도록 시스템 컨트랙트를 업데이트 할 것이고 과도하게 보수적인 사용 추정량은 소급적으로 상쇄할 것입니다.

아래 내용은 다음 Github 이슈에 근거하고 있습니다.

EOSIO v1.2.1

협정세계시(UTC) 기준 2018년 9월 6일 오후 1시 36분 41초, EOS New York은 다른 14개의 블록 생성자와 함께 EOSIO 컨트랙트 업데이트 v1.2.1을 승인하였습니다.

이 업데이트는 하드 코딩으로 각 계정에서 사용 가능한 RAM의 전체 양을 계산하는 방법을 변경하고 모든 계정에 1400바이트를 추가하여 EOS 계정 생성 비용을 25% 줄입니다. 업데이트 적용으로 새로운 계정 생성시 구입해야 하는 최소 RAM은 4 KiB²에서 3 KiB로 줄어듭니다. 기존 계정에서 무료로 1400바이트의 RAM을 얻으려면 예치(stake), 예치 해제(unstake), RAM 구입 중 아무 동작 하나를 수행하면 됩니다.

적용 경로

EOS 계정 생성 비용은 플랫폼 건전성에 극히 중요한 부분입니다. 현재 EOS 분산 애플리케이션(dApps)의 사용자들은 EOS 블록체인을 열렬히 좋아하고 이를 이해하기 위해 시간을 쓸 의사가 있는 얼리 어답터입니다. 하지만 미래의 사용자들은 그 정도로 열정적이진 않을 것이며 단지 새로 찾은 dApp을 빨리 사용해보고 싶어할 뿐입니다. 사실 자신이 블록체인을 사용하고 있다는 것도 전혀 알지 못할지 모릅니다.

이 같은 상황에서 dApp 개발자는 앱 사용자에게 필요한 네트워크 자원에 대해 직접 비용을 지불하던지 아니면 사용자가 지불하도록 해야 합니다. 이 비용을 25% 줄이는 것은 대량의 계정 생성이 필요한 경우 개발 장벽을 극적으로 낮춥니다.

이미 생성한 계정

만약 EOSIO v.1.2.1 업데이트 이전에 계정을 생성했더라도 여전히 1400바이트의 무료 RAM을 받을 수 있습니다. BUYRAM, DELEGATEBW, UNDELEGATEBW 중 하나의 액션을 수행하면 1.367188 KiB (1400바이트)를 받게 됩니다. 이는 보통의 지갑 서비스에서 네트워크 자원 중 아무 것에나 토큰을 예치하는 행위와 같습니다.

BUYRAM

BEFORE

COMMAND

cleos system buyram bob123451234 bob123451234 1 - kbytes

AFTER

1 KiB만 구입했지만 RAM이 2.353516 KiB 증가한 것을 볼 수 있습니다.

DELEGATEBW

BEFORE

COMMAND

cleos system delegatebw bob123451234 bob123451234 "1.0000 EOS" "1.0000 EOS"

AFTER

UNDELEGATEBW

BEFORE

COMMAND

cleos system undelegatebw bob123451234 bob123451234 "1.0000 EOS" "0.0000 EOS"

AFTER

업데이트 후 계정 생성 비용

새 계정을 위해 구입해야 하는 최소 RAM은 이제 (무료 제공하는 1400바이트를 포함하여) 3 KiB 또는 2018년 9월 6일 기준 1.84달러어치 입니다. 새 계정은 EOS 토큰과 eosio.token 컨트랙트를 사용하는 최대 8개의 서로 다른 dApp 토큰을 가질 수 있습니다.

테스트

아래 예시의 숫자는 테스트 목적으로 제공하는 결과입니다. KiB당 EOS는 내부 테스트넷 기준이며 실제 비용을 반영하지 않습니다. ram_usage 는 EOS 메인넷에서의 실제 RAM 사용량과 같습니다.

시스템 컨트랙트 1.1.0에서 계정 생성

아래는 4 KiB의 RAM을 구입한 새 계정의 RAM 총량을 보여줍니다.

cleos system newaccount eosio neacct12353 EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV — stake-net “100.0000 EOS” — stake-cpu “1000.0000 EOS” — transfer — buy-ram-kbytes 4

4 KiB 구입에 0.0595 EOS를 사용하였습니다.

0.595 / 4KiB = 0.014875 EOS/KiB

EOS 토큰을 한 번이라도 이체한 경우 잔고를 자신의 RAM을 소모하여 저장합니다.

다음 액션을 수행하였습니다.

  • eosio가 newacct12353에게 ‘10000.0000 EOS’ 이체
  • newacct12353이 eosio에게 ‘1.0000 EOS’ 이체

토큰 저장에 필요한 RAM 비용 = 3574–3446=128바이트

1.1.0에서, 최소 RAM 요구량은 3574 바이트입니다. (구매된 RAM의 세부 내역은 쉽게 알 수 없으므로 올림하여 4 KiB로 간주하겠습니다)

시스템 컨트랙트 1.2.1에서 계정 생성

아래는 3 KiB의 램을 구입한 새 계정의 RAM의 총량을 보여줍니다.

cleos system newaccount eosio newacct12333 EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV — stake-net “100.0000 EOS” — stake-cpu “1000.0000 EOS” — transfer — buy-ram-kbytes 3

[1] hard-coded, 프로그램 내부에 작성하여 고정된 방식으로 동작

[2] Kibibyte, 키비바이트 (1KiB = 1,024Bytes)

--

--