Skip to main content

ton_lib/tep/jetton/
jetton_internal_transfer_msg.rs

1use crate::block_tlb::Coins;
2use ton_lib_core::cell::TonCell;
3use ton_lib_core::types::tlb_core::{MsgAddress, TLBEitherRef};
4use ton_lib_core::TLBDerive;
5
6/// ```raw
7/// internal_transfer#178d4519  query_id:uint64 amount:(VarUInteger 16)
8/// from:MsgAddress
9/// response_address:MsgAddress
10/// forward_ton_amount:(VarUInteger 16)
11/// forward_payload:(Either Cell ^Cell)
12/// = InternalMsgBody;
13/// ```
14#[derive(Debug, Clone, PartialEq, TLBDerive)]
15#[tlb_derive(prefix = 0x178d4519, bits_len = 32, ensure_empty = true)]
16pub struct JettonInternalTransferMsg {
17    pub query_id: u64,
18    pub amount: Coins,
19    pub from_address: MsgAddress,
20    pub response_address: MsgAddress,
21    pub forward_amount: Coins,
22    pub forward_payload: TLBEitherRef<TonCell>,
23}
24
25#[cfg(test)]
26mod tests {
27    use crate::block_tlb::Coins;
28    use crate::tep::jetton::JettonInternalTransferMsg;
29    use std::str::FromStr;
30    use ton_lib_core::cell::TonCell;
31    use ton_lib_core::traits::tlb::TLB;
32    use ton_lib_core::types::tlb_core::TLBEitherRef;
33    use ton_lib_core::types::TonAddress;
34
35    #[test]
36    fn test_jetton_internal_transfer_msg() -> anyhow::Result<()> {
37        let msg = JettonInternalTransferMsg::from_boc_hex("b5ee9c720101020100aa0001af178d45190000005209ddeb9e440ee9390801e6ef228644c75beba08c8b8e2adf62f1e760e84861b5c33027f0433e19085713003cdde450c898eb7d74119171c55bec5e3cec1d090c36b86604fe0867c3210ae2501dcd65030100992593856180022a16a3164c4d5aa3133f3110ff10496e00ca8ac8abeffc5027e024d33480c3ea916f9f4a23003cdde450c898eb7d74119171c55bec5e3cec1d090c36b86604fe0867c3210ae250")?;
38        let payload = TonCell::from_boc_hex("b5ee9c7201010101004f0000992593856180022a16a3164c4d5aa3133f3110ff10496e00ca8ac8abeffc5027e024d33480c3ea916f9f4a23003cdde450c898eb7d74119171c55bec5e3cec1d090c36b86604fe0867c3210ae250")?;
39
40        let expected = JettonInternalTransferMsg {
41            query_id: 352352856990,
42            amount: Coins::new(1089377168u64),
43            from_address: TonAddress::from_str("UQDzd5FDImOt9dBGRccVb7F487B0JDDa4ZgT-CGfDIQriSB-")?.to_msg_address(),
44            response_address: TonAddress::from_str("UQDzd5FDImOt9dBGRccVb7F487B0JDDa4ZgT-CGfDIQriSB-")?
45                .to_msg_address(),
46            forward_amount: Coins::new(125000000u64),
47            forward_payload: TLBEitherRef::new(payload),
48        };
49
50        assert_eq!(expected, msg);
51
52        let serialized = expected.to_boc()?;
53        let parsed_back = JettonInternalTransferMsg::from_boc(&serialized)?;
54        assert_eq!(expected, parsed_back);
55        Ok(())
56    }
57}