> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbitflare.com/llms.txt
> Use this file to discover all available pages before exploring further.

# getAssetProof

> Получение доказательства Меркла, необходимого для передачи, сжигания или обновления сжатого NFT Solana, с помощью DAS getAssetProof в OrbitFlare.

## Обзор

Сжатые NFT хранятся как листья в конкурентном дереве Меркла, а не в собственных аккаунтах. Чтобы передать, сжечь, делегировать или обновить такой NFT, транзакция должна доказать, что лист находится в дереве. `getAssetProof` возвращает это доказательство: текущий корень, хеши соседних узлов от листа до корня и хеш листа.

<Tip>
  Если вам также нужен сам актив (для владельца, делегата и хешей), используйте [getAssetWithProof](/ru/das-api/methods/getAssetWithProof), чтобы получить и то и другое за один вызов.
</Tip>

## Параметры

<ResponseField name="id" type="string" required>
  ID сжатого актива (base-58).
</ResponseField>

## Ответ

<ResponseField name="result" type="object">
  <Expandable title="поля доказательства">
    <ResponseField name="root" type="string">
      Текущий корень дерева Меркла.
    </ResponseField>

    <ResponseField name="proof" type="string[]">
      Хеши соседних узлов от листа до корня.
    </ResponseField>

    <ResponseField name="node_index" type="number">
      Индекс узла листа в дереве.
    </ResponseField>

    <ResponseField name="leaf" type="string">
      Хеш листа.
    </ResponseField>

    <ResponseField name="tree_id" type="string">
      Адрес дерева Меркла.
    </ResponseField>

    <ResponseField name="last_indexed_slot" type="number">
      Последний слот, обработанный индексом.
    </ResponseField>
  </Expandable>
</ResponseField>

## Примеры кода

### Запрос

```bash theme={"theme":{"light":"github-light","dark":"github-dark-default"}}
curl https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY -X POST -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getAssetProof",
  "params": {
    "id": "JEKNNLZK6uQaQUEUz9GRoYZ7buHQ4rTN6k3qhX9NG8qU"
  }
}'
```

### Ответ

```json theme={"theme":{"light":"github-light","dark":"github-dark-default"}}
{
  "jsonrpc": "2.0",
  "result": {
    "last_indexed_slot": 457714576,
    "root": "3wxyaNRvzuZqDd9jtqthCu87spdKuhcpaKVzP1msGyHW",
    "proof": [
      "8mjbWMPrBwYJeEmQbeYLR7mscS4umW4U3kxibuH8hcY1",
      "DV31TLc5BXCnCQMaQ9H6empbG9i69w4AWkjR5RPiyXr8",
      "G6f1pEKetujNm6JXQxD47eBudxLV1irR1U5atpAXBb4q",
      "FbztVPKvuxh5SKvgwnnfahS1cX1pNCkDwdGWXjiS6uMr",
      "4o3C635ciZfE3DhDbJd3SUi4NziqsTe4qUMYpUycEPnD",
      "7wYFA3aSJzJiUQeLX8W3z8n6kj38MvXjS4THiR8EqXaX",
      "ySuYMGpCfwSaPCSekQ7GqzPwK2tNFQRiXzpMBk87y2G",
      "4cEUgjcHgRLHaTb8W3b8zepKd5mEM2YSjUaE1SUVtp9E",
      "AUaRHd35EJPV6WVzgfDease3DUQzYRGnDM72kPNJMxxY",
      "BXmjgYrVGcypzZToQkC4YzAKTfKJDkUbwR5zzLXzYZyv",
      "H2Z3JbU8P1hyNKZErvmhfJVwsQBbQuNrJqXkZb6hL1Ct",
      "8mRjuEbofX63HUHfRrScqKMWuTYJsjeGPDAz7tWPqP45",
      "4BCzbM5wTzy3nCNQ7Sd8px1w4pBwse2VZksZVeVgGN5D",
      "6d4JjgVgErnnBLjzLSQcuAJEc9fUhTbDNRXihjuhPpJ3",
      "8AhhfYKmRs8srSsp9BeWTrjkTUrXh5UDu17C1ApueuD4",
      "6eQoNu6H4dDsRgdJFFMKAFuAiYDRLDwrza52gn9W8pX2",
      "AWnzWhtFyRdQTVmd3NwNNXEJuSzcu33L73RXJgukaEnM",
      "BViAqVspYKdhqYKqVpntUmspSBSWqibm6LjWdvP2F2Vj",
      "BMkvaTguMUzPD4SEr2EQ2j15mrnucrKnUzrVHyMpDbw2",
      "EdGUXNZE4FDSYtKY7SDYAam2a7atkGAmezhGFnfauiA9"
    ],
    "node_index": 1671570,
    "leaf": "CcMhrzXFkjyLwZdijjRibgSYw4tUzXYALoCxwms4aMFH",
    "tree_id": "E7fYCRWkNykc8HNZvEMRj5GuNYSwJ3WjA6HuLsh3YHvL"
  },
  "id": 1
}
```

### TypeScript

Передайте доказательство в инструкцию Bubblegum в качестве оставшихся аккаунтов (remaining accounts):

```typescript theme={"theme":{"light":"github-light","dark":"github-dark-default"}}
import { PublicKey, AccountMeta } from '@solana/web3.js';

const RPC_URL = 'https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY';

async function getProofAccounts(assetId: string, canopyDepth = 0) {
  const response = await fetch(RPC_URL, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: 1,
      method: 'getAssetProof',
      params: { id: assetId },
    }),
  });
  const { result, error } = await response.json();
  if (error) throw new Error(error.message);

  // Nodes stored in the tree's canopy are already on chain and can be left out.
  const proofPath: AccountMeta[] = result.proof
    .slice(0, result.proof.length - canopyDepth)
    .map((node: string) => ({ pubkey: new PublicKey(node), isSigner: false, isWritable: false }));

  return { root: new PublicKey(result.root), proofPath };
}
```

## Примечания

* Доказательство действительно только до изменения дерева. Получайте его непосредственно перед сборкой транзакции и запрашивайте повторно, если транзакция завершилась ошибкой из-за несовпадения корня.
* Деревья с канопи (canopy) хранят верхние уровни ончейн, поэтому вы можете отбросить соответствующее количество узлов с конца `proof`, чтобы сэкономить место в транзакции.

## Распространённые ошибки

| Код | Сообщение | Решение |
| - | - | - |
| -32602 | Pubkey Validation Err: ... is invalid | Передайте действительный ID актива в base-58 |
| -32000 | Asset Proof Not Found | Актив не является сжатым или ещё не проиндексирован |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.