@gol/sdk 0.1.0-next.0 → 0.3.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/README.md +80 -6
- package/dist/account-dialects.d.ts +33 -0
- package/dist/account-dialects.d.ts.map +1 -0
- package/dist/account-dialects.js +386 -0
- package/dist/account-dialects.js.map +1 -0
- package/dist/gas-approval.d.ts +80 -0
- package/dist/gas-approval.d.ts.map +1 -0
- package/dist/gas-approval.js +257 -0
- package/dist/gas-approval.js.map +1 -0
- package/dist/generated/platform.d.ts +4874 -300
- package/dist/generated/platform.d.ts.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/owner.d.ts +209 -0
- package/dist/owner.d.ts.map +1 -0
- package/dist/owner.js +636 -0
- package/dist/owner.js.map +1 -0
- package/dist/project-id.d.ts +4 -0
- package/dist/project-id.d.ts.map +1 -0
- package/dist/project-id.js +7 -0
- package/dist/project-id.js.map +1 -0
- package/dist/server.d.ts +115 -5
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +258 -3
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +37 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -3
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { concatHex, encodeAbiParameters, encodeFunctionData, keccak256, parseAbi, stringToHex, } from "viem";
|
|
2
|
+
import { ownerSigningHash, ownerSafetySigningHash, packOwnerSignature, } from "./account-dialects.js";
|
|
3
|
+
import { contractProjectId } from "./project-id.js";
|
|
4
|
+
const DOMAIN_TYPEHASH = keccak256(stringToHex("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"));
|
|
5
|
+
const MANDATE_TYPEHASH = keccak256(stringToHex("MandateTerms(bytes32 parentId,address account,address agent,bytes32 accountProfileId,uint64 installEpoch,bytes32 projectId,uint8 mode,uint8 policyVersion,bytes32 policyHash,uint48 validFrom,uint48 expiresAt,uint32 maxDepth,uint32 maxActiveDescendants,uint48 approvalExpiresAt,bytes32 salt)"));
|
|
6
|
+
const GAS_POLICY_TYPEHASH = keccak256(stringToHex("GasPolicy(bytes32 mandateId,address account,bytes32 projectId,bytes32 accountProfileId,uint64 installEpoch,address feeAsset,address recipient,address attester,uint128 maxPerAction,uint128 maxTotal,uint48 expiresAt,uint8 chargeableOutcomes,uint8 formulaVersion,uint256 nonce)"));
|
|
7
|
+
const COMBINED_TYPEHASH = keccak256(stringToHex("CombinedGasApproval(bytes32 mandateId,bytes32 gasPolicyId)"));
|
|
8
|
+
const REVOCATION_TYPEHASH = keccak256(stringToHex("GasRevocation(bytes32 gasPolicyId,uint256 nonce,uint48 deadline)"));
|
|
9
|
+
const approvalAbi = parseAbi([
|
|
10
|
+
"function createMandateWithGas((bytes32 parentId,address account,address agent,bytes32 accountProfileId,uint64 installEpoch,bytes32 projectId,uint8 mode,uint8 policyVersion,bytes32 policyHash,uint48 validFrom,uint48 expiresAt,uint32 maxDepth,uint32 maxActiveDescendants,uint48 approvalExpiresAt,bytes32 salt) terms,bytes policy,(bytes32 mandateId,address account,bytes32 projectId,bytes32 accountProfileId,uint64 installEpoch,address feeAsset,address recipient,address attester,uint128 maxPerAction,uint128 maxTotal,uint48 expiresAt,uint8 chargeableOutcomes,uint8 formulaVersion,uint256 nonce) gasPolicy,bytes ownerSignature) returns (bytes32 mandateId,bytes32 gasPolicyId)",
|
|
11
|
+
]);
|
|
12
|
+
const nonceAbi = parseAbi([
|
|
13
|
+
"function gasPolicyNonce(address account) view returns (uint256)",
|
|
14
|
+
"function accountEpoch(address account) view returns (uint64)",
|
|
15
|
+
]);
|
|
16
|
+
const revocationAbi = parseAbi([
|
|
17
|
+
"function gasPolicyOf(bytes32) view returns ((bytes32 mandateId,address account,bytes32 projectId,bytes32 accountProfileId,uint64 installEpoch,address feeAsset,address recipient,address attester,uint128 maxPerAction,uint128 maxTotal,uint48 expiresAt,uint8 chargeableOutcomes,uint8 formulaVersion,uint256 nonce))",
|
|
18
|
+
"function gasPolicyRevoked(bytes32) view returns (bool)",
|
|
19
|
+
"function gasRevocationNonce(address) view returns (uint256)",
|
|
20
|
+
"function revokeGasPolicy(bytes32 policyId,uint48 deadline,bytes signature)",
|
|
21
|
+
]);
|
|
22
|
+
const domain = (chainId, core) => keccak256(encodeAbiParameters([
|
|
23
|
+
{ type: "bytes32" },
|
|
24
|
+
{ type: "bytes32" },
|
|
25
|
+
{ type: "bytes32" },
|
|
26
|
+
{ type: "uint256" },
|
|
27
|
+
{ type: "address" },
|
|
28
|
+
], [
|
|
29
|
+
DOMAIN_TYPEHASH,
|
|
30
|
+
keccak256(stringToHex("GOL Mandate")),
|
|
31
|
+
keccak256(stringToHex("2")),
|
|
32
|
+
BigInt(chainId),
|
|
33
|
+
core,
|
|
34
|
+
]));
|
|
35
|
+
const typed = (domainHash, structHash) => keccak256(concatHex(["0x1901", domainHash, structHash]));
|
|
36
|
+
export function hashGasMandate(terms, chainId, core) {
|
|
37
|
+
const structHash = keccak256(encodeAbiParameters([
|
|
38
|
+
{ type: "bytes32" },
|
|
39
|
+
{ type: "bytes32" },
|
|
40
|
+
{ type: "address" },
|
|
41
|
+
{ type: "address" },
|
|
42
|
+
{ type: "bytes32" },
|
|
43
|
+
{ type: "uint64" },
|
|
44
|
+
{ type: "bytes32" },
|
|
45
|
+
{ type: "uint8" },
|
|
46
|
+
{ type: "uint8" },
|
|
47
|
+
{ type: "bytes32" },
|
|
48
|
+
{ type: "uint48" },
|
|
49
|
+
{ type: "uint48" },
|
|
50
|
+
{ type: "uint32" },
|
|
51
|
+
{ type: "uint32" },
|
|
52
|
+
{ type: "uint48" },
|
|
53
|
+
{ type: "bytes32" },
|
|
54
|
+
], [
|
|
55
|
+
MANDATE_TYPEHASH,
|
|
56
|
+
terms.parentId,
|
|
57
|
+
terms.account,
|
|
58
|
+
terms.agent,
|
|
59
|
+
terms.accountProfileId,
|
|
60
|
+
terms.installEpoch,
|
|
61
|
+
terms.projectId,
|
|
62
|
+
terms.mode,
|
|
63
|
+
terms.policyVersion,
|
|
64
|
+
terms.policyHash,
|
|
65
|
+
terms.validFrom,
|
|
66
|
+
terms.expiresAt,
|
|
67
|
+
terms.maxDepth,
|
|
68
|
+
terms.maxActiveDescendants,
|
|
69
|
+
terms.approvalExpiresAt,
|
|
70
|
+
terms.salt,
|
|
71
|
+
]));
|
|
72
|
+
return typed(domain(chainId, core), structHash);
|
|
73
|
+
}
|
|
74
|
+
export function hashOwnerGasPolicy(policy, chainId, core) {
|
|
75
|
+
const structHash = keccak256(encodeAbiParameters([
|
|
76
|
+
{ type: "bytes32" },
|
|
77
|
+
{ type: "bytes32" },
|
|
78
|
+
{ type: "address" },
|
|
79
|
+
{ type: "bytes32" },
|
|
80
|
+
{ type: "bytes32" },
|
|
81
|
+
{ type: "uint64" },
|
|
82
|
+
{ type: "address" },
|
|
83
|
+
{ type: "address" },
|
|
84
|
+
{ type: "address" },
|
|
85
|
+
{ type: "uint128" },
|
|
86
|
+
{ type: "uint128" },
|
|
87
|
+
{ type: "uint48" },
|
|
88
|
+
{ type: "uint8" },
|
|
89
|
+
{ type: "uint8" },
|
|
90
|
+
{ type: "uint256" },
|
|
91
|
+
], [
|
|
92
|
+
GAS_POLICY_TYPEHASH,
|
|
93
|
+
policy.mandateId,
|
|
94
|
+
policy.account,
|
|
95
|
+
policy.projectId,
|
|
96
|
+
policy.accountProfileId,
|
|
97
|
+
policy.installEpoch,
|
|
98
|
+
policy.feeAsset,
|
|
99
|
+
policy.recipient,
|
|
100
|
+
policy.attester,
|
|
101
|
+
policy.maxPerAction,
|
|
102
|
+
policy.maxTotal,
|
|
103
|
+
policy.expiresAt,
|
|
104
|
+
policy.chargeableOutcomes,
|
|
105
|
+
policy.formulaVersion,
|
|
106
|
+
policy.nonce,
|
|
107
|
+
]));
|
|
108
|
+
return typed(domain(chainId, core), structHash);
|
|
109
|
+
}
|
|
110
|
+
/** Internal parity point for the existing v2 combined owner commitment. */
|
|
111
|
+
export function hashCombinedGasApproval(mandateId, gasPolicyId, chainId, core) {
|
|
112
|
+
return typed(domain(chainId, core), keccak256(encodeAbiParameters([{ type: "bytes32" }, { type: "bytes32" }, { type: "bytes32" }], [COMBINED_TYPEHASH, mandateId, gasPolicyId])));
|
|
113
|
+
}
|
|
114
|
+
/** Internal parity point for the existing v2 owner safety commitment. */
|
|
115
|
+
export function hashGasRevocation(gasPolicyId, nonce, deadline, chainId, core) {
|
|
116
|
+
return typed(domain(chainId, core), keccak256(encodeAbiParameters([
|
|
117
|
+
{ type: "bytes32" },
|
|
118
|
+
{ type: "bytes32" },
|
|
119
|
+
{ type: "uint256" },
|
|
120
|
+
{ type: "uint48" },
|
|
121
|
+
], [REVOCATION_TYPEHASH, gasPolicyId, nonce, deadline])));
|
|
122
|
+
}
|
|
123
|
+
/** Prepare one owner signature after the account installation has been verified. */
|
|
124
|
+
export async function prepareCombinedGasApproval(client, family, chainId, core, terms, mandatePolicy, gasPolicy) {
|
|
125
|
+
if ((await client.getChainId()) !== chainId || chainId !== 84532)
|
|
126
|
+
throw new Error("wrong_chain");
|
|
127
|
+
if (terms.parentId !== `0x${"00".repeat(32)}`)
|
|
128
|
+
throw new Error("gas_requires_root_mandate");
|
|
129
|
+
if (keccak256(mandatePolicy) !== terms.policyHash)
|
|
130
|
+
throw new Error("mandate_policy_hash_mismatch");
|
|
131
|
+
const mandateId = hashGasMandate(terms, chainId, core);
|
|
132
|
+
if (gasPolicy.mandateId !== mandateId ||
|
|
133
|
+
gasPolicy.account.toLowerCase() !== terms.account.toLowerCase() ||
|
|
134
|
+
gasPolicy.projectId !== terms.projectId ||
|
|
135
|
+
gasPolicy.accountProfileId !== terms.accountProfileId ||
|
|
136
|
+
gasPolicy.installEpoch !== terms.installEpoch ||
|
|
137
|
+
gasPolicy.feeAsset !== "0x0000000000000000000000000000000000000000" ||
|
|
138
|
+
gasPolicy.formulaVersion !== 1 ||
|
|
139
|
+
gasPolicy.maxPerAction <= 0n ||
|
|
140
|
+
gasPolicy.maxPerAction > gasPolicy.maxTotal ||
|
|
141
|
+
gasPolicy.chargeableOutcomes < 1 ||
|
|
142
|
+
gasPolicy.chargeableOutcomes > 7)
|
|
143
|
+
throw new Error("invalid_gas_policy");
|
|
144
|
+
const [nonce, epoch] = await Promise.all([
|
|
145
|
+
client.readContract({
|
|
146
|
+
address: core,
|
|
147
|
+
abi: nonceAbi,
|
|
148
|
+
functionName: "gasPolicyNonce",
|
|
149
|
+
args: [terms.account],
|
|
150
|
+
}),
|
|
151
|
+
client.readContract({
|
|
152
|
+
address: core,
|
|
153
|
+
abi: nonceAbi,
|
|
154
|
+
functionName: "accountEpoch",
|
|
155
|
+
args: [terms.account],
|
|
156
|
+
}),
|
|
157
|
+
]);
|
|
158
|
+
if (gasPolicy.nonce !== nonce || terms.installEpoch !== epoch)
|
|
159
|
+
throw new Error("stale_gas_approval");
|
|
160
|
+
const gasPolicyId = hashOwnerGasPolicy(gasPolicy, chainId, core);
|
|
161
|
+
const digest = hashCombinedGasApproval(mandateId, gasPolicyId, chainId, core);
|
|
162
|
+
const signingHash = await ownerSigningHash(client, family, terms.account, digest);
|
|
163
|
+
return {
|
|
164
|
+
mandateId,
|
|
165
|
+
gasPolicyId,
|
|
166
|
+
digest,
|
|
167
|
+
ownerSigningHash: signingHash,
|
|
168
|
+
summary: {
|
|
169
|
+
chainId,
|
|
170
|
+
account: terms.account,
|
|
171
|
+
core,
|
|
172
|
+
projectId: terms.projectId,
|
|
173
|
+
agent: terms.agent,
|
|
174
|
+
recipient: gasPolicy.recipient,
|
|
175
|
+
attester: gasPolicy.attester,
|
|
176
|
+
feeAsset: gasPolicy.feeAsset,
|
|
177
|
+
maxPerActionWei: gasPolicy.maxPerAction,
|
|
178
|
+
maxTotalWei: gasPolicy.maxTotal,
|
|
179
|
+
chargeableOutcomes: gasPolicy.chargeableOutcomes,
|
|
180
|
+
expiresAt: gasPolicy.expiresAt,
|
|
181
|
+
},
|
|
182
|
+
encodeSubmission(ownerWalletSignature) {
|
|
183
|
+
return encodeFunctionData({
|
|
184
|
+
abi: approvalAbi,
|
|
185
|
+
functionName: "createMandateWithGas",
|
|
186
|
+
args: [
|
|
187
|
+
terms,
|
|
188
|
+
mandatePolicy,
|
|
189
|
+
gasPolicy,
|
|
190
|
+
packOwnerSignature(family, ownerWalletSignature),
|
|
191
|
+
],
|
|
192
|
+
});
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
/** Bind a platform project UUID before any owner signing request is prepared. */
|
|
197
|
+
export function prepareProjectBoundGasApproval(client, family, chainId, core, projectUuid, terms, mandatePolicy, gasPolicy) {
|
|
198
|
+
const expected = contractProjectId(projectUuid);
|
|
199
|
+
if (terms.projectId.toLowerCase() !== expected ||
|
|
200
|
+
gasPolicy.projectId.toLowerCase() !== expected)
|
|
201
|
+
throw new Error("project_binding_mismatch");
|
|
202
|
+
return prepareCombinedGasApproval(client, family, chainId, core, terms, mandatePolicy, gasPolicy);
|
|
203
|
+
}
|
|
204
|
+
/** Owner safety action. It remains preparable after an account implementation drift. */
|
|
205
|
+
export async function prepareGasRevocation(client, family, chainId, core, account, policyId, deadline) {
|
|
206
|
+
if ((await client.getChainId()) !== chainId || chainId !== 84532)
|
|
207
|
+
throw new Error("wrong_chain");
|
|
208
|
+
if (!/^0x[0-9a-fA-F]{64}$/.test(policyId) ||
|
|
209
|
+
!Number.isSafeInteger(deadline) ||
|
|
210
|
+
deadline <= 0 ||
|
|
211
|
+
deadline >= 2 ** 48)
|
|
212
|
+
throw new Error("invalid_gas_revocation");
|
|
213
|
+
const [policy, revoked, nonce] = await Promise.all([
|
|
214
|
+
client.readContract({
|
|
215
|
+
address: core,
|
|
216
|
+
abi: revocationAbi,
|
|
217
|
+
functionName: "gasPolicyOf",
|
|
218
|
+
args: [policyId],
|
|
219
|
+
}),
|
|
220
|
+
client.readContract({
|
|
221
|
+
address: core,
|
|
222
|
+
abi: revocationAbi,
|
|
223
|
+
functionName: "gasPolicyRevoked",
|
|
224
|
+
args: [policyId],
|
|
225
|
+
}),
|
|
226
|
+
client.readContract({
|
|
227
|
+
address: core,
|
|
228
|
+
abi: revocationAbi,
|
|
229
|
+
functionName: "gasRevocationNonce",
|
|
230
|
+
args: [account],
|
|
231
|
+
}),
|
|
232
|
+
]);
|
|
233
|
+
if (policy.account.toLowerCase() !== account.toLowerCase() || revoked)
|
|
234
|
+
throw new Error("gas_policy_unavailable");
|
|
235
|
+
const digest = hashGasRevocation(policyId, nonce, deadline, chainId, core);
|
|
236
|
+
const signingHash = await ownerSafetySigningHash(client, family, account, digest);
|
|
237
|
+
return {
|
|
238
|
+
account,
|
|
239
|
+
policyId,
|
|
240
|
+
nonce,
|
|
241
|
+
deadline,
|
|
242
|
+
digest,
|
|
243
|
+
ownerSigningHash: signingHash,
|
|
244
|
+
encodeSubmission(ownerWalletSignature) {
|
|
245
|
+
return encodeFunctionData({
|
|
246
|
+
abi: revocationAbi,
|
|
247
|
+
functionName: "revokeGasPolicy",
|
|
248
|
+
args: [
|
|
249
|
+
policyId,
|
|
250
|
+
deadline,
|
|
251
|
+
packOwnerSignature(family, ownerWalletSignature),
|
|
252
|
+
],
|
|
253
|
+
});
|
|
254
|
+
},
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=gas-approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gas-approval.js","sourceRoot":"","sources":["../src/gas-approval.ts"],"names":[],"mappings":"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"}
|