Skip to content

Commit 0ebdb97

Browse files
committed
feat: add metadata examples
Signed-off-by: Ricky Saechao <[email protected]>
1 parent 0266f6a commit 0ebdb97

File tree

3 files changed

+66
-2
lines changed

3 files changed

+66
-2
lines changed

examples/token_update_metadata_with_admin_key.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ async fn main() -> anyhow::Result<()> {
4646

4747
client.set_operator(args.operator_account_id, args.operator_key.clone());
4848

49+
let admin_key = PrivateKey::generate_ed25519();
50+
4951
// Initial metadata
5052
let metadata: Vec<u8> = vec![1];
5153
// New metadata
@@ -59,8 +61,10 @@ async fn main() -> anyhow::Result<()> {
5961
.initial_supply(1000000)
6062
.treasury_account_id(client.get_operator_account_id().unwrap())
6163
.expiration_time(OffsetDateTime::now_utc() + Duration::minutes(5))
62-
.admin_key(client.get_operator_public_key().unwrap())
64+
.admin_key(admin_key.public_key())
6365
.metadata(metadata)
66+
.freeze_with(&client)?
67+
.sign(admin_key.clone())
6468
.execute(&client)
6569
.await?
6670
.get_receipt(&client)
@@ -83,6 +87,8 @@ async fn main() -> anyhow::Result<()> {
8387
let token_update_receipt = TokenUpdateTransaction::new()
8488
.token_id(token_id)
8589
.metadata(new_metadata)
90+
.freeze_with(&client)?
91+
.sign(admin_key)
8692
.execute(&client)
8793
.await?
8894
.get_receipt(&client)

examples/token_update_metadata_with_metadata_key.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ async fn main() -> anyhow::Result<()> {
6464
.expiration_time(OffsetDateTime::now_utc() + Duration::minutes(5))
6565
.metadata_key(metadata_key.public_key())
6666
.freeze_with(&client)?
67-
.sign(args.operator_key.clone())
67+
.sign(metadata_key.clone())
6868
.execute(&client)
6969
.await?
7070
.get_receipt(&client)

tests/e2e/token/update.rs

+58
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,17 @@ use assert_matches::assert_matches;
22
use hedera::{
33
Hbar,
44
Key,
5+
PrivateKey,
56
Status,
7+
TokenCreateTransaction,
68
TokenInfoQuery,
9+
TokenType,
710
TokenUpdateTransaction,
811
};
12+
use time::{
13+
Duration,
14+
OffsetDateTime,
15+
};
916

1017
use super::FungibleToken;
1118
use crate::account::Account;
@@ -99,3 +106,54 @@ async fn immutable_token_fails() -> anyhow::Result<()> {
99106

100107
Ok(())
101108
}
109+
110+
#[tokio::test]
111+
112+
async fn update_immutable_token_metadata() -> anyhow::Result<()> {
113+
let Some(TestEnvironment { config: _, client }) = setup_nonfree() else {
114+
return Ok(());
115+
};
116+
let initial_metadata = vec![1];
117+
let updated_metadata = vec![1, 2];
118+
let metadata_key = PrivateKey::generate_ed25519();
119+
120+
// Create the Fungible Token with metadata key.
121+
let token_id = TokenCreateTransaction::new()
122+
.name("ffff")
123+
.symbol("F")
124+
.token_type(TokenType::FungibleCommon)
125+
.decimals(3)
126+
.initial_supply(1000000)
127+
.metadata(initial_metadata.clone())
128+
.treasury_account_id(client.get_operator_account_id().unwrap())
129+
.expiration_time(OffsetDateTime::now_utc() + Duration::minutes(5))
130+
.metadata_key(metadata_key.public_key())
131+
.execute(&client)
132+
.await?
133+
.get_receipt(&client)
134+
.await?
135+
.token_id
136+
.unwrap();
137+
138+
let token_info = TokenInfoQuery::new().token_id(token_id).execute(&client).await?;
139+
140+
assert_eq!(&token_info.metadata, &initial_metadata);
141+
assert_eq!(token_info.metadata_key, Some(Key::Single(metadata_key.public_key())));
142+
143+
// Update token with metadata key
144+
_ = TokenUpdateTransaction::new()
145+
.token_id(token_id)
146+
.metadata(updated_metadata.clone())
147+
.freeze_with(&client)?
148+
.sign(metadata_key)
149+
.execute(&client)
150+
.await?
151+
.get_receipt(&client)
152+
.await;
153+
154+
let token_info = TokenInfoQuery::new().token_id(token_id).execute(&client).await?;
155+
156+
assert_eq!(token_info.metadata, updated_metadata);
157+
158+
Ok(())
159+
}

0 commit comments

Comments
 (0)