@solidus-network/sdk 0.3.0 → 0.5.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/dist/chain/chainInfo.d.ts +37 -0
- package/dist/chain/chainInfo.d.ts.map +1 -0
- package/dist/chain/chainInfo.js +22 -0
- package/dist/chain/chainInfo.js.map +1 -0
- package/dist/chain/credentials.d.ts.map +1 -1
- package/dist/chain/credentials.js +3 -16
- package/dist/chain/credentials.js.map +1 -1
- package/dist/chain/did.d.ts +43 -0
- package/dist/chain/did.d.ts.map +1 -1
- package/dist/chain/did.js +111 -49
- package/dist/chain/did.js.map +1 -1
- package/dist/chain/index.d.ts.map +1 -1
- package/dist/chain/index.js +7 -0
- package/dist/chain/index.js.map +1 -1
- package/dist/chain/transaction.d.ts +28 -0
- package/dist/chain/transaction.d.ts.map +1 -1
- package/dist/chain/transaction.js +20 -0
- package/dist/chain/transaction.js.map +1 -1
- package/dist/chain/transfer.d.ts +26 -0
- package/dist/chain/transfer.d.ts.map +1 -0
- package/dist/chain/transfer.js +32 -0
- package/dist/chain/transfer.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/stub/credentials.js +1 -1
- package/dist/stub/did.d.ts +19 -0
- package/dist/stub/did.d.ts.map +1 -1
- package/dist/stub/did.js +55 -1
- package/dist/stub/did.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chain self-description.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the `solidus_chainInfo` JSON-RPC method so wallets, explorers,
|
|
5
|
+
* indexers, and listing aggregators can discover the chain id, native
|
|
6
|
+
* token metadata, and node version instead of hardcoding them.
|
|
7
|
+
*/
|
|
8
|
+
import type { RpcClient } from './rpc.js';
|
|
9
|
+
/** Native token metadata (mirrors Rust `RpcNativeToken`). */
|
|
10
|
+
export interface NativeToken {
|
|
11
|
+
/** Display symbol — e.g. `"SLDS"`. Uppercase, no `$` prefix. */
|
|
12
|
+
symbol: string;
|
|
13
|
+
/** Display name — e.g. `"Solidus"`. */
|
|
14
|
+
name: string;
|
|
15
|
+
/** Decimal precision (`8` → `1 SLDS = 10^8` base units). */
|
|
16
|
+
decimals: number;
|
|
17
|
+
}
|
|
18
|
+
/** Chain self-description (mirrors Rust `RpcChainInfo`). */
|
|
19
|
+
export interface ChainInfo {
|
|
20
|
+
/** Unique chain identifier from genesis. */
|
|
21
|
+
chainId: string;
|
|
22
|
+
/** Native token metadata. */
|
|
23
|
+
nativeToken: NativeToken;
|
|
24
|
+
/** Hex-encoded genesis block hash, or `''` if no genesis block exists. */
|
|
25
|
+
genesisHash: string;
|
|
26
|
+
/** Height of the latest committed block. */
|
|
27
|
+
latestBlock: number;
|
|
28
|
+
/** Node software version. */
|
|
29
|
+
version: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create the `getChainInfo` accessor bound to an RPC client. The returned
|
|
33
|
+
* function calls `solidus_chainInfo` and maps the snake_case wire format to
|
|
34
|
+
* the camelCase SDK shape.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createChainInfo(rpc: RpcClient): () => Promise<ChainInfo>;
|
|
37
|
+
//# sourceMappingURL=chainInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chainInfo.d.ts","sourceRoot":"","sources":["../../src/chain/chainInfo.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzC,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAA;IACd,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,4DAA4D;AAC5D,MAAM,WAAW,SAAS;IACxB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAA;IACf,6BAA6B;IAC7B,WAAW,EAAE,WAAW,CAAA;IACxB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAA;IACnB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAA;IACnB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAA;CAChB;AAWD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAexE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create the `getChainInfo` accessor bound to an RPC client. The returned
|
|
3
|
+
* function calls `solidus_chainInfo` and maps the snake_case wire format to
|
|
4
|
+
* the camelCase SDK shape.
|
|
5
|
+
*/
|
|
6
|
+
export function createChainInfo(rpc) {
|
|
7
|
+
return async function getChainInfo() {
|
|
8
|
+
const raw = await rpc.call('solidus_chainInfo', []);
|
|
9
|
+
return {
|
|
10
|
+
chainId: raw.chain_id,
|
|
11
|
+
nativeToken: {
|
|
12
|
+
symbol: raw.native_token.symbol,
|
|
13
|
+
name: raw.native_token.name,
|
|
14
|
+
decimals: raw.native_token.decimals,
|
|
15
|
+
},
|
|
16
|
+
genesisHash: raw.genesis_hash,
|
|
17
|
+
latestBlock: raw.latest_block,
|
|
18
|
+
version: raw.version,
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=chainInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chainInfo.js","sourceRoot":"","sources":["../../src/chain/chainInfo.ts"],"names":[],"mappings":"AA0CA;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAc;IAC5C,OAAO,KAAK,UAAU,YAAY;QAChC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAe,mBAAmB,EAAE,EAAE,CAAC,CAAA;QACjE,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,WAAW,EAAE;gBACX,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,MAAM;gBAC/B,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI;gBAC3B,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ;aACpC;YACD,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAA;IACH,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/chain/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/chain/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAsG7C,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW;kBAElD,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;iBAoEtD,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;yBAyB5B,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;sBAc5C,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;EAQnE"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildTransaction, getAddressFromKey, bytesToHex } from './transaction.js';
|
|
1
|
+
import { buildTransaction, getAddressFromKey, bytesToHex, pollReceipt, } from './transaction.js';
|
|
2
2
|
import { blake3 } from '@noble/hashes/blake3';
|
|
3
3
|
// ---------- helpers ----------
|
|
4
4
|
/**
|
|
@@ -60,25 +60,12 @@ function recordToVC(record) {
|
|
|
60
60
|
proof: {
|
|
61
61
|
type: 'Ed25519Signature2020',
|
|
62
62
|
created: new Date(record.issued_ms).toISOString(),
|
|
63
|
-
verificationMethod: `${record.issuer_did}#key-
|
|
63
|
+
verificationMethod: `${record.issuer_did}#key-0`,
|
|
64
64
|
proofPurpose: 'assertionMethod',
|
|
65
65
|
proofValue: record.hash, // On-chain, the proof is the hash itself
|
|
66
66
|
},
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
|
-
/**
|
|
70
|
-
* Poll for a transaction receipt, retrying every 500ms for up to 10 seconds.
|
|
71
|
-
*/
|
|
72
|
-
async function pollReceipt(rpc, txHash) {
|
|
73
|
-
const maxAttempts = 20;
|
|
74
|
-
for (let i = 0; i < maxAttempts; i++) {
|
|
75
|
-
const receipt = await rpc.call('solidus_getReceipt', [txHash]);
|
|
76
|
-
if (receipt)
|
|
77
|
-
return receipt;
|
|
78
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
79
|
-
}
|
|
80
|
-
throw new Error(`Transaction ${txHash} not confirmed after 10 seconds`);
|
|
81
|
-
}
|
|
82
69
|
// ---------- factory ----------
|
|
83
70
|
export function createChainCredentials(rpc, config) {
|
|
84
71
|
return {
|
|
@@ -130,7 +117,7 @@ export function createChainCredentials(rpc, config) {
|
|
|
130
117
|
proof: {
|
|
131
118
|
type: 'Ed25519Signature2020',
|
|
132
119
|
created: now.toISOString(),
|
|
133
|
-
verificationMethod: `${params.issuerDid}#key-
|
|
120
|
+
verificationMethod: `${params.issuerDid}#key-0`,
|
|
134
121
|
proofPurpose: 'assertionMethod',
|
|
135
122
|
proofValue: bytesToHex(payloadHash),
|
|
136
123
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/chain/credentials.ts"],"names":[],"mappings":"AAUA,OAAO,
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/chain/credentials.ts"],"names":[],"mappings":"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"}
|
package/dist/chain/did.d.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import type { DID, DIDDocument } from '@solidus-network/types';
|
|
9
9
|
import type { RpcClient } from './rpc.js';
|
|
10
10
|
import type { ChainConfig } from './index.js';
|
|
11
|
+
import { type ChainTransaction } from './transaction.js';
|
|
11
12
|
/**
|
|
12
13
|
* W3C DID Resolution result — preserves the deactivated state separately
|
|
13
14
|
* from the document. Mirrors the shape defined in
|
|
@@ -31,7 +32,49 @@ export interface DIDResolutionResult {
|
|
|
31
32
|
error?: 'notFound' | 'invalidDid';
|
|
32
33
|
};
|
|
33
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Options for {@link createChainDid}().buildCreate — produces a signed
|
|
37
|
+
* DidCreate transaction without submitting it.
|
|
38
|
+
*
|
|
39
|
+
* Defaults are designed so that the most common case ("I have a key, I
|
|
40
|
+
* want to register its DID") requires only `signerPrivateKey`.
|
|
41
|
+
*/
|
|
42
|
+
export interface BuildDidCreateOptions {
|
|
43
|
+
/**
|
|
44
|
+
* Hex-encoded 32-byte Ed25519 private key that signs the transaction.
|
|
45
|
+
* The chain enforces `signer_pubkey == payload.public_key` (via the
|
|
46
|
+
* `PublicKeyMismatch` invariant), so this key MUST own the `publicKey`
|
|
47
|
+
* field below. If `publicKey` is omitted, it is derived from this key.
|
|
48
|
+
*/
|
|
49
|
+
signerPrivateKey: string;
|
|
50
|
+
/**
|
|
51
|
+
* Hex-encoded 32-byte Ed25519 public key to register. Must match
|
|
52
|
+
* `signerPrivateKey`'s derived pubkey. Omit to use the signer's own
|
|
53
|
+
* pubkey — that is the typical case.
|
|
54
|
+
*/
|
|
55
|
+
publicKey?: string;
|
|
56
|
+
/** Optional service endpoints baked into the DID document at creation. */
|
|
57
|
+
serviceEndpoints?: unknown[];
|
|
58
|
+
/**
|
|
59
|
+
* Override the nonce. Omit to fetch it via `solidus_getNonce`. The
|
|
60
|
+
* override is here for relay paths that already know the nonce (e.g.
|
|
61
|
+
* a frontend that read it just before signing).
|
|
62
|
+
*/
|
|
63
|
+
nonce?: number;
|
|
64
|
+
}
|
|
34
65
|
export declare function createChainDid(rpc: RpcClient, config: ChainConfig): {
|
|
66
|
+
buildCreate: (opts: BuildDidCreateOptions) => Promise<ChainTransaction>;
|
|
67
|
+
submitCreate: (signedTx: ChainTransaction | string) => Promise<DID>;
|
|
68
|
+
/**
|
|
69
|
+
* Convenience wrapper for the case where the SDK's configured
|
|
70
|
+
* `signerPrivateKey` IS the owner of the public key being registered.
|
|
71
|
+
*
|
|
72
|
+
* Throws if the signer doesn't own `publicKey` — the old behavior of
|
|
73
|
+
* "sign with the shared signer, register someone else's key" was a
|
|
74
|
+
* bug (the chain rejects via `PublicKeyMismatch`); use
|
|
75
|
+
* {@link buildCreate} + {@link submitCreate} for the relay pattern
|
|
76
|
+
* (frontend signs locally, backend relays).
|
|
77
|
+
*/
|
|
35
78
|
create(publicKey: string): Promise<DID>;
|
|
36
79
|
resolve(did: string): Promise<DIDDocument | null>;
|
|
37
80
|
/**
|
package/dist/chain/did.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"did.d.ts","sourceRoot":"","sources":["../../src/chain/did.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAsB,MAAM,gBAAgB,CAAA;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"did.d.ts","sourceRoot":"","sources":["../../src/chain/did.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAsB,MAAM,gBAAgB,CAAA;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAQL,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAA;AAoCzB;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B,mBAAmB,EAAE;QACnB,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB;;;;4CAIoC;QACpC,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,qBAAqB,EAAE;QACrB,WAAW,EAAE,sBAAsB,CAAA;QACnC,KAAK,CAAC,EAAE,UAAU,GAAG,YAAY,CAAA;KAClC,CAAA;CACF;AAuDD;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,gBAAgB,EAAE,MAAM,CAAA;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAA;IAC5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW;wBAU/B,qBAAqB,KAAG,OAAO,CAAC,gBAAgB,CAAC;6BA4C5C,gBAAgB,GAAG,MAAM,KAAG,OAAO,CAAC,GAAG,CAAC;IAwD5E;;;;;;;;;OASG;sBACqB,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;iBAgB1B,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAUvD;;;;;;;;OAQG;6BAC4B,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;oBA+B9C,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/D;;;;;;;;;;;;;;;;;OAiBG;uBAEI,MAAM,iBACI,MAAM,aACV,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;EAmBnB"}
|
package/dist/chain/did.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { buildTransaction, getAddressFromKey, addressFromPublicKey, hexToBytes, hexToArray, } from './transaction.js';
|
|
1
|
+
import { buildTransaction, getAddressFromKey, addressFromPublicKey, hexToBytes, hexToArray, bytesToHex, pollReceipt, } from './transaction.js';
|
|
2
|
+
import * as ed from '@noble/ed25519';
|
|
2
3
|
import bs58 from 'bs58';
|
|
3
4
|
// ---------- helpers ----------
|
|
4
5
|
/**
|
|
@@ -8,19 +9,6 @@ import bs58 from 'bs58';
|
|
|
8
9
|
function buildDidString(network, address) {
|
|
9
10
|
return `did:solidus:${network}:${address}`;
|
|
10
11
|
}
|
|
11
|
-
/**
|
|
12
|
-
* Poll for a transaction receipt, retrying every 500ms for up to 10 seconds.
|
|
13
|
-
*/
|
|
14
|
-
async function pollReceipt(rpc, txHash) {
|
|
15
|
-
const maxAttempts = 20; // 20 * 500ms = 10s
|
|
16
|
-
for (let i = 0; i < maxAttempts; i++) {
|
|
17
|
-
const receipt = await rpc.call('solidus_getReceipt', [txHash]);
|
|
18
|
-
if (receipt)
|
|
19
|
-
return receipt;
|
|
20
|
-
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
21
|
-
}
|
|
22
|
-
throw new Error(`Transaction ${txHash} not confirmed after 10 seconds`);
|
|
23
|
-
}
|
|
24
12
|
/**
|
|
25
13
|
* Convert an RPC DID document to the W3C DIDDocument format expected
|
|
26
14
|
* by the SolidusSDK interface.
|
|
@@ -59,45 +47,119 @@ function mapToW3CDIDDocument(doc) {
|
|
|
59
47
|
updated: new Date(doc.updated_ms).toISOString(),
|
|
60
48
|
};
|
|
61
49
|
}
|
|
62
|
-
// ---------- factory ----------
|
|
63
50
|
export function createChainDid(rpc, config) {
|
|
51
|
+
/**
|
|
52
|
+
* Build a signed `DidCreate` transaction without submitting it.
|
|
53
|
+
*
|
|
54
|
+
* The signed tx is content-addressed and can be relayed by any party
|
|
55
|
+
* (e.g. a frontend signs locally, then POSTs the tx to a backend that
|
|
56
|
+
* relays via {@link submitCreate}). This split honors the chain's
|
|
57
|
+
* `PublicKeyMismatch` invariant: only the holder of `publicKey` can
|
|
58
|
+
* register the DID for that key.
|
|
59
|
+
*/
|
|
60
|
+
async function buildCreate(opts) {
|
|
61
|
+
// 1. Derive signer pubkey + publicKey to register.
|
|
62
|
+
const signerPubBytes = await ed.getPublicKeyAsync(hexToBytes(opts.signerPrivateKey));
|
|
63
|
+
const signerPubHex = bytesToHex(signerPubBytes);
|
|
64
|
+
const publicKey = opts.publicKey ?? signerPubHex;
|
|
65
|
+
// 2. Enforce signer-owns-publicKey at the SDK boundary so the chain
|
|
66
|
+
// never has to. Failing here means the bug is in the caller.
|
|
67
|
+
if (publicKey.toLowerCase() !== signerPubHex.toLowerCase()) {
|
|
68
|
+
throw new Error(`did.buildCreate: signerPrivateKey does not own the supplied publicKey ` +
|
|
69
|
+
`(signer pubkey ${signerPubHex.slice(0, 16)}…, payload pubkey ${publicKey.slice(0, 16)}…). ` +
|
|
70
|
+
`The chain enforces "senders may only register DIDs they control" — ` +
|
|
71
|
+
`pass the user's own private key, or omit publicKey to register the signer's own DID.`);
|
|
72
|
+
}
|
|
73
|
+
// 3. Resolve nonce.
|
|
74
|
+
const senderAddress = addressFromPublicKey(signerPubBytes);
|
|
75
|
+
const nonce = opts.nonce ?? (await rpc.call('solidus_getNonce', [senderAddress]));
|
|
76
|
+
// 4. Build DidCreate payload (Rust serde tagged enum format).
|
|
77
|
+
const payload = {
|
|
78
|
+
DidCreate: {
|
|
79
|
+
public_key: hexToArray(publicKey),
|
|
80
|
+
service_endpoints: opts.serviceEndpoints ?? [],
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
// 5. Sign.
|
|
84
|
+
return buildTransaction(opts.signerPrivateKey, nonce, payload);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Submit a previously-built {@link ChainTransaction} (must wrap a
|
|
88
|
+
* `DidCreate` payload), poll its receipt, and return the DID descriptor.
|
|
89
|
+
*
|
|
90
|
+
* Accepts the tx as an object OR a stringified JSON payload (useful
|
|
91
|
+
* when relaying a tx that arrived as POST body).
|
|
92
|
+
*
|
|
93
|
+
* Defensively re-checks the signer-owns-pubkey invariant before
|
|
94
|
+
* submitting, so a malicious or buggy client can't tee up a tx the
|
|
95
|
+
* chain will reject — we fail fast with a clear error.
|
|
96
|
+
*/
|
|
97
|
+
async function submitCreate(signedTx) {
|
|
98
|
+
const tx = typeof signedTx === 'string' ? JSON.parse(signedTx) : signedTx;
|
|
99
|
+
// Defensive: tx must be DidCreate + signer must own the registered pubkey.
|
|
100
|
+
const payload = tx.payload;
|
|
101
|
+
const payloadPubArr = payload?.DidCreate?.public_key;
|
|
102
|
+
if (!payloadPubArr || !Array.isArray(payloadPubArr) || payloadPubArr.length !== 32) {
|
|
103
|
+
throw new Error(`did.submitCreate: signed tx is not a DidCreate (or its public_key is malformed). ` +
|
|
104
|
+
`Use did.deactivate / did.setController for those operations.`);
|
|
105
|
+
}
|
|
106
|
+
if (!Array.isArray(tx.sender_pubkey) || tx.sender_pubkey.length !== 32) {
|
|
107
|
+
throw new Error(`did.submitCreate: signed tx has a malformed sender_pubkey`);
|
|
108
|
+
}
|
|
109
|
+
for (let i = 0; i < 32; i++) {
|
|
110
|
+
if (tx.sender_pubkey[i] !== payloadPubArr[i]) {
|
|
111
|
+
throw new Error(`did.submitCreate: tx signer does not own the public key in the DidCreate ` +
|
|
112
|
+
`payload (chain would reject with PublicKeyMismatch). Re-sign the tx with ` +
|
|
113
|
+
`the private key that owns the registered public key.`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Submit + poll.
|
|
117
|
+
const txJson = typeof signedTx === 'string' ? signedTx : JSON.stringify(tx);
|
|
118
|
+
const txHash = await rpc.call('solidus_sendTransaction', [txJson]);
|
|
119
|
+
const receipt = await pollReceipt(rpc, txHash);
|
|
120
|
+
if (!receipt.status.startsWith('success')) {
|
|
121
|
+
throw new Error(`DidCreate failed: ${receipt.status}`);
|
|
122
|
+
}
|
|
123
|
+
// The chain builds the DID from the signer's address (which equals
|
|
124
|
+
// the registered public key's address — we just enforced that).
|
|
125
|
+
const pubKeyBytes = Uint8Array.from(payloadPubArr);
|
|
126
|
+
const didAddress = addressFromPublicKey(pubKeyBytes);
|
|
127
|
+
const did = buildDidString(config.network, didAddress);
|
|
128
|
+
const doc = await rpc.call('solidus_didResolve', [did]);
|
|
129
|
+
const now = new Date().toISOString();
|
|
130
|
+
return {
|
|
131
|
+
id: did,
|
|
132
|
+
controller: did,
|
|
133
|
+
created: doc ? new Date(doc.created_ms).toISOString() : now,
|
|
134
|
+
updated: doc ? new Date(doc.updated_ms).toISOString() : now,
|
|
135
|
+
network: config.network,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
64
138
|
return {
|
|
139
|
+
buildCreate,
|
|
140
|
+
submitCreate,
|
|
141
|
+
/**
|
|
142
|
+
* Convenience wrapper for the case where the SDK's configured
|
|
143
|
+
* `signerPrivateKey` IS the owner of the public key being registered.
|
|
144
|
+
*
|
|
145
|
+
* Throws if the signer doesn't own `publicKey` — the old behavior of
|
|
146
|
+
* "sign with the shared signer, register someone else's key" was a
|
|
147
|
+
* bug (the chain rejects via `PublicKeyMismatch`); use
|
|
148
|
+
* {@link buildCreate} + {@link submitCreate} for the relay pattern
|
|
149
|
+
* (frontend signs locally, backend relays).
|
|
150
|
+
*/
|
|
65
151
|
async create(publicKey) {
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
service_endpoints: [],
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
// 4. Build and sign transaction
|
|
78
|
-
const tx = await buildTransaction(config.signerPrivateKey, nonce, payload);
|
|
79
|
-
// 5. Submit via RPC
|
|
80
|
-
const txHash = await rpc.call('solidus_sendTransaction', [JSON.stringify(tx)]);
|
|
81
|
-
// 6. Poll for receipt
|
|
82
|
-
const receipt = await pollReceipt(rpc, txHash);
|
|
83
|
-
if (!receipt.status.startsWith('success')) {
|
|
84
|
-
throw new Error(`DidCreate failed: ${receipt.status}`);
|
|
152
|
+
const signerPubBytes = await ed.getPublicKeyAsync(hexToBytes(config.signerPrivateKey));
|
|
153
|
+
const signerPubHex = bytesToHex(signerPubBytes);
|
|
154
|
+
if (publicKey.toLowerCase() !== signerPubHex.toLowerCase()) {
|
|
155
|
+
throw new Error(`did.create: the SDK's configured signer does not own the supplied publicKey. ` +
|
|
156
|
+
`The chain enforces "senders may only register DIDs they control". ` +
|
|
157
|
+
`Either pass the signer's own pubkey (omit the arg to derive it), or use ` +
|
|
158
|
+
`did.buildCreate({signerPrivateKey: <user's key>, ...}) + did.submitCreate() ` +
|
|
159
|
+
`to relay a tx the user signed themselves.`);
|
|
85
160
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const pubKeyBytes = hexToBytes(publicKey);
|
|
89
|
-
const didAddress = addressFromPublicKey(pubKeyBytes);
|
|
90
|
-
const did = buildDidString(config.network, didAddress);
|
|
91
|
-
// 8. Resolve the created DID to get timestamps
|
|
92
|
-
const doc = await rpc.call('solidus_didResolve', [did]);
|
|
93
|
-
const now = new Date().toISOString();
|
|
94
|
-
return {
|
|
95
|
-
id: did,
|
|
96
|
-
controller: did,
|
|
97
|
-
created: doc ? new Date(doc.created_ms).toISOString() : now,
|
|
98
|
-
updated: doc ? new Date(doc.updated_ms).toISOString() : now,
|
|
99
|
-
network: config.network,
|
|
100
|
-
};
|
|
161
|
+
const tx = await buildCreate({ signerPrivateKey: config.signerPrivateKey, publicKey });
|
|
162
|
+
return submitCreate(tx);
|
|
101
163
|
},
|
|
102
164
|
async resolve(did) {
|
|
103
165
|
// BACKWARD COMPAT: returns null for deactivated DIDs. Use
|
package/dist/chain/did.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"did.js","sourceRoot":"","sources":["../../src/chain/did.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,EACV,UAAU,
|
|
1
|
+
{"version":3,"file":"did.js","sourceRoot":"","sources":["../../src/chain/did.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chain/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chain/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,gBAAgB,EAAE,MAAM,CAAA;IACxB,gDAAgD;IAChD,OAAO,EAAE,SAAS,GAAG,SAAS,CAAA;IAC9B,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAajE"}
|
package/dist/chain/index.js
CHANGED
|
@@ -9,6 +9,8 @@ import { createChainDid } from './did.js';
|
|
|
9
9
|
import { createChainCredentials } from './credentials.js';
|
|
10
10
|
import { createChainAuth } from './auth.js';
|
|
11
11
|
import { createChainBbs } from './bbs.js';
|
|
12
|
+
import { createChainInfo } from './chainInfo.js';
|
|
13
|
+
import { createChainTransfer } from './transfer.js';
|
|
12
14
|
export function createChainClient(config) {
|
|
13
15
|
const rpc = new RpcClient(config.rpcUrl);
|
|
14
16
|
return {
|
|
@@ -16,6 +18,11 @@ export function createChainClient(config) {
|
|
|
16
18
|
credentials: createChainCredentials(rpc, config),
|
|
17
19
|
auth: createChainAuth(rpc, config),
|
|
18
20
|
bbs: createChainBbs(rpc, config),
|
|
21
|
+
chain: {
|
|
22
|
+
transfer: createChainTransfer(rpc),
|
|
23
|
+
getBalance: async (address) => rpc.call('solidus_getBalance', [address]),
|
|
24
|
+
},
|
|
25
|
+
getChainInfo: createChainInfo(rpc),
|
|
19
26
|
};
|
|
20
27
|
}
|
|
21
28
|
//# sourceMappingURL=index.js.map
|
package/dist/chain/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chain/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chain/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAenD,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACxC,OAAO;QACL,GAAG,EAAE,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC;QAChC,WAAW,EAAE,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC;QAChD,IAAI,EAAE,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC;QAClC,GAAG,EAAE,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC;QAChC,KAAK,EAAE;YACL,QAAQ,EAAE,mBAAmB,CAAC,GAAG,CAAC;YAClC,UAAU,EAAE,KAAK,EAAE,OAAe,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAS,oBAAoB,EAAE,CAAC,OAAO,CAAC,CAAC;SACzF;QACD,YAAY,EAAE,eAAe,CAAC,GAAG,CAAC;KACnC,CAAA;AACH,CAAC"}
|
|
@@ -4,6 +4,34 @@ export interface ChainTransaction {
|
|
|
4
4
|
payload: unknown;
|
|
5
5
|
signature: number[];
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Shape of `solidus_getReceipt` responses. Exported so relay paths (e.g.
|
|
9
|
+
* `did.submitCreate`) can inspect the receipt before mapping it back to
|
|
10
|
+
* the caller-facing return type.
|
|
11
|
+
*/
|
|
12
|
+
export interface RpcReceipt {
|
|
13
|
+
tx_hash: string;
|
|
14
|
+
status: string;
|
|
15
|
+
block_height: number;
|
|
16
|
+
fee_paid: number;
|
|
17
|
+
events: Array<{
|
|
18
|
+
type: string;
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Poll `solidus_getReceipt` until the receipt appears, retrying every
|
|
24
|
+
* 500ms for up to 10 seconds. Throws if the receipt does not arrive in
|
|
25
|
+
* that window — the chain finalizes well inside this budget on healthy
|
|
26
|
+
* testnets.
|
|
27
|
+
*
|
|
28
|
+
* Extracted from `chain/did.ts` and `chain/credentials.ts` (2026-05-19),
|
|
29
|
+
* which each had an identical private copy. Lives here so any future
|
|
30
|
+
* "build + submit + poll" relay primitive can share it.
|
|
31
|
+
*/
|
|
32
|
+
export declare function pollReceipt(rpc: {
|
|
33
|
+
call<T>(method: string, params: unknown[]): Promise<T>;
|
|
34
|
+
}, txHash: string): Promise<RpcReceipt>;
|
|
7
35
|
/**
|
|
8
36
|
* Build and sign a transaction for the Solidus chain.
|
|
9
37
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/chain/transaction.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,gBAAgB,CAAC,CAuB3B;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI9E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAIlE;AAID,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAMlD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAIpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAEhD"}
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/chain/transaction.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAA;CACxD;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE;IAAE,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CAAE,EAC/D,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,CAAC,CAQrB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,gBAAgB,CAAC,CAuB3B;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI9E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAIlE;AAID,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAMlD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAIpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAEhD"}
|
|
@@ -15,6 +15,26 @@ import { blake3 } from '@noble/hashes/blake3';
|
|
|
15
15
|
import bs58 from 'bs58';
|
|
16
16
|
// Configure ed25519 v2 to use sha512 for sync operations
|
|
17
17
|
ed.etc.sha512Sync = (...m) => sha512(ed.etc.concatBytes(...m));
|
|
18
|
+
/**
|
|
19
|
+
* Poll `solidus_getReceipt` until the receipt appears, retrying every
|
|
20
|
+
* 500ms for up to 10 seconds. Throws if the receipt does not arrive in
|
|
21
|
+
* that window — the chain finalizes well inside this budget on healthy
|
|
22
|
+
* testnets.
|
|
23
|
+
*
|
|
24
|
+
* Extracted from `chain/did.ts` and `chain/credentials.ts` (2026-05-19),
|
|
25
|
+
* which each had an identical private copy. Lives here so any future
|
|
26
|
+
* "build + submit + poll" relay primitive can share it.
|
|
27
|
+
*/
|
|
28
|
+
export async function pollReceipt(rpc, txHash) {
|
|
29
|
+
const maxAttempts = 20; // 20 * 500ms = 10s
|
|
30
|
+
for (let i = 0; i < maxAttempts; i++) {
|
|
31
|
+
const receipt = await rpc.call('solidus_getReceipt', [txHash]);
|
|
32
|
+
if (receipt)
|
|
33
|
+
return receipt;
|
|
34
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
35
|
+
}
|
|
36
|
+
throw new Error(`Transaction ${txHash} not confirmed after 10 seconds`);
|
|
37
|
+
}
|
|
18
38
|
/**
|
|
19
39
|
* Build and sign a transaction for the Solidus chain.
|
|
20
40
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/chain/transaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,yDAAyD;AACzD,EAAE,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,CAAe,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/chain/transaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chain-backed token transfer primitive.
|
|
3
|
+
*
|
|
4
|
+
* Exposed because relayers and onboarding paths need to seed new
|
|
5
|
+
* accounts with a small amount of native token before those accounts
|
|
6
|
+
* can pay their first tx fee. Without this, a freshly-generated client
|
|
7
|
+
* key can't submit its own DidCreate (the chain charges a fee on every
|
|
8
|
+
* tx, and a brand-new account has zero balance).
|
|
9
|
+
*
|
|
10
|
+
* Higher-level surfaces like `did.buildCreate`/`did.submitCreate` use
|
|
11
|
+
* this as a building block when called via a "fund + relay" wrapper.
|
|
12
|
+
*/
|
|
13
|
+
import type { RpcClient } from './rpc.js';
|
|
14
|
+
import { type RpcReceipt } from './transaction.js';
|
|
15
|
+
export interface TransferOptions {
|
|
16
|
+
/** Hex-encoded 32-byte Ed25519 private key of the sender. */
|
|
17
|
+
signerPrivateKey: string;
|
|
18
|
+
/** Base58 recipient address (20-byte BLAKE3-truncated pubkey). */
|
|
19
|
+
toAddress: string;
|
|
20
|
+
/** Amount in base units (smallest unit of the native token). */
|
|
21
|
+
amount: number;
|
|
22
|
+
/** Optional nonce override; fetched via `solidus_getNonce` when omitted. */
|
|
23
|
+
nonce?: number;
|
|
24
|
+
}
|
|
25
|
+
export declare function createChainTransfer(rpc: RpcClient): (opts: TransferOptions) => Promise<RpcReceipt>;
|
|
26
|
+
//# sourceMappingURL=transfer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../src/chain/transfer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzC,OAAO,EAAiC,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAEjF,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,gBAAgB,EAAE,MAAM,CAAA;IACxB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAA;IACjB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAA;IACd,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,IAOjB,MAAM,eAAe,KAAG,OAAO,CAAC,UAAU,CAAC,CA0B3E"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import bs58 from 'bs58';
|
|
2
|
+
import { buildTransaction, pollReceipt } from './transaction.js';
|
|
3
|
+
export function createChainTransfer(rpc) {
|
|
4
|
+
/**
|
|
5
|
+
* Submit a `Transfer` transaction, poll its receipt, and return it.
|
|
6
|
+
* Throws on a failed receipt. The signer's address is derived from
|
|
7
|
+
* `signerPrivateKey`; the recipient is a base58 address (the same
|
|
8
|
+
* format `addressFromPublicKey` returns).
|
|
9
|
+
*/
|
|
10
|
+
return async function transfer(opts) {
|
|
11
|
+
const { signerPrivateKey, toAddress, amount } = opts;
|
|
12
|
+
// Decode the base58 address to a 20-byte array — the Rust chain expects
|
|
13
|
+
// `to: [u8; 20]` as a JSON number array in the Transfer payload.
|
|
14
|
+
const toBytes = bs58.decode(toAddress);
|
|
15
|
+
if (toBytes.length !== 20) {
|
|
16
|
+
throw new Error(`chain.transfer: toAddress must decode to 20 bytes (got ${toBytes.length}); pass the base58 address, not the public key`);
|
|
17
|
+
}
|
|
18
|
+
// Resolve nonce.
|
|
19
|
+
const { getAddressFromKey } = await import('./transaction.js');
|
|
20
|
+
const senderAddress = await getAddressFromKey(signerPrivateKey);
|
|
21
|
+
const nonce = opts.nonce ?? (await rpc.call('solidus_getNonce', [senderAddress]));
|
|
22
|
+
const payload = { Transfer: { to: Array.from(toBytes), amount } };
|
|
23
|
+
const tx = await buildTransaction(signerPrivateKey, nonce, payload);
|
|
24
|
+
const txHash = await rpc.call('solidus_sendTransaction', [JSON.stringify(tx)]);
|
|
25
|
+
const receipt = await pollReceipt(rpc, txHash);
|
|
26
|
+
if (!receipt.status.startsWith('success')) {
|
|
27
|
+
throw new Error(`Transfer failed: ${receipt.status}`);
|
|
28
|
+
}
|
|
29
|
+
return receipt;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/chain/transfer.ts"],"names":[],"mappings":"AAaA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAmB,MAAM,kBAAkB,CAAA;AAajF,MAAM,UAAU,mBAAmB,CAAC,GAAc;IAChD;;;;;OAKG;IACH,OAAO,KAAK,UAAU,QAAQ,CAAC,IAAqB;QAClD,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QACpD,wEAAwE;QACxE,iEAAiE;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACtC,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,0DAA0D,OAAO,CAAC,MAAM,gDAAgD,CACzH,CAAA;QACH,CAAC;QAED,iBAAiB;QACjB,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;QAC9D,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAA;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAS,kBAAkB,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QAEzF,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,CAAA;QACjE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;QAEnE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAS,yBAAyB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACtF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC9C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QACvD,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { DID, DIDDocument, VerifiableCredential, IssueCredentialParams, VerificationResult, AuthResult } from '@solidus-network/types';
|
|
2
|
+
import type { ChainTransaction } from './chain/transaction.js';
|
|
3
|
+
export type { ChainTransaction } from './chain/transaction.js';
|
|
4
|
+
export { addressFromPublicKey, getAddressFromKey } from './chain/transaction.js';
|
|
2
5
|
import type { BbsDisclosedMessage, BbsCredentialProofResult } from './chain/bbs.js';
|
|
6
|
+
import type { ChainInfo } from './chain/chainInfo.js';
|
|
3
7
|
export type { DID, DIDDocument, VerifiableCredential, IssueCredentialParams, VerificationResult, AuthResult, };
|
|
4
8
|
export { runMigrations, closeConnection } from './stub/db.js';
|
|
5
9
|
export { generateKeypair, decodePublicKey } from './stub/crypto.js';
|
|
@@ -7,10 +11,42 @@ export type { ChainConfig } from './chain/index.js';
|
|
|
7
11
|
export { createChainClient } from './chain/index.js';
|
|
8
12
|
export type { BbsDisclosedMessage, BbsCredentialProofResult, BbsCredentialRecord, } from './chain/bbs.js';
|
|
9
13
|
export { utf8ToHex, toHex } from './chain/bbs.js';
|
|
14
|
+
export type { ChainInfo, NativeToken } from './chain/chainInfo.js';
|
|
10
15
|
export { issueSdJwtVc, verifySdJwtVc, presentSdJwtVc, createStatusListJwt, ed25519PublicKeyToJwk, ed25519PublicKeyFromJwk, } from './sdjwt/index.js';
|
|
11
16
|
export type { IssueSdJwtVcParams, IssuedSdJwtVc, VerifySdJwtVcParams, PresentSdJwtVcParams, PresentationResult, CreateStatusListJwtParams, Ed25519Jwk, VerificationResult as SdJwtVerificationResult, } from './sdjwt/index.js';
|
|
12
17
|
export interface SolidusSDK {
|
|
13
18
|
did: {
|
|
19
|
+
/**
|
|
20
|
+
* Build (and sign) a `DidCreate` transaction without submitting it.
|
|
21
|
+
* Returns a content-addressed signed tx that can be relayed by any
|
|
22
|
+
* party — typically the user signs locally and a backend submits.
|
|
23
|
+
*
|
|
24
|
+
* The chain enforces `signer_pubkey == payload.public_key`
|
|
25
|
+
* (PublicKeyMismatch invariant), so `signerPrivateKey` MUST own the
|
|
26
|
+
* registered public key. When `publicKey` is omitted it is derived
|
|
27
|
+
* from the signing key — the common case.
|
|
28
|
+
*
|
|
29
|
+
* Available in chain mode; stub-mode implementation is minimal but
|
|
30
|
+
* shape-compatible (callers can write tests once and run in either).
|
|
31
|
+
*/
|
|
32
|
+
buildCreate(opts: {
|
|
33
|
+
signerPrivateKey: string;
|
|
34
|
+
publicKey?: string;
|
|
35
|
+
serviceEndpoints?: unknown[];
|
|
36
|
+
nonce?: number;
|
|
37
|
+
}): Promise<ChainTransaction>;
|
|
38
|
+
/**
|
|
39
|
+
* Submit a previously-built `DidCreate` transaction, poll its
|
|
40
|
+
* receipt, and return the DID descriptor. Accepts either the
|
|
41
|
+
* `ChainTransaction` object or a stringified JSON tx (the common
|
|
42
|
+
* shape for relay paths where the tx arrived as an HTTP body).
|
|
43
|
+
*/
|
|
44
|
+
submitCreate(signedTx: ChainTransaction | string): Promise<DID>;
|
|
45
|
+
/**
|
|
46
|
+
* Convenience wrapper for the case where the SDK's configured
|
|
47
|
+
* signer owns the public key being registered. Throws otherwise —
|
|
48
|
+
* use `buildCreate` + `submitCreate` for the relay pattern.
|
|
49
|
+
*/
|
|
14
50
|
create(publicKey: string): Promise<DID>;
|
|
15
51
|
resolve(did: string): Promise<DIDDocument | null>;
|
|
16
52
|
deactivate(did: string, signerKey: string): Promise<void>;
|
|
@@ -58,6 +94,43 @@ export interface SolidusSDK {
|
|
|
58
94
|
disclosedMessages: BbsDisclosedMessage[];
|
|
59
95
|
}): Promise<BbsCredentialProofResult>;
|
|
60
96
|
};
|
|
97
|
+
/**
|
|
98
|
+
* Low-level chain primitives. Used by relayer / onboarding paths that
|
|
99
|
+
* need to seed new accounts with native token before they can pay
|
|
100
|
+
* their first tx fee, or perform plain transfers outside of DID and
|
|
101
|
+
* credential semantics. Available only in chain mode — `undefined` in
|
|
102
|
+
* stub mode.
|
|
103
|
+
*/
|
|
104
|
+
chain?: {
|
|
105
|
+
/**
|
|
106
|
+
* Submit a `Transfer` transaction and wait for its receipt. Throws
|
|
107
|
+
* on a failed receipt. `toAddress` is a base58 address (the format
|
|
108
|
+
* `addressFromPublicKey` returns), not a public key.
|
|
109
|
+
*/
|
|
110
|
+
transfer(opts: {
|
|
111
|
+
signerPrivateKey: string;
|
|
112
|
+
toAddress: string;
|
|
113
|
+
amount: number;
|
|
114
|
+
nonce?: number;
|
|
115
|
+
}): Promise<{
|
|
116
|
+
tx_hash: string;
|
|
117
|
+
status: string;
|
|
118
|
+
block_height: number;
|
|
119
|
+
fee_paid: number;
|
|
120
|
+
events: Array<{
|
|
121
|
+
type: string;
|
|
122
|
+
[key: string]: unknown;
|
|
123
|
+
}>;
|
|
124
|
+
}>;
|
|
125
|
+
/** Balance (in base units) for the given base58 address. */
|
|
126
|
+
getBalance(address: string): Promise<number>;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Fetch chain metadata (id, native token, genesis hash, latest height,
|
|
130
|
+
* node version) via the `solidus_chainInfo` RPC method. Available only in
|
|
131
|
+
* chain mode (testnet/mainnet) — `undefined` in stub mode.
|
|
132
|
+
*/
|
|
133
|
+
getChainInfo?(): Promise<ChainInfo>;
|
|
61
134
|
}
|
|
62
135
|
export interface SolidusConfig {
|
|
63
136
|
mode: 'stub' | 'testnet' | 'mainnet';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,GAAG,EAAE,WAAW,EAAE,oBAAoB,EACtC,qBAAqB,EAAE,kBAAkB,EAAE,UAAU,EACtD,MAAM,gBAAgB,CAAA;AAKvB,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EAEzB,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { didCreate, didResolve, didDeactivate } from './stub/did.js';
|
|
2
|
+
import { didCreate, didResolve, didDeactivate, didBuildCreate, didSubmitCreate } from './stub/did.js';
|
|
3
3
|
import { credentialsIssue, credentialsVerify, credentialsRevoke, credentialsQuery } from './stub/credentials.js';
|
|
4
4
|
import { getSql } from './stub/db.js';
|
|
5
5
|
import { createChainClient } from './chain/index.js';
|
|
6
|
+
export { addressFromPublicKey, getAddressFromKey } from './chain/transaction.js';
|
|
6
7
|
export { runMigrations, closeConnection } from './stub/db.js';
|
|
7
8
|
export { generateKeypair, decodePublicKey } from './stub/crypto.js';
|
|
8
9
|
export { createChainClient } from './chain/index.js';
|
|
@@ -15,6 +16,8 @@ export { issueSdJwtVc, verifySdJwtVc, presentSdJwtVc, createStatusListJwt, ed255
|
|
|
15
16
|
function createStubSdk() {
|
|
16
17
|
return {
|
|
17
18
|
did: {
|
|
19
|
+
buildCreate: didBuildCreate,
|
|
20
|
+
submitCreate: didSubmitCreate,
|
|
18
21
|
create: didCreate,
|
|
19
22
|
resolve: didResolve,
|
|
20
23
|
deactivate: didDeactivate,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAKxC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAKxC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACrG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAChH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAoB,MAAM,kBAAkB,CAAA;AAGtE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAYhF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAMpD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAGjD,kEAAkE;AAClE,uBAAuB;AACvB,8CAA8C;AAC9C,wDAAwD;AACxD,OAAO,EACL,YAAY,EACZ,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,kBAAkB,CAAA;AAoIzB,SAAS,aAAa;IACpB,OAAO;QACL,GAAG,EAAE;YACH,WAAW,EAAE,cAAc;YAC3B,YAAY,EAAE,eAAe;YAC7B,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,UAAU;YACnB,UAAU,EAAE,aAAa;SAC1B;QACD,WAAW,EAAE;YACX,KAAK,EAAE,gBAAgB;YACvB,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,iBAAiB;YACzB,KAAK,EAAE,gBAAgB;SACxB;QACD,IAAI,EAAE;YACJ,KAAK,CAAC,eAAe,CAAC,MAAc;gBAClC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;gBACpB,MAAM,SAAS,GAAG,UAAU,EAAE,CAAA;gBAC9B,MAAM,GAAG,CAAA,2DAA2D,SAAS,KAAK,MAAM,GAAG,CAAA;gBAC3F,OAAO,SAAS,CAAA;YAClB,CAAC;YACD,KAAK,CAAC,kBAAkB,CACtB,GAAW,EACX,UAAkB,EAClB,OAAe;gBAEf,qDAAqD;gBACrD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;YACpC,CAAC;SACF;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAqB;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAgD,IAAI,MAAM,CAAC,CAAA;IAEvH,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,uBAAuB,CAAA;YACzF,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAA;YACpF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAA;YAC3F,CAAC;YACD,OAAO,iBAAiB,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAClF,CAAC;QACD,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,aAAa,EAAE,CAAA;IAC1B,CAAC;AACH,CAAC"}
|
package/dist/stub/credentials.js
CHANGED
|
@@ -13,7 +13,7 @@ function rowToVC(row) {
|
|
|
13
13
|
proof: {
|
|
14
14
|
type: 'Ed25519Signature2020',
|
|
15
15
|
created: row.issued_at.toISOString(),
|
|
16
|
-
verificationMethod: `${row.issuer_did}#key-
|
|
16
|
+
verificationMethod: `${row.issuer_did}#key-0`,
|
|
17
17
|
proofPurpose: 'assertionMethod',
|
|
18
18
|
proofValue: row.proof_value,
|
|
19
19
|
},
|
package/dist/stub/did.d.ts
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
import type { DID, DIDDocument } from '@solidus-network/types';
|
|
2
|
+
import type { ChainTransaction } from '../chain/transaction.js';
|
|
2
3
|
export declare function didCreate(publicKeyHex: string): Promise<DID>;
|
|
3
4
|
export declare function didResolve(did: string): Promise<DIDDocument | null>;
|
|
4
5
|
export declare function didDeactivate(did: string, _signerKey: string): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Stub-mode `buildCreate`. Produces a shape-compatible `ChainTransaction`
|
|
8
|
+
* envelope so callers can write a single relay-style code path that runs
|
|
9
|
+
* unchanged in stub and chain modes. The "signature" is meaningless in
|
|
10
|
+
* stub mode — there is no chain to verify against — but the payload is
|
|
11
|
+
* faithful so that `submitCreate` can extract `public_key`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function didBuildCreate(opts: {
|
|
14
|
+
signerPrivateKey: string;
|
|
15
|
+
publicKey?: string;
|
|
16
|
+
serviceEndpoints?: unknown[];
|
|
17
|
+
nonce?: number;
|
|
18
|
+
}): Promise<ChainTransaction>;
|
|
19
|
+
/**
|
|
20
|
+
* Stub-mode `submitCreate`. Parses the publicKey out of the supplied tx
|
|
21
|
+
* and delegates to the existing `didCreate` to insert the row.
|
|
22
|
+
*/
|
|
23
|
+
export declare function didSubmitCreate(signedTx: ChainTransaction | string): Promise<DID>;
|
|
5
24
|
//# sourceMappingURL=did.d.ts.map
|
package/dist/stub/did.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"did.d.ts","sourceRoot":"","sources":["../../src/stub/did.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"did.d.ts","sourceRoot":"","sources":["../../src/stub/did.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAY/D,wBAAsB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAWlE;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAgCzE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlF;AAID;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0B5B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CASvF"}
|
package/dist/stub/did.js
CHANGED
|
@@ -21,7 +21,7 @@ export async function didResolve(did) {
|
|
|
21
21
|
if (rows.length === 0)
|
|
22
22
|
return null;
|
|
23
23
|
const row = rows[0];
|
|
24
|
-
const vmId = `${row.did}#key-
|
|
24
|
+
const vmId = `${row.did}#key-0`;
|
|
25
25
|
return {
|
|
26
26
|
'@context': [
|
|
27
27
|
'https://www.w3.org/ns/did/v1',
|
|
@@ -49,4 +49,58 @@ export async function didDeactivate(did, _signerKey) {
|
|
|
49
49
|
UPDATE stub_dids SET deactivated = true, updated_at = now() WHERE did = ${did}
|
|
50
50
|
`;
|
|
51
51
|
}
|
|
52
|
+
// ---------- buildCreate / submitCreate (stub) ----------
|
|
53
|
+
/**
|
|
54
|
+
* Stub-mode `buildCreate`. Produces a shape-compatible `ChainTransaction`
|
|
55
|
+
* envelope so callers can write a single relay-style code path that runs
|
|
56
|
+
* unchanged in stub and chain modes. The "signature" is meaningless in
|
|
57
|
+
* stub mode — there is no chain to verify against — but the payload is
|
|
58
|
+
* faithful so that `submitCreate` can extract `public_key`.
|
|
59
|
+
*/
|
|
60
|
+
export async function didBuildCreate(opts) {
|
|
61
|
+
if (!opts.signerPrivateKey || opts.signerPrivateKey.length !== 64) {
|
|
62
|
+
throw new Error('didBuildCreate (stub): signerPrivateKey must be a 64-char hex string');
|
|
63
|
+
}
|
|
64
|
+
// Derive the signer pubkey from the privkey hex deterministically. We
|
|
65
|
+
// do NOT run real ed25519 in the stub — for the stub the "pubkey" is
|
|
66
|
+
// simply a marker derived by reversing the privkey bytes. This is
|
|
67
|
+
// sufficient for shape compatibility; chain mode does real signing.
|
|
68
|
+
const signerPubBytes = hexToBytes(opts.signerPrivateKey).reverse();
|
|
69
|
+
const publicKey = opts.publicKey ?? Buffer.from(signerPubBytes).toString('hex');
|
|
70
|
+
if (publicKey.toLowerCase() !== Buffer.from(signerPubBytes).toString('hex').toLowerCase()) {
|
|
71
|
+
throw new Error(`didBuildCreate (stub): signerPrivateKey does not own publicKey (the SDK enforces this invariant in both modes)`);
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
sender_pubkey: Array.from(signerPubBytes),
|
|
75
|
+
nonce: opts.nonce ?? 0,
|
|
76
|
+
payload: {
|
|
77
|
+
DidCreate: {
|
|
78
|
+
public_key: Array.from(hexToBytes(publicKey)),
|
|
79
|
+
service_endpoints: opts.serviceEndpoints ?? [],
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
signature: Array(64).fill(0),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Stub-mode `submitCreate`. Parses the publicKey out of the supplied tx
|
|
87
|
+
* and delegates to the existing `didCreate` to insert the row.
|
|
88
|
+
*/
|
|
89
|
+
export async function didSubmitCreate(signedTx) {
|
|
90
|
+
const tx = typeof signedTx === 'string' ? JSON.parse(signedTx) : signedTx;
|
|
91
|
+
const payload = tx.payload;
|
|
92
|
+
const payloadPub = payload?.DidCreate?.public_key;
|
|
93
|
+
if (!Array.isArray(payloadPub) || payloadPub.length !== 32) {
|
|
94
|
+
throw new Error('didSubmitCreate (stub): tx is not a DidCreate with a 32-byte public_key');
|
|
95
|
+
}
|
|
96
|
+
const publicKeyHex = Buffer.from(Uint8Array.from(payloadPub)).toString('hex');
|
|
97
|
+
return didCreate(publicKeyHex);
|
|
98
|
+
}
|
|
99
|
+
function hexToBytes(hex) {
|
|
100
|
+
const out = new Uint8Array(hex.length / 2);
|
|
101
|
+
for (let i = 0; i < hex.length; i += 2) {
|
|
102
|
+
out[i / 2] = parseInt(hex.substring(i, i + 2), 16);
|
|
103
|
+
}
|
|
104
|
+
return out;
|
|
105
|
+
}
|
|
52
106
|
//# sourceMappingURL=did.js.map
|
package/dist/stub/did.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"did.js","sourceRoot":"","sources":["../../src/stub/did.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"did.js","sourceRoot":"","sources":["../../src/stub/did.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solidus-network/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Solidus Network SDK — DID resolution, verifiable credential issuance and verification, SD-JWT VC (EUDI-compatible), and on-chain queries via JSON-RPC.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"@noble/hashes": "^1.5.0",
|
|
18
18
|
"@sd-jwt/sd-jwt-vc": "^0.19.0",
|
|
19
19
|
"@sd-jwt/types": "^0.19.0",
|
|
20
|
-
"@solidus-network/auth": "0.
|
|
21
|
-
"@solidus-network/types": "0.
|
|
20
|
+
"@solidus-network/auth": "0.5.0",
|
|
21
|
+
"@solidus-network/types": "0.5.0",
|
|
22
22
|
"bs58": "^6.0.0",
|
|
23
23
|
"postgres": "^3.4.4"
|
|
24
24
|
},
|