Skip to main content

Documentation Index

Fetch the complete documentation index at: https://injectivelabs-mintlify-jp-developers-first-half-1777019423.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

On this page, we’ll provide an example of how to sign and verify arbitrary data as per the ADR-036 specification on Cosmos.
You can use the generateArbitrarySignDoc function from @injectivelabs/sdk-ts to generate ADR-36 compatible signDoc. You can then use it to sign/verify using a browser wallet or in a CLI environment. Make sure you are using the latest package versions.

Sign and verify using a browser wallet like Keplr


(async () => {
  const message = "Offline Sign Message Example";
  const signer = 'inj1...'
  const chainId = 'injective-1'
  
  // Sign Arbitrary Data
  const signature = await window.keplr.signArbitrary(chainId, signer, message)
  
  // Verify Arbitrary Data
  const result = await window.keplr.verifyArbitrary(chainId, signer, message, signature)
  
  if (result) {
    console.log("Signature is valid");
  }
})();

Sign and verify using PrivateKey in a CLI environment

import { config } from "dotenv";
import { PrivateKey } from "@injectivelabs/sdk-ts/core/accounts";
import { generateArbitrarySignDoc } from "@injectivelabs/sdk-ts/core/tx";

config();

(async () => {
  const { privateKey } = PrivateKey.generate();
  const injectiveAddress = privateKey.toBech32();
  const publicKey = privateKey.toPublicKey();
  
  const message = "Offline Sign Message Example";
  const { signDocBuff } = generateArbitrarySignDoc(message, injectiveAddress);

  const signature = await privateKey.sign(signDocBuff);
  const signatureInHex = Buffer.from(signature).toString("hex");

  if (
    PrivateKey.verifyArbitrarySignature({
      signature: signatureInHex,
      signDoc: signDocBuff,
      publicKey: publicKey.toHex(),
    })
  ) {
    console.log("Signature is valid");
  }
})();

Last modified on April 24, 2026