문서/연동/SDK
SDK
SDK (클라이언트)
SDK는 디바이스에서 키를 만들고 tx를 멀티사인 서명합니다. 개인키·seed는 절대 서버로 나가지 않습니다. 서버 호출 없이 기기 로컬에서만 동작합니다.
데이터 경계
키 재료는 절대 서버로 넘어가지 않습니다. 작업별로 무엇이 로컬에 남고 무엇이 서버로 가는지가 명확히 갈립니다.
| 작업 | 클라이언트(로컬) | 서버로 | 절대 안 감 |
|---|---|---|---|
| 지갑 생성 | 유저 키 생성 | 공개키 | 개인키 · 니모닉 |
| 거래 | tx 디코드·확인 → 서명 | 서명값 | 개인키 |
| 복구 (키 분실) | 새 키 생성 | 새 공개키 | 신·구 개인키 |
| 복원 (니모닉 보유) | 같은 키 재파생 | 없음 | 니모닉 |
메서드
기기 로컬에서 동작하는 세 가지 메서드입니다. 서버 호출이 없습니다.
| 기능 | 메서드 | Request | Response |
|---|---|---|---|
| 키 생성 | generateKey(chain) | chain | { publicKey } · 개인키·니모닉은 로컬 |
| 복원(니모닉) | restoreFromMnemonic(mnemonic) | mnemonic | { publicKey } |
| 서명 | signTransaction(unsignedTx) | unsignedTx | { signature } |
서명 흐름
게이트웨이 prepare가 내려준 미서명 tx를 그대로 멀티사인 서명하고, 그 서명값을 submit으로 보냅니다. 게이트웨이가 기관·안암 서명과 결합해 정족수를 채웁니다.
// prepare로 받은 tx를 그대로 서명 → submit으로 전송
const { unsignedTx } = await api.prepare(address, { to, amount, asset })
const { signature } = sdk.signTransaction(unsignedTx)
await api.submit(address, { txId, userSignature: signature })
const { unsignedTx } = await api.prepare(address, { to, amount, asset })
const { signature } = sdk.signTransaction(unsignedTx)
await api.submit(address, { txId, userSignature: signature })
중요 — SDK는 받은
unsignedTx를 변형하거나 재-autofill 하지 않습니다. 서명자(user·institution·anam) 전원이 완전히 동일한 tx에 서명해야 결합되기 때문입니다.