use-truapi
Accounts

useSignRaw

Sign arbitrary bytes with the selected account

useSignRaw signs arbitrary bytes with the currently selected account. Call sign(data) with a Uint8Array; it resolves with the signature bytes. Use it for off-chain proofs (signed messages, authentication challenges, ownership checks), anything that is not a transaction.

It signs with whatever account is currently selected, so it follows useAccounts and select automatically. With no connected account, or if the user rejects the signing prompt, the call rejects and the failure also lands in error. Unlike useConnect and useLogin, the argument here is required: sign always takes the bytes to sign.

Usage

import { useSignRaw, useSelectedAccount } from "@use-truapi/react";

function SignMessage() {
  const account = useSelectedAccount();
  const { sign, isPending, error } = useSignRaw();

  async function onSign() {
    const message = new TextEncoder().encode("I own this account");
    const signature = await sign(message);
    console.log("signature:", signature);
  }

  return (
    <>
      <button type="button" onClick={onSign} disabled={!account || isPending}>
        {isPending ? "Waiting for signature…" : "Sign message"}
      </button>
      {error && <p role="alert">{error.message}</p>}
    </>
  );
}
<script setup lang="ts">
import { useSignRaw, useSelectedAccount } from "@use-truapi/vue";

const account = useSelectedAccount();
const { sign, isPending, error } = useSignRaw();

async function onSign() {
  const message = new TextEncoder().encode("I own this account");
  const signature = await sign(message);
  console.log("signature:", signature);
}
</script>

<template>
  <button type="button" :disabled="!account || isPending" @click="onSign">
    {{ isPending ? "Waiting for signature…" : "Sign message" }}
  </button>
  <p v-if="error" role="alert">{{ error.message }}</p>
</template>

See also

  • useSigner exposes the underlying PolkadotSigner for raw polkadot-api use.
  • useTx signs and submits actual transactions.

API reference

React

function useSignRaw(options?): NamedMutation<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>> & object;

Sign arbitrary bytes with the selected account: sign(data).

Parameters

ParameterType
options?{ mutation?: MutationOptions<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>>; }
options.mutation?MutationOptions<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>>

Returns

NamedMutation<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>> & object

Vue

function useSignRaw(options?): NamedMutation<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>> & object;

Sign arbitrary bytes with the selected account: sign(data).

Parameters

ParameterType
options?{ mutation?: MutationOptions<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>>; }
options.mutation?MutationOptions<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>>

Returns

NamedMutation<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>> & object

On this page