ARCs:specs:arc-0005.md•3.48 kB
---
arc: 5
title: Wallet Transaction Signing API (Functional)
description: An API for a function used to sign a list of transactions.
author: DanBurton (@DanBurton)
discussions-to: https://github.com/algorandfoundation/ARCs/issues/52
status: Final
type: Standards Track
category: Interface
sub-category: Wallet
created: 2021-08-09
---
# Algorand Wallet Transaction Signing API (Functionality Only)
> This ARC is intended to be completely compatible with [ARC-1](./arc-0001.md).
## Abstract
ARC-1 defines a standard for signing transactions with security in mind. This proposal is a strict subset of ARC-1 that outlines only the minimum functionality required in order to be useable.
Wallets that conform to ARC-1 already conform to this API.
Wallets conforming to [ARC-5](./arc-0005.md) but not ARC-1 **MUST** only be used for testing purposes and **MUST NOT** used on MainNet.
This is because this ARC-5 does not provide the same security guarantees as ARC-1 to protect properly wallet users.
## Specification
The key words "**MUST**", "**MUST NOT**", "**REQUIRED**", "**SHALL**", "**SHALL NOT**", "**SHOULD**", "**SHOULD NOT**", "**RECOMMENDED**", "**MAY**", and "**OPTIONAL**" in this document are to be interpreted as described in <a href="https://www.ietf.org/rfc/rfc2119.txt">RFC-2119</a>.
> Comments like this are non-normative.
### Interface `SignTxnsFunction`
Signatures are requested by calling a function `signTxns(txns)` on a list `txns` of transactions. The dApp may also provide an optional parameter `opts`.
A wallet transaction signing function `signTxns` is defined by the following interface:
```ts
export type SignTxnsFunction = (
txns: WalletTransaction[],
opts?: SignTxnsOpts,
)
=> Promise<(SignedTxnStr | null)[]>;
```
* `SignTxnsOpts` is as specified by [ARC-1](./arc-0001.md#interface-signtxnsopts).
* `SignedTxnStr` is as specified by [ARC-1](./arc-0001.md#interface-signedtxnstr).
A `SignTxnsFunction`:
* expects `txns` to be in the correct format as specified by `WalletTransaction`.
### Interface `WalletTransaction`
```ts
export interface WalletTransaction {
/**
* Base64 encoding of the canonical msgpack encoding of a Transaction.
*/
txn: string;
}
```
### Semantic requirements
* The call `signTxns(txns, opts)` **MUST** either throw an error or return an array `ret` of the same length as the `txns` array.
* Each element of `ret` **MUST** be a valid `SignedTxnStr` with the underlying transaction exactly matching `txns[i].txn`.
This ARC uses interchangeably the terms "throw an error" and "reject a promise with an error".
`signTxns` **SHOULD** follow the error standard specified in [ARC-0001](./arc-0001.md#error-standards).
### UI requirements
Wallets satisfying this ARC but not [ARC-0001](./arc-0001.md) **MUST** clearly display a warning to the user that they **MUST** not be used with real funds on MainNet.
## Rationale
This simplified version of ARC-0001 exists for two main reasons:
1. To outline the minimum amount of functionality needed in order to be useful.
2. To serve as a stepping stone towards full ARC-0001 compatibility.
While this ARC **MUST** not be used by users with real funds on MainNet for security reasons, this simplified API sets a lower bar and acts as a signpost for which wallets can even be used at all.
## Security Considerations
None.
## Copyright
Copyright and related rights waived via <a href="https://creativecommons.org/publicdomain/zero/1.0/">CCO</a>.