@velas/account-agent
Version:
sdk
120 lines (105 loc) • 2.75 kB
JavaScript
import BN from 'bn.js';
import { Enum, Assignable, SCHEMA } from './solana-borsh';
export class Vaccount extends Assignable {}
export class State extends Assignable {}
export class Initialized extends Assignable {}
export class Frozen extends Assignable {}
export class TokenAccount extends Assignable {
static tokenAccount(pubkey, dailyLimit) {
return new TokenAccount({ pubkey, dailyLimit });
}
}
export class VPublicKey extends Assignable {
toPublicKey() {
return new PublicKey(this.bytes);
};
static fromBuffer(publicKey) {
return new VPublicKey({ bytes: Uint8Array.from(publicKey.toBuffer()) });
};
};
export class OperationalStruct extends Assignable {
static len() {
return 134;
}
}
export class ExternalProgram extends Assignable {
static len() {
return 33;
}
}
export class ExternalToken extends Assignable {
static len() {
return 57;
}
static default() {
return new ExternalToken({
account: TokenAccount.tokenAccount(VPublicKey.fromPublicKey(SystemProgram.programId), new BN(0)),
lastTransfer: new BN(0),
remainderLimit: new BN(0),
referenceCount: new BN(0),
});
}
}
SCHEMA.set(Vaccount, {
kind: 'struct',
field: 'struct',
fields: [
['version', 'u8'],
['owners', [32 * 3, VPublicKey]],
['genesis_seed_key', VPublicKey],
['operational_storage_nonce', 'u16'],
['token_storage_nonce', 'u16'],
['programs_storage_nonce', 'u16'],
],
});
SCHEMA.set(VPublicKey, {
kind: 'struct',
fields: [['bytes', [32]]],
});
SCHEMA.set(ExternalProgram, {
kind: 'struct',
field: 'struct',
fields: [
['programId', VPublicKey],
['referenceCount', 'u8'],
],
});
SCHEMA.set(ExternalToken, {
kind: 'struct',
field: 'struct',
fields: [
['account', TokenAccount],
['lastTransfer', 'u64'],
['remainderLimit', 'u64'],
['referenceCount', 'u8'],
],
});
SCHEMA.set(OperationalStruct, {
kind: 'struct',
field: 'struct',
fields: [
['pubkey', VPublicKey],
['state', State],
['agent_type', [32]],
['scopes', [4]],
['tokens_indices', [32]],
['external_programs_indices', [32]],
['is_master_key', 'u8'],
],
});
SCHEMA.set(TokenAccount, {
kind: 'struct',
fields: [
['pubkey', VPublicKey],
['dailyLimit', 'u64'],
],
});
SCHEMA.set(Initialized, { kind: 'struct', fields: [] });
SCHEMA.set(Frozen, { kind: 'struct', fields: [] });
SCHEMA.set(State, {
kind: 'enum',
values: [
['initialize', Initialized],
['frozen', Frozen],
],
});