pub enum Expression {
Show 33 variants
Literal(Literal),
Var(String),
StateAccess(String),
MappingAccess {
mapping_name: String,
keys: Vec<Expression>,
account_name: String,
},
MsgSender,
MsgValue,
BlockTimestamp,
ClockSlot,
ClockEpoch,
ClockUnixTimestamp,
RentMinimumBalance {
data_len: Box<Expression>,
},
RentIsExempt {
lamports: Box<Expression>,
data_len: Box<Expression>,
},
Binary {
op: BinaryOp,
left: Box<Expression>,
right: Box<Expression>,
},
Unary {
op: UnaryOp,
expr: Box<Expression>,
},
Call {
func: String,
args: Vec<Expression>,
},
MethodCall {
receiver: Box<Expression>,
method: String,
args: Vec<Expression>,
},
InterfaceCast {
interface_name: String,
program_id: Box<Expression>,
},
CpiCall {
program: Box<Expression>,
interface_name: String,
method: String,
args: Vec<Expression>,
},
TokenTransfer {
from: Box<Expression>,
to: Box<Expression>,
authority: Box<Expression>,
amount: Box<Expression>,
},
TokenMint {
mint: Box<Expression>,
to: Box<Expression>,
authority: Box<Expression>,
amount: Box<Expression>,
},
TokenBurn {
from: Box<Expression>,
mint: Box<Expression>,
authority: Box<Expression>,
amount: Box<Expression>,
},
SolTransfer {
to: Box<Expression>,
amount: Box<Expression>,
},
GetATA {
owner: Box<Expression>,
mint: Box<Expression>,
},
Index {
expr: Box<Expression>,
index: Box<Expression>,
},
Field {
expr: Box<Expression>,
field: String,
},
Ternary {
condition: Box<Expression>,
then_expr: Box<Expression>,
else_expr: Box<Expression>,
},
Assert {
condition: Box<Expression>,
message: Option<String>,
},
AssertEq {
left: Box<Expression>,
right: Box<Expression>,
message: Option<String>,
},
AssertNe {
left: Box<Expression>,
right: Box<Expression>,
message: Option<String>,
},
AssertGt {
left: Box<Expression>,
right: Box<Expression>,
message: Option<String>,
},
AssertGe {
left: Box<Expression>,
right: Box<Expression>,
message: Option<String>,
},
AssertLt {
left: Box<Expression>,
right: Box<Expression>,
message: Option<String>,
},
AssertLe {
left: Box<Expression>,
right: Box<Expression>,
message: Option<String>,
},
}Expand description
Expressions in IR
Variants§
Literal(Literal)
Var(String)
StateAccess(String)
MappingAccess
Mapping access: mapping_name[key1][key2]... → ctx.accounts.{account_name}.value
Fields
keys: Vec<Expression>All keys in order (outer to inner)
MsgSender
MsgValue
BlockTimestamp
ClockSlot
ClockEpoch
ClockUnixTimestamp
RentMinimumBalance
Fields
data_len: Box<Expression>RentIsExempt
Binary
Unary
Call
MethodCall
InterfaceCast
Interface cast for CPI: IERC20(programId) -> allows calling methods on external programs
Fields
program_id: Box<Expression>The program ID to call
CpiCall
Cross-Program Invocation call
Fields
program: Box<Expression>The program to call (expression evaluating to program ID)
args: Vec<Expression>Arguments to the CPI call
TokenTransfer
SPL Token transfer CPI
Fields
from: Box<Expression>from account
to: Box<Expression>to account
authority
amount: Box<Expression>amount
TokenMint
SPL Token mint CPI
Fields
mint: Box<Expression>mint account
to: Box<Expression>to account
authority
amount: Box<Expression>amount
TokenBurn
SPL Token burn CPI
Fields
from: Box<Expression>from account
mint: Box<Expression>mint account
authority
amount: Box<Expression>amount
SolTransfer
Direct SOL transfer via system_program::transfer
GetATA
Get Associated Token Address
Index
Field
Ternary
Assert
Assert expression: assert(condition, “message”)
AssertEq
Assert equality: assertEq(left, right, “message”)
AssertNe
Assert not equal: assertNe(left, right, “message”)
AssertGt
Assert greater than: assertGt(left, right, “message”)
AssertGe
Assert greater or equal: assertGe(left, right, “message”)
AssertLt
Assert less than: assertLt(left, right, “message”)
AssertLe
Assert less or equal: assertLe(left, right, “message”)
Trait Implementations§
Source§impl Clone for Expression
impl Clone for Expression
Source§fn clone(&self) -> Expression
fn clone(&self) -> Expression
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more