Skip to content

Commit

Permalink
✨ feat(para): update Para pregen wallet flow with userShare
Browse files Browse the repository at this point in the history
Changes:
- Refactored createParaPregenWallet to remove agent-specific userShare mapping
- Updated useParaPregenWallet to accept userShare instead of email
- Modified action and tool schemas to use userShare
- Removed unnecessary agent method modifications
- Updated input handling in Para-related tools and actions
  • Loading branch information
uratmangun committed Mar 2, 2025
1 parent c768c32 commit e20f034
Show file tree
Hide file tree
Showing 11 changed files with 32 additions and 39 deletions.
3 changes: 2 additions & 1 deletion src/actions/para/createParaPregenWallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ const createParaPregenWalletAction: Action = {
status: "success",
message: "Pre-generated wallet created successfully.",
address: "0xdasdnas",
walletId:"1234567890"
walletId:"1234567890",
userShare:"sdfsdfsdfsd"
},
explanation: "Create a pregen wallet for Para",
},
Expand Down
15 changes: 7 additions & 8 deletions src/actions/para/useParaPregenWallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,34 +9,33 @@ const useParaPregenWalletAction: Action = {

],
description:
"Create a pregen wallet for Para",
"Use a pregen wallet created with the CREATE_PARA_PREGEN_WALLET action",
examples: [
[
{
input: {
email: "[email protected]"
userShare: "dawdaawdaw",
},
output: {
status: "success",
message: "Pre-generated wallet used successfully.",
address: "0xdasdnas",
email:"[email protected]"
address: "0xdasdnas"
},
explanation: "Use a pregen wallet created with the CREATE_PARA_PREGEN_WALLET action",
},
],
],
schema: z.object({
email: z
userShare: z
.string()
.describe("The user share to use the wallet for")
.describe("The user share to use the wallet for"),
}),
handler: async ( agent: SolanaAgentKit , input: Record<string, any>) => {
try {


const { email } = input;
const response = await agent.useParaPregenWallet(email);
const { userShare } = input;
const response = await agent.useParaPregenWallet(userShare);

return {
status: "success",
Expand Down
2 changes: 1 addition & 1 deletion src/agent/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1284,7 +1284,7 @@ export class SolanaAgentKit {
return await getTrendingTokens(this);
}
async createParaPregenWallet(email: string) {
return await createParaPregenWallet(this,email);
return await createParaPregenWallet(email);
}
async getParaPregenWallets(email: string) {
return await getParaPregenWallets(email);
Expand Down
4 changes: 2 additions & 2 deletions src/langchain/para/claim_para_pregen_wallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export class SolanaClaimParaPregenWalletTool extends Tool {
name = "solana_claim_para_pregen_wallet";
description = `Claim a pre-generated wallet for Para.
Inputs ( input is a JSON string ):
userShare: string, eg "wadawdawdajbjvbs" (required)`;
email: string, eg "wadawdawdajbjvbs" (required)`;

constructor(private solanaKit: SolanaAgentKit) {
super();
Expand All @@ -14,7 +14,7 @@ export class SolanaClaimParaPregenWalletTool extends Tool {
protected async _call(input: string): Promise<string> {
try {
const inputFormat = JSON.parse(input);
const response = await this.solanaKit.claimParaPregenWallet(inputFormat.userShare);
const response = await this.solanaKit.claimParaPregenWallet(inputFormat.email);

return JSON.stringify({
status: "success",
Expand Down
4 changes: 2 additions & 2 deletions src/langchain/para/create_para_pregen_wallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ export class SolanaCreateParaPregenWalletTool extends Tool {

protected async _call(input: string): Promise<string> {
try {

const response = await this.solanaKit.createParaPregenWallet(input);
const inputFormat = JSON.parse(input);
const response = await this.solanaKit.createParaPregenWallet(inputFormat.email);

return JSON.stringify({
status: "success",
Expand Down
4 changes: 2 additions & 2 deletions src/langchain/para/get_para_pregen_wallets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ export class SolanaGetParaPregenWalletsTool extends Tool {

protected async _call(input: string): Promise<string> {
try {

const response = await this.solanaKit.getParaPregenWallets(input);
const inputFormat = JSON.parse(input);
const response = await this.solanaKit.getParaPregenWallets(inputFormat.email);

return JSON.stringify({
status: "success",
Expand Down
3 changes: 2 additions & 1 deletion src/langchain/para/use_para_pregen_wallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ export class SolanaUseParaPregenWalletTool extends Tool {
name = "solana_use_para_pregen_wallet";
description = `Use a pre-generated wallet for Para.
Inputs ( input is a JSON string ):
userShare: string, eg "wadawdawdajbjvbs" (required)`;
userShare: string, eg "wadawdawdajbjvbs" (required)
`;

constructor(private solanaKit: SolanaAgentKit) {
super();
Expand Down
9 changes: 3 additions & 6 deletions src/tools/para/create_para_pregen_wallet.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { Para as ParaServer, Environment, WalletType } from "@getpara/server-sdk";
import type{ SolanaAgentKit } from "../../index";


export async function createParaPregenWallet(agent: SolanaAgentKit,email: string){

export async function createParaPregenWallet(email: string){
try {

if (!email) {
Expand Down Expand Up @@ -33,10 +33,7 @@ export async function createParaPregenWallet(agent: SolanaAgentKit,email: string
if (!userShare) {
throw new Error("Failed to get user share");
}
if (!(agent as any).userShareMap) {
(agent as any).userShareMap = new Map();
}
(agent as any).userShareMap.set(email, userShare);


return{
message: "Pre-generated wallet created successfully.",
Expand Down
2 changes: 1 addition & 1 deletion src/tools/para/get_para_pregen_wallets.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Para as ParaServer, Environment } from "@getpara/server-sdk";
import type { WalletEntity } from "@getpara/server-sdk";



export async function getParaPregenWallets(email:string) {
Expand Down
9 changes: 3 additions & 6 deletions src/tools/para/update_para_pregen_wallet.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Para as ParaServer, Environment, WalletType } from "@getpara/server-sdk";
import { Para as ParaServer, Environment } from "@getpara/server-sdk";


export async function updateParaPregenWallet(email: string,walletId:string){
Expand All @@ -19,16 +19,13 @@ export async function updateParaPregenWallet(email: string,walletId:string){
if (walletExists) {
throw new Error("A pre-generated wallet already exists for this user. Consider using that wallet or choose a different email.");
}

await para.updatePregenWalletIdentifier({
walletId: walletId,
newPregenIdentifier: email,
newPregenIdentifierType: "EMAIL",
});







return{
Expand Down
16 changes: 7 additions & 9 deletions src/tools/para/use_para_pregen_wallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ class ParaSolanaWeb3SignerAdapter extends ParaSolanaWeb3Signer {
}
}

export async function useParaPregenWallet( agent: SolanaAgentKit,email: string){
export async function useParaPregenWallet( agent: SolanaAgentKit,userShare: string){
try {

if (!email) {
throw new Error("Provide `email` in the request body to create a pre-generated wallet.");
if (!userShare) {
throw new Error("Provide `userShare` in the request body to create a pre-generated wallet.");
}

const PARA_API_KEY = process.env.PARA_API_KEY;
Expand All @@ -30,15 +30,12 @@ export async function useParaPregenWallet( agent: SolanaAgentKit,email: string){

const para = new ParaServer(Environment.BETA, PARA_API_KEY);

const userShare = (agent as any).userShareMap.get(email);
if (!userShare) {
throw new Error("User share not found for the provided email.");
}

await para.setUserShare(userShare);

// Create the Para Solana Signer with our adapter
const solanaSigner = new ParaSolanaWeb3SignerAdapter(para, agent.connection);

// Convert address to PublicKey and set wallet properties
agent.wallet_address = solanaSigner.publicKey;
agent.wallet = solanaSigner as unknown as Keypair;
Expand Down Expand Up @@ -70,7 +67,8 @@ export async function useParaPregenWallet( agent: SolanaAgentKit,email: string){
return {
message: "Pre-generated wallet used successfully.",
address: solanaSigner.address,
email: email


};
} catch (error: any) {
throw new Error(`use pregen wallet failed ${error.message}`);
Expand Down

0 comments on commit e20f034

Please sign in to comment.