Skip to content

Commit

Permalink
CLI: Update Token Metadata (#198)
Browse files Browse the repository at this point in the history
Co-authored-by: Coach Chuck <[email protected]>
  • Loading branch information
aoikurokawa and coachchucksol authored Feb 20, 2025
1 parent b096d1b commit 9efa55c
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 1 deletion.
14 changes: 14 additions & 0 deletions cli/getting_started.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,20 @@ To create the metadata:
jito-restaking-cli --rpc-url <RPC_URL> vault vault create-token-metadata <VAULT> <NAME> <SYMBOL> <URI>
```

### Update VRT Metadata

To update the metadata:

- `<RPC_URL>`: RPC url
- `<VAULT>`: The vault Pubkey
- `<NAME>`: Name for VRT
- `<SYMBOL>`: Symbol for VRT
- `<URI>`: Metadata url

```bash
jito-restaking-cli --rpc-url <RPC_URL> vault vault update-token-metadata <VAULT> <NAME> <SYMBOL> <URI>
```

## Update a Vault

It is the vault's responsibility to update it once per epoch. If a vault is not updated, no other actions can be taken. This is done by initializing a `vault_update_state_tracker`, cranking it and to finish the update, closing it.
Expand Down
10 changes: 10 additions & 0 deletions cli/src/vault.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,16 @@ pub enum VaultActions {
/// The URI for the token metadata
uri: String,
},
UpdateTokenMetadata {
/// The vault pubkey
vault: String,
/// The name of the token
name: String,
/// The symbol of the token
symbol: String,
/// The URI for the token metadata
uri: String,
},
/// Starts the vault update cycle
InitializeVaultUpdateStateTracker {
/// Vault account
Expand Down
70 changes: 69 additions & 1 deletion cli/src/vault_handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use jito_vault_client::{
InitializeConfigBuilder, InitializeVaultBuilder, InitializeVaultNcnTicketBuilder,
InitializeVaultOperatorDelegationBuilder, InitializeVaultUpdateStateTrackerBuilder,
MintToBuilder, SetConfigAdminBuilder, SetDepositCapacityBuilder,
WarmupVaultNcnTicketBuilder,
UpdateTokenMetadataBuilder, WarmupVaultNcnTicketBuilder,
},
types::WithdrawalAllocationMethod,
};
Expand Down Expand Up @@ -117,6 +117,15 @@ impl VaultCliHandler {
uri,
},
} => self.create_token_metadata(vault, name, symbol, uri).await,
VaultCommands::Vault {
action:
VaultActions::UpdateTokenMetadata {
vault,
name,
symbol,
uri,
},
} => self.update_token_metadata(vault, name, symbol, uri).await,
VaultCommands::Vault {
action: VaultActions::InitializeVaultUpdateStateTracker { vault },
} => self.initialize_vault_update_state_tracker(vault).await,
Expand Down Expand Up @@ -385,6 +394,65 @@ impl VaultCliHandler {
Ok(())
}

async fn update_token_metadata(
&self,
vault: String,
name: String,
symbol: String,
uri: String,
) -> Result<()> {
let keypair = self
.cli_config
.keypair
.as_ref()
.ok_or_else(|| anyhow!("Keypair not provided"))?;
let vault_pubkey = Pubkey::from_str(&vault)?;

let rpc_client = self.get_rpc_client();
let vault_account = rpc_client.get_account(&vault_pubkey).await?;
let vault = Vault::try_from_slice_unchecked(&vault_account.data)?;

let metadata = Pubkey::find_program_address(
&[
b"metadata",
inline_mpl_token_metadata::id().as_ref(),
vault.vrt_mint.as_ref(),
],
&inline_mpl_token_metadata::id(),
)
.0;

let ix = UpdateTokenMetadataBuilder::new()
.vault(vault_pubkey)
.admin(keypair.pubkey())
.vrt_mint(vault.vrt_mint)
.metadata(metadata)
.name(name)
.symbol(symbol)
.uri(uri)
.instruction();

let recent_blockhash = rpc_client.get_latest_blockhash().await?;
let tx = Transaction::new_signed_with_payer(
&[ix],
Some(&keypair.pubkey()),
&[keypair],
recent_blockhash,
);

info!(
"Updating token metadata transaction: {:?}",
tx.get_signature()
);
rpc_client
.send_and_confirm_transaction(&tx)
.await
.map_err(|e| anyhow!(e.to_string()))?;
info!("Transaction confirmed: {:?}", tx.get_signature());

Ok(())
}

// ---------- UPDATE ------------

pub async fn initialize_vault_update_state_tracker(&self, vault: String) -> Result<()> {
Expand Down
14 changes: 14 additions & 0 deletions docs/_tools/00_cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,7 @@ Vault commands

* `initialize` — Creates a new vault
* `create-token-metadata` — Creates token metadata for the vault's LRT token
* `update-token-metadata`
* `initialize-vault-update-state-tracker` — Starts the vault update cycle
* `crank-vault-update-state-tracker` — Cranks the vault update state tracker, needs to be run per operator
* `close-vault-update-state-tracker` — Ends the vault update cycle
Expand Down Expand Up @@ -525,6 +526,19 @@ Creates token metadata for the vault's LRT token



## `jito-restaking-cli vault vault update-token-metadata`

**Usage:** `jito-restaking-cli vault vault update-token-metadata <VAULT> <NAME> <SYMBOL> <URI>`

###### **Arguments:**

* `<VAULT>` — The vault pubkey
* `<NAME>` — The name of the token
* `<SYMBOL>` — The symbol of the token
* `<URI>` — The URI for the token metadata



## `jito-restaking-cli vault vault initialize-vault-update-state-tracker`

Starts the vault update cycle
Expand Down

0 comments on commit 9efa55c

Please sign in to comment.