11use dlp:: {
2- args:: { CommitDiffArgs , CommitStateArgs } ,
2+ args:: { CommitDiffArgs , CommitFinalizeArgs , CommitStateArgs } ,
33 compute_diff,
44 instruction_builder:: {
55 call_handler_size_budget, call_handler_v2_size_budget,
6- commit_diff_size_budget, commit_size_budget , finalize_size_budget ,
7- undelegate_size_budget,
6+ commit_diff_size_budget, commit_finalize_size_budget ,
7+ commit_size_budget , finalize_size_budget , undelegate_size_budget,
88 } ,
99 AccountSizeClass ,
1010} ;
@@ -19,15 +19,16 @@ use crate::tasks::{
1919 buffer_task:: { BufferTask , BufferTaskType } ,
2020 visitor:: Visitor ,
2121 BaseActionTask , BaseActionV2Task , BaseTask , BaseTaskError , BaseTaskResult ,
22- CommitDiffTask , CommitTask , FinalizeTask , PreparationState , TaskType ,
23- UndelegateTask ,
22+ CommitDiffTask , CommitFinalizeTask , CommitTask , FinalizeTask ,
23+ PreparationState , TaskType , UndelegateTask ,
2424} ;
2525
2626/// Task that will be executed on Base layer via arguments
2727#[ derive( Clone ) ]
2828pub enum ArgsTaskType {
2929 Commit ( CommitTask ) ,
3030 CommitDiff ( CommitDiffTask ) ,
31+ CommitFinalize ( CommitFinalizeTask ) ,
3132 Finalize ( FinalizeTask ) ,
3233 Undelegate ( UndelegateTask ) , // Special action really
3334 BaseAction ( BaseActionTask ) ,
@@ -95,6 +96,38 @@ impl BaseTask for ArgsTask {
9596 args,
9697 )
9798 }
99+ ArgsTaskType :: CommitFinalize ( task) => {
100+ let ( data, data_is_diff) =
101+ if let Some ( base_account) = & task. base_account {
102+ (
103+ compute_diff (
104+ base_account. data ( ) ,
105+ task. committed_account . account . data ( ) ,
106+ )
107+ . to_vec ( ) ,
108+ true ,
109+ )
110+ } else {
111+ ( task. committed_account . account . data . clone ( ) , false )
112+ } ;
113+
114+ let mut args = CommitFinalizeArgs {
115+ commit_id : task. commit_id ,
116+ lamports : task. committed_account . account . lamports ,
117+ data_is_diff : data_is_diff. into ( ) ,
118+ allow_undelegation : task. allow_undelegation . into ( ) ,
119+ bumps : Default :: default ( ) ,
120+ reserved_padding : Default :: default ( ) ,
121+ } ;
122+
123+ dlp:: instruction_builder:: commit_finalize (
124+ * validator,
125+ task. committed_account . pubkey ,
126+ & mut args,
127+ & data,
128+ )
129+ . 0
130+ }
98131 ArgsTaskType :: Finalize ( value) => {
99132 dlp:: instruction_builder:: finalize (
100133 * validator,
@@ -111,6 +144,8 @@ impl BaseTask for ArgsTask {
111144 }
112145 ArgsTaskType :: BaseAction ( value) => {
113146 let action = & value. action ;
147+
148+ #[ allow( deprecated) ]
114149 dlp:: instruction_builder:: call_handler (
115150 * validator,
116151 action. destination_program ,
@@ -147,6 +182,11 @@ impl BaseTask for ArgsTask {
147182 BufferTaskType :: CommitDiff ( value) ,
148183 ) ) )
149184 }
185+ ArgsTaskType :: CommitFinalize ( value) => {
186+ Ok ( Box :: new ( BufferTask :: new_preparation_required (
187+ BufferTaskType :: CommitFinalize ( value) ,
188+ ) ) )
189+ }
150190 ArgsTaskType :: BaseAction ( _)
151191 | ArgsTaskType :: BaseActionV2 ( _)
152192 | ArgsTaskType :: Finalize ( _)
@@ -175,6 +215,7 @@ impl BaseTask for ArgsTask {
175215 match & self . task_type {
176216 ArgsTaskType :: Commit ( _) => 70_000 ,
177217 ArgsTaskType :: CommitDiff ( _) => 70_000 ,
218+ ArgsTaskType :: CommitFinalize ( _) => 70_000 ,
178219 ArgsTaskType :: BaseAction ( task) => task. action . compute_units ,
179220 ArgsTaskType :: BaseActionV2 ( task) => task. action . compute_units ,
180221 ArgsTaskType :: Undelegate ( _) => 70_000 ,
@@ -194,6 +235,11 @@ impl BaseTask for ArgsTask {
194235 task. committed_account . account . data . len ( ) as u32 ,
195236 ) )
196237 }
238+ ArgsTaskType :: CommitFinalize ( task) => {
239+ commit_finalize_size_budget ( AccountSizeClass :: Dynamic (
240+ task. committed_account . account . data . len ( ) as u32 ,
241+ ) )
242+ }
197243 ArgsTaskType :: BaseAction ( task) => {
198244 // assume all other accounts are Small accounts.
199245 let other_accounts_budget =
@@ -235,6 +281,7 @@ impl BaseTask for ArgsTask {
235281 match & self . task_type {
236282 ArgsTaskType :: Commit ( _) => TaskType :: Commit ,
237283 ArgsTaskType :: CommitDiff ( _) => TaskType :: Commit ,
284+ ArgsTaskType :: CommitFinalize ( _) => TaskType :: CommitFinalize ,
238285 ArgsTaskType :: BaseAction ( _) | ArgsTaskType :: BaseActionV2 ( _) => {
239286 TaskType :: Action
240287 }
@@ -256,6 +303,9 @@ impl BaseTask for ArgsTask {
256303 ArgsTaskType :: CommitDiff ( task) => {
257304 task. commit_id = commit_id;
258305 }
306+ ArgsTaskType :: CommitFinalize ( task) => {
307+ task. commit_id = commit_id;
308+ }
259309 ArgsTaskType :: BaseAction ( _)
260310 | ArgsTaskType :: BaseActionV2 ( _)
261311 | ArgsTaskType :: Finalize ( _)
@@ -269,6 +319,7 @@ impl LabelValue for ArgsTask {
269319 match self . task_type {
270320 ArgsTaskType :: Commit ( _) => "args_commit" ,
271321 ArgsTaskType :: CommitDiff ( _) => "args_commit_diff" ,
322+ ArgsTaskType :: CommitFinalize ( _) => "args_commit_finalize" ,
272323 ArgsTaskType :: BaseAction ( _) => "args_action" ,
273324 ArgsTaskType :: BaseActionV2 ( _) => "args_action_v2" ,
274325 ArgsTaskType :: Finalize ( _) => "args_finalize" ,
0 commit comments