@polkadot/types/interfaces#Nominations TypeScript Examples
The following examples show how to use
@polkadot/types/interfaces#Nominations.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: useNominations.ts From crust-apps with Apache License 2.0 | 6 votes |
function extractNominators (nominations: [StorageKey, Option<Nominations>][]): Result {
return nominations.reduce((mapped: Result, [key, optNoms]) => {
if (optNoms.isSome && key.args.length) {
const nominatorId = key.args[0].toString();
const { submittedIn, targets } = optNoms.unwrap();
targets.forEach((_validatorId, index): void => {
const validatorId = _validatorId.toString();
const info = { index: index + 1, nominatorId, submittedIn };
if (!mapped[validatorId]) {
mapped[validatorId] = [info];
} else {
mapped[validatorId].push(info);
}
});
}
return mapped;
}, {});
}
Example #2
Source File: useNominations.ts From crust-apps with Apache License 2.0 | 6 votes |
export default function useNominations (isActive = true): Result | undefined {
const { api } = useApi();
const nominators = useCall<[StorageKey, Option<Nominations>][]>(isActive && api.query.staking.guarantors.entries);
return useMemo(
() => nominators && extractNominators(nominators),
[nominators]
);
}
Example #3
Source File: index.ts From sdk with Apache License 2.0 | 6 votes |
/**
* Query nominations of staking module.
*/
async function queryNominations(api: ApiPromise) {
const nominators: [StorageKey, Option<Nominations>][] = await api.query.staking.nominators.entries();
return nominators.reduce((mapped: Result, [key, optNoms]) => {
if (optNoms.isSome && key.args.length) {
const nominatorId = key.args[0].toString();
const { targets } = optNoms.unwrap();
targets.forEach((_validatorId, index): void => {
const validatorId = _validatorId.toString();
// const info = { index: index + 1, nominatorId, submittedIn };
if (!mapped[validatorId]) {
mapped[validatorId] = [nominatorId];
} else {
mapped[validatorId].push(nominatorId);
}
});
}
return mapped;
}, {});
}
Example #4
Source File: useInactives.ts From crust-apps with Apache License 2.0 | 5 votes |
export default function useInactives (stashId: string, nominees?: string[]): Inactives {
const { api } = useApi();
const mountedRef = useIsMountedRef();
const [state, setState] = useState<Inactives>({});
const indexes = useCall<DeriveSessionIndexes>(api.derive.session.indexes);
useEffect((): () => void => {
let unsub: (() => void) | undefined;
if (mountedRef.current && nominees && nominees.length && indexes) {
api
.queryMulti(
[[api.query.staking.nominators, stashId] as any]
.concat(
api.query.staking.erasStakers
? nominees.map((id) => [api.query.staking.erasStakers, [indexes.activeEra, id]])
: nominees.map((id) => [api.query.staking.stakers, id])
)
.concat(
nominees.map((id) => [api.query.staking.slashingSpans, id])
),
([optNominators, ...exposuresAndSpans]: [Option<Nominations>, ...(Exposure | Option<SlashingSpans>)[]]): void => {
const exposures = exposuresAndSpans.slice(0, nominees.length) as Exposure[];
const slashes = exposuresAndSpans.slice(nominees.length) as Option<SlashingSpans>[];
mountedRef.current && setState(
extractState(api, stashId, slashes, nominees, indexes, optNominators.unwrapOrDefault().submittedIn, exposures)
);
}
)
.then((_unsub): void => {
unsub = _unsub;
}).catch(console.error);
}
return (): void => {
unsub && unsub();
};
}, [api, indexes, mountedRef, nominees, stashId]);
return state;
}
Example #5
Source File: useAccountInfo.ts From crust-apps with Apache License 2.0 | 4 votes |
export function useAccountInfo (value: string | null, isContract = false): UseAccountInfo {
const { api } = useApi();
const { isAccount } = useAccounts();
const { isAddress } = useAddresses();
const accountInfo = useCall<DeriveAccountInfo>(api.derive.accounts.info, [value]);
const accountFlags = useCall<DeriveAccountFlags>(api.derive.accounts.flags, [value]);
const nominator = useCall<Nominations>(api.query.staking?.nominators, [value]);
const validator = useCall<ValidatorPrefs>(api.query.staking?.validators, [value]);
const [accountIndex, setAccountIndex] = useState<string | undefined>(undefined);
const [tags, setSortedTags] = useState<string[]>([]);
const [name, setName] = useState('');
const [genesisHash, setGenesisHash] = useState<string | null>(null);
const [identity, setIdentity] = useState<AddressIdentity | undefined>();
const [flags, setFlags] = useState<AddressFlags>(IS_NONE);
const [meta, setMeta] = useState<KeyringJson$Meta | undefined>();
const [isEditingName, toggleIsEditingName] = useToggle();
const [isEditingTags, toggleIsEditingTags] = useToggle();
useEffect((): void => {
validator && setFlags((flags) => ({
...flags,
isValidator: !validator.isEmpty
}));
}, [validator]);
useEffect((): void => {
nominator && setFlags((flags) => ({
...flags,
isNominator: !nominator.isEmpty
}));
}, [nominator]);
useEffect((): void => {
accountFlags && setFlags((flags) => ({
...flags,
...accountFlags
}));
}, [accountFlags]);
useEffect((): void => {
const { accountIndex, identity, nickname } = accountInfo || {};
const newIndex = accountIndex?.toString();
setAccountIndex((oldIndex) =>
oldIndex !== newIndex
? newIndex
: oldIndex
);
let name;
if (isFunction(api.query.identity?.identityOf)) {
if (identity?.display) {
name = identity.display;
}
} else if (nickname) {
name = nickname;
}
setName(name || '');
if (identity) {
const judgements = identity.judgements.filter(([, judgement]) => !judgement.isFeePaid);
const isKnownGood = judgements.some(([, judgement]) => judgement.isKnownGood);
const isReasonable = judgements.some(([, judgement]) => judgement.isReasonable);
const isErroneous = judgements.some(([, judgement]) => judgement.isErroneous);
const isLowQuality = judgements.some(([, judgement]) => judgement.isLowQuality);
setIdentity({
...identity,
isBad: isErroneous || isLowQuality,
isErroneous,
isExistent: !!identity.display,
isGood: isKnownGood || isReasonable,
isKnownGood,
isLowQuality,
isReasonable,
judgements,
waitCount: identity.judgements.length - judgements.length
});
} else {
setIdentity(undefined);
}
}, [accountInfo, api]);
useEffect((): void => {
if (value) {
try {
const accountOrAddress = keyring.getAccount(value) || keyring.getAddress(value);
const isOwned = isAccount(value);
const isInContacts = isAddress(value);
setGenesisHash(accountOrAddress?.meta.genesisHash || null);
setFlags((flags): AddressFlags => ({
...flags,
isDevelopment: accountOrAddress?.meta.isTesting || false,
isEditable: !!(!identity?.display && (isInContacts || accountOrAddress?.meta.isMultisig || (accountOrAddress && !(accountOrAddress.meta.isInjected)))) || false,
isExternal: !!accountOrAddress?.meta.isExternal || false,
isHardware: !!accountOrAddress?.meta.isHardware || false,
isInContacts,
isInjected: !!accountOrAddress?.meta.isInjected || false,
isMultisig: !!accountOrAddress?.meta.isMultisig || false,
isOwned,
isProxied: !!accountOrAddress?.meta.isProxied || false
}));
setMeta(accountOrAddress?.meta);
setName(accountOrAddress?.meta.name || '');
setSortedTags(accountOrAddress?.meta.tags ? (accountOrAddress.meta.tags as string[]).sort() : []);
} catch (error) {
// ignore
}
}
}, [identity, isAccount, isAddress, value]);
const onSaveName = useCallback(
(): void => {
if (isEditingName) {
toggleIsEditingName();
}
const meta = { name, whenEdited: Date.now() };
if (isContract) {
try {
if (value) {
const originalMeta = keyring.getAddress(value)?.meta;
keyring.saveContract(value, { ...originalMeta, ...meta });
}
} catch (error) {
console.error(error);
}
} else if (value) {
try {
const pair = keyring.getPair(value);
pair && keyring.saveAccountMeta(pair, meta);
} catch (error) {
const pair = keyring.getAddress(value);
if (pair) {
keyring.saveAddress(value, meta);
} else {
keyring.saveAddress(value, { genesisHash: api.genesisHash.toHex(), ...meta });
}
}
}
},
[api, isContract, isEditingName, name, toggleIsEditingName, value]
);
const onSaveTags = useCallback(
(): void => {
const meta = { tags, whenEdited: Date.now() };
if (isContract) {
try {
if (value) {
const originalMeta = keyring.getAddress(value)?.meta;
value && keyring.saveContract(value, { ...originalMeta, ...meta });
}
} catch (error) {
console.error(error);
}
} else if (value) {
try {
const currentKeyring = keyring.getPair(value);
currentKeyring && keyring.saveAccountMeta(currentKeyring, meta);
} catch (error) {
keyring.saveAddress(value, meta);
}
}
},
[isContract, tags, value]
);
const onForgetAddress = useCallback(
(): void => {
if (isEditingName) {
toggleIsEditingName();
}
if (isEditingTags) {
toggleIsEditingTags();
}
try {
value && keyring.forgetAddress(value);
} catch (e) {
console.error(e);
}
},
[isEditingName, isEditingTags, toggleIsEditingName, toggleIsEditingTags, value]
);
const onSetGenesisHash = useCallback(
(genesisHash: string | null): void => {
if (value) {
const account = keyring.getPair(value);
account && keyring.saveAccountMeta(account, { ...account.meta, genesisHash });
setGenesisHash(genesisHash);
}
},
[value]
);
const setTags = useCallback(
(tags: string[]): void => setSortedTags(tags.sort()),
[]
);
return {
accountIndex,
flags,
genesisHash,
identity,
isEditingName,
isEditingTags,
isNull: !value,
meta,
name,
onForgetAddress,
onSaveName,
onSaveTags,
onSetGenesisHash,
setName,
setTags,
tags,
toggleIsEditingName,
toggleIsEditingTags
};
}
Example #6
Source File: useAccountInfo.ts From subscan-multisig-react with Apache License 2.0 | 4 votes |
export function useAccountInfo(value: string | null, isContract = false): UseAccountInfo {
const { api } = useApi();
const { isAccount } = useAccounts();
const { isAddress } = useAddresses();
const accountInfo = useCall<DeriveAccountInfo>(api.derive.accounts.info, [value]);
const accountFlags = useCall<DeriveAccountFlags>(api.derive.accounts.flags, [value]);
const nominator = useCall<Nominations>(api.query.staking?.nominators, [value]);
const validator = useCall<ValidatorPrefs>(api.query.staking?.validators, [value]);
const [accountIndex, setAccountIndex] = useState<string | undefined>(undefined);
const [tags, setSortedTags] = useState<string[]>([]);
const [name, setName] = useState('');
const [genesisHash, setGenesisHash] = useState<string | null>(null);
const [identity, setIdentity] = useState<AddressIdentity | undefined>();
const [flags, setFlags] = useState<AddressFlags>(IS_NONE);
const [meta, setMeta] = useState<KeyringJson$Meta | undefined>();
const [isEditingName, toggleIsEditingName] = useToggle();
const [isEditingTags, toggleIsEditingTags] = useToggle();
useEffect((): void => {
// eslint-disable-next-line
validator &&
setFlags((flags) => ({
...flags,
isValidator: !validator.isEmpty,
}));
}, [validator]);
useEffect((): void => {
// eslint-disable-next-line
nominator &&
setFlags((flags) => ({
...flags,
isNominator: !nominator.isEmpty,
}));
}, [nominator]);
useEffect((): void => {
// eslint-disable-next-line
accountFlags &&
setFlags((flags) => ({
...flags,
...accountFlags,
}));
}, [accountFlags]);
useEffect((): void => {
const { accountIndex, identity, nickname } = accountInfo || {};
const newIndex = accountIndex?.toString();
setAccountIndex((oldIndex) => (oldIndex !== newIndex ? newIndex : oldIndex));
let name;
if (isFunction(api.query.identity?.identityOf)) {
if (identity?.display) {
name = identity.display;
}
} else if (nickname) {
name = nickname;
}
setName(name || '');
if (identity) {
const judgements = identity.judgements.filter(([, judgement]) => !judgement.isFeePaid);
const isKnownGood = judgements.some(([, judgement]) => judgement.isKnownGood);
const isReasonable = judgements.some(([, judgement]) => judgement.isReasonable);
const isErroneous = judgements.some(([, judgement]) => judgement.isErroneous);
const isLowQuality = judgements.some(([, judgement]) => judgement.isLowQuality);
setIdentity({
...identity,
isBad: isErroneous || isLowQuality,
isErroneous,
isExistent: !!identity.display,
isGood: isKnownGood || isReasonable,
isKnownGood,
isLowQuality,
isReasonable,
judgements,
waitCount: identity.judgements.length - judgements.length,
});
} else {
setIdentity(undefined);
}
}, [accountInfo, api]);
useEffect((): void => {
if (value) {
try {
const accountOrAddress = keyring.getAccount(value) || keyring.getAddress(value);
const isOwned = isAccount(value);
const isInContacts = isAddress(value);
setGenesisHash(accountOrAddress?.meta.genesisHash || null);
setFlags(
(flags): AddressFlags => ({
...flags,
isDevelopment: accountOrAddress?.meta.isTesting || false,
isEditable:
!!(
!identity?.display &&
(isInContacts ||
accountOrAddress?.meta.isMultisig ||
(accountOrAddress && !accountOrAddress.meta.isInjected))
) || false,
isExternal: !!accountOrAddress?.meta.isExternal || false,
isHardware: !!accountOrAddress?.meta.isHardware || false,
isInContacts,
isInjected: !!accountOrAddress?.meta.isInjected || false,
isMultisig: !!accountOrAddress?.meta.isMultisig || false,
isOwned,
isProxied: !!accountOrAddress?.meta.isProxied || false,
})
);
setMeta(accountOrAddress?.meta);
setName(accountOrAddress?.meta.name || '');
setSortedTags(accountOrAddress?.meta.tags ? (accountOrAddress.meta.tags as string[]).sort() : []);
} catch (error) {
// ignore
}
}
}, [identity, isAccount, isAddress, value]);
const onSaveName = useCallback((): void => {
if (isEditingName) {
toggleIsEditingName();
}
const meta = { name, whenEdited: Date.now() };
if (isContract) {
try {
if (value) {
const originalMeta = keyring.getAddress(value)?.meta;
keyring.saveContract(value, { ...originalMeta, ...meta });
}
} catch (error) {
console.error(error);
}
} else if (value) {
try {
const pair = keyring.getPair(value);
// eslint-disable-next-line
pair && keyring.saveAccountMeta(pair, meta);
} catch (error) {
const pair = keyring.getAddress(value);
if (pair) {
keyring.saveAddress(value, meta);
} else {
keyring.saveAddress(value, { genesisHash: api.genesisHash.toHex(), ...meta });
}
}
}
}, [api, isContract, isEditingName, name, toggleIsEditingName, value]);
const onSaveTags = useCallback((): void => {
const meta = { tags, whenEdited: Date.now() };
if (isContract) {
try {
if (value) {
const originalMeta = keyring.getAddress(value)?.meta;
// eslint-disable-next-line
value && keyring.saveContract(value, { ...originalMeta, ...meta });
}
} catch (error) {
console.error(error);
}
} else if (value) {
try {
const currentKeyring = keyring.getPair(value);
// eslint-disable-next-line
currentKeyring && keyring.saveAccountMeta(currentKeyring, meta);
} catch (error) {
keyring.saveAddress(value, meta);
}
}
}, [isContract, tags, value]);
const onForgetAddress = useCallback((): void => {
if (isEditingName) {
toggleIsEditingName();
}
if (isEditingTags) {
toggleIsEditingTags();
}
try {
// eslint-disable-next-line
value && keyring.forgetAddress(value);
} catch (e) {
console.error(e);
}
}, [isEditingName, isEditingTags, toggleIsEditingName, toggleIsEditingTags, value]);
const onSetGenesisHash = useCallback(
(genesisHash: string | null): void => {
if (value) {
const account = keyring.getPair(value);
// eslint-disable-next-line
account && keyring.saveAccountMeta(account, { ...account.meta, genesisHash });
setGenesisHash(genesisHash);
}
},
[value]
);
const setTags = useCallback((tags: string[]): void => setSortedTags(tags.sort()), []);
return {
accountIndex,
flags,
genesisHash,
identity,
isEditingName,
isEditingTags,
isNull: !value,
meta,
name,
onForgetAddress,
onSaveName,
onSaveTags,
onSetGenesisHash,
setName,
setTags,
tags,
toggleIsEditingName,
toggleIsEditingTags,
};
}