diff --git a/Cargo.lock b/Cargo.lock
index 2a94acf2aa0c1269a2b2370854f18bbf1cffe1fa..064de6c5c66b6b2d49efc1d5a1329e25164797d6 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -757,7 +757,7 @@ dependencies = [
 [[package]]
 name = "duniter-bc-reader"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
 dependencies = [
  "anyhow",
  "dubp",
@@ -803,7 +803,7 @@ dependencies = [
 [[package]]
 name = "duniter-conf"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
 dependencies = [
  "anyhow",
  "dubp",
@@ -817,7 +817,7 @@ dependencies = [
 [[package]]
 name = "duniter-core"
 version = "1.8.1"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
 dependencies = [
  "duniter-bc-reader",
  "duniter-conf",
@@ -830,7 +830,7 @@ dependencies = [
 [[package]]
 name = "duniter-dbs"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
 dependencies = [
  "arrayvec",
  "bincode",
@@ -853,7 +853,7 @@ dependencies = [
 [[package]]
 name = "duniter-dbs-write-ops"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
 dependencies = [
  "chrono",
  "dubp",
@@ -868,7 +868,7 @@ dependencies = [
 [[package]]
 name = "duniter-global"
 version = "1.8.1"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
 dependencies = [
  "async-rwlock",
  "dubp",
@@ -999,7 +999,7 @@ dependencies = [
 [[package]]
 name = "duniter-mempools"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
 dependencies = [
  "dubp",
  "duniter-bc-reader",
@@ -1012,7 +1012,7 @@ dependencies = [
 [[package]]
 name = "duniter-module"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
 dependencies = [
  "anyhow",
  "async-mutex",
@@ -1558,7 +1558,7 @@ dependencies = [
 [[package]]
 name = "kv_typed"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#df4fa9e073efd91a9acbc7391fec5fc35c5e9872"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
 dependencies = [
  "byteorder",
  "cfg-if 0.1.10",
diff --git a/dbs-reader/src/lib.rs b/dbs-reader/src/lib.rs
index 738795fe494b61da661099eb770d86860a8a0623..d3ac218fd2c0e6d00c1b254477e2e476a38c14cc 100644
--- a/dbs-reader/src/lib.rs
+++ b/dbs-reader/src/lib.rs
@@ -49,7 +49,7 @@ use duniter_core::dbs::{
         cm_v1::CmV1DbReadable,
         txs_mp_v2::TxsMpV2DbReadable,
     },
-    BlockMetaV2,
+    BlockMetaV2, PendingTxDbV2,
 };
 use duniter_core::dbs::{
     kv_typed::prelude::*, HashKeyV2, PubKeyKeyV2, SourceAmountValV2, UtxoIdDbV2,
@@ -149,7 +149,7 @@ pub trait DbsReader {
         &self,
         txs_mp_db_ro: &TxsMpDb,
         pubkey: PublicKey,
-    ) -> KvResult<(Vec<TransactionDocumentV10>, Vec<TransactionDocumentV10>)>;
+    ) -> KvResult<(Vec<PendingTxDbV2>, Vec<PendingTxDbV2>)>;
     fn idty(
         &self,
         bc_db: &BcV2DbRo<FileBackend>,
@@ -302,7 +302,7 @@ impl DbsReader for DbsReaderImpl {
         &self,
         txs_mp_db_ro: &TxsMpDb,
         pubkey: PublicKey,
-    ) -> KvResult<(Vec<TransactionDocumentV10>, Vec<TransactionDocumentV10>)> {
+    ) -> KvResult<(Vec<PendingTxDbV2>, Vec<PendingTxDbV2>)> {
         self.get_txs_history_mempool_(txs_mp_db_ro, pubkey)
     }
 
diff --git a/dbs-reader/src/txs_history.rs b/dbs-reader/src/txs_history.rs
index 8182961290e809d64fc9979260315069652468b6..795a599aac8158174b70702d227eb2fdd6e811b6 100644
--- a/dbs-reader/src/txs_history.rs
+++ b/dbs-reader/src/txs_history.rs
@@ -341,14 +341,14 @@ impl DbsReaderImpl {
         &self,
         txs_mp_db_ro: &TxsMpDb,
         pubkey: PublicKey,
-    ) -> KvResult<(Vec<TransactionDocumentV10>, Vec<TransactionDocumentV10>)> {
+    ) -> KvResult<(Vec<PendingTxDbV2>, Vec<PendingTxDbV2>)> {
         let sending = txs_mp_db_ro
             .txs_by_issuer()
             .get_ref_slice(&PubKeyKeyV2(pubkey), |hashs| {
                 let mut sent = Vec::with_capacity(hashs.len());
                 for hash in hashs {
                     if let Some(tx_db) = txs_mp_db_ro.txs().get(HashKeyV2::from_ref(hash))? {
-                        sent.push(tx_db.0);
+                        sent.push(tx_db);
                     }
                 }
                 Ok(sent)
@@ -360,7 +360,7 @@ impl DbsReaderImpl {
                 let mut pending = Vec::with_capacity(hashs.len());
                 for hash in hashs {
                     if let Some(tx_db) = txs_mp_db_ro.txs().get(HashKeyV2::from_ref(hash))? {
-                        pending.push(tx_db.0);
+                        pending.push(tx_db);
                     }
                 }
                 Ok(pending)
@@ -437,8 +437,8 @@ fn txs_history_bc_collect<I: Iterator<Item = KvResult<GvaTxDbV1>>>(
 pub struct TxsHistory {
     pub sent: Vec<GvaTxDbV1>,
     pub received: Vec<GvaTxDbV1>,
-    pub sending: Vec<TransactionDocumentV10>,
-    pub pending: Vec<TransactionDocumentV10>,
+    pub sending: Vec<(TransactionDocumentV10, i64)>,
+    pub pending: Vec<(TransactionDocumentV10, i64)>,
 }
 
 // Needed for BMA only
@@ -484,7 +484,7 @@ pub fn get_transactions_history_for_bma<GvaDb: GvaV1DbReadable, TxsMpDb: TxsMpV2
             let mut sent = Vec::with_capacity(hashs.len());
             for hash in hashs {
                 if let Some(tx_db) = txs_mp_db_ro.txs().get(HashKeyV2::from_ref(hash))? {
-                    sent.push(tx_db.0);
+                    sent.push((tx_db.doc, tx_db.received_time));
                 }
             }
             Ok(sent)
@@ -496,7 +496,7 @@ pub fn get_transactions_history_for_bma<GvaDb: GvaV1DbReadable, TxsMpDb: TxsMpV2
             let mut pending = Vec::with_capacity(hashs.len());
             for hash in hashs {
                 if let Some(tx_db) = txs_mp_db_ro.txs().get(HashKeyV2::from_ref(hash))? {
-                    pending.push(tx_db.0);
+                    pending.push((tx_db.doc, tx_db.received_time));
                 }
             }
             Ok(pending)
diff --git a/gql/src/entities.rs b/gql/src/entities.rs
index c6ac1569f842a1cf73575aaf264dc65ca57e7a51..a7f510290512fe6a261360971f3fcbb5a46bccf5 100644
--- a/gql/src/entities.rs
+++ b/gql/src/entities.rs
@@ -78,9 +78,9 @@ pub(crate) enum TxDirection {
 #[derive(async_graphql::SimpleObject)]
 pub(crate) struct TxsHistoryMempool {
     /// Transactions sending
-    pub(crate) sending: Vec<TxGva>,
+    pub(crate) sending: Vec<PendingTxGva>,
     /// Transactions receiving
-    pub(crate) receiving: Vec<TxGva>,
+    pub(crate) receiving: Vec<PendingTxGva>,
 }
 
 #[derive(Clone, async_graphql::SimpleObject)]
diff --git a/gql/src/entities/block_gva.rs b/gql/src/entities/block_gva.rs
index c12b8c2f15df10f4cf48befcd83f87099c6a1566..58d4f74caad19f201608fea12f1e9c21f0ccb74a 100644
--- a/gql/src/entities/block_gva.rs
+++ b/gql/src/entities/block_gva.rs
@@ -13,7 +13,7 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
-use super::tx_gva::TxGva;
+use super::tx_gva::WrittenTxGva;
 use crate::*;
 use dubp::block::DubpBlockV10;
 use duniter_core::dbs::BlockMetaV2;
@@ -103,7 +103,7 @@ pub(crate) struct Block {
     pub excluded: Vec<String>,
     /// Certifications
     pub certifications: Vec<String>,
-    pub transactions: Vec<TxGva>,
+    pub transactions: Vec<WrittenTxGva>,
 }
 
 impl From<&DubpBlockV10> for Block {
diff --git a/gql/src/entities/tx_gva.rs b/gql/src/entities/tx_gva.rs
index 6fd3764338d17b728705c301a3383c08f243b6c1..af16297192a0537b464b7bee9764ae0d84b40077 100644
--- a/gql/src/entities/tx_gva.rs
+++ b/gql/src/entities/tx_gva.rs
@@ -15,10 +15,62 @@
 
 use crate::*;
 use dubp::documents::transaction::TransactionDocumentV10Stringified;
+use duniter_core::dbs::PendingTxDbV2;
 use duniter_gva_db::GvaTxDbV1;
 
 #[derive(async_graphql::SimpleObject)]
-pub(crate) struct TxGva {
+#[graphql(name = "PendingTx")]
+pub(crate) struct PendingTxGva {
+    /// Version.
+    pub version: i32,
+    /// Currency.
+    pub currency: String,
+    /// Blockstamp
+    pub blockstamp: String,
+    /// Locktime
+    pub locktime: u64,
+    /// Document issuers.
+    pub issuers: Vec<String>,
+    /// Transaction inputs.
+    pub inputs: Vec<String>,
+    /// Inputs unlocks.
+    pub unlocks: Vec<String>,
+    /// Transaction outputs.
+    pub outputs: Vec<String>,
+    /// Transaction comment
+    pub comment: String,
+    /// Document signatures
+    pub signatures: Vec<String>,
+    /// Transaction hash
+    pub hash: String,
+    /// Received time
+    pub received_time: i64,
+}
+
+impl From<&PendingTxDbV2> for PendingTxGva {
+    fn from(db_tx: &PendingTxDbV2) -> Self {
+        let tx_stringified = db_tx.doc.to_string_object();
+
+        PendingTxGva {
+            version: 10,
+            currency: tx_stringified.currency,
+            blockstamp: tx_stringified.blockstamp,
+            locktime: tx_stringified.locktime,
+            issuers: tx_stringified.issuers,
+            inputs: tx_stringified.inputs,
+            unlocks: tx_stringified.unlocks,
+            outputs: tx_stringified.outputs,
+            comment: tx_stringified.comment,
+            signatures: tx_stringified.signatures,
+            hash: tx_stringified.hash.unwrap_or_default(),
+            received_time: db_tx.received_time,
+        }
+    }
+}
+
+#[derive(async_graphql::SimpleObject)]
+#[graphql(name = "WrittenTx")]
+pub(crate) struct WrittenTxGva {
     /// Version.
     pub version: i32,
     /// Currency.
@@ -47,23 +99,23 @@ pub(crate) struct TxGva {
     pub written_time: Option<i64>,
 }
 
-impl From<GvaTxDbV1> for TxGva {
+impl From<GvaTxDbV1> for WrittenTxGva {
     fn from(db_tx: GvaTxDbV1) -> Self {
-        let mut self_: TxGva = (&db_tx.tx).into();
+        let mut self_: WrittenTxGva = (&db_tx.tx).into();
         self_.written_block = Some(db_tx.written_block.to_string());
         self_.written_time = Some(db_tx.written_time);
         self_
     }
 }
 
-impl From<&TransactionDocumentV10> for TxGva {
+impl From<&TransactionDocumentV10> for WrittenTxGva {
     fn from(tx: &TransactionDocumentV10) -> Self {
         let tx_stringified = tx.to_string_object();
         Self::from(tx_stringified)
     }
 }
 
-impl From<TransactionDocumentV10Stringified> for TxGva {
+impl From<TransactionDocumentV10Stringified> for WrittenTxGva {
     fn from(tx_stringified: TransactionDocumentV10Stringified) -> Self {
         Self {
             version: 10,
diff --git a/gql/src/lib.rs b/gql/src/lib.rs
index 64a48b51ccaab5abd1e74dd8549e6b616ac341b2..32972a5aa207a2cf0be9081d7474d31f2e7dcd38 100644
--- a/gql/src/lib.rs
+++ b/gql/src/lib.rs
@@ -38,7 +38,7 @@ use crate::entities::{
     block_gva::{Block, BlockMeta},
     idty_gva::Identity,
     network::{HeadGva, PeerCardGva, PeerWithHeads},
-    tx_gva::TxGva,
+    tx_gva::{PendingTxGva, WrittenTxGva},
     ud_gva::{CurrentUdGva, RevalUdGva, UdGva},
     utxos_gva::UtxosGva,
     AggregateSum, AmountWithBase, EdgeTx, RawTxOrChanges, Sum, TxDirection, TxsHistoryMempool,
diff --git a/gql/src/mutations.rs b/gql/src/mutations.rs
index 3d258e9ae7c83142ab3d4d166cf647590d59ce38..3ecfdd815acaecf1ac8f7e80d094ce66d32797bb 100644
--- a/gql/src/mutations.rs
+++ b/gql/src/mutations.rs
@@ -26,7 +26,7 @@ impl MutationRoot {
         &self,
         ctx: &async_graphql::Context<'_>,
         raw_tx: String,
-    ) -> async_graphql::Result<TxGva> {
+    ) -> async_graphql::Result<WrittenTxGva> {
         let tx = TransactionDocumentV10::parse_from_raw_text(&raw_tx)?;
 
         let data = ctx.data::<GvaSchemaData>()?;
@@ -46,7 +46,7 @@ impl MutationRoot {
             })
             .await??;
 
-        Ok(TxGva::from(&tx))
+        Ok(WrittenTxGva::from(&tx))
     }
 
     /// Process several transactions
@@ -55,7 +55,7 @@ impl MutationRoot {
         &self,
         ctx: &async_graphql::Context<'_>,
         raw_txs: Vec<String>,
-    ) -> async_graphql::Result<Vec<TxGva>> {
+    ) -> async_graphql::Result<Vec<WrittenTxGva>> {
         let txs = raw_txs
             .iter()
             .map(|raw_tx| TransactionDocumentV10::parse_from_raw_text(&raw_tx))
@@ -78,7 +78,7 @@ impl MutationRoot {
                         .map(|()| tx)
                 })
                 .await??;
-            processed_txs.push(TxGva::from(&tx));
+            processed_txs.push(WrittenTxGva::from(&tx));
         }
 
         Ok(processed_txs)
diff --git a/gql/src/queries/txs_history.rs b/gql/src/queries/txs_history.rs
index 3cf5bfe93b2b0941d84dc27897555dceb4f7b3ed..3d28421f64b44f52d949478f58e9edadcc1ea86f 100644
--- a/gql/src/queries/txs_history.rs
+++ b/gql/src/queries/txs_history.rs
@@ -55,7 +55,7 @@ impl TxsHistoryBlockchainQueryInner {
     async fn both(
         &self,
         ctx: &async_graphql::Context<'_>,
-    ) -> async_graphql::Result<Connection<String, TxGva, EmptyFields, EdgeTx>> {
+    ) -> async_graphql::Result<Connection<String, WrittenTxGva, EmptyFields, EdgeTx>> {
         let start_time = std::time::Instant::now();
 
         let data = ctx.data::<GvaSchemaData>()?;
@@ -146,7 +146,7 @@ impl TxsHistoryBlockchainQueryInner {
     async fn received(
         &self,
         ctx: &async_graphql::Context<'_>,
-    ) -> async_graphql::Result<Connection<String, TxGva, EmptyFields, EmptyFields>> {
+    ) -> async_graphql::Result<Connection<String, WrittenTxGva, EmptyFields, EmptyFields>> {
         let data = ctx.data::<GvaSchemaData>()?;
         let db_reader = data.dbs_reader();
         let pagination = self.pagination;
@@ -181,7 +181,7 @@ impl TxsHistoryBlockchainQueryInner {
     async fn sent(
         &self,
         ctx: &async_graphql::Context<'_>,
-    ) -> async_graphql::Result<Connection<String, TxGva, EmptyFields, EmptyFields>> {
+    ) -> async_graphql::Result<Connection<String, WrittenTxGva, EmptyFields, EmptyFields>> {
         let data = ctx.data::<GvaSchemaData>()?;
         let db_reader = data.dbs_reader();
         let pagination = self.pagination;
@@ -236,11 +236,11 @@ impl TxsHistoryMempoolQuery {
         Ok(TxsHistoryMempool {
             sending: sending
                 .into_iter()
-                .map(|db_tx| TxGva::from(&db_tx))
+                .map(|db_tx| PendingTxGva::from(&db_tx))
                 .collect(),
             receiving: pending
                 .into_iter()
-                .map(|db_tx| TxGva::from(&db_tx))
+                .map(|db_tx| PendingTxGva::from(&db_tx))
                 .collect(),
         })
     }
diff --git a/gql/src/subscriptions/receive_pending_txs.rs b/gql/src/subscriptions/receive_pending_txs.rs
index d223f7c65f6daa9d4c8f4e89e6d13f96c5b84a30..d2fc0783438b81efd5d355599edbeab14bae7978 100644
--- a/gql/src/subscriptions/receive_pending_txs.rs
+++ b/gql/src/subscriptions/receive_pending_txs.rs
@@ -25,7 +25,7 @@ impl PendingTxsSubscription {
     async fn receive_pending_txs(
         &self,
         ctx: &async_graphql::Context<'_>,
-    ) -> impl Stream<Item = async_graphql::Result<Vec<TxGva>>> {
+    ) -> impl Stream<Item = async_graphql::Result<Vec<WrittenTxGva>>> {
         create_subscription(
             ctx,
             |dbs| dbs.txs_mp_db.txs(),
@@ -37,7 +37,7 @@ impl PendingTxsSubscription {
                         ..
                     } = event
                     {
-                        txs.push(TxGva::from(&pending_tx.0));
+                        txs.push(WrittenTxGva::from(&pending_tx.doc));
                     }
                 }
                 if txs.is_empty() {
diff --git a/src/lib.rs b/src/lib.rs
index 609842728e8264b62f4143e28f81d1bee3e6fb08..90b51099709e8d4d8e7702fb6eb567a71e83eefc 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -206,7 +206,7 @@ impl duniter_core::module::DuniterModule for GvaModule {
                     .txs()
                     .get(&duniter_core::dbs::HashKeyV2(hash))?
                 {
-                    Ok(Some((tx.0, None)))
+                    Ok(Some((tx.doc, None)))
                 } else if let Some(tx_db) = gva_db.txs().get(&duniter_core::dbs::HashKeyV2(hash))? {
                     Ok(Some((tx_db.tx, Some(tx_db.written_block.number))))
                 } else {