EOS 디앱과 RAM 비용

카르마의 RAM 비용에 대한 사례 연구, 카르마의 RAM 요구사항을 99%까지 줄일 수 있는 방법

CREAM ER
리퀴댑스(Liquidapps) Kor
11 min readJul 1, 2019

--

일련의 사례 연구를 통해 리퀴댑스 팀은 현재 RAM 소비량에 대한 분석을 제공하고 DAPP 네트워크에서 실행되는 EOS dApp에 대한 분산 형 보완 스토리지 솔루션인 vRAM 시스템을 사용하는 대체 모델을 제안합니다.

프로파일링된 첫 번째 디앱 카르마는 소셜 미디어 디앱으로 현재 게시물과 메타데이터를 저장하기 위해 1주일 당 1.4MB의 RAM을 소비하고 있습니다. vRAM 시스템을 사용하는 대체 모델은 카르마가 데이터를 RAM에 영구적으로 저장하지 않아도 되므로 가장 보수적인 예측에 따르면 98.7%의 RAM 절감 효과를 기대할 수 있습니다.

우리가 사용한 모든 데이터는 공개적으로 사용 가능하며 EOSPark API를 통해 액세스했습니다. 분석하는 동안, 가정은 ✍️ 기호를 통해 미리 제시될 것입니다. 나중에, 민감도 분석은 이러한 가정이 변경될 때 상응하는 RAM 소비량을 보여줄 것입니다.

카르마 소개

카르마는 토큰화된 보상 메커니즘을 통해 긍정과 사회적 영향을 장려하는 소셜 미디어입니다. 그것은 카르마 월렛과 함께 사용자 프로필과 게시물 업로드와 같은 소셜 미디어 사이트의 전통적인 구성 요소로 구성되었습니다. 사용자들은 사진과 동영상을 올리고, 서로의 내용을 공유하고, 앱 내에서 카르마를 보낼 수 있습니다. 또한 사용자는 플랫폼에 글을 업보트 할 수 있습니다. 토큰은 사용자가 앱 내에서 긍정적으로 상호작용할 때 생성되며, 내장된 고정 메커니즘을 통해 보상이 향상될 수 있습니다. 생성된 토큰은 사용자의 재량에 따라 클레임됩니다.

카르마의 뒷면

카르마는 애플리케이션 워크플로우를 제어하는 두 개의 스마트 컨트랙트인theralkarmarma와 thekarmadapp에 의해 추진되며, 각각은 뚜렷한 목적을 제공합니다.

therealkarma 스마트 컨트랙트

therealkarma는 꽤 많은 카르마 토큰을 가지고 있습니다. Claim’및 ‘Transfer’로 채워지는이 컨트랙트는 카르마 토큰을 발행하고 남은 모든 토큰 잔액을 저장하는 책임이 있습니다. 이 컨트랙트에 RAM의 양인 38MB는, 메인넷 출시 시점 전후에 에어드랍을 실행하는 데 필요한 양에 해당하는 양이다.

🌟재밌는 사실: 원래 메인넷 스냅샷에는 163,930개의 계정이 포함되어 있었기 때문에, 단일 계정 에어드랍에 필요한 RAM의 양은 0.229kb이다. 오늘날과 같은 양의 RAM이 필요하다고 가정할 때, 메인넷의 857,000개의 모든 계정에 에어드랍하려면 최대 200MB가 필요할 것이다.

thekarmadapp 스마트 컨트랙트

카르마의 어플리케이션 로직은 더 넓은 범위의 트랜잭션을 처리하는 thekarmadapp에서 찾아볼 수 있습니다. 가장 많이 사용되는 액션으로는 “Upvote”/”Downvote”, “Claim”“Createpost”가 있습니다. 이러한 트랜잭션은 RAM을 소비하거나 릴리즈합니다. 카르마는 메타 데이터와 함께 차지하는 RAM 공간을 확보하기 위해 2 주 후에 RAM에서 게시물을 제거합니다.

  • Upvote/Downvote — 트랜잭션 당 8 바이트의 RAM을 사용.
  • Createpost —신규 포스트 생성 당 263바이트의 RAM을 소비.
  • Claim — RAM은 사용자가 토큰화 된 보상을 클레임 할 때마다 시스템으로 다시 릴리즈됩니다. 양은 가변적이며 다음 공식에 따라 계산 될 수 있습니다.

✍️ 분석을 위해, 우리는 게시물이 1라이크를 받고 하루 언클레임되고, 시스템에 8byte의 RAM을 다시 돌려준다고 각 클레임 액션을 가정할 것입니다.

대안

vRAM 시스템을 사용하면 체인 히스토리에 데이터를 저장하고 DSP로 인덱싱함으로써 RAM 비용을 줄일 수 있습니다.게시물은 RAM이 아닌 체인 히스토리에 저장되며 사용자가 인터랙트하면 임시 RAM 테이블에 로드하면 됩니다. RAM은 트랜잭션 수명 주기 동안만 액세스하면 되고, 그 후에는 데이터가 RAM에서 제거됩니다. 스마트 컨트랙트가 vRAM 트랜잭션을 성공적으로 실행하는 데 걸리는 시간은 해당 서비스 패키지의 서비스 레벨 계약에 따라 달라집니다. 게다가, vRAM을 사용하여 카르마는 게시물을 2주 이상 온라인 상태로 유지할 수 있게 되어 사용자들에게 더 많은 투표와 보상을 축적할 수 있습니다.

트랜잭션 수명주기 : 정의 및 가정

‘트랜잭션’수명주기란 warmup에서 eviction까지 발생하는 모든 액션을 의미합니다. 여기에는 RAM에 데이터를 로드하고 변경해야하는 데이터를 수정하는 작업이 포함됩니다.

✍️ 우리는 트랜잭션 수명 주기를 10초로 가정할 것입니다. 우리의 경험에 따르면, 이 완전한 적시 트랜잭션 수명 주기는 1초에서 10초까지입니다. 그러나 우리는 최악의 가정 하에서 비용 절감을 평가하기 위해 더 긴 시간 동안 분석을 수행했습니다. 이 변수는 나중의 민감도 분석의 일부로 고려될 것입니다.

데이터

우리의 분석은 6월 5일 15:00에 시작하여 6월 10일에 오전(“전체 기간”)에 끝나는 일주일간의 트랜잭션 데이터를 포함합니다. 92,501건의 트랜잭션은 다음과 같이 분류된다.

‘기타’는 댓글 작성과 같이 RAM을 소비하지 않는 트랜잭션을 포함합니다.

두 달 전, 4월 8일 정오부터 시작해서 4월 14일에 끝날 때, 73,602건의 거래를 끌어모았다. 그리고 나서 우리는 4월 데이터를 5/7로 곱해서 해당하는 수치를 5일 동안 보간(interpolate)했다. 4월과 6월의 트랜잭션 증가는 다음과 같이 세분할 수 있다.

사용량이 극적으로 증가한 반면 클레임 액션 수가 감소한 것은 흥미롭습니다. 이는 사용자가 보상을 늘리기 위해 더 이상 클레임을하지 않은 상태로 남겨두고 있음을 나타냅니다.

현재 상황 분석 (vRAM 사용 X)

카르마는 사용자들이 앱에 긍정적인 상호작용을 게시하도록 장려하기 위해 토큰 보상을 이용합니다. 보상은 각 게시물이 받은 업보트/다운보트의 수에 따라 결정됩니다. 따라서, 일단 게시물이 등록되면, 그 게시물은 이후의 모든 업보트와 다운보트와 함께 RAM을 사용해야 합니다.

RAM 소비량은 다음 공식에 따라 계산되었습니다.

Where:

  • Total Posts = 전체 기간 동안 생성된 게시물 수
  • Total UD = 전체 기간 동안의 총 업보트 및 다운보트 수
  • Total Claimed Posts = 전체 기간 동안의 총 클레임 수
  • CM = thekarmadapp 스마트 컨트랙트에 사용된 클레임 곱셈기

결론: 카르마는 일주일에 ~1.4MB of RAM을 필요로 합니다.

대안 분석 — vRAM 사용

vRAM 시스템을 사용함으로써, 카르마는 체인 히스토리에 게시물, 업보트 및 다운보트를 저장하고 DSP에 의해 인덱싱되도록 함으로써 RAM을 자유롭게 할 수 있습니다. 게시물을 작성하거나 게시한 후에 한 번만 데이터가 RAM의 임시 테이블에 로드되어 트랜잭션 종료 직후 삭제될 것입니다. ‘Createpost’ 또는 ‘Other’ 액션의 경우, 게시물이 차지하는 263바이트는 일시적으로 소비되는 반면, ‘Upvote’ 또는 ‘Downvote’는 8바이트를 추가로 소비합니다. ‘Claim’ 작업을 시작하면 포스트뿐 아니라 관련 업보트와 다운보트가 임시 RAM 테이블에 로드됩니다.

vRAM을 사용하는 컨트랙트는 트랜잭션 수명 주기 동안만 게시물과 메타데이터를 RAM에 저장해야 한다.

트랜잭션 수명 주기는 warmup, load, 트랜잭션 및 cleanup 액션을 포함한 전체 vRAM 액션 세트로 구성됩니다. vRAM에서 트랜잭션이 정확히 어떻게 작동하는지에 대한 자세한 내용은 vRAM 가이드를 참조하세요)

Where:

  • Posts = 현재 트랜잭션 수명 주기의 게시물 수
  • UD = 현재 트랜잭션 수명 주기에서 업보트 및 다운보트의 수
  • Claimed Posts = 현재 트랜잭션 수명 주기의 클레임 수
  • Other = 현재 트랜잭션 수명 주기에서 게시물, 업보트, 다운보트 또는 클레임이 아닌 트랜잭션 수
  • CM = thekarmadapp 스마트 컨트랙트에 사용된 클레임 곱셈기.

✍️ 10초의 트랜잭션 수명 주기에서 발생하는 트랜잭션의 수는 매우 다양하기 때문에, 우리는 자유로운 가정을 하고 전체 기간 동안 어떤 10초 동안 발생하는 최대 트랜잭션 수를 사용하여 RAM 비용을 추정하기로 결정했는데, 이 트랜잭션은 15개였습니다.

결론: (샘플)1주 동안 카르마 스마트 컨트랙트는 vRAM 시스템의 사용으로 4kb의 RAM을 요구할 것입니다.

민감도 분석

Looking first at the maximum number of transactions processed by the contract for 10, 20, 40 and 60-second transaction lifecycles gives us:

민감도 분석을 통해 시스템 출력의 변화가 어떻게 다른 입력 매개변수 또는 가정 집합에 할당될 수 있는지 확인할 수 있습니다. 이 경우 클레임 곱셈기와 트랜잭션 수명 주기의 길이를 변수로 취급하고 분석을 재실행할 수 있습니다.

10초, 20초, 40초, 60초 트랜잭션 라이프사이클에 대해 컨트랙트에서 처리한 최대 트랜잭션 수를 먼저 살펴 보면 다음과 같습니다.

우리의 경험상 트랜잭션 수명주기는 10 초를 넘지 않아야합니다.

그러나 가장 엄격한 가정 하에서도 vRAM이 제공 할 수있는 비용 절감 효과를 입증하기 위해 여러 가지 최악의 시나리오를 실행했습니다.

따라서 예상보다 상당히 긴 60초 분량의 트랜잭션 수명 주기와 현재 상황에서 릴리즈되고 있는 실제 RAM 양의 8배를 무료로 가정하더라도 vRAM으로 전환하여 달성한 RAM 절감 효과는 상당합니다.

메모리의 자유

댑 레이더에 따르면 카르마는 전성기에 하루 3,800명의 활성 사용자가 있었는데, 이는 카르마가 구축된 기본 레이어 프로토콜이 불과 몇 달밖에 되지 않았다는 사실을 고려하면 인상적인 업적입니다. 현재 운영 유지에 드는 램 비용은 카르마에게 큰 부담은 되지 않습니다. 그러나, 네트워크 효과가 계속 증가함에 따라, 각각의 새로운 업보트, 다운보트 또는 게시물에 대해 RAM을 구입하는 것은 새로운 사용자들에게 중요한 장애물이 될 것입니다.

Karma 및 기타 사용자 앱은 vRAM을 사용하여 안전하게 데이터를 저장함으로써 RAM 요구 사항 및 비용을 크게 낮추고 LiquidAccounts를 새로운 사용자에게 원활하고 무료로 제공합니다.

이 시리즈의 다음 기사에서 다른 EOS 디앱의 RAM 소비량을 살펴보겠습니다.

--

--