@@ -49,7 +49,7 @@ def build_reverse_output_to_atomical_id_exponent_map(atomical_id_to_output_index
49
49
def get_nominal_atomical_value (value ):
50
50
return value
51
51
52
- def calculate_outputs_to_color_for_ft_atomical_ids (tx , ft_atomicals , sort_by_fifo , is_split_activated ) -> FtColoringSummary :
52
+ def calculate_outputs_to_color_for_ft_atomical_ids (tx , ft_atomicals , sort_by_fifo , is_custom_coloring_activated ) -> FtColoringSummary :
53
53
num_fts = len (ft_atomicals .keys ())
54
54
if num_fts == 0 :
55
55
return None
@@ -63,10 +63,10 @@ def calculate_outputs_to_color_for_ft_atomical_ids(tx, ft_atomicals, sort_by_fif
63
63
for item in atomical_list :
64
64
atomical_id = item .atomical_id
65
65
# If a target exponent was provided, then use that instead
66
- cleanly_assigned , expected_outputs , remaining_value_from_assign = AtomicalsTransferBlueprintBuilder .assign_expected_outputs_basic (item .total_atomical_value , tx , next_start_out_idx , is_split_activated )
66
+ cleanly_assigned , expected_outputs , remaining_value_from_assign = AtomicalsTransferBlueprintBuilder .assign_expected_outputs_basic (item .total_atomical_value , tx , next_start_out_idx , is_custom_coloring_activated )
67
67
if not cleanly_assigned :
68
68
utxo_cleanly_assigned = False
69
- if not is_split_activated :
69
+ if not is_custom_coloring_activated :
70
70
if cleanly_assigned and len (expected_outputs ) > 0 :
71
71
next_start_out_idx = expected_outputs [- 1 ] + 1
72
72
potential_atomical_ids_to_output_idxs_map [atomical_id ] = ExpectedOutputSet (expected_outputs , item .total_atomical_value )
@@ -93,7 +93,7 @@ def calculate_outputs_to_color_for_ft_atomical_ids(tx, ft_atomicals, sort_by_fif
93
93
potential_atomical_ids_to_output_idxs_map = {}
94
94
for item in atomical_list :
95
95
atomical_id = item .atomical_id
96
- cleanly_assigned , expected_outputs , remaining_value_from_assign = AtomicalsTransferBlueprintBuilder .assign_expected_outputs_basic (item .total_atomical_value , tx , 0 , is_split_activated )
96
+ cleanly_assigned , expected_outputs , remaining_value_from_assign = AtomicalsTransferBlueprintBuilder .assign_expected_outputs_basic (item .total_atomical_value , tx , 0 , is_custom_coloring_activated )
97
97
potential_atomical_ids_to_output_idxs_map [atomical_id ] = ExpectedOutputSet (expected_outputs , item .total_atomical_value )
98
98
if remaining_value_from_assign > 0 :
99
99
fts_burned [atomical_id ] = remaining_value_from_assign
@@ -185,19 +185,29 @@ def order_ft_inputs(ft_atomicals: AtomicalInputSummary, sort_by_fifo):
185
185
186
186
class AtomicalsTransferBlueprintBuilder :
187
187
'''Atomicals transfer blueprint builder for calculating outputs to color'''
188
- def __init__ (self , logger , atomicals_spent_at_inputs , operations_found_at_inputs , tx_hash , tx , get_atomicals_id_mint_info , sort_fifo , is_split_activated ):
188
+ def __init__ (
189
+ self ,
190
+ logger ,
191
+ atomicals_spent_at_inputs ,
192
+ operations_found_at_inputs ,
193
+ tx_hash ,
194
+ tx ,
195
+ get_atomicals_id_mint_info ,
196
+ sort_fifo ,
197
+ is_custom_coloring_activated
198
+ ):
189
199
self .logger = logger
190
200
self .atomicals_spent_at_inputs = atomicals_spent_at_inputs
191
201
self .operations_found_at_inputs = operations_found_at_inputs
192
202
self .tx_hash = tx_hash
193
203
self .tx = tx
194
204
self .get_atomicals_id_mint_info = get_atomicals_id_mint_info
195
205
self .sort_fifo = sort_fifo
196
- self .is_split_activated = is_split_activated
206
+ self .is_custom_coloring_activated = is_custom_coloring_activated
197
207
nft_atomicals , ft_atomicals , atomical_ids_spent = AtomicalsTransferBlueprintBuilder .build_atomical_input_summaries_by_type (self .get_atomicals_id_mint_info , atomicals_spent_at_inputs )
198
208
self .nft_atomicals = nft_atomicals
199
209
self .ft_atomicals = ft_atomicals
200
- nft_output_blueprint , ft_output_blueprint = AtomicalsTransferBlueprintBuilder .calculate_output_blueprint (self .get_atomicals_id_mint_info , self .tx , self .nft_atomicals , self .ft_atomicals , self .atomicals_spent_at_inputs , self .operations_found_at_inputs , self .sort_fifo , self .is_split_activated )
210
+ nft_output_blueprint , ft_output_blueprint = AtomicalsTransferBlueprintBuilder .calculate_output_blueprint (self .get_atomicals_id_mint_info , self .tx , self .nft_atomicals , self .ft_atomicals , self .atomicals_spent_at_inputs , self .operations_found_at_inputs , self .sort_fifo , self .is_custom_coloring_activated )
201
211
self .nft_output_blueprint = nft_output_blueprint
202
212
self .ft_output_blueprint = ft_output_blueprint
203
213
# if len(ft_atomicals) > 0 or len(nft_atomicals) > 0:
@@ -318,20 +328,20 @@ def calculate_output_blueprint_nfts(cls, get_atomicals_id_mint_info, tx, nft_ato
318
328
return AtomicalsTransferBlueprintBuilder .calculate_nft_atomicals_regular (nft_map , nft_atomicals , tx , operations_found_at_inputs , sort_fifo )
319
329
320
330
@classmethod
321
- def calculate_output_blueprint_fts (cls , tx , ft_atomicals , operations_found_at_inputs , sort_fifo , is_split_activated ):
331
+ def calculate_output_blueprint_fts (cls , tx , ft_atomicals , operations_found_at_inputs , sort_fifo , is_custom_coloring_activated ):
322
332
if not ft_atomicals or len (ft_atomicals ) == 0 :
323
333
return AtomicalFtOutputBlueprintAssignmentSummary ({}, {}, True , None )
324
334
325
335
# Split apart multiple NFT/FT from a UTXO
326
336
should_split_ft_atomicals = is_split_operation (operations_found_at_inputs )
327
337
if should_split_ft_atomicals :
328
- return AtomicalsTransferBlueprintBuilder .color_ft_atomicals_split (ft_atomicals , operations_found_at_inputs , tx , is_split_activated )
338
+ return AtomicalsTransferBlueprintBuilder .color_ft_atomicals_split (ft_atomicals , operations_found_at_inputs , tx , is_custom_coloring_activated )
329
339
330
- should_custom_colored_ft_atomicals = is_custom_colored_operation (operations_found_at_inputs )
340
+ should_custom_colored_ft_atomicals = is_custom_colored_operation (operations_found_at_inputs ) and is_custom_coloring_activated
331
341
if should_custom_colored_ft_atomicals :
332
342
return AtomicalsTransferBlueprintBuilder .custom_color_ft_atomicals (ft_atomicals , operations_found_at_inputs , tx )
333
343
# Normal assignment in all cases including fall through of failure to provide a target exponent in the above resubstantiation
334
- return AtomicalsTransferBlueprintBuilder .color_ft_atomicals_regular (ft_atomicals , tx , sort_fifo , is_split_activated )
344
+ return AtomicalsTransferBlueprintBuilder .color_ft_atomicals_regular (ft_atomicals , tx , sort_fifo , is_custom_coloring_activated )
335
345
336
346
@classmethod
337
347
def custom_color_ft_atomicals (cls , ft_atomicals , operations_found_at_inputs , tx ):
@@ -363,7 +373,7 @@ def custom_color_ft_atomicals(cls, ft_atomicals, operations_found_at_inputs, tx)
363
373
return AtomicalFtOutputBlueprintAssignmentSummary (output_colored_map , fts_burned , cleanly_assigned , None )
364
374
365
375
@classmethod
366
- def color_ft_atomicals_split (cls , ft_atomicals , operations_found_at_inputs , tx , is_split_activated ):
376
+ def color_ft_atomicals_split (cls , ft_atomicals , operations_found_at_inputs , tx , is_custom_coloring_activated ):
367
377
output_colored_map = {}
368
378
fts_burned = {}
369
379
cleanly_assigned = True
@@ -381,7 +391,9 @@ def color_ft_atomicals_split(cls, ft_atomicals, operations_found_at_inputs, tx,
381
391
if isinstance (total_amount_to_skip_potential , int ) and total_amount_to_skip_potential >= 0 :
382
392
total_amount_to_skip = total_amount_to_skip_potential
383
393
total_skipped_so_far = 0
384
- if is_split_activated :
394
+ # is_custom_coloring logic
395
+ # use if else keep it simple
396
+ if is_custom_coloring_activated :
385
397
for out_idx , txout in enumerate (tx .outputs ):
386
398
# If the first output should be skipped and we have not yet done so, then skip/ignore it
387
399
if total_amount_to_skip > 0 and total_skipped_so_far < total_amount_to_skip :
@@ -405,8 +417,6 @@ def color_ft_atomicals_split(cls, ft_atomicals, operations_found_at_inputs, tx,
405
417
cleanly_assigned = False
406
418
fts_burned [atomical_id ] = remaining_value
407
419
else :
408
- # is_split_activated logic
409
- # use if else keep it simple
410
420
for out_idx , txout in enumerate (tx .outputs ):
411
421
if total_amount_to_skip > 0 and total_skipped_so_far < total_amount_to_skip :
412
422
total_skipped_so_far += txout .value
@@ -431,17 +441,17 @@ def color_ft_atomicals_split(cls, ft_atomicals, operations_found_at_inputs, tx,
431
441
return AtomicalFtOutputBlueprintAssignmentSummary (output_colored_map , fts_burned , cleanly_assigned , None )
432
442
433
443
@classmethod
434
- def color_ft_atomicals_regular (cls , ft_atomicals , tx , sort_fifo , is_split_activated ):
444
+ def color_ft_atomicals_regular (cls , ft_atomicals , tx , sort_fifo , is_custom_coloring_activated ):
435
445
output_colored_map = {}
436
- ft_coloring_summary = calculate_outputs_to_color_for_ft_atomical_ids (tx , ft_atomicals , sort_fifo , is_split_activated )
446
+ ft_coloring_summary = calculate_outputs_to_color_for_ft_atomical_ids (tx , ft_atomicals , sort_fifo , is_custom_coloring_activated )
437
447
if not ft_coloring_summary :
438
448
return AtomicalFtOutputBlueprintAssignmentSummary ({}, {}, True , None )
439
449
440
450
first_atomical_id = None
441
451
if ft_coloring_summary .atomicals_list and len (ft_coloring_summary .atomicals_list ):
442
452
first_atomical_id = ft_coloring_summary .atomicals_list [0 ].atomical_id
443
453
444
- if not is_split_activated :
454
+ if not is_custom_coloring_activated :
445
455
for atomical_id , atomical_info in ft_coloring_summary .atomical_id_to_expected_outs_map .items ():
446
456
for expected_output_index in atomical_info .expected_outputs :
447
457
txout = tx .outputs [expected_output_index ]
@@ -467,9 +477,9 @@ def color_ft_atomicals_regular(cls, ft_atomicals, tx, sort_fifo, is_split_activa
467
477
return AtomicalFtOutputBlueprintAssignmentSummary (output_colored_map , ft_coloring_summary .fts_burned , cleanly_assigned , first_atomical_id )
468
478
469
479
@classmethod
470
- def calculate_output_blueprint (cls , get_atomicals_id_mint_info , tx , nft_atomicals , ft_atomicals , atomicals_spent_at_inputs , operations_found_at_inputs , sort_fifo , is_split_activated ):
480
+ def calculate_output_blueprint (cls , get_atomicals_id_mint_info , tx , nft_atomicals , ft_atomicals , atomicals_spent_at_inputs , operations_found_at_inputs , sort_fifo , is_custom_coloring_activated ):
471
481
nft_blueprint = AtomicalsTransferBlueprintBuilder .calculate_output_blueprint_nfts (get_atomicals_id_mint_info , tx , nft_atomicals , atomicals_spent_at_inputs , operations_found_at_inputs , sort_fifo )
472
- ft_blueprint = AtomicalsTransferBlueprintBuilder .calculate_output_blueprint_fts (tx , ft_atomicals , operations_found_at_inputs , sort_fifo , is_split_activated )
482
+ ft_blueprint = AtomicalsTransferBlueprintBuilder .calculate_output_blueprint_fts (tx , ft_atomicals , operations_found_at_inputs , sort_fifo , is_custom_coloring_activated )
473
483
return nft_blueprint , ft_blueprint
474
484
475
485
# Builds a map and image of all the inputs and their sat_value and atomical_value (adjusted by exponent)
@@ -541,7 +551,7 @@ def calculate_nft_output_index_legacy(cls, input_idx, tx, operations_found_at_in
541
551
# Returns the sequence of output indexes that matches until the final one that matched
542
552
# Also returns whether it fit cleanly in (ie: exact with no left overs or under)
543
553
@classmethod
544
- def assign_expected_outputs_basic (cls , total_value_to_assign , tx , start_out_idx , is_split_activated ):
554
+ def assign_expected_outputs_basic (cls , total_value_to_assign , tx , start_out_idx , is_custom_coloring_activated ):
545
555
expected_output_indexes = []
546
556
remaining_value = total_value_to_assign
547
557
idx_count = 0
@@ -556,7 +566,7 @@ def assign_expected_outputs_basic(cls, total_value_to_assign, tx, start_out_idx,
556
566
if is_unspendable_genesis (txout .pk_script ) or is_unspendable_legacy (txout .pk_script ):
557
567
idx_count += 1
558
568
continue
559
- if is_split_activated :
569
+ if is_custom_coloring_activated :
560
570
# Add out_idx
561
571
expected_output_indexes .append (out_idx )
562
572
remaining_value -= txout .value
@@ -623,7 +633,7 @@ def are_payments_satisfied(self, expected_payment_outputs):
623
633
expected_output_keys_satisfied [output_script_key ] = False
624
634
625
635
# Prepare the mapping of which ARC20 is paid at which output
626
- ft_coloring_summary = calculate_outputs_to_color_for_ft_atomical_ids (self .tx , self .ft_atomicals , self .sort_fifo , self .is_split_activated )
636
+ ft_coloring_summary = calculate_outputs_to_color_for_ft_atomical_ids (self .tx , self .ft_atomicals , self .sort_fifo , self .is_custom_coloring_activated )
627
637
output_idx_to_atomical_id_map = {}
628
638
if ft_coloring_summary :
629
639
output_idx_to_atomical_id_map = build_reverse_output_to_atomical_id_exponent_map (ft_coloring_summary .atomical_id_to_expected_outs_map )
0 commit comments