# StarknetPersistentSigner

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetPersistentSigner.ts:54](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetPersistentSigner.ts#L54)

A complex starknet signer implementation with internal nonce management, with race condition preventions, automatic transaction rebroadcasting and failovers. Uses the NodeJS `fs` library to persist transaction data across application restarts, hence this doesn't work on frontends and is intended to be used as a robust backend wallet implementation.

## Extends

* [`StarknetSigner`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md)

## Constructors

### Constructor

```
new StarknetPersistentSigner(

   account, 

   chainInterface, 

   directory, 

   config?): StarknetPersistentSigner;
```

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetPersistentSigner.ts:76](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetPersistentSigner.ts#L76)

#### Parameters

| Parameter        | Type                                                                                                                                   |
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `account`        | `Account`                                                                                                                              |
| `chainInterface` | [`StarknetChainInterface`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetChainInterface.md) |
| `directory`      | `string`                                                                                                                               |
| `config?`        | `StarknetPersistentSignerConfig`                                                                                                       |

#### Returns

`StarknetPersistentSigner`

#### Overrides

[`StarknetSigner`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md).[`constructor`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md#constructor)

## Properties

### account

```
readonly account: Account;
```

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:82](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L82)

#### Inherited from

[`StarknetSigner`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md).[`account`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md#account)

***

### isManagingNoncesInternally

```
readonly isManagingNoncesInternally: boolean;
```

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:81](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L81)

#### Inherited from

[`StarknetSigner`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md).[`isManagingNoncesInternally`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md#ismanagingnoncesinternally)

***

### type

```
type: "AtomiqAbstractSigner";
```

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:79](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L79)

#### Inherited from

[`StarknetSigner`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md).[`type`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md#type)

## Methods

### getAddress()

```
getAddress(): string;
```

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:99](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L99)

#### Returns

`string`

#### Inherit Doc

#### Inherited from

[`StarknetSigner`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md).[`getAddress`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md#getaddress)

***

### getDeployPayload()

```
getDeployPayload(): Promise<any>;
```

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:187](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L187)

Returns the payload for deploying the signer account's contract on Starknet

#### Returns

`Promise`<`any`>

#### Inherited from

[`StarknetSigner`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md).[`getDeployPayload`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md#getdeploypayload)

***

### getReproducibleEntropyMessage()

```
static getReproducibleEntropyMessage(starknetChainId, appName): object;
```

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:49](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L49)

Returns a SNIP-12 message to be signed for extracting reproducible entropy. Works when wallets use signing with deterministic nonce, such that signature over the same message always yields the same signature (same entropy).

#### Parameters

| Parameter         | Type              | Description                                                                            |
| ----------------- | ----------------- | -------------------------------------------------------------------------------------- |
| `starknetChainId` | `StarknetChainId` | Starknet chain ID to use for the SNIP-12 message                                       |
| `appName`         | `string`          | Application name to differentiate reproducible entropy generated across different apps |

#### Returns

`object`

| Name                   | Type        | Default value | Defined in                                                                                                                                                                                                    |
| ---------------------- | ----------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `domain`               | `object`    | -             | [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:66](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L66) |
| `domain.chainId`       | `any`       | -             | [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:69](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L69) |
| `domain.name`          | `string`    | `appName`     | [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:67](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L67) |
| `domain.revision`      | `string`    | `'1'`         | [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:70](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L70) |
| `domain.version`       | `string`    | `'1'`         | [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:68](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L68) |
| `message`              | `object`    | -             | [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:72](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L72) |
| `message.Message`      | `string`    | `message`     | [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:73](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L73) |
| `message.Warning`      | `string`    | `warning`     | [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:74](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L74) |
| `primaryType`          | `string`    | `'Message'`   | [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:65](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L65) |
| `types`                | `object`    | -             | [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:53](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L53) |
| `types.Message`        | `object`\[] | -             | [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:60](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L60) |
| `types.StarknetDomain` | `object`\[] | -             | [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:54](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L54) |

#### Inherited from

[`StarknetSigner`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md).[`getReproducibleEntropyMessage`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md#getreproducibleentropymessage)

***

### init()

```
init(): Promise<void>;
```

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetPersistentSigner.ts:295](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetPersistentSigner.ts#L295)

#### Returns

`Promise`<`void`>

#### Inherit Doc

***

### sendTransaction()

```
sendTransaction(transaction, onBeforePublish?): Promise<string>;
```

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetPersistentSigner.ts:331](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetPersistentSigner.ts#L331)

Signs and sends the starknet transaction, the `onBeforePublish` callback is called after the transaction is signed and before it is broadcast. Ensures that transactions are always sent in order by using a "single-threaded" promise queue, and no nonce collision happen.

#### Parameters

| Parameter          | Type                                                                                                                | Description                                                       |
| ------------------ | ------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
| `transaction`      | [`StarknetTx`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetTx.md) | A transaction to sign and send                                    |
| `onBeforePublish?` | (`txId`, `rawTx`) => `Promise`<`void`>                                                                              | A callback that is called before the transaction gets broadcasted |

#### Returns

`Promise`<`string`>

#### Overrides

[`StarknetSigner`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md).[`sendTransaction`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md#sendtransaction)

***

### signTransaction()?

```
optional signTransaction(tx): Promise<StarknetTx>;
```

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:124](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L124)

Signs the provided starknet transaction and returns its signed version

#### Parameters

| Parameter | Type                                                                                                                | Description                    |
| --------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------ |
| `tx`      | [`StarknetTx`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetTx.md) | A starknet transaction to sign |

#### Returns

`Promise`<[`StarknetTx`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetTx.md)>

#### Inherited from

[`StarknetSigner`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md).[`signTransaction`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md#signtransaction)

***

### stop()

```
stop(): Promise<void>;
```

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetPersistentSigner.ts:312](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetPersistentSigner.ts#L312)

#### Returns

`Promise`<`void`>

#### Inherit Doc

***

### sendDeployAccount()

```
protected sendDeployAccount(tx): Promise<string>;
```

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:179](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L179)

#### Parameters

| Parameter | Type                                                                                                                                          | Description |
| --------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `tx`      | [`StarknetTxDeployAccount`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetTxDeployAccount.md) |             |

#### Returns

`Promise`<`string`>

#### Inherited from

[`StarknetSigner`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md).[`sendDeployAccount`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md#senddeployaccount)

***

### sendInvoke()

```
protected sendInvoke(tx): Promise<string>;
```

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:169](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L169)

#### Parameters

| Parameter | Type                                                                                                                            | Description |
| --------- | ------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `tx`      | [`StarknetTxInvoke`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetTxInvoke.md) |             |

#### Returns

`Promise`<`string`>

#### Inherited from

[`StarknetSigner`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md).[`sendInvoke`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md#sendinvoke)

***

### signDeployAccount()

```
protected signDeployAccount(tx): Promise<DeployAccountContractTransaction>;
```

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:141](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L141)

#### Parameters

| Parameter | Type                                                                                                                                          | Description |
| --------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `tx`      | [`StarknetTxDeployAccount`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetTxDeployAccount.md) |             |

#### Returns

`Promise`<`DeployAccountContractTransaction`>

#### Inherited from

[`StarknetSigner`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md).[`signDeployAccount`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md#signdeployaccount)

***

### signInvoke()

```
protected signInvoke(tx): Promise<Invocation>;
```

Defined in: [atomiq-chain-starknet/src/starknet/wallet/StarknetSigner.ts:133](https://github.com/atomiqlabs/atomiq-chain-starknet/blob/697277c430597a8514a43540ef8b9a10e2b6a595/src/starknet/wallet/StarknetSigner.ts#L133)

#### Parameters

| Parameter | Type                                                                                                                            | Description |
| --------- | ------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `tx`      | [`StarknetTxInvoke`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetTxInvoke.md) |             |

#### Returns

`Promise`<`Invocation`>

#### Inherited from

[`StarknetSigner`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md).[`signInvoke`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md#signinvoke)
