@dexterai/vault 0.3.4 → 0.4.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/constants/index.cjs +7 -0
- package/dist/constants/index.d.cts +2 -1
- package/dist/constants/index.d.ts +2 -1
- package/dist/constants/index.js +6 -0
- package/dist/counterfactual.cjs +5 -0
- package/dist/counterfactual.js +5 -0
- package/dist/index.cjs +5 -0
- package/dist/index.js +5 -0
- package/dist/instructions/index.cjs +8 -2
- package/dist/instructions/index.d.cts +2 -0
- package/dist/instructions/index.d.ts +2 -0
- package/dist/instructions/index.js +8 -2
- package/dist/messages/index.cjs +11 -4
- package/dist/messages/index.d.cts +6 -4
- package/dist/messages/index.d.ts +6 -4
- package/dist/messages/index.js +11 -4
- package/dist/precompile/index.cjs +5 -0
- package/dist/precompile/index.js +5 -0
- package/package.json +1 -1
package/dist/constants/index.cjs
CHANGED
|
@@ -25,6 +25,7 @@ __export(constants_exports, {
|
|
|
25
25
|
ED25519_PROGRAM_ID: () => ED25519_PROGRAM_ID,
|
|
26
26
|
INSTRUCTIONS_SYSVAR_ID: () => INSTRUCTIONS_SYSVAR_ID,
|
|
27
27
|
OTS_SESSION_REGISTER_V1_DOMAIN: () => OTS_SESSION_REGISTER_V1_DOMAIN,
|
|
28
|
+
OTS_SESSION_REGISTER_V2_DOMAIN: () => OTS_SESSION_REGISTER_V2_DOMAIN,
|
|
28
29
|
OTS_SESSION_REVOKE_V1_DOMAIN: () => OTS_SESSION_REVOKE_V1_DOMAIN,
|
|
29
30
|
SECP256R1_PROGRAM_ID: () => SECP256R1_PROGRAM_ID,
|
|
30
31
|
SWIG_PROGRAM_ID: () => SWIG_PROGRAM_ID,
|
|
@@ -71,6 +72,11 @@ var OTS_SESSION_REGISTER_V1_DOMAIN = (() => {
|
|
|
71
72
|
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V1"), 0);
|
|
72
73
|
return buf;
|
|
73
74
|
})();
|
|
75
|
+
var OTS_SESSION_REGISTER_V2_DOMAIN = (() => {
|
|
76
|
+
const buf = new Uint8Array(32);
|
|
77
|
+
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V2"), 0);
|
|
78
|
+
return buf;
|
|
79
|
+
})();
|
|
74
80
|
var OTS_SESSION_REVOKE_V1_DOMAIN = (() => {
|
|
75
81
|
const buf = new Uint8Array(32);
|
|
76
82
|
buf.set(new TextEncoder().encode("OTS_SESSION_REVOKE_V1"), 0);
|
|
@@ -83,6 +89,7 @@ var OTS_SESSION_REVOKE_V1_DOMAIN = (() => {
|
|
|
83
89
|
ED25519_PROGRAM_ID,
|
|
84
90
|
INSTRUCTIONS_SYSVAR_ID,
|
|
85
91
|
OTS_SESSION_REGISTER_V1_DOMAIN,
|
|
92
|
+
OTS_SESSION_REGISTER_V2_DOMAIN,
|
|
86
93
|
OTS_SESSION_REVOKE_V1_DOMAIN,
|
|
87
94
|
SECP256R1_PROGRAM_ID,
|
|
88
95
|
SWIG_PROGRAM_ID,
|
|
@@ -29,6 +29,7 @@ declare const DISCRIMINATORS: Readonly<{
|
|
|
29
29
|
revoke_session_key: Uint8Array<ArrayBuffer>;
|
|
30
30
|
}>;
|
|
31
31
|
declare const OTS_SESSION_REGISTER_V1_DOMAIN: Uint8Array;
|
|
32
|
+
declare const OTS_SESSION_REGISTER_V2_DOMAIN: Uint8Array;
|
|
32
33
|
declare const OTS_SESSION_REVOKE_V1_DOMAIN: Uint8Array;
|
|
33
34
|
|
|
34
|
-
export { DEXTER_VAULT_PROGRAM_ID, DISCRIMINATORS, ED25519_PROGRAM_ID, INSTRUCTIONS_SYSVAR_ID, OTS_SESSION_REGISTER_V1_DOMAIN, OTS_SESSION_REVOKE_V1_DOMAIN, SECP256R1_PROGRAM_ID, SWIG_PROGRAM_ID, USDC_DEVNET, USDC_MAINNET, VAULT_SEED_PREFIX };
|
|
35
|
+
export { DEXTER_VAULT_PROGRAM_ID, DISCRIMINATORS, ED25519_PROGRAM_ID, INSTRUCTIONS_SYSVAR_ID, OTS_SESSION_REGISTER_V1_DOMAIN, OTS_SESSION_REGISTER_V2_DOMAIN, OTS_SESSION_REVOKE_V1_DOMAIN, SECP256R1_PROGRAM_ID, SWIG_PROGRAM_ID, USDC_DEVNET, USDC_MAINNET, VAULT_SEED_PREFIX };
|
|
@@ -29,6 +29,7 @@ declare const DISCRIMINATORS: Readonly<{
|
|
|
29
29
|
revoke_session_key: Uint8Array<ArrayBuffer>;
|
|
30
30
|
}>;
|
|
31
31
|
declare const OTS_SESSION_REGISTER_V1_DOMAIN: Uint8Array;
|
|
32
|
+
declare const OTS_SESSION_REGISTER_V2_DOMAIN: Uint8Array;
|
|
32
33
|
declare const OTS_SESSION_REVOKE_V1_DOMAIN: Uint8Array;
|
|
33
34
|
|
|
34
|
-
export { DEXTER_VAULT_PROGRAM_ID, DISCRIMINATORS, ED25519_PROGRAM_ID, INSTRUCTIONS_SYSVAR_ID, OTS_SESSION_REGISTER_V1_DOMAIN, OTS_SESSION_REVOKE_V1_DOMAIN, SECP256R1_PROGRAM_ID, SWIG_PROGRAM_ID, USDC_DEVNET, USDC_MAINNET, VAULT_SEED_PREFIX };
|
|
35
|
+
export { DEXTER_VAULT_PROGRAM_ID, DISCRIMINATORS, ED25519_PROGRAM_ID, INSTRUCTIONS_SYSVAR_ID, OTS_SESSION_REGISTER_V1_DOMAIN, OTS_SESSION_REGISTER_V2_DOMAIN, OTS_SESSION_REVOKE_V1_DOMAIN, SECP256R1_PROGRAM_ID, SWIG_PROGRAM_ID, USDC_DEVNET, USDC_MAINNET, VAULT_SEED_PREFIX };
|
package/dist/constants/index.js
CHANGED
|
@@ -37,6 +37,11 @@ var OTS_SESSION_REGISTER_V1_DOMAIN = (() => {
|
|
|
37
37
|
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V1"), 0);
|
|
38
38
|
return buf;
|
|
39
39
|
})();
|
|
40
|
+
var OTS_SESSION_REGISTER_V2_DOMAIN = (() => {
|
|
41
|
+
const buf = new Uint8Array(32);
|
|
42
|
+
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V2"), 0);
|
|
43
|
+
return buf;
|
|
44
|
+
})();
|
|
40
45
|
var OTS_SESSION_REVOKE_V1_DOMAIN = (() => {
|
|
41
46
|
const buf = new Uint8Array(32);
|
|
42
47
|
buf.set(new TextEncoder().encode("OTS_SESSION_REVOKE_V1"), 0);
|
|
@@ -48,6 +53,7 @@ export {
|
|
|
48
53
|
ED25519_PROGRAM_ID,
|
|
49
54
|
INSTRUCTIONS_SYSVAR_ID,
|
|
50
55
|
OTS_SESSION_REGISTER_V1_DOMAIN,
|
|
56
|
+
OTS_SESSION_REGISTER_V2_DOMAIN,
|
|
51
57
|
OTS_SESSION_REVOKE_V1_DOMAIN,
|
|
52
58
|
SECP256R1_PROGRAM_ID,
|
|
53
59
|
SWIG_PROGRAM_ID,
|
package/dist/counterfactual.cjs
CHANGED
|
@@ -79,6 +79,11 @@ var OTS_SESSION_REGISTER_V1_DOMAIN = (() => {
|
|
|
79
79
|
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V1"), 0);
|
|
80
80
|
return buf;
|
|
81
81
|
})();
|
|
82
|
+
var OTS_SESSION_REGISTER_V2_DOMAIN = (() => {
|
|
83
|
+
const buf = new Uint8Array(32);
|
|
84
|
+
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V2"), 0);
|
|
85
|
+
return buf;
|
|
86
|
+
})();
|
|
82
87
|
var OTS_SESSION_REVOKE_V1_DOMAIN = (() => {
|
|
83
88
|
const buf = new Uint8Array(32);
|
|
84
89
|
buf.set(new TextEncoder().encode("OTS_SESSION_REVOKE_V1"), 0);
|
package/dist/counterfactual.js
CHANGED
|
@@ -55,6 +55,11 @@ var OTS_SESSION_REGISTER_V1_DOMAIN = (() => {
|
|
|
55
55
|
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V1"), 0);
|
|
56
56
|
return buf;
|
|
57
57
|
})();
|
|
58
|
+
var OTS_SESSION_REGISTER_V2_DOMAIN = (() => {
|
|
59
|
+
const buf = new Uint8Array(32);
|
|
60
|
+
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V2"), 0);
|
|
61
|
+
return buf;
|
|
62
|
+
})();
|
|
58
63
|
var OTS_SESSION_REVOKE_V1_DOMAIN = (() => {
|
|
59
64
|
const buf = new Uint8Array(32);
|
|
60
65
|
buf.set(new TextEncoder().encode("OTS_SESSION_REVOKE_V1"), 0);
|
package/dist/index.cjs
CHANGED
|
@@ -81,6 +81,11 @@ var OTS_SESSION_REGISTER_V1_DOMAIN = (() => {
|
|
|
81
81
|
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V1"), 0);
|
|
82
82
|
return buf;
|
|
83
83
|
})();
|
|
84
|
+
var OTS_SESSION_REGISTER_V2_DOMAIN = (() => {
|
|
85
|
+
const buf = new Uint8Array(32);
|
|
86
|
+
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V2"), 0);
|
|
87
|
+
return buf;
|
|
88
|
+
})();
|
|
84
89
|
var OTS_SESSION_REVOKE_V1_DOMAIN = (() => {
|
|
85
90
|
const buf = new Uint8Array(32);
|
|
86
91
|
buf.set(new TextEncoder().encode("OTS_SESSION_REVOKE_V1"), 0);
|
package/dist/index.js
CHANGED
|
@@ -55,6 +55,11 @@ var OTS_SESSION_REGISTER_V1_DOMAIN = (() => {
|
|
|
55
55
|
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V1"), 0);
|
|
56
56
|
return buf;
|
|
57
57
|
})();
|
|
58
|
+
var OTS_SESSION_REGISTER_V2_DOMAIN = (() => {
|
|
59
|
+
const buf = new Uint8Array(32);
|
|
60
|
+
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V2"), 0);
|
|
61
|
+
return buf;
|
|
62
|
+
})();
|
|
58
63
|
var OTS_SESSION_REVOKE_V1_DOMAIN = (() => {
|
|
59
64
|
const buf = new Uint8Array(32);
|
|
60
65
|
buf.set(new TextEncoder().encode("OTS_SESSION_REVOKE_V1"), 0);
|
|
@@ -98,6 +98,11 @@ var OTS_SESSION_REGISTER_V1_DOMAIN = (() => {
|
|
|
98
98
|
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V1"), 0);
|
|
99
99
|
return buf;
|
|
100
100
|
})();
|
|
101
|
+
var OTS_SESSION_REGISTER_V2_DOMAIN = (() => {
|
|
102
|
+
const buf = new Uint8Array(32);
|
|
103
|
+
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V2"), 0);
|
|
104
|
+
return buf;
|
|
105
|
+
})();
|
|
101
106
|
var OTS_SESSION_REVOKE_V1_DOMAIN = (() => {
|
|
102
107
|
const buf = new Uint8Array(32);
|
|
103
108
|
buf.set(new TextEncoder().encode("OTS_SESSION_REVOKE_V1"), 0);
|
|
@@ -4749,11 +4754,11 @@ function buildSetSwigAtomicFromIdentity(params) {
|
|
|
4749
4754
|
deriveSwigId(params.identitySeed, params.hmacKey)
|
|
4750
4755
|
);
|
|
4751
4756
|
const [swigAddress, swigAccountBump] = import_web35.PublicKey.findProgramAddressSync(
|
|
4752
|
-
[Buffer.from(swigId)],
|
|
4757
|
+
[Buffer.from("swig"), Buffer.from(swigId)],
|
|
4753
4758
|
SWIG_PROGRAM_ID
|
|
4754
4759
|
);
|
|
4755
4760
|
const [swigWalletAddress, swigWalletAddressBump] = import_web35.PublicKey.findProgramAddressSync(
|
|
4756
|
-
[swigAddress.toBytes()],
|
|
4761
|
+
[Buffer.from("swig-wallet-address"), swigAddress.toBytes()],
|
|
4757
4762
|
SWIG_PROGRAM_ID
|
|
4758
4763
|
);
|
|
4759
4764
|
return buildSetSwigAtomicInstruction({
|
|
@@ -4814,6 +4819,7 @@ function buildRegisterSessionKeyInstruction(args) {
|
|
|
4814
4819
|
encodeI64LE(args.expiresAt),
|
|
4815
4820
|
args.allowedCounterparty.toBytes(),
|
|
4816
4821
|
encodeU32LE(args.nonce),
|
|
4822
|
+
encodeU64LE(args.maxRevolvingCapacity),
|
|
4817
4823
|
encodeVecU8(args.clientDataJSON),
|
|
4818
4824
|
encodeVecU8(args.authenticatorData)
|
|
4819
4825
|
);
|
|
@@ -133,6 +133,7 @@ declare function buildSetSwigAtomicFromIdentity(params: BuildSetSwigAtomicFromId
|
|
|
133
133
|
* expires_at: i64
|
|
134
134
|
* allowed_counterparty: Pubkey (32 bytes)
|
|
135
135
|
* nonce: u32
|
|
136
|
+
* max_revolving_capacity: u64
|
|
136
137
|
* client_data_json: Vec<u8>
|
|
137
138
|
* authenticator_data: Vec<u8>
|
|
138
139
|
*/
|
|
@@ -144,6 +145,7 @@ interface BuildRegisterSessionKeyArgs {
|
|
|
144
145
|
expiresAt: bigint;
|
|
145
146
|
allowedCounterparty: PublicKey;
|
|
146
147
|
nonce: number;
|
|
148
|
+
maxRevolvingCapacity: bigint;
|
|
147
149
|
clientDataJSON: Uint8Array;
|
|
148
150
|
authenticatorData: Uint8Array;
|
|
149
151
|
}
|
|
@@ -133,6 +133,7 @@ declare function buildSetSwigAtomicFromIdentity(params: BuildSetSwigAtomicFromId
|
|
|
133
133
|
* expires_at: i64
|
|
134
134
|
* allowed_counterparty: Pubkey (32 bytes)
|
|
135
135
|
* nonce: u32
|
|
136
|
+
* max_revolving_capacity: u64
|
|
136
137
|
* client_data_json: Vec<u8>
|
|
137
138
|
* authenticator_data: Vec<u8>
|
|
138
139
|
*/
|
|
@@ -144,6 +145,7 @@ interface BuildRegisterSessionKeyArgs {
|
|
|
144
145
|
expiresAt: bigint;
|
|
145
146
|
allowedCounterparty: PublicKey;
|
|
146
147
|
nonce: number;
|
|
148
|
+
maxRevolvingCapacity: bigint;
|
|
147
149
|
clientDataJSON: Uint8Array;
|
|
148
150
|
authenticatorData: Uint8Array;
|
|
149
151
|
}
|
|
@@ -42,6 +42,11 @@ var OTS_SESSION_REGISTER_V1_DOMAIN = (() => {
|
|
|
42
42
|
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V1"), 0);
|
|
43
43
|
return buf;
|
|
44
44
|
})();
|
|
45
|
+
var OTS_SESSION_REGISTER_V2_DOMAIN = (() => {
|
|
46
|
+
const buf = new Uint8Array(32);
|
|
47
|
+
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V2"), 0);
|
|
48
|
+
return buf;
|
|
49
|
+
})();
|
|
45
50
|
var OTS_SESSION_REVOKE_V1_DOMAIN = (() => {
|
|
46
51
|
const buf = new Uint8Array(32);
|
|
47
52
|
buf.set(new TextEncoder().encode("OTS_SESSION_REVOKE_V1"), 0);
|
|
@@ -4711,11 +4716,11 @@ function buildSetSwigAtomicFromIdentity(params) {
|
|
|
4711
4716
|
deriveSwigId(params.identitySeed, params.hmacKey)
|
|
4712
4717
|
);
|
|
4713
4718
|
const [swigAddress, swigAccountBump] = PublicKey5.findProgramAddressSync(
|
|
4714
|
-
[Buffer.from(swigId)],
|
|
4719
|
+
[Buffer.from("swig"), Buffer.from(swigId)],
|
|
4715
4720
|
SWIG_PROGRAM_ID
|
|
4716
4721
|
);
|
|
4717
4722
|
const [swigWalletAddress, swigWalletAddressBump] = PublicKey5.findProgramAddressSync(
|
|
4718
|
-
[swigAddress.toBytes()],
|
|
4723
|
+
[Buffer.from("swig-wallet-address"), swigAddress.toBytes()],
|
|
4719
4724
|
SWIG_PROGRAM_ID
|
|
4720
4725
|
);
|
|
4721
4726
|
return buildSetSwigAtomicInstruction({
|
|
@@ -4776,6 +4781,7 @@ function buildRegisterSessionKeyInstruction(args) {
|
|
|
4776
4781
|
encodeI64LE(args.expiresAt),
|
|
4777
4782
|
args.allowedCounterparty.toBytes(),
|
|
4778
4783
|
encodeU32LE(args.nonce),
|
|
4784
|
+
encodeU64LE(args.maxRevolvingCapacity),
|
|
4779
4785
|
encodeVecU8(args.clientDataJSON),
|
|
4780
4786
|
encodeVecU8(args.authenticatorData)
|
|
4781
4787
|
);
|
package/dist/messages/index.cjs
CHANGED
|
@@ -65,6 +65,11 @@ var OTS_SESSION_REGISTER_V1_DOMAIN = (() => {
|
|
|
65
65
|
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V1"), 0);
|
|
66
66
|
return buf;
|
|
67
67
|
})();
|
|
68
|
+
var OTS_SESSION_REGISTER_V2_DOMAIN = (() => {
|
|
69
|
+
const buf = new Uint8Array(32);
|
|
70
|
+
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V2"), 0);
|
|
71
|
+
return buf;
|
|
72
|
+
})();
|
|
68
73
|
var OTS_SESSION_REVOKE_V1_DOMAIN = (() => {
|
|
69
74
|
const buf = new Uint8Array(32);
|
|
70
75
|
buf.set(new TextEncoder().encode("OTS_SESSION_REVOKE_V1"), 0);
|
|
@@ -76,10 +81,10 @@ function sessionRegisterMessage(args) {
|
|
|
76
81
|
if (args.sessionPubkey.length !== 32) {
|
|
77
82
|
throw new Error(`sessionPubkey must be 32 bytes, got ${args.sessionPubkey.length}`);
|
|
78
83
|
}
|
|
79
|
-
const buf = new Uint8Array(
|
|
84
|
+
const buf = new Uint8Array(188);
|
|
80
85
|
const view = new DataView(buf.buffer);
|
|
81
86
|
let o = 0;
|
|
82
|
-
buf.set(
|
|
87
|
+
buf.set(OTS_SESSION_REGISTER_V2_DOMAIN, o);
|
|
83
88
|
o += 32;
|
|
84
89
|
buf.set(args.programId.toBytes(), o);
|
|
85
90
|
o += 32;
|
|
@@ -95,8 +100,10 @@ function sessionRegisterMessage(args) {
|
|
|
95
100
|
o += 32;
|
|
96
101
|
view.setUint32(o, args.nonce >>> 0, true);
|
|
97
102
|
o += 4;
|
|
98
|
-
|
|
99
|
-
|
|
103
|
+
view.setBigUint64(o, args.maxRevolvingCapacity, true);
|
|
104
|
+
o += 8;
|
|
105
|
+
if (o !== 188) {
|
|
106
|
+
throw new Error(`internal: session register message wrong length ${o}, expected 188`);
|
|
100
107
|
}
|
|
101
108
|
return buf;
|
|
102
109
|
}
|
|
@@ -4,7 +4,7 @@ import { PublicKey } from '@solana/web3.js';
|
|
|
4
4
|
* Byte-deterministic session-key message builders.
|
|
5
5
|
*
|
|
6
6
|
* MUST match the on-chain Rust handlers byte-for-byte:
|
|
7
|
-
* - register_session_key.rs::build_registration_message → sessionRegisterMessage (
|
|
7
|
+
* - register_session_key.rs::build_registration_message → sessionRegisterMessage (188 bytes, V2)
|
|
8
8
|
* - revoke_session_key.rs::build_revocation_message → sessionRevokeMessage (128 bytes)
|
|
9
9
|
*
|
|
10
10
|
* Any drift makes every signature look forged to the on-chain handler.
|
|
@@ -18,10 +18,11 @@ interface SessionRegisterMessageArgs {
|
|
|
18
18
|
expiresAt: bigint;
|
|
19
19
|
allowedCounterparty: PublicKey;
|
|
20
20
|
nonce: number;
|
|
21
|
+
maxRevolvingCapacity: bigint;
|
|
21
22
|
}
|
|
22
23
|
/**
|
|
23
|
-
*
|
|
24
|
-
* 0 32 domain separator (
|
|
24
|
+
* 188-byte V2 session registration message. Layout:
|
|
25
|
+
* 0 32 domain separator (OTS_SESSION_REGISTER_V2)
|
|
25
26
|
* 32 32 program_id
|
|
26
27
|
* 64 32 vault_pda
|
|
27
28
|
* 96 32 session_pubkey
|
|
@@ -29,8 +30,9 @@ interface SessionRegisterMessageArgs {
|
|
|
29
30
|
* 136 8 expires_at (i64 LE)
|
|
30
31
|
* 144 32 allowed_counterparty
|
|
31
32
|
* 176 4 nonce (u32 LE)
|
|
33
|
+
* 180 8 max_revolving_capacity (u64 LE)
|
|
32
34
|
* ────
|
|
33
|
-
*
|
|
35
|
+
* 188
|
|
34
36
|
*/
|
|
35
37
|
declare function sessionRegisterMessage(args: SessionRegisterMessageArgs): Uint8Array;
|
|
36
38
|
interface SessionRevokeMessageArgs {
|
package/dist/messages/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { PublicKey } from '@solana/web3.js';
|
|
|
4
4
|
* Byte-deterministic session-key message builders.
|
|
5
5
|
*
|
|
6
6
|
* MUST match the on-chain Rust handlers byte-for-byte:
|
|
7
|
-
* - register_session_key.rs::build_registration_message → sessionRegisterMessage (
|
|
7
|
+
* - register_session_key.rs::build_registration_message → sessionRegisterMessage (188 bytes, V2)
|
|
8
8
|
* - revoke_session_key.rs::build_revocation_message → sessionRevokeMessage (128 bytes)
|
|
9
9
|
*
|
|
10
10
|
* Any drift makes every signature look forged to the on-chain handler.
|
|
@@ -18,10 +18,11 @@ interface SessionRegisterMessageArgs {
|
|
|
18
18
|
expiresAt: bigint;
|
|
19
19
|
allowedCounterparty: PublicKey;
|
|
20
20
|
nonce: number;
|
|
21
|
+
maxRevolvingCapacity: bigint;
|
|
21
22
|
}
|
|
22
23
|
/**
|
|
23
|
-
*
|
|
24
|
-
* 0 32 domain separator (
|
|
24
|
+
* 188-byte V2 session registration message. Layout:
|
|
25
|
+
* 0 32 domain separator (OTS_SESSION_REGISTER_V2)
|
|
25
26
|
* 32 32 program_id
|
|
26
27
|
* 64 32 vault_pda
|
|
27
28
|
* 96 32 session_pubkey
|
|
@@ -29,8 +30,9 @@ interface SessionRegisterMessageArgs {
|
|
|
29
30
|
* 136 8 expires_at (i64 LE)
|
|
30
31
|
* 144 32 allowed_counterparty
|
|
31
32
|
* 176 4 nonce (u32 LE)
|
|
33
|
+
* 180 8 max_revolving_capacity (u64 LE)
|
|
32
34
|
* ────
|
|
33
|
-
*
|
|
35
|
+
* 188
|
|
34
36
|
*/
|
|
35
37
|
declare function sessionRegisterMessage(args: SessionRegisterMessageArgs): Uint8Array;
|
|
36
38
|
interface SessionRevokeMessageArgs {
|
package/dist/messages/index.js
CHANGED
|
@@ -35,6 +35,11 @@ var OTS_SESSION_REGISTER_V1_DOMAIN = (() => {
|
|
|
35
35
|
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V1"), 0);
|
|
36
36
|
return buf;
|
|
37
37
|
})();
|
|
38
|
+
var OTS_SESSION_REGISTER_V2_DOMAIN = (() => {
|
|
39
|
+
const buf = new Uint8Array(32);
|
|
40
|
+
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V2"), 0);
|
|
41
|
+
return buf;
|
|
42
|
+
})();
|
|
38
43
|
var OTS_SESSION_REVOKE_V1_DOMAIN = (() => {
|
|
39
44
|
const buf = new Uint8Array(32);
|
|
40
45
|
buf.set(new TextEncoder().encode("OTS_SESSION_REVOKE_V1"), 0);
|
|
@@ -46,10 +51,10 @@ function sessionRegisterMessage(args) {
|
|
|
46
51
|
if (args.sessionPubkey.length !== 32) {
|
|
47
52
|
throw new Error(`sessionPubkey must be 32 bytes, got ${args.sessionPubkey.length}`);
|
|
48
53
|
}
|
|
49
|
-
const buf = new Uint8Array(
|
|
54
|
+
const buf = new Uint8Array(188);
|
|
50
55
|
const view = new DataView(buf.buffer);
|
|
51
56
|
let o = 0;
|
|
52
|
-
buf.set(
|
|
57
|
+
buf.set(OTS_SESSION_REGISTER_V2_DOMAIN, o);
|
|
53
58
|
o += 32;
|
|
54
59
|
buf.set(args.programId.toBytes(), o);
|
|
55
60
|
o += 32;
|
|
@@ -65,8 +70,10 @@ function sessionRegisterMessage(args) {
|
|
|
65
70
|
o += 32;
|
|
66
71
|
view.setUint32(o, args.nonce >>> 0, true);
|
|
67
72
|
o += 4;
|
|
68
|
-
|
|
69
|
-
|
|
73
|
+
view.setBigUint64(o, args.maxRevolvingCapacity, true);
|
|
74
|
+
o += 8;
|
|
75
|
+
if (o !== 188) {
|
|
76
|
+
throw new Error(`internal: session register message wrong length ${o}, expected 188`);
|
|
70
77
|
}
|
|
71
78
|
return buf;
|
|
72
79
|
}
|
|
@@ -80,6 +80,11 @@ var OTS_SESSION_REGISTER_V1_DOMAIN = (() => {
|
|
|
80
80
|
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V1"), 0);
|
|
81
81
|
return buf;
|
|
82
82
|
})();
|
|
83
|
+
var OTS_SESSION_REGISTER_V2_DOMAIN = (() => {
|
|
84
|
+
const buf = new Uint8Array(32);
|
|
85
|
+
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V2"), 0);
|
|
86
|
+
return buf;
|
|
87
|
+
})();
|
|
83
88
|
var OTS_SESSION_REVOKE_V1_DOMAIN = (() => {
|
|
84
89
|
const buf = new Uint8Array(32);
|
|
85
90
|
buf.set(new TextEncoder().encode("OTS_SESSION_REVOKE_V1"), 0);
|
package/dist/precompile/index.js
CHANGED
|
@@ -38,6 +38,11 @@ var OTS_SESSION_REGISTER_V1_DOMAIN = (() => {
|
|
|
38
38
|
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V1"), 0);
|
|
39
39
|
return buf;
|
|
40
40
|
})();
|
|
41
|
+
var OTS_SESSION_REGISTER_V2_DOMAIN = (() => {
|
|
42
|
+
const buf = new Uint8Array(32);
|
|
43
|
+
buf.set(new TextEncoder().encode("OTS_SESSION_REGISTER_V2"), 0);
|
|
44
|
+
return buf;
|
|
45
|
+
})();
|
|
41
46
|
var OTS_SESSION_REVOKE_V1_DOMAIN = (() => {
|
|
42
47
|
const buf = new Uint8Array(32);
|
|
43
48
|
buf.set(new TextEncoder().encode("OTS_SESSION_REVOKE_V1"), 0);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dexterai/vault",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Canonical off-chain mirror of the dexter-vault Solana Anchor program — Solana instruction builders, byte-precise message encoders, account decoders, secp256r1/Ed25519 precompile helpers, counterfactual Swig derivation, and signer interfaces. The single source of truth for any TypeScript code that produces bytes the on-chain program will verify.",
|
|
5
5
|
"author": "Dexter",
|
|
6
6
|
"license": "MIT",
|