Passer au contenu principal

Vue d’ensemble

La vérifiabilité est un concept clé de Bluesky / AT Protocol.

Vérification d’une publication

Vous pouvez vérifier que le CID des données de publication récupérées via com.atproto.repo.getRecord correspond bien à l’enregistrement.
$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');

// Encoder en DAG-CBOR
$cbor = CBOR::encode($record);

$bool = CID::verify($cbor, $cid);
Exemple d’implémentation : DownloadRecordCommand

Vérification des fichiers image

Dans les publications contenant une image, $link correspond au CID de l’image.
$block = [
    'uri' => 'at://did:plc:***/app.bsky.feed.post/***',
    'cid' => 'b+++',
    'value' => [
        'text' => 'Publication avec image',
        '$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'
    ]
];
Vous vérifiez les données brutes de l’image téléchargée via com.atproto.sync.getBlob.
use Revolution\Bluesky\Core\CID;

// Le CID de l'image est récupéré depuis $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);
Exemple d’implémentation : DownloadBlobsCommand

Vérification d’un fichier CAR

Un fichier CAR contient tous les enregistrements d’un utilisateur. Vous pouvez vérifier que le fichier CAR téléchargé via com.atproto.sync.getRepo appartient bien à l’utilisateur cible.
use Revolution\Bluesky\Core\CAR;
use Revolution\Bluesky\Crypto\DidKey;
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Support\DidDocument;

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

// La clé publique du didDoc est nécessaire pour la vérification
$didDoc = DidDocument::make(Bluesky::identity()->resolveDID($did)->json());

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

$car = 'Données brutes du fichier CAR ou flux vers le fichier';

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

$bool = CAR::verifySignedCommit($signed, $didKey);
Exemple d’implémentation : DownloadRepoCommand

Vérification après décompression d’un fichier CAR

La vérification des enregistrements obtenus en décompressant le fichier CAR s’effectue de la même manière que dans le premier exemple de publication. Exemple d’implémentation : UnpackRepoCommand
Dernière modification le 13 juillet 2026