@vercora-protocol/sdk 0.2.2 → 0.2.3
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/CHANGELOG.md +7 -0
- package/README.md +1 -1
- package/dist/client.d.ts +7 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +116 -13
- package/dist/client.js.map +1 -1
- package/dist/generated/vercora.d.ts +7 -1
- package/dist/generated/vercora.d.ts.map +1 -1
- package/dist/idl/vercora.json +7 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/pda.d.ts +6 -0
- package/dist/pda.d.ts.map +1 -1
- package/dist/pda.js +12 -0
- package/dist/pda.js.map +1 -1
- package/dist/resolverDecode.d.ts +30 -0
- package/dist/resolverDecode.d.ts.map +1 -0
- package/dist/resolverDecode.js +63 -0
- package/dist/resolverDecode.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Program } from '@coral-xyz/anchor';
|
|
2
|
+
import { PublicKey } from '@solana/web3.js';
|
|
3
|
+
/** Accepts any Anchor `Program` shape (e.g. `Program<Vercora>`) without fighting IDL generics. */
|
|
4
|
+
type AnyProgram = Program<any>;
|
|
5
|
+
/**
|
|
6
|
+
* Anchor `accounts[].discriminator` for `Resolver` from the loaded IDL.
|
|
7
|
+
* Used to tell "wrong account type at this PDA" from "layout decode failed".
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolverDiscriminatorFromIdl(program: AnyProgram): Buffer | null;
|
|
10
|
+
/**
|
|
11
|
+
* Read `resolver_pubkey` from raw account bytes.
|
|
12
|
+
*
|
|
13
|
+
* Matches on-chain layout (`programs/vercora/src/state/resolver.rs`):
|
|
14
|
+
* PDA seeds `[market, b"resolver", resolver_index]` (see `initialize_market_resolver`).
|
|
15
|
+
*
|
|
16
|
+
* Decode strategy (in order):
|
|
17
|
+
* 1) Try `coder.accounts.decode('Resolver', buf)` (handles padding / future fields).
|
|
18
|
+
* 2) If discriminator matches IDL `Resolver`, read pubkey at bytes `[8, 40)` (legacy / tolerant).
|
|
19
|
+
* 3) If `trustOwner === true` (caller has already checked `info.owner === programId`) AND
|
|
20
|
+
* the buffer is long enough, read pubkey at bytes `[8, 40)` even if discriminator doesn't
|
|
21
|
+
* match the current IDL. This recovers cases where the deployed program predates the
|
|
22
|
+
* current IDL (e.g. after a `declare_id!` update + redeploy on a fresh cluster, where the
|
|
23
|
+
* browser IDL cache lags the on-chain binary). The PDA seed + owner check is sufficient
|
|
24
|
+
* safety: only `initialize_market_resolver` can create a program-owned account at this PDA.
|
|
25
|
+
*/
|
|
26
|
+
export declare function decodeResolverPubkeyFromAccountData(program: AnyProgram, data: Buffer | Uint8Array, options?: {
|
|
27
|
+
trustOwner?: boolean;
|
|
28
|
+
}): PublicKey | null;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=resolverDecode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolverDecode.d.ts","sourceRoot":"","sources":["../src/resolverDecode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,kGAAkG;AAElG,KAAK,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAE/B;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAK/E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,MAAM,GAAG,UAAU,EACzB,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,SAAS,GAAG,IAAI,CA+BlB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolverDiscriminatorFromIdl = resolverDiscriminatorFromIdl;
|
|
4
|
+
exports.decodeResolverPubkeyFromAccountData = decodeResolverPubkeyFromAccountData;
|
|
5
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
6
|
+
/**
|
|
7
|
+
* Anchor `accounts[].discriminator` for `Resolver` from the loaded IDL.
|
|
8
|
+
* Used to tell "wrong account type at this PDA" from "layout decode failed".
|
|
9
|
+
*/
|
|
10
|
+
function resolverDiscriminatorFromIdl(program) {
|
|
11
|
+
const idl = program.idl;
|
|
12
|
+
const row = idl?.accounts?.find((a) => a.name === 'Resolver');
|
|
13
|
+
if (!row?.discriminator?.length)
|
|
14
|
+
return null;
|
|
15
|
+
return Buffer.from(row.discriminator);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Read `resolver_pubkey` from raw account bytes.
|
|
19
|
+
*
|
|
20
|
+
* Matches on-chain layout (`programs/vercora/src/state/resolver.rs`):
|
|
21
|
+
* PDA seeds `[market, b"resolver", resolver_index]` (see `initialize_market_resolver`).
|
|
22
|
+
*
|
|
23
|
+
* Decode strategy (in order):
|
|
24
|
+
* 1) Try `coder.accounts.decode('Resolver', buf)` (handles padding / future fields).
|
|
25
|
+
* 2) If discriminator matches IDL `Resolver`, read pubkey at bytes `[8, 40)` (legacy / tolerant).
|
|
26
|
+
* 3) If `trustOwner === true` (caller has already checked `info.owner === programId`) AND
|
|
27
|
+
* the buffer is long enough, read pubkey at bytes `[8, 40)` even if discriminator doesn't
|
|
28
|
+
* match the current IDL. This recovers cases where the deployed program predates the
|
|
29
|
+
* current IDL (e.g. after a `declare_id!` update + redeploy on a fresh cluster, where the
|
|
30
|
+
* browser IDL cache lags the on-chain binary). The PDA seed + owner check is sufficient
|
|
31
|
+
* safety: only `initialize_market_resolver` can create a program-owned account at this PDA.
|
|
32
|
+
*/
|
|
33
|
+
function decodeResolverPubkeyFromAccountData(program, data, options) {
|
|
34
|
+
const buf = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
35
|
+
if (buf.length < 8 + 32)
|
|
36
|
+
return null;
|
|
37
|
+
const expected = resolverDiscriminatorFromIdl(program);
|
|
38
|
+
const actual = buf.subarray(0, 8);
|
|
39
|
+
const discriminatorMatches = !!(expected &&
|
|
40
|
+
expected.length === 8 &&
|
|
41
|
+
actual.equals(expected));
|
|
42
|
+
if (discriminatorMatches) {
|
|
43
|
+
try {
|
|
44
|
+
const acc = program.coder.accounts.decode('Resolver', buf);
|
|
45
|
+
const pk = (acc.resolverPubkey ?? acc.resolver_pubkey);
|
|
46
|
+
if (pk instanceof web3_js_1.PublicKey)
|
|
47
|
+
return pk;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
/* fall through to byte-range read */
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (!discriminatorMatches && options?.trustOwner !== true) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
return new web3_js_1.PublicKey(buf.subarray(8, 40));
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=resolverDecode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolverDecode.js","sourceRoot":"","sources":["../src/resolverDecode.ts"],"names":[],"mappings":";;AAaA,oEAKC;AAkBD,kFAmCC;AAtED,6CAA4C;AAQ5C;;;GAGG;AACH,SAAgB,4BAA4B,CAAC,OAAmB;IAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAiD,CAAC;IACtE,MAAM,GAAG,GAAG,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,MAAM;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,mCAAmC,CACjD,OAAmB,EACnB,IAAyB,EACzB,OAAkC;IAElC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,QAAQ,GAAG,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,MAAM,oBAAoB,GAAG,CAAC,CAAC,CAC7B,QAAQ;QACR,QAAQ,CAAC,MAAM,KAAK,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CACxB,CAAC;IAEF,IAAI,oBAAoB,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAA4B,CAAC;YACtF,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,eAAe,CAA0B,CAAC;YAChF,IAAI,EAAE,YAAY,mBAAS;gBAAE,OAAO,EAAE,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,oBAAoB,IAAI,OAAO,EAAE,UAAU,KAAK,IAAI,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,mBAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|