Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | 19x 19x 19x 19x 6x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 1x 1x 1x 6x 1x 1x 1x 1x | import { BlockfrostClient } from '../blockfrost/BlockfrostClient';
import { BlockfrostProvider } from '../blockfrost/BlockfrostProvider';
import { BlockfrostToCore } from '../blockfrost';
import {
Cardano,
EraSummary,
Milliseconds,
NetworkInfoProvider,
Seconds,
StakeSummary,
SupplySummary
} from '@cardano-sdk/core';
import { Logger } from 'ts-log';
import type { Responses } from '@blockfrost/blockfrost-js';
import type { Schemas } from '@blockfrost/blockfrost-js/lib/types/open-api';
export class BlockfrostNetworkInfoProvider extends BlockfrostProvider implements NetworkInfoProvider {
constructor(client: BlockfrostClient, logger: Logger) {
super(client, logger);
}
public async stake(): Promise<StakeSummary> {
try {
const { stake } = await this.request<Responses['network']>('network');
return {
active: BigInt(stake.active),
live: BigInt(stake.live)
};
} catch (error) {
throw this.toProviderError(error);
}
}
public async lovelaceSupply(): Promise<SupplySummary> {
try {
const { supply } = await this.request<Responses['network']>('network');
return {
circulating: BigInt(supply.circulating),
total: BigInt(supply.total)
};
} catch (error) {
throw this.toProviderError(error);
}
}
public async ledgerTip(): Promise<Cardano.Tip> {
try {
const block = await this.request<Responses['block_content']>('blocks/latest');
return BlockfrostToCore.blockToTip(block);
} catch (error) {
throw this.toProviderError(error);
}
}
public async protocolParameters(): Promise<Cardano.ProtocolParameters> {
try {
const response = await this.request<Responses['epoch_param_content']>('epochs/latest/parameters');
return BlockfrostToCore.protocolParameters(response);
} catch (error) {
throw this.toProviderError(error);
}
}
public async genesisParameters(): Promise<Cardano.CompactGenesis> {
return this.request<Responses['genesis_content']>('genesis')
.then((response) => ({
activeSlotsCoefficient: response.active_slots_coefficient,
epochLength: response.epoch_length,
maxKesEvolutions: response.max_kes_evolutions,
maxLovelaceSupply: BigInt(response.max_lovelace_supply),
networkId:
response.network_magic === Cardano.NetworkMagics.Mainnet
? Cardano.NetworkId.Mainnet
: Cardano.NetworkId.Testnet,
networkMagic: response.network_magic,
securityParameter: response.security_param,
// Blockfrost currently returns '0' for our local network
// https://github.com/blockfrost/openapi/pull/389
slotLength: Seconds(response.slot_length || 0.2),
slotsPerKesPeriod: response.slots_per_kes_period,
systemStart: new Date(response.system_start * 1000),
updateQuorum: response.update_quorum
}))
.catch((error) => {
throw this.toProviderError(error);
});
}
protected async fetchEraSummaries(): Promise<Schemas['network-eras']> {
try {
return await this.request<Responses['network-eras']>('network/eras');
} catch (error) {
throw this.toProviderError(error);
}
}
protected async parseEraSummaries(summaries: Schemas['network-eras'], systemStart: Date): Promise<EraSummary[]> {
try {
return summaries.map((r) => ({
parameters: {
epochLength: r.parameters.epoch_length,
slotLength: Milliseconds(r.parameters.slot_length * 1000)
},
start: {
slot: r.start.slot,
time: new Date(systemStart.getTime() + r.start.time * 1000)
}
}));
} catch (error) {
throw this.toProviderError(error);
}
}
public async eraSummaries(): Promise<EraSummary[]> {
try {
const { systemStart } = await this.genesisParameters();
const summaries = await this.fetchEraSummaries();
return this.parseEraSummaries(summaries, systemStart);
} catch (error) {
throw this.toProviderError(error);
}
}
}
|