메인 콘텐츠로 건너뛰기

개요

검증 가능성은 Bluesky / AT Protocol의 중요한 개념입니다.

게시 검증

com.atproto.repo.getRecord로 취득한 게시 데이터의 CID가 레코드와 일치하는지 검증할 수 있습니다.
$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');

// DAG-CBOR로 인코드
$cbor = CBOR::encode($record);

$bool = CID::verify($cbor, $cid);
샘플 구현: DownloadRecordCommand

이미지 파일 검증

이미지를 포함한 게시에서는 $link가 이미지의 CID가 됩니다.
$block = [
    'uri' => 'at://did:plc:***/app.bsky.feed.post/***',
    'cid' => 'b+++',
    'value' => [
        'text' => '이미지 첨부 게시',
        '$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'
    ]
];
com.atproto.sync.getBlob으로 다운로드한 이미지의 원본 데이터를 검증합니다.
use Revolution\Bluesky\Core\CID;

// 이미지의 CID는 $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);
샘플 구현: DownloadBlobsCommand

CAR 파일 검증

CAR 파일에는 사용자의 모든 레코드가 포함됩니다. com.atproto.sync.getRepo로 다운로드한 CAR 파일이 대상 사용자의 것인지 여부를 검증할 수 있습니다.
use Revolution\Bluesky\Core\CAR;
use Revolution\Bluesky\Crypto\DidKey;
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Support\DidDocument;

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

// 검증에는 didDoc의 공개 키가 필요
$didDoc = DidDocument::make(Bluesky::identity()->resolveDID($did)->json());

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

$car = 'CAR 파일의 원본 데이터 또는 파일로의 스트림';

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

$bool = CAR::verifySignedCommit($signed, $didKey);
샘플 구현: DownloadRepoCommand

CAR 파일 전개 후의 검증

CAR 파일을 전개하여 취득한 레코드의 검증은 최초 게시 예시와 동일한 방법으로 수행합니다. 샘플 구현: UnpackRepoCommand
마지막 수정일 2026년 7월 13일