A Signer represents an account on the Ethereum Blockchain, and is most often backed by a private key represented by a mnemonic or residing on a Hardware Wallet.

The API remains abstract though, so that it can deal with more advanced exotic Signing entities, such as Smart Contract Wallets or Virtual Wallets (where the private key may not be known).

Extends

Properties

PropertyTypeDescriptionOverrides
providernull | ProviderThe Provider attached to this Signer (if any).ContractRunner.provider

Methods

call()

call(tx): Promise<string>

Evaluates th tx by running it against the current Blockchain state. This cannot change state and has no cost in ether, as it is effectively simulating execution.

This can be used to have the Blockchain perform computations based on its state (e.g. running a Contract’s getters) or to simulate the effect of a transaction before actually performing an operation.

Parameters

ParameterTypeDescription
txTransactionRequestThe transaction to call.

Returns

Promise<string>

A promise resolving to the result of the call.

Overrides

ContractRunner.call

Source

signers/signer.ts:116


connect()

connect(provider): Signer

Returns a new instance of this Signer connected to provider or detached from any Provider if null.

Parameters

ParameterTypeDescription
providernull | ProviderThe Provider to connect to.

Returns

Signer

A new instance of this Signer.

Throws

If the Signer cannot be connected to the Provider.

Source

signers/signer.ts:30


estimateGas()

estimateGas(tx): Promise<bigint>

Estimates the required gas required to execute tx on the Blockchain. This will be the expected amount a transaction will require as its gasLimit to successfully run all the necessary computations and store the needed state that the transaction intends.

Keep in mind that this is best efforts, since the state of the Blockchain is in flux, which could affect transaction gas requirements.

Parameters

ParameterTypeDescription
txTransactionRequestThe transaction to estimate gas for.

Returns

Promise<bigint>

A promise resolving to the estimated gas.

Overrides

ContractRunner.estimateGas

Throws

UNPREDICTABLE_GAS_LIMIT A transaction that is believed by the node to likely fail will throw an error during gas estimation. This could indicate that it will actually fail or that the circumstances are simply too complex for the node to take into account. In these cases, a manually determined gasLimit will need to be made.

Source

signers/signer.ts:104


getAddress()

getAddress(): Promise<string>

Get the address of the Signer.

Returns

Promise<string>

The address of the Signer.

Overrides

Addressable.getAddress

Throws

If the Signer has no address.

Source

signers/signer.ts:41


getNonce()

getNonce(blockTag?): Promise<number>

Gets the next nonce required for this Signer to send a transaction.

Parameters

ParameterTypeDescription
blockTag?BlockTagThe blocktag to base the transaction count on, keep in mind many nodes do not honour this value
and silently ignore it [default: "latest"]

Returns

Promise<number>

The next nonce.

Source

signers/signer.ts:50


populateCall()

populateCall(tx): Promise<TransactionLike>

Prepares a TransactionRequest for calling:

  • Resolves to and from addresses
  • If from is specified , check that it matches this Signer

Parameters

ParameterTypeDescription
txTransactionRequestThe call to prepare

Returns

Promise<TransactionLike>

A promise resolving to the prepared transaction.

Source

signers/signer.ts:64


populateQuaiTransaction()

populateQuaiTransaction(tx): Promise<TransactionLike>

Prepares a TransactionRequest for sending to the network by populating any missing properties:

  • Resolves to and from addresses
  • If from is specified , check that it matches this Signer
  • Populates nonce via signer.getNonce("pending")
  • Populates gasLimit via signer.estimateGas(tx)
  • Populates chainId via signer.provider.getNetwork()
  • Populates type and relevant fee data for that type (gasPrice for legacy transactions, maxFeePerGas for EIP-1559, etc)

Parameters

ParameterTypeDescription
txTransactionRequestThe transaction to prepare.

Returns

Promise<TransactionLike>

A promise resolving to the prepared transaction.

Throws

If the transaction is invalid.

Note

Some Signer implementations may skip populating properties that are populated downstream; for example JsonRpcSigner defers to the node to populate the nonce and fee data.

Source

signers/signer.ts:84


sendTransaction()

sendTransaction(tx): Promise<TransactionResponse>

Sends tx to the Network. The signer.populateTransaction(tx) is called first to ensure all necessary properties for the transaction to be valid have been popualted first.

Parameters

ParameterTypeDescription
txTransactionRequestThe transaction to send.

Returns

Promise<TransactionResponse>

A promise resolving to the transaction response.

Overrides

ContractRunner.sendTransaction

Throws

If the transaction is invalid.

Source

signers/signer.ts:139


signMessage()

signMessage(message): Promise<string>

Signs an EIP-191 prefixed personal message.

If the message is a string, it is signed as UTF-8 encoded bytes. It is not interpretted as a BytesLike; so the string "0x1234" is signed as six characters, not two bytes.

To sign that example as two bytes, the Uint8Array should be used (i.e. new Uint8Array([ 0x12, 0x34 ])).

Parameters

ParameterTypeDescription
messagestring | Uint8ArrayThe message to sign.

Returns

Promise<string>

A promise resolving to the signed message.

Throws

If the message is invalid.

Source

signers/signer.ts:153


signTransaction()

signTransaction(tx): Promise<string>

Signs tx, returning the fully signed transaction. This does not populate any additional properties within the transaction.

Parameters

ParameterTypeDescription
txTransactionRequestThe transaction to sign.

Returns

Promise<string>

A promise resolving to the signed transaction.

Throws

If the transaction is invalid.

Source

signers/signer.ts:129


signTypedData()

signTypedData(
   domain, 
   types, 
value): Promise<string>

Signs the EIP-712 typed data.

Parameters

ParameterTypeDescription
domainTypedDataDomainThe domain of the typed data.
typesRecord<string, TypedDataField[]>The types of the typed data.
valueRecord<string, any>The value of the typed data.

Returns

Promise<string>

A promise resolving to the signed typed data.

Source

signers/signer.ts:163