correct token creation retries
This commit is contained in:
		
							parent
							
								
									1a897d780f
								
							
						
					
					
						commit
						bfb4a03b88
					
				| @ -127,8 +127,8 @@ impl TryFrom<KeysFile> for SolClient { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| async fn wait_for_sol(client: &RpcClient, pubkey: &Pubkey) { | ||||
|     println!("Waiting to receive 0.01 SOL in address {pubkey}"); | ||||
| async fn wait_for_enough_sol(client: &RpcClient, pubkey: &Pubkey) { | ||||
|     println!("Waiting for at least 0.01 SOL in address {pubkey}"); | ||||
|     loop { | ||||
|         match client.get_balance(pubkey).await { | ||||
|             Ok(balance) => { | ||||
| @ -139,18 +139,33 @@ async fn wait_for_sol(client: &RpcClient, pubkey: &Pubkey) { | ||||
|             } | ||||
|             Err(e) => { | ||||
|                 println!("Could not get balance: {e:?}"); | ||||
|             }, | ||||
|             } | ||||
|         } | ||||
|         sleep(Duration::from_secs(30)).await; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| async fn create_token(client: &RpcClient, keypair: &Keypair) -> Pubkey { | ||||
|     wait_for_sol(client, &keypair.pubkey()).await; | ||||
|     loop { | ||||
|         wait_for_enough_sol(client, &keypair.pubkey()).await; | ||||
|         match create_token_int(client, keypair).await { | ||||
|             None => sleep(Duration::from_secs(30)).await, | ||||
|             Some(pubkey) => { | ||||
|                 println!("Mint created: {pubkey}"); | ||||
|                 return pubkey; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| async fn create_token_int(client: &RpcClient, keypair: &Keypair) -> Option<Pubkey> { | ||||
|     let mint_keypair = Keypair::new(); | ||||
|     let payer = Keypair::from_base58_string(&keypair.to_base58_string()); | ||||
|     let mint_rent = client.get_minimum_balance_for_rent_exemption(Mint::LEN).await.unwrap(); | ||||
|     let mint_rent = client | ||||
|         .get_minimum_balance_for_rent_exemption(Mint::LEN) | ||||
|         .await | ||||
|         .map_err(|e| println!("Can't get minimum balance for rent exemption: {e}")) | ||||
|         .ok()?; | ||||
| 
 | ||||
|     let create_mint_account_ix = system_instruction::create_account( | ||||
|         &payer.pubkey(), | ||||
| @ -162,9 +177,14 @@ async fn create_token(client: &RpcClient, keypair: &Keypair) -> Pubkey { | ||||
| 
 | ||||
|     let init_mint_ix = | ||||
|         initialize_mint(&spl_token::id(), &mint_keypair.pubkey(), &payer.pubkey(), None, 9) | ||||
|             .unwrap(); | ||||
|             .map_err(|e| println!("Can't initialize mint: {e}")) | ||||
|             .ok()?; | ||||
| 
 | ||||
|     let recent_blockhash = client.get_latest_blockhash().await.unwrap(); | ||||
|     let recent_blockhash = client | ||||
|         .get_latest_blockhash() | ||||
|         .await | ||||
|         .map_err(|e| println!("Can't get latest blockhash: {e}")) | ||||
|         .ok()?; | ||||
|     let tx = Transaction::new_signed_with_payer( | ||||
|         &[create_mint_account_ix, init_mint_ix], | ||||
|         Some(&payer.pubkey()), | ||||
| @ -172,17 +192,13 @@ async fn create_token(client: &RpcClient, keypair: &Keypair) -> Pubkey { | ||||
|         recent_blockhash, | ||||
|     ); | ||||
| 
 | ||||
|     loop { | ||||
|         match client.send_and_confirm_transaction(&tx).await { | ||||
|             Ok(signature) => { | ||||
|                 println!("Mint created: {}", mint_keypair.pubkey()); | ||||
|                 println!("Transaction signature: {}", signature); | ||||
|                 return mint_keypair.pubkey(); | ||||
|             }, | ||||
|             Err(e) => { | ||||
|                 println!("Could not create mint: {e}"); | ||||
|                 sleep(Duration::from_secs(30)).await; | ||||
|             }, | ||||
|         } | ||||
|     } | ||||
|     client | ||||
|         .send_and_confirm_transaction(&tx) | ||||
|         .await | ||||
|         .map_err(|e| println!("Can't execute transaction: {e}")) | ||||
|         .map(|s| { | ||||
|             println!("Transaction signature: {}", s); | ||||
|             mint_keypair.pubkey() | ||||
|         }) | ||||
|         .ok() | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user