@@ -2832,11 +2832,10 @@ mod tests {
2832
2832
use stacks_common:: util:: hash:: to_hex;
2833
2833
use stacks_common:: util:: secp256k1:: Secp256k1PrivateKey ;
2834
2834
2835
+ use super :: * ;
2835
2836
use crate :: tests:: bitcoin_regtest:: BitcoinCoreController ;
2836
2837
use crate :: Keychain ;
2837
2838
2838
- use super :: * ;
2839
-
2840
2839
#[ test]
2841
2840
fn test_get_satoshis_per_byte ( ) {
2842
2841
let dir = temp_dir ( ) ;
@@ -3024,7 +3023,9 @@ mod tests {
3024
3023
config. burnchain . password = Some ( "12345" . to_owned ( ) ) ;
3025
3024
3026
3025
let mut btcd_controller = BitcoinCoreController :: new ( config. clone ( ) ) ;
3027
- btcd_controller. start_bitcoind ( ) . expect ( "bitcoind should be started!" ) ;
3026
+ btcd_controller
3027
+ . start_bitcoind ( )
3028
+ . expect ( "bitcoind should be started!" ) ;
3028
3029
3029
3030
let btc_controller = BitcoinRegtestController :: new ( config. clone ( ) , None ) ;
3030
3031
btc_controller
@@ -3045,7 +3046,9 @@ mod tests {
3045
3046
config. burnchain . password = Some ( "12345" . to_owned ( ) ) ;
3046
3047
3047
3048
let mut btcd_controller = BitcoinCoreController :: new ( config. clone ( ) ) ;
3048
- btcd_controller. start_bitcoind ( ) . expect ( "bitcoind should be started!" ) ;
3049
+ btcd_controller
3050
+ . start_bitcoind ( )
3051
+ . expect ( "bitcoind should be started!" ) ;
3049
3052
3050
3053
let btc_controller = BitcoinRegtestController :: new ( config. clone ( ) , None ) ;
3051
3054
btc_controller. bootstrap_chain ( 101 ) ;
@@ -3068,13 +3071,14 @@ mod tests {
3068
3071
config. burnchain . password = Some ( "12345" . to_owned ( ) ) ;
3069
3072
3070
3073
let mut btcd_controller = BitcoinCoreController :: new ( config. clone ( ) ) ;
3071
- btcd_controller. start_bitcoind ( ) . expect ( "bitcoind should be started!" ) ;
3074
+ btcd_controller
3075
+ . start_bitcoind ( )
3076
+ . expect ( "bitcoind should be started!" ) ;
3072
3077
3073
3078
let btc_controller = BitcoinRegtestController :: new ( config. clone ( ) , None ) ;
3074
3079
btc_controller. bootstrap_chain ( 101 ) ;
3075
3080
3076
- let utxos =
3077
- btc_controller. get_utxos ( StacksEpochId :: Epoch31 , & miner_pubkey, 19000 , None , 0 ) ;
3081
+ let utxos = btc_controller. get_utxos ( StacksEpochId :: Epoch31 , & miner_pubkey, 19000 , None , 0 ) ;
3078
3082
3079
3083
let uxto_set = utxos. expect ( "Shouldn't be None!" ) ;
3080
3084
assert_eq ! ( 1 , uxto_set. num_utxos( ) ) ;
@@ -3085,10 +3089,12 @@ mod tests {
3085
3089
}
3086
3090
3087
3091
#[ test]
3088
- fn test_build_leader_block_commit_tx ( ) {
3092
+ fn test_build_leader_block_commit_tx_ok_with_new_block_commit ( ) {
3089
3093
let miner_seed = vec ! [ 1 , 1 , 1 , 1 ] ;
3090
3094
let keychain = Keychain :: default ( miner_seed. clone ( ) ) ;
3091
3095
let miner_pubkey = keychain. get_pub_key ( ) ;
3096
+ let mut signer = keychain. generate_op_signer ( ) ;
3097
+ let burn_signer = keychain. get_burnchain_signer ( ) ;
3092
3098
3093
3099
let mut config = Config :: default ( ) ;
3094
3100
config. burnchain . magic_bytes = "T3" . as_bytes ( ) . into ( ) ;
@@ -3097,22 +3103,15 @@ mod tests {
3097
3103
config. burnchain . password = Some ( "12345" . to_owned ( ) ) ;
3098
3104
3099
3105
let mut btcd_controller = BitcoinCoreController :: new ( config. clone ( ) ) ;
3100
- btcd_controller. start_bitcoind ( ) . unwrap ( ) ;
3106
+ btcd_controller
3107
+ . start_bitcoind ( )
3108
+ . expect ( "bitcoind should be started!" ) ;
3101
3109
3102
3110
let mut btc_controller = BitcoinRegtestController :: new ( config, None ) ;
3103
3111
btc_controller. bootstrap_chain ( 101 ) ;
3104
-
3105
- btc_controller. connect_dbs ( ) . expect ( "Cannot initialize dbs!" ) ;
3106
-
3107
- let tip = btc_controller
3108
- . get_burnchain ( )
3109
- . open_burnchain_db ( false )
3110
- . unwrap ( )
3111
- . get_canonical_chain_tip ( ) ;
3112
- info ! ( "{:?}" , tip) ;
3113
-
3114
-
3115
- let mut signer = keychain. generate_op_signer ( ) ;
3112
+ btc_controller
3113
+ . connect_dbs ( )
3114
+ . expect ( "Cannot initialize dbs!" ) ;
3116
3115
3117
3116
let commit_op = LeaderBlockCommitOp {
3118
3117
block_header_hash : BlockHeaderHash :: from_hex (
@@ -3133,7 +3132,7 @@ mod tests {
3133
3132
input : ( Txid ( [ 0x00 ; 32 ] ) , 0 ) ,
3134
3133
burn_parent_modulus : 2 , // 0x5a & 0b111
3135
3134
3136
- apparent_sender : BurnchainSigner ( "mgbpit8FvkVJ9kuXY8QSM5P7eibnhcEMBk" . to_string ( ) ) ,
3135
+ apparent_sender : burn_signer ,
3137
3136
commit_outs : vec ! [
3138
3137
PoxAddress :: Standard ( StacksAddress :: burn_address( false ) , None ) ,
3139
3138
PoxAddress :: Standard ( StacksAddress :: burn_address( false ) , None ) ,
@@ -3144,7 +3143,7 @@ mod tests {
3144
3143
3145
3144
txid : Txid ( [ 0x00 ; 32 ] ) ,
3146
3145
vtxindex : 0 ,
3147
- block_height : 2212 , //FDF
3146
+ block_height : 2212 ,
3148
3147
burn_header_hash : BurnchainHeaderHash ( [ 0x01 ; 32 ] ) ,
3149
3148
} ;
3150
3149
@@ -3157,4 +3156,81 @@ mod tests {
3157
3156
assert_eq ! ( 1 , tx. input. len( ) ) ;
3158
3157
assert_eq ! ( 4 , tx. output. len( ) ) ;
3159
3158
}
3159
+
3160
+ #[ test]
3161
+ fn test_build_leader_block_commit_tx_fails_resubmitting_same_block_commit ( ) {
3162
+ let miner_seed = vec ! [ 1 , 1 , 1 , 1 ] ;
3163
+ let keychain = Keychain :: default ( miner_seed. clone ( ) ) ;
3164
+ let miner_pubkey = keychain. get_pub_key ( ) ;
3165
+ let mut signer = keychain. generate_op_signer ( ) ;
3166
+ let burn_signer = keychain. get_burnchain_signer ( ) ;
3167
+
3168
+ let mut config = Config :: default ( ) ;
3169
+ config. burnchain . magic_bytes = "T3" . as_bytes ( ) . into ( ) ;
3170
+ config. burnchain . local_mining_public_key = Some ( miner_pubkey. to_hex ( ) ) ;
3171
+ config. burnchain . username = Some ( "user" . to_owned ( ) ) ;
3172
+ config. burnchain . password = Some ( "12345" . to_owned ( ) ) ;
3173
+
3174
+ let mut btcd_controller = BitcoinCoreController :: new ( config. clone ( ) ) ;
3175
+ btcd_controller
3176
+ . start_bitcoind ( )
3177
+ . expect ( "bitcoind should be started!" ) ;
3178
+
3179
+ let mut btc_controller = BitcoinRegtestController :: new ( config, None ) ;
3180
+ btc_controller. bootstrap_chain ( 101 ) ;
3181
+ btc_controller
3182
+ . connect_dbs ( )
3183
+ . expect ( "Cannot initialize dbs!" ) ;
3184
+
3185
+ let commit_op = LeaderBlockCommitOp {
3186
+ block_header_hash : BlockHeaderHash :: from_hex (
3187
+ "e88c3d30cb59a142f83de3b27f897a43bbb0f13316911bb98a3229973dae32af" ,
3188
+ )
3189
+ . unwrap ( ) ,
3190
+ new_seed : VRFSeed :: from_hex (
3191
+ "d5b9f21bc1f40f24e2c101ecd13c55b8619e5e03dad81de2c62a1cc1d8c1b375" ,
3192
+ )
3193
+ . unwrap ( ) ,
3194
+ parent_block_ptr : 2211 , // 0x000008a3
3195
+ parent_vtxindex : 1 , // 0x0001
3196
+ key_block_ptr : 1432 , // 0x00000598
3197
+ key_vtxindex : 1 , // 0x0001
3198
+ memo : vec ! [ 11 ] , // 0x5a >> 3
3199
+
3200
+ burn_fee : 0 ,
3201
+ input : ( Txid ( [ 0x00 ; 32 ] ) , 0 ) ,
3202
+ burn_parent_modulus : 2 , // 0x5a & 0b111
3203
+
3204
+ apparent_sender : burn_signer,
3205
+ commit_outs : vec ! [
3206
+ PoxAddress :: Standard ( StacksAddress :: burn_address( false ) , None ) ,
3207
+ PoxAddress :: Standard ( StacksAddress :: burn_address( false ) , None ) ,
3208
+ ] ,
3209
+
3210
+ treatment : vec ! [ ] ,
3211
+ sunset_burn : 0 ,
3212
+
3213
+ txid : Txid ( [ 0x00 ; 32 ] ) ,
3214
+ vtxindex : 0 ,
3215
+ block_height : 2212 ,
3216
+ burn_header_hash : BurnchainHeaderHash ( [ 0x01 ; 32 ] ) ,
3217
+ } ;
3218
+
3219
+ let _first_tx_ok = btc_controller
3220
+ . build_leader_block_commit_tx ( StacksEpochId :: Epoch31 , commit_op. clone ( ) , & mut signer, 0 )
3221
+ . expect ( "Build leader block commit should work" ) ;
3222
+
3223
+ let resubmit = btc_controller. build_leader_block_commit_tx (
3224
+ StacksEpochId :: Epoch31 ,
3225
+ commit_op,
3226
+ & mut signer,
3227
+ 0 ,
3228
+ ) ;
3229
+
3230
+ assert ! ( resubmit. is_err( ) ) ;
3231
+ assert_eq ! (
3232
+ BurnchainControllerError :: IdenticalOperation ,
3233
+ resubmit. unwrap_err( )
3234
+ ) ;
3235
+ }
3160
3236
}
0 commit comments