99 SolanaRpcSubscriptionsApi ,
1010 TransactionMessageWithBlockhashLifetime ,
1111 TransactionMessageWithFeePayer ,
12- TransactionPlanExecutor ,
12+ TransactionPlan ,
13+ TransactionPlanResult ,
1314 TransactionPlanner ,
1415 TransactionSigner ,
1516 airdropFactory ,
@@ -32,22 +33,47 @@ import {
3233} from '@solana/kit' ;
3334import {
3435 TOKEN_PROGRAM_ADDRESS ,
36+ findAssociatedTokenPda ,
3537 getInitializeAccountInstruction ,
3638 getInitializeMintInstruction ,
3739 getMintSize ,
40+ getMintToATAInstructionPlan ,
3841 getMintToInstruction ,
3942 getTokenSize ,
4043} from '../src' ;
4144
4245type Client = {
4346 rpc : Rpc < SolanaRpcApi > ;
4447 rpcSubscriptions : RpcSubscriptions < SolanaRpcSubscriptionsApi > ;
48+ sendTransactionPlan : (
49+ transactionPlan : TransactionPlan
50+ ) => Promise < TransactionPlanResult > ;
4551} ;
4652
4753export const createDefaultSolanaClient = ( ) : Client => {
4854 const rpc = createSolanaRpc ( 'http://127.0.0.1:8899' ) ;
4955 const rpcSubscriptions = createSolanaRpcSubscriptions ( 'ws://127.0.0.1:8900' ) ;
50- return { rpc, rpcSubscriptions } ;
56+
57+ const sendAndConfirm = sendAndConfirmTransactionFactory ( {
58+ rpc,
59+ rpcSubscriptions,
60+ } ) ;
61+ const transactionPlanExecutor = createTransactionPlanExecutor ( {
62+ executeTransactionMessage : async ( transactionMessage ) => {
63+ const signedTransaction =
64+ await signTransactionMessageWithSigners ( transactionMessage ) ;
65+ assertIsSendableTransaction ( signedTransaction ) ;
66+ assertIsTransactionWithBlockhashLifetime ( signedTransaction ) ;
67+ await sendAndConfirm ( signedTransaction , { commitment : 'confirmed' } ) ;
68+ return { transaction : signedTransaction } ;
69+ } ,
70+ } ) ;
71+
72+ const sendTransactionPlan = async ( transactionPlan : TransactionPlan ) => {
73+ return transactionPlanExecutor ( transactionPlan ) ;
74+ } ;
75+
76+ return { rpc, rpcSubscriptions, sendTransactionPlan } ;
5177} ;
5278
5379export const generateKeyPairSignerWithSol = async (
@@ -114,24 +140,6 @@ export const createDefaultTransactionPlanner = (
114140 } ) ;
115141} ;
116142
117- export const createDefaultTransactionPlanExecutor = (
118- client : Client ,
119- commitment : Commitment = 'confirmed'
120- ) : TransactionPlanExecutor => {
121- return createTransactionPlanExecutor ( {
122- executeTransactionMessage : async ( transactionMessage ) => {
123- const signedTransaction =
124- await signTransactionMessageWithSigners ( transactionMessage ) ;
125- assertIsSendableTransaction ( signedTransaction ) ;
126- assertIsTransactionWithBlockhashLifetime ( signedTransaction ) ;
127- await sendAndConfirmTransactionFactory ( client ) ( signedTransaction , {
128- commitment,
129- } ) ;
130- return { transaction : signedTransaction } ;
131- } ,
132- } ) ;
133- } ;
134-
135143export const getBalance = async ( client : Client , address : Address ) =>
136144 ( await client . rpc . getBalance ( address , { commitment : 'confirmed' } ) . send ( ) )
137145 . value ;
@@ -235,3 +243,37 @@ export const createTokenWithAmount = async (
235243
236244 return token . address ;
237245} ;
246+
247+ export const createTokenPdaWithAmount = async (
248+ client : Client ,
249+ payer : TransactionSigner ,
250+ mintAuthority : TransactionSigner ,
251+ mint : Address ,
252+ owner : Address ,
253+ amount : bigint ,
254+ decimals : number
255+ ) : Promise < Address > => {
256+ const [ token ] = await findAssociatedTokenPda ( {
257+ owner,
258+ mint,
259+ tokenProgram : TOKEN_PROGRAM_ADDRESS ,
260+ } ) ;
261+
262+ const transactionPlan = await createDefaultTransactionPlanner (
263+ client ,
264+ payer
265+ ) (
266+ getMintToATAInstructionPlan ( {
267+ payer,
268+ ata : token ,
269+ owner,
270+ mint,
271+ mintAuthority,
272+ amount,
273+ decimals,
274+ } )
275+ ) ;
276+
277+ await client . sendTransactionPlan ( transactionPlan ) ;
278+ return token ;
279+ } ;
0 commit comments