@lit-protocol/vincent-ability-erc20-transfer 0.0.11-mma → 0.1.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/CHANGELOG.md +23 -0
- package/dist/CHANGELOG.md +23 -0
- package/dist/package.json +2 -2
- 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 +72 -72
- package/dist/src/lib/helpers/index.d.ts +0 -19
- package/dist/src/lib/helpers/index.d.ts.map +1 -1
- package/dist/src/lib/helpers/index.js +0 -36
- package/dist/src/lib/helpers/index.js.map +1 -1
- package/dist/src/lib/vincent-ability.d.ts +72 -72
- package/dist/src/lib/vincent-ability.d.ts.map +1 -1
- package/dist/src/lib/vincent-ability.js +16 -43
- package/dist/src/lib/vincent-ability.js.map +1 -1
- package/package.json +5 -5
|
@@ -25,30 +25,12 @@ exports.vincentAbility = (0, vincent_ability_sdk_1.createVincentAbility)({
|
|
|
25
25
|
precheckFailSchema: schemas_1.precheckFailSchema,
|
|
26
26
|
executeSuccessSchema: schemas_1.executeSuccessSchema,
|
|
27
27
|
executeFailSchema: schemas_1.executeFailSchema,
|
|
28
|
-
precheck: async ({ abilityParams }, { succeed, fail, delegation
|
|
28
|
+
precheck: async ({ abilityParams }, { succeed, fail, delegation }) => {
|
|
29
29
|
console.log('[@agentic-ai/vincent-ability-erc20-transfer/precheck] 🔍 Starting validation');
|
|
30
30
|
console.log('[@agentic-ai/vincent-ability-erc20-transfer/precheck] 📋 params:', {
|
|
31
31
|
abilityParams,
|
|
32
32
|
});
|
|
33
33
|
const { to, amount, tokenAddress, rpcUrl, alchemyGasSponsor, alchemyGasSponsorApiKey, alchemyGasSponsorPolicyId, } = abilityParams;
|
|
34
|
-
// Validate recipient address
|
|
35
|
-
if (!(0, helpers_1.isValidAddress)(to)) {
|
|
36
|
-
return fail({
|
|
37
|
-
error: '[@agentic-ai/vincent-ability-erc20-transfer/precheck] ❌ Invalid recipient address format',
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
// Validate amount
|
|
41
|
-
if (!(0, helpers_1.isValidAmount)(amount)) {
|
|
42
|
-
return fail({
|
|
43
|
-
error: '[@agentic-ai/vincent-ability-erc20-transfer/precheck] ❌ Invalid amount format or amount must be greater than 0',
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
// Validate token contract address
|
|
47
|
-
if (!(0, helpers_1.isValidAddress)(tokenAddress)) {
|
|
48
|
-
return fail({
|
|
49
|
-
error: '[@agentic-ai/vincent-ability-erc20-transfer/precheck] ❌ Invalid token contract address format',
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
34
|
// Validate EIP-7702 gas sponsorship
|
|
53
35
|
if (alchemyGasSponsor && (!alchemyGasSponsorApiKey || !alchemyGasSponsorPolicyId)) {
|
|
54
36
|
return fail({
|
|
@@ -65,23 +47,21 @@ exports.vincentAbility = (0, vincent_ability_sdk_1.createVincentAbility)({
|
|
|
65
47
|
const provider = new ethers_1.ethers.providers.JsonRpcProvider(rpcUrl);
|
|
66
48
|
const erc20Contract = (0, helpers_1.getErc20Contract)(provider, tokenAddress);
|
|
67
49
|
const tokenDecimals = await erc20Contract.decimals();
|
|
68
|
-
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
return fail({
|
|
72
|
-
error: '[@agentic-ai/vincent-ability-erc20-transfer/precheck] ❌ PKP public key not available',
|
|
73
|
-
});
|
|
74
|
-
}
|
|
50
|
+
console.log('[@agentic-ai/vincent-ability-erc20-transfer/precheck] 🔢 Using token decimals:', tokenDecimals);
|
|
51
|
+
const tokenAmountInSmallestUnit = ethers_1.ethers.utils.parseUnits(amount, tokenDecimals);
|
|
52
|
+
console.log('[@agentic-ai/vincent-ability-erc20-transfer/precheck] 💰 Transfer amount in smallest unit:', tokenAmountInSmallestUnit.toString());
|
|
75
53
|
// Check token balance
|
|
76
|
-
const userBalance = await erc20Contract.balanceOf(
|
|
77
|
-
|
|
54
|
+
const userBalance = await erc20Contract.balanceOf(delegation.delegatorPkpInfo.ethAddress);
|
|
55
|
+
console.log('[@agentic-ai/vincent-ability-erc20-transfer/precheck] 💰 User balance in smallest unit:', ethers_1.ethers.utils.formatUnits(userBalance, tokenDecimals));
|
|
56
|
+
if (userBalance.lt(tokenAmountInSmallestUnit)) {
|
|
78
57
|
return fail({
|
|
79
|
-
error: `[@agentic-ai/vincent-ability-erc20-transfer/precheck] ❌ Insufficient token balance. Need ${ethers_1.ethers.utils.formatUnits(
|
|
58
|
+
error: `[@agentic-ai/vincent-ability-erc20-transfer/precheck] ❌ Insufficient token balance. Need ${ethers_1.ethers.utils.formatUnits(tokenAmountInSmallestUnit, tokenDecimals)} tokens, but only have ${ethers_1.ethers.utils.formatUnits(userBalance, tokenDecimals)} tokens`,
|
|
80
59
|
});
|
|
81
60
|
}
|
|
82
61
|
// Estimate transfer gas and check there is enough
|
|
83
|
-
const estimatedGas = await erc20Contract.estimateGas.transfer(to,
|
|
84
|
-
|
|
62
|
+
const estimatedGas = await erc20Contract.estimateGas.transfer(to, tokenAmountInSmallestUnit);
|
|
63
|
+
console.log('[@agentic-ai/vincent-ability-erc20-transfer/precheck] 💰 Estimated gas:', estimatedGas.toString());
|
|
64
|
+
const nativeBalance = await provider.getBalance(delegation.delegatorPkpInfo.ethAddress);
|
|
85
65
|
if (!alchemyGasSponsor && nativeBalance.lt(estimatedGas)) {
|
|
86
66
|
return fail({
|
|
87
67
|
error: `[@agentic-ai/vincent-ability-erc20-transfer/precheck] ❌ Insufficient gas for ERC20 transfer. Need ${estimatedGas.toString()} gas, but only have ${nativeBalance.toString()} gas`,
|
|
@@ -125,28 +105,21 @@ exports.vincentAbility = (0, vincent_ability_sdk_1.createVincentAbility)({
|
|
|
125
105
|
const { chainId } = await provider.getNetwork();
|
|
126
106
|
const erc20Contract = (0, helpers_1.getErc20Contract)(provider, tokenAddress);
|
|
127
107
|
console.log('[@agentic-ai/vincent-ability-erc20-transfer/execute] ⛓️ Using Chain:', chain);
|
|
128
|
-
// Get PKP public key from delegation context
|
|
129
|
-
const pkpPublicKey = delegation.delegatorPkpInfo.publicKey;
|
|
130
|
-
if (!pkpPublicKey) {
|
|
131
|
-
throw new Error('PKP public key not available from delegation context');
|
|
132
|
-
}
|
|
133
|
-
const pkpAddress = ethers_1.ethers.utils.computeAddress(pkpPublicKey);
|
|
134
|
-
console.log('[@agentic-ai/vincent-ability-erc20-transfer/execute] 🔑 PKP wallet address:', pkpAddress);
|
|
135
108
|
// Get decimals
|
|
136
109
|
const tokenDecimals = await erc20Contract.decimals();
|
|
137
110
|
console.log('[@agentic-ai/vincent-ability-erc20-transfer/execute] 🔢 Using token decimals:', tokenDecimals);
|
|
138
111
|
// Parse amount to token units using decimals
|
|
139
|
-
const
|
|
140
|
-
console.log('[@agentic-ai/vincent-ability-erc20-transfer/execute] 💰 Transfer amount:',
|
|
112
|
+
const tokenAmountInSmallestUnit = ethers_1.ethers.utils.parseUnits(amount, tokenDecimals);
|
|
113
|
+
console.log('[@agentic-ai/vincent-ability-erc20-transfer/execute] 💰 Transfer amount in smallest unit:', tokenAmountInSmallestUnit.toString());
|
|
141
114
|
// Prepare contract call data for ERC-20 transfer
|
|
142
115
|
const contractCallData = {
|
|
143
116
|
provider,
|
|
144
|
-
pkpPublicKey,
|
|
145
|
-
callerAddress:
|
|
117
|
+
pkpPublicKey: delegation.delegatorPkpInfo.publicKey,
|
|
118
|
+
callerAddress: delegation.delegatorPkpInfo.ethAddress,
|
|
146
119
|
contractAddress: tokenAddress,
|
|
147
120
|
abi: helpers_1.ERC20_ABI,
|
|
148
121
|
functionName: 'transfer',
|
|
149
|
-
args: [to,
|
|
122
|
+
args: [to, tokenAmountInSmallestUnit],
|
|
150
123
|
chainId,
|
|
151
124
|
alchemyGasSponsor,
|
|
152
125
|
alchemyGasSponsorApiKey,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vincent-ability.js","sourceRoot":"","sources":["../../../src/lib/vincent-ability.ts"],"names":[],"mappings":";;;AAAA,2EAI2C;AAC3C,2FAAiF;AACjF,mCAAgC;AAEhC,
|
|
1
|
+
{"version":3,"file":"vincent-ability.js","sourceRoot":"","sources":["../../../src/lib/vincent-ability.ts"],"names":[],"mappings":";;;AAAA,2EAI2C;AAC3C,2FAAiF;AACjF,mCAAgC;AAEhC,uCAAwD;AACxD,+EAA0E;AAC1E,mEAA+D;AAC/D,uCAMmB;AAEnB,MAAM,eAAe,GAAG,IAAA,gDAA0B,EAAC;IACjD,mBAAmB,EAAnB,6BAAmB;IACnB,oBAAoB,EAApB,kDAAoB;IACpB,wBAAwB,EAAE;QACxB,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,QAAQ;KACjB;CACF,CAAC,CAAC;AAEU,QAAA,cAAc,GAAG,IAAA,0CAAoB,EAAC;IACjD,WAAW,EAAE,8CAAuD;IACpE,kBAAkB,EAChB,kGAA2G;IAC7G,mBAAmB,EAAnB,6BAAmB;IACnB,iBAAiB,EAAE,IAAA,iDAA2B,EAAC,CAAC,eAAe,CAAC,CAAC;IAEjE,qBAAqB,EAArB,+BAAqB;IACrB,kBAAkB,EAAlB,4BAAkB;IAElB,oBAAoB,EAApB,8BAAoB;IACpB,iBAAiB,EAAjB,2BAAiB;IAEjB,QAAQ,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;QACnE,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,kEAAkE,EAAE;YAC9E,aAAa;SACd,CAAC,CAAC;QAEH,MAAM,EACJ,EAAE,EACF,MAAM,EACN,YAAY,EACZ,MAAM,EACN,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,GAC1B,GAAG,aAAa,CAAC;QAElB,oCAAoC;QACpC,IAAI,iBAAiB,IAAI,CAAC,CAAC,uBAAuB,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC;YAClF,OAAO,IAAI,CAAC;gBACV,KAAK,EACH,kIAAkI;aACrI,CAAC,CAAC;QACL,CAAC;QAED,mBAAmB;QACnB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;gBACV,KAAK,EACH,0FAA0F;aAC7F,CAAC,CAAC;QACL,CAAC;QAED,wCAAwC;QACxC,MAAM,QAAQ,GAAG,IAAI,eAAM,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,aAAa,GAAG,IAAA,0BAAgB,EAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAE/D,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CACT,gFAAgF,EAChF,aAAa,CACd,CAAC;QAEF,MAAM,yBAAyB,GAAG,eAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CACT,4FAA4F,EAC5F,yBAAyB,CAAC,QAAQ,EAAE,CACrC,CAAC;QAEF,sBAAsB;QACtB,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CACT,yFAAyF,EACzF,eAAM,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CACrD,CAAC;QAEF,IAAI,WAAW,CAAC,EAAE,CAAC,yBAAyB,CAAC,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC;gBACV,KAAK,EAAE,4FAA4F,eAAM,CAAC,KAAK,CAAC,WAAW,CAAC,yBAAyB,EAAE,aAAa,CAAC,0BAA0B,eAAM,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,SAAS;aAC7P,CAAC,CAAC;QACL,CAAC;QAED,kDAAkD;QAClD,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,yBAAyB,CAAC,CAAC;QAC7F,OAAO,CAAC,GAAG,CACT,yEAAyE,EACzE,YAAY,CAAC,QAAQ,EAAE,CACxB,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACxF,IAAI,CAAC,iBAAiB,IAAI,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;YACzD,OAAO,IAAI,CAAC;gBACV,KAAK,EAAE,qGAAqG,YAAY,CAAC,QAAQ,EAAE,uBAAuB,aAAa,CAAC,QAAQ,EAAE,MAAM;aACzL,CAAC,CAAC;QACL,CAAC;QAED,qBAAqB;QACrB,MAAM,aAAa,GAAG;YACpB,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,IAAI;YACjB,iBAAiB,EAAE,IAAI;YACvB,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE;YACnC,YAAY,EAAE,YAAY,CAAC,QAAQ,EAAE;SACtC,CAAC;QAEF,OAAO,CAAC,GAAG,CACT,yEAAyE,EACzE,aAAa,CACd,CAAC;QACF,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CACT,qDAAqD,EACrD,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CACzC,CAAC;QACF,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,EAAE;QACnF,IAAI,CAAC;YACH,MAAM,EACJ,EAAE,EACF,MAAM,EACN,YAAY,EACZ,KAAK,EACL,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,GAC1B,GAAG,aAAa,CAAC;YAElB,OAAO,CAAC,GAAG,CACT,2FAA2F,EAC3F;gBACE,EAAE;gBACF,MAAM;gBACN,YAAY;gBACZ,KAAK;aACN,CACF,CAAC;YAEF,IAAI,iBAAiB,IAAI,CAAC,CAAC,uBAAuB,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC;gBAClF,OAAO,IAAI,CAAC;oBACV,KAAK,EACH,iIAAiI;iBACpI,CAAC,CAAC;YACL,CAAC;YAED,IAAI,QAA0C,CAAC;YAC/C,IAAI,CAAC;gBACH,QAAQ,GAAG,IAAI,eAAM,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAC1F,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CACX,sEAAsE,EACtE,KAAK,CACN,CAAC;gBACF,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;YAClF,CAAC;YACD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;YAChD,MAAM,aAAa,GAAG,IAAA,0BAAgB,EAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAE/D,OAAO,CAAC,GAAG,CAAC,sEAAsE,EAAE,KAAK,CAAC,CAAC;YAE3F,eAAe;YACf,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CACT,+EAA+E,EAC/E,aAAa,CACd,CAAC;YAEF,6CAA6C;YAC7C,MAAM,yBAAyB,GAAG,eAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YACjF,OAAO,CAAC,GAAG,CACT,2FAA2F,EAC3F,yBAAyB,CAAC,QAAQ,EAAE,CACrC,CAAC;YAEF,iDAAiD;YACjD,MAAM,gBAAgB,GAAG;gBACvB,QAAQ;gBACR,YAAY,EAAE,UAAU,CAAC,gBAAgB,CAAC,SAAS;gBACnD,aAAa,EAAE,UAAU,CAAC,gBAAgB,CAAC,UAAU;gBACrD,eAAe,EAAE,YAAY;gBAC7B,GAAG,EAAE,mBAAS;gBACd,YAAY,EAAE,UAAU;gBACxB,IAAI,EAAE,CAAC,EAAE,EAAE,yBAAyB,CAAC;gBACrC,OAAO;gBACP,iBAAiB;gBACjB,uBAAuB;gBACvB,yBAAyB;aAC1B,CAAC;YAEF,OAAO,CAAC,GAAG,CACT,gFAAgF,EAChF,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAC1C,CAAC;YAEF,OAAO,CAAC,GAAG,CACT,qFAAqF,CACtF,CAAC;YAEF,6HAA6H;YAC7H,MAAM,mBAAmB,GAAG,MAAM,IAAA,+CAAqB,EACrD,eAAe,EACf,sDAAsD,CACvD,CAAC;YAEF,OAAO,CAAC,GAAG,CACT,+EAA+E,EAC/E,mBAAmB,CACpB,CAAC;YAEF,4CAA4C;YAC5C,MAAM,MAAM,GAAG,MAAM,IAAA,oCAAgB,EAAC,gBAAgB,CAAC,CAAC;YAExD,OAAO,CAAC,GAAG,CACT,yFAAyF,EACzF,MAAM,CACP,CAAC;YAEF,OAAO,CAAC,GAAG,CACT,mFAAmF,EACnF;gBACE,MAAM;gBACN,EAAE;gBACF,MAAM;gBACN,YAAY;aACb,CACF,CAAC;YAEF,OAAO,OAAO,CAAC;gBACb,MAAM;gBACN,EAAE;gBACF,MAAM;gBACN,YAAY;gBACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,+EAA+E,EAC/E,KAAK,CACN,CAAC;YAEF,kEAAkE;YAClE,IAAI,YAAY,GACd,+EAA+E,CAAC;YAElF,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,YAAY,GAAG,0DAA0D,KAAK,CAAC,OAAO,EAAE,CAAC;YAC3F,CAAC;YAED,OAAO,IAAI,CAAC;gBACV,KAAK,EAAE,YAAY;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lit-protocol/vincent-ability-erc20-transfer",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -9,15 +9,15 @@
|
|
|
9
9
|
"ethers": "^5.8.0",
|
|
10
10
|
"tslib": "2.8.1",
|
|
11
11
|
"zod": "^3.25.64",
|
|
12
|
-
"@lit-protocol/vincent-ability-sdk": "
|
|
13
|
-
"@lit-protocol/vincent-policy-send-counter": "0.0
|
|
12
|
+
"@lit-protocol/vincent-ability-sdk": "2.1.0",
|
|
13
|
+
"@lit-protocol/vincent-policy-send-counter": "0.2.0"
|
|
14
14
|
},
|
|
15
15
|
"peerDependencies": {
|
|
16
|
-
"@lit-protocol/vincent-app-sdk": "^
|
|
16
|
+
"@lit-protocol/vincent-app-sdk": "^2.1.0"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"esbuild": "^0.19.12",
|
|
20
|
-
"esbuild-plugin-polyfill-node": "^0.3.0",
|
|
20
|
+
"@lit-protocol/esbuild-plugin-polyfill-node": "^0.3.0",
|
|
21
21
|
"ipfs-only-hash": "^4.0.0"
|
|
22
22
|
},
|
|
23
23
|
"main": "./dist/src/index.js",
|