@lit-protocol/vincent-ability-aave 0.2.8 → 1.0.0-mma
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 +51 -86
- package/dist/CHANGELOG.md +7 -0
- package/dist/README.md +51 -86
- package/dist/generated/vincent-bundled-ability.d.ts +1440 -0
- package/dist/generated/vincent-bundled-ability.d.ts.map +1 -0
- package/dist/generated/vincent-bundled-ability.js +15 -0
- package/dist/generated/vincent-bundled-ability.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/decodeTransaction.d.ts +3 -0
- package/dist/lib/decodeTransaction.d.ts.map +1 -0
- package/dist/lib/decodeTransaction.js +49 -0
- package/dist/lib/decodeTransaction.js.map +1 -0
- package/dist/lib/helpers/aave.d.ts +85 -0
- package/dist/lib/helpers/aave.d.ts.map +1 -0
- package/dist/lib/helpers/aave.js +331 -0
- package/dist/lib/helpers/aave.js.map +1 -0
- package/dist/lib/helpers/erc20.d.ts +6 -0
- package/dist/lib/helpers/erc20.d.ts.map +1 -0
- package/dist/lib/helpers/erc20.js +53 -0
- package/dist/lib/helpers/erc20.js.map +1 -0
- package/dist/lib/helpers/transactionKind.d.ts +6 -0
- package/dist/lib/helpers/transactionKind.d.ts.map +1 -0
- package/dist/lib/helpers/transactionKind.js +10 -0
- package/dist/lib/helpers/transactionKind.js.map +1 -0
- package/dist/lib/validateSimulation.d.ts +3 -0
- package/dist/lib/validateSimulation.d.ts.map +1 -0
- package/dist/lib/validateSimulation.js +56 -0
- package/dist/lib/validateSimulation.js.map +1 -0
- package/dist/lib/validateTransaction.d.ts +3 -0
- package/dist/lib/validateTransaction.d.ts.map +1 -0
- package/dist/lib/validateTransaction.js +79 -0
- package/dist/lib/validateTransaction.js.map +1 -0
- package/dist/lib/vincent-ability.d.ts +1437 -0
- package/dist/lib/vincent-ability.d.ts.map +1 -0
- package/dist/lib/vincent-ability.js +15 -0
- package/dist/lib/vincent-ability.js.map +1 -0
- package/dist/package.json +5 -5
- package/dist/src/generated/lit-action.js +2 -2
- package/dist/src/generated/vincent-ability-metadata.json +1 -1
- package/dist/src/generated/vincent-bundled-ability.d.ts +1417 -66
- package/dist/src/generated/vincent-bundled-ability.d.ts.map +1 -1
- package/dist/src/generated/vincent-bundled-ability.js +3 -5
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +17 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/decodeTransaction.d.ts +3 -0
- package/dist/src/lib/decodeTransaction.d.ts.map +1 -0
- package/dist/src/lib/decodeTransaction.js +49 -0
- package/dist/src/lib/decodeTransaction.js.map +1 -0
- package/dist/src/lib/helpers/aave.d.ts +85 -0
- package/dist/src/lib/helpers/aave.d.ts.map +1 -0
- package/dist/src/lib/helpers/aave.js +331 -0
- package/dist/src/lib/helpers/aave.js.map +1 -0
- package/dist/src/lib/helpers/erc20.d.ts +6 -0
- package/dist/src/lib/helpers/erc20.d.ts.map +1 -0
- package/dist/src/lib/helpers/erc20.js +53 -0
- package/dist/src/lib/helpers/erc20.js.map +1 -0
- package/dist/src/lib/helpers/transactionKind.d.ts +6 -0
- package/dist/src/lib/helpers/transactionKind.d.ts.map +1 -0
- package/dist/src/lib/helpers/transactionKind.js +10 -0
- package/dist/src/lib/helpers/transactionKind.js.map +1 -0
- package/dist/src/lib/lit-action.js.map +1 -1
- package/dist/src/lib/validateSimulation.d.ts +3 -0
- package/dist/src/lib/validateSimulation.d.ts.map +1 -0
- package/dist/src/lib/validateSimulation.js +56 -0
- package/dist/src/lib/validateSimulation.js.map +1 -0
- package/dist/src/lib/validateTransaction.d.ts +3 -0
- package/dist/src/lib/validateTransaction.d.ts.map +1 -0
- package/dist/src/lib/validateTransaction.js +79 -0
- package/dist/src/lib/validateTransaction.js.map +1 -0
- package/dist/src/lib/vincent-ability.d.ts +1417 -67
- package/dist/src/lib/vincent-ability.d.ts.map +1 -1
- package/dist/src/lib/vincent-ability.js +9 -345
- package/dist/src/lib/vincent-ability.js.map +1 -1
- package/package.json +6 -6
- package/dist/src/lib/helpers/index.d.ts +0 -71
- package/dist/src/lib/helpers/index.d.ts.map +0 -1
- package/dist/src/lib/helpers/index.js +0 -345
- package/dist/src/lib/helpers/index.js.map +0 -1
- package/dist/src/lib/schemas.d.ts +0 -115
- package/dist/src/lib/schemas.d.ts.map +0 -1
- package/dist/src/lib/schemas.js +0 -110
- package/dist/src/lib/schemas.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionKind.d.ts","sourceRoot":"","sources":["../../../src/lib/helpers/transactionKind.ts"],"names":[],"mappings":"AAAA,oBAAY,eAAe;IACzB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,GAAG,QAAQ;CACZ"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransactionKind = void 0;
|
|
4
|
+
var TransactionKind;
|
|
5
|
+
(function (TransactionKind) {
|
|
6
|
+
TransactionKind["AAVE"] = "aave";
|
|
7
|
+
TransactionKind["ERC20"] = "erc20";
|
|
8
|
+
TransactionKind["FEE"] = "fee";
|
|
9
|
+
})(TransactionKind || (exports.TransactionKind = TransactionKind = {}));
|
|
10
|
+
//# sourceMappingURL=transactionKind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionKind.js","sourceRoot":"","sources":["../../../src/lib/helpers/transactionKind.ts"],"names":[],"mappings":";;;AAAA,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,kCAAe,CAAA;IACf,8BAAW,CAAA;AACb,CAAC,EAJW,eAAe,+BAAf,eAAe,QAI1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateSimulation.d.ts","sourceRoot":"","sources":["../../src/lib/validateSimulation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAC;AAM9F,eAAO,MAAM,kBAAkB,GAAI,QAAQ,wBAAwB,SA8DlE,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateSimulation = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const aave_1 = require("./helpers/aave");
|
|
6
|
+
const validateSimulation = (params) => {
|
|
7
|
+
const { chainId, sender: _sender, simulation } = params;
|
|
8
|
+
if (simulation.error) {
|
|
9
|
+
const { message, revertReason } = simulation.error;
|
|
10
|
+
throw new Error(`Simulation failed - Reason: ${revertReason} - Message: ${message}`);
|
|
11
|
+
}
|
|
12
|
+
const feeContract = (0, aave_1.getFeeContractAddress)(chainId);
|
|
13
|
+
const { POOL: aavePoolAddress } = (0, aave_1.getAaveAddresses)(chainId);
|
|
14
|
+
const aaveATokens = (0, aave_1.getATokens)(chainId);
|
|
15
|
+
const sender = (0, viem_1.getAddress)(_sender);
|
|
16
|
+
const pool = (0, viem_1.getAddress)(aavePoolAddress);
|
|
17
|
+
const aTokens = Object.values(aaveATokens).map(viem_1.getAddress);
|
|
18
|
+
const allowed = new Set([viem_1.zeroAddress, sender, pool, feeContract, ...aTokens]);
|
|
19
|
+
simulation.changes.forEach((c, idx) => {
|
|
20
|
+
const assetType = c.assetType;
|
|
21
|
+
const changeType = c.changeType;
|
|
22
|
+
const from = (0, viem_1.getAddress)(c.from);
|
|
23
|
+
const to = (0, viem_1.getAddress)(c.to);
|
|
24
|
+
// Helper for throwing with context
|
|
25
|
+
const fail = (reason) => {
|
|
26
|
+
throw new Error(`Invalid simulation change at index ${idx}: ${reason} [assetType=${assetType}, changeType=${changeType}, from=${from}, to=${to}]`);
|
|
27
|
+
};
|
|
28
|
+
if (assetType === 'NATIVE') {
|
|
29
|
+
if (changeType !== 'TRANSFER') {
|
|
30
|
+
fail('Only TRANSFER is allowed for NATIVE');
|
|
31
|
+
}
|
|
32
|
+
// TODO no chequeamos el source y destination?
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (assetType === 'ERC20') {
|
|
36
|
+
if (changeType === 'APPROVE') {
|
|
37
|
+
if (![sender, feeContract].includes(from) || ![pool, feeContract].includes(to)) {
|
|
38
|
+
fail('ERC20 APPROVE must be from userOp.sender to aave pool or fee contract');
|
|
39
|
+
}
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (changeType === 'TRANSFER') {
|
|
43
|
+
if (!allowed.has(from) || !allowed.has(to)) {
|
|
44
|
+
fail('ERC20 TRANSFER endpoints must be within {zero address, sender, fee contract or Aave addresses}');
|
|
45
|
+
}
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Unknown change type for ERC20
|
|
49
|
+
fail('Unsupported ERC20 change type');
|
|
50
|
+
}
|
|
51
|
+
// Any other asset types are not permitted
|
|
52
|
+
fail('Unsupported asset type');
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
exports.validateSimulation = validateSimulation;
|
|
56
|
+
//# sourceMappingURL=validateSimulation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateSimulation.js","sourceRoot":"","sources":["../../src/lib/validateSimulation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateTransaction.d.ts","sourceRoot":"","sources":["../../src/lib/validateTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,yBAAyB,EAC1B,MAAM,+CAA+C,CAAC;AAQvD,eAAO,MAAM,mBAAmB,GAAI,QAAQ,yBAAyB,SAsEpE,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateTransaction = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const aave_1 = require("./helpers/aave");
|
|
6
|
+
const transactionKind_1 = require("./helpers/transactionKind");
|
|
7
|
+
const validateTransaction = (params) => {
|
|
8
|
+
const { chainId, decodedTransaction, sender } = params;
|
|
9
|
+
if (decodedTransaction.kind === 'error') {
|
|
10
|
+
const decodedTransactionError = decodedTransaction;
|
|
11
|
+
throw new Error(`Transaction failed to decode: ${decodedTransactionError.message}`);
|
|
12
|
+
}
|
|
13
|
+
const decodedTransactionSuccess = decodedTransaction;
|
|
14
|
+
const feeContractAddress = (0, aave_1.getFeeContractAddress)(chainId);
|
|
15
|
+
if (!feeContractAddress) {
|
|
16
|
+
throw new Error(`Fee contract address not found for chainId ${chainId}`);
|
|
17
|
+
}
|
|
18
|
+
if (decodedTransaction.kind === transactionKind_1.TransactionKind.ERC20) {
|
|
19
|
+
if (['approve', 'increaseAllowance'].includes(decodedTransactionSuccess.fn)) {
|
|
20
|
+
const [spender, amount] = decodedTransactionSuccess.args;
|
|
21
|
+
if (!(0, viem_1.isAddressEqual)(spender, feeContractAddress)) {
|
|
22
|
+
throw new Error(`ERC20 approval to forbidden spender ${spender}`);
|
|
23
|
+
}
|
|
24
|
+
if (amount === 2n ** 256n - 1n)
|
|
25
|
+
throw new Error('Infinite approval not allowed');
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
throw new Error('ERC20 function not allowed');
|
|
29
|
+
}
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (decodedTransaction.kind === transactionKind_1.TransactionKind.FEE) {
|
|
33
|
+
if (['depositToAave', 'withdrawFromAave'].includes(decodedTransactionSuccess.fn)) {
|
|
34
|
+
// const [appId, assetAddress, amount] =
|
|
35
|
+
// decodedTransactionSuccess.args as [number, Address, bigint];
|
|
36
|
+
// There is nothing to block here
|
|
37
|
+
// A wrong appId and the delegatee will produce an invalid signature
|
|
38
|
+
// A wrong assetAddress or amount and the deposit/withdrawal will fail
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
throw new Error('Fee function not allowed');
|
|
42
|
+
}
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (decodedTransaction.kind === transactionKind_1.TransactionKind.AAVE) {
|
|
46
|
+
const fn = decodedTransactionSuccess.fn;
|
|
47
|
+
const args = decodedTransactionSuccess.args; // Args depend on the function being called
|
|
48
|
+
if (fn === 'supply') {
|
|
49
|
+
const onBehalfOf = (0, viem_1.getAddress)(args[2]);
|
|
50
|
+
if (!(0, viem_1.isAddressEqual)(onBehalfOf, sender))
|
|
51
|
+
throw new Error('supply.onBehalfOf != sender');
|
|
52
|
+
}
|
|
53
|
+
else if (fn === 'withdraw') {
|
|
54
|
+
const to = (0, viem_1.getAddress)(args[2]);
|
|
55
|
+
if (!(0, viem_1.isAddressEqual)(to, sender))
|
|
56
|
+
throw new Error('withdraw.to != sender');
|
|
57
|
+
}
|
|
58
|
+
else if (fn === 'borrow') {
|
|
59
|
+
const onBehalfOf = (0, viem_1.getAddress)(args[4]);
|
|
60
|
+
if (!(0, viem_1.isAddressEqual)(onBehalfOf, sender))
|
|
61
|
+
throw new Error('borrow.onBehalfOf != sender');
|
|
62
|
+
}
|
|
63
|
+
else if (fn === 'repay') {
|
|
64
|
+
const onBehalfOf = (0, viem_1.getAddress)(args[3]);
|
|
65
|
+
if (!(0, viem_1.isAddressEqual)(onBehalfOf, sender))
|
|
66
|
+
throw new Error('repay.onBehalfOf != sender');
|
|
67
|
+
}
|
|
68
|
+
else if (fn === 'setUserUseReserveAsCollateral') {
|
|
69
|
+
// ok; self-scoped setting
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
throw new Error(`Aave Pool function not allowed: ${fn}`);
|
|
73
|
+
}
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
throw new Error('Unknown decoded transaction kind. Could not validate transaction.');
|
|
77
|
+
};
|
|
78
|
+
exports.validateTransaction = validateTransaction;
|
|
79
|
+
//# sourceMappingURL=validateTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateTransaction.js","sourceRoot":"","sources":["../../src/lib/validateTransaction.ts"],"names":[],"mappings":"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"}
|