Pedersenコミットメント値の検証

Oracle Blockchain Platform Digital Assets Editionは、Pedersenコミットメントを使用して、機密性と不変性の両方を保証します。次のAPIは、実際のRAWテキスト値に対するPedersenのコミットメントの検証に役立ちます。

Oracle Blockchain Platformでは、Oracle Databaseに接続することで、リッチ履歴データベースにデータを保持できます。状態データベースにキー/値のペアとして格納される勘定科目とトランザクションは、リッチ履歴データベースで時間の経過とともに追跡できます。機密モードでは、アカウントとトランザクションの両方が、リッチ履歴データベースの履歴表にプライベートとパブリックという2つの部分に格納されます。

組織のパブリックおよびプライベートの両方のデータは、リッチ履歴データベースの履歴表で使用できます。表名では、<obp_instance_name>_<channel_name>_histという形式を使用します。たとえば、CentralBank_default_histです。

パブリック アカウント データ(ステート データベース)
  • チェーンコードID: <chaincode_name>に格納されます。
  • すべてのネットワーク参加者にアクセス可能
  • org_idtoken_namebalance/onhold_balance (Pedersenコミットメントとして)、その他の非機密メタデータなどの一般的なアカウント・プロパティ
プライベート・アカウント・データ(プライベート・データ収集)
  • チェーンコードID: <chaincode_name>$$_implicit_org_<Oracle_Blockchain_Platform_instance_name>に格納されます。
  • プライベート・データ・コレクションを所有する組織にのみアクセスできます。
  • balance/onhold_balance (RAW値)、balanceBlindingFactoronHoldBalanceBlindingFactor、日次制限などの機密フィールド
パブリック トランザクション データ(ステート データベース)
  • チェーンコードID: <chaincode_name>に格納されます。
  • すべてのネットワーク参加者にアクセス可能
  • 送信者および受信者アカウントID、from_account_balance/from_account_onhold_balance/to_account_balance/to_account_onhold_balance/トランザクション金額(Pedersenコミットメントとして)、その他の非機密メタデータなどの一般的なアカウント・プロパティ
プライベート トランザクション データ(プライベート データ収集)
  • チェーンコードID: <chaincode_name>$$_implicit_org_<Oracle_Blockchain_Platform_instance_name>に格納されます。
  • プライベート・データ・コレクションを所有する組織にのみアクセスできます。
  • from_account_balance/from_account_onhold_balance/to_account_balance/to_account_onhold_balance/トランザクション量(raw値)などの機密フィールドおよび対応する盲検化係数

PedersenのコミットメントAPI

チェーンコードのコントローラ・ファイルに含まれる次のAPIを使用して、Pedersenコミットメントを検証および操作できます。

generateCommitment
このメソッドでは、指定した値とブラインド係数のPedersenコミットメントを生成します。このメソッドは、Token Adminまたは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;
 }
パラメータ:
  • value: string–Pedersenコミットメントを生成する数値。
  • blinding_factor: string–Pedersenのコミットメントの生成に使用される乱数。
戻り値:
  • ハッシュ値。指定した値とブラインド係数のPedersenコミットメントです。
戻り値の例:
"0212f6b676da244eee000a9106060cf3a3a4bb5a9b61be23dd467e557156c40be8"
addCommitment
このメソッドは、指定された2つのPedersenコミットメント・ハッシュ値を追加します。Pedersenのコミットメントは同型であるため、基になる値間の関係を維持しながら、コミットメントに対する加算や減算などの数学的操作の実行をサポートします。このメソッドは、Token Adminまたは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;
 }
パラメータ:
  • value1: string– 追加する最初のPedersenコミットメント・ハッシュ値。
  • value2: string– 追加する2番目のPedersenコミットメント・ハッシュ値。
戻り値:
  • ハッシュ値。指定された2つのPedersenコミットメント値の合計に対するPedersenコミットメントです。
戻り値の例:
"03a9c138b76e7d56f799108a46f665f53a42f55008b31e0fec071019aa5c37344a"
subCommitment
このメソッドは、2番目の指定されたPedersenコミットメント・ハッシュ値を1番目の値から減算します。Pedersenのコミットメントは同型であるため、基になる値間の関係を維持しながら、コミットメントに対する加算や減算などの数学的操作の実行をサポートします。このメソッドは、Token Adminまたは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;
 }
パラメータ:
  • value1: string– 減算の最初のPedersenコミットメント・ハッシュ値(最小値)。
  • value2: string–2番目のPedersenコミットメント・ハッシュ値で、1つ目(字幕)から減算します。
戻り値:
  • ハッシュ値。指定された2つのPedersenコミットメント値の差異に対するPedersenコミットメントです。
戻り値の例:
"0212f6b676da244eee000a9106060cf3a3a4bb5a9b61be23dd467e557156c40be8"

アカウントおよび保留残高の確認

  1. 次の問合せを使用して、残高(パブリック・データ)のPedersenコミットメントを取得します。
    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;
    問合せの例:
    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;
    レスポンスbalance_commitmentの例:
    03977a92a07c00234270d41097a35ed2050bcdef02d3908a9a3cc733951b4171dd
  2. 次の問合せを使用して、プライベート・データ・コレクションから残高および盲検係数を取得します。
    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;
    問合せの例:
    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;
    次の表に、レスポンスの例を示します。
    balance blinding_factor
    100 17629824947682234000
  3. 以前に定義したgenerateCommitmentメソッドを、srcフォルダ(src/controller/<Chaincode_name>.controller.ts)にあるコントローラ・ファイルに追加します。
    次に例を示します:
    @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. balance(valueとして)およびblinding_factor(blinding_factorとして)の値を2番目のステップからgenerateCommitmentメソッドに渡します。
    次に例を示します:
    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. 最初のステップのbalance_commitment値がgenerateCommitmentメソッドの出力と一致することを確認します。
    次に例を示します:
    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. 保留残高を確認するには、onhold_balance Pedersenコミットメントとonhold_balanceおよびonHoldBalanceBlindingFactor値に対してこれらのステップを繰り返します。

トランザクション数量の検証

  1. パブリック・データである数量のPedersenコミットメントを取得するには、次の問合せを使用します。
    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;
    次のテキストは、問合せの例を示しています。
    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;
    次のテキストは、レスポンスの例を示しています。
    quantity_commitment
    036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63
  2. 次の問合せを使用して、プライベート・データ・コレクションから数量および盲検係数を取得します。
    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;
    次のテキストは、問合せの例を示しています。
    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;
    次のテキストは、レスポンスの例を示しています。
    quantity blinding_factor
    100 17721346708393996000
  3. 以前に定義したgenerateCommitmentメソッドを、srcフォルダ(src/controller/<Chaincode_name>.controller.ts)にあるコントローラ・ファイルに追加します。
    次に例を示します:
    @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. quantity(valueとして)およびblinding_factor(blinding_factorとして)の値を2番目のステップからgenerateCommitmentメソッドに渡します。
    次に例を示します:
    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. 最初のステップのquantity_commitment値がgenerateCommitmentメソッドの出力と一致することを確認します。
    次に例を示します:
    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

勘定科目残高の監査

前述のように、現在の実際のbalance_commitmentおよびbalanceの値と勘定科目の盲検化係数を取得した後、これらの値をトランザクション履歴に対して検証できます。

次で始まる値の例:
balance_commitment for account :036a1d71b658b592a4261bc76d28b5a08b17cf553c67de2943d769741f8f23dd63
balance for account : 4600
blinding_factor for account : 6835208149283572992000
  1. getAccountTransactionHistoryWithFiltersFromRichHistDBメソッドを使用して、アカウントのすべてのトランザクションを取得します。各トランザクションには、一意のトランザクションIDと、対応するquantity_commitmentのエントリ(状態データベース内)、および数量とブラインド・ファクタ(プライベート・データ・コレクション内)があります。
    レスポンスの例:
    [
        {
            "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. 前のステップに従って、各トランザクション数量を確認し、パブリック・データとプライベート・データが同期されていることを確認します。次の例は、トランザクションと、前の検証ステップからの計算で使用される値を示しています。
    トランザクション 1
    otransaction~d209ff46dc46f4adb42f0002377507fe995b32bc618ac919eba49141cf1b8008
    検証ステップからの値:
    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 
    トランザクション 2
    otransaction~862aa9d9e877d3ea209b87299ab5b12c13ed5ce43d1cf1b934043c1dd02f58f6
    検証ステップからの値:
    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
    トランザクション 3
    otransaction~5112f576c94c2d23c342479bfa37e34612414b3258a64b43cf51b920f4ff5868
    検証ステップからの値:
    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. 順序付けられたトランザクション・リストを繰返し実行し、各プロパティの実行合計を計算します。各トランザクションについて、次のステップを実行します。
    1. トランザクションがクレジット(追加)の場合は、addCommitmentメソッドを使用してquantity_commitmentプロパティを結合します。トランザクションが借方(減算)の場合は、subCommitmentメソッドを使用してquantity_commitmentプロパティを結合します。
    2. トランザクションがクレジットの場合は、quantityプロパティを追加します。トランザクションが借方の場合は、quantityプロパティを減算します。
    3. トランザクションがクレジットの場合は、blinding_factorプロパティを追加します。トランザクションが借方の場合は、blinding_factorプロパティを減算します。
    次の例は、取引約定、数量およびブラインド係数の処理を示しています。
    取引約定の処理
    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"
    プロセス数量
    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
    プロセス・ブラインド係数
    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. すべてのトランザクションを処理した後、次の文が正しいことを確認します。
    • quantity_commitment値は、現在のAccount.balance_commitment値と一致します
    • quantity値は、現在のAccount.balance値と一致します
    • blinding_factor値は、現在のAccount.blinding_factor値と一致します
    次に例を示します:
    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.