|
@@ -0,0 +1,64 @@
|
|
|
+import {
|
|
|
+ Connection,
|
|
|
+ Keypair,
|
|
|
+ LAMPORTS_PER_SOL,
|
|
|
+ PublicKey,
|
|
|
+ sendAndConfirmTransaction,
|
|
|
+ SystemProgram,
|
|
|
+ Transaction,
|
|
|
+ TransactionInstruction,
|
|
|
+} from '@solana/web3.js';
|
|
|
+import * as buffer_layout from "buffer-layout";
|
|
|
+
|
|
|
+
|
|
|
+function createKeypairFromFile(path: string): Keypair {
|
|
|
+ return Keypair.fromSecretKey(
|
|
|
+ Buffer.from(JSON.parse(require('fs').readFileSync(path, "utf-8")))
|
|
|
+ )
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
+describe("transfer-sol", () => {
|
|
|
+
|
|
|
+ async function getBalances(payerPubkey: PublicKey, recipientPubkey: PublicKey, timeframe: string) {
|
|
|
+ let payerBalance = await connection.getBalance(payerPubkey);
|
|
|
+ let recipientBalance = await connection.getBalance(recipientPubkey);
|
|
|
+ console.log(`${timeframe} balances:`);
|
|
|
+ console.log(` Payer: ${payerBalance}`);
|
|
|
+ console.log(` Recipient: ${recipientBalance}`);
|
|
|
+ };
|
|
|
+
|
|
|
+ const connection = new Connection(`http://localhost:8899`, 'confirmed');
|
|
|
+ const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
|
|
|
+ const program = createKeypairFromFile('./program/target/so/program-keypair.json');
|
|
|
+
|
|
|
+ it("Transfer some SOL", async () => {
|
|
|
+
|
|
|
+ let recipientKeypair = Keypair.generate();
|
|
|
+ let transferAmount = 1 * LAMPORTS_PER_SOL;
|
|
|
+
|
|
|
+ await getBalances(payer.publicKey, recipientKeypair.publicKey, "Beginning");
|
|
|
+
|
|
|
+ let data = Buffer.alloc(8) // 8 bytes
|
|
|
+ buffer_layout.ns64("value").encode(transferAmount, data);
|
|
|
+
|
|
|
+ let ix = new TransactionInstruction({
|
|
|
+ keys: [
|
|
|
+ {pubkey: payer.publicKey, isSigner: true, isWritable: true},
|
|
|
+ {pubkey: recipientKeypair.publicKey, isSigner: false, isWritable: true},
|
|
|
+ {pubkey: SystemProgram.programId, isSigner: false, isWritable: false}
|
|
|
+ ],
|
|
|
+ programId: program.publicKey,
|
|
|
+ data: data,
|
|
|
+ });
|
|
|
+
|
|
|
+ await sendAndConfirmTransaction(
|
|
|
+ connection,
|
|
|
+ new Transaction().add(ix),
|
|
|
+ [payer]
|
|
|
+ );
|
|
|
+
|
|
|
+ await getBalances(payer.publicKey, recipientKeypair.publicKey, "Resulting");
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|