오늘 슈퍼팀 코리아에서 pre-bootcamp 진행했습니다. 아주 놀랍게도 IQ6900 프로젝트 빌더인 zo(@im_zo_sol)님께서 프로젝트에 대한 소개를 진행해주셨는데, 내용이 너무 재밌어서 간단하게 정리해봤습니다!
https://iq6900.com/?source=post_page-----db0a93fa53b5---------------------------------------
솔라나와 이더리움의 가스비를 2000배 절감하는 $IQ의 혁신적인 온체인 데이터 인스크립션 표준, Code-In 을 기준으로 퍼져나가는 탈 중앙화 자율 조직
https://x.com/IQ6900_?source=post_page-----db0a93fa53b5---------------------------------------
오늘 IQ6900 빌더이신 zo(@im_zo_sol)님께서의 발표를 듣고 제가 이해한 내용을 최대한 쉽게 풀어서 설명해봤습니다. 틀린 부분이 있을 수 있으니 그런가 보다 하고 읽어주세요 ㅎㅎ
IPFS(InterPlanetary File System)는 탈중앙화된 파일 저장 시스템으로, 기존의 중앙화된 서버 기반 파일 관리 방식과 다르게 분산 네트워크에서 파일을 저장하고 공유하는 기술입니다.
온체인 인스크립션(On-chain Inscription)은 IPFS와 달리, 파일 자체를 블록체인 네트워크에 직접 기록하는 방식입니다. 데이터를 영구 저장할 수 있으며, 완전한 탈중앙화를 구축할 수 있는 장점이 있지만, 블록체인에 직접 데이터를 저장하는 방식이기 때문에 Account 생성 시 Rent Fee(온체인 저장 비용)가 발생하며 이를 효과적으로 줄이기 위해 트랜잭션에 데이터를 담는 방식을 사용한 것입니다.
실제 1MB를 솔라나 네트워크에 업로드 하는데 Rent Fee(온체인 저장 비용)가 무려 7SOL(약 200만원)이 필요하다고 합니다. 비용을 절감하기 위한 방법으로 code-in을 만들게 되었다고 하는데요!!
기술적인 부분에 대한 설명을 최소한으로 했고, 전체적인 흐름을 파악해주시면 좋을 것 같습니다! 혹시 상세한 기술에 대한 이해가 필요하신 경우… 전화주세요. 같이 머리를 맞대면 뭔가 보일지도 모르니..
에 전체 로직에 대한 이미지가 올라와있으니 참고해주세요.
“이미지를 어떻게 저장한다는 거야?”라고 생각하실 수도 있겠지만, 컴퓨터 세상에서 모든 데이터는 결국 0과 1로 이루어집니다. 이미지를 인식하는 방법은 다양하지만, Base64로 변환하면 이미지를 코드로 변환할 수 있으며, 이를 블록체인 네트워크에 저장한다고 생각하면 됩니다.
code-in에서는 아스키코드로 변환한 이미지를 58% 이상 무손실 압축하는 자체 기술을 구현하였으며, 이렇게 압축한 코드를 10,000바이트 크기의 big chunk(큰 조각)로 나누고, 각 chunk를 다시 850바이트 크기의 small chunk(작은 조각)로 분할하여 각각을 트랜잭션으로 저장했습니다.
이때, 3가지 value를 저장하고 있습니다.
Before_tx: 여러 개로 나뉜 chunk를 이어 붙일 수 있도록 이전 트랜잭션 값을 저장하며, 값이 "Genesis"로 저장되어 있는 경우 최초 chunk임을 의미합니다.
Data: chunk 데이터가 저장됩니다.
Decode break: 0과 1로 나뉘며, small chunk의 끝에 1을 설정하여 파일을 합치기 위한 checkpoint로 활용됩니다.
DB Code-in은 PDA를 이해하기 쉽게(?) 설명한 것으로 이를 활용하여 최종적으로 파일 포맷과 handle을 저장하는 데 사용됩니다.
PDA는 프로그램이 생성하고 소유하는 주소로, 체계적인 주소 생성을 가능하게 합니다. 또한, 솔라나 네트워크에서는 데이터 저장이나 토큰 관리 등의 목적으로 활용됩니다.
이해가 잘되지 않아 Zo(@im_zo_sol님께 직접 여쭤본 후 답변을 들을 수 있었습니다.
일반적으로 온체인에서 데이터를 저장하려면, 솔라나에서는 스마트 컨트랙트를 초기화(init)할 때 지정한 크기만큼 Rent Fee (온체인 저장 비용)를 지불해야 합니다. 생성된 계정(Account)에는 해당 크기 내에서 데이터를 자유롭게 저장할 수 있습니다.
하지만 code-in은 데이터를 계정이 아닌 트랜잭션(Transaction)에 분할하여 저장하고, 이를 다시 불러와 합치는 방식으로 작동합니다. 덕분에 Rent Fee를 지불할 필요 없이, 트랜잭션 실행에 필요한 가스비만으로 데이터를 저장할 수 있습니다.
850바이트를 설정한 이유는 솔라나에서 한 번에 전송할 수 있는 최대 트랜잭션의 크기가 1100바이트 정도라고 합니다. 850바이트에 데이터를 담고 나머지에 Before_tx와 Decode break를 담은 것이지요!
또하나 알게된 사실은 All Transition으로 여러개 트랜잭션을 처리할 수 있는데, 이때 최대로 가능한 트랜잭션갯수가 1,200개라는 것을 알게 되었습니다.
850 바이트 × 1,200 트랜잭션 = 1,020,000 바이트 ≈ 1MB
너무 딱 맞아 떨어져서 1회 업로드를 1MB로 제한하기 위한 의도로 생각했었지만, 이건 그저 수학적인 아름다운 우연의 일치였습니다.
위 방식을 활용하여 기존 가스비를 약 2,000배 절감할 수 있는 방식으로 데이터를 온체인에 저장하는 구조를 구축했다고 합니다. 정말 멋집니다!
블록체인 구조를 정확히 이해하고 있지 않아서, 제가 이해한 내용이 맞는지 확신할 수는 없지만… Web3는 공부할수록 정말 신기한 영역인 것 같습니다.
낭만이란 “현실에 없거나 미처 발견하지 못한 이상적 가치를 추구하는 태도”라고 합니다. 그런 의미에서 보면, 블록체인은 낭만이 가득한 기술이네요. 즐겁습니다.