Repository: ecadlabs/taquito (ts)

Issue:
add keygen sequence diagram and explanation to integration test readme
add keygen sequence diagram and explanation to integration test readme

```
sequenceDiagram
participant User
participant Keygen
participant Redis

User->>+Keygen: Get Ephemeral Key
Keygen->>+Redis: Pop Key from pool
Keygen->>+Redis: Create lease entry in Redis (with expiry date)
Keygen-->>+User: Return Ephemeral Key Lease ID
User->>+User: Create a remote signer with Lease ID

loop 
    User->>+Keygen: Sign Operation
    Keygen->>+Redis: Retrieve private key to sign based on Lease ID
    Keygen->>+Keygen: Sign user data
    Keygen-->>+User: Return Signed Operation
end

Redis->>+Redis: Remove lease entry
Redis->>+Keygen: Publich removal event
Keygen->>+Redis: Add key to pool if amount is smaller than spendable amount

User->>+Keygen: 404 :[
```



Pull request:
added keygen diagram to integration test readme
added keygen diagram to integration test readme
and some descriptive text

CLOSES #2503 

Patch:
diff --git a/packages/taquito/src/prepare/prepare-provider.ts b/packages/taquito/src/prepare/prepare-provider.ts
index a5f9c77e3..04e83fd39 100644
--- a/packages/taquito/src/prepare/prepare-provider.ts
+++ b/packages/taquito/src/prepare/prepare-provider.ts
@@ -1043,17 +1043,18 @@ export class PrepareProvider extends Provider implements PreparationProvider {
       DEFAULT_PARAMS
     );
 
-    const ops = [
-      {
-        kind: OpKind.TRANSACTION,
-        fee: params.fee ?? estimateLimits.fee,
-        gas_limit: params.gasLimit ?? estimateLimits.gasLimit,
-        storage_limit: params.storageLimit ?? estimateLimits.storageLimit,
-        amount: String(params.amount),
-        destination: params.to,
-        parameters: params.parameter,
-      },
-    ] as RPCOperation[];
+    const op = {
+      kind: OpKind.TRANSACTION,
+      fee: params.fee ?? estimateLimits.fee,
+      gas_limit: params.gasLimit ?? estimateLimits.gasLimit,
+      storage_limit: params.storageLimit ?? estimateLimits.storageLimit,
+      amount: String(params.amount),
+      destination: params.to,
+      parameters: params.parameter,
+    } as RPCOperation;
+
+    const operation = await this.addRevealOperationIfNeeded(op, pkh);
+    const ops = this.convertIntoArray(operation);
 
     const contents = this.constructOpContents(ops, headCounter, pkh);
 


Test patch:
diff --git a/integration-tests/README.md b/integration-tests/README.md
index 865761040..13614a580 100644
--- a/integration-tests/README.md
+++ b/integration-tests/README.md
@@ -75,7 +75,7 @@ To run tests against a node that is not pre-configured in Taquito, use:
 ## Using a Secret Key Instead of the Keygen API
 
 
-By default, the integration tests use an ephemeral key managed by the Keygen API, which requires internal access. However, to use a secret key of your own instead, use the CLI option `<testnet>-secret-key`, like this:
+By default, the integration tests use an ephemeral key managed by the Keygen API, which requires internal access (for detail on Keygen see the below). However, to use a secret key of your own instead, use the CLI option `<testnet>-secret-key`, like this:
 
 
 ```
@@ -304,4 +304,38 @@ You should see something like:
 May 11 20:14:39.014 - 016-PtMumbai.baker.transitions: received new head BLr6cAaj2oM2ibakFp8zZMNEbpcSAZ94WhzeV57njD7NrnaYrZU at
 May 11 20:14:39.014 - 016-PtMumbai.baker.transitions:   level 1152, round 0
 Block BLCjrRGMJxZEBoZaxafUHcTCNBnmGzRfX2Qf5qru2XtAhiNEsun (1153) injected
+```
+
+## The Keygen API
+
+The Keygen API in Taquito is specifically designed for testing purposes. It allows developers to generate and manage key pairs (public and private keys) for Tezos accounts during the testing phase of their applications. This is useful for simulating various scenarios, such as transactions, smart contract interactions, and other on-chain operations, without the need to use real Tezos accounts or real funds.
+
+This tool is employed internally for Taquito Integration tests within the Continuous Integration and Continuous Delivery (CI/CD) system.
+
+### How the Keygen API works
+
+```mermaid
+sequenceDiagram
+participant User
+participant Keygen
+participant Redis
+
+User->>+Keygen: Get Ephemeral Key
+Keygen->>+Redis: Pop Key from pool
+Keygen->>+Redis: Create lease entry in Redis (with expiry date)
+Keygen-->>+User: Return Ephemeral Key Lease ID
+User->>+User: Create a remote signer with Lease ID
+
+loop 
+    User->>+Keygen: Sign Operation
+    Keygen->>+Redis: Retrieve private key to sign based on Lease ID
+    Keygen->>+Keygen: Sign user data
+    Keygen-->>+User: Return Signed Operation
+end
+
+Redis->>+Redis: Remove lease entry
+Redis->>+Keygen: Publish removal event
+Keygen->>+Redis: Add key to pool if amount is smaller than spendable amount
+
+User->>+Keygen: 404 :[
 ```
\ No newline at end of file