
2024년 2월 11일, SSP Connect는 단순한 조회 및 신원 프로토콜에서 결제 프로토콜로 한 단계 도약했습니다. SSP Wallet v1.1.0은 SSP Connect에 pay 메서드를 추가하여, 어떤 dApp이나 웹사이트라도 지갑 내부 배관을 다시 구현하지 않고 SSP 사용자에게 실제 온체인 결제를 요청할 수 있게 합니다. 요청의 모양은 의도적으로 작습니다. 매개변수 세 개, 그중 하나는 의도적으로 문자열입니다.
TL;DR
- SSP Connect는 기존 신원 흐름 옆에
pay액션을 새로 노출합니다. - 결제 요청은 정확히 세 개의 매개변수를 받습니다:
chain,address,amount. amount는 일부러 문자열입니다. 전송 중 소수 정밀도를 보존하기 위해서입니다.- 서명 흐름은 여전히 사용자의 두 기기 위에서 종단 간으로 돌아가며, dApp은 결코 키를 보지 않습니다.
- 통합자는 보내기 전에
BigNumber.toFixed()(또는 그에 상응하는 것)로amount를 포맷해야 합니다.
SSP Connect란
SSP Connect는 SSP Wallet 사용자와 바깥세상 사이를 잇는 다리입니다. SSP Wallet 출시와 함께 소개된 바로 그 가벼운 세션 프로토콜이며, 이 구조에서는 지갑 자체가 브라우저 확장과 전화기에 상주하는 SSP Key 사이에 쪼개진 진짜 2-of-2 멀티시그입니다. 이번 릴리스 이전 Connect는 주로 읽기 전용 요청에 사용되었습니다. 세션 페어링, 주소 ���유, 특정 사용자가 특정 계정을 통제한다는 사실 확인 같은 작업입니다. 결정적인 점은, 비밀은 결코 사용자의 두 기기를 떠나지 않는다는 것입니다. Connect는 그저 의도와 응답을 두 기기와 의지하는 측 사이에서 운반할 뿐입니다.
pay 액션이 하는 일
pay 메서드는 Connect를 "네가 누구인지 말해줘"에서 "결제 한 번을 부탁할게"로 확장합니다. dApp이 pay 요청을 만들어 Connect에 건네면, 사용자는 자기 지갑 UI에서 그 요청을 승인하거나 수정하거나 거절하라는 안내를 받습니다. 사용자가 승인하면 멀티시그 서명 흐름이 평소처럼 진행됩니다. 확장이 준비하고, 전화기가 함께 서명하며, 그 결과로 만들어진 트랜잭션이 브로드캐스트됩니다. dApp이 받는 것은 깔끔한 확인이거나 깔끔한 거절이며, 단 한 번도 비공개 키에 손대지 않습니다.
세 개의 매개변수
chain은 결제에 사용할 SSP 지원 자산을 가리키는 문자열로, 예컨대 'flux'처럼 씁니다. 필수입니다. 그 값은 SSP가 이미 내부에서 쓰는 자산 식별자와 같아서, 통합자는 새로운 작명 체계를 따로 익힐 필요가 없습니다.
address는 결제의 목적지입니다. 선택한 체인이 기대하는 주소 형식의 단순 문자열입니다. 이 역시 필수입니다. SSP는 사용자에게 요청을 보여주기 전에, 수신 측에서 평소와 같은 형식 및 체크섬 검증을 수행합니다.
amount는 보낼 값이며, 그 체인의 주 단위로 표현됩니다. 예를 들어 '4.56'은 4.56 FLUX를 뜻하지, 가장 작은 분할 불가 단위의 4.56이 아닙니다. 필수이며, 중요하게도 숫자가 아니라 문자열로 타입이 정의되어 있습니다.
왜 "amount"는 문자열인가
JavaScript의 숫자는 IEEE-754 더블이며, 돈에 대해서는 정확히 잘못된 표현입니다. 0.1 + 0.2는 0.3이 아니며, 소수점 18자리 토큰 금액은 조용한 반올림 없이는 더블에 들어가지 않습니다. amount를 문자열로 강제하면 프로토콜 경계에서 이 종류의 정밀도 버그가 통째로 제거됩니다. dApp이 내부에서 계산한 값(보통 빅데시멀 라이브러리로)이 지갑까지 가는 길에 그대로 살아남습니다. 릴리스 노트는 보내기 전에 값을 BigNumber.toFixed()로 포맷할 것을 권장합니다. 이는 빅데시멀을 과학적 표기법 없이 정확한 문자열로 표현하는 표준적인 방법입니다.
다음에 할 일
이미 신원 확인용으로 SSP Connect를 쓰는 dApp이나 웹사이트를 유지하고 있다면 업그레이드 경로는 짧습니다. 기존 세션을 그대로 두고, 예전에 사용자에게 주소를 복사하도록 안내하던 위치에 pay 요청을 추가하세요. 실제로 받고자 하는 SSP 지원 자산 목록과 대조해 chain을 검증하고, 사용자가 지갑에 닿기 전에 오류를 볼 수 있도록 address를 클라이언트에서 검증하며, amount는 항상 자신의 빅데시멀 라이브러리의 toFixed()(또는 동등한 것)로 포맷해, 보내는 문자열이 계산한 값과 정확히 같도록 하세요. 나머지인 확인, 서명, 브로드캐스트는 지갑이 담당하며, 키를 자신의 origin에 결코 노출하지 않습니다.
Source: SSP Wallet v1.1.0 릴리스 노트.