Vai al contenuto principale

Panoramica

La verificabilità è un concetto importante in Bluesky / AT Protocol.

Verifica dei post

Puoi verificare che il CID dei dati del post ottenuti tramite com.atproto.repo.getRecord corrisponda al record.
$block = [
    'uri' => 'at://did:plc:***/app.bsky.feed.post/***',
    'cid' => 'bafyreih5y47li4zuvvzevmq4xl7woqxchfc2pnfclv3kfz3zefb2qd3bzm',
    'value' => [
        'text' => 'Hello, Bluesky!',
        '$type' => 'app.bsky.feed.post',
        'createdAt' => '2025-01-01T00:00:00.000Z',
    ],
];
use Revolution\Bluesky\Core\CBOR;
use Revolution\Bluesky\Core\CID;

$cid = data_get($block, 'cid');
$record = data_get($block, 'value');

// Codifica in DAG-CBOR
$cbor = CBOR::encode($record);

$bool = CID::verify($cbor, $cid);
Implementazione di esempio: DownloadRecordCommand

Verifica dei file immagine

Nei post che contengono immagini, $link corrisponde al CID dell’immagine.
$block = [
    'uri' => 'at://did:plc:***/app.bsky.feed.post/***',
    'cid' => 'b+++',
    'value' => [
        'text' => 'Post con immagine',
        '$type' => 'app.bsky.feed.post',
        'embed' => [
            '$type' => 'app.bsky.embed.images',
            'images' => [
                [
                    'alt' => '',
                    'image' => [
                        'ref' => [
                            '$link' => 'b***image'
                        ],
                        'size' => 100000,
                        '$type' => 'blob',
                        'mimeType' => 'image/jpeg'
                    ],
                    'aspectRatio' => [
                        'width' => 1000,
                        'height' => 1000
                    ]
                ]
            ]
        ],
        'createdAt' => '2025-01-01T00:00:00.000Z'
    ]
];
Verifica i dati grezzi dell’immagine scaricata con com.atproto.sync.getBlob.
use Revolution\Bluesky\Core\CID;

// Ottieni il CID dell'immagine da $link
$cid = data_get($block, 'value.embed.images.0.image.ref.$link');
$file = file_get_contents('path/to/b***image.jpg');

$bool = CID::verify($file, $cid, codec: CID::RAW);
Implementazione di esempio: DownloadBlobsCommand

Verifica dei file CAR

Un file CAR contiene tutti i record di un utente. Puoi verificare se il file CAR scaricato con com.atproto.sync.getRepo appartiene effettivamente all’utente target.
use Revolution\Bluesky\Core\CAR;
use Revolution\Bluesky\Crypto\DidKey;
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Support\DidDocument;

$did = 'did:plc:***';

// Per la verifica è necessaria la chiave pubblica del didDoc
$didDoc = DidDocument::make(Bluesky::identity()->resolveDID($did)->json());

$didKey = DidKey::parse($didDoc->publicKey());

$car = 'dati grezzi del file CAR o stream verso il file';

$signed = CAR::signedCommit($car);

$bool = CAR::verifySignedCommit($signed, $didKey);
Implementazione di esempio: DownloadRepoCommand

Verifica dopo l’estrazione di un file CAR

La verifica dei record ottenuti estraendo un file CAR si esegue con lo stesso metodo del primo esempio sui post. Implementazione di esempio: UnpackRepoCommand
Ultima modifica il 13 luglio 2026