Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

SDK 레퍼런스

@stablechain/sdk의 전체 표면. 여기에는 createStable의 서명 클라이언트, createStableReader의 읽기 전용 클라이언트, 공유 열거형, 상수 및 오류 클래스가 포함됩니다. 자세한 내용은 SDK 퀵스타트를 참조하십시오. 작업 중심의 수익 가이드를 보려면 SDK로 수익 얻기를 참조하십시오.

설치

npm install @stablechain/sdk viem
added 2 packages, audited 3 packages in 2s

viem >= 2.0.0은 피어 의존성입니다. 패키지는 @stablechain/sdk로 게시됩니다.

createStable(config)

StableClient를 구성합니다. StableClient에 나열된 메서드가 포함된 객체를 반환합니다.

import { createStable, Network } from "@stablechain/sdk";
 
const stable = createStable({ network: Network.Mainnet, account });
StableClient { transfer, quoteBridge, bridge, quoteSwap, swap, earn }

StableConfig

필드유형기본값설명
networkNetworkNetwork.Mainnet대상 네트워크.
rpcstringnetwork에 대한 공용 RPCRPC 재정의.
accountviem.Account서버 측 서명자 (예: privateKeyToAccount).
transportviem.Transport브라우저-지갑 전송 (예: custom(window.ethereum)).
walletClientviem.WalletClient사전 구축된 지갑 클라이언트. accounttransport보다 우선합니다.
earn{ vault: string }모포 V2 볼트 구성. stable.earn의 입금, 인출, 상환 및 준비-콜데이터 메서드를 호출하는 데 필요합니다.
merklApiBasestringhttps://api.merkl.xyzMerkl 보상 API 기본 URL. 자체 서버를 통해 프록시하고 브라우저 CORS 제한을 피하려면 재정의하십시오.

account, transport 또는 walletClient 중 하나를 제공하십시오. earn 필드는 선택 사항입니다. 전송, 브릿지 및 스왑은 그것 없이도 작동합니다. 볼트 입금 및 인출에는 필요하며, 구성된 볼트 없이 호출하면 SDK는 StableValidationError를 발생시킵니다.

StableClient

transfer(params)

Stable에서 네이티브 USDT0 또는 모든 ERC-20을 보냅니다. 지갑을 Stable 체인으로 전환하고, 누락된 경우 온체인에서 토큰 소수점을 가져오고, 영수증을 기다립니다.

const { txHash } = await stable.transfer({
  from: "0xYourAddress",
  to: "0xRecipient",
  amount: 10,
});
{ txHash: "0x8f3a...2d41" }
매개변수유형설명
fromstring발신자 주소.
tostring수신자 주소.
amountnumber읽기 쉬운 금액.
tokenstring?ERC-20 계약 주소. 네이티브 USDT0의 경우 생략.
tokenDecimalsnumber?소수점. 생략하면 온체인에서 가져옵니다.

OperationResult ({ txHash, toAmount? })를 반환합니다.

quoteBridge(params)

브릿지 미리보기. 읽기 전용. 서명 없음, 가스 없음.

const quote = await stable.quoteBridge({
  fromChain: Chain.Ethereum,
  toChain: Chain.Stable,
  fromToken: "0xdAC17F958D2ee523a2206206994597C13D831ec7", // 이더리움의 USDT
  toToken: "0x779Ded0c9e1022225f8E0630b35a9b54bE713736", // Stable의 USDT0
  amount: 100,
});
{ toAmount: 99.73 }

BridgeQuote를 반환합니다.

bridge(params)

LI.FI를 통해 토큰을 크로스 체인으로 브릿지하며, 이는 브릿지 경로를 선택합니다. SDK는 ERC-20 승인을 처리하고 보내기 전에 지갑을 소스 체인으로 전환합니다. 내부 견적 호출을 건너뛰려면 미리 가져온 quote를 전달하십시오.

const { txHash } = await stable.bridge({ ...bridgeParams, quote });
{ txHash: "0xabcd...7890" }
매개변수유형설명
fromChainChain소스 체인.
toChainChain대상 체인.
fromTokenstring소스 토큰 계약 주소.
toTokenstring대상 토큰 계약 주소.
amountnumber사람이 읽을 수 있는 금액.
fromDecimalsnumber?소스 토큰 소수점. 기본값은 6입니다.
recipientstring?대상 주소. 기본값은 서명자입니다.
quoteBridgeQuote?미리 가져온 견적. 내부 견적 호출을 건너뜁니다.

quoteSwap(params)

Stable에서 LI.FI 스왑 견적을 가져옵니다. 사전 구축된 트랜잭션 요청과 승인 주소를 반환합니다.

const quote = await stable.earn.quoteSwap({
  fromToken: "0x8a2B28364102Bea189D99A475C494330Ef2bDD0B",
  toToken: "0x779Ded0c9e1022225f8E0630b35a9b54bE713736",
  amount: 100,
  fromDecimals: 6,
});
{ toAmount: 99.81, fromAmount: 100000000n, fromToken: "0x8a2B...", approvalAddress: "0x...", transactionRequest: { ... } }

swap(params)

LI.FI를 통해 Stable에서 토큰을 스왑합니다. ERC-20 승인을 자동으로 처리하고 필요할 때 지갑의 체인을 전환합니다.

const { txHash, toAmount } = await stable.swap({ ...swapParams, quote });
{ txHash: "0xabcd...", toAmount: 99.81 }
매개변수유형기본값설명
fromTokenstring소스 토큰 주소.
toTokenstring대상 토큰 주소.
amountnumber사람이 읽을 수 있는 금액.
fromDecimalsnumber?6소스 토큰 소수점.
toAddressstring?서명자수신자 주소.
quoteSwapQuote?미리 가져온 견적. LI.FI 호출을 건너뜁니다.

stable.earn

수익을 얻기 위해 USDT0를 모포 V2 볼트에 공급하고 Merkl 인센티브 보상을 청구합니다. 모든 메서드는 earn 네임스페이스 아래에 있으며 서명자가 필요합니다. 입금, 인출, 상환 및 준비-콜데이터 메서드는 StableConfigearn: { vault }도 필요합니다.

const stable = createStable({
  network: Network.Mainnet,
  account,
  earn: { vault: "0xb7Df8db22A5DBBFA9ebeb94b3910aec6a4f05c08" },
});
stable.earn { deposit, bulkDeposit, withdraw, bulkWithdraw, redeem, forceWithdraw, forceRedeem, prepareDepositCalldata, prepareWithdrawCalldata, prepareRedeemCalldata, incentiveRewards }

금액과 공유 수는 사람이 읽을 수 있는 숫자입니다. 자산 및 공유 소수점은 생략하면 온체인에서 가져옵니다. 입금, 인출, 상환 및 강제 메서드는 EarnResult ({ txHash, idempotencyKey? })를 반환하고 해결되기 전에 영수증을 기다립니다. 대량 메서드는 BulkEarnResult를 반환하고 incentiveRewards.claim()은 아래 섹션에 설명된 MerklClaimResult를 반환합니다.

deposit(params)

자산을 볼트에 공급합니다. ERC-20 승인(또는 지갑이 지원하는 경우 허가 서명)을 처리한 다음 단일 호출로 입금합니다.

const { txHash } = await stable.earn.deposit({ amount: 100 });
{ txHash: "0x8f3a...2d41" }
매개변수유형기본값설명
amountnumber입금할 기본 자산, 사람이 읽을 수 있는.
vaultstring?구성 볼트볼트 주소 재정의. 여러 볼트에 걸쳐 bulkDeposit에서 항목당 필요합니다.
tokenDecimalsnumber?온체인기본 자산 소수점.
slippageTolerancenumber?0.0003소수점 형식의 슬리피지 (예: 0.003 = 0.3%). 기본값은 Morpho의 0.03%입니다.
depositBuffernumber?이 입금이 소비할 수 있는 볼트의 유휴 유동성 최대 비율 (예: 0.8 = 80%). > 0 이고 ≤ 1 이어야 합니다. 초과하면 보내기 전에 예외를 발생시킵니다.
idempotencyKeystring?중복 제거 키. 진행 중인 키로 두 번째 호출은 동일한 Promise를 반환합니다.

withdraw(params)

주어진 양의 기본 자산을 인출합니다. 유휴 볼트 유동성이 부족할 때 SDK는 차액을 충당하기 위해 볼트의 어댑터에서 자동으로 할당을 해제합니다.

const { txHash } = await stable.earn.withdraw({ amount: 50 });
{ txHash: "0xabcd...7890" }
매개변수유형기본값설명
amountnumber인출할 기본 자산, 사람이 읽을 수 있는.
tokenDecimalsnumber?온체인기본 자산 소수점.
idempotencyKeystring?중복 제거 키.

redeem(params)

기본 자산으로 다시 볼트 공유 수를 상환합니다. withdraw와 마찬가지로 유휴 유동성이 부족할 때 어댑터에서 자동으로 할당을 해제합니다.

const { txHash } = await stable.earn.redeem({ shares: 25 });
{ txHash: "0xabcd...7890" }
매개변수유형기본값설명
sharesnumber상환할 볼트 공유, 사람이 읽을 수 있는.
shareDecimalsnumber?온체인볼트 공유 소수점.
idempotencyKeystring?중복 제거 키.

bulkDeposit(items, options?) / bulkWithdraw(items, options?)

여러 입금 또는 인출을 순차적으로 실행합니다. 기본적으로 배치는 모든 항목을 시도하고 부분 결과를 반환합니다. stopOnError: true를 설정하면 첫 번째 실패 시 중단하고 StableBulkError를 발생시킵니다.

const result = await stable.earn.bulkDeposit([
  { amount: 100 },
  { amount: 250, vault: "0xAnotherVault" },
]);
{ results: [ { status: "fulfilled", txHash: "0x..." }, ... ], succeeded: 2, failed: 0 }

itemsEarnDepositParams (또는 EarnWithdrawParams) 배열입니다. options는 다음을 허용합니다:

옵션유형기본값설명
idempotencyKeystring?배치 수준 중복 제거 키.
stopOnErrorboolean?false첫 번째 실패 시 중단하고 부분 결과를 반환하는 대신 StableBulkError를 발생시킵니다.

BulkEarnResult ({ results, succeeded, failed, idempotencyKey? })를 반환합니다. results의 각 항목은 { status: "fulfilled", txHash, vault?, idempotencyKey? } 또는 { status: "rejected", error, vault?, idempotencyKey? }입니다.

forceWithdraw(params) / forceRedeem(params)

어떤 어댑터 위치에서 먼저 할당을 해제할지 명시적으로 제어하여 인출 또는 상환합니다. withdraw / redeem의 자동 선택 대신 직접 소스 시장을 선택해야 할 때 사용하십시오.

const { txHash } = await stable.earn.forceWithdraw({
  amount: 1000,
  deallocations: [{ adapter: "0xAdapter", amount: 1000 }],
});
{ txHash: "0xabcd...7890" }

둘 다 deallocations: ForceDeallocation[] 배열과 선택적 tokenDecimals (기본 자산 소수점, 할당 해제 금액에 사용; 생략하면 온체인에서 가져옴)을 사용합니다. forceWithdrawamount를 사용합니다. forceRedeemshares와 선택적 shareDecimals를 사용합니다. 각 ForceDeallocation은 다음과 같습니다.

필드유형설명
adapterstring할당을 해제할 어댑터 계약.
amountnumber기본 자산 단위로 할당을 해제할 금액.
marketParamsobject?Morpho Blue 시장 어댑터에만 필요: { loanToken, collateralToken, oracle, irm, lltv } (lltv는 1e18으로 스케일링됨). 볼트 어댑터의 경우 생략.

prepareDepositCalldata(params) / prepareWithdrawCalldata(params) / prepareRedeemCalldata(params)

서명하거나 보내지 않고 트랜잭션 콜데이터를 빌드합니다. 릴레이어, 가스 면제 흐름 또는 멀티시그를 통해 트랜잭션을 라우팅하는 데 사용하십시오.

const { steps, chainId } = await stable.earn.prepareDepositCalldata({ amount: 100 });
{ steps: [ { to: "0x...", data: "0x...", value: 0n } ], chainId: 988 }

prepareDepositCalldataEarnDepositCalldata ({ steps, chainId })를 반환하며, 여기서 steps{ to, data, value } 트랜잭션의 정렬된 목록입니다. 이는 선택적 토큰 승인과 뒤이은 입금입니다. prepareWithdrawCalldataprepareRedeemCalldata는 단일 트랜잭션인 EarnWithdrawCalldata ({ to, data, value, chainId })를 반환합니다. 서명 파트너와 동일한 매개변수를 허용합니다.

incentiveRewards

서명자에 대한 Merkl 보상 토큰을 가져오고 청구합니다. 이 메서드는 서명자가 필요하지만 earn 볼트 구성은 필요하지 않습니다.

const { rewards } = await stable.earn.incentiveRewards.fetch();
const { txHash, tokenCount } = await stable.earn.incentiveRewards.claim();
{ txHash: "0xabcd...7890", tokenCount: 1 }

fetch()는 토큰당 순 청구 가능 금액을 포함하는 MerklRewardsResult ({ chainId, rewards: MerklReward[] })를 반환합니다. claim()은 현재 Merkl Merkle 트리에 커밋된 모든 보상을 청구하고 MerklClaimResult ({ txHash, tokenCount })를 반환합니다.

createStableReader(config)

볼트 수익 및 포지션 데이터에 대한 읽기 전용 StableReader를 구성합니다. 서명자는 필요하지 않고 읽으려는 주소만 있으면 됩니다.

import { createStableReader, Network } from "@stablechain/sdk";
 
const reader = createStableReader({
  network: Network.Mainnet,
  address: "0xUserAddress",
  earn: { vault: "0xb7Df8db22A5DBBFA9ebeb94b3910aec6a4f05c08" },
});
StableReader { earn: { getYield, position, preview, withdrawability, incentiveRewards } }

StableReaderConfig

필드유형기본값설명
addressstring포지션과 보상을 읽을 사용자 주소. 필수.
earn{ vault: string }읽을 볼트. 필수: createStableReader는 없을 경우 StableValidationError를 발생시킵니다.
networkNetwork?Network.Mainnet대상 네트워크.
rpcstring?공용 RPCRPC 재정의.
merklApiBasestring?https://api.merkl.xyzMerkl 보상 API 기본 URL.

StableReader

getYield()

볼트의 현재 순 APY 및 수수료 내역을 반환합니다.

const vaultYield = await reader.earn.getYield();
{ apy: 0.058, native: 0.041, rewards: [ { symbol: "MORPHO", address: "0x...", apr: 0.017 } ], performanceFee: 0.1, managementFee: 0 }

VaultYield를 반환합니다. apy는 보상 부스트를 포함한 수수료 후 총 순 APY이며, native는 보상을 제외한 기본 시장 수익률입니다. 모든 값은 소수점 형식입니다 (0.05 = 5%).

position()

구성된 주소의 현재 볼트 포지션을 반환합니다.

const position = await reader.earn.position();
{ shares: 100000000n, sharesFormatted: 100, shareDecimals: 6, assets: 101.2, tokenDecimals: 6, assetAddress: "0x..." }

원시 shares 잔액, 포맷된 사람이 읽을 수 있는 sharesFormatted 값, 기본 단위로 된 해당 공유의 assets 값을 포함하는 VaultPosition을 반환합니다.

preview(params)

볼트의 실시간 순 APY를 사용하여 특정 금액의 수익을 특정 기간 동안 예측합니다.

const preview = await reader.earn.preview({ amount: 1000, horizonDays: 30 });
{ projectedYield: 4.64, apy: 0.058, horizonDays: 30 }
매개변수유형설명
amountnumber예측할 원금, 사람이 읽을 수 있는.
horizonDaysnumber예측 기간(일).

YieldPreview ({ projectedYield, apy, horizonDays })를 반환합니다.

withdrawability(params)

볼트의 유휴 유동성에서 즉시 인출 가능한 금액인지 확인합니다.

const status = await reader.earn.withdrawability({ amount: 5000 });
{ isInstant: true, availableLiquidity: 12500.5, tokenDecimals: 6 }
매개변수유형기본값설명
amountnumber테스트할 금액, 사람이 읽을 수 있는.
tokenDecimalsnumber?온체인기본 자산 소수점.

WithdrawStatus ({ isInstant, availableLiquidity, tokenDecimals })를 반환합니다. isInstantfalse일 때 인출은 어댑터 할당 해제가 필요하며, 이는 stable.earn.withdraw가 자동으로 처리합니다.

incentiveRewards.fetch()

구성된 주소에 대한 보류 중인 Merkl 보상을 읽습니다. stable.earn.incentiveRewards.fetch에 대한 읽기 전용 대응물입니다.

const { rewards } = await reader.earn.incentiveRewards.fetch();
{ chainId: 988, rewards: [ { token: { symbol: "MORPHO", ... }, amount: 1.25, rawAmount: "1250000...", proofs: [...] } ] }

MerklRewardsResult를 반환합니다.

열거형

Network

체인 ID
Network.Mainnet988
Network.Testnet2201

Chain

quoteBridgebridge에서 사용됩니다. 각 항목에는 해당 CHAIN_CONFIGS 항목이 있습니다. 두 테스트넷 항목은 완전성을 위해 정의되었지만 LI.FI는 이를 거부합니다. 브릿징은 메인넷 체인 사이에서만 작동합니다.

열거형네트워크체인 ID
Chain.Sepolia이더리움 세폴리아11155111
Chain.StableTestnetStable 테스트넷2201
Chain.StableStable 메인넷988
Chain.Ethereum이더리움1
Chain.Arbitrum아비트럼 원42161
Chain.InkInk57073
Chain.Bera베라체인80094
Chain.MegaETHMegaETH4326
Chain.BaseBase8453
Chain.BSCBNB 스마트 체인56
Chain.HyperEVMHyperEVM999

CHAIN_CONFIGS

Chain 열거형으로 키가 지정된 Partial<Record<Chain, ChainConfig>>입니다. 각 항목은 id, rpc, usdtdecimals를 노출합니다. 지원되는 체인에서 표준 USDT 주소를 하드 코딩하지 않고 필요할 때 사용하십시오.

import { CHAIN_CONFIGS, Chain } from "@stablechain/sdk";
 
console.log(CHAIN_CONFIGS[Chain.Stable]);
{ id: 988, rpc: "https://rpc.stable.xyz", usdt: "0x779Ded0c9e1022225f8E0630b35a9b54bE713736", decimals: 6 }

상수

하드 코딩할 필요가 없도록 내보낸 정식 메인넷 주소.

import { STABLE_USDT_ADDRESS, STABLE_VAULT_ADDRESS } from "@stablechain/sdk";
STABLE_USDT_ADDRESS  0x779ded0c9e1022225f8e0630b35a9b54be713736
STABLE_VAULT_ADDRESS 0xb7Df8db22A5DBBFA9ebeb94b3910aec6a4f05c08
상수설명
STABLE_USDT_ADDRESSStable 메인넷의 USDT 토큰 주소.
STABLE_VAULT_ADDRESSStable 메인넷의 기본 Morpho V2 수익 볼트. earn: { vault }에 전달.

오류

모든 SDK 오류는 viem의 BaseError를 확장하는 StableError를 확장합니다. 오류는 구조화된 메타데이터를 포함하므로 error.name 또는 instanceof를 사용하여 분기할 수 있습니다.

클래스발생 시점유용한 필드
StableValidationError매개변수 유효성 검사 실패 (잘못된 주소, 유한하지 않은 양, 지원되지 않는 체인).field, value
StableQuoteErrorLI.FI에 대한 견적 요청 실패.provider, httpStatus, providerCode, body
StableTransactionError온체인 단계 실패: 체인 전환, 승인, 전송 또는 되돌리기.phase, txHash, chainId, revertReason
StableNetworkError기본 HTTP/RPC 호출 실패 (예: Morpho 또는 Merkl API).url
StableBulkErrorstopOnError: true로 실행된 bulkDeposit 또는 bulkWithdraw가 첫 번째 실패 시 중단.results, succeeded, failed
import { StableTransactionError } from "@stablechain/sdk";
 
try {
  await stable.transfer({ from, to, amount: 1 });
} catch (err) {
  if (err instanceof StableTransactionError && err.phase === "switch_chain") {
    // 사용자가 체인 전환을 거부했습니다.
  }
  throw err;
}
StableTransactionError: transfer: wallet rejected or failed to switch to chain 988
  Phase: switch_chain
  Chain ID: 988

다음 권장 사항