@solana/spl-name-service
Version:
SPL Name Service JavaScript API
200 lines • 5.24 kB
JavaScript
import { PublicKey, TransactionInstruction } from '@solana/web3.js';
import { Numberu32 } from './utils';
export function createInstruction(nameProgramId, systemProgramId, nameKey, nameOwnerKey, payerKey, hashed_name, lamports, space, nameClassKey, nameParent, nameParentOwner) {
const buffers = [
Buffer.from(Int8Array.from([0])),
new Numberu32(hashed_name.length).toBuffer(),
hashed_name,
lamports.toBuffer(),
space.toBuffer(),
];
const data = Buffer.concat(buffers);
const keys = [
{
pubkey: systemProgramId,
isSigner: false,
isWritable: false,
},
{
pubkey: payerKey,
isSigner: true,
isWritable: true,
},
{
pubkey: nameKey,
isSigner: false,
isWritable: true,
},
{
pubkey: nameOwnerKey,
isSigner: false,
isWritable: false,
},
];
if (nameClassKey) {
keys.push({
pubkey: nameClassKey,
isSigner: true,
isWritable: false,
});
}
else {
keys.push({
pubkey: new PublicKey(Buffer.alloc(32)),
isSigner: false,
isWritable: false,
});
}
if (nameParent) {
keys.push({
pubkey: nameParent,
isSigner: false,
isWritable: false,
});
}
else {
keys.push({
pubkey: new PublicKey(Buffer.alloc(32)),
isSigner: false,
isWritable: false,
});
}
if (nameParentOwner) {
keys.push({
pubkey: nameParentOwner,
isSigner: true,
isWritable: false,
});
}
return new TransactionInstruction({
keys,
programId: nameProgramId,
data,
});
}
export function updateInstruction(nameProgramId, nameAccountKey, offset, input_data, nameUpdateSigner, parentNameKey) {
const buffers = [
Buffer.from(Int8Array.from([1])),
offset.toBuffer(),
new Numberu32(input_data.length).toBuffer(),
input_data,
];
const data = Buffer.concat(buffers);
const keys = [
{
pubkey: nameAccountKey,
isSigner: false,
isWritable: true,
},
{
pubkey: nameUpdateSigner,
isSigner: true,
isWritable: false,
},
];
if (parentNameKey) {
keys.push({
pubkey: parentNameKey,
isSigner: false,
isWritable: false,
});
}
return new TransactionInstruction({
keys,
programId: nameProgramId,
data,
});
}
export function transferInstruction(nameProgramId, nameAccountKey, newOwnerKey, currentNameOwnerKey, nameClassKey, nameParent) {
const buffers = [Buffer.from(Int8Array.from([2])), newOwnerKey.toBuffer()];
const data = Buffer.concat(buffers);
const keys = [
{
pubkey: nameAccountKey,
isSigner: false,
isWritable: true,
},
{
pubkey: currentNameOwnerKey,
isSigner: true,
isWritable: false,
},
];
if (nameClassKey) {
keys.push({
pubkey: nameClassKey,
isSigner: true,
isWritable: false,
});
}
if (nameParent) {
keys.push({
pubkey: nameParent,
isSigner: false,
isWritable: false,
});
}
return new TransactionInstruction({
keys,
programId: nameProgramId,
data,
});
}
export function deleteInstruction(nameProgramId, nameAccountKey, refundTargetKey, nameOwnerKey) {
const buffers = [Buffer.from(Int8Array.from([3]))];
const data = Buffer.concat(buffers);
const keys = [
{
pubkey: nameAccountKey,
isSigner: false,
isWritable: true,
},
{
pubkey: nameOwnerKey,
isSigner: true,
isWritable: false,
},
{
pubkey: refundTargetKey,
isSigner: false,
isWritable: true,
},
];
return new TransactionInstruction({
keys,
programId: nameProgramId,
data,
});
}
export function reallocInstruction(nameProgramId, systemProgramId, payerKey, nameAccountKey, nameOwnerKey, space) {
const buffers = [Buffer.from(Int8Array.from([4])), space.toBuffer()];
const data = Buffer.concat(buffers);
const keys = [
{
pubkey: systemProgramId,
isSigner: false,
isWritable: false,
},
{
pubkey: payerKey,
isSigner: true,
isWritable: true,
},
{
pubkey: nameAccountKey,
isSigner: false,
isWritable: true,
},
{
pubkey: nameOwnerKey,
isSigner: true,
isWritable: false,
},
];
return new TransactionInstruction({
keys,
programId: nameProgramId,
data,
});
}
//# sourceMappingURL=instructions.js.map