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 | 35x 35x 35x 35x 35x 4x 4x 35x 121x 121x 35x 2x 2x 2x | import { AddressDiscovery, HDSequentialDiscovery } from '../services';
import {
BaseWallet,
BaseWalletDependencies,
BaseWalletProps,
PublicCredentialsManager,
PublicCredentialsManagerType
} from './BaseWallet';
import { Bip32Account } from '@cardano-sdk/key-management';
import { Cardano } from '@cardano-sdk/core';
export const DEFAULT_LOOK_AHEAD_SEARCH = 20;
export const isValidSharedWalletScript = (script: Cardano.NativeScript): boolean => {
switch (script.kind) {
case Cardano.NativeScriptKind.RequireAllOf:
case Cardano.NativeScriptKind.RequireAnyOf:
case Cardano.NativeScriptKind.RequireNOf:
return script.scripts.every((nativeScript) => nativeScript.kind === Cardano.NativeScriptKind.RequireSignature);
default:
return false;
}
};
export type PersonalWalletDependencies = Omit<BaseWalletDependencies, 'publicCredentialsManager'> & {
bip32Account: Bip32Account;
addressDiscovery?: AddressDiscovery;
};
export type ScriptWalletDependencies = Omit<BaseWalletDependencies, 'publicCredentialsManager'> & {
paymentScript: Cardano.RequireAllOfScript | Cardano.RequireAnyOfScript | Cardano.RequireAtLeastScript;
stakingScript: Cardano.RequireAllOfScript | Cardano.RequireAnyOfScript | Cardano.RequireAtLeastScript;
};
export const createPersonalWallet = (props: BaseWalletProps, dependencies: PersonalWalletDependencies): BaseWallet => {
const publicCredentialsManager: PublicCredentialsManager = {
__type: PublicCredentialsManagerType.BIP32_CREDENTIALS_MANAGER,
addressDiscovery: dependencies.addressDiscovery
? dependencies.addressDiscovery
: new HDSequentialDiscovery(dependencies.chainHistoryProvider, DEFAULT_LOOK_AHEAD_SEARCH),
bip32Account: dependencies.bip32Account
};
return new BaseWallet(props, { ...dependencies, publicCredentialsManager });
};
export const createSharedWallet = (props: BaseWalletProps, dependencies: ScriptWalletDependencies): BaseWallet => {
Iif (!isValidSharedWalletScript(dependencies.paymentScript) || !isValidSharedWalletScript(dependencies.stakingScript))
throw new Error(
'SharedWallet requires the scripts to be of type "RequireAllOfScript" or "RequireAnyOfScript" or "RequireAtLeastScript"'
);
const publicCredentialsManager: PublicCredentialsManager = {
__type: PublicCredentialsManagerType.SCRIPT_CREDENTIALS_MANAGER,
paymentScript: dependencies.paymentScript,
stakingScript: dependencies.stakingScript
};
return new BaseWallet(props, { ...dependencies, publicCredentialsManager });
};
|