Verificar valores de compromiso de Pedersen

Oracle Blockchain Platform Digital Assets Edition utiliza los compromisos de Pedersen para garantizar tanto el secreto como la inmutabilidad. Las siguientes API pueden ayudar a verificar los compromisos de Pedersen con respecto a los valores de texto sin formato reales.

En Oracle Blockchain Platform, los datos se pueden mantener en la base de datos de historial enriquecida conectándose a una instancia de Oracle Database. Las cuentas y transacciones, que se almacenan como pares clave/valor en la base de datos de estado, se pueden rastrear a lo largo del tiempo en la base de datos de historial enriquecido. En modo confidencial, tanto las cuentas como las transacciones se almacenan en dos partes, privada y pública, en la tabla de historial de la base de datos de historial enriquecida.

Todos los datos, tanto públicos como privados para la organización, están disponibles en la tabla de historial de la base de datos de historial enriquecida. El nombre de la tabla utiliza el siguiente formato: <obp_instance_name>_<channel_name>_hist. Por ejemplo, CentralBank_default_hist.

Datos de cuentas públicas (base de datos de estado)
  • Se almacenan en el identificador de código de cadena: <chaincode_name>
  • Accesible a todos los participantes de la red
  • Propiedades generales de la cuenta, como org_id, token_name, balance/onhold_balance (como compromisos de Pedersen) y otros metadatos no confidenciales
Datos de Cuentas Privadas (Recopilación de Datos Privados)
  • Se almacenan en el identificador de código de cadena: <chaincode_name>$$_implicit_org_<Oracle_Blockchain_Platform_instance_name>
  • Solo accesible para la organización propietaria de la recopilación de datos privada
  • Campos confidenciales, como balance/onhold_balance (valores sin formato), balanceBlindingFactor, onHoldBalanceBlindingFactor y límites diarios
Datos de transacción pública (base de datos de estado)
  • Se almacenan en el identificador de código de cadena: <chaincode_name>
  • Accesible a todos los participantes de la red
  • Propiedades generales de la cuenta, como ID de cuentas de remitente y receptor, from_account_balance/from_account_onhold_balance/to_account_balance/to_account_onhold_balance/importes de transacciones (como compromisos de Pedersen) y otros metadatos no confidenciales
Datos de Transacciones Privadas (Recopilación de Datos Privados)
  • Se almacenan en el identificador de código de cadena: <chaincode_name>$$_implicit_org_<Oracle_Blockchain_Platform_instance_name>
  • Solo accesible para la organización propietaria de la recopilación de datos privada
  • Campos confidenciales, como from_account_balance/from_account_onhold_balance/to_account_balance/to_account_onhold_balance/cantidades de transacción (valores sin procesar), y los factores de cegamiento correspondientes

API de compromiso de Pedersen

Puede utilizar las siguientes API, que se incluyen en el archivo del controlador del código de cadena, para verificar y trabajar con compromisos de Pedersen.

generateCommitment
Este método genera un compromiso de Pedersen para un valor y un factor de cegamiento especificados. Este método solo se puede llamar mediante Token Admin o 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;
 }
Parámetros:
  • value: string: valor numérico para el que se genera el compromiso de Pedersen.
  • blinding_factor: string: número aleatorio utilizado para generar el compromiso de Pedersen.
Devuelve:
  • Un valor hash, que es el compromiso de Pedersen para el valor especificado y el factor de enmascaramiento.
Ejemplo de valor devuelto:
"0212f6b676da244eee000a9106060cf3a3a4bb5a9b61be23dd467e557156c40be8"
addCommitment
Este método agrega dos valores hash de compromiso Pedersen especificados. Debido a que los compromisos de Pedersen son homomórficos, apoyan la realización de operaciones matemáticas, como la suma y la resta de compromisos, al tiempo que preservan las relaciones entre los valores subyacentes. Este método solo se puede llamar mediante Token Admin o 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;
 }
Parámetros:
  • value1: string: el primer valor hash de compromiso de Pedersen que se va a agregar.
  • value2: string: el segundo valor hash de compromiso de Pedersen que se va a agregar.
Devuelve:
  • Valor hash, que es el compromiso de Pedersen para la suma de los dos valores de compromiso especificados de Pedersen.
Ejemplo de valor devuelto:
"03a9c138b76e7d56f799108a46f665f53a42f55008b31e0fec071019aa5c37344a"
subCommitment
Este método resta el segundo valor hash de compromiso de Pedersen especificado del primero. Debido a que los compromisos de Pedersen son homomórficos, apoyan la realización de operaciones matemáticas, como la suma y la resta de compromisos, al tiempo que preservan las relaciones entre los valores subyacentes. Este método solo se puede llamar mediante Token Admin o 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;
 }
Parámetros:
  • value1: string: el primer valor hash de compromiso de Pedersen de la resta (el mínimo).
  • value2: string: el segundo valor hash de compromiso de Pedersen que se debe restar del primero (subtrahend).
Devuelve:
  • Un valor hash, que es el compromiso de Pedersen para la diferencia de los dos valores de compromiso de Pedersen especificados.
Ejemplo de valor devuelto:
"0212f6b676da244eee000a9106060cf3a3a4bb5a9b61be23dd467e557156c40be8"

Verificación de saldos de cuenta y retenidos

  1. Utilice la siguiente consulta para obtener el compromiso de Pedersen del saldo, que es datos públicos.
    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;
    Consulta de ejemplo:
    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;
    Ejemplo de respuesta balance_commitment:
    03977a92a07c00234270d41097a35ed2050bcdef02d3908a9a3cc733951b4171dd
  2. Utilice la siguiente consulta para obtener el factor de equilibrio y enmascaramiento de la recopilación de datos privada.
    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;
    Consulta de ejemplo:
    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;
    En la siguiente tabla se muestra un ejemplo de respuesta:
    balance blinding_factor
    100 17629824947682234000
  3. Agregue el método generateCommitment, definido anteriormente, al archivo de controlador ubicado en la carpeta src (src/controller/<Chaincode_name>.controller.ts).
    Por ejemplo:
    @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. Transfiera los valores balance (como value) y blinding_factor (como blinding_factor) del segundo paso al método generateCommitment.
    Por ejemplo:
    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. Verifique que el valor balance_commitment del primer paso coincide con la salida del método generateCommitment.
    Por ejemplo:
    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. Para verificar un saldo retenido, repita estos pasos para el compromiso de Pedersen onhold_balance y los valores onhold_balance y onHoldBalanceBlindingFactor.

Verificación de cantidades de transacción

  1. Utilice la siguiente consulta para obtener el compromiso de Pedersen de la cantidad, que es datos públicos.
    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;
    El siguiente texto muestra una consulta de ejemplo.
    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;
    En el siguiente texto se muestra un ejemplo de respuesta.
    quantity_commitment
    036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63
  2. Utilice la siguiente consulta para obtener la cantidad y el factor de enmascaramiento de la recopilación de datos privada.
    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;
    El siguiente texto muestra una consulta de ejemplo.
    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;
    En el siguiente texto se muestra un ejemplo de respuesta.
    quantity blinding_factor
    100 17721346708393996000
  3. Agregue el método generateCommitment, definido anteriormente, al archivo de controlador ubicado en la carpeta src (src/controller/<Chaincode_name>.controller.ts).
    Por ejemplo:
    @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. Transfiera los valores quantity (como value) y blinding_factor (como blinding_factor) del segundo paso al método generateCommitment.
    Por ejemplo:
    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. Verifique que el valor quantity_commitment del primer paso coincide con la salida del método generateCommitment.
    Por ejemplo:
    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

Auditoría de saldos de cuenta

Después de obtener los valores actuales balance_commitment y balance y el factor de cegamiento para la cuenta como se ha descrito anteriormente, puede validar estos valores con respecto al historial de transacciones.

Los valores de ejemplo con los que estamos empezando:
balance_commitment for account :036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63
balance for account : 4600
blinding_factor for account : 6835208149283572992000
  1. Utilice el método getAccountTransactionHistoryWithFiltersFromRichHistDB para recuperar todas las transacciones de la cuenta. Cada transacción tiene un ID de transacción único y las entradas correspondientes de quantity_commitment (en la base de datos de estado) y un factor de cantidad y enmascaramiento (en la recopilación de datos privada).
    Respuesta de ejemplo:
    [
        {
            "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. Siga los pasos anteriores para verificar cada cantidad de transacción y asegurarse de que los datos públicos y privados están sincronizados. Los siguientes ejemplos muestran las transacciones y los valores utilizados en los cálculos de los pasos de verificación anteriores.
    Transacción 1
    otransaction~d209ff46dc46f4adb42f0002377507fe995b32bc618ac919eba49141cf1b8008
    Valores de los pasos de verificación:
    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 
    Transacción 2
    otransaction~862aa9d9e877d3ea209b87299ab5b12c13ed5ce43d1cf1b934043c1dd02f58f6
    Valores de los pasos de verificación:
    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
    Transacción 3
    otransaction~5112f576c94c2d23c342479bfa37e34612414b3258a64b43cf51b920f4ff5868
    Valores de los pasos de verificación:
    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. Itere a través de la lista ordenada de transacciones en el orden en que se realizaron y calcule los totales en ejecución de cada propiedad. Para cada transacción, complete los pasos siguientes.
    1. Si la transacción es un crédito (adición), combine la propiedad quantity_commitment mediante el método addCommitment. Si la transacción es un débito (resta), combine la propiedad quantity_commitment mediante el método subCommitment.
    2. Si la transacción es un crédito, agregue la propiedad quantity. Si la transacción es un débito, resta la propiedad quantity.
    3. Si la transacción es un crédito, agregue la propiedad blinding_factor. Si la transacción es un débito, resta la propiedad blinding_factor.
    Los siguientes ejemplos muestran el procesamiento de los compromisos, la cantidad y el factor de cegamiento.
    Procesar compromisos
    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"
    Cantidad de proceso
    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
    Factor de cegamiento de procesos
    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. Después de procesar todas las transacciones, compruebe que las siguientes afirmaciones sean verdaderas.
    • El valor quantity_commitment coincide con el valor Account.balance_commitment actual
    • El valor quantity coincide con el valor Account.balance actual
    • El valor blinding_factor coincide con el valor Account.blinding_factor actual
    Por ejemplo:
    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.