ic_icrc_tx/builder/
icrc1.rs1use base64::engine::general_purpose;
2use base64::Engine;
3use candid::Encode;
4
5use crate::types::CanisterCall;
6
7pub fn build_icrc1_transfer(
18 canister_id: String,
19 transfer_arg: icrc_ledger_types::icrc1::transfer::TransferArg,
20) -> CanisterCall {
21 CanisterCall {
22 canister_id,
23 method: "icrc1_transfer".to_string(),
24 arg: general_purpose::STANDARD.encode(Encode!(&transfer_arg).unwrap()),
25 }
26}
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31 use candid::{Nat, Principal};
32 use icrc_ledger_types::icrc1::{account::Account, transfer::TransferArg};
33
34 #[test]
35 fn test_build_icrc1_transfer() {
36 let canister_id = "rh2pm-ryaaa-aaaan-qeniq-cai".to_string();
37 let transfer_arg = TransferArg {
38 to: Account {
39 owner: Principal::from_text(
40 "6pfju-rc52z-aihtt-ahhg6-z2bzc-ofp5r-igp5i-qy5ep-j6vob-gs3ae-nae",
41 )
42 .unwrap(),
43 subaccount: None,
44 },
45 amount: Nat::from(10000000u64),
46 memo: None,
47 fee: None,
48 created_at_time: None,
49 from_subaccount: None,
50 };
51
52 let result = build_icrc1_transfer(canister_id.clone(), transfer_arg.clone());
53
54 println!("Encoded Arg: {}", result.arg);
55
56 assert_eq!(result.canister_id, canister_id);
57 assert_eq!(result.method, "icrc1_transfer".to_string());
58 assert_eq!(
59 result.arg,
60 general_purpose::STANDARD.encode(Encode!(&transfer_arg).unwrap())
61 );
62 }
63}