From 4b92a78ca9ec982b49ef6716ad70acefe012e6da Mon Sep 17 00:00:00 2001 From: IzioDev <9900846+IzioDev@users.noreply.github.com> Date: Fri, 28 Nov 2025 01:28:48 +0100 Subject: [PATCH 1/4] feat: add sign personal and transaction related methods --- kip-0012.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kip-0012.md b/kip-0012.md index ac064fa..c77247e 100644 --- a/kip-0012.md +++ b/kip-0012.md @@ -43,6 +43,10 @@ Wallets and web apps communicate through the browser's `window` object using `Cu - **`kaspa:send`**: Request to sign and broadcast a PSKB over the Kaspa network. - **`kaspa:sign`**: Request to sign a PSKB. - **`kaspa:broadcast`**: Request to broadcast a signed PSKB over the Kaspa network. +- **`kaspa:signPersonal`**: Request to sign a personal message using KIP-5. +- **`kaspa:sendTransaction`**: Request to sign and broadcast a transaction over the Kaspa network. +- **`kaspa:signTransaction`**: Request to sign a transaction. +- **`kaspa:broadcastTransaction`**: Request to broadcast a signed The wallet **MUST NOT** react to any requests except the **`kaspa:connect`** event. Only after an explicit connection request **MAY** the wallet react to subsequent requests made by the **Web App**. From 601560a07968aea4e3a6dda855ca55ea39158126 Mon Sep 17 00:00:00 2001 From: IzioDev <9900846+IzioDev@users.noreply.github.com> Date: Fri, 28 Nov 2025 01:29:37 +0100 Subject: [PATCH 2/4] chore: propose an enhance version of interfaces This is incomplete as it needs to define input/output parameters per methods (currently typed as unknown) --- kip-0012.md | 111 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 93 insertions(+), 18 deletions(-) diff --git a/kip-0012.md b/kip-0012.md index c77247e..25dc1e7 100644 --- a/kip-0012.md +++ b/kip-0012.md @@ -80,32 +80,107 @@ The following is an example event flow of sending a transaction. ### Interface Definitions ```typescript -export interface KaspaProvider { - request: (method:string,args:any[]) => Promise; - connect: () => Promise; - disconnect: () => Promise; +export const KIP12_EVENT_METHOD = "kaspa:event" as const; + +export const KIP12_METHODS = [ + "kaspa:connect", + "kaspa:disconnect", + "kaspa:send", + "kaspa:sign", + "kaspa:broadcast", + "kaspa:signPersonal", + "kaspa:sendTransaction", + "kaspa:signTransaction", + "kaspa:broadcastTransaction", +] as const; + +export type KIP12Method = (typeof KIP12_METHODS)[number]; +export type KIP12EventMethod = typeof KIP12_EVENT_METHOD; + +export interface KIP12ErrorPayload { + message: string; + code?: string | number; + details?: unknown; } +export interface KIP12MethodArgs { + "kaspa:connect": []; + "kaspa:disconnect": []; + "kaspa:send": unknown[]; + "kaspa:sign": unknown[]; + "kaspa:broadcast": unknown[]; + "kaspa:signPersonal": unknown[]; + "kaspa:sendTransaction": unknown[]; + "kaspa:signTransaction": unknown[]; + "kaspa:broadcastTransaction": unknown[]; +} + +export interface KIP12MethodResult { + "kaspa:connect": unknown; + "kaspa:disconnect": unknown; + "kaspa:send": unknown; + "kaspa:sign": unknown; + "kaspa:broadcast": unknown; + "kaspa:signPersonal": unknown; + "kaspa:sendTransaction": unknown; + "kaspa:signTransaction": unknown; + "kaspa:broadcastTransaction": unknown; +} + +export type KIP12Args = KIP12MethodArgs[TMethod]; + +export type KIP12Result = + KIP12MethodResult[TMethod]; + +export interface KIP12BaseMessage { + eventId: string; + extensionId?: string; +} + +export interface KIP12RequestMessage + extends KIP12BaseMessage { + method: TMethod; + args?: KIP12Args; +} + +export interface KIP12EventSuccess extends KIP12BaseMessage { + method: KIP12EventMethod; + data: TData; + error?: undefined; +} + +export interface KIP12EventError extends KIP12BaseMessage { + method: KIP12EventMethod; + data?: undefined; + error: KIP12ErrorPayload; +} + +export type KIP12EventMessage = + | KIP12EventSuccess + | KIP12EventError; -export interface ProviderInfo { - id: string; - name: string; - icon: string; - methods: string[]; +export type KIP12ExtensionMessage = KIP12RequestMessage | KIP12EventMessage; + +export interface KIP12ProviderInfo { + readonly id: string; + readonly name: string; + readonly icon: string; + readonly methods: readonly KIP12Method[]; } -export interface Message { - eventId: string; - extensionId: string; - method: string; - args?: any[]; - error?: any; +export interface KIP12Provider { + request( + method: TMethod, + args: KIP12Args, + ): Promise>; + connect(): Promise; + disconnect(): Promise; } declare global { - interface Window { - kaspaProvider: KaspaProvider; - } + interface Window { + kaspaProvider?: KIP12Provider; + } } ``` From ee680776feca11197b0ec44197a2b7a27d9dba94 Mon Sep 17 00:00:00 2001 From: IzioDev <9900846+IzioDev@users.noreply.github.com> Date: Fri, 28 Nov 2025 01:34:12 +0100 Subject: [PATCH 3/4] typo --- kip-0012.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kip-0012.md b/kip-0012.md index 25dc1e7..bc9de9f 100644 --- a/kip-0012.md +++ b/kip-0012.md @@ -46,7 +46,7 @@ Wallets and web apps communicate through the browser's `window` object using `Cu - **`kaspa:signPersonal`**: Request to sign a personal message using KIP-5. - **`kaspa:sendTransaction`**: Request to sign and broadcast a transaction over the Kaspa network. - **`kaspa:signTransaction`**: Request to sign a transaction. -- **`kaspa:broadcastTransaction`**: Request to broadcast a signed +- **`kaspa:broadcastTransaction`**: Request to broadcast a signed transaction. The wallet **MUST NOT** react to any requests except the **`kaspa:connect`** event. Only after an explicit connection request **MAY** the wallet react to subsequent requests made by the **Web App**. From 04d0d614462f643d6b01b3b9623cdaab6ee2636b Mon Sep 17 00:00:00 2001 From: IzioDev <9900846+IzioDev@users.noreply.github.com> Date: Fri, 28 Nov 2025 01:34:40 +0100 Subject: [PATCH 4/4] typo --- kip-0012.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kip-0012.md b/kip-0012.md index bc9de9f..b5031ce 100644 --- a/kip-0012.md +++ b/kip-0012.md @@ -46,7 +46,7 @@ Wallets and web apps communicate through the browser's `window` object using `Cu - **`kaspa:signPersonal`**: Request to sign a personal message using KIP-5. - **`kaspa:sendTransaction`**: Request to sign and broadcast a transaction over the Kaspa network. - **`kaspa:signTransaction`**: Request to sign a transaction. -- **`kaspa:broadcastTransaction`**: Request to broadcast a signed transaction. +- **`kaspa:broadcastTransaction`**: Request to broadcast a signed transaction over the Kaspa network. The wallet **MUST NOT** react to any requests except the **`kaspa:connect`** event. Only after an explicit connection request **MAY** the wallet react to subsequent requests made by the **Web App**.