chore: Remove abusive cloning (#2663)
This commit is contained in:
parent
6cf200493a
commit
0fef819e4b
|
@ -18,7 +18,7 @@ Solana version: 1.17.0
|
||||||
|
|
||||||
| Program | Binary Size | +/- |
|
| Program | Binary Size | +/- |
|
||||||
| ------- | ----------- | ------------------------ |
|
| ------- | ----------- | ------------------------ |
|
||||||
| bench | 764,032 | 🟢 **-389,704 (33.78%)** |
|
| bench | 735,800 | 🟢 **-417,936 (36.22%)** |
|
||||||
|
|
||||||
### Notable changes
|
### Notable changes
|
||||||
|
|
||||||
|
|
|
@ -22,53 +22,53 @@ Solana version: 1.17.0
|
||||||
| accountInfo2 | 824 | 🟢 **-651 (44.14%)** |
|
| accountInfo2 | 824 | 🟢 **-651 (44.14%)** |
|
||||||
| accountInfo4 | 1,319 | 🟢 **-645 (32.84%)** |
|
| accountInfo4 | 1,319 | 🟢 **-645 (32.84%)** |
|
||||||
| accountInfo8 | 2,531 | 🟢 **-1,310 (34.11%)** |
|
| accountInfo8 | 2,531 | 🟢 **-1,310 (34.11%)** |
|
||||||
| accountEmptyInit1 | 5,099 | 🟢 **-718 (12.34%)** |
|
| accountEmptyInit1 | 4,899 | 🟢 **-918 (15.78%)** |
|
||||||
| accountEmpty1 | 708 | 🟢 **-441 (38.38%)** |
|
| accountEmpty1 | 708 | 🟢 **-441 (38.38%)** |
|
||||||
| accountEmptyInit2 | 9,676 | 🟢 **-726 (6.98%)** |
|
| accountEmptyInit2 | 9,325 | 🟢 **-1,077 (10.35%)** |
|
||||||
| accountEmpty2 | 1,064 | 🟢 **-690 (39.34%)** |
|
| accountEmpty2 | 1,064 | 🟢 **-690 (39.34%)** |
|
||||||
| accountEmptyInit4 | 18,477 | 🟢 **-1,031 (5.29%)** |
|
| accountEmptyInit4 | 17,821 | 🟢 **-1,687 (8.65%)** |
|
||||||
| accountEmpty4 | 1,766 | 🟢 **-774 (30.47%)** |
|
| accountEmpty4 | 1,766 | 🟢 **-774 (30.47%)** |
|
||||||
| accountEmptyInit8 | 36,113 | 🟢 **-1,152 (3.09%)** |
|
| accountEmptyInit8 | 34,855 | 🟢 **-2,410 (6.47%)** |
|
||||||
| accountEmpty8 | 3,179 | 🟢 **-1,837 (36.62%)** |
|
| accountEmpty8 | 3,179 | 🟢 **-1,837 (36.62%)** |
|
||||||
| accountSizedInit1 | 5,187 | 🟢 **-737 (12.44%)** |
|
| accountSizedInit1 | 4,988 | 🟢 **-936 (15.80%)** |
|
||||||
| accountSized1 | 732 | 🟢 **-482 (39.70%)** |
|
| accountSized1 | 732 | 🟢 **-482 (39.70%)** |
|
||||||
| accountSizedInit2 | 9,851 | 🟢 **-829 (7.76%)** |
|
| accountSizedInit2 | 9,499 | 🟢 **-1,181 (11.06%)** |
|
||||||
| accountSized2 | 1,106 | 🟢 **-767 (40.95%)** |
|
| accountSized2 | 1,106 | 🟢 **-767 (40.95%)** |
|
||||||
| accountSizedInit4 | 18,876 | 🟢 **-1,094 (5.48%)** |
|
| accountSizedInit4 | 18,219 | 🟢 **-1,751 (8.77%)** |
|
||||||
| accountSized4 | 1,863 | 🟢 **-899 (32.55%)** |
|
| accountSized4 | 1,863 | 🟢 **-899 (32.55%)** |
|
||||||
| accountSizedInit8 | 36,832 | 🟢 **-1,290 (3.38%)** |
|
| accountSizedInit8 | 35,574 | 🟢 **-2,548 (6.68%)** |
|
||||||
| accountSized8 | 3,374 | 🟢 **-1,979 (36.97%)** |
|
| accountSized8 | 3,374 | 🟢 **-1,979 (36.97%)** |
|
||||||
| accountUnsizedInit1 | 5,275 | 🟢 **-777 (12.84%)** |
|
| accountUnsizedInit1 | 5,075 | 🟢 **-977 (16.14%)** |
|
||||||
| accountUnsized1 | 759 | 🟢 **-579 (43.27%)** |
|
| accountUnsized1 | 759 | 🟢 **-579 (43.27%)** |
|
||||||
| accountUnsizedInit2 | 10,090 | 🟢 **-839 (7.68%)** |
|
| accountUnsizedInit2 | 9,736 | 🟢 **-1,193 (10.92%)** |
|
||||||
| accountUnsized2 | 1,168 | 🟢 **-610 (34.31%)** |
|
| accountUnsized2 | 1,168 | 🟢 **-610 (34.31%)** |
|
||||||
| accountUnsizedInit4 | 19,281 | 🟢 **-1,058 (5.20%)** |
|
| accountUnsizedInit4 | 18,622 | 🟢 **-1,717 (8.44%)** |
|
||||||
| accountUnsized4 | 2,000 | 🟢 **-1,136 (36.22%)** |
|
| accountUnsized4 | 2,000 | 🟢 **-1,136 (36.22%)** |
|
||||||
| accountUnsizedInit8 | 37,378 | 🟢 **-1,718 (4.39%)** |
|
| accountUnsizedInit8 | 36,119 | 🟢 **-2,977 (7.61%)** |
|
||||||
| accountUnsized8 | 3,667 | 🟢 **-2,285 (38.39%)** |
|
| accountUnsized8 | 3,667 | 🟢 **-2,285 (38.39%)** |
|
||||||
| boxedAccountEmptyInit1 | 5,145 | 🟢 **-889 (14.73%)** |
|
| boxedAccountEmptyInit1 | 4,952 | 🟢 **-1,082 (17.93%)** |
|
||||||
| boxedAccountEmpty1 | 745 | 🟢 **-143 (16.10%)** |
|
| boxedAccountEmpty1 | 745 | 🟢 **-143 (16.10%)** |
|
||||||
| boxedAccountEmptyInit2 | 9,769 | 🟢 **-864 (8.13%)** |
|
| boxedAccountEmptyInit2 | 9,426 | 🟢 **-1,207 (11.35%)** |
|
||||||
| boxedAccountEmpty2 | 1,136 | 🟢 **-265 (18.92%)** |
|
| boxedAccountEmpty2 | 1,136 | 🟢 **-265 (18.92%)** |
|
||||||
| boxedAccountEmptyInit4 | 18,661 | 🟢 **-650 (3.37%)** |
|
| boxedAccountEmptyInit4 | 18,020 | 🟢 **-1,291 (6.69%)** |
|
||||||
| boxedAccountEmpty4 | 1,913 | 🟢 **-511 (21.08%)** |
|
| boxedAccountEmpty4 | 1,913 | 🟢 **-511 (21.08%)** |
|
||||||
| boxedAccountEmptyInit8 | 36,488 | 🟢 **-648 (1.74%)** |
|
| boxedAccountEmptyInit8 | 35,248 | 🟢 **-1,888 (5.08%)** |
|
||||||
| boxedAccountEmpty8 | 3,500 | 🟢 **-1,159 (24.88%)** |
|
| boxedAccountEmpty8 | 3,500 | 🟢 **-1,159 (24.88%)** |
|
||||||
| boxedAccountSizedInit1 | 5,222 | 🟢 **-908 (14.81%)** |
|
| boxedAccountSizedInit1 | 5,027 | 🟢 **-1,103 (17.99%)** |
|
||||||
| boxedAccountSized1 | 767 | 🟢 **-150 (16.36%)** |
|
| boxedAccountSized1 | 767 | 🟢 **-150 (16.36%)** |
|
||||||
| boxedAccountSizedInit2 | 9,925 | 🟢 **-903 (8.34%)** |
|
| boxedAccountSizedInit2 | 9,582 | 🟢 **-1,246 (11.51%)** |
|
||||||
| boxedAccountSized2 | 1,183 | 🟢 **-280 (19.14%)** |
|
| boxedAccountSized2 | 1,183 | 🟢 **-280 (19.14%)** |
|
||||||
| boxedAccountSizedInit4 | 18,973 | 🟢 **-730 (3.71%)** |
|
| boxedAccountSizedInit4 | 18,332 | 🟢 **-1,371 (6.96%)** |
|
||||||
| boxedAccountSized4 | 2,002 | 🟢 **-541 (21.27%)** |
|
| boxedAccountSized4 | 2,002 | 🟢 **-541 (21.27%)** |
|
||||||
| boxedAccountSizedInit8 | 37,111 | 🟢 **-808 (2.13%)** |
|
| boxedAccountSizedInit8 | 35,868 | 🟢 **-2,051 (5.41%)** |
|
||||||
| boxedAccountSized8 | 3,682 | 🟢 **-1,216 (24.83%)** |
|
| boxedAccountSized8 | 3,682 | 🟢 **-1,216 (24.83%)** |
|
||||||
| boxedAccountUnsizedInit1 | 5,304 | 🟢 **-936 (15.00%)** |
|
| boxedAccountUnsizedInit1 | 5,109 | 🟢 **-1,131 (18.13%)** |
|
||||||
| boxedAccountUnsized1 | 797 | 🟢 **-175 (18.00%)** |
|
| boxedAccountUnsized1 | 797 | 🟢 **-175 (18.00%)** |
|
||||||
| boxedAccountUnsizedInit2 | 10,089 | 🟢 **-959 (8.68%)** |
|
| boxedAccountUnsizedInit2 | 9,746 | 🟢 **-1,302 (11.78%)** |
|
||||||
| boxedAccountUnsized2 | 1,246 | 🟢 **-324 (20.64%)** |
|
| boxedAccountUnsized2 | 1,246 | 🟢 **-324 (20.64%)** |
|
||||||
| boxedAccountUnsizedInit4 | 19,303 | 🟢 **-835 (4.15%)** |
|
| boxedAccountUnsizedInit4 | 18,658 | 🟢 **-1,480 (7.35%)** |
|
||||||
| boxedAccountUnsized4 | 2,135 | 🟢 **-633 (22.87%)** |
|
| boxedAccountUnsized4 | 2,135 | 🟢 **-633 (22.87%)** |
|
||||||
| boxedAccountUnsizedInit8 | 37,770 | 🟢 **-1,030 (2.65%)** |
|
| boxedAccountUnsizedInit8 | 36,525 | 🟢 **-2,275 (5.86%)** |
|
||||||
| boxedAccountUnsized8 | 3,948 | 🟢 **-1,399 (26.16%)** |
|
| boxedAccountUnsized8 | 3,948 | 🟢 **-1,399 (26.16%)** |
|
||||||
| boxedInterfaceAccountMint1 | 2,085 | 🟢 **-211 (9.19%)** |
|
| boxedInterfaceAccountMint1 | 2,085 | 🟢 **-211 (9.19%)** |
|
||||||
| boxedInterfaceAccountMint2 | 3,726 | 🟢 **-403 (9.76%)** |
|
| boxedInterfaceAccountMint2 | 3,726 | 🟢 **-403 (9.76%)** |
|
||||||
|
|
|
@ -239,9 +239,10 @@ pub fn generate_constraint_close(
|
||||||
|
|
||||||
pub fn generate_constraint_mut(f: &Field, c: &ConstraintMut) -> proc_macro2::TokenStream {
|
pub fn generate_constraint_mut(f: &Field, c: &ConstraintMut) -> proc_macro2::TokenStream {
|
||||||
let ident = &f.ident;
|
let ident = &f.ident;
|
||||||
|
let account_ref = generate_account_ref(f);
|
||||||
let error = generate_custom_error(ident, &c.error, quote! { ConstraintMut }, &None);
|
let error = generate_custom_error(ident, &c.error, quote! { ConstraintMut }, &None);
|
||||||
quote! {
|
quote! {
|
||||||
if !#ident.to_account_info().is_writable {
|
if !#account_ref.is_writable {
|
||||||
return #error;
|
return #error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -281,16 +282,11 @@ pub fn generate_constraint_has_one(
|
||||||
|
|
||||||
pub fn generate_constraint_signer(f: &Field, c: &ConstraintSigner) -> proc_macro2::TokenStream {
|
pub fn generate_constraint_signer(f: &Field, c: &ConstraintSigner) -> proc_macro2::TokenStream {
|
||||||
let ident = &f.ident;
|
let ident = &f.ident;
|
||||||
let info = match f.ty {
|
let account_ref = generate_account_ref(f);
|
||||||
Ty::AccountInfo => quote! { #ident },
|
|
||||||
Ty::Account(_) => quote! { #ident.to_account_info() },
|
|
||||||
Ty::InterfaceAccount(_) => quote! { #ident.to_account_info() },
|
|
||||||
Ty::AccountLoader(_) => quote! { #ident.to_account_info() },
|
|
||||||
_ => panic!("Invalid syntax: signer cannot be specified."),
|
|
||||||
};
|
|
||||||
let error = generate_custom_error(ident, &c.error, quote! { ConstraintSigner }, &None);
|
let error = generate_custom_error(ident, &c.error, quote! { ConstraintSigner }, &None);
|
||||||
quote! {
|
quote! {
|
||||||
if !#info.is_signer {
|
if !#account_ref.is_signer {
|
||||||
return #error;
|
return #error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -403,7 +399,7 @@ fn generate_constraint_realloc(
|
||||||
**__field_info.lamports.borrow_mut() = __field_info.lamports().checked_sub(__lamport_amt).unwrap();
|
**__field_info.lamports.borrow_mut() = __field_info.lamports().checked_sub(__lamport_amt).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
#field.to_account_info().realloc(#new_space, #zero)?;
|
__field_info.realloc(#new_space, #zero)?;
|
||||||
__reallocs.insert(#field.key());
|
__reallocs.insert(#field.key());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -430,6 +426,8 @@ fn generate_constraint_init_group(
|
||||||
let from_account_info = f.from_account_info(Some(&c.kind), true);
|
let from_account_info = f.from_account_info(Some(&c.kind), true);
|
||||||
let from_account_info_unchecked = f.from_account_info(Some(&c.kind), false);
|
let from_account_info_unchecked = f.from_account_info(Some(&c.kind), false);
|
||||||
|
|
||||||
|
let account_ref = generate_account_ref(f);
|
||||||
|
|
||||||
// PDA bump seeds.
|
// PDA bump seeds.
|
||||||
let (find_pda, seeds_with_bump) = match &c.seeds {
|
let (find_pda, seeds_with_bump) = match &c.seeds {
|
||||||
None => (quote! {}, quote! {}),
|
None => (quote! {}, quote! {}),
|
||||||
|
@ -547,7 +545,7 @@ fn generate_constraint_init_group(
|
||||||
// Checks that all the required accounts for this operation are present.
|
// Checks that all the required accounts for this operation are present.
|
||||||
#optional_checks
|
#optional_checks
|
||||||
|
|
||||||
let owner_program = AsRef::<AccountInfo>::as_ref(&#field).owner;
|
let owner_program = #account_ref.owner;
|
||||||
if !#if_needed || owner_program == &anchor_lang::solana_program::system_program::ID {
|
if !#if_needed || owner_program == &anchor_lang::solana_program::system_program::ID {
|
||||||
#payer_optional_check
|
#payer_optional_check
|
||||||
|
|
||||||
|
@ -618,7 +616,7 @@ fn generate_constraint_init_group(
|
||||||
// Checks that all the required accounts for this operation are present.
|
// Checks that all the required accounts for this operation are present.
|
||||||
#optional_checks
|
#optional_checks
|
||||||
|
|
||||||
let owner_program = AsRef::<AccountInfo>::as_ref(&#field).owner;
|
let owner_program = #account_ref.owner;
|
||||||
if !#if_needed || owner_program == &anchor_lang::solana_program::system_program::ID {
|
if !#if_needed || owner_program == &anchor_lang::solana_program::system_program::ID {
|
||||||
#payer_optional_check
|
#payer_optional_check
|
||||||
|
|
||||||
|
@ -796,7 +794,7 @@ fn generate_constraint_init_group(
|
||||||
// Checks that all the required accounts for this operation are present.
|
// Checks that all the required accounts for this operation are present.
|
||||||
#optional_checks
|
#optional_checks
|
||||||
|
|
||||||
let actual_field = #field.to_account_info();
|
let actual_field = #account_ref;
|
||||||
let actual_owner = actual_field.owner;
|
let actual_owner = actual_field.owner;
|
||||||
|
|
||||||
// Define the account space variable.
|
// Define the account space variable.
|
||||||
|
@ -911,6 +909,7 @@ fn generate_constraint_associated_token(
|
||||||
) -> proc_macro2::TokenStream {
|
) -> proc_macro2::TokenStream {
|
||||||
let name = &f.ident;
|
let name = &f.ident;
|
||||||
let name_str = name.to_string();
|
let name_str = name.to_string();
|
||||||
|
let account_ref = generate_account_ref(f);
|
||||||
let wallet_address = &c.wallet;
|
let wallet_address = &c.wallet;
|
||||||
let spl_token_mint_address = &c.mint;
|
let spl_token_mint_address = &c.mint;
|
||||||
|
|
||||||
|
@ -928,7 +927,7 @@ fn generate_constraint_associated_token(
|
||||||
let token_program_optional_check = optional_check_scope.generate_check(token_program);
|
let token_program_optional_check = optional_check_scope.generate_check(token_program);
|
||||||
quote! {
|
quote! {
|
||||||
#token_program_optional_check
|
#token_program_optional_check
|
||||||
if #name.to_account_info().owner != &#token_program.key() { return Err(anchor_lang::error::ErrorCode::ConstraintAssociatedTokenTokenProgram.into()); }
|
if #account_ref.owner != &#token_program.key() { return Err(anchor_lang::error::ErrorCode::ConstraintAssociatedTokenTokenProgram.into()); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => quote! {},
|
None => quote! {},
|
||||||
|
@ -967,6 +966,7 @@ fn generate_constraint_token_account(
|
||||||
accs: &AccountsStruct,
|
accs: &AccountsStruct,
|
||||||
) -> proc_macro2::TokenStream {
|
) -> proc_macro2::TokenStream {
|
||||||
let name = &f.ident;
|
let name = &f.ident;
|
||||||
|
let account_ref = generate_account_ref(f);
|
||||||
let mut optional_check_scope = OptionalCheckScope::new_with_field(accs, name);
|
let mut optional_check_scope = OptionalCheckScope::new_with_field(accs, name);
|
||||||
let authority_check = match &c.authority {
|
let authority_check = match &c.authority {
|
||||||
Some(authority) => {
|
Some(authority) => {
|
||||||
|
@ -993,7 +993,7 @@ fn generate_constraint_token_account(
|
||||||
let token_program_optional_check = optional_check_scope.generate_check(token_program);
|
let token_program_optional_check = optional_check_scope.generate_check(token_program);
|
||||||
quote! {
|
quote! {
|
||||||
#token_program_optional_check
|
#token_program_optional_check
|
||||||
if #name.to_account_info().owner != &#token_program.key() { return Err(anchor_lang::error::ErrorCode::ConstraintTokenTokenProgram.into()); }
|
if #account_ref.owner != &#token_program.key() { return Err(anchor_lang::error::ErrorCode::ConstraintTokenTokenProgram.into()); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => quote! {},
|
None => quote! {},
|
||||||
|
@ -1013,6 +1013,7 @@ fn generate_constraint_mint(
|
||||||
accs: &AccountsStruct,
|
accs: &AccountsStruct,
|
||||||
) -> proc_macro2::TokenStream {
|
) -> proc_macro2::TokenStream {
|
||||||
let name = &f.ident;
|
let name = &f.ident;
|
||||||
|
let account_ref = generate_account_ref(f);
|
||||||
|
|
||||||
let decimal_check = match &c.decimals {
|
let decimal_check = match &c.decimals {
|
||||||
Some(decimals) => quote! {
|
Some(decimals) => quote! {
|
||||||
|
@ -1053,7 +1054,7 @@ fn generate_constraint_mint(
|
||||||
let token_program_optional_check = optional_check_scope.generate_check(token_program);
|
let token_program_optional_check = optional_check_scope.generate_check(token_program);
|
||||||
quote! {
|
quote! {
|
||||||
#token_program_optional_check
|
#token_program_optional_check
|
||||||
if #name.to_account_info().owner != &#token_program.key() { return Err(anchor_lang::error::ErrorCode::ConstraintMintTokenProgram.into()); }
|
if #account_ref.owner != &#token_program.key() { return Err(anchor_lang::error::ErrorCode::ConstraintMintTokenProgram.into()); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => quote! {},
|
None => quote! {},
|
||||||
|
@ -1192,13 +1193,13 @@ pub fn generate_constraint_executable(
|
||||||
f: &Field,
|
f: &Field,
|
||||||
_c: &ConstraintExecutable,
|
_c: &ConstraintExecutable,
|
||||||
) -> proc_macro2::TokenStream {
|
) -> proc_macro2::TokenStream {
|
||||||
let name = &f.ident;
|
let name_str = f.ident.to_string();
|
||||||
let name_str = name.to_string();
|
let account_ref = generate_account_ref(f);
|
||||||
|
|
||||||
// because we are only acting on the field, we know it isnt optional at this point
|
// because we are only acting on the field, we know it isnt optional at this point
|
||||||
// as it was unwrapped in `generate_constraint`
|
// as it was unwrapped in `generate_constraint`
|
||||||
quote! {
|
quote! {
|
||||||
if !#name.to_account_info().executable {
|
if !#account_ref.executable {
|
||||||
return Err(anchor_lang::error::Error::from(anchor_lang::error::ErrorCode::ConstraintExecutable).with_account_name(#name_str));
|
return Err(anchor_lang::error::Error::from(anchor_lang::error::ErrorCode::ConstraintExecutable).with_account_name(#name_str));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1231,3 +1232,16 @@ fn generate_custom_error(
|
||||||
Err(#error)
|
Err(#error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn generate_account_ref(field: &Field) -> proc_macro2::TokenStream {
|
||||||
|
let name = &field.ident;
|
||||||
|
|
||||||
|
match &field.ty {
|
||||||
|
Ty::AccountInfo => quote!(&#name),
|
||||||
|
Ty::Account(acc) if acc.boxed => quote!(AsRef::<AccountInfo>::as_ref(#name.as_ref())),
|
||||||
|
Ty::InterfaceAccount(acc) if acc.boxed => {
|
||||||
|
quote!(AsRef::<AccountInfo>::as_ref(#name.as_ref()))
|
||||||
|
}
|
||||||
|
_ => quote!(AsRef::<AccountInfo>::as_ref(&#name)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -166,7 +166,7 @@ pub fn idl_accounts_and_functions() -> proc_macro2::TokenStream {
|
||||||
accounts.from.clone(),
|
accounts.from.clone(),
|
||||||
accounts.to.clone(),
|
accounts.to.clone(),
|
||||||
accounts.base.clone(),
|
accounts.base.clone(),
|
||||||
accounts.system_program.to_account_info().clone(),
|
accounts.system_program.to_account_info(),
|
||||||
],
|
],
|
||||||
&[seeds],
|
&[seeds],
|
||||||
)?;
|
)?;
|
||||||
|
@ -209,15 +209,16 @@ pub fn idl_accounts_and_functions() -> proc_macro2::TokenStream {
|
||||||
return Err(anchor_lang::error::ErrorCode::IdlAccountNotEmpty.into());
|
return Err(anchor_lang::error::ErrorCode::IdlAccountNotEmpty.into());
|
||||||
}
|
}
|
||||||
|
|
||||||
let new_account_space = accounts.idl.to_account_info().data_len().checked_add(std::cmp::min(
|
let idl_ref = AsRef::<AccountInfo>::as_ref(&accounts.idl);
|
||||||
|
let new_account_space = idl_ref.data_len().checked_add(std::cmp::min(
|
||||||
data_len
|
data_len
|
||||||
.checked_sub(accounts.idl.to_account_info().data_len())
|
.checked_sub(idl_ref.data_len())
|
||||||
.expect("data_len should always be >= the current account space"),
|
.expect("data_len should always be >= the current account space"),
|
||||||
10_000,
|
10_000,
|
||||||
))
|
))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
if new_account_space > accounts.idl.to_account_info().data_len() {
|
if new_account_space > idl_ref.data_len() {
|
||||||
let sysvar_rent = Rent::get()?;
|
let sysvar_rent = Rent::get()?;
|
||||||
let new_rent_minimum = sysvar_rent.minimum_balance(new_account_space);
|
let new_rent_minimum = sysvar_rent.minimum_balance(new_account_space);
|
||||||
anchor_lang::system_program::transfer(
|
anchor_lang::system_program::transfer(
|
||||||
|
@ -229,10 +230,10 @@ pub fn idl_accounts_and_functions() -> proc_macro2::TokenStream {
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
new_rent_minimum
|
new_rent_minimum
|
||||||
.checked_sub(accounts.idl.to_account_info().lamports())
|
.checked_sub(idl_ref.lamports())
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
)?;
|
)?;
|
||||||
accounts.idl.to_account_info().realloc(new_account_space, false)?;
|
idl_ref.realloc(new_account_space, false)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -23,11 +23,7 @@ pub fn transfer<'info>(
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[ctx.accounts.from, ctx.accounts.to, ctx.accounts.authority],
|
||||||
ctx.accounts.from.clone(),
|
|
||||||
ctx.accounts.to.clone(),
|
|
||||||
ctx.accounts.authority.clone(),
|
|
||||||
],
|
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
|
@ -51,10 +47,10 @@ pub fn transfer_checked<'info>(
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[
|
||||||
ctx.accounts.from.clone(),
|
ctx.accounts.from,
|
||||||
ctx.accounts.mint.clone(),
|
ctx.accounts.mint,
|
||||||
ctx.accounts.to.clone(),
|
ctx.accounts.to,
|
||||||
ctx.accounts.authority.clone(),
|
ctx.accounts.authority,
|
||||||
],
|
],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
|
@ -75,11 +71,7 @@ pub fn mint_to<'info>(
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[ctx.accounts.to, ctx.accounts.mint, ctx.accounts.authority],
|
||||||
ctx.accounts.to.clone(),
|
|
||||||
ctx.accounts.mint.clone(),
|
|
||||||
ctx.accounts.authority.clone(),
|
|
||||||
],
|
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
|
@ -96,11 +88,7 @@ pub fn burn<'info>(ctx: CpiContext<'_, '_, '_, 'info, Burn<'info>>, amount: u64)
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[ctx.accounts.from, ctx.accounts.mint, ctx.accounts.authority],
|
||||||
ctx.accounts.from.clone(),
|
|
||||||
ctx.accounts.mint.clone(),
|
|
||||||
ctx.accounts.authority.clone(),
|
|
||||||
],
|
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
|
@ -121,9 +109,9 @@ pub fn approve<'info>(
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[
|
||||||
ctx.accounts.to.clone(),
|
ctx.accounts.to,
|
||||||
ctx.accounts.delegate.clone(),
|
ctx.accounts.delegate,
|
||||||
ctx.accounts.authority.clone(),
|
ctx.accounts.authority,
|
||||||
],
|
],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
|
@ -148,10 +136,10 @@ pub fn approve_checked<'info>(
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[
|
||||||
ctx.accounts.to.clone(),
|
ctx.accounts.to,
|
||||||
ctx.accounts.mint.clone(),
|
ctx.accounts.mint,
|
||||||
ctx.accounts.delegate.clone(),
|
ctx.accounts.delegate,
|
||||||
ctx.accounts.authority.clone(),
|
ctx.accounts.authority,
|
||||||
],
|
],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
|
@ -167,7 +155,7 @@ pub fn revoke<'info>(ctx: CpiContext<'_, '_, '_, 'info, Revoke<'info>>) -> Resul
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[ctx.accounts.source.clone(), ctx.accounts.authority.clone()],
|
&[ctx.accounts.source, ctx.accounts.authority],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
|
@ -185,10 +173,10 @@ pub fn initialize_account<'info>(
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[
|
||||||
ctx.accounts.account.clone(),
|
ctx.accounts.account,
|
||||||
ctx.accounts.mint.clone(),
|
ctx.accounts.mint,
|
||||||
ctx.accounts.authority.clone(),
|
ctx.accounts.authority,
|
||||||
ctx.accounts.rent.clone(),
|
ctx.accounts.rent,
|
||||||
],
|
],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
|
@ -206,7 +194,7 @@ pub fn initialize_account3<'info>(
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[ctx.accounts.account.clone(), ctx.accounts.mint.clone()],
|
&[ctx.accounts.account, ctx.accounts.mint],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
|
@ -223,9 +211,9 @@ pub fn close_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, CloseAccount<'inf
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[
|
||||||
ctx.accounts.account.clone(),
|
ctx.accounts.account,
|
||||||
ctx.accounts.destination.clone(),
|
ctx.accounts.destination,
|
||||||
ctx.accounts.authority.clone(),
|
ctx.accounts.authority,
|
||||||
],
|
],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
|
@ -245,9 +233,9 @@ pub fn freeze_account<'info>(
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[
|
||||||
ctx.accounts.account.clone(),
|
ctx.accounts.account,
|
||||||
ctx.accounts.mint.clone(),
|
ctx.accounts.mint,
|
||||||
ctx.accounts.authority.clone(),
|
ctx.accounts.authority,
|
||||||
],
|
],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
|
@ -265,9 +253,9 @@ pub fn thaw_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, ThawAccount<'info>
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[
|
||||||
ctx.accounts.account.clone(),
|
ctx.accounts.account,
|
||||||
ctx.accounts.mint.clone(),
|
ctx.accounts.mint,
|
||||||
ctx.accounts.authority.clone(),
|
ctx.accounts.authority,
|
||||||
],
|
],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
|
@ -289,7 +277,7 @@ pub fn initialize_mint<'info>(
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[ctx.accounts.mint.clone(), ctx.accounts.rent.clone()],
|
&[ctx.accounts.mint, ctx.accounts.rent],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
|
@ -308,7 +296,7 @@ pub fn initialize_mint2<'info>(
|
||||||
freeze_authority,
|
freeze_authority,
|
||||||
decimals,
|
decimals,
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke_signed(&ix, &[ctx.accounts.mint.clone()], ctx.signer_seeds)
|
solana_program::program::invoke_signed(&ix, &[ctx.accounts.mint], ctx.signer_seeds)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -332,10 +320,7 @@ pub fn set_authority<'info>(
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[ctx.accounts.account_or_mint, ctx.accounts.current_authority],
|
||||||
ctx.accounts.account_or_mint.clone(),
|
|
||||||
ctx.accounts.current_authority.clone(),
|
|
||||||
],
|
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
|
@ -343,7 +328,7 @@ pub fn set_authority<'info>(
|
||||||
|
|
||||||
pub fn sync_native<'info>(ctx: CpiContext<'_, '_, '_, 'info, SyncNative<'info>>) -> Result<()> {
|
pub fn sync_native<'info>(ctx: CpiContext<'_, '_, '_, 'info, SyncNative<'info>>) -> Result<()> {
|
||||||
let ix = spl_token::instruction::sync_native(&spl_token::ID, ctx.accounts.account.key)?;
|
let ix = spl_token::instruction::sync_native(&spl_token::ID, ctx.accounts.account.key)?;
|
||||||
solana_program::program::invoke_signed(&ix, &[ctx.accounts.account.clone()], ctx.signer_seeds)
|
solana_program::program::invoke_signed(&ix, &[ctx.accounts.account], ctx.signer_seeds)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,11 +26,7 @@ pub fn transfer<'info>(
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[ctx.accounts.from, ctx.accounts.to, ctx.accounts.authority],
|
||||||
ctx.accounts.from.clone(),
|
|
||||||
ctx.accounts.to.clone(),
|
|
||||||
ctx.accounts.authority.clone(),
|
|
||||||
],
|
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
|
@ -54,10 +50,10 @@ pub fn transfer_checked<'info>(
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[
|
||||||
ctx.accounts.from.clone(),
|
ctx.accounts.from,
|
||||||
ctx.accounts.mint.clone(),
|
ctx.accounts.mint,
|
||||||
ctx.accounts.to.clone(),
|
ctx.accounts.to,
|
||||||
ctx.accounts.authority.clone(),
|
ctx.accounts.authority,
|
||||||
],
|
],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
|
@ -78,11 +74,7 @@ pub fn mint_to<'info>(
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[ctx.accounts.to, ctx.accounts.mint, ctx.accounts.authority],
|
||||||
ctx.accounts.to.clone(),
|
|
||||||
ctx.accounts.mint.clone(),
|
|
||||||
ctx.accounts.authority.clone(),
|
|
||||||
],
|
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
|
@ -99,11 +91,7 @@ pub fn burn<'info>(ctx: CpiContext<'_, '_, '_, 'info, Burn<'info>>, amount: u64)
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[ctx.accounts.from, ctx.accounts.mint, ctx.accounts.authority],
|
||||||
ctx.accounts.from.clone(),
|
|
||||||
ctx.accounts.mint.clone(),
|
|
||||||
ctx.accounts.authority.clone(),
|
|
||||||
],
|
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
|
@ -124,9 +112,9 @@ pub fn approve<'info>(
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[
|
||||||
ctx.accounts.to.clone(),
|
ctx.accounts.to,
|
||||||
ctx.accounts.delegate.clone(),
|
ctx.accounts.delegate,
|
||||||
ctx.accounts.authority.clone(),
|
ctx.accounts.authority,
|
||||||
],
|
],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
|
@ -142,7 +130,7 @@ pub fn revoke<'info>(ctx: CpiContext<'_, '_, '_, 'info, Revoke<'info>>) -> Resul
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[ctx.accounts.source.clone(), ctx.accounts.authority.clone()],
|
&[ctx.accounts.source, ctx.accounts.authority],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
|
@ -160,10 +148,10 @@ pub fn initialize_account<'info>(
|
||||||
solana_program::program::invoke(
|
solana_program::program::invoke(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[
|
||||||
ctx.accounts.account.clone(),
|
ctx.accounts.account,
|
||||||
ctx.accounts.mint.clone(),
|
ctx.accounts.mint,
|
||||||
ctx.accounts.authority.clone(),
|
ctx.accounts.authority,
|
||||||
ctx.accounts.rent.clone(),
|
ctx.accounts.rent,
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
|
@ -178,11 +166,8 @@ pub fn initialize_account3<'info>(
|
||||||
ctx.accounts.mint.key,
|
ctx.accounts.mint.key,
|
||||||
ctx.accounts.authority.key,
|
ctx.accounts.authority.key,
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke(
|
solana_program::program::invoke(&ix, &[ctx.accounts.account, ctx.accounts.mint])
|
||||||
&ix,
|
.map_err(Into::into)
|
||||||
&[ctx.accounts.account.clone(), ctx.accounts.mint.clone()],
|
|
||||||
)
|
|
||||||
.map_err(Into::into)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn close_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, CloseAccount<'info>>) -> Result<()> {
|
pub fn close_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, CloseAccount<'info>>) -> Result<()> {
|
||||||
|
@ -196,9 +181,9 @@ pub fn close_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, CloseAccount<'inf
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[
|
||||||
ctx.accounts.account.clone(),
|
ctx.accounts.account,
|
||||||
ctx.accounts.destination.clone(),
|
ctx.accounts.destination,
|
||||||
ctx.accounts.authority.clone(),
|
ctx.accounts.authority,
|
||||||
],
|
],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
|
@ -218,9 +203,9 @@ pub fn freeze_account<'info>(
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[
|
||||||
ctx.accounts.account.clone(),
|
ctx.accounts.account,
|
||||||
ctx.accounts.mint.clone(),
|
ctx.accounts.mint,
|
||||||
ctx.accounts.authority.clone(),
|
ctx.accounts.authority,
|
||||||
],
|
],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
|
@ -238,9 +223,9 @@ pub fn thaw_account<'info>(ctx: CpiContext<'_, '_, '_, 'info, ThawAccount<'info>
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[
|
||||||
ctx.accounts.account.clone(),
|
ctx.accounts.account,
|
||||||
ctx.accounts.mint.clone(),
|
ctx.accounts.mint,
|
||||||
ctx.accounts.authority.clone(),
|
ctx.accounts.authority,
|
||||||
],
|
],
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
|
@ -260,7 +245,7 @@ pub fn initialize_mint<'info>(
|
||||||
freeze_authority,
|
freeze_authority,
|
||||||
decimals,
|
decimals,
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke(&ix, &[ctx.accounts.mint.clone(), ctx.accounts.rent.clone()])
|
solana_program::program::invoke(&ix, &[ctx.accounts.mint, ctx.accounts.rent])
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -277,7 +262,7 @@ pub fn initialize_mint2<'info>(
|
||||||
freeze_authority,
|
freeze_authority,
|
||||||
decimals,
|
decimals,
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke(&ix, &[ctx.accounts.mint.clone()]).map_err(Into::into)
|
solana_program::program::invoke(&ix, &[ctx.accounts.mint]).map_err(Into::into)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_authority<'info>(
|
pub fn set_authority<'info>(
|
||||||
|
@ -300,10 +285,7 @@ pub fn set_authority<'info>(
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke_signed(
|
solana_program::program::invoke_signed(
|
||||||
&ix,
|
&ix,
|
||||||
&[
|
&[ctx.accounts.account_or_mint, ctx.accounts.current_authority],
|
||||||
ctx.accounts.account_or_mint.clone(),
|
|
||||||
ctx.accounts.current_authority.clone(),
|
|
||||||
],
|
|
||||||
ctx.signer_seeds,
|
ctx.signer_seeds,
|
||||||
)
|
)
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
|
@ -311,7 +293,7 @@ pub fn set_authority<'info>(
|
||||||
|
|
||||||
pub fn sync_native<'info>(ctx: CpiContext<'_, '_, '_, 'info, SyncNative<'info>>) -> Result<()> {
|
pub fn sync_native<'info>(ctx: CpiContext<'_, '_, '_, 'info, SyncNative<'info>>) -> Result<()> {
|
||||||
let ix = spl_token_2022::instruction::sync_native(ctx.program.key, ctx.accounts.account.key)?;
|
let ix = spl_token_2022::instruction::sync_native(ctx.program.key, ctx.accounts.account.key)?;
|
||||||
solana_program::program::invoke(&ix, &[ctx.accounts.account.clone()]).map_err(Into::into)
|
solana_program::program::invoke(&ix, &[ctx.accounts.account]).map_err(Into::into)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_account_data_size<'info>(
|
pub fn get_account_data_size<'info>(
|
||||||
|
@ -323,7 +305,7 @@ pub fn get_account_data_size<'info>(
|
||||||
ctx.accounts.mint.key,
|
ctx.accounts.mint.key,
|
||||||
extension_types,
|
extension_types,
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke(&ix, &[ctx.accounts.mint.clone()])?;
|
solana_program::program::invoke(&ix, &[ctx.accounts.mint])?;
|
||||||
solana_program::program::get_return_data()
|
solana_program::program::get_return_data()
|
||||||
.ok_or(solana_program::program_error::ProgramError::InvalidInstructionData)
|
.ok_or(solana_program::program_error::ProgramError::InvalidInstructionData)
|
||||||
.and_then(|(key, data)| {
|
.and_then(|(key, data)| {
|
||||||
|
@ -347,7 +329,7 @@ pub fn initialize_mint_close_authority<'info>(
|
||||||
ctx.accounts.mint.key,
|
ctx.accounts.mint.key,
|
||||||
close_authority,
|
close_authority,
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke(&ix, &[ctx.accounts.mint.clone()]).map_err(Into::into)
|
solana_program::program::invoke(&ix, &[ctx.accounts.mint]).map_err(Into::into)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn initialize_immutable_owner<'info>(
|
pub fn initialize_immutable_owner<'info>(
|
||||||
|
@ -357,7 +339,7 @@ pub fn initialize_immutable_owner<'info>(
|
||||||
ctx.program.key,
|
ctx.program.key,
|
||||||
ctx.accounts.account.key,
|
ctx.accounts.account.key,
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke(&ix, &[ctx.accounts.account.clone()]).map_err(Into::into)
|
solana_program::program::invoke(&ix, &[ctx.accounts.account]).map_err(Into::into)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn amount_to_ui_amount<'info>(
|
pub fn amount_to_ui_amount<'info>(
|
||||||
|
@ -369,7 +351,7 @@ pub fn amount_to_ui_amount<'info>(
|
||||||
ctx.accounts.account.key,
|
ctx.accounts.account.key,
|
||||||
amount,
|
amount,
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke(&ix, &[ctx.accounts.account.clone()])?;
|
solana_program::program::invoke(&ix, &[ctx.accounts.account])?;
|
||||||
solana_program::program::get_return_data()
|
solana_program::program::get_return_data()
|
||||||
.ok_or(solana_program::program_error::ProgramError::InvalidInstructionData)
|
.ok_or(solana_program::program_error::ProgramError::InvalidInstructionData)
|
||||||
.and_then(|(key, data)| {
|
.and_then(|(key, data)| {
|
||||||
|
@ -393,7 +375,7 @@ pub fn ui_amount_to_amount<'info>(
|
||||||
ctx.accounts.account.key,
|
ctx.accounts.account.key,
|
||||||
ui_amount,
|
ui_amount,
|
||||||
)?;
|
)?;
|
||||||
solana_program::program::invoke(&ix, &[ctx.accounts.account.clone()])?;
|
solana_program::program::invoke(&ix, &[ctx.accounts.account])?;
|
||||||
solana_program::program::get_return_data()
|
solana_program::program::get_return_data()
|
||||||
.ok_or(solana_program::program_error::ProgramError::InvalidInstructionData)
|
.ok_or(solana_program::program_error::ProgramError::InvalidInstructionData)
|
||||||
.and_then(|(key, data)| {
|
.and_then(|(key, data)| {
|
||||||
|
|
|
@ -375,60 +375,60 @@
|
||||||
"solanaVersion": "1.17.0",
|
"solanaVersion": "1.17.0",
|
||||||
"result": {
|
"result": {
|
||||||
"binarySize": {
|
"binarySize": {
|
||||||
"bench": 764032
|
"bench": 735800
|
||||||
},
|
},
|
||||||
"computeUnits": {
|
"computeUnits": {
|
||||||
"accountInfo1": 584,
|
"accountInfo1": 584,
|
||||||
"accountInfo2": 824,
|
"accountInfo2": 824,
|
||||||
"accountInfo4": 1319,
|
"accountInfo4": 1319,
|
||||||
"accountInfo8": 2531,
|
"accountInfo8": 2531,
|
||||||
"accountEmptyInit1": 5099,
|
"accountEmptyInit1": 4899,
|
||||||
"accountEmpty1": 708,
|
"accountEmpty1": 708,
|
||||||
"accountEmptyInit2": 9676,
|
"accountEmptyInit2": 9325,
|
||||||
"accountEmpty2": 1064,
|
"accountEmpty2": 1064,
|
||||||
"accountEmptyInit4": 18477,
|
"accountEmptyInit4": 17821,
|
||||||
"accountEmpty4": 1766,
|
"accountEmpty4": 1766,
|
||||||
"accountEmptyInit8": 36113,
|
"accountEmptyInit8": 34855,
|
||||||
"accountEmpty8": 3179,
|
"accountEmpty8": 3179,
|
||||||
"accountSizedInit1": 5187,
|
"accountSizedInit1": 4988,
|
||||||
"accountSized1": 732,
|
"accountSized1": 732,
|
||||||
"accountSizedInit2": 9851,
|
"accountSizedInit2": 9499,
|
||||||
"accountSized2": 1106,
|
"accountSized2": 1106,
|
||||||
"accountSizedInit4": 18876,
|
"accountSizedInit4": 18219,
|
||||||
"accountSized4": 1863,
|
"accountSized4": 1863,
|
||||||
"accountSizedInit8": 36832,
|
"accountSizedInit8": 35574,
|
||||||
"accountSized8": 3374,
|
"accountSized8": 3374,
|
||||||
"accountUnsizedInit1": 5275,
|
"accountUnsizedInit1": 5075,
|
||||||
"accountUnsized1": 759,
|
"accountUnsized1": 759,
|
||||||
"accountUnsizedInit2": 10090,
|
"accountUnsizedInit2": 9736,
|
||||||
"accountUnsized2": 1168,
|
"accountUnsized2": 1168,
|
||||||
"accountUnsizedInit4": 19281,
|
"accountUnsizedInit4": 18622,
|
||||||
"accountUnsized4": 2000,
|
"accountUnsized4": 2000,
|
||||||
"accountUnsizedInit8": 37378,
|
"accountUnsizedInit8": 36119,
|
||||||
"accountUnsized8": 3667,
|
"accountUnsized8": 3667,
|
||||||
"boxedAccountEmptyInit1": 5145,
|
"boxedAccountEmptyInit1": 4952,
|
||||||
"boxedAccountEmpty1": 745,
|
"boxedAccountEmpty1": 745,
|
||||||
"boxedAccountEmptyInit2": 9769,
|
"boxedAccountEmptyInit2": 9426,
|
||||||
"boxedAccountEmpty2": 1136,
|
"boxedAccountEmpty2": 1136,
|
||||||
"boxedAccountEmptyInit4": 18661,
|
"boxedAccountEmptyInit4": 18020,
|
||||||
"boxedAccountEmpty4": 1913,
|
"boxedAccountEmpty4": 1913,
|
||||||
"boxedAccountEmptyInit8": 36488,
|
"boxedAccountEmptyInit8": 35248,
|
||||||
"boxedAccountEmpty8": 3500,
|
"boxedAccountEmpty8": 3500,
|
||||||
"boxedAccountSizedInit1": 5222,
|
"boxedAccountSizedInit1": 5027,
|
||||||
"boxedAccountSized1": 767,
|
"boxedAccountSized1": 767,
|
||||||
"boxedAccountSizedInit2": 9925,
|
"boxedAccountSizedInit2": 9582,
|
||||||
"boxedAccountSized2": 1183,
|
"boxedAccountSized2": 1183,
|
||||||
"boxedAccountSizedInit4": 18973,
|
"boxedAccountSizedInit4": 18332,
|
||||||
"boxedAccountSized4": 2002,
|
"boxedAccountSized4": 2002,
|
||||||
"boxedAccountSizedInit8": 37111,
|
"boxedAccountSizedInit8": 35868,
|
||||||
"boxedAccountSized8": 3682,
|
"boxedAccountSized8": 3682,
|
||||||
"boxedAccountUnsizedInit1": 5304,
|
"boxedAccountUnsizedInit1": 5109,
|
||||||
"boxedAccountUnsized1": 797,
|
"boxedAccountUnsized1": 797,
|
||||||
"boxedAccountUnsizedInit2": 10089,
|
"boxedAccountUnsizedInit2": 9746,
|
||||||
"boxedAccountUnsized2": 1246,
|
"boxedAccountUnsized2": 1246,
|
||||||
"boxedAccountUnsizedInit4": 19303,
|
"boxedAccountUnsizedInit4": 18658,
|
||||||
"boxedAccountUnsized4": 2135,
|
"boxedAccountUnsized4": 2135,
|
||||||
"boxedAccountUnsizedInit8": 37770,
|
"boxedAccountUnsizedInit8": 36525,
|
||||||
"boxedAccountUnsized8": 3948,
|
"boxedAccountUnsized8": 3948,
|
||||||
"boxedInterfaceAccountMint1": 2085,
|
"boxedInterfaceAccountMint1": 2085,
|
||||||
"boxedInterfaceAccountMint2": 3726,
|
"boxedInterfaceAccountMint2": 3726,
|
||||||
|
|
Loading…
Reference in New Issue