radix_transactions/model/v2/
instruction_v2.rs

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