<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Technical Research on Jeongseup Blog</title><link>https://jeongseup.github.io/categories/technical-research/</link><description>Recent content in Technical Research on Jeongseup Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sat, 19 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jeongseup.github.io/categories/technical-research/index.xml" rel="self" type="application/rss+xml"/><item><title>Transformer에서 MCP와 Skill까지: AI 에이전트는 어떻게 생각하고 행동하는가?</title><link>https://jeongseup.github.io/p/transformer-mcp-skill/</link><pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate><guid>https://jeongseup.github.io/p/transformer-mcp-skill/</guid><description>&lt;img src="https://jeongseup.github.io/p/transformer-mcp-skill/cover.png" alt="Featured image of post Transformer에서 MCP와 Skill까지: AI 에이전트는 어떻게 생각하고 행동하는가?" /&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;요약:&lt;/strong&gt;&lt;br&gt;
CNN/RNN의 파편화를 끝낸 &lt;strong&gt;Transformer의 대통합&lt;/strong&gt;, &amp;ldquo;방 안의 뇌&amp;quot;였던 LLM에게 손발을 달아주려다 실패한 &lt;strong&gt;1세대 플러그인&lt;/strong&gt;, 그 한계를 극복한 오픈 표준 &lt;strong&gt;MCP(Model Context Protocol)&lt;/strong&gt;, 그리고 토큰 낭비 없이 전문 전술을 주입하는 **스킬(Skill)**의 진화 과정을 &lt;strong&gt;실제 통신 패킷과 시각화 아키텍처&lt;/strong&gt;로 쉽게 풀어봅니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-프롤로그-모든-데이터가-하나로-통합되던-순간-transformer-혁명"&gt;1. 프롤로그: 모든 데이터가 하나로 통합되던 순간 (Transformer 혁명)
&lt;/h2&gt;&lt;p&gt;과거 딥러닝 시절에는 데이터 형태에 따라 완전히 다른 모델과 수학 공식을 써야 했습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;이미지:&lt;/strong&gt; 픽셀 격자 위를 훑는 3×3 필터 행렬 연산 (&lt;strong&gt;CNN&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;텍스트:&lt;/strong&gt; 이전 단어의 기억을 다음 상태로 넘기는 재귀 루프 (&lt;strong&gt;RNN/LSTM&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;하지만 2017년 &lt;strong&gt;Transformer&lt;/strong&gt;의 등장 이후, AI는 세상의 모든 데이터를 단 하나의 포맷, 즉 **&amp;lsquo;토큰(Token)&amp;rsquo;**으로 통일해 버렸습니다.&lt;/p&gt;
&lt;h3 id="-example-서로-다른-데이터가-토큰으로-바뀌는-실제-모습"&gt;💡 Example: 서로 다른 데이터가 토큰으로 바뀌는 실제 모습
&lt;/h3&gt;&lt;h4 id="-텍스트의-토큰화-bpe-tokenization"&gt;① 텍스트의 토큰화 (BPE Tokenization)
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#34;def calculate(price):&amp;#34; ──► [721, 14205, 7, 4923, 1313]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="-이미지의-토큰화-vision-transformer-vit"&gt;② 이미지의 토큰화 (Vision Transformer, ViT)
&lt;/h4&gt;&lt;p&gt;224×224 픽셀 이미지를 16×16 픽셀짜리 바둑판 조각(패치) 196개로 자른 뒤 일렬로 펼쳐 단어처럼 취급합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[16x16 픽셀 패치 1개] ──► 1차원 펼치기 (768차원 실수 벡터) ──► [0.24, -0.81, 0.05, ...]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="-결과-다차원-공간에서의-공통-의미-좌표-수렴"&gt;③ 결과: 다차원 공간에서의 &amp;ldquo;공통 의미 좌표&amp;rdquo; 수렴
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cosine Similarity( &amp;#34;고양이&amp;#34;, &amp;#34;cat&amp;#34; ) ≒ 0.96 (거의 일치)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cosine Similarity( &amp;#34;고양이&amp;#34;, [고양이 털 사진 16x16 패치] ) ≒ 0.91 (의미 일치!)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cosine Similarity( &amp;#34;고양이&amp;#34;, &amp;#34;class Cat(Animal):&amp;#34; ) ≒ 0.88 (코드와도 일치!)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h3 id="-architecture-1-transformer-multimodal-tokenization--shared-latent-space"&gt;🏛️ Architecture 1: Transformer Multimodal Tokenization &amp;amp; Shared Latent Space
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;아래 다이어그램은 글자, 이미지 패치, 오디오가 단일 트랜스포머 어텐션 계층을 거쳐 공통 잠재 공간(Shared Latent Space)으로 수렴하는 구조를 보여줍니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;iframe src="https://jeongseup.github.io/interactive/transformer-tokenization.html?embed=1" width="100%" height="520" frameborder="0" style="border: 1px solid var(--card-separator-color, #e0e0e0); border-radius: 8px; margin: 16px 0; width: 100%; box-shadow: 0 4px 12px rgba(0,0,0,0.05);" loading="lazy"&gt;&lt;/iframe&gt;
&lt;p align="center" style="font-size: 0.88rem; margin-top: -6px; margin-bottom: 20px;"&gt;
&lt;a href="https://jeongseup.github.io/interactive/transformer-tokenization.html" target="_blank" rel="noopener"&gt;🔍 &lt;strong&gt;인터랙티브 다이어그램 전체화면으로 보기&lt;/strong&gt; (줌/팬 &amp; 가이드 뷰 지원)&lt;/a&gt;
&lt;/p&gt;
&lt;details&gt;
&lt;summary style="cursor: pointer; font-size: 0.9rem; color: var(--card-text-color-secondary, #666); margin-bottom: 12px;"&gt;📷 정적 다이어그램 이미지로 보기&lt;/summary&gt;
&lt;p&gt;&lt;img src="https://jeongseup.github.io/p/transformer-mcp-skill/transformer-tokenization.png"
width="2048"
height="1320"
srcset="https://jeongseup.github.io/p/transformer-mcp-skill/transformer-tokenization_hu_115f03f3bf1c1b7d.png 480w, https://jeongseup.github.io/p/transformer-mcp-skill/transformer-tokenization_hu_feac5e7f1adfc3c9.png 1024w"
loading="lazy"
alt="Transformer Multimodal Tokenization"
class="gallery-image"
data-flex-grow="155"
data-flex-basis="372px"
&gt;&lt;/p&gt;
&lt;/details&gt;
&lt;hr&gt;
&lt;h2 id="2-방-안의-천재에게-손발을-달아주려던-1세대-시도-플러그인plugin의-실패"&gt;2. &amp;ldquo;방 안의 천재&amp;quot;에게 손발을 달아주려던 1세대 시도: 플러그인(Plugin)의 실패
&lt;/h2&gt;&lt;p&gt;똑똑해진 LLM도 혼자서는 방 안을 벗어날 수 없었습니다. 모델은 오직 &amp;ldquo;텍스트를 받아 다음 텍스트를 출력하는 수학 함수&amp;quot;였기 때문입니다. 이때 등장한 1세대 시도가 **2023년의 &amp;lsquo;ChatGPT Plugins&amp;rsquo;**였습니다.&lt;/p&gt;
&lt;h3 id="-example-과거-플러그인의-구조적-한계-ai-pluginjson"&gt;💡 Example: 과거 플러그인의 구조적 한계 (&lt;code&gt;ai-plugin.json&lt;/code&gt;)
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;schema_version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;v1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name_for_model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;autocad&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;openapi&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://api.my-cloud.com/openapi.yaml&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[사용자] &amp;#34;내 맥북에 켜진 AutoCAD에 사각형 그려줘.&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼ (1) ChatGPT 클라우드가 플러그인 API 호출 시도
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;OpenAI Server ──► HTTP POST https://api.my-cloud.com/draw
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼ (2) &amp;#34;내 맥북의 로컬 AutoCAD를 어떻게 부르지?&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;클라우드 서버는 사용자의 개인 맥북 사설망(192.168.0.x)이나 COM 포트에 접속 불가!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ❌ 결과: 로컬 PC 제어 불가능 (클라우드 SaaS만 호출 가능)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="3-2세대-표준화-혁명-mcp-model-context-protocol--ai의-usb-c"&gt;3. 2세대 표준화 혁명: MCP (Model Context Protocol) — AI의 USB-C
&lt;/h2&gt;&lt;p&gt;Anthropic이 오픈소스로 공개한 &lt;strong&gt;MCP&lt;/strong&gt;는 도구를 클라우드가 아닌 &lt;strong&gt;사용자의 로컬 컴퓨터에서 독립 프로세스로 실행&lt;/strong&gt;하도록 하여 이 한계를 정면으로 돌파했습니다.&lt;/p&gt;
&lt;h3 id="-example-ai와-로컬-앱-사이의-실제-통신-패킷-json-rpc"&gt;💡 Example: AI와 로컬 앱 사이의 실제 통신 패킷 (JSON-RPC)
&lt;/h3&gt;&lt;h4 id="-ai--mcp-server-request"&gt;① AI ➔ MCP Server (Request):
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;jsonrpc&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;method&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tools/call&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;params&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;draw_line&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;arguments&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;start&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;end&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;layer&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Wall&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="-mcp-server--로컬-autocad-실행-후-ai-응답-response"&gt;② MCP Server ➔ 로컬 AutoCAD 실행 후 AI 응답 (Response):
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;jsonrpc&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;result&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Success: Line Entity #A284 created on &amp;#39;Wall&amp;#39;.&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-손발이-생겼는데-왜-또-스킬skill이-필요할까"&gt;4. 손발이 생겼는데 왜 또 &amp;lsquo;스킬(Skill)&amp;lsquo;이 필요할까?
&lt;/h2&gt;&lt;p&gt;도구(MCP)만 쥐어준다고 일을 잘하지는 않습니다.&lt;br&gt;
회사 규칙(&lt;code&gt;Git Flow&lt;/code&gt;), 커밋 컨벤션(&lt;code&gt;Conventional Commits&lt;/code&gt;), 도면 레이어 규칙을 모르면 엉뚱하게 도구를 쓰기 때문입니다.&lt;/p&gt;
&lt;p&gt;스킬은 모든 규칙을 시스템 프롬프트에 넣어 토큰을 낭비하는 대신, **필요한 순간에만 전문 매뉴얼(&lt;code&gt;SKILL.md&lt;/code&gt;)을 대화 컨텍스트에 동적 주입(Progressive Disclosure)**합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="-architecture-2-plugin-vs-mcp-vs-skill-엔드투엔드-워크플로우"&gt;🏛️ Architecture 2: Plugin vs MCP vs Skill 엔드투엔드 워크플로우
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;아래 다이어그램은 상단의 &lt;strong&gt;Skill 주입 흐름&lt;/strong&gt;, 중앙의 &lt;strong&gt;에이전트 판단&lt;/strong&gt;, 그리고 하단의 **MCP 로컬 실행 (AutoCAD/Figma)**과 &lt;strong&gt;Legacy Plugin&lt;/strong&gt;의 차이를 한눈에 보여줍니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;iframe src="https://jeongseup.github.io/interactive/plugin-mcp-skill-workflow.html?embed=1" width="100%" height="580" frameborder="0" style="border: 1px solid var(--card-separator-color, #e0e0e0); border-radius: 8px; margin: 16px 0; width: 100%; box-shadow: 0 4px 12px rgba(0,0,0,0.05);" loading="lazy"&gt;&lt;/iframe&gt;
&lt;p align="center" style="font-size: 0.88rem; margin-top: -6px; margin-bottom: 20px;"&gt;
&lt;a href="https://jeongseup.github.io/interactive/plugin-mcp-skill-workflow.html" target="_blank" rel="noopener"&gt;🔍 &lt;strong&gt;인터랙티브 다이어그램 전체화면으로 보기&lt;/strong&gt; (Trace 애니메이션 및 뷰 전환 지원)&lt;/a&gt;
&lt;/p&gt;
&lt;details&gt;
&lt;summary style="cursor: pointer; font-size: 0.9rem; color: var(--card-text-color-secondary, #666); margin-bottom: 12px;"&gt;📷 정적 다이어그램 이미지로 보기&lt;/summary&gt;
&lt;p&gt;&lt;img src="https://jeongseup.github.io/p/transformer-mcp-skill/plugin-mcp-skill-workflow.png"
width="2048"
height="1320"
srcset="https://jeongseup.github.io/p/transformer-mcp-skill/plugin-mcp-skill-workflow_hu_a0562a66307748ad.png 480w, https://jeongseup.github.io/p/transformer-mcp-skill/plugin-mcp-skill-workflow_hu_77806e9148aafe07.png 1024w"
loading="lazy"
alt="Plugin vs MCP vs Skill Workflow"
class="gallery-image"
data-flex-grow="155"
data-flex-basis="372px"
&gt;&lt;/p&gt;
&lt;/details&gt;
&lt;hr&gt;
&lt;h2 id="5-실제-프롬프트-백엔드에서는-무슨-일이-일어나는가"&gt;5. 실제 프롬프트 백엔드에서는 무슨 일이 일어나는가?
&lt;/h2&gt;&lt;p&gt;사용자가 채팅창에 입력한 글은 단 한 줄이지만, 런타임은 배후에서 스킬을 결합하여 거대한 프롬프트로 확장(Augment)해 LLM에 전달합니다.&lt;/p&gt;
&lt;h3 id="사용자가-입력한-것"&gt;사용자가 입력한 것:
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;새로운 로그인 기능 커밋하고 PR 올려줘. /git-workflow&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="실제-llm-api로-전달되는-http-payload"&gt;실제 LLM API로 전달되는 HTTP Payload:
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;model&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;claude-3-7-sonnet&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;messages&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;role&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;system&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;당신은 AI 코딩 어시스턴트입니다...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;role&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;system&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;injected_skill_instructions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;=== [DYNAMIC SKILL LOADED: git-workflow] ===\n1. 커밋 전 반드시 npm test 통과 여부를 검증할 것.\n2. 커밋 메시지는 &amp;#39;feat(auth): ...&amp;#39; 형식을 준수할 것.\n3. main에 직접 푸시하지 말고 feature/ 브랜치를 생성할 것.\n============================================&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;role&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;user&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;새로운 로그인 기능 커밋하고 PR 올려줘.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tools&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;mcp_git_cli&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;로컬 git 명령어 실행&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="6-결론-2026-에이전트-아키텍처의-완성-공식"&gt;6. 결론: 2026 에이전트 아키텍처의 완성 공식
&lt;/h2&gt;$$\text{완전한 AI 에이전트} = \text{Transformer (두뇌)} + \text{Skill (전술/SOP)} + \text{MCP (손발/도구)}$$&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Transformer:&lt;/strong&gt; 텍스트, 코드, 이미지를 단일 토큰 공간에서 해석하는 &lt;strong&gt;거대한 만능 두뇌&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skill:&lt;/strong&gt; 토큰을 낭비하지 않고 필요할 때만 전문가 매뉴얼을 뇌에 주입하는 &lt;strong&gt;동적 전술 지침(SOP)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCP:&lt;/strong&gt; 내 컴퓨터의 OS, 로컬 파일, CAD, Figma, DB를 직접 조종하는 &lt;strong&gt;표준화된 인터페이스 (USB-C)&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;이 세 요소가 결합될 때 비로소 모델은 단순한 챗봇을 넘어, &lt;strong&gt;현실 세계의 소프트웨어와 엔지니어링 문제를 스스로 해결하는 진정한 에이전트&lt;/strong&gt;로 진화합니다.&lt;/p&gt;</description></item><item><title>Building a Leverage Position Preview for DeFi on Sui</title><link>https://jeongseup.github.io/project/defidash/defidash-preview-leverage/</link><pubDate>Fri, 27 Feb 2026 00:00:00 +0000</pubDate><guid>https://jeongseup.github.io/project/defidash/defidash-preview-leverage/</guid><description>&lt;img src="https://jeongseup.github.io/defidash-logo.jpeg" alt="Featured image of post Building a Leverage Position Preview for DeFi on Sui" /&gt;&lt;blockquote&gt;
&lt;p&gt;How I built &lt;code&gt;previewLeverage&lt;/code&gt; — a read-only preview engine that calculates leveraged lending position metrics across Suilend, Navi, and Scallop, without executing any on-chain transaction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Team:&lt;/strong&gt; &lt;a class="link" href="https://github.com/curg-13" target="_blank" rel="noopener"
&gt;curg-13&lt;/a&gt; | &lt;strong&gt;SDK:&lt;/strong&gt; &lt;a class="link" href="https://github.com/curg-13/defidash-sdk" target="_blank" rel="noopener"
&gt;defidash-sdk&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="why-preview-before-leverage"&gt;Why Preview Before Leverage?
&lt;/h2&gt;&lt;p&gt;In DeFi lending, &lt;strong&gt;leverage&lt;/strong&gt; means borrowing against your collateral to amplify your position. A 2x leverage on $100 of SUI gives you $200 total exposure — potentially doubling your returns, but also your risk.&lt;/p&gt;
&lt;p&gt;Before users click &amp;ldquo;Confirm&amp;rdquo;, they need to know:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How much will be borrowed via flash loan?&lt;/li&gt;
&lt;li&gt;What&amp;rsquo;s the liquidation price?&lt;/li&gt;
&lt;li&gt;What&amp;rsquo;s the expected annual return (Net APY)?&lt;/li&gt;
&lt;li&gt;How far can the price drop before liquidation?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s what &lt;code&gt;previewLeverage&lt;/code&gt; computes — entirely off-chain, using real-time protocol data.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;preview&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;previewLeverage&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;protocol&lt;/span&gt;: &lt;span class="kt"&gt;LendingProtocol.Suilend&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;depositAsset&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;SUI&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;depositValueUsd&lt;/span&gt;: &lt;span class="kt"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;multiplier&lt;/span&gt;: &lt;span class="kt"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// preview.netApy → 2.33%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// preview.liquidationPrice → $0.63
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// preview.priceDropBuffer → 33%
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="glossary-lending-protocol-concepts"&gt;Glossary: Lending Protocol Concepts
&lt;/h2&gt;&lt;p&gt;If you&amp;rsquo;re a developer without DeFi background, here&amp;rsquo;s what you need to know. I&amp;rsquo;m also studying these concepts in depth — check the &lt;strong&gt;Lending Protocol Study&lt;/strong&gt; series for worked examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://jeongseup.github.io/p/lending-protocol-study-day1/" &gt;Day 1: DeFi 렌딩의 핵심 개념과 아키텍처&lt;/a&gt; — Pool-based 중개, Share-Based Accounting, Scaled Balance 패턴&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://jeongseup.github.io/p/lending-protocol-study-day2/" &gt;Day 2: Compound V2 Deep Dive와 Aave V3 아키텍처&lt;/a&gt; — Fresh 패턴, Mantissa 연산, 비트맵 스토리지 최적화&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ltv-loan-to-value"&gt;LTV (Loan-to-Value)
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;LTV&lt;/strong&gt; is the maximum percentage of your collateral&amp;rsquo;s value that you can borrow.&lt;/p&gt;
$$\text{LTV} = \frac{\text{Borrowed Value}}{\text{Collateral Value}}$$&lt;p&gt;If SUI has a 70% LTV on Suilend, depositing $100 of SUI lets you borrow up to $70 of USDC. Each protocol sets different LTV ratios per asset — riskier assets get lower LTV.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Protocol&lt;/th&gt;
&lt;th&gt;SUI LTV&lt;/th&gt;
&lt;th&gt;XBTC LTV&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Suilend&lt;/td&gt;
&lt;td&gt;70%&lt;/td&gt;
&lt;td&gt;60%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Navi&lt;/td&gt;
&lt;td&gt;75%&lt;/td&gt;
&lt;td&gt;67%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scallop&lt;/td&gt;
&lt;td&gt;85%&lt;/td&gt;
&lt;td&gt;75%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;For more details on how Health Factor works with LTV, see &lt;a class="link" href="https://jeongseup.github.io/p/lending-protocol-study-day1/" &gt;Lending Protocol Study Day 1&lt;/a&gt; — the &amp;ldquo;Share-Based Accounting&amp;rdquo; section explains why each protocol tracks collateral differently.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="liquidation-threshold-lt"&gt;Liquidation Threshold (LT)
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Liquidation Threshold&lt;/strong&gt; is the LTV level at which your position gets liquidated. It&amp;rsquo;s always higher than the borrow LTV, creating a safety buffer.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Borrow LTV: 70% → You can borrow up to 70%
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Liq. Threshold: 75% → Liquidation triggers at 75%
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Safety buffer: 5%
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;When the market price drops and your position&amp;rsquo;s actual LTV exceeds the liquidation threshold, a liquidator can repay part of your debt and claim your collateral at a discount.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Liquidation mechanics are a deep topic — the &lt;a class="link" href="https://jeongseup.github.io/p/lending-protocol-study-day2/" &gt;Lending Protocol Study&lt;/a&gt; series covers Compound V2&amp;rsquo;s &lt;code&gt;liquidateBorrowFresh()&lt;/code&gt; and Aave V3&amp;rsquo;s architecture in detail.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="max-multiplier"&gt;Max Multiplier
&lt;/h3&gt;&lt;p&gt;Derived directly from LTV:&lt;/p&gt;
$$\text{Max Multiplier} = \frac{1}{1 - \text{LTV}}$$&lt;p&gt;With 70% LTV → max 3.33x leverage. With 85% LTV → max 6.67x. This is a hard protocol limit — you physically cannot borrow more than what the collateral factor allows.&lt;/p&gt;
&lt;h3 id="flash-loan"&gt;Flash Loan
&lt;/h3&gt;&lt;p&gt;A flash loan is an &lt;strong&gt;uncollateralized loan that must be borrowed and repaid within a single atomic transaction&lt;/strong&gt;. If you don&amp;rsquo;t repay, the entire transaction reverts as if it never happened.&lt;/p&gt;
&lt;p&gt;In our leverage strategy, the flow is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Flash loan USDC from Scallop&lt;/li&gt;
&lt;li&gt;Swap USDC → deposit asset (e.g., SUI)&lt;/li&gt;
&lt;li&gt;Deposit all collateral to lending protocol&lt;/li&gt;
&lt;li&gt;Borrow USDC from protocol (using deposited collateral)&lt;/li&gt;
&lt;li&gt;Repay flash loan&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;All 5 steps happen in one Sui &lt;a class="link" href="https://docs.sui.io/concepts/transactions/prog-txn-blocks" target="_blank" rel="noopener"
&gt;Programmable Transaction Block (PTB)&lt;/a&gt;. If step 5 fails, everything reverts.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For more on why Sui&amp;rsquo;s PTB model is ideal for this — see &lt;a class="link" href="https://jeongseup.github.io/p/defidash-technical-journal-day1/" &gt;DefiDash Journal Day 1&lt;/a&gt; where we compare PTB-based atomic leverage vs EVM Flash Loan patterns.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="supply-apy--borrow-apy"&gt;Supply APY &amp;amp; Borrow APY
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Supply APY&lt;/strong&gt;: What you earn by depositing assets. Composed of base interest + reward tokens (e.g., sSUI, DEEP).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Borrow APY&lt;/strong&gt;: What you pay for borrowing. Some protocols give borrowing incentives (rebates).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Net APY&lt;/strong&gt;: The leveraged return on your equity.&lt;/li&gt;
&lt;/ul&gt;
$$\text{Net APY} = \frac{\text{Total Position} \times \text{Supply APY} - \text{Debt} \times \text{Borrow APY}}{\text{Initial Equity}}$$&lt;p&gt;With 2x leverage: if supply APY &amp;gt; borrow APY, your returns are amplified. If not, you&amp;rsquo;re paying more than you earn (negative Net APY).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The interest rate models behind these APYs (JumpRateModel, utilization curves) are covered in &lt;a class="link" href="https://jeongseup.github.io/p/lending-protocol-study-day1/" &gt;Lending Protocol Study Day 1&lt;/a&gt; and &lt;a class="link" href="https://jeongseup.github.io/p/lending-protocol-study-day2/" &gt;Day 2&lt;/a&gt;. Especially the Mantissa-based fixed-point arithmetic in Day 2 is directly relevant to how we parse on-chain rate data.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="liquidation-price"&gt;Liquidation Price
&lt;/h3&gt;&lt;p&gt;The asset price at which your position hits the liquidation threshold:&lt;/p&gt;
$$\text{Liquidation Price} = \frac{\text{Total Debt}}{\text{Total Collateral Amount} \times \text{Liquidation Threshold}}$$&lt;p&gt;For a $100 SUI position at 2x leverage on Suilend (LT = 75%):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Debt = $100, Total collateral = ~52.6 SUI (at $3.80)&lt;/li&gt;
&lt;li&gt;Liquidation Price = $100 / (52.6 × 0.75) ≈ $2.53&lt;/li&gt;
&lt;li&gt;That&amp;rsquo;s a ~33% price drop buffer from current price&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="how-its-built"&gt;How It&amp;rsquo;s Built
&lt;/h2&gt;&lt;h3 id="architecture"&gt;Architecture
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;previewLeverage(params)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 1. Resolve coin type (&amp;#39;SUI&amp;#39; → &amp;#39;0x2::sui::SUI&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 2. Fetch risk params from protocol adapter
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ └─ getAssetRiskParams(coinType) → { ltv, liquidationThreshold, maxMultiplier }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 3. Validate multiplier ≤ maxMultiplier
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 4. Fetch current price from 7k Protocol aggregator
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 5. Position calculation
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ ├─ flashLoanUsdc = equity × (multiplier − 1) × 1.02 buffer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ ├─ totalPositionUsd = equity × multiplier
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ └─ ltvPercent = debt / totalPosition × 100
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 6. Liquidation calculation
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ ├─ liquidationPrice = debt / (collateralAmount × LT)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ └─ priceDropBuffer = (1 − liqPrice / currentPrice) × 100
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├─ 7. APY calculation
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ ├─ Supply APY: base + reward (per protocol adapter)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ ├─ Borrow APY: gross − rebate (per protocol adapter)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ └─ Net APY = (position × supplyAPY − debt × borrowAPY) / equity
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─ 8. Swap slippage estimation via 7k DEX aggregator quote
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="multi-protocol-adapter-pattern"&gt;Multi-Protocol Adapter Pattern
&lt;/h3&gt;&lt;p&gt;Each lending protocol (Suilend, Navi, Scallop) implements the &lt;code&gt;ILendingProtocol&lt;/code&gt; interface, and the preview engine queries them through a unified API:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;ILendingProtocol&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;getAssetRiskParams&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coinType&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;ltv&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;liquidationThreshold&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;maxMultiplier&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;getAssetApy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coinType&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;supplyApy&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;rewardApy&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;borrowApy&lt;/span&gt;: &lt;span class="kt"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// ... deposit, borrow, withdraw, etc.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The same &lt;code&gt;previewLeverage&lt;/code&gt; call works across all three protocols — just change the &lt;code&gt;protocol&lt;/code&gt; parameter:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Compare leverage across protocols
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;protocol&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;suilend&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;navi&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;scallop&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;preview&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;previewLeverage&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;depositAsset&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;SUI&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;depositValueUsd&lt;/span&gt;: &lt;span class="kt"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;multiplier&lt;/span&gt;: &lt;span class="kt"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;protocol&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;: Net APY &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;preview&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;netApy&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;%`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;This adapter pattern follows the same principle as Aave V3&amp;rsquo;s modular architecture — separation of concerns with a thin routing layer. The &lt;a class="link" href="https://jeongseup.github.io/p/lending-protocol-study-day2/" &gt;Day 2 study&lt;/a&gt; covers how Aave V3 uses &lt;code&gt;delegatecall + Library pattern&lt;/code&gt; to achieve a similar pluggable design.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="data-sources"&gt;Data Sources
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Data&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Asset price&lt;/td&gt;
&lt;td&gt;7k Protocol &lt;code&gt;getTokenPrice&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Real-time DEX aggregated price&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LTV / LT&lt;/td&gt;
&lt;td&gt;Protocol on-chain state&lt;/td&gt;
&lt;td&gt;Suilend &lt;code&gt;RateLimiterConfig&lt;/code&gt;, Navi &lt;code&gt;ReserveData&lt;/code&gt;, Scallop &lt;code&gt;risk_models&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supply/Borrow APY&lt;/td&gt;
&lt;td&gt;Protocol SDK + on-chain query&lt;/td&gt;
&lt;td&gt;Includes reward token APY&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flash loan fee&lt;/td&gt;
&lt;td&gt;Scallop &lt;code&gt;FLASHLOAN_FEES_TABLE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Currently 0% for USDC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Swap slippage&lt;/td&gt;
&lt;td&gt;7k Protocol &lt;code&gt;quote()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Real-time DEX routing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="challenges--bugs-fixed"&gt;Challenges &amp;amp; Bugs Fixed
&lt;/h2&gt;&lt;h3 id="reward-apy-showing-3700-instead-of-146"&gt;Reward APY showing 3700% instead of 1.46%
&lt;/h3&gt;&lt;p&gt;Suilend stores reward coin types without the &lt;code&gt;0x&lt;/code&gt; prefix internally (e.g., &lt;code&gt;deeb7a4...::deep::DEEP&lt;/code&gt;). When we passed this to the 7k price API, it returned 0. The fallback code then used the deposit asset&amp;rsquo;s price ($67,987 for LBTC) as a proxy for the reward token (DEEP at $0.027), inflating the reward APY to 3700%.&lt;/p&gt;
&lt;p&gt;Fix: normalize the coin type with &lt;code&gt;0x&lt;/code&gt; prefix before price lookup, and skip the reward if price is still unavailable.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Before (broken)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rewardPrice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;getTokenPrice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rewardCoinType&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// returns 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Fallback: uses LBTC price → 3700% APY
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// After (fixed)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;normalizedReward&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;normalizeCoinType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rewardCoinType&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchedPrice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;getTokenPrice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;normalizedReward&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fetchedPrice&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// skip this reward
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="scallop-risk-params-not-accessible-via-sdk"&gt;Scallop risk params not accessible via SDK
&lt;/h3&gt;&lt;p&gt;Scallop&amp;rsquo;s TypeScript SDK doesn&amp;rsquo;t expose &lt;code&gt;risk_models&lt;/code&gt; data. We had to query the on-chain &lt;code&gt;risk_models&lt;/code&gt; dynamic fields directly using &lt;code&gt;suiClient.getDynamicFieldObject()&lt;/code&gt; to extract LTV and liquidation threshold values.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="verified-results-2026-02-26-mainnet"&gt;Verified Results (2026-02-26, Mainnet)
&lt;/h2&gt;&lt;h3 id="sui-2x-leverage"&gt;SUI 2x Leverage
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Suilend&lt;/th&gt;
&lt;th&gt;Navi&lt;/th&gt;
&lt;th&gt;Scallop&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Asset LTV&lt;/td&gt;
&lt;td&gt;70%&lt;/td&gt;
&lt;td&gt;75%&lt;/td&gt;
&lt;td&gt;85%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Liq. Threshold&lt;/td&gt;
&lt;td&gt;75%&lt;/td&gt;
&lt;td&gt;70%&lt;/td&gt;
&lt;td&gt;90%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max Multiplier&lt;/td&gt;
&lt;td&gt;3.33x&lt;/td&gt;
&lt;td&gt;4.00x&lt;/td&gt;
&lt;td&gt;6.67x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Liq. Price&lt;/td&gt;
&lt;td&gt;$0.63&lt;/td&gt;
&lt;td&gt;$0.68&lt;/td&gt;
&lt;td&gt;$0.53&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price Drop Buffer&lt;/td&gt;
&lt;td&gt;33%&lt;/td&gt;
&lt;td&gt;29%&lt;/td&gt;
&lt;td&gt;44%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supply APY&lt;/td&gt;
&lt;td&gt;2.89%&lt;/td&gt;
&lt;td&gt;2.97%&lt;/td&gt;
&lt;td&gt;2.98%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Borrow Net APY&lt;/td&gt;
&lt;td&gt;3.45%&lt;/td&gt;
&lt;td&gt;4.57%&lt;/td&gt;
&lt;td&gt;5.80%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Net APY&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2.33%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.37%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.15%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="xbtc-2x-leverage"&gt;XBTC 2x Leverage
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Suilend&lt;/th&gt;
&lt;th&gt;Navi&lt;/th&gt;
&lt;th&gt;Scallop&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Asset LTV&lt;/td&gt;
&lt;td&gt;60%&lt;/td&gt;
&lt;td&gt;67%&lt;/td&gt;
&lt;td&gt;75%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supply APY&lt;/td&gt;
&lt;td&gt;3.78%&lt;/td&gt;
&lt;td&gt;6.73%&lt;/td&gt;
&lt;td&gt;0.00%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Net APY&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;4.10%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;8.88%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;-5.80%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The negative Net APY on Scallop XBTC means borrowing costs exceed supply earnings — leverage actually loses money in that case.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="whats-next"&gt;What&amp;rsquo;s Next
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;leverage()&lt;/code&gt; — Actually execute the leveraged position on-chain&lt;/li&gt;
&lt;li&gt;&lt;code&gt;deleverage()&lt;/code&gt; — Close/reduce a leveraged position (flash loan → repay debt → withdraw → swap → repay)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;previewDeleverage()&lt;/code&gt; — Preview the unwinding process&lt;/li&gt;
&lt;li&gt;Cross-protocol position comparison dashboard&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="links"&gt;Links
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/curg-13/defidash-sdk" target="_blank" rel="noopener"
&gt;DefiDash SDK Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://jeongseup.github.io/p/lending-protocol-study-day1/" &gt;Lending Protocol Study Day 1&lt;/a&gt; — Core lending concepts (LTV, Health Factor, Share-Based Accounting)&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://jeongseup.github.io/p/lending-protocol-study-day2/" &gt;Lending Protocol Study Day 2&lt;/a&gt; — Compound V2 internals, Aave V3 architecture&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.sui.io/concepts/transactions/prog-txn-blocks" target="_blank" rel="noopener"
&gt;Sui PTB Documentation&lt;/a&gt; — Programmable Transaction Blocks&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://suilend.fi" target="_blank" rel="noopener"
&gt;Suilend&lt;/a&gt; | &lt;a class="link" href="https://naviprotocol.io" target="_blank" rel="noopener"
&gt;Navi Protocol&lt;/a&gt; | &lt;a class="link" href="https://scallop.io" target="_blank" rel="noopener"
&gt;Scallop&lt;/a&gt; — The three protocols supported&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;DefiDash의 전체 코드는 &lt;a class="link" href="https://github.com/curg-13" target="_blank" rel="noopener"
&gt;curg-13&lt;/a&gt; 조직에서 확인할 수 있다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>DefiDash Technical Journal Day 1: 프로젝트 킥오프와 Sui 렌딩 생태계 분석</title><link>https://jeongseup.github.io/project/defidash/defidash-technical-journal-day1/</link><pubDate>Fri, 27 Feb 2026 00:00:00 +0000</pubDate><guid>https://jeongseup.github.io/project/defidash/defidash-technical-journal-day1/</guid><description>&lt;blockquote&gt;
&lt;p&gt;DefiDash 개발 과정을 기록하는 테크니컬 저널 시리즈. Day 1에서는 프로젝트의 동기와 목표, Sui 생태계의 렌딩 프로토콜 현황, 그리고 레버리지 렌딩 어그리게이터의 아키텍처 설계를 다룬다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Team:&lt;/strong&gt; &lt;a class="link" href="https://github.com/curg-13" target="_blank" rel="noopener"
&gt;curg-13&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="왜-defidash인가"&gt;왜 DefiDash인가
&lt;/h2&gt;&lt;p&gt;DeFi 렌딩 시장은 이미 성숙해있다. Ethereum에는 Aave, Compound, MakerDAO가 있고, 다른 체인에도 포크된 프로토콜들이 넘쳐난다. 그런데 &lt;strong&gt;Sui 생태계&lt;/strong&gt;는 다르다.&lt;/p&gt;
&lt;p&gt;Sui는 Move 기반의 Object-centric 모델을 사용한다. EVM의 Account-based 모델과 근본적으로 다른 패러다임이다. 이 차이는 DeFi 프로토콜 설계에도 영향을 미친다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Object Ownership&lt;/strong&gt;: 자산이 계정이 아닌 오브젝트로 관리된다&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Parallel Execution&lt;/strong&gt;: 독립적인 오브젝트 간 트랜잭션은 병렬 실행 가능&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PTB (Programmable Transaction Blocks)&lt;/strong&gt;: 하나의 트랜잭션에서 여러 DeFi 연산을 원자적으로 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;특히 PTB는 레버리지 렌딩에 결정적이다. EVM에서는 Flash Loan으로 여러 트랜잭션을 하나로 묶지만, Sui에서는 PTB로 &lt;strong&gt;네이티브하게&lt;/strong&gt; 복합 연산이 가능하다.&lt;/p&gt;
&lt;p&gt;문제는 Sui의 렌딩 프로토콜들이 아직 파편화되어 있다는 것이다. 각 프로토콜마다 다른 인터페이스, 다른 이자율 모델, 다른 담보 비율. 일반 사용자가 최적의 레버리지 전략을 찾는 것은 사실상 불가능하다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DefiDash는 이 문제를 해결한다.&lt;/strong&gt; Sui 생태계의 렌딩 프로토콜들을 하나의 인터페이스로 어그리게이트하여, 사용자에게 최적의 레버리지 전략을 제공한다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="프로젝트-구조"&gt;프로젝트 구조
&lt;/h2&gt;&lt;p&gt;curg-13 팀으로 3개의 레포지토리를 구성했다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curg-13/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── defidash-sdk # 핵심 SDK - 프로토콜 통합 레이어
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── defidash-frontend # 사용자 facing DApp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── defidash-website # 랜딩 페이지 &amp;amp; 문서
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="defidash-sdk"&gt;defidash-sdk
&lt;/h3&gt;&lt;p&gt;프로토콜 어그리게이션의 핵심이다. 각 렌딩 프로토콜의 인터페이스를 추상화하고, 통합된 API를 제공한다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;주요 책임:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;각 프로토콜의 온체인 데이터 조회 (이자율, 담보 비율, 유동성)&lt;/li&gt;
&lt;li&gt;레버리지 포지션 시뮬레이션&lt;/li&gt;
&lt;li&gt;PTB 구성 및 트랜잭션 빌딩&lt;/li&gt;
&lt;li&gt;최적 경로 계산 (어떤 프로토콜 조합이 가장 유리한지)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="defidash-frontend"&gt;defidash-frontend
&lt;/h3&gt;&lt;p&gt;일반 사용자를 위한 DApp이다. 복잡한 레버리지 전략을 직관적인 UI로 제공한다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;핵심 UX 목표:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;원클릭 레버리지 포지션 오픈/클로즈&lt;/li&gt;
&lt;li&gt;실시간 Health Factor 모니터링&lt;/li&gt;
&lt;li&gt;프로토콜 간 이자율 비교 대시보드&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="defidash-website"&gt;defidash-website
&lt;/h3&gt;&lt;p&gt;프로젝트 소개와 문서를 담는 마케팅 사이트다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="sui-렌딩-생태계-현황"&gt;Sui 렌딩 생태계 현황
&lt;/h2&gt;&lt;p&gt;현재 Sui에서 활동 중인 주요 렌딩 프로토콜들을 정리했다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Protocol&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Key Feature&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Scallop&lt;/td&gt;
&lt;td&gt;Pool-based&lt;/td&gt;
&lt;td&gt;Sui 최초의 렌딩 프로토콜, sCoin 모델&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NAVI Protocol&lt;/td&gt;
&lt;td&gt;Pool-based&lt;/td&gt;
&lt;td&gt;Dynamic interest rate, Flash Loan 지원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Suilend&lt;/td&gt;
&lt;td&gt;Pool-based&lt;/td&gt;
&lt;td&gt;Solend 팀의 Sui 버전, Obligation 기반&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bucket Protocol&lt;/td&gt;
&lt;td&gt;CDP-based&lt;/td&gt;
&lt;td&gt;BUCK 스테이블코인 발행&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;EVM 생태계와 비교하면 아직 초기 단계지만, 각 프로토콜이 Sui의 특성을 살린 독자적인 설계를 가지고 있다. 이 차이점이 곧 어그리게이션의 가치다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="아키텍처-설계-어그리게이션-레이어"&gt;아키텍처 설계: 어그리게이션 레이어
&lt;/h2&gt;&lt;p&gt;레버리지 렌딩 어그리게이터의 핵심은 &lt;strong&gt;Protocol Adapter Pattern&lt;/strong&gt;이다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;사용자 → DefiDash Frontend
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; DefiDash SDK
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ┌─────────┼─────────┐
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ ↓ ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Scallop NAVI Suilend ← Protocol Adapters
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Adapter Adapter Adapter
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ ↓ ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └─────────┼─────────┘
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Sui Network
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;각 프로토콜 Adapter는 동일한 인터페이스를 구현한다:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;LendingProtocolAdapter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 프로토콜 상태 조회
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;getMarkets&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;Market&lt;/span&gt;&lt;span class="err"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;getInterestRates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;market&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;InterestRate&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;getUserPosition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;: &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;Position&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 트랜잭션 빌딩
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt; &lt;span class="nx"&gt;buildSupplyTx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;: &lt;span class="kt"&gt;SupplyParams&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TransactionBlock&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;buildBorrowTx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;: &lt;span class="kt"&gt;BorrowParams&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TransactionBlock&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;buildLeverageTx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;: &lt;span class="kt"&gt;LeverageParams&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TransactionBlock&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;이 패턴의 장점은 새로운 프로토콜 추가가 Adapter 하나만 구현하면 된다는 것이다. SDK의 코어 로직이나 프론트엔드를 수정할 필요 없다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="레버리지-렌딩의-원리"&gt;레버리지 렌딩의 원리
&lt;/h2&gt;&lt;p&gt;일반 사용자를 위해 레버리지 렌딩이 어떻게 작동하는지 정리한다.&lt;/p&gt;
&lt;h3 id="기본-개념"&gt;기본 개념
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;담보 예치&lt;/strong&gt;: 1,000 USDC를 렌딩 프로토콜에 담보로 예치&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;대출&lt;/strong&gt;: 담보 대비 700 SUI를 대출 (LTV 70%)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;재예치&lt;/strong&gt;: 대출받은 SUI를 다시 담보로 예치&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;반복&lt;/strong&gt;: 이 과정을 반복하면 실효 레버리지가 증가&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;초기 자본: 1,000 USDC
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1차 대출: 700 SUI → 재예치
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2차 대출: 490 SUI → 재예치
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3차 대출: 343 SUI → 재예치
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;실효 노출: ~3,333 USDC 상당 (약 3.3x 레버리지)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="sui-ptb의-이점"&gt;Sui PTB의 이점
&lt;/h3&gt;&lt;p&gt;EVM에서는 이 과정을 Flash Loan + 여러 컨트랙트 호출로 구현해야 한다. 가스비도 높고 실패 리스크도 있다.&lt;/p&gt;
&lt;p&gt;Sui의 PTB에서는 &lt;strong&gt;하나의 트랜잭션 블록 안에서&lt;/strong&gt; 모든 단계를 원자적으로 실행할 수 있다:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;txb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;TransactionBlock&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 1. 담보 예치
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;receipt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;txb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;moveCall&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PROTOCOL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;::deposit`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arguments&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[...]&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 2. 대출
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;borrowed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;txb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;moveCall&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PROTOCOL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;::borrow`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arguments&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[...]&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 3. 재예치 (대출 결과를 바로 사용)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nx"&gt;txb&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;moveCall&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PROTOCOL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;::deposit`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arguments&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;borrowed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...]&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 하나의 트랜잭션으로 실행
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signAndExecuteTransactionBlock&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;transactionBlock&lt;/span&gt;: &lt;span class="kt"&gt;txb&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Flash Loan 없이도 원자적 레버리지가 가능하다. 이것이 Sui에서 렌딩 어그리게이터를 만드는 핵심 이유다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="day-1-정리"&gt;Day 1 정리
&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목&lt;/th&gt;
&lt;th&gt;결정 사항&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;프로젝트명&lt;/td&gt;
&lt;td&gt;DefiDash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;팀&lt;/td&gt;
&lt;td&gt;curg-13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;타겟 체인&lt;/td&gt;
&lt;td&gt;Sui&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;핵심 기술&lt;/td&gt;
&lt;td&gt;PTB 기반 레버리지 렌딩 어그리게이션&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SDK 언어&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;아키텍처&lt;/td&gt;
&lt;td&gt;Protocol Adapter Pattern&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;첫 통합 대상&lt;/td&gt;
&lt;td&gt;Scallop, NAVI, Suilend&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="next-day-2"&gt;Next: Day 2
&lt;/h2&gt;&lt;p&gt;다음 저널에서는 실제 SDK 개발을 시작한다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sui 렌딩 프로토콜 온체인 데이터 구조 분석&lt;/li&gt;
&lt;li&gt;Protocol Adapter 구현 (Scallop부터)&lt;/li&gt;
&lt;li&gt;PTB 기반 레버리지 트랜잭션 빌딩&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;DefiDash의 전체 코드는 &lt;a class="link" href="https://github.com/curg-13" target="_blank" rel="noopener"
&gt;curg-13&lt;/a&gt; 조직에서 확인할 수 있다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Validator Reward Deep Dive Series</title><link>https://jeongseup.github.io/research/2026-01-03-validator-reward-deep-dive.ko/</link><pubDate>Sat, 03 Jan 2026 00:00:00 +0000</pubDate><guid>https://jeongseup.github.io/research/2026-01-03-validator-reward-deep-dive.ko/</guid><description>&lt;h2 id="context--motivation"&gt;Context &amp;amp; Motivation
&lt;/h2&gt;&lt;p&gt;This series was originally authored during my tenure at &lt;a class="link" href="https://cosmostation.io/" target="_blank" rel="noopener"
&gt;Cosmostation&lt;/a&gt;, working with the Validator Team. The primary goal of this research was to provide a technical foundation for developing &lt;strong&gt;in-house validator monitoring and reward management tools&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;To build robust infrastructure, we needed to go beyond the surface and understand the exact mathematical and programmatic flow of rewards across different blockchain architectures. This series documents that journey, covering Cosmos, Sui, Kaia, and Namada.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="series-index"&gt;Series Index
&lt;/h2&gt;&lt;h3 id="1-walrus-the-secret-of-staking-rewards"&gt;1. &lt;a class="link" href="https://medium.com/cosmostation/validator-reward-deep-dive-series-1-walrus-the-secret-of-staking-rewards-a-complete-guide-to-87240f4af3af" target="_blank" rel="noopener"
&gt;Walrus: The Secret of Staking Rewards&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Focus:&lt;/strong&gt; Walrus 프로토콜의 보상 분배 메커니즘, 에포크 변경 및 환율 계산 로직 분석.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Insight:&lt;/strong&gt; &lt;code&gt;initiate_epoch_change&lt;/code&gt;와 &lt;code&gt;process_pending_stake&lt;/code&gt;를 심층 분석하여 스테이킹 시점과 출금 시점의 환율 차이로 보상이 결정되는 과정을 설명합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-sui-how-are-epoch-rewards-delivered-to-stakers"&gt;2. &lt;a class="link" href="https://medium.com/cosmostation/validator-reward-deep-dive-series-2-sui-how-are-epoch-rewards-delivered-to-stakers-86765ce1c7ae" target="_blank" rel="noopener"
&gt;Sui: How are Epoch Rewards Delivered to Stakers?&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Focus:&lt;/strong&gt; Sui 프로토콜의 네이티브 스테이킹 보상 메커니즘과 &lt;code&gt;sui_system&lt;/code&gt; Move 패키지를 통한 에포크 단위 보상 분배.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Insight:&lt;/strong&gt; &lt;code&gt;StakingPool&lt;/code&gt;의 환율(Exchange Rate)이 보상을 통해 어떻게 우상향하는지 설명하고, 스테이킹 및 출금 시점의 환율 차이로 보상이 산정되는 원리를 다룹니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-cosmos-how-do-inflation-and-fees-become-delegator-rewards"&gt;3. &lt;a class="link" href="https://medium.com/cosmostation/validator-reward-deep-dive-series-3-cosmos-how-do-inflation-and-fees-become-delegator-rewards-6d41c781a7b6" target="_blank" rel="noopener"
&gt;Cosmos: How do Inflation and Fees become Delegator Rewards?&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Focus:&lt;/strong&gt; &lt;code&gt;x/mint&lt;/code&gt;, &lt;code&gt;x/auth&lt;/code&gt;, &lt;code&gt;FeeCollector&lt;/code&gt;, &lt;code&gt;x/distribution&lt;/code&gt;, &lt;code&gt;x/staking&lt;/code&gt; 모듈 간의 상호작용을 통한 보상 생성 및 분배의 유기적인 과정.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Insight:&lt;/strong&gt; 인플레이션과 수수료가 &lt;code&gt;FeeCollector&lt;/code&gt;에 모여 검증인 풀로 이동하고, &amp;lsquo;누적 보상 비율(Cumulative Reward Ratio)&amp;lsquo;과 지분(Share)을 기반으로 델리게이터에게 최종 분배되는 F1 모델의 흐름을 설명합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="4-kaia-staking-rewards-in-public-delegation-contract"&gt;4. &lt;a class="link" href="https://medium.com/cosmostation/validator-reward-deep-dive-series-4-kaia-kaia-staking-rewards-in-public-delegation-contract-7f9f376cdf75" target="_blank" rel="noopener"
&gt;Kaia: Staking Rewards in Public Delegation Contract&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Focus:&lt;/strong&gt; &lt;code&gt;PublicDelegation.sol&lt;/code&gt; 시스템 컨트랙트와 ERC-20 기반 지분(Share) 토큰을 중심으로 한 스테이킹 보상 메커니즘.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Insight:&lt;/strong&gt; &lt;code&gt;stake()&lt;/code&gt; 호출 시 자동 재예치(Auto-compounding)가 발생하여 풀의 총 KAIA가 증가하고, 이로 인해 지분 가치가 상승(Value Accrual)하여 보상이 실현되는 원리를 설명합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="5-namada-pos-staking-and-inflation-in-namada"&gt;5. &lt;a class="link" href="https://medium.com/cosmostation/validator-reward-deep-dive-series-5-namada-pos-staking-and-inflation-in-namada-5e8a2f061364" target="_blank" rel="noopener"
&gt;Namada: PoS Staking and Inflation in Namada&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Focus:&lt;/strong&gt; 나마다(Namada)의 에포크 기반 PoS 인플레이션과 &amp;lsquo;Reward Product&amp;rsquo; 방식을 이용한 독창적인 보상 기록 메커니즘.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Insight:&lt;/strong&gt; 매 에포크마다 위임 지분당 보상 비율인 &lt;code&gt;reward_product&lt;/code&gt;가 기록되며, 이를 통해 델리게이터의 보상이 &lt;code&gt;위임량 * reward_product&lt;/code&gt;의 합으로 산정되는 원리를 설명합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="reflection"&gt;Reflection
&lt;/h2&gt;&lt;p&gt;Building tools for a top-tier validator team requires a &amp;ldquo;don&amp;rsquo;t trust, verify&amp;rdquo; mindset toward protocol specifications. These articles served as the technical blueprint for our engineering team to ensure reward calculation accuracy and operational excellence.&lt;/p&gt;
&lt;p&gt;I hope this archive remains a useful resource for anyone diving deep into the economics of Proof-of-Stake networks.&lt;/p&gt;</description></item><item><title>Validator Reward Deep Dive Series</title><link>https://jeongseup.github.io/research/2026-01-03-validator-reward-deep-dive/</link><pubDate>Sat, 03 Jan 2026 00:00:00 +0000</pubDate><guid>https://jeongseup.github.io/research/2026-01-03-validator-reward-deep-dive/</guid><description>&lt;h2 id="context--motivation"&gt;Context &amp;amp; Motivation
&lt;/h2&gt;&lt;p&gt;This series was originally authored during my tenure at &lt;a class="link" href="https://cosmostation.io/" target="_blank" rel="noopener"
&gt;Cosmostation&lt;/a&gt;, working with the Validator Team. The primary goal of this research was to provide a technical foundation for developing &lt;strong&gt;in-house validator monitoring and reward management tools&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;To build robust infrastructure, we needed to go beyond the surface and understand the exact mathematical and programmatic flow of rewards across different blockchain architectures. This series documents that journey, covering Cosmos, Sui, Kaia, and Namada.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="series-index"&gt;Series Index
&lt;/h2&gt;&lt;h3 id="1-walrus-the-secret-of-staking-rewards"&gt;1. &lt;a class="link" href="https://medium.com/cosmostation/validator-reward-deep-dive-series-1-walrus-the-secret-of-staking-rewards-a-complete-guide-to-87240f4af3af" target="_blank" rel="noopener"
&gt;Walrus: The Secret of Staking Rewards&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Focus:&lt;/strong&gt; The reward distribution mechanism of the Walrus protocol, including epoch changes and exchange rate calculations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Insight:&lt;/strong&gt; deeply analyzes &lt;code&gt;initiate_epoch_change&lt;/code&gt; and &lt;code&gt;process_pending_stake&lt;/code&gt; to explain how rewards are determined by the exchange rate difference between staking and withdrawal.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-sui-how-are-epoch-rewards-delivered-to-stakers"&gt;2. &lt;a class="link" href="https://medium.com/cosmostation/validator-reward-deep-dive-series-2-sui-how-are-epoch-rewards-delivered-to-stakers-86765ce1c7ae" target="_blank" rel="noopener"
&gt;Sui: How are Epoch Rewards Delivered to Stakers?&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Focus:&lt;/strong&gt; The native staking reward mechanism of the Sui protocol, driven by epoch changes and the &lt;code&gt;sui_system&lt;/code&gt; Move package.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Insight:&lt;/strong&gt; Explains how the &lt;code&gt;StakingPool&lt;/code&gt;&amp;rsquo;s exchange rate tracks the compounding value of SUI rewards, allowing delegator rewards to be calculated based on the rate difference between staking and withdrawal.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-cosmos-how-do-inflation-and-fees-become-delegator-rewards"&gt;3. &lt;a class="link" href="https://medium.com/cosmostation/validator-reward-deep-dive-series-3-cosmos-how-do-inflation-and-fees-become-delegator-rewards-6d41c781a7b6" target="_blank" rel="noopener"
&gt;Cosmos: How do Inflation and Fees become Delegator Rewards?&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Focus:&lt;/strong&gt; The organic interaction of &lt;code&gt;x/mint&lt;/code&gt;, &lt;code&gt;x/auth&lt;/code&gt;, &lt;code&gt;FeeCollector&lt;/code&gt;, &lt;code&gt;x/distribution&lt;/code&gt;, and &lt;code&gt;x/staking&lt;/code&gt; modules to source, aggregate, and distribute rewards.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Insight:&lt;/strong&gt; Explains the flow from sourcing (inflation/fees) to the &lt;code&gt;FeeCollector&lt;/code&gt;, then to validator pools, and finally to delegators via share-based calculation using the &amp;lsquo;cumulative reward ratio&amp;rsquo; (F1 Fee Distribution).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="4-kaia-staking-rewards-in-public-delegation-contract"&gt;4. &lt;a class="link" href="https://medium.com/cosmostation/validator-reward-deep-dive-series-4-kaia-kaia-staking-rewards-in-public-delegation-contract-7f9f376cdf75" target="_blank" rel="noopener"
&gt;Kaia: Staking Rewards in Public Delegation Contract&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Focus:&lt;/strong&gt; The staking reward mechanism centered around the &lt;code&gt;PublicDelegation.sol&lt;/code&gt; system contract and ERC-20 based share tokens.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Insight:&lt;/strong&gt; Describes how &lt;code&gt;stake()&lt;/code&gt; triggers auto-compounding, increasing the pool&amp;rsquo;s total KAIA while keeping shares constant, thus raising the share value (Value Accrual) which becomes the delegator&amp;rsquo;s reward.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="5-namada-pos-staking-and-inflation-in-namada"&gt;5. &lt;a class="link" href="https://medium.com/cosmostation/validator-reward-deep-dive-series-5-namada-pos-staking-and-inflation-in-namada-5e8a2f061364" target="_blank" rel="noopener"
&gt;Namada: PoS Staking and Inflation in Namada&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Focus:&lt;/strong&gt; Namada&amp;rsquo;s epoch-based PoS inflation and the unique &amp;lsquo;Reward Product&amp;rsquo; mechanism for tracking rewards.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key Insight:&lt;/strong&gt; Explains how the &lt;code&gt;reward_product&lt;/code&gt; (reward ratio per stake) is recorded each epoch, allowing delegator rewards to be calculated as the sum of &lt;code&gt;delegated_amount * reward_product&lt;/code&gt; over the delegation period.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="reflection"&gt;Reflection
&lt;/h2&gt;&lt;p&gt;Building tools for a top-tier validator team requires a &amp;ldquo;don&amp;rsquo;t trust, verify&amp;rdquo; mindset toward protocol specifications. These articles served as the technical blueprint for our engineering team to ensure reward calculation accuracy and operational excellence.&lt;/p&gt;
&lt;p&gt;I hope this archive remains a useful resource for anyone diving deep into the economics of Proof-of-Stake networks.&lt;/p&gt;</description></item><item><title>DefiDash 시작 계기: Defi Saver for Sui</title><link>https://jeongseup.github.io/project/defidash/defidash-journal-origin/</link><pubDate>Thu, 11 Dec 2025 00:00:00 +0000</pubDate><guid>https://jeongseup.github.io/project/defidash/defidash-journal-origin/</guid><description>&lt;blockquote&gt;
&lt;p&gt;CURG 13기 활동 중 DefiDash 프로젝트가 시작된 배경과, 레퍼런스인 Defi Saver를 분석한 기록.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Team:&lt;/strong&gt; &lt;a class="link" href="https://github.com/curg-13" target="_blank" rel="noopener"
&gt;curg-13&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-프로젝트-히스토리"&gt;1. 프로젝트 히스토리
&lt;/h2&gt;&lt;p&gt;이 프로젝트는 &lt;a class="link" href="https://www.curg.co/" target="_blank" rel="noopener"
&gt;CURG(Crypto United Research Group)&lt;/a&gt;라는 한국 블록체인 스터디에서 출발했다. 퇴사 후 13기로 합류했고, 이번 기수의 활동기간은 2025.10.11부터 2026.3.28이었다. DefiDash는 2025.12부터 본격적으로 개발을 시작한 프로젝트다.&lt;/p&gt;
&lt;h3 id="초기-방향-탐색"&gt;초기 방향 탐색
&lt;/h3&gt;&lt;p&gt;처음에는 Sui Stack(Walrus, Seal, Nautilus, DeepBook 등)을 활용해서 재미있는 것들을 만들어보려 했다. 하지만 팀원들과 나 모두 Sui Stack 자체에 크게 흥미를 잃었다.&lt;/p&gt;
&lt;p&gt;간단히 써본 결과, 해당 스택은 커머셜한 Web2 비즈니스를 Web3화하는 방향에 초점이 맞춰진다고 느꼈기 때문이다.&lt;/p&gt;
&lt;p&gt;EVM 생태계에서는 필요한 인프라를 유저(커뮤니티)가 직접 개발하고 비즈니스화하면서 상호작용하는 반면, Sui에서는 필요한 인프라를 재단 레벨에서 미리 구상하고 생태계 툴로 자리잡아둔 구조다. 블록체인을 구축하고 개발자를 유치하는 전략적 차이라고 생각한다.&lt;/p&gt;
&lt;h3 id="방향성-좁히기"&gt;방향성 좁히기
&lt;/h3&gt;&lt;p&gt;이후 팀원들과의 회의를 통해 초기 방향을 아래 3가지로 좁혔다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pendle to Sui + Lucky Gaming&lt;/strong&gt; — 기존에 Walrus Haultout 해커톤에서 Sui random module을 활용해 나간 경험을 확장&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Defi Saver to Sui&lt;/strong&gt; — Sui에 렌딩 프로토콜이 여럿 있으니 이를 aggregation 하는 것으로 출발&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Academic Research in Sui&lt;/strong&gt; — 오픈소스 Move DeFi 컨트랙트를 분석하면서 EVM과 MoveVM 차이를 비교&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;약 2주간의 논의를 거쳐, 2025.12.11 시점에 &lt;strong&gt;Defi Saver for Sui&lt;/strong&gt;로 방향을 결정지었다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="2-defi-saver-분석"&gt;2. Defi Saver 분석
&lt;/h2&gt;&lt;h3 id="defi-saver란"&gt;Defi Saver란?
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://defisaver.com/" target="_blank" rel="noopener"
&gt;Defi Saver&lt;/a&gt;를 간단히 말하면, &lt;strong&gt;crypto portfolio dashboard + leverage yield farming(looping)&lt;/strong&gt; 플랫폼이다. 추후 포지션 규모가 크면 자동으로 포지션을 조절해주는 기능도 제공한다.&lt;/p&gt;
&lt;p&gt;가령 담보로 맡긴 BTC가 급락하는 경우, liquidation을 방지하기 위해 leverage multiplier를 자동으로 줄여준다는 뜻이다.&lt;/p&gt;
&lt;p&gt;Defi Saver 말고도 비슷한 crypto asset dashboard 서비스는 다양하다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://help.defisaver.com/general/what-is-defi-saver" target="_blank" rel="noopener"
&gt;Defi Saver 공식 소개&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://defillama.com/protocol/defi-saver" target="_blank" rel="noopener"
&gt;DefiLlama - Defi Saver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.alchemy.com/dapps/best/crypto-portfolio-dashboards" target="_blank" rel="noopener"
&gt;Alchemy - Best Crypto Portfolio Dashboards&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="특장점"&gt;특장점
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Safe(Gnosis) Smart Wallet 사용&lt;/strong&gt;: 처음 접속 시 유저에게 Smart Wallet을 생성하도록 한다.
&lt;ul&gt;
&lt;li&gt;Automation 기능 지원을 위해서이며, &lt;code&gt;execTransaction&lt;/code&gt; 같은 여러 트랜잭션을 하나로 묶어서 실행하기 위함이다.&lt;/li&gt;
&lt;li&gt;이걸 보고 &lt;strong&gt;Sui에서는 PTB가 네이티브하게 지원되니까 오히려 만들기 편하겠다&lt;/strong&gt;는 생각을 했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Looping 레버리지&lt;/strong&gt;: 유저가 BTC를 맡기면 LTV에 따라 최대 레버리지까지 USDC를 빌려서 → 그 금액으로 BTC를 다시 사서 → 재예치하는 looping 방식을 지원한다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;직관적인 UX&lt;/strong&gt;: Liquidation price, 여러 리스크 팩터 등이 한눈에 보인다. 처음에는 별것 아닌 것 같았지만, 막상 만들어보니 이런 디테일한 정보를 잘 관리하고 UX로 풀어내는 게 쉽지 않다는 걸 뒤늦게 알게 되었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="defi-saver-직접-사용해보기"&gt;Defi Saver 직접 사용해보기
&lt;/h3&gt;&lt;p&gt;아래는 직접 써본 예시다.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jeongseup.github.io/img/defidash/defisaver-leverage-example.png"
loading="lazy"
alt="Defi Saver leverage 포지션 오픈 화면"
&gt;&lt;/p&gt;
&lt;p&gt;가격이 변동함에 따라, 담보 자산(여기선 cbBTC) 상승 시 레버리지 효과를 가질 수 있게 된다.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jeongseup.github.io/img/defidash/defisaver-leverage-result.png"
loading="lazy"
alt="가격 변동에 따른 레버리지 효과"
&gt;&lt;/p&gt;
&lt;p&gt;기본적으로 내 EOA(MetaMask 지갑 주소)에서 호출한 컨트랙트 메소드는 다음과 같다. 해당 rollup tx 안에는 여러 로직이 포함되어 있는 구조다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-solidity" data-lang="solidity"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Function&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;execTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;address&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint256&lt;/span&gt; &lt;span class="nb"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;bytes&lt;/span&gt; &lt;span class="nb"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint8&lt;/span&gt; &lt;span class="n"&gt;operation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;uint256&lt;/span&gt; &lt;span class="n"&gt;safeTxGas&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint256&lt;/span&gt; &lt;span class="n"&gt;baseGas&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;uint256&lt;/span&gt; &lt;span class="n"&gt;gasPrice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;address&lt;/span&gt; &lt;span class="n"&gt;gasToken&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;address&lt;/span&gt; &lt;span class="n"&gt;refundReceiver&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;bytes&lt;/span&gt; &lt;span class="n"&gt;signatures&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Net Transfer로 보면 로직이 보다 명확해진다.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jeongseup.github.io/img/defidash/defisaver-net-transfer.png"
loading="lazy"
alt="Net Transfer 상세"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;실제 트랜잭션: &lt;a class="link" href="https://basescan.org/tx/0x0869a6913cda22441ec9ed568f72336602969d214db690dac6e22e23102073ef" target="_blank" rel="noopener"
&gt;basescan.org/tx/0x0869a6&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;참고로 Defi Saver에서는 Flash Loan으로 빌린 금액의 &lt;strong&gt;0.25%를 서비스 수수료&lt;/strong&gt;로 받는 비즈니스 모델을 가진다.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jeongseup.github.io/img/defidash/defisaver-service-fee.png"
loading="lazy"
alt="서비스 수수료 구조"
&gt;&lt;/p&gt;
&lt;p&gt;포지션을 다음과 같이 preview 형태로도 제공해준다.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jeongseup.github.io/img/defidash/defisaver-position-preview.png"
loading="lazy"
alt="포지션 프리뷰"
&gt;&lt;/p&gt;
&lt;p&gt;포지션을 종료하면 기존 로직을 역행하는 과정을 거친다. 기본적으로 looping 과정에서 Morpho Flash Loan을 사용한다.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jeongseup.github.io/img/defidash/defisaver-close-position.png"
loading="lazy"
alt="포지션 종료(close position)"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Close position tx: &lt;a class="link" href="https://basescan.org/tx/0xe04ccbbd780f79de493dca0a000a0bfcf63c26bedbb1f078abb4d12413e09e5d" target="_blank" rel="noopener"
&gt;basescan.org/tx/0xe04ccb&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="3-구조-분석"&gt;3. 구조 분석
&lt;/h2&gt;&lt;h3 id="leverage-max-multiplier"&gt;Leverage Max Multiplier
&lt;/h3&gt;&lt;p&gt;최대 레버리지 배수는 다음과 같이 결정된다.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jeongseup.github.io/img/defidash/defisaver-max-multiplier.png"
loading="lazy"
alt="Max multiplier 산출 공식"
&gt;&lt;/p&gt;
$$\text{Max Multiplier} = \frac{1}{1 - \text{LTV}}$$&lt;h3 id="leverage-내부-트랜잭션-구조"&gt;Leverage 내부 트랜잭션 구조
&lt;/h3&gt;&lt;p&gt;롤업된 트랜잭션을 의미별로 구조화하면 3가지 컴포넌트로 나뉜다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Flash Loan&lt;/strong&gt; — 레버리지에 필요한 초기 자금 확보&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Swap&lt;/strong&gt; — 빌린 스테이블코인을 담보 자산으로 교환&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deposit &amp;amp; Lending&lt;/strong&gt; — 렌딩 프로토콜에 담보 예치 및 대출&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="4-defidash-프로젝트-구상"&gt;4. DefiDash 프로젝트 구상
&lt;/h2&gt;&lt;p&gt;위 분석을 바탕으로, 이번 13기 과정에서는 &lt;strong&gt;leverage, deleverage(포지션 on/off) 정도만 지원하는 MVP&lt;/strong&gt;를 만들기로 했다.&lt;/p&gt;
&lt;p&gt;각 컴포넌트별로 Sui 생태계에서 사용할 프로토콜을 매핑하면 다음과 같다.&lt;/p&gt;
&lt;h3 id="flash-loan"&gt;Flash Loan
&lt;/h3&gt;&lt;p&gt;레버리지 루핑에 필요한 스테이블코인을 어디서 빌려올 것인가?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Scallop&lt;/li&gt;
&lt;li&gt;NAVI&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="swap-aggregator--dex"&gt;Swap (Aggregator / DEX)
&lt;/h3&gt;&lt;p&gt;Flash Loan으로 빌려온 스테이블코인을 최적 비율로 담보 자산으로 교환할 곳은?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Aftermath&lt;/li&gt;
&lt;li&gt;Cetus&lt;/li&gt;
&lt;li&gt;7k Protocol&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="deposit--lending"&gt;Deposit &amp;amp; Lending
&lt;/h3&gt;&lt;p&gt;레버리지 포지션의 유지 비용(Supply APR - Borrow APR)이 가장 저렴한 곳은?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Suilend&lt;/li&gt;
&lt;li&gt;NAVI&lt;/li&gt;
&lt;li&gt;Scallop&lt;/li&gt;
&lt;li&gt;Bluefin&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Flash Loan 출처가 Scallop이라고 해서 렌딩 프로토콜도 반드시 Scallop일 필요는 없다. 각 컴포넌트는 독립적으로 최적의 조합을 선택할 수 있다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="5-프로젝트-목표-정의"&gt;5. 프로젝트 목표 정의
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;목표:&lt;/strong&gt; 3개 렌딩 프로토콜(Suilend, NAVI, Scallop)을 통합하는 leverage lending protocol aggregator 만들기.&lt;/p&gt;
&lt;h3 id="최종-워크플로우"&gt;최종 워크플로우
&lt;/h3&gt;&lt;p&gt;PTB 하나에 다음 5단계를 원자적으로 실행한다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. Flash Loan ← Scallop
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. Swap ← 7k Aggregator
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Deposit ← Lending Protocol (Suilend / NAVI / Scallop)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. Borrow ← 같은 Lending Protocol
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. Repay ← Scallop (Flash Loan 상환)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;각 컴포넌트를 TypeScript SDK 레벨로 먼저 만들어보고, 필요하다면 컨트랙트도 파헤쳐보는 것으로 방향을 잡았다.&lt;/p&gt;
&lt;p&gt;프로젝트 완성 후에는 실제 레버리지 포지션을 통해 서비스 이용의 수익성을 검증할 계획이다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="next"&gt;Next
&lt;/h2&gt;&lt;p&gt;다음 글에서는 실제 SDK 개발에 착수한다. Sui 렌딩 프로토콜의 온체인 데이터 구조를 분석하고, Protocol Adapter 패턴을 설계한 과정을 다룬다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://jeongseup.github.io/p/defidash-technical-journal-day1/" &gt;DefiDash Journal Day 1: 프로젝트 킥오프와 Sui 렌딩 생태계 분석&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;DefiDash의 전체 코드는 &lt;a class="link" href="https://github.com/curg-13" target="_blank" rel="noopener"
&gt;curg-13&lt;/a&gt; 조직에서 확인할 수 있다.&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>