|
@@ -239,9 +239,9 @@ pub mod prelude {
|
|
|
accounts::signer::Signer, accounts::system_account::SystemAccount,
|
|
|
accounts::sysvar::Sysvar, accounts::unchecked_account::UncheckedAccount, constant,
|
|
|
context::Context, context::CpiContext, declare_id, emit, err, error, event, interface,
|
|
|
- program, require, require_eq, require_keys_eq,
|
|
|
- solana_program::bpf_loader_upgradeable::UpgradeableLoaderState, source, state, zero_copy,
|
|
|
- AccountDeserialize, AccountSerialize, Accounts, AccountsExit, AnchorDeserialize,
|
|
|
+ program, require, require_eq, require_gt, require_gte, require_keys_eq, require_keys_neq,
|
|
|
+ require_neq, solana_program::bpf_loader_upgradeable::UpgradeableLoaderState, source, state,
|
|
|
+ zero_copy, AccountDeserialize, AccountSerialize, Accounts, AccountsExit, AnchorDeserialize,
|
|
|
AnchorSerialize, Id, Key, Owner, ProgramData, Result, System, ToAccountInfo,
|
|
|
ToAccountInfos, ToAccountMetas,
|
|
|
};
|
|
@@ -397,6 +397,36 @@ macro_rules! require_eq {
|
|
|
};
|
|
|
}
|
|
|
|
|
|
+/// Ensures two NON-PUBKEY values are not equal.
|
|
|
+///
|
|
|
+/// Use [require_keys_neq](crate::prelude::require_keys_neq)
|
|
|
+/// to compare two pubkeys.
|
|
|
+///
|
|
|
+/// Can be used with or without a custom error code.
|
|
|
+///
|
|
|
+/// # Example
|
|
|
+/// ```rust,ignore
|
|
|
+/// pub fn set_data(ctx: Context<SetData>, data: u64) -> Result<()> {
|
|
|
+/// require_neq!(ctx.accounts.data.data, 0);
|
|
|
+/// ctx.accounts.data.data = data;
|
|
|
+/// Ok(());
|
|
|
+/// }
|
|
|
+/// ```
|
|
|
+#[macro_export]
|
|
|
+macro_rules! require_neq {
|
|
|
+ ($value1: expr, $value2: expr, $error_code: expr $(,)?) => {
|
|
|
+ if $value1 == $value2 {
|
|
|
+ return Err(error!($error_code).with_values(($value1, $value2)));
|
|
|
+ }
|
|
|
+ };
|
|
|
+ ($value1: expr, $value2: expr $(,)?) => {
|
|
|
+ if $value1 == $value2 {
|
|
|
+ return Err(error!(anchor_lang::error::ErrorCode::RequireNeqViolated)
|
|
|
+ .with_values(($value1, $value2)));
|
|
|
+ }
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
/// Ensures two pubkeys values are equal.
|
|
|
///
|
|
|
/// Use [require_eq](crate::prelude::require_eq)
|
|
@@ -427,6 +457,96 @@ macro_rules! require_keys_eq {
|
|
|
};
|
|
|
}
|
|
|
|
|
|
+/// Ensures two pubkeys are not equal.
|
|
|
+///
|
|
|
+/// Use [require_neq](crate::prelude::require_neq)
|
|
|
+/// to compare two non-pubkey values.
|
|
|
+///
|
|
|
+/// Can be used with or without a custom error code.
|
|
|
+///
|
|
|
+/// # Example
|
|
|
+/// ```rust,ignore
|
|
|
+/// pub fn set_data(ctx: Context<SetData>, data: u64) -> Result<()> {
|
|
|
+/// require_keys_neq!(ctx.accounts.data.authority.key(), ctx.accounts.other.key());
|
|
|
+/// ctx.accounts.data.data = data;
|
|
|
+/// Ok(())
|
|
|
+/// }
|
|
|
+/// ```
|
|
|
+#[macro_export]
|
|
|
+macro_rules! require_keys_neq {
|
|
|
+ ($value1: expr, $value2: expr, $error_code: expr $(,)?) => {
|
|
|
+ if $value1 == $value2 {
|
|
|
+ return Err(error!($error_code).with_pubkeys(($value1, $value2)));
|
|
|
+ }
|
|
|
+ };
|
|
|
+ ($value1: expr, $value2: expr $(,)?) => {
|
|
|
+ if $value1 == $value2 {
|
|
|
+ return Err(
|
|
|
+ error!(anchor_lang::error::ErrorCode::RequireKeysNeqViolated)
|
|
|
+ .with_pubkeys(($value1, $value2)),
|
|
|
+ );
|
|
|
+ }
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+/// Ensures the first NON-PUBKEY value is greater than the second
|
|
|
+/// NON-PUBKEY value.
|
|
|
+///
|
|
|
+/// To include an equality check, use [require_gte](crate::require_gte).
|
|
|
+///
|
|
|
+/// Can be used with or without a custom error code.
|
|
|
+///
|
|
|
+/// # Example
|
|
|
+/// ```rust,ignore
|
|
|
+/// pub fn set_data(ctx: Context<SetData>, data: u64) -> Result<()> {
|
|
|
+/// require_gt!(ctx.accounts.data.data, 0);
|
|
|
+/// ctx.accounts.data.data = data;
|
|
|
+/// Ok(());
|
|
|
+/// }
|
|
|
+/// ```
|
|
|
+#[macro_export]
|
|
|
+macro_rules! require_gt {
|
|
|
+ ($value1: expr, $value2: expr, $error_code: expr $(,)?) => {
|
|
|
+ if $value1 <= $value2 {
|
|
|
+ return Err(error!($error_code).with_values(($value1, $value2)));
|
|
|
+ }
|
|
|
+ };
|
|
|
+ ($value1: expr, $value2: expr $(,)?) => {
|
|
|
+ if $value1 <= $value2 {
|
|
|
+ return Err(error!(anchor_lang::error::ErrorCode::RequireGtViolated)
|
|
|
+ .with_values(($value1, $value2)));
|
|
|
+ }
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+/// Ensures the first NON-PUBKEY value is greater than or equal
|
|
|
+/// to the second NON-PUBKEY value.
|
|
|
+///
|
|
|
+/// Can be used with or without a custom error code.
|
|
|
+///
|
|
|
+/// # Example
|
|
|
+/// ```rust,ignore
|
|
|
+/// pub fn set_data(ctx: Context<SetData>, data: u64) -> Result<()> {
|
|
|
+/// require_gte!(ctx.accounts.data.data, 1);
|
|
|
+/// ctx.accounts.data.data = data;
|
|
|
+/// Ok(());
|
|
|
+/// }
|
|
|
+/// ```
|
|
|
+#[macro_export]
|
|
|
+macro_rules! require_gte {
|
|
|
+ ($value1: expr, $value2: expr, $error_code: expr $(,)?) => {
|
|
|
+ if $value1 < $value2 {
|
|
|
+ return Err(error!($error_code).with_values(($value1, $value2)));
|
|
|
+ }
|
|
|
+ };
|
|
|
+ ($value1: expr, $value2: expr $(,)?) => {
|
|
|
+ if $value1 < $value2 {
|
|
|
+ return Err(error!(anchor_lang::error::ErrorCode::RequireGteViolated)
|
|
|
+ .with_values(($value1, $value2)));
|
|
|
+ }
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
/// Returns with the given error.
|
|
|
/// Use this with a custom error type.
|
|
|
///
|