@ghostspeak/sdk
Version:
TypeScript SDK for GhostSpeak AI Agent Commerce Protocol - Production Ready Beta
284 lines (282 loc) • 7.42 kB
JavaScript
import { getProgramDerivedAddress, getBytesEncoder, getAddressEncoder, getUtf8Encoder } from '@solana/kit';
// src/utils/pda.ts
async function deriveAgentPdaOriginal(programId, owner, agentId) {
const [address] = await getProgramDerivedAddress({
programAddress: programId,
seeds: [
getBytesEncoder().encode(new Uint8Array([97, 103, 101, 110, 116])),
// 'agent'
getAddressEncoder().encode(owner),
// Use raw UTF-8 bytes to match smart contract: agent_id.as_bytes()
getUtf8Encoder().encode(agentId)
]
});
return address;
}
async function deriveAgentPda(params) {
const [address, bump] = await getProgramDerivedAddress({
programAddress: params.programAddress,
seeds: [
getBytesEncoder().encode(new Uint8Array([97, 103, 101, 110, 116])),
// 'agent'
getAddressEncoder().encode(params.owner),
getUtf8Encoder().encode(params.agentId)
]
});
return [address, bump];
}
async function deriveA2ASessionPdaOriginal(programId, creator) {
const [address] = await getProgramDerivedAddress({
programAddress: programId,
seeds: [
getBytesEncoder().encode(new Uint8Array([
97,
50,
97,
95,
115,
101,
115,
115,
105,
111,
110
])),
// 'a2a_session'
getAddressEncoder().encode(creator)
]
});
return address;
}
async function deriveA2ASessionPda(params) {
const result = await getProgramDerivedAddress({
programAddress: params.programAddress,
seeds: [
getBytesEncoder().encode(new Uint8Array([
97,
50,
97,
95,
115,
101,
115,
115,
105,
111,
110
])),
// 'a2a_session'
getAddressEncoder().encode(params.initiator)
]
});
return [result[0], result[1]];
}
async function deriveA2AMessagePda(programId, session, sessionCreatedAt) {
const createdAtBytes = new Uint8Array(8);
const dataView = new DataView(createdAtBytes.buffer);
dataView.setBigInt64(0, sessionCreatedAt, true);
const [address] = await getProgramDerivedAddress({
programAddress: programId,
seeds: [
getBytesEncoder().encode(new Uint8Array([
97,
50,
97,
95,
109,
101,
115,
115,
97,
103,
101
])),
// 'a2a_message'
getAddressEncoder().encode(session),
createdAtBytes
// Fixed: use raw little-endian bytes instead of U64 encoder
]
});
return address;
}
async function deriveUserRegistryPda(programId, signer) {
const [address] = await getProgramDerivedAddress({
programAddress: programId,
seeds: [
getBytesEncoder().encode(new Uint8Array([
117,
115,
101,
114,
95,
114,
101,
103,
105,
115,
116,
114,
121
])),
// 'user_registry'
getAddressEncoder().encode(signer)
]
});
return address;
}
async function deriveAgentVerificationPda(programId, agent, verifier) {
const [address] = await getProgramDerivedAddress({
programAddress: programId,
seeds: [
getBytesEncoder().encode(new Uint8Array([
97,
103,
101,
110,
116,
95,
118,
101,
114,
105,
102,
105,
99,
97,
116,
105,
111,
110
])),
// 'agent_verification'
getAddressEncoder().encode(agent),
getAddressEncoder().encode(verifier)
]
});
return address;
}
async function deriveAgentTreeConfigPda(programId, signer) {
const [address] = await getProgramDerivedAddress({
programAddress: programId,
seeds: [
getBytesEncoder().encode(new Uint8Array([
97,
103,
101,
110,
116,
95,
116,
114,
101,
101,
95,
99,
111,
110,
102,
105,
103
])),
// 'agent_tree_config'
getAddressEncoder().encode(signer)
]
});
return address;
}
async function findProgramDerivedAddress(seeds, programId) {
const encodedSeeds = seeds.map((seed) => {
if (typeof seed === "string") {
return getUtf8Encoder().encode(seed);
} else if (typeof seed === "object" && seed.constructor === Uint8Array) {
return seed;
} else {
return getAddressEncoder().encode(seed);
}
});
const result = await getProgramDerivedAddress({
programAddress: programId,
seeds: encodedSeeds
});
return [result[0], result[1]];
}
async function deriveEscrowPDAOriginal(workOrder, programId) {
const seeds = [
getBytesEncoder().encode(new Uint8Array([101, 115, 99, 114, 111, 119])),
// 'escrow'
getAddressEncoder().encode(workOrder)
];
const result = await getProgramDerivedAddress({
programAddress: programId,
seeds
});
return [result[0], result[1]];
}
async function deriveEscrowPDA(params) {
const seeds = [
getBytesEncoder().encode(new Uint8Array([101, 115, 99, 114, 111, 119])),
// 'escrow'
getUtf8Encoder().encode(params.escrowId)
];
const result = await getProgramDerivedAddress({
programAddress: params.programAddress,
seeds
});
return [result[0], result[1]];
}
async function deriveEscrowPda(programId, buyer, seller, nonce) {
const nonceBytes = new Uint8Array(8);
const dataView = new DataView(nonceBytes.buffer);
dataView.setUint32(0, nonce, true);
const [address] = await getProgramDerivedAddress({
programAddress: programId,
seeds: [
getBytesEncoder().encode(new Uint8Array([101, 115, 99, 114, 111, 119])),
// 'escrow'
getAddressEncoder().encode(buyer),
getAddressEncoder().encode(seller),
nonceBytes.slice(0, 4)
// Only use 4 bytes for the nonce
]
});
return address;
}
async function deriveTokenAccountPda(wallet, mint) {
const ASSOCIATED_TOKEN_PROGRAM_ID = "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL";
const TOKEN_PROGRAM_ID = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
const [address] = await getProgramDerivedAddress({
programAddress: ASSOCIATED_TOKEN_PROGRAM_ID,
seeds: [
getAddressEncoder().encode(wallet),
getAddressEncoder().encode(TOKEN_PROGRAM_ID),
getAddressEncoder().encode(mint)
]
});
return address;
}
async function deriveMessagePda(programId, channel, nonce) {
const nonceBytes = new Uint8Array(4);
const dataView = new DataView(nonceBytes.buffer);
dataView.setUint32(0, nonce, true);
const [address] = await getProgramDerivedAddress({
programAddress: programId,
seeds: [
getBytesEncoder().encode(new Uint8Array([
109,
101,
115,
115,
97,
103,
101
// 'message'
])),
getAddressEncoder().encode(channel),
nonceBytes
]
});
return address;
}
export { deriveA2AMessagePda, deriveA2ASessionPda, deriveA2ASessionPdaOriginal, deriveAgentPda, deriveAgentPdaOriginal, deriveAgentTreeConfigPda, deriveAgentVerificationPda, deriveEscrowPDA, deriveEscrowPDAOriginal, deriveEscrowPda, deriveMessagePda, deriveTokenAccountPda, deriveUserRegistryPda, findProgramDerivedAddress };
//# sourceMappingURL=chunk-BF3IQ35I.js.map
//# sourceMappingURL=chunk-BF3IQ35I.js.map