Sign Transaction
The signTransaction() method is similar to checkout, but provides a different UI to the user. This request does not connect to the Nimiq blockchain at any point, so it can be used to sign transactions offline.
Table of Contents
Differences to Checkout
- It requires the request to include the sender’s address as 
sender. - It requires the request to include the transaction’s 
validityStartHeight. - The created transaction will only be returned to the caller, not sent to the network.
 
Request
Result: -
Please choose an address first to use as the sender:const options = {
  appName: 'Hub API Docs',
  sender: chosenAddress,
  recipient: 'NQ07 0000 0000 0000 0000 0000 0000 0000 0000',
  value: 3.14 * 1e5, /* 3.14 NIM */
  validityStartHeight: 500000,
  // See more options in the table below
};
// All client requests are async and return a promise
const signedTransaction = await hubApi.signTransaction(options);
Options
(On mobile, scroll right to see the whole table.)
| Option | Type | Required? | Description | 
|---|---|---|---|
appName |  string | yes | The name of your app, should be as short as possible. | 
sender |  string | yes | The human-readable address of the sender. | 
recipient |  string | yes | The human-readable address of the recipient (your shop/app). | 
value |  number | yes | Value of the transaction, in Luna. | 
validityStartHeight |  number | yes | The transaction’s validity start height. (A transaction is only valid for 120 blocks after its validityStartHeight. Transactions with a validityStartHeight higher than the next network block height are rejected and need to be sent again later during their validity window.) | 
fee |  number | no | Transaction fee in luna. Default: 0 | 
extraData |  string or Uint8Array | no | Extra data that should be sent with the transaction. | 
flags |  number | no | A Nimiq.Transaction.Flag, only required if the transaction should create a contract. |  
recipientType |  number | no | The Nimiq.AccountType of the recipient. Only required if the transaction should create a contract. |  
Result
The signTransaction() method returns a SignedTransaction.
interface SignedTransaction {
    serializedTx: string;                  // HEX signed and serialized transaction
    hash: string;                          // HEX transaction hash
    raw: {
        signerPublicKey: Uint8Array;       // Serialized public key of the signer
        signature: Uint8Array;             // Serialized signature of the signer
        sender: string;                    // Human-readable address of sender
        senderType: Nimiq.AccountType;    // 0, 1, 2, 3 - see recipientType above
        recipient: string;                 // Human-readable address of recipient
        recipientType: Nimiq.AccountType; // 0, 1, 2, 3 - see above
        value: number;
        fee: number;
        validityStartHeight: number;       // Automatically determined validity
                                           // start height of the transaction
        extraData: Uint8Array;
        flags: number;
        networkId: number;
    }
}
The serializedTx can be handed to a Nimiq JSON-RPC’s sendRawTransaction method.
The raw object can be handed to the NanoApi’s relayTransaction method.