1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- import {
- Connection,
- Keypair,
- PublicKey,
- sendAndConfirmTransaction,
- SystemProgram,
- Transaction,
- TransactionInstruction,
- } from '@solana/web3.js';
- import * as borsh from "borsh";
- import { Buffer } from "buffer";
- function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
- )
- };
- describe("Account Data!", () => {
- const connection = new Connection(`http://localhost:8899`, 'confirmed');
- const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
- const PROGRAM_ID: PublicKey = new PublicKey(
- "BCw7MQWBugruuYgno5crGUGFNufqGJbPpzZevhRRRQAu"
- );
- class Assignable {
- constructor(properties) {
- Object.keys(properties).map((key) => {
- return (this[key] = properties[key]);
- });
- };
- };
- class AddressInfo extends Assignable {
- toBuffer() { return Buffer.from(borsh.serialize(AddressInfoSchema, this)) }
-
- static fromBuffer(buffer: Buffer) {
- return borsh.deserialize(AddressInfoSchema, AddressInfo, buffer);
- };
- };
- const AddressInfoSchema = new Map([
- [ AddressInfo, {
- kind: 'struct',
- fields: [
- ['name', 'string'],
- ['house_number', 'u8'],
- ['street', 'string'],
- ['city', 'string'],
- ],
- }]
- ]);
- const addressInfoAccount = Keypair.generate();
- it("Create the address info account", async () => {
- console.log(`Payer Address : ${payer.publicKey}`);
- console.log(`Address Info Acct : ${addressInfoAccount.publicKey}`);
- let ix = new TransactionInstruction({
- keys: [
- {pubkey: addressInfoAccount.publicKey, isSigner: true, isWritable: true},
- {pubkey: payer.publicKey, isSigner: true, isWritable: true},
- {pubkey: SystemProgram.programId, isSigner: false, isWritable: false}
- ],
- programId: PROGRAM_ID,
- data: (
- new AddressInfo({
- name: "Joe C",
- house_number: 136,
- street: "Mile High Dr.",
- city: "Solana Beach",
- })
- ).toBuffer(),
- });
- await sendAndConfirmTransaction(
- connection,
- new Transaction().add(ix),
- [payer, addressInfoAccount]
- );
- });
- it("Read the new account's data", async () => {
- const accountInfo = await connection.getAccountInfo(addressInfoAccount.publicKey);
- const readAddressInfo = AddressInfo.fromBuffer(accountInfo.data);
- console.log(`Name : ${readAddressInfo.name}`);
- console.log(`House Num: ${readAddressInfo.house_number}`);
- console.log(`Street : ${readAddressInfo.street}`);
- console.log(`City : ${readAddressInfo.city}`);
- });
- });
|