Skip to main content
The EVM Transaction Signer Ability enables Vincent Apps to sign Ethereum Virtual Machine (EVM) transactions on behalf of Vincent Users using their Vincent Wallets. This enables Vincent Apps to interact with contracts even if there isn’t an explicit Vincent Ability made for interacting with that contract. This Vincent Ability also supports the Contract Whitelist Policy, which allows Vincent Users to restrict which contracts and functions can be called before this Ability signs transactions on their behalf.

Key Features

  • Secure Transaction Signing: Signs transactions using Vincent Wallets within a secure Trusted Execution Environment
  • Full Transaction Support: Handles all EVM transaction types including legacy, EIP-2930, and EIP-1559
  • Policy Integration: Supports the Contract Whitelist Policy for restricting what transactions can be signed

How It Works

The EVM Transaction Signer Ability is built using the Vincent Ability SDK and operates in two phases:
1

Precheck Phase

Validates the transaction structure and runs policy checks:
  • Deserializes the provided serialized transaction using ethers.js
  • Validates all required fields are present (nonce, gasPrice, gasLimit, etc.)
  • Returns the deserialized unsigned transaction for confirmation
2

Execution Phase

If permitted by the evaluated Policies, signs the serialized transaction:
  • Signs the transaction using the Vincent App User’s Vincent Wallet
  • Returns both the signed transaction hex string and the deserialized signed transaction object

Getting Started

Depending on your role in the Vincent Ecosystem, you’ll be interacting with this Ability in different ways. Click on the link below that matches your role to see how to get started:
  • Vincent App Developers: If you’re building a Vincent App that needs to sign transactions, go here.
  • Vincent App Delegatees: If you’re executing this ability on behalf of Vincent App Users, go here.

Adding the Ability to your Vincent App

If you want to enable your App Delegatees to sign transactions on behalf of your Vincent App Users, allowing them to interact with contracts that don’t have an explicit Vincent Ability made for interacting with them, you can add this Ability to your App. Adding Abilities to your Vincent App is done using the Vincent App Dashboard. Visit the Create Vincent App guide to learn more about how to add Abilities to your App during creation, or check out the Updating Your App guide to learn how to add Abilities to an existing App.

Executing the Ability as a Vincent App Delegatee

Before executing EVM transaction signing operations, the following conditions must be met. You can use the Ability’s precheck function to check if these conditions are met, or you can check them manually.
  • Complete Transaction Object: You must provide a complete EVM transaction object with all required fields including to, value, data, chainId, nonce, gasLimit, and appropriate gas pricing (gasPrice for legacy transactions, or maxFeePerGas and maxPriorityFeePerGas for EIP-1559 transactions).
  • Gas Balance: The Vincent App User’s Vincent Wallet must have sufficient native tokens (ETH, MATIC, etc.) to pay for the transaction gas fees specified in the transaction object.
  • Policy Compliance: If the Vincent App User has enabled the Contract Whitelist Policy, the transaction must target a whitelisted contract and function. The transaction will be rejected if it attempts to interact with non-whitelisted contracts or functions.
To learn more about executing Vincent Abilities, see the Executing Abilities guide.
Vincent App Users configure the Policies that govern Ability execution while consenting to the Vincent App. If the Vincent App you’re a Delegatee for has enabled the Contract Whitelist Policy for this Ability, then what contracts and functions that can be called will be restricted to what the Vincent App User has whitelisted. To learn more about how the Policy works, and how it affects your execution of this Ability, see the Contract Whitelist Policy documentation.

Executing the precheck Function

This Ability’s precheck function is used to check if the provided unsigned serialized transaction is valid in structure and contains all the required fields to sign the transaction for submission to the blockchain network.
  • Parameters
  • Implementation
  • Response
Before executing the precheck function, you’ll need to create the complete EVM transaction object (which must contain all required properties such as to, value, data, chainId, nonce, gasLimit, and gas pricing) you want the user’s Vincent Wallet to sign, and serialize it into a hex string.The Ability expects this serialized transaction as the only parameter:
{
  /**
   * The serialized transaction to be evaluated and signed.
   * This is the transaction object serialized into a hex string.
   * The transaction object must contain all required properties such as
   * `to`, `value`, `data`, `chainId`, `nonce`, `gasLimit`, and gas pricing.
   */
  serializedTransaction: string;
}

Executing the execute Function

This Ability’s execute function signs the serialized transaction if permitted by the evaluated Policies.
  • Parameters
  • Implementation
  • Response
The execute function expects the same parameter as the precheck function:
{
  /**
   * The serialized transaction to be evaluated and signed.
   * This is the transaction object serialized into a hex string.
   * The transaction object must contain all required properties such as
   * `to`, `value`, `data`, `chainId`, `nonce`, `gasLimit`, and gas pricing.
   */
  serializedTransaction: string;
}

Important Considerations

Both the precheck and execute functions require a complete unsigned serialized transaction to be provided. This Ability does not handle the nonce or gas related fields, so you’ll need to provide these values in the transaction object you’re serializing.
This ability integrates with the Contract Whitelist Policy. If enabled, transactions will only be signed if they target whitelisted contracts and functions.
Supports all EVM transaction types including legacy transactions, EIP-2930 (access lists), and EIP-1559 (fee market) transactions.
You must handle nonce management and gas estimation yourself. The Vincent Wallet must have sufficient native tokens to cover the gas fees specified in your transaction.

Error Handling

  • Invalid Serialized Transaction: The provided serialized transaction is malformed or missing required fields
  • Insufficient Gas Balance: The Vincent App User’s Vincent Wallet doesn’t have enough native tokens for gas fees
  • Policy Violations: Transaction violates Contract Whitelist Policy (if enabled)
  • Invalid Nonce: Transaction nonce is incorrect or already used
  • Gas Limit Too Low: Specified gas limit is insufficient for transaction execution
  • Invalid Chain ID: Chain ID doesn’t match the target network
I