
Kaspa가 SSP에 찾아옵니다 — 그리고 이를 뒷받침하는 라이브러리는 오픈 소스입니다
SSP에 Kaspa 지원이 곧 추가됩니다. Bitcoin, Ethereum, Solana에서 이미 사용하고 계신 것과 같은 2-of-2 멀티시그입니다. 키 하나는 SSP Wallet에, 다른 하나는 SSP Key에 있으며, 둘 다 동의하지 않으면 아무것도 움직이지 않습니다. 엔터프라이즈 볼트에서도 Kaspa를 사용할 수 있게 됩니다.
여기까지 오기 위해 존재하지 않던 것을 만들어야 했습니다. 오늘은 이미 공개된 부분을 소개합니다. **@runonflux/kaspa-core**는 Kaspa 거래와 멀티시그를 위한 오픈 소스 TypeScript 라이브러리로, MIT 라이선스로 공개되었습니다.
왜 라이브러리부터 만들었나
Kaspa 추가를 검토하면서 찾을 수 있는 모든 Kaspa용 JavaScript 패키지를 조사했습니다. 그중 어느 것도 Kaspa 멀티시그 거래를 처음부터 끝까지 실제로 구성하고 서명하지 못했습니다. 바로 그것이 SSP에 무엇보다 필요한 기능이었는데 말입니다.
공식적인 방법은 Kaspa의 Rust 코드를 WebAssembly로 컴파일해 사용하는 것입니다. 훌륭한 소프트웨어지만 SSP에는 잘 맞지 않습니다. SSP Key는 WebAssembly를 사용할 수 없는 React Native에서 실행되고, 브라우저 확장 프로그램은 가볍게 유지되어야 합니다. WebAssembly 번들만 해도 11 MB가 넘습니다.
그래서 저희는 Kaspa의 거래 규칙을 순수 TypeScript로 처음부터 작성했습니다. 주소, 스크립트, M-of-N 멀티시그, 서명 해시, Schnorr 서명, 수수료 및 '질량'(mass) 계산, 입력 선택까지 모두 포함합니다. 런타임 의존성은 널리 쓰이고 감사를 거친 @noble 암호화 라이브러리 두 개뿐이며, 브라우저, 확장 프로그램, Node, React Native에서 수정 없이 동작합니다.
어떻게 검증했나
지갑 코드에서 "작동하는 것 같다"는 기준이 될 수 없습니다. 이 라이브러리는 Kaspa 노드 자체와 동일하다는 것을 증명할 수 있도록 만들어졌습니다.
- Kaspa 자체 코드와 대조 검증. 테스트 스위트는 합의에 중요한 모든 함수를 참조 노드 구현인 rusty-kaspa와 대조해 실행하고, 라이브러리로 서명한 거래를 그 실제 스크립트 엔진에서 실행합니다. 1-of-1부터 15-of-15까지 모든 M-of-N 조합이 포함됩니다.
- 실제 메인넷 데이터. 메인넷에 이미 존재하는 거래 ID와 서명을 정확히 재현합니다.
- 실제 자금이 들어간 메인넷 거래. SSP 방식의 2-of-2 지출, 2-of-3 한 건, 엔터프라이즈 방식의 4-of-7, 6-of-10, 10-of-15 멀티시그를 포함한 실제 거래 15건을 이 라이브러리로 구성하고 서명했으며, 모두 네트워크에서 승인되었습니다. 모든 거래에서 노드가 계산한 거래 질량이 저희 계산과 정확히 일치했습니다.
- 공격자 관점의 검토. 여러 차례의 보안 검토에서 서명자를 속이거나 수수료를 부풀리는 방법을 집중적으로 찾았습니다. 심각한 문제는 발견되지 않았고, 지적된 사항은 모두 회귀 테스트와 함께 수정되었습니다. 보고서는 코드와 함께 공개되어 있습니다.
공개된 코드는 재현 가능한 빌드와 같은 원칙의 일부입니다. 무엇이 여러분의 거래에 서명하는지에 대해 저희 말만 믿어야 할 이유는 없습니다.
SSP에서 Kaspa는 이렇게 동작합니다
여러분의 Kaspa 볼트는 SSP의 일반적인 파생 경로에 따라 두 기기 모두로부터 파생되는 Kaspa 멀티시그 주소(kaspa:p로 시작)가 됩니다. 송금은 다른 체인과 같은 방식으로 이루어집니다. SSP Wallet이 자신의 절반을 준비하고 서명하면, SSP Key가 수신자, 금액, 수수료를 보여 주고, 여러분이 그곳에서 승인한 후에야 거래가 네트워크에 전달됩니다. 새로운 체인 위의 같은 2-of-2 모델입니다.
Kaspa 고유의 몇 가지 특성이 설계에 반영되었습니다.
- 각 기기가 직접 금액을 확인합니다. Kaspa 서명은 자신이 서명하는 입력의 금액에만 커밋하므로, 전달받은 금액을 그대로 믿는 기기는 수수료에 대해 속을 수 있습니다. SSP에서는 각 기기가 서명 전에 사용되는 코인을 스스로 조회하고, 자신의 볼트에 대해서만 서명합니다.
- 거래 ID는 서명 전에 확정됩니다. Kaspa의 거래 ID에는 서명이 포함되지 않으므로, SSP는 어느 키도 서명하기 전에 거래를 최종 ID에 고정할 수 있습니다.
- 수수료 상한이 내장되어 있습니다. 수수료에는 상한이 있어, 잘못된 수수료 추정이 값비싼 실수로 이어질 수 없습니다.
기업을 위해 SSP Enterprise 볼트는 M-of-N 승인 방식으로 Kaspa를 지원하며, 볼트당 Kaspa의 표준 한도인 최대 15개 키까지 사용할 수 있게 됩니다.
첫 릴리스에 포함되지 않는 것
큰 것을 허술하게 내놓기보다 작은 것을 제대로 내놓고 싶습니다. 첫 릴리스는 메인넷의 KAS 자체를 지원합니다. KRC-20 토큰, Kaspa 테스트넷, Kaspa 메시지 서명, Kaspa용 WalletConnect는 출시 시점에 포함되지 않습니다.
언제
Kaspa 지원은 SSP Wallet, SSP Key, SSP Enterprise 전반에 구현되어 있으며, 현재 최종 테스트를 진행하고 있습니다. 사용할 수 있게 되면 릴리스 노트와 함께 이곳에서 알려 드리겠습니다. 그때까지는 활성화할 것도, 다운로드할 것도 없으며, 다르게 말하는 사람이 있다면 그것은 저희가 아닙니다.
그동안 개발자분들은 오늘부터 이 라이브러리를 사용할 수 있습니다. npm에서는 @runonflux/kaspa-core로, GitHub에서는 RunOnFlux/kaspa-core에서 찾을 수 있습니다.


