Vérifier les valeurs d'engagement Pedersen

Oracle Blockchain Platform Digital Assets Edition utilise les engagements de Pedersen pour assurer à la fois le secret et l'immutabilité. Les API suivantes peuvent vous aider à vérifier les engagements de Pedersen par rapport aux valeurs de texte brut réelles.

Dans Oracle Blockchain Platform, les données peuvent être conservées dans la base de données riche en histoire en se connectant à Oracle Database. Les comptes et les transactions, qui sont stockés en tant que paires clé/valeur dans la base de données d'état, peuvent être suivis au fil du temps dans la base de données d'historique riche. En mode confidentiel, les comptes et les transactions sont stockés en deux parties, privée et publique, dans la table d'historique de la base de données riche en historique.

Toutes les données, publiques et privées pour l'organisation, sont disponibles dans la table d'historique de la base de données d'historique enrichie. Le nom de la table utilise le format suivant : <obp_instance_name>_<channel_name>_hist. Par exemple, CentralBank_default_hist.

Données de compte public (base de données d'état)
  • Stocké sous l'ID code de chaîne : <chaincode_name>
  • Accessible à tous les participants du réseau
  • Propriétés générales du compte telles que org_id, token_name, balance/onhold_balance (en tant qu'engagements Pedersen) et autres métadonnées non confidentielles
Données de compte privé (collecte de données privées)
  • Stocké sous l'ID de code de chaîne : <chaincode_name>$$_implicit_org_<Oracle_Blockchain_Platform_instance_name>
  • Accessible uniquement à l'organisation responsable de la collecte de données privée
  • Champs sensibles tels que balance/onhold_balance (valeurs brutes), balanceBlindingFactor, onHoldBalanceBlindingFactor et limites quotidiennes
Données de transaction publiques (base de données d'état)
  • Stocké sous l'ID code de chaîne : <chaincode_name>
  • Accessible à tous les participants du réseau
  • Propriétés générales du compte, telles que les ID compte de l'expéditeur et du destinataire, from_account_balance/from_account_onhold_balance/to_account_balance/to_account_onhold_balance/les montants de transaction (en tant qu'engagements Pedersen) et d'autres métadonnées non confidentielles
Données de transaction privées (collecte de données privées)
  • Stocké sous l'ID de code de chaîne : <chaincode_name>$$_implicit_org_<Oracle_Blockchain_Platform_instance_name>
  • Accessible uniquement à l'organisation responsable de la collecte de données privée
  • Champs sensibles tels que from_account_balance/from_account_onhold_balance/to_account_balance/to_account_onhold_balance/montants de transaction (valeurs brutes) et les facteurs d'aveuglement correspondants

API d'engagement Pedersen

Vous pouvez utiliser les API suivantes, qui sont incluses dans le fichier de contrôleur du code de chaîne, pour vérifier et travailler avec les engagements Pedersen.

generateCommitment
Cette méthode génère un engagement Pedersen pour une valeur et un facteur d'aveuglement spécifiés. Cette méthode ne peut être appelée que par Token Admin ou Org Admin.
@Validator(yup.string(), yup.string())
 public async generateCommitment(value: string, blinding_factor: string) {
   await this.Ctx.Auth.checkAuthorization("ACCOUNT.processSendersAndReceivers", "TOKEN");
   const result = await this.Ctx.PedersonCommitments.generateCommitment(value, blinding_factor);
   return result;
 }
Paramètres :
  • value: string – Valeur numérique pour laquelle générer l'engagement Pedersen.
  • blinding_factor: string – Le nombre aléatoire utilisé pour générer l'engagement Pedersen.
Retourne :
  • Valeur de hachage, qui correspond à l'engagement Pedersen pour la valeur spécifiée et le facteur d'aveuglement.
Exemple de valeur renvoyée :
"0212f6b676da244eee000a9106060cf3a3a4bb5a9b61be23dd467e557156c40be8"
addCommitment
Cette méthode ajoute deux valeurs de hachage d'engagement Pedersen spécifiées. Parce que les engagements Pedersen sont homomorphes, ils soutiennent la réalisation d'opérations mathématiques telles que l'addition et la soustraction d'engagements tout en préservant les relations entre les valeurs sous-jacentes. Cette méthode ne peut être appelée que par Token Admin ou Org Admin.
@Validator(yup.string(), yup.string())
 public async addCommitment(value1: string, value2: string) {
  await this.Ctx.Auth.checkAuthorization("ACCOUNT.processSendersAndReceivers", "TOKEN");
  const result = await this.Ctx.PedersonCommitments.add(value1, value2);
  return result;
 }
Paramètres :
  • value1: string – La première valeur de hachage d'engagement Pedersen à ajouter.
  • value2: string – La deuxième valeur de hachage d'engagement Pedersen à ajouter.
Retourne :
  • Valeur de hachage, qui correspond à l'engagement Pedersen pour la somme des deux valeurs d'engagement Pedersen spécifiées.
Exemple de valeur renvoyée :
"03a9c138b76e7d56f799108a46f665f53a42f55008b31e0fec071019aa5c37344a"
subCommitment
Cette méthode soustrait la deuxième valeur de hachage d'engagement Pedersen spécifiée de la première. Parce que les engagements Pedersen sont homomorphes, ils soutiennent la réalisation d'opérations mathématiques telles que l'addition et la soustraction d'engagements tout en préservant les relations entre les valeurs sous-jacentes. Cette méthode ne peut être appelée que par Token Admin ou Org Admin.
@Validator(yup.string(), yup.string())
 public async subCommitment(value1: string, value2: string) {
  await this.Ctx.Auth.checkAuthorization("ACCOUNT.processSendersAndReceivers", "TOKEN");
  const result = await this.Ctx.PedersonCommitments.sub(value1, value2);
  return result;
 }
Paramètres :
  • value1: string – La première valeur de hachage d'engagement Pedersen dans la soustraction (le minuend).
  • value2: string – La deuxième valeur de hachage d'engagement Pedersen à soustraire de la première (le sous-trahend).
Retourne :
  • Une valeur de hachage, qui est l'engagement Pedersen pour la différence des deux valeurs d'engagement Pedersen spécifiées.
Exemple de valeur renvoyée :
"0212f6b676da244eee000a9106060cf3a3a4bb5a9b61be23dd467e557156c40be8"

Vérification des soldes de comptes et des soldes bloqués

  1. Utilisez la requête suivante pour obtenir l'engagement Pedersen du solde, qui est des données publiques.
    SELECT JSON_VALUE(h."VALUEJSON", '$.balance') AS balance_commitment
    FROM "<OBP_instance_name>_<channel>_hist" h
    WHERE h."CHAINCODEID" = '<chaincode_name>'
      AND h."KEY" = '<account_id>'
    ORDER BY h."BLOCKNO" DESC, h."TXNNO" DESC
    FETCH FIRST 1 ROW ONLY;
    Exemple d'interrogation :
    SELECT JSON_VALUE(h."VALUEJSON", '$.balance') AS balance_commitment
    FROM "CentralBank_default_hist" h
    WHERE h."CHAINCODEID" = 'testChaincode'
      AND h."KEY" = 'oaccount~07e1c67205520da256f6edfbe9d1cb763cf13d29a3ec870137251a1344feab84'
    ORDER BY h."BLOCKNO" DESC, h."TXNNO" DESC
    FETCH FIRST 1 ROW ONLY;
    Exemple de réponse balance_commitment :
    03977a92a07c00234270d41097a35ed2050bcdef02d3908a9a3cc733951b4171dd
  2. Utilisez l'interrogation suivante pour obtenir le solde et le facteur d'aveuglement de la collecte de données privée.
    SELECT 
        JSON_VALUE(h."VALUEJSON", '$.balance') AS balance,
        JSON_VALUE(h."VALUEJSON", '$.balanceBlindingFactor') AS blinding_factor
    FROM "<OBP_instance_name>_<channel>_hist" h
    WHERE h."CHAINCODEID" = '<chaincode_name>$$_implicit_org_<OBP_instance_name>'
      AND h."KEY" = '<account_id>'
    ORDER BY h."BLOCKNO" DESC, h."TXNNO" DESC
    FETCH FIRST 1 ROW ONLY;
    Exemple d'interrogation :
    SELECT
        JSON_VALUE(h."VALUEJSON", '$.balance') AS balance,
        JSON_VALUE(h."VALUEJSON", '$.balanceBlindingFactor') AS blinding_factor
    FROM "CentralBank_default_hist" h
    WHERE h."CHAINCODEID" = 'testChaincode$$_implicit_org_CentralBank'
      AND h."KEY" = 'oaccount~07e1c67205520da256f6edfbe9d1cb763cf13d29a3ec870137251a1344feab84'
    ORDER BY h."BLOCKNO" DESC, h."TXNNO" DESC
    FETCH FIRST 1 ROW ONLY;
    Le tableau suivant présente un exemple de réponse :
    balance blinding_factor
    100 17629824947682234000
  3. Ajoutez la méthode generateCommitment, définie précédemment, au fichier de contrôleur situé dans le dossier src (src/controller/<Chaincode_name>.controller.ts).
    Exemple :
    @Validator(yup.string(), yup.string()) 
    public async generateCommitment(value: string, bf: string) {
        await this. Ctx.Auth.checkAuthorization("ACCOUNT.processSendersAndReceivers", "TOKEN"); 
        const result = await this.Ctx.PedersonCommitments.generateCommitment(value, bf); 
        return result;
    }	
  4. Transmettez les valeurs balance (en tant que value) et blinding_factor (en tant que blinding_factor) de la deuxième étape à la méthode generateCommitment.
    Exemple :
    balance_commitment from step 1 :03977a92a07c00234270d41097a35ed2050bcdef02d3908a9a3cc733951b4171dd
    balance from step 2 : 100
    blinding_factor from step 2 : 17629824947682234000
     
    Invoke the method generateCommitment("100", "875628364246182")
    Response: "0212f6b676da244eee000a9106060cf3a3a4bb5a9b61be23dd467e557156c40be8"
  5. Vérifiez que la valeur balance_commitment de la première étape correspond à la sortie de la méthode generateCommitment.
    Exemple :
    balance_commitment from step 1 :03977a92a07c00234270d41097a35ed2050bcdef02d3908a9a3cc733951b4171dd
    Response From Step 4: "03977a92a07c00234270d41097a35ed2050bcdef02d3908a9a3cc733951b4171dd"
     
    balance_commitment from step 1 must equal the generateCommitment response from step 4
    LHS = RHS
    
    This verifies that the Pederson commitment is correct against the raw balance and blindingFactor
  6. Pour vérifier un solde bloqué, répétez ces étapes pour l'engagement onhold_balance Pedersen et les valeurs onhold_balance et onHoldBalanceBlindingFactor.

Vérification des quantités de transactions

  1. Utilisez la requête suivante pour obtenir l'engagement Pedersen de la quantité, qui est des données publiques.
    SELECT JSON_VALUE(h."VALUEJSON", '$.amount') AS quantity_commitment
    FROM "<OBP_instance_name>_<channel>_hist" h
    WHERE h."CHAINCODEID" = '<chaincode_name>'
      AND h."KEY" = '<transaction_id>'
    ORDER BY h."BLOCKNO" DESC, h."TXNNO" DESC
    FETCH FIRST 1 ROW ONLY;
    Le texte suivant présente un exemple d'interrogation.
    SELECT JSON_VALUE(h."VALUEJSON", '$.amount') AS quantity_commitment
    FROM "AdamsCentralBank_adams_hist" h
    WHERE h."CHAINCODEID" = 'confDev'
      AND h."KEY" = 'otransaction~d5e08934fd520554162d694476bae8521803e4bf7272e8709fe34dd3eeecbfe4'
    ORDER BY h."BLOCKNO" DESC, h."TXNNO" DESC
    FETCH FIRST 1 ROW ONLY;
    Le texte suivant présente un exemple de réponse.
    quantity_commitment
    036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63
  2. Utilisez l'interrogation suivante pour obtenir la quantité et le facteur d'aveuglement de la collecte de données privée.
    SELECT
        JSON_VALUE(h."VALUEJSON", '$.amount') AS quantity,
        JSON_VALUE(h."VALUEJSON", '$.blindingFactor') AS blinding_factor
    FROM "<OBP_instance_name>_<channel>_hist" h
    WHERE h."CHAINCODEID" = '<chaincode_name>$$_implicit_org_<OBP_instance_name>'
      AND h."KEY" = '<transaction_id>'
    ORDER BY h."BLOCKNO" DESC, h."TXNNO" DESC
    FETCH FIRST 1 ROW ONLY;
    Le texte suivant présente un exemple d'interrogation.
    SELECT
        JSON_VALUE(h."VALUEJSON", '$.amount') AS quantity,
        JSON_VALUE(h."VALUEJSON", '$.blindingFactor') AS blinding_factor
    FROM "CentralBank_default_hist" h
    WHERE h."CHAINCODEID" = 'testChaincode$$_implicit_org_CentralBank'
      AND h."KEY" = 'otransaction~d5e08934fd520554162d694476bae8521803e4bf7272e8709fe34dd3eeecbfe4'
    ORDER BY h."BLOCKNO" DESC, h."TXNNO" DESC
    FETCH FIRST 1 ROW ONLY;
    Le texte suivant présente un exemple de réponse.
    quantity blinding_factor
    100 17721346708393996000
  3. Ajoutez la méthode generateCommitment, définie précédemment, au fichier de contrôleur situé dans le dossier src (src/controller/<Chaincode_name>.controller.ts).
    Exemple :
    @Validator(yup.string(), yup.string()) 
    public async generateCommitment(value: string, bf: string) {
        await this. Ctx.Auth.checkAuthorization("ACCOUNT.processSendersAndReceivers", "TOKEN"); 
        const result = await this.Ctx.PedersonCommitments.generateCommitment(value, bf); 
        return result;
    }	
  4. Transmettez les valeurs quantity (en tant que value) et blinding_factor (en tant que blinding_factor) de la deuxième étape à la méthode generateCommitment.
    Exemple :
    quantity_commitment from step 1 :036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63
    quantity from step 2 : 100
    blinding_factor from step 2 : 17721346708393996000
     
    Invoke the method generateCommitment("100", "17721346708393996000")
    Response: "036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63"
  5. Vérifiez que la valeur quantity_commitment de la première étape correspond à la sortie de la méthode generateCommitment.
    Exemple :
    quantity_commitment from step 1: 036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63
    Response From Step 4: "036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63"
     
    balance_commitment from step 1 = response from step 4
    LHS = RHS
     
    This verifies that the Pederson commitment is correct against the raw quantity and blindingFactor

Vérification des soldes de comptes

Après avoir obtenu les valeurs balance_commitment et balance réelles courantes et le facteur de masquage pour le compte, comme décrit précédemment, vous pouvez valider ces valeurs par rapport à l'historique des transactions.

Les exemples de valeurs que nous commençons par :
balance_commitment for account :036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63
balance for account : 4600
blinding_factor for account : 6835208149283572992000
  1. Utilisez la méthode getAccountTransactionHistoryWithFiltersFromRichHistDB pour extraire toutes les transactions pour le compte. Chaque transaction a un ID transaction unique et des entrées correspondantes de quantity_commitment (dans la base de données d'état) et de quantité et de facteur de masquage (dans la collecte de données privée).
    Exemple de réponse :
    [
        {
            "transaction_id": "otransaction~5112f576c94c2d23c342479bfa37e34612414b3258a64b43cf51b920f4ff5868",
            "transacted_amount": 5000,
            "timestamp": "2025-08-12T21:05:02.000Z",
            "token_id": "USD",
            "transacted_account": "oaccount~cea6080858337b1575d6a76ed0bd07a0eacd8871e3f2f7f793729a0e4b0e8e98",
            "transacted_org_id": "CentralBank",
            "transacted_user_id": "cb_retirer_demo",
            "transacted_custom_account_id": "10109999006543",
            "to_account": "oaccount~cea6080858337b1575d6a76ed0bd07a0eacd8871e3f2f7f793729a0e4b0e8e98",
            "to_org_id": "CentralBank",
            "to_user_id": "cb_retirer_demo",
            "to_custom_account_id": "10109999006543",
            "from_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
            "from_org_id": "CentralBank",
            "from_user_id": "cb_issuer_demo",
            "from_custom_account_id": "10109999001234",
            "transaction_type": "DEBIT",
            "category": "burn",
            "balance": 45000,
            "onhold_balance": 0
        },
        {
            "transaction_id": "otransaction~862aa9d9e877d3ea209b87299ab5b12c13ed5ce43d1cf1b934043c1dd02f58f6",
            "transacted_amount": 50000,
            "timestamp": "2025-08-12T21:04:22.000Z",
            "token_id": "USD",
            "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
            "transacted_org_id": "CentralBank",
            "transacted_user_id": "cb__creator_demo",
            "transacted_custom_account_id": "10105678004567",
            "to_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
            "to_org_id": "CentralBank",
            "to_user_id": "cb_issuer_demo",
            "to_custom_account_id": "10109999001234",
            "from_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
            "from_org_id": "CentralBank",
            "from_user_id": "cb__creator_demo",
            "from_custom_account_id": "10105678004567",
            "transaction_type": "CREDIT",
            "category": "transfer",
            "balance": 50000,
            "onhold_balance": 0
        },
        {
            "transaction_id": "otransaction~d209ff46dc46f4adb42f0002377507fe995b32bc618ac919eba49141cf1b8008",
            "transacted_amount": 100,
            "timestamp": "2025-08-01T10:59:48.000Z",
            "token_id": "token",
            "category": "category value",
            "description": "description value",
            "holding_id": "ohold~cbdc~token~mint1",
            "to_account_id": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
            "to_org_id": "CentralBank",
            "to_user_id": "cb",
            "to_custom_account_id": "10109999001234",
            "transacted_account": "oaccount~3a1b1c307883c0f74473fedfa62894d510b68959c4a21c7abb9d0224151aa573",
            "transaction_type": "APPROVE_MINT",
            "balance": 100,
            "onhold_balance": 0,
            "transacted_org_id": "CentralBank",
            "transacted_user_id": "cb__creator_demo",
            "transacted_custom_account_id": "1234567jh"
        }
    ]
  2. Suivez les étapes précédentes pour vérifier chaque quantité de transaction et vous assurer que les données publiques et privées sont synchronisées. Les exemples suivants montrent les transactions et les valeurs utilisées dans les calculs des étapes de vérification précédentes.
    transaction 1
    otransaction~d209ff46dc46f4adb42f0002377507fe995b32bc618ac919eba49141cf1b8008
    Valeurs des étapes de vérification :
    quantity_commitment from step 1: 036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63
    quantity from step 2: 100
    blinding_factor from step 2: 17721346708393996000
     
    Call the method generateCommitment("100", "17721346708393996000")
    Response: "036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63"
     
    quantity_commitment from step 1: 036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63
    response from step 4: "036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63"
     
    balance_commitment from step 1 = response from step 4
    LHS = RHS
     
    This verifies that the Pedersen commitment is correct against the raw quantity and blindingFactor 
    transaction 2
    otransaction~862aa9d9e877d3ea209b87299ab5b12c13ed5ce43d1cf1b934043c1dd02f58f6
    Valeurs des étapes de vérification :
    quantity_commitment from step 1: dd63036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23
    quantity from step 2: 50000
    blinding_factor from step 2: 6789721346708393996000
     
    Call the method generateCommitment("50000", "6789721346708393996000")
    Response: "dd63036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23"
     
    quantity_commitment from step 1: dd63036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23
    Response from step 4: "dd63036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23"
     
    balance_commitment from step 1 = response from step 4
    LHS = RHS
     
    This verifies that the Pedersen commitment is correct against the raw quantity and blindingFactor
    transaction 3
    otransaction~5112f576c94c2d23c342479bfa37e34612414b3258a64b43cf51b920f4ff5868
    Valeurs des étapes de vérification :
    quantity_commitment from step 1: d28b5a08889921d71b658b592a4261bc76b17cf553c67de2943d769741f8f23dd63
    quantity from step 2: 5000
    blinding_factor from step 2: 39317721346708996000
     
    Call the method generateCommitment("5000", "39317721346708996000")
    Response: "d28b5a08889921d71b658b592a4261bc76b17cf553c67de2943d769741f8f23dd63"
     
    quantity_commitment from step 1: d28b5a08889921d71b658b592a4261bc76b17cf553c67de2943d769741f8f23dd63
    Response from step 4: "d28b5a08889921d71b658b592a4261bc76b17cf553c67de2943d769741f8f23dd63"
     
    balance_commitment from step 1 = response from step 4
    LHS = RHS
     
    This verifies that the Pedersen commitment is correct against the raw quantity and blindingFactor
  3. Effectuez une itération dans la liste ordonnée des transactions dans l'ordre dans lequel elles ont eu lieu et calculez les totaux d'exécution pour chaque propriété. Pour chaque transaction, effectuez les étapes suivantes.
    1. Si la transaction est un crédit (ajout), combinez la propriété quantity_commitment à l'aide de la méthode addCommitment. Si la transaction est un débit (soustraction), combinez la propriété quantity_commitment à l'aide de la méthode subCommitment.
    2. Si la transaction est un crédit, ajoutez la propriété quantity. Si la transaction est un débit, soustrayez la propriété quantity.
    3. Si la transaction est un crédit, ajoutez la propriété blinding_factor. Si la transaction est un débit, soustrayez la propriété blinding_factor.
    Les exemples suivants montrent le traitement des engagements, de la quantité et du facteur d'aveuglement.
    Traiter les engagements
    Starting balance_commitment: "2a4261d28b5a08889921d71b658b59bc76b17cf553c67de2943d769741f8f23dd63"
    
        For Transaction 1 using method
        addCommitment(
        "2a4261d28b5a08889921d71b658b59bc76b17cf553c67de2943d769741f8f23dd63", 
        "036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63"
        ) = "a1d71b658036b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63"
    
        current balance_commitment: "a1d71b658036b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63"
        Transaction 2 using method
        addCommitment(
        "a1d71b658036b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63", 
        "dd63036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23"
        ) = "b285a4261dd63036a1d71b658b592bc76da08b17cf553c67de2943d769741f8f23"
    
        current balance_commitment: "b285a4261dd63036a1d71b658b592bc76da08b17cf553c67de2943d769741f8f23"
        Transaction 3 using method
        subCommitment(
        "b285a4261dd63036a1d71b658b592bc76da08b17cf553c67de2943d769741f8f23", 
        "d28b5a08889921d71b658b592a4261bc76b17cf553c67de2943d769741f8f23dd63"
        ) = "036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63"
    
    Final commitment: "036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63"
    Quantité de traitement
    starting balance: 0
    
        For Transaction 1 
        current_balance = 0 + 100 = 100
        current_balance = 100
        For Transaction 2
        new current_balance = 100 + 5000 = 5100
        current_balance = 5100
        For Transaction 3
        new current_balance = 5100 - 500 = 4600
    
    Final_balance = 4600
    Facteur d'aveuglement de processus
    starting blindingFactor: 67083177213493996000
    
        For Transaction 1 
        current_blindingFactor = 67083177213493996000 + 17721346708393996000 = 84804523921887992000
        current_balance = 84804523921887992000
        For Transaction 2
        new current_blindingFactor = 84804523921887992000 + 6789721346708393996000 = 6874525870630281988000
        current_balance = 6874525870630281988000
        For Transaction 3
        new current_blindingFactor = 6874525870630281988000 - 39317721346708996000 = 6835208149283572992000
    
    Final_balance = 6835208149283572992000
  4. Après avoir traité toutes les transactions, vérifiez que les instructions suivantes sont vraies.
    • La valeur quantity_commitment correspond à la valeur Account.balance_commitment courante
    • La valeur quantity correspond à la valeur Account.balance courante
    • La valeur blinding_factor correspond à la valeur Account.blinding_factor courante
    Exemple :
    Starting balance_commitment: 036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63
    balance_commitment from step 3 :036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63
     
    Starting balance_commitment =  balance_commitment from step 3
    LHS = RHS
    The balance pederson commitment is verified.
      
    starting balance : 4600
    balance from step 3 : 4600
     
    starting balance =  balance for step 3
    LHS = RHS
    The balance verified. 
     
    starting blinding_factor  : 6835208149283572992000
    blinding_factor from step 3  : 6835208149283572992000
     
    starting blinding_factor =  blinding_factor for step 3
    LHS = RHS
    The blinding_factor is verified.