1. Go to this page and download the library: Download fissible/attest library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
fissible / attest example snippets
use Fissible\Attest\Chain\EvidenceChain;
use Fissible\Attest\Chain\FileChainStore;
use Fissible\Attest\Signing\KeyPair;
use Fissible\Attest\Signing\SodiumSigner;
// Your app's signing identity ("this entry really came from us").
$keys = KeyPair::generate(); // save these; the public key is needed to verify later
$signer = new SodiumSigner($keys, keyId: 'station-prod-2026-01');
// Where the chain is stored, and which chain we're writing to.
$store = new FileChainStore(__DIR__ . '/storage/attest');
$chain = EvidenceChain::open($store, 'contracts', $signer);
// Record an event.
$chain->record('contract.approved', [
'contract_id' => 'C-2026-014',
'approved_by' => 'user:7',
'amount' => 50_000,
]);
use Fissible\Attest\Verification\SignatureVerifier;
use Fissible\Attest\Verification\TrustedKey;
use Fissible\Attest\Verification\Verifier;
$verifier = new Verifier(
store: $store,
signatures: new SignatureVerifier([
new TrustedKey($keys->publicKey, keyId: 'station-prod-2026-01'),
]),
);
$result = $verifier->verifyChain('contracts');
$result->isVerified(); // true only if every entry is signed by a trusted key
// and nothing was altered, inserted, or deleted.
use Fissible\Attest\Chain\ChainStore;
use Fissible\Attest\Testing\ChainStoreContractTests;
use PHPUnit\Framework\TestCase;
final class MyChainStoreTest extends TestCase
{
use ChainStoreContractTests;
protected function makeStore(): ChainStore
{
return new MyChainStore();
}
}
use Fissible\Attest\Anchor\AnchorOutcome;
use Fissible\Attest\Anchor\OpenTimestamps\OpenTimestampsCalendarClient;
use Fissible\Attest\Anchor\OpenTimestampsDriver;
use Fissible\Attest\Chain\FileChainStore;
use Fissible\Attest\Headers\BitcoinCoreRpcHeaderProvider;
use Fissible\Attest\Headers\HeaderProviderSet;
use Fissible\Attest\Verification\SignatureVerifier;
use Fissible\Attest\Verification\TrustedKey;
use Fissible\Attest\Verification\VerificationPolicy;
use Fissible\Attest\Verification\Verifier;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\HttpFactory;
$store = new FileChainStore(__DIR__ . '/storage/attest');
$http = new Client();
$factory = new HttpFactory();
$verifier = new Verifier(
store: $store,
signatures: new SignatureVerifier([
new TrustedKey($rawEd25519PublicKey, keyId: 'station-prod-2026-01'),
]),
policy: new VerificationPolicy(
minAnchorOutcome: AnchorOutcome::BITCOIN_VERIFIED,
),
anchorDrivers: [
new OpenTimestampsDriver(OpenTimestampsCalendarClient::withGuzzle()),
],
headers: new HeaderProviderSet(
new BitcoinCoreRpcHeaderProvider(
http: $http,
requests: $factory,
streams: $factory,
rpcUrl: 'http://127.0.0.1:8332',
cookieFile: '/var/lib/bitcoin/.bitcoin/.cookie',
),
),
);
$result = $verifier->verifyChain('tenant:5', fromSeq: 1, toSeq: 1000);