@cardano-sdk/hardware-ledger 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +5 -0
- package/README.md +1 -0
- package/dist/cjs/LedgerKeyAgent.d.ts +43 -0
- package/dist/cjs/LedgerKeyAgent.d.ts.map +1 -0
- package/dist/cjs/LedgerKeyAgent.js +269 -0
- package/dist/cjs/LedgerKeyAgent.js.map +1 -0
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +20 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/transformers/assets.d.ts +4 -0
- package/dist/cjs/transformers/assets.d.ts.map +1 -0
- package/dist/cjs/transformers/assets.js +50 -0
- package/dist/cjs/transformers/assets.js.map +1 -0
- package/dist/cjs/transformers/auxiliaryData.d.ts +10 -0
- package/dist/cjs/transformers/auxiliaryData.d.ts.map +1 -0
- package/dist/cjs/transformers/auxiliaryData.js +13 -0
- package/dist/cjs/transformers/auxiliaryData.js.map +1 -0
- package/dist/cjs/transformers/certificates.d.ts +8 -0
- package/dist/cjs/transformers/certificates.d.ts.map +1 -0
- package/dist/cjs/transformers/certificates.js +238 -0
- package/dist/cjs/transformers/certificates.js.map +1 -0
- package/dist/cjs/transformers/collateralInputs.d.ts +5 -0
- package/dist/cjs/transformers/collateralInputs.d.ts.map +1 -0
- package/dist/cjs/transformers/collateralInputs.js +7 -0
- package/dist/cjs/transformers/collateralInputs.js.map +1 -0
- package/dist/cjs/transformers/collateralOutput.d.ts +17 -0
- package/dist/cjs/transformers/collateralOutput.d.ts.map +1 -0
- package/dist/cjs/transformers/collateralOutput.js +7 -0
- package/dist/cjs/transformers/collateralOutput.js.map +1 -0
- package/dist/cjs/transformers/index.d.ts +13 -0
- package/dist/cjs/transformers/index.d.ts.map +1 -0
- package/dist/cjs/transformers/index.js +29 -0
- package/dist/cjs/transformers/index.js.map +1 -0
- package/dist/cjs/transformers/keyPaths.d.ts +5 -0
- package/dist/cjs/transformers/keyPaths.d.ts.map +1 -0
- package/dist/cjs/transformers/keyPaths.js +28 -0
- package/dist/cjs/transformers/keyPaths.js.map +1 -0
- package/dist/cjs/transformers/referenceInputs.d.ts +4 -0
- package/dist/cjs/transformers/referenceInputs.d.ts.map +1 -0
- package/dist/cjs/transformers/referenceInputs.js +12 -0
- package/dist/cjs/transformers/referenceInputs.js.map +1 -0
- package/dist/cjs/transformers/requiredSigners.d.ts +7 -0
- package/dist/cjs/transformers/requiredSigners.d.ts.map +1 -0
- package/dist/cjs/transformers/requiredSigners.js +59 -0
- package/dist/cjs/transformers/requiredSigners.js.map +1 -0
- package/dist/cjs/transformers/tx.d.ts +7 -0
- package/dist/cjs/transformers/tx.d.ts.map +1 -0
- package/dist/cjs/transformers/tx.js +39 -0
- package/dist/cjs/transformers/tx.js.map +1 -0
- package/dist/cjs/transformers/txIn.d.ts +7 -0
- package/dist/cjs/transformers/txIn.d.ts.map +1 -0
- package/dist/cjs/transformers/txIn.js +27 -0
- package/dist/cjs/transformers/txIn.js.map +1 -0
- package/dist/cjs/transformers/txOut.d.ts +7 -0
- package/dist/cjs/transformers/txOut.d.ts.map +1 -0
- package/dist/cjs/transformers/txOut.js +100 -0
- package/dist/cjs/transformers/txOut.js.map +1 -0
- package/dist/cjs/transformers/withdrawals.d.ts +7 -0
- package/dist/cjs/transformers/withdrawals.d.ts.map +1 -0
- package/dist/cjs/transformers/withdrawals.js +84 -0
- package/dist/cjs/transformers/withdrawals.js.map +1 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/cjs/types.d.ts +14 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +8 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/LedgerKeyAgent.d.ts +43 -0
- package/dist/esm/LedgerKeyAgent.d.ts.map +1 -0
- package/dist/esm/LedgerKeyAgent.js +239 -0
- package/dist/esm/LedgerKeyAgent.js.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +4 -0
- package/dist/esm/transformers/assets.d.ts +4 -0
- package/dist/esm/transformers/assets.d.ts.map +1 -0
- package/dist/esm/transformers/assets.js +46 -0
- package/dist/esm/transformers/assets.js.map +1 -0
- package/dist/esm/transformers/auxiliaryData.d.ts +10 -0
- package/dist/esm/transformers/auxiliaryData.d.ts.map +1 -0
- package/dist/esm/transformers/auxiliaryData.js +9 -0
- package/dist/esm/transformers/auxiliaryData.js.map +1 -0
- package/dist/esm/transformers/certificates.d.ts +8 -0
- package/dist/esm/transformers/certificates.d.ts.map +1 -0
- package/dist/esm/transformers/certificates.js +209 -0
- package/dist/esm/transformers/certificates.js.map +1 -0
- package/dist/esm/transformers/collateralInputs.d.ts +5 -0
- package/dist/esm/transformers/collateralInputs.d.ts.map +1 -0
- package/dist/esm/transformers/collateralInputs.js +3 -0
- package/dist/esm/transformers/collateralInputs.js.map +1 -0
- package/dist/esm/transformers/collateralOutput.d.ts +17 -0
- package/dist/esm/transformers/collateralOutput.d.ts.map +1 -0
- package/dist/esm/transformers/collateralOutput.js +3 -0
- package/dist/esm/transformers/collateralOutput.js.map +1 -0
- package/dist/esm/transformers/index.d.ts +13 -0
- package/dist/esm/transformers/index.d.ts.map +1 -0
- package/dist/esm/transformers/index.js +13 -0
- package/dist/esm/transformers/index.js.map +1 -0
- package/dist/esm/transformers/keyPaths.d.ts +5 -0
- package/dist/esm/transformers/keyPaths.d.ts.map +1 -0
- package/dist/esm/transformers/keyPaths.js +23 -0
- package/dist/esm/transformers/keyPaths.js.map +1 -0
- package/dist/esm/transformers/referenceInputs.d.ts +4 -0
- package/dist/esm/transformers/referenceInputs.d.ts.map +1 -0
- package/dist/esm/transformers/referenceInputs.js +8 -0
- package/dist/esm/transformers/referenceInputs.js.map +1 -0
- package/dist/esm/transformers/requiredSigners.d.ts +7 -0
- package/dist/esm/transformers/requiredSigners.d.ts.map +1 -0
- package/dist/esm/transformers/requiredSigners.js +31 -0
- package/dist/esm/transformers/requiredSigners.js.map +1 -0
- package/dist/esm/transformers/tx.d.ts +7 -0
- package/dist/esm/transformers/tx.d.ts.map +1 -0
- package/dist/esm/transformers/tx.js +35 -0
- package/dist/esm/transformers/tx.js.map +1 -0
- package/dist/esm/transformers/txIn.d.ts +7 -0
- package/dist/esm/transformers/txIn.d.ts.map +1 -0
- package/dist/esm/transformers/txIn.js +22 -0
- package/dist/esm/transformers/txIn.js.map +1 -0
- package/dist/esm/transformers/txOut.d.ts +7 -0
- package/dist/esm/transformers/txOut.d.ts.map +1 -0
- package/dist/esm/transformers/txOut.js +72 -0
- package/dist/esm/transformers/txOut.js.map +1 -0
- package/dist/esm/transformers/withdrawals.d.ts +7 -0
- package/dist/esm/transformers/withdrawals.d.ts.map +1 -0
- package/dist/esm/transformers/withdrawals.js +56 -0
- package/dist/esm/transformers/withdrawals.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/types.d.ts +14 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +5 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +81 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
import * as Crypto from '@cardano-sdk/crypto';
|
2
|
+
import { Cardano } from '@cardano-sdk/core';
|
3
|
+
import { CommunicationType, KeyAgentBase, KeyAgentDependencies, SerializableLedgerKeyAgentData, SignBlobResult } from '@cardano-sdk/key-management';
|
4
|
+
import { LedgerTransportType } from './types';
|
5
|
+
import LedgerConnection, { GetVersionResponse, Transaction, TransactionSigningMode } from '@cardano-foundation/ledgerjs-hw-app-cardano';
|
6
|
+
import type LedgerTransport from '@ledgerhq/hw-transport';
|
7
|
+
export interface LedgerKeyAgentProps extends Omit<SerializableLedgerKeyAgentData, '__typename'> {
|
8
|
+
deviceConnection?: LedgerConnection;
|
9
|
+
}
|
10
|
+
export interface CreateLedgerKeyAgentProps {
|
11
|
+
chainId: Cardano.ChainId;
|
12
|
+
accountIndex?: number;
|
13
|
+
communicationType: CommunicationType;
|
14
|
+
deviceConnection?: LedgerConnection | null;
|
15
|
+
}
|
16
|
+
export interface GetLedgerXpubProps {
|
17
|
+
deviceConnection?: LedgerConnection;
|
18
|
+
communicationType: CommunicationType;
|
19
|
+
accountIndex: number;
|
20
|
+
}
|
21
|
+
export interface CreateLedgerTransportProps {
|
22
|
+
communicationType: CommunicationType;
|
23
|
+
activeTransport?: LedgerTransportType;
|
24
|
+
devicePath?: string;
|
25
|
+
}
|
26
|
+
export declare class LedgerKeyAgent extends KeyAgentBase {
|
27
|
+
#private;
|
28
|
+
readonly deviceConnection?: LedgerConnection;
|
29
|
+
constructor({ deviceConnection, ...serializableData }: LedgerKeyAgentProps, dependencies: KeyAgentDependencies);
|
30
|
+
static getHidDeviceList(communicationType: CommunicationType): Promise<string[]>;
|
31
|
+
static createTransport({ communicationType, activeTransport, devicePath }: CreateLedgerTransportProps): Promise<LedgerTransportType>;
|
32
|
+
static createDeviceConnection(activeTransport: LedgerTransport): Promise<LedgerConnection>;
|
33
|
+
static establishDeviceConnection(communicationType: CommunicationType, devicePath?: string): Promise<LedgerConnection>;
|
34
|
+
static checkDeviceConnection(communicationType: CommunicationType, deviceConnection?: LedgerConnection): Promise<LedgerConnection>;
|
35
|
+
static getXpub({ deviceConnection, communicationType, accountIndex }: GetLedgerXpubProps): Promise<Crypto.Bip32PublicKeyHex>;
|
36
|
+
static getAppVersion(communicationType: CommunicationType, deviceConnection?: LedgerConnection): Promise<GetVersionResponse>;
|
37
|
+
static createWithDevice({ chainId, accountIndex, communicationType, deviceConnection }: CreateLedgerKeyAgentProps, dependencies: KeyAgentDependencies): Promise<LedgerKeyAgent>;
|
38
|
+
static getSigningMode(tx: Transaction): TransactionSigningMode;
|
39
|
+
signTransaction({ body, hash }: Cardano.TxBodyWithHash): Promise<Cardano.Signatures>;
|
40
|
+
signBlob(): Promise<SignBlobResult>;
|
41
|
+
exportRootPrivateKey(): Promise<Crypto.Bip32PrivateKeyHex>;
|
42
|
+
}
|
43
|
+
//# sourceMappingURL=LedgerKeyAgent.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"LedgerKeyAgent.d.ts","sourceRoot":"","sources":["../../src/LedgerKeyAgent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAuB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAGL,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EAEpB,8BAA8B,EAC9B,cAAc,EAEf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAI9C,OAAO,gBAAgB,EAAE,EAGvB,kBAAkB,EAKlB,WAAW,EACX,sBAAsB,EAEvB,MAAM,6CAA6C,CAAC;AAGrD,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAE1D,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,8BAA8B,EAAE,YAAY,CAAC;IAC7F,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA2DD,qBAAa,cAAe,SAAQ,YAAY;;IAC9C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;gBAGjC,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,oBAAoB;WASjG,gBAAgB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;WAWzE,eAAe,CAAC,EAC3B,iBAAiB,EACjB,eAAe,EACf,UAAe,EAChB,EAAE,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC;WAgB/C,sBAAsB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;WAcnF,yBAAyB,CACpC,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,CAAC;WA+Bf,qBAAqB,CAChC,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,gBAAgB,CAAC;WAmBf,OAAO,CAAC,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACb,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC;WAoB5C,aAAa,CACxB,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,kBAAkB,CAAC;WASjB,gBAAgB,CAC3B,EAAE,OAAO,EAAE,YAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,EAAE,yBAAyB,EAC7F,YAAY,EAAE,oBAAoB;IA+BpC,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,WAAW,GAAG,sBAAsB;IAqCxD,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;IA+CpF,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAInC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC;CAGjE"}
|
@@ -0,0 +1,239 @@
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
6
|
+
};
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
11
|
+
};
|
12
|
+
var _LedgerKeyAgent_communicationType;
|
13
|
+
import * as Crypto from '@cardano-sdk/crypto';
|
14
|
+
import { NotImplementedError } from '@cardano-sdk/core';
|
15
|
+
import { CardanoKeyConst, Cip1852PathLevelIndexes, CommunicationType, KeyAgentBase, KeyAgentType, errors } from '@cardano-sdk/key-management';
|
16
|
+
import { ManagedFreeableScope } from '@cardano-sdk/util';
|
17
|
+
import { str_to_path } from '@cardano-foundation/ledgerjs-hw-app-cardano/dist/utils/address';
|
18
|
+
import { toLedgerTx } from './transformers';
|
19
|
+
import LedgerConnection, { CertificateType, PoolKeyType, PoolOwnerType, StakeCredentialParamsType, TransactionSigningMode, TxOutputDestinationType } from '@cardano-foundation/ledgerjs-hw-app-cardano';
|
20
|
+
import TransportNodeHid from '@ledgerhq/hw-transport-node-hid-noevents';
|
21
|
+
import TransportWebHID from '@ledgerhq/hw-transport-webhid';
|
22
|
+
const transportTypedError = (error) => new errors.TransportError('Ledger transport failed', error);
|
23
|
+
const hasRegistrationOrRetirementCerts = (certificates) => {
|
24
|
+
if (!certificates)
|
25
|
+
return false;
|
26
|
+
return (certificates.some((cert) => cert.type === CertificateType.STAKE_POOL_RETIREMENT) ||
|
27
|
+
certificates.some((cert) => cert.type === CertificateType.STAKE_POOL_REGISTRATION));
|
28
|
+
};
|
29
|
+
const stakeCredentialCert = (cert) => cert.type === CertificateType.STAKE_REGISTRATION ||
|
30
|
+
cert.type === CertificateType.STAKE_DEREGISTRATION ||
|
31
|
+
cert.type === CertificateType.STAKE_DELEGATION;
|
32
|
+
const containsOnlyScriptHashCreds = (tx) => {
|
33
|
+
const withdrawalsAllScriptHash = !tx.withdrawals?.some((withdrawal) => withdrawal.stakeCredential.type !== StakeCredentialParamsType.SCRIPT_HASH);
|
34
|
+
if (tx.certificates) {
|
35
|
+
for (const cert of tx.certificates) {
|
36
|
+
if (!stakeCredentialCert(cert))
|
37
|
+
return false;
|
38
|
+
const certParams = cert.params;
|
39
|
+
if (certParams.stakeCredential.type !== StakeCredentialParamsType.SCRIPT_HASH)
|
40
|
+
return false;
|
41
|
+
}
|
42
|
+
}
|
43
|
+
return withdrawalsAllScriptHash;
|
44
|
+
};
|
45
|
+
const isMultiSig = (tx) => {
|
46
|
+
const result = false;
|
47
|
+
const allThirdPartyInputs = !tx.inputs.some((input) => input.path !== null);
|
48
|
+
const allThirdPartyOutputs = !tx.outputs.some((out) => out.destination.type !== TxOutputDestinationType.THIRD_PARTY);
|
49
|
+
if (allThirdPartyInputs &&
|
50
|
+
allThirdPartyOutputs &&
|
51
|
+
!tx.collateralInputs &&
|
52
|
+
!tx.requiredSigners &&
|
53
|
+
!hasRegistrationOrRetirementCerts(tx.certificates) &&
|
54
|
+
containsOnlyScriptHashCreds(tx)) {
|
55
|
+
return true;
|
56
|
+
}
|
57
|
+
return result;
|
58
|
+
};
|
59
|
+
export class LedgerKeyAgent extends KeyAgentBase {
|
60
|
+
constructor({ deviceConnection, ...serializableData }, dependencies) {
|
61
|
+
super({ ...serializableData, __typename: KeyAgentType.Ledger }, dependencies);
|
62
|
+
_LedgerKeyAgent_communicationType.set(this, void 0);
|
63
|
+
this.deviceConnection = deviceConnection;
|
64
|
+
__classPrivateFieldSet(this, _LedgerKeyAgent_communicationType, serializableData.communicationType, "f");
|
65
|
+
}
|
66
|
+
static async getHidDeviceList(communicationType) {
|
67
|
+
try {
|
68
|
+
return communicationType === CommunicationType.Node ? TransportNodeHid.list() : TransportWebHID.list();
|
69
|
+
}
|
70
|
+
catch (error) {
|
71
|
+
throw new errors.TransportError('Cannot fetch device list', error);
|
72
|
+
}
|
73
|
+
}
|
74
|
+
static async createTransport({ communicationType, activeTransport, devicePath = '' }) {
|
75
|
+
try {
|
76
|
+
if (communicationType === CommunicationType.Node) {
|
77
|
+
return await TransportNodeHid.open(devicePath);
|
78
|
+
}
|
79
|
+
return await (activeTransport && activeTransport instanceof TransportWebHID
|
80
|
+
? TransportWebHID.open(activeTransport.device)
|
81
|
+
: TransportWebHID.request());
|
82
|
+
}
|
83
|
+
catch (error) {
|
84
|
+
throw new errors.TransportError('Creating transport failed', error);
|
85
|
+
}
|
86
|
+
}
|
87
|
+
static async createDeviceConnection(activeTransport) {
|
88
|
+
try {
|
89
|
+
const deviceConnection = new LedgerConnection(activeTransport);
|
90
|
+
await deviceConnection.getVersion();
|
91
|
+
return deviceConnection;
|
92
|
+
}
|
93
|
+
catch (error) {
|
94
|
+
throw new errors.TransportError('Cannot communicate with Ledger Cardano App', error);
|
95
|
+
}
|
96
|
+
}
|
97
|
+
static async establishDeviceConnection(communicationType, devicePath) {
|
98
|
+
let transport;
|
99
|
+
try {
|
100
|
+
transport = await LedgerKeyAgent.createTransport({ communicationType, devicePath });
|
101
|
+
if (!transport || !transport.deviceModel) {
|
102
|
+
throw new errors.TransportError('Missing transport');
|
103
|
+
}
|
104
|
+
const isSupportedLedgerModel = transport.deviceModel.id === 'nanoS' ||
|
105
|
+
transport.deviceModel.id === 'nanoX' ||
|
106
|
+
transport.deviceModel.id === 'nanoSP';
|
107
|
+
if (!isSupportedLedgerModel) {
|
108
|
+
throw new errors.TransportError(`Ledger device model: "${transport.deviceModel.id}" is not supported`);
|
109
|
+
}
|
110
|
+
return await LedgerKeyAgent.createDeviceConnection(transport);
|
111
|
+
}
|
112
|
+
catch (error) {
|
113
|
+
if (error.innerError.message.includes('cannot open device with path')) {
|
114
|
+
throw new errors.TransportError('Connection already established', error);
|
115
|
+
}
|
116
|
+
if (transport) {
|
117
|
+
transport.close();
|
118
|
+
}
|
119
|
+
throw new errors.TransportError('Establishing device connection failed', error);
|
120
|
+
}
|
121
|
+
}
|
122
|
+
static async checkDeviceConnection(communicationType, deviceConnection) {
|
123
|
+
try {
|
124
|
+
if (!deviceConnection) {
|
125
|
+
return await LedgerKeyAgent.establishDeviceConnection(communicationType);
|
126
|
+
}
|
127
|
+
return await LedgerKeyAgent.createDeviceConnection(deviceConnection.transport);
|
128
|
+
}
|
129
|
+
catch (error) {
|
130
|
+
if (error.name === 'DisconnectedDeviceDuringOperation') {
|
131
|
+
return await LedgerKeyAgent.establishDeviceConnection(communicationType);
|
132
|
+
}
|
133
|
+
throw error;
|
134
|
+
}
|
135
|
+
}
|
136
|
+
static async getXpub({ deviceConnection, communicationType, accountIndex }) {
|
137
|
+
try {
|
138
|
+
const recoveredDeviceConnection = await LedgerKeyAgent.checkDeviceConnection(communicationType, deviceConnection);
|
139
|
+
const derivationPath = `${CardanoKeyConst.PURPOSE}'/${CardanoKeyConst.COIN_TYPE}'/${accountIndex}'`;
|
140
|
+
const extendedPublicKey = await recoveredDeviceConnection.getExtendedPublicKey({
|
141
|
+
path: str_to_path(derivationPath)
|
142
|
+
});
|
143
|
+
const xPubHex = `${extendedPublicKey.publicKeyHex}${extendedPublicKey.chainCodeHex}`;
|
144
|
+
return Crypto.Bip32PublicKeyHex(xPubHex);
|
145
|
+
}
|
146
|
+
catch (error) {
|
147
|
+
if (error.code === 28169) {
|
148
|
+
throw new errors.AuthenticationError('Failed to export extended account public key', error);
|
149
|
+
}
|
150
|
+
throw transportTypedError(error);
|
151
|
+
}
|
152
|
+
}
|
153
|
+
static async getAppVersion(communicationType, deviceConnection) {
|
154
|
+
const recoveredDeviceConnection = await LedgerKeyAgent.checkDeviceConnection(communicationType, deviceConnection);
|
155
|
+
return await recoveredDeviceConnection.getVersion();
|
156
|
+
}
|
157
|
+
static async createWithDevice({ chainId, accountIndex = 0, communicationType, deviceConnection }, dependencies) {
|
158
|
+
const deviceListPaths = await LedgerKeyAgent.getHidDeviceList(communicationType);
|
159
|
+
const activeDeviceConnection = await (deviceConnection
|
160
|
+
? LedgerKeyAgent.checkDeviceConnection(communicationType, deviceConnection)
|
161
|
+
: LedgerKeyAgent.establishDeviceConnection(communicationType, deviceListPaths[0]));
|
162
|
+
const extendedAccountPublicKey = await LedgerKeyAgent.getXpub({
|
163
|
+
accountIndex,
|
164
|
+
communicationType,
|
165
|
+
deviceConnection: activeDeviceConnection
|
166
|
+
});
|
167
|
+
return new LedgerKeyAgent({
|
168
|
+
accountIndex,
|
169
|
+
chainId,
|
170
|
+
communicationType,
|
171
|
+
deviceConnection: activeDeviceConnection,
|
172
|
+
extendedAccountPublicKey,
|
173
|
+
knownAddresses: []
|
174
|
+
}, dependencies);
|
175
|
+
}
|
176
|
+
static getSigningMode(tx) {
|
177
|
+
if (tx.certificates) {
|
178
|
+
for (const cert of tx.certificates) {
|
179
|
+
if (cert.type === CertificateType.STAKE_POOL_REGISTRATION &&
|
180
|
+
cert.params.poolOwners.some((owner) => owner.type === PoolOwnerType.DEVICE_OWNED))
|
181
|
+
return TransactionSigningMode.POOL_REGISTRATION_AS_OWNER;
|
182
|
+
if (cert.type === CertificateType.STAKE_POOL_REGISTRATION &&
|
183
|
+
cert.params.poolKey.type === PoolKeyType.DEVICE_OWNED)
|
184
|
+
return TransactionSigningMode.POOL_REGISTRATION_AS_OPERATOR;
|
185
|
+
}
|
186
|
+
}
|
187
|
+
if (tx.collateralInputs || tx.requiredSigners) {
|
188
|
+
return TransactionSigningMode.PLUTUS_TRANSACTION;
|
189
|
+
}
|
190
|
+
if (isMultiSig(tx)) {
|
191
|
+
return TransactionSigningMode.MULTISIG_TRANSACTION;
|
192
|
+
}
|
193
|
+
return TransactionSigningMode.ORDINARY_TRANSACTION;
|
194
|
+
}
|
195
|
+
async signTransaction({ body, hash }) {
|
196
|
+
const scope = new ManagedFreeableScope();
|
197
|
+
try {
|
198
|
+
const ledgerTxData = await toLedgerTx(body, {
|
199
|
+
chainId: this.chainId,
|
200
|
+
inputResolver: this.inputResolver,
|
201
|
+
knownAddresses: this.knownAddresses
|
202
|
+
});
|
203
|
+
const deviceConnection = await LedgerKeyAgent.checkDeviceConnection(__classPrivateFieldGet(this, _LedgerKeyAgent_communicationType, "f"), this.deviceConnection);
|
204
|
+
const signingMode = LedgerKeyAgent.getSigningMode(ledgerTxData);
|
205
|
+
const result = await deviceConnection.signTransaction({
|
206
|
+
signingMode,
|
207
|
+
tx: ledgerTxData
|
208
|
+
});
|
209
|
+
if (result.txHashHex !== hash) {
|
210
|
+
throw new errors.HwMappingError('Ledger computed a different transaction id');
|
211
|
+
}
|
212
|
+
return new Map(await Promise.all(result.witnesses.map(async (witness) => {
|
213
|
+
const publicKey = await this.derivePublicKey({
|
214
|
+
index: witness.path[Cip1852PathLevelIndexes.INDEX],
|
215
|
+
role: witness.path[Cip1852PathLevelIndexes.ROLE]
|
216
|
+
});
|
217
|
+
const signature = Crypto.Ed25519SignatureHex(witness.witnessSignatureHex);
|
218
|
+
return [publicKey, signature];
|
219
|
+
})));
|
220
|
+
}
|
221
|
+
catch (error) {
|
222
|
+
if (error.code === 28169) {
|
223
|
+
throw new errors.AuthenticationError('Transaction signing aborted', error);
|
224
|
+
}
|
225
|
+
throw transportTypedError(error);
|
226
|
+
}
|
227
|
+
finally {
|
228
|
+
scope.dispose();
|
229
|
+
}
|
230
|
+
}
|
231
|
+
async signBlob() {
|
232
|
+
throw new NotImplementedError('signBlob');
|
233
|
+
}
|
234
|
+
async exportRootPrivateKey() {
|
235
|
+
throw new NotImplementedError('Operation not supported!');
|
236
|
+
}
|
237
|
+
}
|
238
|
+
_LedgerKeyAgent_communicationType = new WeakMap();
|
239
|
+
//# sourceMappingURL=LedgerKeyAgent.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"LedgerKeyAgent.js","sourceRoot":"","sources":["../../src/LedgerKeyAgent.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../../src/transformers/assets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,6CAA6C,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AA6C5C,eAAO,MAAM,WAAW,aAAc,QAAQ,QAAQ,GAAG,SAAS,+BAIjE,CAAC"}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import { Cardano } from '@cardano-sdk/core';
|
2
|
+
const compareAssetNameCanonically = (a, b) => {
|
3
|
+
if (a.assetNameHex === b.assetNameHex) {
|
4
|
+
return a.assetNameHex > b.assetNameHex ? 1 : -1;
|
5
|
+
}
|
6
|
+
else if (a.assetNameHex.length > b.assetNameHex.length)
|
7
|
+
return 1;
|
8
|
+
return -1;
|
9
|
+
};
|
10
|
+
const comparePolicyIdCanonically = (a, b) => {
|
11
|
+
if (a.policyIdHex === b.policyIdHex) {
|
12
|
+
return a.policyIdHex > b.policyIdHex ? 1 : -1;
|
13
|
+
}
|
14
|
+
else if (a.policyIdHex.length > b.policyIdHex.length)
|
15
|
+
return 1;
|
16
|
+
return -1;
|
17
|
+
};
|
18
|
+
const tokenMapToAssetGroup = (tokenMap) => {
|
19
|
+
const map = new Map();
|
20
|
+
for (const [key, value] of tokenMap.entries()) {
|
21
|
+
const policyId = Cardano.AssetId.getPolicyId(key);
|
22
|
+
const assetName = Cardano.AssetId.getAssetName(key);
|
23
|
+
if (!map.has(policyId))
|
24
|
+
map.set(policyId, new Array());
|
25
|
+
map.get(policyId).push({
|
26
|
+
amount: value,
|
27
|
+
assetNameHex: assetName
|
28
|
+
});
|
29
|
+
}
|
30
|
+
const tokenMapAssetsGroup = [];
|
31
|
+
for (const [key, value] of map.entries()) {
|
32
|
+
value.sort(compareAssetNameCanonically);
|
33
|
+
tokenMapAssetsGroup.push({
|
34
|
+
policyIdHex: key,
|
35
|
+
tokens: value
|
36
|
+
});
|
37
|
+
}
|
38
|
+
tokenMapAssetsGroup.sort(comparePolicyIdCanonically);
|
39
|
+
return tokenMapAssetsGroup;
|
40
|
+
};
|
41
|
+
export const mapTokenMap = (tokenMap) => {
|
42
|
+
if (!tokenMap)
|
43
|
+
return null;
|
44
|
+
return tokenMapToAssetGroup(tokenMap);
|
45
|
+
};
|
46
|
+
//# sourceMappingURL=assets.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../src/transformers/assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,MAAM,2BAA2B,GAAG,CAAC,CAAe,EAAE,CAAe,EAAE,EAAE;IACvE,IAAI,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY,EAAE;QACrC,OAAO,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACjD;SAAM,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IACnE,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,CAAoB,EAAE,CAAoB,EAAE,EAAE;IAChF,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,EAAE;QACnC,OAAO,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/C;SAAM,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,QAA0B,EAAuB,EAAE;IAC/E,MAAM,GAAG,GAAG,IAAI,GAAG,EAA+B,CAAC;IAEnD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAEpD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,KAAK,EAAgB,CAAC,CAAC;QAErE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC;YACtB,MAAM,EAAE,KAAK;YACb,YAAY,EAAE,SAAS;SACxB,CAAC,CAAC;KACJ;IAED,MAAM,mBAAmB,GAAG,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE;QACxC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxC,mBAAmB,CAAC,IAAI,CAAC;YACvB,WAAW,EAAE,GAAG;YAChB,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;KACJ;IAED,mBAAmB,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAErD,OAAO,mBAAmB,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAsC,EAAE,EAAE;IACpE,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC,CAAC"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import * as Crypto from '@cardano-sdk/crypto';
|
2
|
+
import * as Ledger from '@cardano-foundation/ledgerjs-hw-app-cardano';
|
3
|
+
export declare const mapAuxiliaryData: (auxiliaryDataHash?: Crypto.Hash32ByteBase16) => {
|
4
|
+
type: Ledger.TxAuxiliaryDataType.ARBITRARY_HASH;
|
5
|
+
params: Ledger.TxAuxiliaryDataArbitraryHashParams;
|
6
|
+
} | {
|
7
|
+
type: Ledger.TxAuxiliaryDataType.CIP36_REGISTRATION;
|
8
|
+
params: Ledger.CIP36VoteRegistrationParams;
|
9
|
+
} | null;
|
10
|
+
//# sourceMappingURL=auxiliaryData.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"auxiliaryData.d.ts","sourceRoot":"","sources":["../../../src/transformers/auxiliaryData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,6CAA6C,CAAC;AAWtE,eAAO,MAAM,gBAAgB,uBAAwB,OAAO,gBAAgB;;;;;;QACb,CAAC"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { TxAuxiliaryDataType } from '@cardano-foundation/ledgerjs-hw-app-cardano/dist/types/public';
|
2
|
+
const toAuxiliaryData = (auxiliaryDataHash) => ({
|
3
|
+
params: {
|
4
|
+
hashHex: auxiliaryDataHash
|
5
|
+
},
|
6
|
+
type: TxAuxiliaryDataType.ARBITRARY_HASH
|
7
|
+
});
|
8
|
+
export const mapAuxiliaryData = (auxiliaryDataHash) => auxiliaryDataHash ? toAuxiliaryData(auxiliaryDataHash) : null;
|
9
|
+
//# sourceMappingURL=auxiliaryData.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"auxiliaryData.js","sourceRoot":"","sources":["../../../src/transformers/auxiliaryData.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+DAA+D,CAAC;AAEpG,MAAM,eAAe,GAA+D,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAC1G,MAAM,EAAE;QACN,OAAO,EAAE,iBAAiB;KAC3B;IACD,IAAI,EAAE,mBAAmB,CAAC,cAAc;CACzC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,iBAA2C,EAAE,EAAE,CAC9E,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import * as Ledger from '@cardano-foundation/ledgerjs-hw-app-cardano';
|
2
|
+
import { Cardano } from '@cardano-sdk/core';
|
3
|
+
import { Transform } from '@cardano-sdk/util';
|
4
|
+
import { LedgerTxTransformerContext } from '../types';
|
5
|
+
export declare const stakeDelegationCertificate: Transform<Cardano.StakeDelegationCertificate, Ledger.Certificate, LedgerTxTransformerContext>;
|
6
|
+
export declare const poolRegistrationCertificate: Transform<Cardano.PoolRegistrationCertificate, Ledger.Certificate, LedgerTxTransformerContext>;
|
7
|
+
export declare const mapCerts: (certs: Cardano.Certificate[] | undefined, context: LedgerTxTransformerContext) => Ledger.Certificate[] | null;
|
8
|
+
//# sourceMappingURL=certificates.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"certificates.d.ts","sourceRoot":"","sources":["../../../src/transformers/certificates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,6CAA6C,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAwB,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AA2DtD,eAAO,MAAM,0BAA0B,EAAE,SAAS,CAChD,OAAO,CAAC,0BAA0B,EAClC,MAAM,CAAC,WAAW,EAClB,0BAA0B,CA6C3B,CAAC;AAeF,eAAO,MAAM,2BAA2B,EAAE,SAAS,CACjD,OAAO,CAAC,2BAA2B,EACnC,MAAM,CAAC,WAAW,EAClB,0BAA0B,CAwF3B,CAAC;AA2CF,eAAO,MAAM,QAAQ,UACZ,QAAQ,WAAW,EAAE,GAAG,SAAS,WAC/B,0BAA0B,KAClC,OAAO,WAAW,EAAE,GAAG,IAIzB,CAAC"}
|
@@ -0,0 +1,209 @@
|
|
1
|
+
import * as Ledger from '@cardano-foundation/ledgerjs-hw-app-cardano';
|
2
|
+
import { Cardano } from '@cardano-sdk/core';
|
3
|
+
import { InvalidArgumentError } from '@cardano-sdk/util';
|
4
|
+
import { stakeKeyPathFromGroupedAddress } from './keyPaths';
|
5
|
+
const getStakeAddressCertificate = (certificate, context, type) => {
|
6
|
+
const knownAddress = context?.knownAddresses.find((address) => Cardano.RewardAccount.toHash(address.rewardAccount) === certificate.stakeKeyHash);
|
7
|
+
const rewardAddress = knownAddress ? Cardano.Address.fromBech32(knownAddress.rewardAccount)?.asReward() : null;
|
8
|
+
const path = stakeKeyPathFromGroupedAddress(knownAddress);
|
9
|
+
const credentialType = rewardAddress
|
10
|
+
? rewardAddress.getPaymentCredential().type
|
11
|
+
: Ledger.StakeCredentialParamsType.SCRIPT_HASH;
|
12
|
+
let credential;
|
13
|
+
switch (credentialType) {
|
14
|
+
case Cardano.CredentialType.KeyHash: {
|
15
|
+
credential = path
|
16
|
+
? {
|
17
|
+
keyPath: path,
|
18
|
+
type: Ledger.StakeCredentialParamsType.KEY_PATH
|
19
|
+
}
|
20
|
+
: {
|
21
|
+
keyHashHex: certificate.stakeKeyHash,
|
22
|
+
type: Ledger.StakeCredentialParamsType.KEY_HASH
|
23
|
+
};
|
24
|
+
break;
|
25
|
+
}
|
26
|
+
case Cardano.CredentialType.ScriptHash:
|
27
|
+
default: {
|
28
|
+
credential = {
|
29
|
+
scriptHashHex: certificate.stakeKeyHash,
|
30
|
+
type: Ledger.StakeCredentialParamsType.SCRIPT_HASH
|
31
|
+
};
|
32
|
+
}
|
33
|
+
}
|
34
|
+
return {
|
35
|
+
params: {
|
36
|
+
stakeCredential: credential
|
37
|
+
},
|
38
|
+
type
|
39
|
+
};
|
40
|
+
};
|
41
|
+
export const stakeDelegationCertificate = (certificate, context) => {
|
42
|
+
const poolIdKeyHash = Cardano.PoolId.toKeyHash(certificate.poolId);
|
43
|
+
const knownAddress = context?.knownAddresses.find((address) => Cardano.RewardAccount.toHash(address.rewardAccount) === certificate.stakeKeyHash);
|
44
|
+
const rewardAddress = knownAddress ? Cardano.Address.fromBech32(knownAddress.rewardAccount)?.asReward() : null;
|
45
|
+
const credentialType = rewardAddress
|
46
|
+
? rewardAddress.getPaymentCredential().type
|
47
|
+
: Ledger.StakeCredentialParamsType.SCRIPT_HASH;
|
48
|
+
const path = stakeKeyPathFromGroupedAddress(knownAddress);
|
49
|
+
let credential;
|
50
|
+
switch (credentialType) {
|
51
|
+
case Cardano.CredentialType.KeyHash: {
|
52
|
+
credential = path
|
53
|
+
? {
|
54
|
+
keyPath: path,
|
55
|
+
type: Ledger.StakeCredentialParamsType.KEY_PATH
|
56
|
+
}
|
57
|
+
: {
|
58
|
+
keyHashHex: certificate.stakeKeyHash,
|
59
|
+
type: Ledger.StakeCredentialParamsType.KEY_HASH
|
60
|
+
};
|
61
|
+
break;
|
62
|
+
}
|
63
|
+
case Cardano.CredentialType.ScriptHash:
|
64
|
+
default: {
|
65
|
+
credential = {
|
66
|
+
scriptHashHex: certificate.stakeKeyHash,
|
67
|
+
type: Ledger.StakeCredentialParamsType.SCRIPT_HASH
|
68
|
+
};
|
69
|
+
}
|
70
|
+
}
|
71
|
+
return {
|
72
|
+
params: {
|
73
|
+
poolKeyHashHex: poolIdKeyHash,
|
74
|
+
stakeCredential: credential
|
75
|
+
},
|
76
|
+
type: Ledger.CertificateType.STAKE_DELEGATION
|
77
|
+
};
|
78
|
+
};
|
79
|
+
const toPoolMetadata = (metadataJson) => ({
|
80
|
+
metadataHashHex: metadataJson.hash,
|
81
|
+
metadataUrl: metadataJson.url
|
82
|
+
});
|
83
|
+
const getPoolOperatorKeyPath = (operator, context) => {
|
84
|
+
const knownAddress = context?.knownAddresses.find((address) => address.rewardAccount === operator);
|
85
|
+
return stakeKeyPathFromGroupedAddress(knownAddress);
|
86
|
+
};
|
87
|
+
export const poolRegistrationCertificate = (certificate, context) => {
|
88
|
+
const poolOperatorKeyPath = getPoolOperatorKeyPath(certificate.poolParameters.rewardAccount, context);
|
89
|
+
const poolOperatorKeyHash = Cardano.RewardAccount.toHash(certificate.poolParameters.rewardAccount);
|
90
|
+
return {
|
91
|
+
params: {
|
92
|
+
cost: certificate.poolParameters.cost,
|
93
|
+
margin: certificate.poolParameters.margin,
|
94
|
+
metadata: certificate.poolParameters.metadataJson
|
95
|
+
? toPoolMetadata(certificate.poolParameters.metadataJson)
|
96
|
+
: undefined,
|
97
|
+
pledge: certificate.poolParameters.pledge,
|
98
|
+
poolKey: poolOperatorKeyPath
|
99
|
+
? {
|
100
|
+
params: {
|
101
|
+
path: poolOperatorKeyPath
|
102
|
+
},
|
103
|
+
type: Ledger.PoolKeyType.DEVICE_OWNED
|
104
|
+
}
|
105
|
+
: {
|
106
|
+
params: {
|
107
|
+
keyHashHex: poolOperatorKeyHash
|
108
|
+
},
|
109
|
+
type: Ledger.PoolKeyType.THIRD_PARTY
|
110
|
+
},
|
111
|
+
poolOwners: certificate.poolParameters.owners.map((owner) => {
|
112
|
+
const poolOwnerKeyPath = getPoolOperatorKeyPath(owner, context);
|
113
|
+
const poolOwnerKeyHash = Cardano.RewardAccount.toHash(owner);
|
114
|
+
return poolOwnerKeyPath
|
115
|
+
? {
|
116
|
+
params: {
|
117
|
+
stakingPath: poolOwnerKeyPath
|
118
|
+
},
|
119
|
+
type: Ledger.PoolOwnerType.DEVICE_OWNED
|
120
|
+
}
|
121
|
+
: {
|
122
|
+
params: {
|
123
|
+
stakingKeyHashHex: poolOwnerKeyHash
|
124
|
+
},
|
125
|
+
type: Ledger.PoolOwnerType.THIRD_PARTY
|
126
|
+
};
|
127
|
+
}),
|
128
|
+
relays: certificate.poolParameters.relays.map((relay) => {
|
129
|
+
switch (relay.__typename) {
|
130
|
+
case 'RelayByAddress':
|
131
|
+
return {
|
132
|
+
params: {
|
133
|
+
ipv4: relay.ipv4,
|
134
|
+
ipv6: relay.ipv6,
|
135
|
+
portNumber: relay.port
|
136
|
+
},
|
137
|
+
type: 0
|
138
|
+
};
|
139
|
+
case 'RelayByName':
|
140
|
+
return {
|
141
|
+
params: {
|
142
|
+
dnsName: relay.hostname,
|
143
|
+
portNumber: relay.port
|
144
|
+
},
|
145
|
+
type: 1
|
146
|
+
};
|
147
|
+
case 'RelayByNameMultihost':
|
148
|
+
return {
|
149
|
+
params: {
|
150
|
+
dnsName: relay.dnsName
|
151
|
+
},
|
152
|
+
type: 1
|
153
|
+
};
|
154
|
+
}
|
155
|
+
}),
|
156
|
+
rewardAccount: poolOperatorKeyPath
|
157
|
+
? {
|
158
|
+
params: {
|
159
|
+
path: poolOperatorKeyPath
|
160
|
+
},
|
161
|
+
type: Ledger.PoolRewardAccountType.DEVICE_OWNED
|
162
|
+
}
|
163
|
+
: {
|
164
|
+
params: {
|
165
|
+
rewardAccountHex: Cardano.Address.fromBech32(certificate.poolParameters.rewardAccount).toBytes()
|
166
|
+
},
|
167
|
+
type: Ledger.PoolRewardAccountType.THIRD_PARTY
|
168
|
+
},
|
169
|
+
vrfKeyHashHex: certificate.poolParameters.vrf
|
170
|
+
},
|
171
|
+
type: Ledger.CertificateType.STAKE_POOL_REGISTRATION
|
172
|
+
};
|
173
|
+
};
|
174
|
+
const poolRetirementCertificate = (certificate, context) => {
|
175
|
+
const poolIdKeyHash = Cardano.PoolId.toKeyHash(certificate.poolId);
|
176
|
+
const knownAddress = context?.knownAddresses.find((address) => Cardano.RewardAccount.toHash(address.rewardAccount) === poolIdKeyHash);
|
177
|
+
const poolKeyPath = stakeKeyPathFromGroupedAddress(knownAddress);
|
178
|
+
if (!poolKeyPath)
|
179
|
+
throw new InvalidArgumentError('certificate', 'Missing key matching pool retirement certificate.');
|
180
|
+
return {
|
181
|
+
params: {
|
182
|
+
poolKeyPath,
|
183
|
+
retirementEpoch: certificate.epoch
|
184
|
+
},
|
185
|
+
type: Ledger.CertificateType.STAKE_POOL_RETIREMENT
|
186
|
+
};
|
187
|
+
};
|
188
|
+
const toCert = (cert, context) => {
|
189
|
+
switch (cert.__typename) {
|
190
|
+
case Cardano.CertificateType.StakeKeyRegistration:
|
191
|
+
return getStakeAddressCertificate(cert, context, Ledger.CertificateType.STAKE_REGISTRATION);
|
192
|
+
case Cardano.CertificateType.StakeKeyDeregistration:
|
193
|
+
return getStakeAddressCertificate(cert, context, Ledger.CertificateType.STAKE_DEREGISTRATION);
|
194
|
+
case Cardano.CertificateType.StakeDelegation:
|
195
|
+
return stakeDelegationCertificate(cert, context);
|
196
|
+
case Cardano.CertificateType.PoolRegistration:
|
197
|
+
return poolRegistrationCertificate(cert, context);
|
198
|
+
case Cardano.CertificateType.PoolRetirement:
|
199
|
+
return poolRetirementCertificate(cert, context);
|
200
|
+
default:
|
201
|
+
throw new InvalidArgumentError('cert', `Certificate ${cert.__typename} not supported.`);
|
202
|
+
}
|
203
|
+
};
|
204
|
+
export const mapCerts = (certs, context) => {
|
205
|
+
if (!certs)
|
206
|
+
return null;
|
207
|
+
return certs.map((coreCert) => toCert(coreCert, context));
|
208
|
+
};
|
209
|
+
//# sourceMappingURL=certificates.js.map
|