@@ -21,7 +21,7 @@ mod tests {
2121 use dpp:: identity:: signer:: Signer ;
2222 use dpp:: platform_value:: BinaryData ;
2323 use dpp:: prelude:: AddressNonce ;
24- use dpp:: serialization:: { PlatformDeserializable , PlatformSerializable } ;
24+ use dpp:: serialization:: { PlatformDeserializable , PlatformSerializable , Signable } ;
2525 use dpp:: state_transition:: address_credit_withdrawal_transition:: methods:: AddressCreditWithdrawalTransitionMethodsV0 ;
2626 use dpp:: state_transition:: address_credit_withdrawal_transition:: v0:: AddressCreditWithdrawalTransitionV0 ;
2727 use dpp:: state_transition:: address_credit_withdrawal_transition:: AddressCreditWithdrawalTransition ;
@@ -170,6 +170,44 @@ mod tests {
170170 . expect ( "should create signed transition" )
171171 }
172172
173+ /// Create a signed withdrawal transition without running constructor-time structure checks.
174+ fn create_manually_signed_withdrawal_transition (
175+ signer : & TestAddressSigner ,
176+ inputs : BTreeMap < PlatformAddress , ( AddressNonce , u64 ) > ,
177+ output : Option < ( PlatformAddress , u64 ) > ,
178+ fee_strategy : AddressFundsFeeStrategy ,
179+ core_fee_per_byte : u32 ,
180+ pooling : Pooling ,
181+ output_script : CoreScript ,
182+ user_fee_increase : u16 ,
183+ ) -> StateTransition {
184+ let mut transition = AddressCreditWithdrawalTransitionV0 {
185+ inputs : inputs. clone ( ) ,
186+ output,
187+ fee_strategy,
188+ core_fee_per_byte,
189+ pooling,
190+ output_script,
191+ user_fee_increase,
192+ input_witnesses : vec ! [ ] ,
193+ } ;
194+
195+ let signable_bytes = StateTransition :: from ( transition. clone ( ) )
196+ . signable_bytes ( )
197+ . expect ( "should get signable bytes" ) ;
198+
199+ transition. input_witnesses = inputs
200+ . keys ( )
201+ . map ( |address| {
202+ signer
203+ . sign_create_witness ( address, & signable_bytes)
204+ . expect ( "should create witness" )
205+ } )
206+ . collect ( ) ;
207+
208+ AddressCreditWithdrawalTransition :: V0 ( transition) . into ( )
209+ }
210+
173211 // ==========================================
174212 // STRUCTURE VALIDATION TESTS
175213 // These test basic structure validation (BasicError)
@@ -1099,12 +1137,17 @@ mod tests {
10991137 inputs. insert ( input_address2, ( 1 as AddressNonce , dash_to_credits ! ( 0.5 ) ) ) ;
11001138 inputs. insert ( input_address3, ( 1 as AddressNonce , dash_to_credits ! ( 0.5 ) ) ) ;
11011139
1102- let transition = create_signed_address_credit_withdrawal_transition (
1140+ let transition = create_manually_signed_withdrawal_transition (
11031141 & signer,
11041142 inputs,
11051143 None ,
1106- vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput ( 0 ) ] ,
1144+ AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
1145+ 0 ,
1146+ ) ] ) ,
1147+ 1 ,
1148+ Pooling :: Never ,
11071149 create_random_output_script ( & mut rng) ,
1150+ 0 ,
11081151 ) ;
11091152
11101153 let result = transition. serialize_to_bytes ( ) . expect ( "should serialize" ) ;
@@ -1316,12 +1359,17 @@ mod tests {
13161359 let mut inputs = BTreeMap :: new ( ) ;
13171360 inputs. insert ( input_address, ( 1 as AddressNonce , withdrawal_amount) ) ;
13181361
1319- let transition = create_signed_address_credit_withdrawal_transition (
1362+ let transition = create_manually_signed_withdrawal_transition (
13201363 & signer,
13211364 inputs,
13221365 None ,
1323- vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput ( 0 ) ] ,
1366+ AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
1367+ 0 ,
1368+ ) ] ) ,
1369+ 1 ,
1370+ Pooling :: Never ,
13241371 create_random_output_script ( & mut rng) ,
1372+ 0 ,
13251373 ) ;
13261374
13271375 let result = transition. serialize_to_bytes ( ) . expect ( "should serialize" ) ;
@@ -1420,12 +1468,17 @@ mod tests {
14201468
14211469 let output = Some ( ( output_address, output_amount) ) ;
14221470
1423- let transition = create_signed_address_credit_withdrawal_transition (
1471+ let transition = create_manually_signed_withdrawal_transition (
14241472 & signer,
14251473 inputs,
14261474 output,
1427- vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput ( 0 ) ] ,
1475+ AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
1476+ 0 ,
1477+ ) ] ) ,
1478+ 1 ,
1479+ Pooling :: Never ,
14281480 create_random_output_script ( & mut rng) ,
1481+ 0 ,
14291482 ) ;
14301483
14311484 let result = transition. serialize_to_bytes ( ) . expect ( "should serialize" ) ;
@@ -1502,12 +1555,17 @@ mod tests {
15021555 inputs. insert ( input_address1, ( 1 as AddressNonce , dash_to_credits ! ( 0.3 ) ) ) ;
15031556 inputs. insert ( input_address2, ( 1 as AddressNonce , dash_to_credits ! ( 0.3 ) ) ) ;
15041557
1505- let transition = create_signed_address_credit_withdrawal_transition (
1558+ let transition = create_manually_signed_withdrawal_transition (
15061559 & signer,
15071560 inputs,
15081561 None ,
1509- vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput ( 0 ) ] ,
1562+ AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
1563+ 0 ,
1564+ ) ] ) ,
1565+ 1 ,
1566+ Pooling :: Never ,
15101567 create_random_output_script ( & mut rng) ,
1568+ 0 ,
15111569 ) ;
15121570
15131571 let result = transition. serialize_to_bytes ( ) . expect ( "should serialize" ) ;
@@ -1604,12 +1662,17 @@ mod tests {
16041662 let mut inputs = BTreeMap :: new ( ) ;
16051663 inputs. insert ( input_address, ( 1 as AddressNonce , dash_to_credits ! ( 0.5 ) ) ) ;
16061664
1607- let transition = create_signed_address_credit_withdrawal_transition (
1665+ let transition = create_manually_signed_withdrawal_transition (
16081666 & signer,
16091667 inputs,
16101668 None ,
1611- vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput ( 0 ) ] ,
1669+ AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
1670+ 0 ,
1671+ ) ] ) ,
1672+ 1 ,
1673+ Pooling :: Never ,
16121674 create_random_output_script ( & mut rng) ,
1675+ 0 ,
16131676 ) ;
16141677
16151678 let result = transition. serialize_to_bytes ( ) . expect ( "should serialize" ) ;
@@ -3414,20 +3477,18 @@ mod tests {
34143477 inputs. insert ( input_address, ( 1 as AddressNonce , dash_to_credits ! ( 0.5 ) ) ) ;
34153478
34163479 // Use Pooling::IfAvailable
3417- let transition = AddressCreditWithdrawalTransitionV0 :: try_from_inputs_with_signer (
3480+ let transition = create_manually_signed_withdrawal_transition (
3481+ & signer,
34183482 inputs,
34193483 None ,
34203484 AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
34213485 0 ,
34223486 ) ] ) ,
34233487 1 ,
3424- Pooling :: IfAvailable , // Different pooling mode
3488+ Pooling :: IfAvailable ,
34253489 create_random_output_script ( & mut rng) ,
3426- & signer,
34273490 0 ,
3428- platform_version,
3429- )
3430- . expect ( "should create signed transition" ) ;
3491+ ) ;
34313492
34323493 let result = transition. serialize_to_bytes ( ) . expect ( "should serialize" ) ;
34333494
@@ -3473,20 +3534,18 @@ mod tests {
34733534 inputs. insert ( input_address, ( 1 as AddressNonce , dash_to_credits ! ( 0.5 ) ) ) ;
34743535
34753536 // Use Pooling::Standard
3476- let transition = AddressCreditWithdrawalTransitionV0 :: try_from_inputs_with_signer (
3537+ let transition = create_manually_signed_withdrawal_transition (
3538+ & signer,
34773539 inputs,
34783540 None ,
34793541 AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
34803542 0 ,
34813543 ) ] ) ,
34823544 1 ,
3483- Pooling :: Standard , // Standard pooling
3545+ Pooling :: Standard ,
34843546 create_random_output_script ( & mut rng) ,
3485- & signer,
34863547 0 ,
3487- platform_version,
3488- )
3489- . expect ( "should create signed transition" ) ;
3548+ ) ;
34903549
34913550 let result = transition. serialize_to_bytes ( ) . expect ( "should serialize" ) ;
34923551
@@ -3670,12 +3729,17 @@ mod tests {
36703729 let mut inputs = BTreeMap :: new ( ) ;
36713730 inputs. insert ( input_address, ( 1 as AddressNonce , withdrawal_amount) ) ;
36723731
3673- let transition = create_signed_address_credit_withdrawal_transition (
3732+ let transition = create_manually_signed_withdrawal_transition (
36743733 & signer,
36753734 inputs,
36763735 None ,
3677- vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput ( 0 ) ] ,
3736+ AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
3737+ 0 ,
3738+ ) ] ) ,
3739+ 1 ,
3740+ Pooling :: Never ,
36783741 create_random_output_script ( & mut rng) ,
3742+ 0 ,
36793743 ) ;
36803744
36813745 let result = transition. serialize_to_bytes ( ) . expect ( "should serialize" ) ;
@@ -4744,12 +4808,17 @@ mod tests {
47444808 // Try to withdraw the tiny amount
47454809 inputs. insert ( input_address, ( 1 as AddressNonce , 5000 ) ) ;
47464810
4747- let transition = create_signed_address_credit_withdrawal_transition (
4811+ let transition = create_manually_signed_withdrawal_transition (
47484812 & signer,
47494813 inputs,
47504814 None ,
4751- vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput ( 0 ) ] ,
4815+ AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
4816+ 0 ,
4817+ ) ] ) ,
4818+ 1 ,
4819+ Pooling :: Never ,
47524820 create_random_output_script ( & mut rng) ,
4821+ 0 ,
47534822 ) ;
47544823
47554824 let result = transition. serialize_to_bytes ( ) . expect ( "should serialize" ) ;
@@ -5100,12 +5169,17 @@ mod tests {
51005169 // Change output goes back to the same address (should fail)
51015170 let output = Some ( ( input_address, dash_to_credits ! ( 0.5 ) ) ) ;
51025171
5103- let transition = create_signed_address_credit_withdrawal_transition (
5172+ let transition = create_manually_signed_withdrawal_transition (
51045173 & signer,
51055174 inputs,
51065175 output,
5107- vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput ( 0 ) ] ,
5176+ AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
5177+ 0 ,
5178+ ) ] ) ,
5179+ 1 ,
5180+ Pooling :: Never ,
51085181 create_random_output_script ( & mut rng) ,
5182+ 0 ,
51095183 ) ;
51105184
51115185 let result = transition. serialize_to_bytes ( ) . expect ( "should serialize" ) ;
@@ -5150,12 +5224,17 @@ mod tests {
51505224 // Change output goes to a different address
51515225 let output = Some ( ( change_address, dash_to_credits ! ( 0.5 ) ) ) ;
51525226
5153- let transition = create_signed_address_credit_withdrawal_transition (
5227+ let transition = create_manually_signed_withdrawal_transition (
51545228 & signer,
51555229 inputs,
51565230 output,
5157- vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput ( 0 ) ] ,
5231+ AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
5232+ 0 ,
5233+ ) ] ) ,
5234+ 1 ,
5235+ Pooling :: Never ,
51585236 create_random_output_script ( & mut rng) ,
5237+ 0 ,
51595238 ) ;
51605239
51615240 let result = transition. serialize_to_bytes ( ) . expect ( "should serialize" ) ;
@@ -5197,12 +5276,17 @@ mod tests {
51975276 // Zero credits change output
51985277 let output = Some ( ( input_address, 0 ) ) ;
51995278
5200- let transition = create_signed_address_credit_withdrawal_transition (
5279+ let transition = create_manually_signed_withdrawal_transition (
52015280 & signer,
52025281 inputs,
52035282 output,
5204- vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput ( 0 ) ] ,
5283+ AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
5284+ 0 ,
5285+ ) ] ) ,
5286+ 1 ,
5287+ Pooling :: Never ,
52055288 create_random_output_script ( & mut rng) ,
5289+ 0 ,
52065290 ) ;
52075291
52085292 let result = transition. serialize_to_bytes ( ) . expect ( "should serialize" ) ;
@@ -5244,12 +5328,17 @@ mod tests {
52445328 // Change output exceeds remaining (after withdrawal + fees)
52455329 let output = Some ( ( input_address, dash_to_credits ! ( 2.0 ) ) ) ;
52465330
5247- let transition = create_signed_address_credit_withdrawal_transition (
5331+ let transition = create_manually_signed_withdrawal_transition (
52485332 & signer,
52495333 inputs,
52505334 output,
5251- vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput ( 0 ) ] ,
5335+ AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
5336+ 0 ,
5337+ ) ] ) ,
5338+ 1 ,
5339+ Pooling :: Never ,
52525340 create_random_output_script ( & mut rng) ,
5341+ 0 ,
52535342 ) ;
52545343
52555344 let result = transition. serialize_to_bytes ( ) . expect ( "should serialize" ) ;
@@ -5582,7 +5671,8 @@ mod tests {
55825671 output_script : CoreScript ,
55835672 core_fee_per_byte : u32 ,
55845673 ) -> StateTransition {
5585- AddressCreditWithdrawalTransitionV0 :: try_from_inputs_with_signer (
5674+ create_manually_signed_withdrawal_transition (
5675+ signer,
55865676 inputs,
55875677 None ,
55885678 AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
@@ -5591,11 +5681,8 @@ mod tests {
55915681 core_fee_per_byte,
55925682 Pooling :: Never ,
55935683 output_script,
5594- signer,
55955684 0 ,
5596- PlatformVersion :: latest ( ) ,
55975685 )
5598- . expect ( "should create signed transition" )
55995686 }
56005687
56015688 #[ test]
@@ -5923,12 +6010,17 @@ mod tests {
59236010 // withdrawal_amount = 0.01 - 0.5 = UNDERFLOW
59246011 let output_address = create_platform_address ( 2 ) ;
59256012
5926- let transition = create_signed_address_credit_withdrawal_transition (
6013+ let transition = create_manually_signed_withdrawal_transition (
59276014 & signer,
59286015 inputs,
59296016 Some ( ( output_address, dash_to_credits ! ( 0.5 ) ) ) ,
5930- vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput ( 0 ) ] ,
6017+ AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
6018+ 0 ,
6019+ ) ] ) ,
6020+ 1 ,
6021+ Pooling :: Never ,
59316022 create_random_output_script ( & mut rng) ,
6023+ 0 ,
59326024 ) ;
59336025
59346026 let result = transition. serialize_to_bytes ( ) . expect ( "should serialize" ) ;
@@ -6176,12 +6268,17 @@ mod tests {
61766268
61776269 let output_address = create_platform_address ( 2 ) ;
61786270
6179- let transition = create_signed_address_credit_withdrawal_transition (
6271+ let transition = create_manually_signed_withdrawal_transition (
61806272 & signer,
61816273 inputs,
61826274 Some ( ( output_address, output_amount) ) ,
6183- vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput ( 0 ) ] ,
6275+ AddressFundsFeeStrategy :: from ( vec ! [ AddressFundsFeeStrategyStep :: DeductFromInput (
6276+ 0 ,
6277+ ) ] ) ,
6278+ 1 ,
6279+ Pooling :: Never ,
61846280 create_random_output_script ( & mut rng) ,
6281+ 0 ,
61856282 ) ;
61866283
61876284 let result = transition. serialize_to_bytes ( ) . expect ( "should serialize" ) ;
0 commit comments