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 | 42x 42x 42x 42x 258x 42x 125x 125x 136x 133x 133x 260x 136x 258x 5x 4x 128x | /* eslint-disable sonarjs/cognitive-complexity */
import * as Crypto from '@cardano-sdk/crypto';
import { Cardano } from '@cardano-sdk/core';
import { Observable, distinctUntilChanged, map, switchMap } from 'rxjs';
import { TrackerSubject } from '@cardano-sdk/util-rxjs';
interface CreateDRepRegistrationTrackerProps {
historyTransactions$: Observable<Cardano.HydratedTx[]>;
pubDRepKeyHash$: Observable<Crypto.Ed25519KeyHashHex | undefined>;
}
interface IsOwnDRepCredentialProps {
certificate: Cardano.Certificate;
dRepKeyHash: Crypto.Ed25519KeyHashHex;
}
const hasOwnDRepCredential = ({ certificate, dRepKeyHash }: IsOwnDRepCredentialProps) =>
'dRepCredential' in certificate &&
certificate.dRepCredential.type === Cardano.CredentialType.KeyHash &&
certificate.dRepCredential.hash === dRepKeyHash;
export const createDRepRegistrationTracker = ({
historyTransactions$,
pubDRepKeyHash$
}: CreateDRepRegistrationTrackerProps): TrackerSubject<boolean> =>
new TrackerSubject(
pubDRepKeyHash$.pipe(
switchMap((dRepKeyHash) =>
historyTransactions$.pipe(
map((txs) => {
if (!dRepKeyHash) return false;
const reverseTxs = [...txs].reverse();
for (const {
body: { certificates }
} of reverseTxs) {
if (certificates) {
for (const certificate of certificates) {
if (!hasOwnDRepCredential({ certificate, dRepKeyHash })) continue;
if (certificate.__typename === Cardano.CertificateType.UnregisterDelegateRepresentative) return false;
if (certificate.__typename === Cardano.CertificateType.RegisterDelegateRepresentative) return true;
}
}
}
return false;
})
)
),
distinctUntilChanged()
)
);
|