@@ -2843,11 +2843,10 @@ mod tests {
2843
2843
use stacks_common:: util:: hash:: to_hex;
2844
2844
use stacks_common:: util:: secp256k1:: Secp256k1PrivateKey ;
2845
2845
2846
+ use super :: * ;
2846
2847
use crate :: tests:: bitcoin_regtest:: BitcoinCoreController ;
2847
2848
use crate :: Keychain ;
2848
2849
2849
- use super :: * ;
2850
-
2851
2850
#[ test]
2852
2851
fn test_get_satoshis_per_byte ( ) {
2853
2852
let dir = temp_dir ( ) ;
@@ -3035,7 +3034,9 @@ mod tests {
3035
3034
config. burnchain . password = Some ( "12345" . to_owned ( ) ) ;
3036
3035
3037
3036
let mut btcd_controller = BitcoinCoreController :: new ( config. clone ( ) ) ;
3038
- btcd_controller. start_bitcoind ( ) . expect ( "bitcoind should be started!" ) ;
3037
+ btcd_controller
3038
+ . start_bitcoind ( )
3039
+ . expect ( "bitcoind should be started!" ) ;
3039
3040
3040
3041
let btc_controller = BitcoinRegtestController :: new ( config. clone ( ) , None ) ;
3041
3042
btc_controller
@@ -3056,7 +3057,9 @@ mod tests {
3056
3057
config. burnchain . password = Some ( "12345" . to_owned ( ) ) ;
3057
3058
3058
3059
let mut btcd_controller = BitcoinCoreController :: new ( config. clone ( ) ) ;
3059
- btcd_controller. start_bitcoind ( ) . expect ( "bitcoind should be started!" ) ;
3060
+ btcd_controller
3061
+ . start_bitcoind ( )
3062
+ . expect ( "bitcoind should be started!" ) ;
3060
3063
3061
3064
let btc_controller = BitcoinRegtestController :: new ( config. clone ( ) , None ) ;
3062
3065
btc_controller. bootstrap_chain ( 101 ) ;
@@ -3079,13 +3082,14 @@ mod tests {
3079
3082
config. burnchain . password = Some ( "12345" . to_owned ( ) ) ;
3080
3083
3081
3084
let mut btcd_controller = BitcoinCoreController :: new ( config. clone ( ) ) ;
3082
- btcd_controller. start_bitcoind ( ) . expect ( "bitcoind should be started!" ) ;
3085
+ btcd_controller
3086
+ . start_bitcoind ( )
3087
+ . expect ( "bitcoind should be started!" ) ;
3083
3088
3084
3089
let btc_controller = BitcoinRegtestController :: new ( config. clone ( ) , None ) ;
3085
3090
btc_controller. bootstrap_chain ( 101 ) ;
3086
3091
3087
- let utxos =
3088
- btc_controller. get_utxos ( StacksEpochId :: Epoch31 , & miner_pubkey, 19000 , None , 0 ) ;
3092
+ let utxos = btc_controller. get_utxos ( StacksEpochId :: Epoch31 , & miner_pubkey, 19000 , None , 0 ) ;
3089
3093
3090
3094
let uxto_set = utxos. expect ( "Shouldn't be None!" ) ;
3091
3095
assert_eq ! ( 1 , uxto_set. num_utxos( ) ) ;
@@ -3096,10 +3100,12 @@ mod tests {
3096
3100
}
3097
3101
3098
3102
#[ test]
3099
- fn test_build_leader_block_commit_tx ( ) {
3103
+ fn test_build_leader_block_commit_tx_ok_with_new_block_commit ( ) {
3100
3104
let miner_seed = vec ! [ 1 , 1 , 1 , 1 ] ;
3101
3105
let keychain = Keychain :: default ( miner_seed. clone ( ) ) ;
3102
3106
let miner_pubkey = keychain. get_pub_key ( ) ;
3107
+ let mut signer = keychain. generate_op_signer ( ) ;
3108
+ let burn_signer = keychain. get_burnchain_signer ( ) ;
3103
3109
3104
3110
let mut config = Config :: default ( ) ;
3105
3111
config. burnchain . magic_bytes = "T3" . as_bytes ( ) . into ( ) ;
@@ -3108,22 +3114,15 @@ mod tests {
3108
3114
config. burnchain . password = Some ( "12345" . to_owned ( ) ) ;
3109
3115
3110
3116
let mut btcd_controller = BitcoinCoreController :: new ( config. clone ( ) ) ;
3111
- btcd_controller. start_bitcoind ( ) . unwrap ( ) ;
3117
+ btcd_controller
3118
+ . start_bitcoind ( )
3119
+ . expect ( "bitcoind should be started!" ) ;
3112
3120
3113
3121
let mut btc_controller = BitcoinRegtestController :: new ( config, None ) ;
3114
3122
btc_controller. bootstrap_chain ( 101 ) ;
3115
-
3116
- btc_controller. connect_dbs ( ) . expect ( "Cannot initialize dbs!" ) ;
3117
-
3118
- let tip = btc_controller
3119
- . get_burnchain ( )
3120
- . open_burnchain_db ( false )
3121
- . unwrap ( )
3122
- . get_canonical_chain_tip ( ) ;
3123
- info ! ( "{:?}" , tip) ;
3124
-
3125
-
3126
- let mut signer = keychain. generate_op_signer ( ) ;
3123
+ btc_controller
3124
+ . connect_dbs ( )
3125
+ . expect ( "Cannot initialize dbs!" ) ;
3127
3126
3128
3127
let commit_op = LeaderBlockCommitOp {
3129
3128
block_header_hash : BlockHeaderHash :: from_hex (
@@ -3144,7 +3143,7 @@ mod tests {
3144
3143
input : ( Txid ( [ 0x00 ; 32 ] ) , 0 ) ,
3145
3144
burn_parent_modulus : 2 , // 0x5a & 0b111
3146
3145
3147
- apparent_sender : BurnchainSigner ( "mgbpit8FvkVJ9kuXY8QSM5P7eibnhcEMBk" . to_string ( ) ) ,
3146
+ apparent_sender : burn_signer ,
3148
3147
commit_outs : vec ! [
3149
3148
PoxAddress :: Standard ( StacksAddress :: burn_address( false ) , None ) ,
3150
3149
PoxAddress :: Standard ( StacksAddress :: burn_address( false ) , None ) ,
@@ -3155,7 +3154,7 @@ mod tests {
3155
3154
3156
3155
txid : Txid ( [ 0x00 ; 32 ] ) ,
3157
3156
vtxindex : 0 ,
3158
- block_height : 2212 , //FDF
3157
+ block_height : 2212 ,
3159
3158
burn_header_hash : BurnchainHeaderHash ( [ 0x01 ; 32 ] ) ,
3160
3159
} ;
3161
3160
@@ -3168,4 +3167,81 @@ mod tests {
3168
3167
assert_eq ! ( 1 , tx. input. len( ) ) ;
3169
3168
assert_eq ! ( 4 , tx. output. len( ) ) ;
3170
3169
}
3170
+
3171
+ #[ test]
3172
+ fn test_build_leader_block_commit_tx_fails_resubmitting_same_block_commit ( ) {
3173
+ let miner_seed = vec ! [ 1 , 1 , 1 , 1 ] ;
3174
+ let keychain = Keychain :: default ( miner_seed. clone ( ) ) ;
3175
+ let miner_pubkey = keychain. get_pub_key ( ) ;
3176
+ let mut signer = keychain. generate_op_signer ( ) ;
3177
+ let burn_signer = keychain. get_burnchain_signer ( ) ;
3178
+
3179
+ let mut config = Config :: default ( ) ;
3180
+ config. burnchain . magic_bytes = "T3" . as_bytes ( ) . into ( ) ;
3181
+ config. burnchain . local_mining_public_key = Some ( miner_pubkey. to_hex ( ) ) ;
3182
+ config. burnchain . username = Some ( "user" . to_owned ( ) ) ;
3183
+ config. burnchain . password = Some ( "12345" . to_owned ( ) ) ;
3184
+
3185
+ let mut btcd_controller = BitcoinCoreController :: new ( config. clone ( ) ) ;
3186
+ btcd_controller
3187
+ . start_bitcoind ( )
3188
+ . expect ( "bitcoind should be started!" ) ;
3189
+
3190
+ let mut btc_controller = BitcoinRegtestController :: new ( config, None ) ;
3191
+ btc_controller. bootstrap_chain ( 101 ) ;
3192
+ btc_controller
3193
+ . connect_dbs ( )
3194
+ . expect ( "Cannot initialize dbs!" ) ;
3195
+
3196
+ let commit_op = LeaderBlockCommitOp {
3197
+ block_header_hash : BlockHeaderHash :: from_hex (
3198
+ "e88c3d30cb59a142f83de3b27f897a43bbb0f13316911bb98a3229973dae32af" ,
3199
+ )
3200
+ . unwrap ( ) ,
3201
+ new_seed : VRFSeed :: from_hex (
3202
+ "d5b9f21bc1f40f24e2c101ecd13c55b8619e5e03dad81de2c62a1cc1d8c1b375" ,
3203
+ )
3204
+ . unwrap ( ) ,
3205
+ parent_block_ptr : 2211 , // 0x000008a3
3206
+ parent_vtxindex : 1 , // 0x0001
3207
+ key_block_ptr : 1432 , // 0x00000598
3208
+ key_vtxindex : 1 , // 0x0001
3209
+ memo : vec ! [ 11 ] , // 0x5a >> 3
3210
+
3211
+ burn_fee : 0 ,
3212
+ input : ( Txid ( [ 0x00 ; 32 ] ) , 0 ) ,
3213
+ burn_parent_modulus : 2 , // 0x5a & 0b111
3214
+
3215
+ apparent_sender : burn_signer,
3216
+ commit_outs : vec ! [
3217
+ PoxAddress :: Standard ( StacksAddress :: burn_address( false ) , None ) ,
3218
+ PoxAddress :: Standard ( StacksAddress :: burn_address( false ) , None ) ,
3219
+ ] ,
3220
+
3221
+ treatment : vec ! [ ] ,
3222
+ sunset_burn : 0 ,
3223
+
3224
+ txid : Txid ( [ 0x00 ; 32 ] ) ,
3225
+ vtxindex : 0 ,
3226
+ block_height : 2212 ,
3227
+ burn_header_hash : BurnchainHeaderHash ( [ 0x01 ; 32 ] ) ,
3228
+ } ;
3229
+
3230
+ let _first_tx_ok = btc_controller
3231
+ . build_leader_block_commit_tx ( StacksEpochId :: Epoch31 , commit_op. clone ( ) , & mut signer, 0 )
3232
+ . expect ( "Build leader block commit should work" ) ;
3233
+
3234
+ let resubmit = btc_controller. build_leader_block_commit_tx (
3235
+ StacksEpochId :: Epoch31 ,
3236
+ commit_op,
3237
+ & mut signer,
3238
+ 0 ,
3239
+ ) ;
3240
+
3241
+ assert ! ( resubmit. is_err( ) ) ;
3242
+ assert_eq ! (
3243
+ BurnchainControllerError :: IdenticalOperation ,
3244
+ resubmit. unwrap_err( )
3245
+ ) ;
3246
+ }
3171
3247
}
0 commit comments