Saltar al contenido principal

Descripción general

La verificabilidad es un concepto importante en Bluesky / AT Protocol.

Verificación de publicaciones

Con los datos de publicación obtenidos vía com.atproto.repo.getRecord, puedes verificar que el CID coincide con el 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 a DAG-CBOR
$cbor = CBOR::encode($record);

$bool = CID::verify($cbor, $cid);
Implementación de ejemplo: DownloadRecordCommand

Verificación de archivos de imagen

En publicaciones con imagen, el $link es el CID de la imagen.
$block = [
    'uri' => 'at://did:plc:***/app.bsky.feed.post/***',
    'cid' => 'b+++',
    'value' => [
        'text' => 'Publicación con imagen',
        '$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 los datos crudos de la imagen descargada con com.atproto.sync.getBlob.
use Revolution\Bluesky\Core\CID;

// El CID de la imagen se obtiene desde $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);
Implementación de ejemplo: DownloadBlobsCommand

Verificación de archivos CAR

Un archivo CAR contiene todos los records de un usuario. Puedes verificar si el archivo CAR descargado con com.atproto.sync.getRepo pertenece al usuario indicado.
use Revolution\Bluesky\Core\CAR;
use Revolution\Bluesky\Crypto\DidKey;
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Support\DidDocument;

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

// Se necesita la clave pública del didDoc para verificar
$didDoc = DidDocument::make(Bluesky::identity()->resolveDID($did)->json());

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

$car = 'Datos crudos del archivo CAR o stream al archivo';

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

$bool = CAR::verifySignedCommit($signed, $didKey);
Implementación de ejemplo: DownloadRepoCommand

Verificación después de expandir el archivo CAR

La verificación de los records obtenidos al expandir el archivo CAR se realiza igual que en el primer ejemplo de publicación. Implementación de ejemplo: UnpackRepoCommand
Última modificación el 13 de julio de 2026