soroban_token_spec/
lib.rs1#![no_std]
2
3mod tests;
4
5use soroban_sdk::{contractevent, Address, BytesN, String};
6
7#[contractevent(topics = ["transfer"], data_format = "map", export = false)]
13#[doc(hidden)]
14pub struct TransferWithMuxedString {
15 #[topic]
16 pub from: Address,
17 #[topic]
18 pub to: Address,
19 pub to_muxed_id: Option<String>,
20 pub amount: i128,
21}
22
23#[contractevent(topics = ["transfer"], data_format = "map", export = false)]
25#[doc(hidden)]
26pub struct TransferWithMuxedBytes {
27 #[topic]
28 pub from: Address,
29 #[topic]
30 pub to: Address,
31 pub to_muxed_id: Option<BytesN<32>>,
32 pub amount: i128,
33}
34
35#[contractevent(topics = ["mint"], data_format = "map", export = false)]
37#[doc(hidden)]
38pub struct MintWithMuxedString {
39 #[topic]
40 pub to: Address,
41 pub to_muxed_id: Option<String>,
42 pub amount: i128,
43}
44
45#[contractevent(topics = ["mint"], data_format = "map", export = false)]
47#[doc(hidden)]
48pub struct MintWithMuxedBytes {
49 #[topic]
50 pub to: Address,
51 pub to_muxed_id: Option<BytesN<32>>,
52 pub amount: i128,
53}
54
55pub(crate) const XDR_INPUT: &[&[u8]] = &[
56 &soroban_sdk::token::TokenFnSpec::spec_xdr_allowance(),
57 &soroban_sdk::token::TokenFnSpec::spec_xdr_approve(),
58 &soroban_sdk::token::TokenFnSpec::spec_xdr_balance(),
59 &soroban_sdk::token::TokenFnSpec::spec_xdr_burn(),
60 &soroban_sdk::token::TokenFnSpec::spec_xdr_burn_from(),
61 &soroban_sdk::token::TokenFnSpec::spec_xdr_decimals(),
62 &soroban_sdk::token::TokenFnSpec::spec_xdr_name(),
63 &soroban_sdk::token::TokenFnSpec::spec_xdr_symbol(),
64 &soroban_sdk::token::TokenFnSpec::spec_xdr_transfer(),
65 &soroban_sdk::token::TokenFnSpec::spec_xdr_transfer_from(),
66 &soroban_token_sdk::events::Approve::spec_xdr(),
67 &soroban_token_sdk::events::TransferWithAmountOnly::spec_xdr(),
68 &soroban_token_sdk::events::Transfer::spec_xdr(),
69 &TransferWithMuxedString::spec_xdr(),
70 &TransferWithMuxedBytes::spec_xdr(),
71 &soroban_token_sdk::events::Burn::spec_xdr(),
72 &soroban_token_sdk::events::MintWithAmountOnly::spec_xdr(),
73 &soroban_token_sdk::events::Mint::spec_xdr(),
74 &MintWithMuxedString::spec_xdr(),
75 &MintWithMuxedBytes::spec_xdr(),
76 &soroban_token_sdk::events::Clawback::spec_xdr(),
77];
78
79pub(crate) const XDR_LEN: usize = 6620;
80
81pub const fn xdr() -> &'static [u8] {
83 &XDR
84}
85
86const XDR: [u8; XDR_LEN] = {
88 let input = XDR_INPUT;
89 let mut output = [0u8; XDR_LEN];
91 let mut input_i = 0;
92 let mut output_i = 0;
93 while input_i < input.len() {
94 let subinput = input[input_i];
95 let mut subinput_i = 0;
96 while subinput_i < subinput.len() {
97 output[output_i] = subinput[subinput_i];
98 output_i += 1;
99 subinput_i += 1;
100 }
101 input_i += 1;
102 }
103
104 if output_i != output.len() {
107 panic!("unexpected output length",);
108 }
109
110 output
111};