DApp Connector API v4.0.0 release notes
- Version: v4.0.0
- Date: 28 January 2026
- Environment: Preview, PreProd
High-level summary
DApp Connector API의 전면 재설계 릴리스입니다. 타입 기반 아키텍처, 네트워크 인식 연결, 세분화된 잔액/주소 메서드, 증명 위임, CAIP-372 호환 지갑 검색 기능이 추가되었습니다. 호환성을 깨는 변경이 포함되어 v3.0.0 사용자 전원에게 영향을 줍니다.
Audience
다음 개발자가 확인해야 합니다:
- DApp에서
@midnight-ntwrk/dapp-connector-api를 사용하는 경우 - Midnight 애플리케이션에 지갑 기능을 통합하는 경우
- DApp Connector API 호환 지갑 구현을 유지 관리하는 경우
What changed (Summary of updates)
- 인터페이스 기반에서 타입 기반 아키텍처로 API 전면 재설계
enable()/isEnabled()연결 모델을 네트워크 인식connect(networkId)로 교체@midnight-ntwrk/wallet-api및@midnight-ntwrk/zswap의존성 제거getProvingProvider()메서드를 통한 증명 위임 추가makeIntent()메서드를 통한 아토믹 스왑 지원 추가- 단일
state()메서드를 대체하는 세분화된 잔액 및 주소 메서드 추가 - 새로운 오류 코드 추가:
PermissionRejected및Disconnected - 크로스 바운더리 호환성을 위해
APIError을 클래스에서 타입으로 변경 - 종합적인 사양 문서 추가
New features
추가된 새 기능의 상세 내용입니다.
Proving delegation (getProvingProvider)
DApp이 ZK 증명 생성을 지갑에 위임할 수 있습니다. 지갑이 사용자 선호에 따라 로컬, 원격, 하드웨어 가속 등 다양한 증명 방식을 제공할 수 있어 유연성이 높아집니다. DApp이 KeyMaterialProvider를 제공하면 Midnight Ledger 호환 ProvingProvider를 받습니다.
Intent creation (makeIntent)
아토믹 스왑을 위해 의도적으로 불균형한 인텐트가 포함된 트랜잭션을 생성합니다. 인텐트 ID와 수수료 결제 옵션을 설정하여 원하는 입출력을 지정할 수 있습니다. DEX 통합 및 P2P 토큰 스왑에 필수적입니다.
Transfer creation (makeTransfer)
지정 출력으로 전송 트랜잭션을 생성하는 간편 메서드입니다. 코인 선택과 트랜잭션 구성의 복잡성을 내부적으로 처리합니다.
Data signing (signData)
지갑 키로 임의 데이터에 서명합니다. 인코딩(hex, base64, text)과 키 유형을 선택할 수 있으며, 실수로 트랜잭션에 서명하는 것을 방지하기 위해 자동으로 접두사가 추가됩니다.
Transaction history (getTxHistory)
지갑 관련 트랜잭션 내역을 페이지네이션으로 조회합니다. 트랜잭션 해시와 상세 상태(pending, confirmed, finalized, discarded)가 포함됩니다.
Connection status (getConnectionStatus)
지갑 연결이 유효한지, 어떤 네트워크에 연결되어 있는지 확인합니다.
Hint usage (hintUsage)
DApp이 사용할 API 메서드를 미리 힌트로 제공합니다. 지갑이 사전에 필요한 권한을 사용자에게 요청하여 UX가 향상됩니다.
CAIP-372 compatible discovery
새로운 InitialAPI 타입은 CAIP-372 초안 사양과 호환되는 표준화된 지갑 검색을 위해 rdns(역방향 DNS 식별자), name, icon, apiVersion을 포함합니다.
New features requiring configuration updates
설정 변경이 필요한 새 기능입니다.
Network-aware connection
모든 DApp에서 대상 네트워크를 지정하도록 연결 로직을 업데이트해야 합니다. 올바른 네트워크 연결과 멀티 네트워크 지갑 지원을 보장합니다.
필수 업데이트:
wallet.enable()을wallet.connect(networkId)로 교체하세요.- Preview에는
'preview', Mainnet에는'mainnet', 테스트 네트워크에는 다른 문자열을 사용하세요.
Improvements
이번 릴리스의 개선 사항입니다.
Granular balance methods
단일 state() 메서드를 getShieldedBalances, getUnshieldedBalances, getDustBalance로 분리했습니다. 의미가 명확해지고 권한을 더 세밀하게 제어할 수 있습니다.
Granular address methods
주소 유형별 조회 메서드(getShieldedAddresses, getUnshieldedAddress, getDustAddress)를 Bech32m 인코딩으로 제공합니다.
Type-based architecture
인터페이스/클래스 기반에서 TypeScript 타입으로 전환했습니다. 크로스 바운더리 instanceof 문제가 해결되고, ts-custom-error 의존성 제거로 번들 크기가 줄었습니다.
Enhanced transaction balancing
트랜잭션 밸런싱을 balanceUnsealedTransaction과 balanceSealedTransaction으로 분리하여 사용 사례에 맞는 메서드를 선택할 수 있습니다.
Deprecations
이번 릴리스에서 deprecated 처리된 기능입니다.
Prover server URI
- Starts: v4.0.0
- Full removal: v5.0.0 (예정)
- Replacement:
getProvingProvider()메 서드
마이그레이션 단계:
- 설정에서
proverServerUri사용을 중단하세요. getProvingProvider(keyMaterialProvider)을 사용하여 proving provider을 얻으세요.- 키 자료 확인을 위해 Midnight.js의
ZKConfigProvider와 통합하세요.
Breaking changes
호환성을 깨는 변경과 필요한 조치 사항입니다.
Complete API redesign
전체 API 구조가 인터페이스 기반에서 타입 기반 아키텍처로 재설계되었습니다.
영향: v3.0.0 API을 사용하는 모든 기존 DApp 통합에 영향을 미칩니다.
필요한 조치:
- 모든 import를 새 타입 이름으로 업데이트하세요.
DAppConnectorAPI을InitialAPI로 교체하세요.DAppConnectorWalletAPI을WalletConnectedAPI로 교체하세요.DAppConnectorWalletState사용을 개별 메서드 호출로 교체하세요.
코드 예시:
// v3.0.0
const wallet: DAppConnectorAPI = window.midnight?.someWallet;
const enabled = await wallet.isEnabled();
const walletApi = await wallet.enable();
const state = await walletApi.state();
console.log(state.address);
// v4.0.0
const wallet: InitialAPI = window.midnight?.someWallet;
const connectedApi = await wallet.connect('preview');
const addresses = await connectedApi.getShieldedAddresses();
console.log(addresses.shieldedAddress);
Connection model
enable() 및 isEnabled() 메서드가 제거되고 connect(networkId)로 교체되었습니다.
영향: 기존 DApp의 모든 연결 로직에 영향을 미칩니다.
필요한 조치:
wallet.enable()을wallet.connect(networkId)로 교체하세요.isEnabled()확인을 제거하고 대신getConnectionStatus()을 사용하세요.- 네트워 크 ID 매개변수를 제공하세요 (Preview에는 'preview', Mainnet에는 'mainnet' 사용).
State access removal
결합된 지갑 상태를 반환하는 state() 메서드가 제거되었습니다.
영향: state().address, state().coinPublicKey 등에 접근하는 모든 코드에 영향을 미칩니다.
필요한 조치:
state()을 적절한 세분화된 메서드로 교체하세요.- shielded 주소와 키에는
getShieldedAddresses()을 사용하세요. - unshielded 주소에는
getUnshieldedAddress()을 사용하세요. - 잔액에는
getShieldedBalances()/getUnshieldedBalances()을 사용하세요.
코드 예시:
// v3.0.0
const state = await walletApi.state();
const address = state.address;
const coinPubKey = state.coinPublicKey;
// v4.0.0
const { shieldedAddress, shieldedCoinPublicKey } = await connectedApi.getShieldedAddresses();
Transaction balancing
balanceAndProveTransaction(tx, newCoins)이 balanceUnsealedTransaction(tx) 및 balanceSealedTransaction(tx)으로 교체되었습니다.
영향: 모든 트랜잭션 밸런싱 로직에 영향을 미칩니다.
필요한 조치:
- 사용 사례에 unsealed(컨트랙트 상호작용) 또는 sealed(스왑 완료) 밸런싱이 필요한지 결정하세요.
- 메서드 호출을 업데이트하고 문자열 기반 트랜잭션 형식을 처리하세요.
newCoins매개변수를 제거하세요 (더 이상 필요하지 않습니다).
코드 예시:
// v3.0.0
const provedTx = await walletApi.balanceAndProveTransaction(tx, newCoins);
// v4.0.0
const { tx: balancedTx } = await connectedApi.balanceUnsealedTransaction(serializedTx);
APIError type
APIError이 CustomError을 확장하는 클래스에서 타입 별칭으로 변경되었습니다.
영향: instanceof APIError 검사에 영향을 미칩니다.
필요한 조치:
error instanceof APIError을error.type === 'DAppConnectorAPIError'로 교체하세요.- 오류 처리 로직을 업데이트하세요.
코드 예시:
// v3.0.0
try {
await walletApi.submitTransaction(tx);
} catch (error) {
if (error instanceof APIError) {
console.log(error.code);
}
}
// v4.0.0
try {
await connectedApi.submitTransaction(tx);
} catch (error) {
if (error.type === 'DAppConnectorAPIError') {
console.log(error.code);
}
}
Configuration interface
ServiceUriConfig이 Configuration으로 이름이 변경되었고, networkId가 추가되었으며, proverServerUri가 선택적이 되고 deprecated 처리되었습니다.
영향: ServiceUriConfig을 import하거나 사용하는 코드에 영향을 미칩니다.
필요한 조치:
- import를
Configuration타입을 사용하도록 업데이트하세요. - 선택적
proverServerUri을 처리하세요. networkId가 예상 네트워크와 일치하는지 검증하세요.
Removed dependencies
@midnight-ntwrk/wallet-api 및 @midnight-ntwrk/zswap이 의존성에서 제거되었습니다.
영향: 이러한 전이적 의존성에 의존하던 타입 import에 영향을 미칩니다.
필요한 조치: 트랜잭션 타입을 문자열 직렬화 형식을 사용하도록 업데이트하세요.
Links and references
- Specification: DApp Connector API specification
- API documentation: DApp Connector API documentation
- NPM package: @midnight-ntwrk/dapp-connector-api