Sign Transaction

ArConnect Injected API sign() function

To submit a transaction to the Arweave Network, it first has to be signed using a private key. The sign() function is meant to replicate the behavior of the transactions.sign() function of arweave-js, but instead of mutating the transaction object, it returns a new and signed transaction instance.

Argument
Type
Description

transaction

A valid Arweave transaction instance (without a keyfile)

options?

Arweave transaction signature options

Note: This function requires the SIGN_TRANSACTION permission.

Note: The options argument is optional, if it is not provided, the extension will use the default signature options (default salt length) to sign the transaction.

Tip: A better alternative to this function is using the arweave-js transactions.sign() instead. Just omit the second parameter (JWK key) when calling the method, and arweave-js will automatically use ArConnect.

Note: If you are trying to sign a larger piece of data (5 MB <), make sure to notify the user to not switch / close the browser tab. Larger transactions are split into chunks in the background and will take longer to sign.

Example usage

import Arweave from "arweave";

// create arweave client
const arweave = new Arweave({
  host: "ar-io.net",
  port: 443,
  protocol: "https"
});

// connect to the extension
await window.arweaveWallet.connect(["SIGN_TRANSACTION"]);

// create a transaction
const transaction = await arweave.createTransaction({
  data: '<html><head><meta charset="UTF-8"><title>Hello permanent world! This was signed via ArConnect!!!</title></head><body></body></html>'
});

// sign using arweave-js
await arweave.transactions.sign(transaction);

// TODO: post the transaction to the network

Directly using ArConnect

import Arweave from "arweave";

// create arweave client
const arweave = new Arweave({
  host: "ar-io.net",
  port: 443,
  protocol: "https"
});

// connect to the extension
await window.arweaveWallet.connect(["SIGN_TRANSACTION"]);

// create a transaction
let transaction = await arweave.createTransaction({
  data: '<html><head><meta charset="UTF-8"><title>Hello permanent world! This was signed via ArConnect!!!</title></head><body></body></html>'
});

// sign using arweave-js
const signedFields = await window.arweaveWallet.sign(transaction);

// update transaction fields with the
// signed transaction's fields
transaction.setSignature({
  id: signedFields.id,
  owner: signedFields.owner,
  reward: signedFields.reward,
  tags: signedFields.tags,
  signature: signedFields.signature
});

// TODO: post the transaction to the network

Last updated