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’sprecheck
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, ormaxFeePerGas
andmaxPriorityFeePerGas
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: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:Important Considerations
Complete Transaction Object Required
Complete Transaction Object Required
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.Policy Integration
Policy Integration
This ability integrates with the Contract Whitelist Policy. If enabled, transactions will only be signed if they target whitelisted contracts and functions.
Transaction Types
Transaction Types
Supports all EVM transaction types including legacy transactions, EIP-2930 (access lists), and EIP-1559 (fee market) transactions.
Gas Management
Gas Management
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
Common Failure Scenarios
Common Failure Scenarios
- 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