radix_transactions/model/v1/
instruction_v1.rs

1use crate::internal_prelude::*;
2
3impl<T: SborEnumVariantFor<InstructionV1, ManifestCustomValueKind>> From<T> for InstructionV1 {
4    fn from(instruction: T) -> Self {
5        instruction.into_enum()
6    }
7}
8
9impl From<InstructionV1> for AnyInstruction {
10    fn from(any_v1_instruction: InstructionV1) -> Self {
11        any_v1_instruction.into_any()
12    }
13}
14
15impl ManifestInstructionSet for InstructionV1 {
16    fn map_ref<M: InstructionRefMapper>(&self, mapper: M) -> M::Output<'_> {
17        match self {
18            InstructionV1::TakeFromWorktop(x) => mapper.apply(x),
19            InstructionV1::TakeNonFungiblesFromWorktop(x) => mapper.apply(x),
20            InstructionV1::TakeAllFromWorktop(x) => mapper.apply(x),
21            InstructionV1::ReturnToWorktop(x) => mapper.apply(x),
22            InstructionV1::BurnResource(x) => mapper.apply(x),
23            InstructionV1::AssertWorktopContainsAny(x) => mapper.apply(x),
24            InstructionV1::AssertWorktopContains(x) => mapper.apply(x),
25            InstructionV1::AssertWorktopContainsNonFungibles(x) => mapper.apply(x),
26            InstructionV1::CreateProofFromBucketOfAmount(x) => mapper.apply(x),
27            InstructionV1::CreateProofFromBucketOfNonFungibles(x) => mapper.apply(x),
28            InstructionV1::CreateProofFromBucketOfAll(x) => mapper.apply(x),
29            InstructionV1::CreateProofFromAuthZoneOfAmount(x) => mapper.apply(x),
30            InstructionV1::CreateProofFromAuthZoneOfNonFungibles(x) => mapper.apply(x),
31            InstructionV1::CreateProofFromAuthZoneOfAll(x) => mapper.apply(x),
32            InstructionV1::CloneProof(x) => mapper.apply(x),
33            InstructionV1::DropProof(x) => mapper.apply(x),
34            InstructionV1::PushToAuthZone(x) => mapper.apply(x),
35            InstructionV1::PopFromAuthZone(x) => mapper.apply(x),
36            InstructionV1::DropAuthZoneProofs(x) => mapper.apply(x),
37            InstructionV1::DropAuthZoneRegularProofs(x) => mapper.apply(x),
38            InstructionV1::DropAuthZoneSignatureProofs(x) => mapper.apply(x),
39            InstructionV1::DropNamedProofs(x) => mapper.apply(x),
40            InstructionV1::DropAllProofs(x) => mapper.apply(x),
41            InstructionV1::CallFunction(x) => mapper.apply(x),
42            InstructionV1::CallMethod(x) => mapper.apply(x),
43            InstructionV1::CallRoyaltyMethod(x) => mapper.apply(x),
44            InstructionV1::CallMetadataMethod(x) => mapper.apply(x),
45            InstructionV1::CallRoleAssignmentMethod(x) => mapper.apply(x),
46            InstructionV1::CallDirectVaultMethod(x) => mapper.apply(x),
47            InstructionV1::AllocateGlobalAddress(x) => mapper.apply(x),
48        }
49    }
50
51    fn map_self<M: OwnedInstructionMapper>(self, mapper: M) -> M::Output {
52        match self {
53            InstructionV1::TakeFromWorktop(x) => mapper.apply(x),
54            InstructionV1::TakeNonFungiblesFromWorktop(x) => mapper.apply(x),
55            InstructionV1::TakeAllFromWorktop(x) => mapper.apply(x),
56            InstructionV1::ReturnToWorktop(x) => mapper.apply(x),
57            InstructionV1::BurnResource(x) => mapper.apply(x),
58            InstructionV1::AssertWorktopContainsAny(x) => mapper.apply(x),
59            InstructionV1::AssertWorktopContains(x) => mapper.apply(x),
60            InstructionV1::AssertWorktopContainsNonFungibles(x) => mapper.apply(x),
61            InstructionV1::CreateProofFromBucketOfAmount(x) => mapper.apply(x),
62            InstructionV1::CreateProofFromBucketOfNonFungibles(x) => mapper.apply(x),
63            InstructionV1::CreateProofFromBucketOfAll(x) => mapper.apply(x),
64            InstructionV1::CreateProofFromAuthZoneOfAmount(x) => mapper.apply(x),
65            InstructionV1::CreateProofFromAuthZoneOfNonFungibles(x) => mapper.apply(x),
66            InstructionV1::CreateProofFromAuthZoneOfAll(x) => mapper.apply(x),
67            InstructionV1::CloneProof(x) => mapper.apply(x),
68            InstructionV1::DropProof(x) => mapper.apply(x),
69            InstructionV1::PushToAuthZone(x) => mapper.apply(x),
70            InstructionV1::PopFromAuthZone(x) => mapper.apply(x),
71            InstructionV1::DropAuthZoneProofs(x) => mapper.apply(x),
72            InstructionV1::DropAuthZoneRegularProofs(x) => mapper.apply(x),
73            InstructionV1::DropAuthZoneSignatureProofs(x) => mapper.apply(x),
74            InstructionV1::DropNamedProofs(x) => mapper.apply(x),
75            InstructionV1::DropAllProofs(x) => mapper.apply(x),
76            InstructionV1::CallFunction(x) => mapper.apply(x),
77            InstructionV1::CallMethod(x) => mapper.apply(x),
78            InstructionV1::CallRoyaltyMethod(x) => mapper.apply(x),
79            InstructionV1::CallMetadataMethod(x) => mapper.apply(x),
80            InstructionV1::CallRoleAssignmentMethod(x) => mapper.apply(x),
81            InstructionV1::CallDirectVaultMethod(x) => mapper.apply(x),
82            InstructionV1::AllocateGlobalAddress(x) => mapper.apply(x),
83        }
84    }
85}
86
87impl TryFrom<AnyInstruction> for InstructionV1 {
88    type Error = ();
89
90    fn try_from(value: AnyInstruction) -> Result<Self, Self::Error> {
91        let mapped = match value {
92            AnyInstruction::TakeFromWorktop(x) => x.into(),
93            AnyInstruction::TakeNonFungiblesFromWorktop(x) => x.into(),
94            AnyInstruction::TakeAllFromWorktop(x) => x.into(),
95            AnyInstruction::ReturnToWorktop(x) => x.into(),
96            AnyInstruction::BurnResource(x) => x.into(),
97            AnyInstruction::AssertWorktopContainsAny(x) => x.into(),
98            AnyInstruction::AssertWorktopContains(x) => x.into(),
99            AnyInstruction::AssertWorktopContainsNonFungibles(x) => x.into(),
100            AnyInstruction::AssertWorktopResourcesOnly(_) => return Err(()),
101            AnyInstruction::AssertWorktopResourcesInclude(_) => return Err(()),
102            AnyInstruction::AssertNextCallReturnsOnly(_) => return Err(()),
103            AnyInstruction::AssertNextCallReturnsInclude(_) => return Err(()),
104            AnyInstruction::AssertBucketContents(_) => return Err(()),
105            AnyInstruction::CreateProofFromBucketOfAmount(x) => x.into(),
106            AnyInstruction::CreateProofFromBucketOfNonFungibles(x) => x.into(),
107            AnyInstruction::CreateProofFromBucketOfAll(x) => x.into(),
108            AnyInstruction::CreateProofFromAuthZoneOfAmount(x) => x.into(),
109            AnyInstruction::CreateProofFromAuthZoneOfNonFungibles(x) => x.into(),
110            AnyInstruction::CreateProofFromAuthZoneOfAll(x) => x.into(),
111            AnyInstruction::CloneProof(x) => x.into(),
112            AnyInstruction::DropProof(x) => x.into(),
113            AnyInstruction::PushToAuthZone(x) => x.into(),
114            AnyInstruction::PopFromAuthZone(x) => x.into(),
115            AnyInstruction::DropAuthZoneProofs(x) => x.into(),
116            AnyInstruction::DropAuthZoneRegularProofs(x) => x.into(),
117            AnyInstruction::DropAuthZoneSignatureProofs(x) => x.into(),
118            AnyInstruction::DropNamedProofs(x) => x.into(),
119            AnyInstruction::DropAllProofs(x) => x.into(),
120            AnyInstruction::CallFunction(x) => x.into(),
121            AnyInstruction::CallMethod(x) => x.into(),
122            AnyInstruction::CallRoyaltyMethod(x) => x.into(),
123            AnyInstruction::CallMetadataMethod(x) => x.into(),
124            AnyInstruction::CallRoleAssignmentMethod(x) => x.into(),
125            AnyInstruction::CallDirectVaultMethod(x) => x.into(),
126            AnyInstruction::AllocateGlobalAddress(x) => x.into(),
127            AnyInstruction::YieldToParent(_) => return Err(()),
128            AnyInstruction::YieldToChild(_) => return Err(()),
129            AnyInstruction::VerifyParent(_) => return Err(()),
130        };
131        Ok(mapped)
132    }
133}
134
135#[derive(Debug, Clone, PartialEq, Eq, ManifestSbor, ScryptoDescribe, ScryptoSborAssertion)]
136#[sbor(impl_variant_traits)]
137#[sbor_assert(fixed("FILE:instruction_v1_schema.txt"))]
138pub enum InstructionV1 {
139    //===============
140    // Bucket Lifecycle
141    //===============
142    #[sbor(discriminator(TakeFromWorktop::ID))]
143    TakeFromWorktop(#[sbor(flatten)] TakeFromWorktop),
144
145    #[sbor(discriminator(TakeNonFungiblesFromWorktop::ID))]
146    TakeNonFungiblesFromWorktop(#[sbor(flatten)] TakeNonFungiblesFromWorktop),
147
148    #[sbor(discriminator(TakeAllFromWorktop::ID))]
149    TakeAllFromWorktop(#[sbor(flatten)] TakeAllFromWorktop),
150
151    #[sbor(discriminator(ReturnToWorktop::ID))]
152    ReturnToWorktop(#[sbor(flatten)] ReturnToWorktop),
153
154    #[sbor(discriminator(BurnResource::ID))]
155    BurnResource(#[sbor(flatten)] BurnResource),
156
157    //==============
158    // Resource Assertions
159    //==============
160    #[sbor(discriminator(AssertWorktopContainsAny::ID))]
161    AssertWorktopContainsAny(#[sbor(flatten)] AssertWorktopContainsAny),
162
163    #[sbor(discriminator(AssertWorktopContains::ID))]
164    AssertWorktopContains(#[sbor(flatten)] AssertWorktopContains),
165
166    #[sbor(discriminator(AssertWorktopContainsNonFungibles::ID))]
167    AssertWorktopContainsNonFungibles(#[sbor(flatten)] AssertWorktopContainsNonFungibles),
168
169    //==============
170    // Proof Lifecycle
171    //==============
172    #[sbor(discriminator(CreateProofFromBucketOfAmount::ID))]
173    CreateProofFromBucketOfAmount(#[sbor(flatten)] CreateProofFromBucketOfAmount),
174
175    #[sbor(discriminator(CreateProofFromBucketOfNonFungibles::ID))]
176    CreateProofFromBucketOfNonFungibles(#[sbor(flatten)] CreateProofFromBucketOfNonFungibles),
177
178    #[sbor(discriminator(CreateProofFromBucketOfAll::ID))]
179    CreateProofFromBucketOfAll(#[sbor(flatten)] CreateProofFromBucketOfAll),
180
181    #[sbor(discriminator(CreateProofFromAuthZoneOfAmount::ID))]
182    CreateProofFromAuthZoneOfAmount(#[sbor(flatten)] CreateProofFromAuthZoneOfAmount),
183
184    #[sbor(discriminator(CreateProofFromAuthZoneOfNonFungibles::ID))]
185    CreateProofFromAuthZoneOfNonFungibles(#[sbor(flatten)] CreateProofFromAuthZoneOfNonFungibles),
186
187    #[sbor(discriminator(CreateProofFromAuthZoneOfAll::ID))]
188    CreateProofFromAuthZoneOfAll(#[sbor(flatten)] CreateProofFromAuthZoneOfAll),
189
190    #[sbor(discriminator(CloneProof::ID))]
191    CloneProof(#[sbor(flatten)] CloneProof),
192
193    #[sbor(discriminator(DropProof::ID))]
194    DropProof(#[sbor(flatten)] DropProof),
195
196    #[sbor(discriminator(PushToAuthZone::ID))]
197    PushToAuthZone(#[sbor(flatten)] PushToAuthZone),
198
199    #[sbor(discriminator(PopFromAuthZone::ID))]
200    PopFromAuthZone(#[sbor(flatten)] PopFromAuthZone),
201
202    #[sbor(discriminator(DropAuthZoneProofs::ID))]
203    DropAuthZoneProofs(#[sbor(flatten)] DropAuthZoneProofs),
204
205    #[sbor(discriminator(DropAuthZoneRegularProofs::ID))]
206    DropAuthZoneRegularProofs(#[sbor(flatten)] DropAuthZoneRegularProofs),
207
208    #[sbor(discriminator(DropAuthZoneSignatureProofs::ID))]
209    DropAuthZoneSignatureProofs(#[sbor(flatten)] DropAuthZoneSignatureProofs),
210
211    #[sbor(discriminator(DropNamedProofs::ID))]
212    DropNamedProofs(#[sbor(flatten)] DropNamedProofs),
213
214    #[sbor(discriminator(DropAllProofs::ID))]
215    DropAllProofs(#[sbor(flatten)] DropAllProofs),
216
217    //==============
218    // Invocation
219    //==============
220    #[sbor(discriminator(CallFunction::ID))]
221    CallFunction(#[sbor(flatten)] CallFunction),
222
223    #[sbor(discriminator(CallMethod::ID))]
224    CallMethod(#[sbor(flatten)] CallMethod),
225
226    #[sbor(discriminator(CallRoyaltyMethod::ID))]
227    CallRoyaltyMethod(#[sbor(flatten)] CallRoyaltyMethod),
228
229    #[sbor(discriminator(CallMetadataMethod::ID))]
230    CallMetadataMethod(#[sbor(flatten)] CallMetadataMethod),
231
232    #[sbor(discriminator(CallRoleAssignmentMethod::ID))]
233    CallRoleAssignmentMethod(#[sbor(flatten)] CallRoleAssignmentMethod),
234
235    #[sbor(discriminator(CallDirectVaultMethod::ID))]
236    CallDirectVaultMethod(#[sbor(flatten)] CallDirectVaultMethod),
237
238    //==============
239    // Address Allocation
240    //==============
241    #[sbor(discriminator(AllocateGlobalAddress::ID))]
242    AllocateGlobalAddress(#[sbor(flatten)] AllocateGlobalAddress),
243}