Send Serial Data to Program - First Time
Wed Mar 22 2023 19:11:46 GMT+0000 (Coordinated Universal Time)
Saved by @luisjdominguezp #typescript
import * as borsh from 'borsh';
import * as web3 from "@solana/web3.js";
import * as BufferLayout from "@solana/buffer-layout";
//const BN = require("bn.js");
import {Buffer} from "buffer";
/**
* The public key of the account we are saying hello to
*/
let greetedPubkey: web3.PublicKey;
/**
* The state of a greeting account managed by the hello world program
*/
class GreetingAccount {
counter = 0;
constructor(fields: {counter: number} | undefined = undefined) {
if (fields) {
this.counter = fields.counter;
}
}
}
const GreetingSchema = new Map([
[GreetingAccount, {kind: 'struct', fields: [['counter', 'u32']]}],
]);
const GREETING_SIZE = borsh.serialize(
GreetingSchema,
new GreetingAccount(),
).length;
const connection = new web3.Connection(web3.clusterApiUrl("devnet"));
async function main(){
//pays for the transaction (message)
const key: Uint8Array = Uint8Array.from([PRIVATE KEY DEL QUE PAGA]);
/*const data_to_send: Buffer = Buffer.from(
Uint8Array.of(0, ...new BN(10).toArray("le", 8)
));
const data_b = borsh.serialize(
GreetingSchema,
new GreetingAccount(),
)*/
const layout = BufferLayout.struct([BufferLayout.u32("counter")])
let data: Buffer = Buffer.alloc(layout.span);
layout.encode({counter:3}, data);
const signer: web3.Keypair = web3.Keypair.fromSecretKey(key);
let programId: web3.PublicKey = new web3.PublicKey("PROGRAM-ID");
const GREETING_SEED = 'hello 42';
greetedPubkey = await web3.PublicKey.createWithSeed(
signer.publicKey,
GREETING_SEED,
programId,
);
console.log(greetedPubkey.toBase58(), 'has been grenerated');
//greetedPubkey = new web3.PublicKey("HV32BHyveh4joMrhkSfmsbTBEMZbJ8qoJg4zWJz5eTAP");
let fees = 0;
const lamports = await connection.getMinimumBalanceForRentExemption(
GREETING_SIZE,
);
//This creteAccount with Seed only first time
const transaction = new web3.Transaction()
.add(
web3.SystemProgram.createAccountWithSeed({
fromPubkey: signer.publicKey,
basePubkey: signer.publicKey,
seed: GREETING_SEED,
newAccountPubkey: greetedPubkey,
lamports,
space: GREETING_SIZE,
programId,
}),
);
transaction.add(
new web3.TransactionInstruction({
keys: [
{pubkey: greetedPubkey, isSigner: false, isWritable: true}],
programId,
data: data
})
);
await web3.sendAndConfirmTransaction(connection, transaction, [signer])
.then((sig)=> {
console.log("sig: {}", sig);
});
reportGreetings();
}
async function reportGreetings(): Promise<void> {
const accountInfo = await connection.getAccountInfo(greetedPubkey);
if (accountInfo === null) {
throw 'Error: cannot find the greeted account';
}
const greeting = borsh.deserialize(
GreetingSchema,
GreetingAccount,
accountInfo.data,
);
console.log(greetedPubkey.toBase58(),
'has been greeted',
Number(greeting.counter),
'time(s)',
);
}
main();
Solana con generación de clave



Comments