Send Serial Data to Program - Sin generación de clave
Wed Mar 29 2023 21:00:51 GMT+0000 (Coordinated Universal Time)
Saved by @luisjdominguezp #bash
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:4}, 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("PUBLIC KEY ASOCIADA AL PROGRAM ID punto anterior"); 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 }) );*/ const transaction2 = new web3.Transaction().add( new web3.TransactionInstruction({ keys: [ {pubkey: greetedPubkey, isSigner: false, isWritable: true}], programId, data: data }) ); await web3.sendAndConfirmTransaction(connection, transaction2, [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();
Comments