---
description: AA0xGasless Module
---

# Sending Transaction (non-telegram)

#### Step 1: Creating the Transaction

After initializing the SDK, you can create a transaction object using the `UserOperationCallData` interface. This object represents the transaction you want to send. Here's an example:

```javascript
import { UserOperationCallData, sendUserOp } from '@0xgasless/0xgasless-aa-sdk';
import { ethers } from 'ethers';

// Replace with the contract address and ABI of the smart contract you want to interact with
const contractAddress = '0xContractAddress'; // Replace with the contract address
const contractABI = [
    // Define the ABI of the contract, including function definitions
    // Example: { "constant": false, "inputs": [...], "name": "functionName", "outputs": [...], "type": "function" }
];

// Create an instance of the contract
const contract = new ethers.Contract(contractAddress, contractABI);

// Specify the function you want to call and its parameters
const functionName = 'functionName'; // Replace with the name of the function you want to call
const functionParams = ['param1', 'param2']; // Replace with the function's parameters

// Encode the function call data
const functionInterface = new ethers.utils.Interface(contractABI);
const data = functionInterface.encodeFunctionData(functionName, functionParams);

// Create a transaction object
const transaction: UserOperationCallData = {
    target: '0xRecipientAddress', // Replace with the recipient's Ethereum address
    data: data, // Replace with the transaction data in hexadecimal format
    value: BigInt('1000000000000000000'), // Optional: Replace with the amount in wei (e.g., 1 ETH)
};

```

In this code:

* We import the `UserOperationCallData` interface to define the structure of the transaction object.
* `transaction` is an object that contains the `target` (recipient's Ethereum address), `data` (transaction data in hexadecimal format), and an optional `value` field for the transaction amount in wei.

#### Step 2: Send the Transaction using `sendUserOp`

Now that you have the transaction object, you can send it as a user operation using the `sendUserOp` method provided by the SDK. This method returns both the user operation hash (`userOpHash`) and the transaction hash (transactionHash).

```javascript
try {
    const { userOpHash, transactionHash } = await client.sendUserOp(transaction);
    console.log('UserOp Hash:', userOpHash);
    console.log('Transaction Hash:', txHash);
    console.log('Transaction sent successfully');
} catch (error) {
    console.error('Transaction failed:', error);
}
```

In this code:

* The `await client.sendUserOp(transaction)` call sends the transaction as a user operation and returns an object containing both the `userOpHash` and `transactionHash`.
* The `userOpHash` is the hash of the user operation, and transactionHash is the hash of the underlying transaction.
* Both hashes are logged to the console for your reference.

With these steps, you can successfully send a transaction and capture both the user operation hash and the transaction hash using the 0xGasless AA SDK.

\
