fedimint icon indicating copy to clipboard operation
fedimint copied to clipboard

Add Git commit checks to disallow `.unwrap()`

Open tvolk131 opened this issue 1 year ago • 6 comments

Are there any cases where we'd prefer .unwrap() over .expect()? If not, I think adding a pre-commit hook check to ensure .unwrap() is not used could speed up PR review for newcomers.

tvolk131 avatar Feb 13 '24 02:02 tvolk131

In tests I considered unwraps good enough in the past, but I'd be ok with only allowing expects going forward.

elsirion avatar Feb 13 '24 09:02 elsirion

I added the following to .config/semgrep.yaml:

- id: ban-unwrap
  languages:
    - rust
  message: 'Using .unwrap() is banned. Consider using .expect() instead.'
  patterns: 
    - pattern: $X.unwrap()
  severity: WARNING

Here is the result of running semgrep --config=.config/semgrep.yaml:

Command Output: 355 instances of unwrap

┌─────────────┐ │ Scan Status │ └─────────────┘ Scanning 508 files tracked by git with 10 Code rules: Scanning 218 files with 10 rust rules.

┌───────────────────┐ │ 355 Code Findings │ └───────────────────┘

crypto/aead/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      126┆ let key = get_encryption_key(password, salt).unwrap();
        ⋮┆----------------------------------------
      127┆ let mut cipher_text = encrypt(message.as_bytes().to_vec(), &key).unwrap();
        ⋮┆----------------------------------------
      128┆ let decrypted = decrypt(&mut cipher_text, &key).unwrap();
                      
crypto/tbs/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      197┆ let sig = blinded_sig.0 * blinding_key.0.invert().unwrap();
                                    
crypto/tbs/src/serde_impl/scalar.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       31┆ Ok(scalar.unwrap())
                           
devimint/src/federation.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      118┆ Ok(cmd!(self, "info").out_json().await?["total_amount_msat"]
      119┆     .as_u64()
      120┆     .unwrap())
        ⋮┆----------------------------------------
      247┆ let deposit_address = deposit["address"].as_str().unwrap();
        ⋮┆----------------------------------------
      248┆ let deposit_operation_id = deposit["operation_id"].as_str().unwrap();
        ⋮┆----------------------------------------
      273┆ let gateway_balance = cmd!(gw, "balance", "--federation-id={fed_id}")
      274┆     .out_json()
      275┆     .await
      276┆     .map_err(ControlFlow::Continue)?
      277┆     .as_u64()
      278┆     .unwrap();
        ⋮┆----------------------------------------
      286┆ self.client_config()
      287┆     .await
      288┆     .unwrap()
                      
devimint/src/tests.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       55┆ let max = v.iter().last().unwrap().to_owned();
        ⋮┆----------------------------------------
       56┆ let min = v.first().unwrap().to_owned();
        ⋮┆----------------------------------------
      243┆ let backup_secret = cmd!(client, "print-secret").out_json().await?["secret"]
      244┆     .as_str()
      245┆     .map(ToOwned::to_owned)
      246┆     .unwrap();
        ⋮┆----------------------------------------
      457┆ let guardian_count = config["global"]["api_endpoints"].as_object().unwrap().len();
        ⋮┆----------------------------------------
      458┆ let descriptor = config["modules"]["2"]["peg_in_descriptor"]
      459┆     .as_str()
      460┆     .unwrap()
        ⋮┆----------------------------------------
      485┆ let operation = cmd!(client, "list-operations")
      486┆     .out_json()
      487┆     .await?
      488┆     .get("operations")
      489┆     .expect("Output didn't contain operation log")
      490┆     .as_array()
      491┆     .unwrap()
        ⋮┆----------------------------------------
      485┆ let operation = cmd!(client, "list-operations")
      486┆     .out_json()
      487┆     .await?
      488┆     .get("operations")
      489┆     .expect("Output didn't contain operation log")
      490┆     .as_array()
      491┆     .unwrap()
      492┆     .first()
      493┆     .unwrap()
        ⋮┆----------------------------------------
      507┆ let notes = cmd!(client, "spend", CLIENT_SPEND_AMOUNT)
      508┆     .out_json()
      509┆     .await?
      510┆     .get("notes")
      511┆     .expect("Output didn't contain e-cash notes")
      512┆     .as_str()
      513┆     .unwrap()
        ⋮┆----------------------------------------
      532┆ let _notes = cmd!(client, "spend", CLIENT_SPEND_AMOUNT)
      533┆     .out_json()
      534┆     .await?
      535┆     .as_object()
      536┆     .unwrap()
        ⋮┆----------------------------------------
      532┆ let _notes = cmd!(client, "spend", CLIENT_SPEND_AMOUNT)
      533┆     .out_json()
      534┆     .await?
      535┆     .as_object()
      536┆     .unwrap()
      537┆     .get("notes")
      538┆     .expect("Output didn't contain e-cash notes")
      539┆     .as_str()
      540┆     .unwrap();
        ⋮┆----------------------------------------
      542┆ let reissue_notes = cmd!(client, "spend", reissue_amount).out_json().await?["notes"]
      543┆     .as_str()
      544┆     .map(|s| s.to_owned())
      545┆     .unwrap();
        ⋮┆----------------------------------------
      546┆ let client_reissue_amt = cmd!(client, "reissue", reissue_notes)
      547┆     .out_json()
      548┆     .await?
      549┆     .as_u64()
      550┆     .unwrap();
        ⋮┆----------------------------------------
      555┆ let reissue_notes = cmd!(client, "spend", reissue_amount).out_json().await?["notes"]
      556┆     .as_str()
      557┆     .map(|s| s.to_owned())
      558┆     .unwrap();
        ⋮┆----------------------------------------
      559┆ let client_reissue_amt = cmd!(
      560┆     client,
      561┆     "module",
      562┆     "--module",
      563┆     "mint",
      564┆     "reissue",
      565┆     reissue_notes
      566┆ )
      567┆ .out_json()
      568┆ .await?
         [hid 2 additional lines, adjust with --max-lines-per-finding] 
      584┆ let initial_cln_gateway_balance = cmd!(gw_cln, "balance", "--federation-id={fed_id}")
      585┆     .out_json()
      586┆     .await?
      587┆     .as_u64()
      588┆     .unwrap();
        ⋮┆----------------------------------------
      616┆ let final_cln_outgoing_gateway_balance = cmd!(gw_cln, "balance", "--federation-
           id={fed_id}")                                                                  
      617┆     .out_json()
      618┆     .await?
      619┆     .as_u64()
      620┆     .unwrap();
        ⋮┆----------------------------------------
      676┆ let final_cln_incoming_gateway_balance = cmd!(gw_cln, "balance", "--federation-
           id={fed_id}")                                                                  
      677┆     .out_json()
      678┆     .await?
      679┆     .as_u64()
      680┆     .unwrap();
        ⋮┆----------------------------------------
      698┆ let initial_lnd_gateway_balance = cmd!(gw_lnd, "balance", "--federation-id={fed_id}")
      699┆     .out_json()
      700┆     .await?
      701┆     .as_u64()
      702┆     .unwrap();
        ⋮┆----------------------------------------
      734┆ let final_lnd_outgoing_gateway_balance = cmd!(gw_lnd, "balance", "--federation-
           id={fed_id}")                                                                  
      735┆     .out_json()
      736┆     .await?
      737┆     .as_u64()
      738┆     .unwrap();
        ⋮┆----------------------------------------
      791┆ let final_lnd_incoming_gateway_balance = cmd!(gw_lnd, "balance", "--federation-
           id={fed_id}")                                                                  
      792┆     .out_json()
      793┆     .await?
      794┆     .as_u64()
      795┆     .unwrap();
        ⋮┆----------------------------------------
      850┆ let txid: Txid = withdraw_res["txid"].as_str().unwrap().parse().unwrap();
        ⋮┆----------------------------------------
      850┆ let txid: Txid = withdraw_res["txid"].as_str().unwrap().parse().unwrap();
        ⋮┆----------------------------------------
      851┆ let fees_sat = withdraw_res["fees_sat"].as_u64().unwrap();
        ⋮┆----------------------------------------
      864┆ let tx = bitcoin::Transaction::consensus_decode_hex(&tx_hex, &Default::default()).unwrap();
        ⋮┆----------------------------------------
      865┆ let address = bitcoin::Address::from_str(&address).unwrap();
        ⋮┆----------------------------------------
      1143┆ let secret = cmd!(reference_client, "print-secret").out_json().await?["secret"]
      1144┆     .as_str()
      1145┆     .map(ToOwned::to_owned)
      1146┆     .unwrap();
        ⋮┆----------------------------------------
      1150┆ let pre_balance = pre_notes["total_amount_msat"].as_u64().unwrap();
        ⋮┆----------------------------------------
      1182┆ let post_balance = post_notes["total_amount_msat"].as_u64().unwrap();
        ⋮┆----------------------------------------
      1199┆ let post_balance = cmd!(client, "restore", &secret,)
      1200┆     .out_json()
      1201┆     .await?
      1202┆     .as_u64()
      1203┆     .unwrap();
        ⋮┆----------------------------------------
      1231┆ let post_balance = post_notes["total_amount_msat"].as_u64().unwrap();
        ⋮┆----------------------------------------
      1247┆ let post_balance = post_notes["total_amount_msat"].as_u64().unwrap();
        ⋮┆----------------------------------------
      1679┆ .map(|o| o["descriptor"].as_str().unwrap())
        ⋮┆----------------------------------------
      1739┆ .map(|o| o["descriptor"].as_str().unwrap())
                           
fedimint-cli/src/client.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      193┆ let mut updates = mint
      194┆     .subscribe_reissue_external_notes(operation_id)
      195┆     .await
      196┆     .unwrap()
        ⋮┆----------------------------------------
      207┆ Ok(serde_json::to_value(amount).unwrap())
        ⋮┆----------------------------------------
      326┆ Ok(serde_json::to_value(LnInvoiceResponse {
      327┆     operation_id,
      328┆     invoice: invoice.to_string(),
      329┆ })
      330┆ .unwrap())
        ⋮┆----------------------------------------
      416┆ return Ok(serde_json::to_value(Vec::<String>::new()).unwrap());
        ⋮┆----------------------------------------
      433┆ Ok(serde_json::to_value(gateways_json).unwrap())
        ⋮┆----------------------------------------
      441┆ Ok(serde_json::to_value(gateway_json).unwrap())
        ⋮┆----------------------------------------
      466┆ Ok(serde_json::to_value(()).unwrap())
        ⋮┆----------------------------------------
      475┆ Ok(serde_json::to_value(()).unwrap())
        ⋮┆----------------------------------------
      548┆ (amount.unwrap(), fees)
        ⋮┆----------------------------------------
      680┆ serde_json::to_value(PayInvoiceResponse {
      681┆     operation_id,
      682┆     contract_id,
      683┆     preimage: preimage.consensus_encode_to_hex(),
      684┆ })
      685┆ .unwrap(),
        ⋮┆----------------------------------------
      721┆ serde_json::to_value(PayInvoiceResponse {
      722┆     operation_id,
      723┆     contract_id,
      724┆     preimage,
      725┆ })
      726┆ .unwrap(),
        ⋮┆----------------------------------------
      762┆ Ok(serde_json::to_value(InfoResponse {
      763┆     federation_id: client.federation_id(),
      764┆     network: wallet_client.get_network(),
      765┆     meta: client.get_config().global.meta.clone(),
      766┆     total_amount_msat: summary.total_amount(),
      767┆     total_num_notes: summary.count_items(),
      768┆     denominations_msat: summary,
      769┆ })
      770┆ .unwrap())
                        
fedimint-cli/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      221┆ let mut json = serde_json::to_value(self).unwrap();
        ⋮┆----------------------------------------
      654┆ Ok(CliOutput::Raw(serde_json::to_value(()).unwrap()))
        ⋮┆----------------------------------------
      797┆ in_file_handle.read_to_end(&mut plaintext_bytes).unwrap();
                             
fedimint-client/src/oplog.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      358┆ meta: serde_json::to_value(()).unwrap(),
        ⋮┆----------------------------------------
      375┆ extra_meta: serde_json::to_value(()).unwrap(),
        ⋮┆----------------------------------------
      380┆ meta: serde_json::to_value(meta.clone()).unwrap(),
        ⋮┆----------------------------------------
      403┆ OperationLog::set_operation_outcome(&db, op_id, &"baz")
      404┆     .await
      405┆     .unwrap();
                                   
fedimint-client/src/sm/executor.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      1213┆ executor
      1214┆     .add_state_machines(vec![DynState::from_typed(
      1215┆         MOCK_INSTANCE_1,
      1216┆         MockStateMachine::Start,
      1217┆     )])
      1218┆     .await
      1219┆     .unwrap();
        ⋮┆----------------------------------------
      1247┆ sender.send(0).unwrap();
                         
fedimint-core/src/api.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      1044┆ rclient
      1045┆     .as_ref()
      1046┆     .unwrap()
        ⋮┆----------------------------------------
      1058┆ rclient
      1059┆     .as_ref()
      1060┆     .unwrap()
        ⋮┆----------------------------------------
      1193┆ Ok(serde_json::from_str(&json).unwrap())
        ⋮┆----------------------------------------
      1251┆ fed.request("", &[]).await.unwrap();
        ⋮┆----------------------------------------
      1258┆ fed.request("", &[]).await.unwrap();
        ⋮┆----------------------------------------
      1268┆ fed.request("", &[]).await.unwrap();
        ⋮┆----------------------------------------
      1290┆ if FAIL.lock().unwrap().contains(&id) {
        ⋮┆----------------------------------------
      1300┆ !FAIL.lock().unwrap().contains(&self.0)
        ⋮┆----------------------------------------
      1316┆ FAIL.lock().unwrap().insert(0);
        ⋮┆----------------------------------------
      1324┆ fed.request("", &[]).await.unwrap();
        ⋮┆----------------------------------------
      1333┆ FAIL.lock().unwrap().insert(1);
        ⋮┆----------------------------------------
      1347┆ FAIL.lock().unwrap().insert(2);
        ⋮┆----------------------------------------
      1351┆ FAIL.lock().unwrap().insert(3);
        ⋮┆----------------------------------------
      1371┆ "ws://test1".parse().unwrap(),
        ⋮┆----------------------------------------
      1380┆ let json = serde_json::to_string(&connect).unwrap();
        ⋮┆----------------------------------------
      1381┆ let connect_as_string: String = serde_json::from_str(&json).unwrap();
        ⋮┆----------------------------------------
      1383┆ let connect_parsed_json: InviteCode = serde_json::from_str(&json).unwrap();
                            
fedimint-core/src/db/mod.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      2814┆ tx.send(()).unwrap();
        ⋮┆----------------------------------------
      2818┆ rx.await.unwrap();
                                  
fedimint-core/src/encoding/btc.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      157┆ hash.consensus_encode(&mut encoded).unwrap();
        ⋮┆----------------------------------------
      158┆ let hash_decoded = bitcoin::hashes::sha256::Hash::consensus_decode(
      159┆     &mut Cursor::new(encoded),
      160┆     &ModuleDecoderRegistry::default(),
      161┆ )
      162┆ .unwrap();
                                  
fedimint-core/src/encoding/mod.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      1017┆ let len = value.consensus_encode(&mut bytes).unwrap();
        ⋮┆----------------------------------------
      1021┆ let decoded = T::consensus_decode(&mut cursor,
           &ModuleDecoderRegistry::default()).unwrap();   
        ⋮┆----------------------------------------
      1031┆ let len = value.consensus_encode(&mut bytes).unwrap();
        ⋮┆----------------------------------------
      1036┆ let decoded = T::consensus_decode(&mut cursor,
           &ModuleDecoderRegistry::default()).unwrap();   
        ⋮┆----------------------------------------
      1082┆ unknown_variant
      1083┆     .consensus_encode(&mut unknown_variant_encoding)
      1084┆     .unwrap();
        ⋮┆----------------------------------------
      1099┆ unknown_variant
      1100┆     .consensus_encode(&mut unknown_variant_encoding)
      1101┆     .unwrap();
        ⋮┆----------------------------------------
      1180┆ let invoice = invoice_str
      1181┆     .parse::<lightning_invoice::Bolt11Invoice>()
      1182┆     .unwrap();
        ⋮┆----------------------------------------
      1220┆ value.consensus_encode(&mut writer).unwrap();
        ⋮┆----------------------------------------
      1225┆ T::consensus_decode(&mut Cursor::new(bytes), &ModuleDecoderRegistry::default()).unwrap()
        ⋮┆----------------------------------------
      1275┆ let txid = bitcoin::Txid::from_hex(
      1276┆     "51f7ed2f23e58cc6e139e715e9ce304a1e858416edc9079dd7b74fa8d2efc09a",
      1277┆ )
      1278┆ .unwrap();
        ⋮┆----------------------------------------
      1286┆ let transaction: Vec<u8> = FromHex::from_hex(
      1287┆     "02000000000101d35b66c54cf6c09b81a8d94cd5d179719cd7595c258449452a9305ab9b12df250200000
           000fdffffff020cd50a0000000000160014ae5d450b71c04218e6e81c86fcc225882d7b7caae695b22100000000
           160014f60834ef165253c571b11ce9fa74e46692fc5ec10248304502210092062c609f4c8dc74cd7d4596ecedc1
           093140d90b3fd94b4bdd9ad3e102ce3bc02206bb5a6afc68d583d77d5d9bcfb6252a364d11a307f3418be1af9f4
           7f7b1b3d780121026e5628506ecd33242e5ceb5fdafe4d3066b5c0f159b3c05a621ef65f177ea28600000000"  
      1288┆ ).unwrap();
        ⋮┆----------------------------------------
      1290┆ bitcoin::Transaction::from_bytes(&transaction, &ModuleDecoderRegistry::default())
      1291┆     .unwrap();
        ⋮┆----------------------------------------
      1309┆ let blockhash = bitcoin::BlockHash::from_hex(
      1310┆     "0000000000000000000065bda8f8a88f2e1e00d9a6887a43d640e52a4c7660f2",
      1311┆ )
      1312┆ .unwrap();
                                  
fedimint-core/src/encoding/tbs.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       69┆ let affine = point.unwrap();
        ⋮┆----------------------------------------
      116┆ Ok(tbs::AggregatePublicKey(point.unwrap()))
        ⋮┆----------------------------------------
      139┆ Ok(tbs::PublicKeyShare(point.unwrap()))
        ⋮┆----------------------------------------
      166┆ Ok(tbs::BlindingKey(key.unwrap()))
        ⋮┆----------------------------------------
      237┆ let decryption_share = sks.secret_key_share(0).decrypt_share(&ciphertext).unwrap();
                               
fedimint-core/src/hex/serde.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       36┆ let json = serde_json::to_string(&data).unwrap();
        ⋮┆----------------------------------------
       44┆ let data: Data = serde_json::from_str(json).unwrap();
                         
fedimint-core/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      587┆ let all: BitcoinAmountOrAll = serde_json::from_str("\"all\"").unwrap();
        ⋮┆----------------------------------------
      590┆ let all: BitcoinAmountOrAll = serde_json::from_str("12345").unwrap();
                           
fedimint-core/src/query.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      476┆ api: MultiApiVersion::try_from_iter([
      477┆     ApiVersion { major: 2, minor: 3 },
      478┆     ApiVersion { major: 3, minor: 1 },
      479┆ ])
      480┆ .unwrap(),
                              
fedimint-core/src/txoproof.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       83┆ self.consensus_encode(&mut bytes).unwrap();
        ⋮┆----------------------------------------
      120┆ self.consensus_encode(&mut bytes).unwrap();
                              
fedimint-core/src/util/mod.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      229┆ Self::try_new::<Infallible, _>(span, async { Ok(make.await) })
      230┆     .await
      231┆     .unwrap()
        ⋮┆----------------------------------------
      349┆ let safe_url = SafeUrl::parse(url_str).unwrap();
        ⋮┆----------------------------------------
      365┆ let _: SafeUrl = url::Url::parse("http://1.2.3.4:80/foo").unwrap().into();
                            
fedimint-dbtool/src/dump.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       72┆ let decoders = module_inits
       73┆     .available_decoders(cfg.iter_module_instances())
       74┆     .unwrap()
        ⋮┆----------------------------------------
       98┆ let decoders = client_module_inits
       99┆     .available_decoders(kinds)
      100┆     .unwrap()
        ⋮┆----------------------------------------
      124┆ let json = serde_json::to_string_pretty(&self.serialized).unwrap();
                            
fedimint-dbtool/src/main.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      102┆ let rocksdb = fedimint_rocksdb::RocksDb::open(&options.database)
      103┆     .unwrap()
        ⋮┆----------------------------------------
      117┆ let rocksdb = fedimint_rocksdb::RocksDb::open(&options.database)
      118┆     .unwrap()
        ⋮┆----------------------------------------
      127┆ let rocksdb = fedimint_rocksdb::RocksDb::open(&options.database)
      128┆     .unwrap()
        ⋮┆----------------------------------------
      191┆ let rocksdb = fedimint_rocksdb::RocksDb::open(&options.database)
      192┆     .unwrap()
                           
fedimint-derive/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      100┆ .map(|field| field.ident.clone().unwrap())
        ⋮┆----------------------------------------
      144┆ .map(|field| field.ident.clone().unwrap())
        ⋮┆----------------------------------------
      344┆ .map(|field| field.ident.clone().unwrap())
                                    
fedimint-load-test-tool/src/main.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      465┆ let oob_notes = users_notes.remove(&u).unwrap();
        ⋮┆----------------------------------------
      499┆ users_notes.get_mut(&u).unwrap().push(oob_notes);
        ⋮┆----------------------------------------
      728┆ let oob_notes = users_notes.remove(&u).unwrap();
        ⋮┆----------------------------------------
      1144┆ let entry = entry.unwrap();
        ⋮┆----------------------------------------
      1145┆ let metadata = entry.metadata().unwrap();
        ⋮┆----------------------------------------
      1148┆ .unwrap_or_else(|_| metadata.modified().unwrap());
        ⋮┆----------------------------------------
      1213┆ let max = v.iter().last().unwrap();
        ⋮┆----------------------------------------
      1214┆ let min = v.first().unwrap();
                            
fedimint-logging/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      123┆ let tracer = opentelemetry_jaeger::new_agent_pipeline()
      124┆     .with_service_name("fedimint")
      125┆     .install_simple()
      126┆     .unwrap();
                            
fedimint-rocksdb/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      146┆ let val = self.0.get(key).unwrap();
        ⋮┆----------------------------------------
      158┆ let val = self.0.get(key).unwrap();
        ⋮┆----------------------------------------
      371┆ let path = tempfile::Builder::new()
      372┆     .prefix(temp_path)
      373┆     .tempdir()
      374┆     .unwrap();
        ⋮┆----------------------------------------
      377┆ RocksDb::open(path).unwrap(),
        ⋮┆----------------------------------------
      472┆ let path = tempfile::Builder::new()
      473┆     .prefix("fcb-rocksdb-test-module-db-prefix")
      474┆     .tempdir()
      475┆     .unwrap();
        ⋮┆----------------------------------------
      478┆ RocksDb::open(path).unwrap(),
        ⋮┆----------------------------------------
      548┆ let path = tempfile::Builder::new()
      549┆     .prefix("fcb-rocksdb-test-descending-order")
      550┆     .tempdir()
      551┆     .unwrap();
        ⋮┆----------------------------------------
      554┆ RocksDb::open(&path).unwrap(),
        ⋮┆----------------------------------------
      599┆ let db_readonly = RocksDbReadOnly::open_read_only(path).unwrap();
                                  
fedimint-server/src/config/api.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      1063┆ let response = self.client.consensus_config_gen_params().await.unwrap();
        ⋮┆----------------------------------------
      1099┆ self.client
      1100┆     .set_config_gen_params(request, self.auth.clone())
      1101┆     .await
      1102┆     .unwrap();
        ⋮┆----------------------------------------
      1114┆ read_server_config(&auth.unwrap(), cfg_dir.clone()).unwrap()
        ⋮┆----------------------------------------
      1114┆ read_server_config(&auth.unwrap(), cfg_dir.clone()).unwrap()
        ⋮┆----------------------------------------
      1124┆ let base_port = port_alloc(PEER_NUM * PORTS_PER_PEER).unwrap();
        ⋮┆----------------------------------------
      1153┆ follower
      1154┆     .client
      1155┆     .set_password(follower.auth.clone())
      1156┆     .await
      1157┆     .unwrap();
        ⋮┆----------------------------------------
      1159┆ follower.set_connections(&leader_url).await.unwrap();
        ⋮┆----------------------------------------
      1161┆ follower.set_connections(&leader_url).await.unwrap();
        ⋮┆----------------------------------------
      1176┆ let base_port = port_alloc(PEER_NUM * PORTS_PER_PEER).unwrap();
        ⋮┆----------------------------------------
      1205┆ follower
      1206┆     .client
      1207┆     .set_password(follower.auth.clone())
      1208┆     .await
      1209┆     .unwrap();
        ⋮┆----------------------------------------
      1211┆ follower.set_connections(&leader_url).await.unwrap();
        ⋮┆----------------------------------------
      1213┆ follower.set_connections(&leader_url).await.unwrap();
        ⋮┆----------------------------------------
      1221┆ leader
      1222┆     .client
      1223┆     .restart_federation_setup(leader.auth.clone())
      1224┆     .await
      1225┆     .unwrap();
        ⋮┆----------------------------------------
      1252┆ follower
      1253┆     .client
      1254┆     .set_password(follower.auth.clone())
      1255┆     .await
      1256┆     .unwrap();
        ⋮┆----------------------------------------
      1258┆ follower.set_connections(&leader_url).await.unwrap();
        ⋮┆----------------------------------------
      1271┆ leader
      1272┆     .client
      1273┆     .set_password(leader.auth.clone())
      1274┆     .await
      1275┆     .unwrap();
        ⋮┆----------------------------------------
      1283┆ leader.set_connections(&None).await.unwrap();
        ⋮┆----------------------------------------
      1285┆ leader.set_connections(&None).await.unwrap();
        ⋮┆----------------------------------------
      1288┆ let _ = leader
      1289┆     .client
      1290┆     .get_default_config_gen_params(leader.auth.clone())
      1291┆     .await
      1292┆     .unwrap();
        ⋮┆----------------------------------------
      1301┆ let peers = leader.client.get_config_gen_peers().await.unwrap();
        ⋮┆----------------------------------------
      1312┆ configs.push(peer.client.consensus_config_gen_params().await.unwrap());
        ⋮┆----------------------------------------
      1344┆ peer.client
      1345┆     .get_verify_config_hash(peer.auth.clone())
      1346┆     .await
      1347┆     .unwrap(),
        ⋮┆----------------------------------------
      1355┆ let dummy: DummyConfig = cfg.get_module_config_typed(0).unwrap();
        ⋮┆----------------------------------------
      1378┆ let dummy: DummyConfig = cfg.get_module_config_typed(0).unwrap();
                                             
fedimint-server/src/config/distributedgen.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      197┆ .map(|shares| *shares.get(idx).unwrap())
        ⋮┆----------------------------------------
      511┆ let receive_dkg = dkgs.get_mut(&receive_peer).unwrap();
        ⋮┆----------------------------------------
      513┆ steps.push_back((receive_peer, step.unwrap()));
                                       
fedimint-server/src/consensus/debug.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       32┆ f.write_fmt(format_args!("\n    Output: {output}")).unwrap();
                          
fedimint-server/src/db.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      145┆ let accepted_tx_id = AcceptedTransactionKey(TransactionId::from_slice(&BYTE_32).unwrap());
        ⋮┆----------------------------------------
      150┆ let schnorr = secp.sign_schnorr(&Message::from_slice(&BYTE_32).unwrap(), &key_pair);
        ⋮┆----------------------------------------
      182┆ peer: PeerId::from_str("0").unwrap(),
                           
fedimint-server/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       95┆ let (consensus_server, consensus_api) = ConsensusServer::new(
       96┆     cfg,
       97┆     self.db.clone(),
       98┆     self.settings.registry.clone(),
       99┆     &mut task_group,
      100┆ )
      101┆ .await
      102┆ .unwrap();
                                   
fedimint-server/src/multiplexed.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      251┆ conn1.send(&[peer2], mux_key, msg_i).await.unwrap();
                                   
fedimint-server/src/net/connect.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      205┆ let config = rustls::ServerConfig::builder()
      206┆     .with_safe_defaults()
      207┆     .with_client_cert_verifier(verifier)
      208┆     .with_single_cert(
      209┆         vec![self.our_certificate.clone()],
      210┆         self.our_private_key.clone(),
      211┆     )
      212┆     .unwrap();
        ⋮┆----------------------------------------
      681┆ let mut connection = receive.recv().await.unwrap();
        ⋮┆----------------------------------------
      718┆ let bind_addr: SocketAddr = "127.0.0.1:7000".parse().unwrap();
        ⋮┆----------------------------------------
      719┆ let url: SafeUrl = "ws://127.0.0.1:7000".parse().unwrap();
        ⋮┆----------------------------------------
      727┆ let mut listener = Connector::<u64>::listen(&conn_a, bind_addr).await.unwrap();
        ⋮┆----------------------------------------
      729┆ listener.next().await.unwrap().unwrap()
        ⋮┆----------------------------------------
      729┆ listener.next().await.unwrap().unwrap()
        ⋮┆----------------------------------------
      733┆ let (auth_peer_b, mut conn_b) = Connector::<u64>::connect_framed(&conn_b, url, peer_a)
      734┆     .await
      735┆     .unwrap();
        ⋮┆----------------------------------------
      736┆ let (auth_peer_a, mut conn_a) = conn_a_fut.await.unwrap();
        ⋮┆----------------------------------------
      741┆ conn_a.send(42).await.unwrap();
        ⋮┆----------------------------------------
      742┆ conn_b.send(21).await.unwrap();
        ⋮┆----------------------------------------
      793┆ let bind_addr: SocketAddr = "127.0.0.1:7000".parse().unwrap();
        ⋮┆----------------------------------------
      794┆ let url: SafeUrl = "ws://127.0.0.1:7000".parse().unwrap();
        ⋮┆----------------------------------------
      802┆ let mut listener = Connector::<Vec<u8>>::listen(&conn_a, bind_addr)
      803┆     .await
      804┆     .unwrap();
        ⋮┆----------------------------------------
      806┆ listener.next().await.unwrap().unwrap()
        ⋮┆----------------------------------------
      806┆ listener.next().await.unwrap().unwrap()
        ⋮┆----------------------------------------
      810┆ let (auth_peer_b, mut conn_b) = Connector::<Vec<u8>>::connect_framed(&conn_b, url, peer_a)
      811┆     .await
      812┆     .unwrap();
        ⋮┆----------------------------------------
      813┆ let (auth_peer_a, mut conn_a) = conn_a_fut.await.unwrap();
        ⋮┆----------------------------------------
      819┆ conn_a.send(vec![42; 16000]).await.unwrap();
        ⋮┆----------------------------------------
      852┆ gen_cert_and_key(&format!("peer-{}", peer.to_usize())).unwrap()
        ⋮┆----------------------------------------
      878┆ let bind_addr: SocketAddr = "127.0.0.1:7000".parse().unwrap();
        ⋮┆----------------------------------------
      879┆ let url: SafeUrl = "ws://127.0.0.1:7000".parse().unwrap();
        ⋮┆----------------------------------------
      886┆ let mut server: ConnectionListener<u64> = connectors[0].listen(bind_addr).await.unwrap();
        ⋮┆----------------------------------------
      889┆ let (peer, mut conn) = server.next().await.unwrap().unwrap();
        ⋮┆----------------------------------------
      889┆ let (peer, mut conn) = server.next().await.unwrap().unwrap();
        ⋮┆----------------------------------------
      891┆ let received = conn.next().await.unwrap().unwrap();
        ⋮┆----------------------------------------
      891┆ let received = conn.next().await.unwrap().unwrap();
        ⋮┆----------------------------------------
      893┆ conn.send(21).await.unwrap();
        ⋮┆----------------------------------------
      898┆ let (peer_of_a, mut client_a): (_, AnyFramedTransport<u64>) = connectors[2]
      899┆     .connect_framed(url.clone(), PeerId::from(0))
      900┆     .await
      901┆     .unwrap();
        ⋮┆----------------------------------------
      903┆ client_a.send(42).await.unwrap();
        ⋮┆----------------------------------------
      904┆ let received = client_a.next().await.unwrap().unwrap();
        ⋮┆----------------------------------------
      904┆ let received = client_a.next().await.unwrap().unwrap();
        ⋮┆----------------------------------------
      908┆ server_task.await.unwrap();
        ⋮┆----------------------------------------
      913┆ let bind_addr: SocketAddr = "127.0.0.1:7001".parse().unwrap();
        ⋮┆----------------------------------------
      914┆ let url: SafeUrl = "wss://127.0.0.1:7001".parse().unwrap();
        ⋮┆----------------------------------------
      925┆ let mut server: ConnectionListener<u64> = honest.listen(bind_addr).await.unwrap();
        ⋮┆----------------------------------------
      928┆ let conn_res = server.next().await.unwrap();
        ⋮┆----------------------------------------
      943┆ conn.next().await.unwrap()?;
        ⋮┆----------------------------------------
      954┆ server_task.await.unwrap();
        ⋮┆----------------------------------------
      960┆ malicious_wrong_key.listen(bind_addr).await.unwrap();
        ⋮┆----------------------------------------
      963┆ let conn_res = server.next().await.unwrap();
        ⋮┆----------------------------------------
      977┆ conn.next().await.unwrap()?;
        ⋮┆----------------------------------------
      988┆ server_task.await.unwrap();
        ⋮┆----------------------------------------
      994┆ TlsTcpConnector::new(cfg[2].clone(), PeerId::from(2))
      995┆     .listen(bind_addr)
      996┆     .await
      997┆     .unwrap();
        ⋮┆----------------------------------------
      1000┆ let conn_res = server.next().await.unwrap();
        ⋮┆----------------------------------------
      1014┆ conn.next().await.unwrap()?;
        ⋮┆----------------------------------------
      1025┆ server_task.await.unwrap();
                                  
fedimint-server/src/net/framed.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      191┆ dst.writer().write_all(&[0u8; 8]).unwrap();
        ⋮┆----------------------------------------
      269┆ framed_sender.send(item.clone()).await.unwrap();
        ⋮┆----------------------------------------
      273┆ let received = framed_recipient.next().await.unwrap().unwrap();
        ⋮┆----------------------------------------
      273┆ let received = framed_recipient.next().await.unwrap().unwrap();
        ⋮┆----------------------------------------
      301┆ framed_sender
      302┆     .send(TestEnum::Bar(0x4242_4242_4242_4242))
      303┆     .await
      304┆     .unwrap();
        ⋮┆----------------------------------------
      308┆ recipient_src.read_exact(&mut buf).await.unwrap();
        ⋮┆----------------------------------------
      309┆ sender_dst.write_all(&buf).await.unwrap();
                                 
fedimint-server/src/net/peers.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      738┆ let cfg = peer.parse().unwrap();
        ⋮┆----------------------------------------
      748┆ bind_addr: bind.parse().unwrap(),
        ⋮┆----------------------------------------
      789┆ task_group.join_all(None).await.unwrap();
                                          
fedimint-server/src/net/peers_reliable.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      774┆ let cfg = peer.parse().unwrap();
        ⋮┆----------------------------------------
      784┆ bind_addr: bind.parse().unwrap(),
        ⋮┆----------------------------------------
      804┆ peers_a.send(&[PeerId::from(2)], 42).await.unwrap();
        ⋮┆----------------------------------------
      805┆ let recv = timeout(peers_b.receive()).await.unwrap().unwrap();
        ⋮┆----------------------------------------
      805┆ let recv = timeout(peers_b.receive()).await.unwrap().unwrap();
        ⋮┆----------------------------------------
      812┆ peers_a.send(&[PeerId::from(3)], 21).await.unwrap();
        ⋮┆----------------------------------------
      831┆ task_group.join_all(None).await.unwrap();
                                 
fedimint-server/src/net/queue.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       88┆ let umsg = queue_iter.next().unwrap();
                                 
fedimint-testing/src/btc/mock.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       44┆ url: "http://ignored".parse().unwrap(),
        ⋮┆----------------------------------------
      127┆ let merkle_root = Self::pending_merkle_tree(pending)
      128┆     .extract_matches(&mut vec![], &mut vec![])
      129┆     .unwrap();
        ⋮┆----------------------------------------
      155┆ let mut blocks = self.blocks.lock().unwrap();
        ⋮┆----------------------------------------
      156┆ let mut pending = self.pending.lock().unwrap();
        ⋮┆----------------------------------------
      157┆ let mut addresses = self.addresses.lock().unwrap();
        ⋮┆----------------------------------------
      167┆ let block_count = self.blocks.lock().unwrap().len() as u64;
        ⋮┆----------------------------------------
      178┆ let mut blocks = self.blocks.lock().unwrap();
        ⋮┆----------------------------------------
      179┆ let mut pending = self.pending.lock().unwrap();
        ⋮┆----------------------------------------
      180┆ let mut addresses = self.addresses.lock().unwrap();
        ⋮┆----------------------------------------
      181┆ let mut scripts = self.scripts.lock().unwrap();
        ⋮┆----------------------------------------
      182┆ let mut proofs = self.proofs.lock().unwrap();
        ⋮┆----------------------------------------
      194┆ let block_header = blocks.last().unwrap().header;
        ⋮┆----------------------------------------
      209┆ Address::p2wpkh(&bitcoin::PublicKey::new(public_key), Network::Regtest).unwrap()
        ⋮┆----------------------------------------
      214┆ let sats = self
      215┆     .blocks
      216┆     .lock()
      217┆     .unwrap()
        ⋮┆----------------------------------------
      229┆ let pending = self.pending.lock().unwrap().clone();
        ⋮┆----------------------------------------
      230┆ let addresses = self.addresses.lock().unwrap().clone();
        ⋮┆----------------------------------------
      265┆ Ok(self.blocks.lock().unwrap().len() as u64)
        ⋮┆----------------------------------------
      269┆ Ok(self.blocks.lock().unwrap()[height as usize]
        ⋮┆----------------------------------------
      279┆ let mut pending = self.pending.lock().unwrap();
        ⋮┆----------------------------------------
      298┆ for (height, block) in self.blocks.lock().unwrap().iter().enumerate() {
        ⋮┆----------------------------------------
      311┆ let scripts = self.scripts.lock().unwrap();
        ⋮┆----------------------------------------
      317┆ let proofs = self.proofs.lock().unwrap();
                                 
fedimint-testing/src/btc/real.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      251┆ let pre = self.inner.client.get_block_count().unwrap();
        ⋮┆----------------------------------------
      253┆ let post = self.inner.client.get_block_count().unwrap();
                           
fedimint-testing/src/db.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       31┆ let has_cargo = read_dir(p)?.any(|p| p.unwrap().file_name() == *"Cargo.lock");
        ⋮┆----------------------------------------
      122┆ let project_root = get_project_root().unwrap();
        ⋮┆----------------------------------------
      140┆ let project_root = get_project_root().unwrap();
        ⋮┆----------------------------------------
      170┆ let snapshot_dirs = get_project_root().unwrap().join("db/migrations");
                                   
fedimint-testing/src/federation.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       46┆ let client_config = self.configs[&PeerId::from(0)]
       47┆     .consensus
       48┆     .to_client_config(&self.server_init)
       49┆     .unwrap();
        ⋮┆----------------------------------------
       59┆ let client_secret = Client::load_or_generate_client_secret(client_builder.db())
       60┆     .await
       61┆     .unwrap();
        ⋮┆----------------------------------------
       79┆ self.configs[&PeerId::from(0)]
       80┆     .consensus
       81┆     .to_client_config(&self.server_init)
       82┆     .unwrap()
        ⋮┆----------------------------------------
      109┆ let decoders = server_init.available_decoders(instances).unwrap();
        ⋮┆----------------------------------------
      126┆ consensus_server.run(handle).await.unwrap();
        ⋮┆----------------------------------------
      156┆ gen_cert_and_key(&format!("peer-{}", peer.to_usize())).unwrap(),
                                 
fedimint-testing/src/fixtures.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       63┆ let rpc_config = BitcoinRpcConfig::from_env_vars().unwrap();
        ⋮┆----------------------------------------
       64┆ let dyn_bitcoin_rpc = create_bitcoind(&rpc_config, task_group.make_handle()).unwrap();
        ⋮┆----------------------------------------
      144┆ let decoders = server_gens.available_decoders(module_kinds).unwrap();
        ⋮┆----------------------------------------
      226┆ let guard = tempfile::Builder::new().prefix(&random).tempdir().unwrap();
        ⋮┆----------------------------------------
      227┆ let directory = guard.path().to_str().unwrap().to_owned();
                                
fedimint-testing/src/gateway.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       64┆ self.gateway
       65┆     .remove_client_hack(fed.id())
       66┆     .await
       67┆     .unwrap()
        ⋮┆----------------------------------------
       72┆ self.gateway
       73┆     .select_client(federation_id)
       74┆     .await
       75┆     .unwrap()
        ⋮┆----------------------------------------
       87┆ rpc.connect_federation(ConnectFedPayload { invite_code })
       88┆     .await
       89┆     .unwrap()
        ⋮┆----------------------------------------
      104┆ let listen: SocketAddr = format!("127.0.0.1:{base_port}").parse().unwrap();
        ⋮┆----------------------------------------
      105┆ let address: SafeUrl = format!("http://{listen}").parse().unwrap();
        ⋮┆----------------------------------------
      106┆ let versioned_api = address.join(V1_API_ENDPOINT).unwrap();
        ⋮┆----------------------------------------
      168┆ let info = lightning.info().await.unwrap();
        ⋮┆----------------------------------------
      174┆ node_pub_key: PublicKey::from_slice(info.pub_key.as_slice()).unwrap(),
                                
fedimint-testing/src/ln/mock.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       72┆ Ok(InvoiceBuilder::new(Currency::Regtest)
       73┆     .description("".to_string())
       74┆     .payment_hash(sha256::Hash::hash(&[0; 32]))
       75┆     .current_timestamp()
       76┆     .min_final_cltv_expiry_delta(0)
       77┆     .payment_secret(PaymentSecret([0; 32]))
       78┆     .amount_milli_satoshis(amount.msats)
       79┆     .expiry_time(Duration::from_secs(
       80┆         expiry_time.unwrap_or(DEFAULT_EXPIRY_TIME),
       81┆     ))
         [hid 2 additional lines, adjust with --max-lines-per-finding] 
      122┆ let signed = invoice.invoice.parse::<SignedRawBolt11Invoice>().unwrap();
        ⋮┆----------------------------------------
      123┆ let invoice = Bolt11Invoice::from_signed(signed).unwrap();
        ⋮┆----------------------------------------
      124┆ *self.amount_sent.lock().unwrap() += invoice.amount_milli_satoshis().unwrap();
        ⋮┆----------------------------------------
      124┆ *self.amount_sent.lock().unwrap() += invoice.amount_milli_satoshis().unwrap();
        ⋮┆----------------------------------------
      128┆ &Description::new(INVALID_INVOICE_DESCRIPTION.into()).unwrap(),
                               
fedimint-testing/src/ln/mod.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       44┆ Ok(InvoiceBuilder::new(Currency::Regtest)
       45┆     .payee_pub_key(kp.public_key())
       46┆     .description(INVALID_INVOICE_DESCRIPTION.to_string())
       47┆     .payment_hash(sha256::Hash::hash(&[0; 32]))
       48┆     .current_timestamp()
       49┆     .min_final_cltv_expiry_delta(0)
       50┆     .payment_secret(PaymentSecret([0; 32]))
       51┆     .amount_milli_satoshis(amount.msats)
       52┆     .expiry_time(Duration::from_secs(
       53┆         expiry_time.unwrap_or(DEFAULT_EXPIRY_TIME),
         [hid 3 additional lines, adjust with --max-lines-per-finding] 
                                
fedimint-testing/src/ln/real.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
       81┆ let invoice_resp = if let Response::Invoice(data) = self
       82┆     .rpc_cln
       83┆     .lock()
       84┆     .await
       85┆     .call(Request::Invoice(invoice_req))
       86┆     .await
       87┆     .unwrap()
        ⋮┆----------------------------------------
       94┆ Ok(Bolt11Invoice::from_str(&invoice_resp.bolt11).unwrap())
        ⋮┆----------------------------------------
      150┆ let rpc_cln = Arc::new(Mutex::new(ClnRpc::new(socket_cln).await.unwrap()));
        ⋮┆----------------------------------------
      171┆ if let Response::Getinfo(get_info) = rpc
      172┆     .lock()
      173┆     .await
      174┆     .call(Request::Getinfo(model::requests::GetinfoRequest {}))
      175┆     .await
      176┆     .unwrap()
        ⋮┆----------------------------------------
      178┆ secp256k1::PublicKey::from_str(&get_info.id.to_string()).unwrap()
        ⋮┆----------------------------------------
      187┆ let listfunds_resp = if let Response::ListFunds(data) = rpc
      188┆     .lock()
      189┆     .await
      190┆     .call(Request::ListFunds(listfunds_req))
      191┆     .await
      192┆     .unwrap()
        ⋮┆----------------------------------------
      236┆ let invoice_resp = lnd_rpc
      237┆     .lightning()
      238┆     .add_invoice(tonic_invoice)
      239┆     .await
      240┆     .unwrap()
        ⋮┆----------------------------------------
      243┆ Ok(Bolt11Invoice::from_str(&invoice_resp.payment_request).unwrap())
        ⋮┆----------------------------------------
      307┆ let lnd_rpc_addr = env::var("FM_LND_RPC_ADDR").unwrap();
        ⋮┆----------------------------------------
      308┆ let lnd_macaroon = env::var("FM_LND_MACAROON").unwrap();
        ⋮┆----------------------------------------
      309┆ let lnd_tls_cert = env::var("FM_LND_TLS_CERT").unwrap();
        ⋮┆----------------------------------------
      310┆ let lnd_client = connect(
      311┆     lnd_rpc_addr.clone(),
      312┆     lnd_tls_cert.clone(),
      313┆     lnd_macaroon.clone(),
      314┆ )
      315┆ .await
      316┆ .unwrap();
                           
fedimintd/src/fedimintd.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      193┆ TracingSetup::default()
      194┆     .tokio_console_bind(opts.tokio_console_bind)
      195┆     .with_jaeger(opts.with_telemetry)
      196┆     .init()
      197┆     .unwrap();
                                            
gateway/ln-gateway/src/bin/cln_extension.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      308┆ let a_incoming = pubkey_to_incoming_capacity.get(&a.0).unwrap().msat();
        ⋮┆----------------------------------------
      309┆ let b_incoming = pubkey_to_incoming_capacity.get(&b.0).unwrap().msat();
        ⋮┆----------------------------------------
      572┆ payload.onion.short_channel_id.unwrap().as_str(),
                              
gateway/ln-gateway/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      786┆ (withdraw_amount.unwrap(), fees)
        ⋮┆----------------------------------------
      1062┆ password: password.unwrap(),
        ⋮┆----------------------------------------
      1189┆ password: self.gateway_parameters.password.clone().unwrap(),
                                        
gateway/ln-gateway/src/lightning/lnd.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      171┆ let incoming_circuit_key = htlc.incoming_circuit_key.unwrap();
        ⋮┆----------------------------------------
      375┆ let src_node_id = PublicKey::from_str(&chan.remote_pubkey)
      376┆     .unwrap()
        ⋮┆----------------------------------------
      813┆ Vec::from_hex("20000000000000000000000002000000024100").unwrap();
                                            
gateway/ln-gateway/src/state_machine/pay.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      342┆ consensus_block_count.unwrap(),
        ⋮┆----------------------------------------
      597┆ max_delay: max_delay.unwrap(),
                                         
modules/fedimint-dummy-server/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      123┆ let params = self.parse_params(params).unwrap();
        ⋮┆----------------------------------------
      148┆ let params = self.parse_params(params).unwrap();
                                      
modules/fedimint-ln-client/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      912┆ let elapsed = now().duration_since(cache.fetched_at).unwrap();
                                      
modules/fedimint-ln-server/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      268┆ let params = self.parse_params(params).unwrap();
        ⋮┆----------------------------------------
      305┆ let params = self.parse_params(params).unwrap();
        ⋮┆----------------------------------------
      1250┆ url: "http://localhost:18332".parse().unwrap(),
        ⋮┆----------------------------------------
      1260┆ let client_cfg = ServerModuleInit::get_client_config(
      1261┆     &LightningInit,
      1262┆     &server_cfg[&PeerId::from(0)].consensus,
      1263┆ )
      1264┆ .unwrap();
        ⋮┆----------------------------------------
      1286┆ let server = Lightning::new(server_cfg[0].clone(), &mut tg).unwrap();
        ⋮┆----------------------------------------
      1348┆ let server = Lightning::new(server_cfg[0].clone(), &mut tg).unwrap();
        ⋮┆----------------------------------------
      1409┆ let server = Lightning::new(server_cfg[0].clone(), &mut tg).unwrap();
                                        
modules/fedimint-mint-client/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      570┆ let mut updates = self
      571┆     .subscribe_reissue_external_notes(operation_id)
      572┆     .await
      573┆     .unwrap()
        ⋮┆----------------------------------------
      584┆ Ok(serde_json::to_value(amount).unwrap())
        ⋮┆----------------------------------------
      1699┆ total_notes += select.unwrap().into_iter_items().count();
        ⋮┆----------------------------------------
      1832┆ "wss://foo.bar".parse().unwrap(),
                                        
modules/fedimint-mint-common/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      196┆ bincode::serialize_into(&mut bytes, &self.0).unwrap();
        ⋮┆----------------------------------------
      202┆ bincode::deserialize(bytes).unwrap()
                                        
modules/fedimint-mint-server/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      185┆ let params = self.parse_params(params).unwrap();
        ⋮┆----------------------------------------
      244┆ let params = self.parse_params(params).unwrap();
        ⋮┆----------------------------------------
      297┆ let pks: BTreeMap<Amount, PublicKeyShare> = config
      298┆     .consensus
      299┆     .peer_tbs_pks
      300┆     .get(identity)
      301┆     .unwrap()
        ⋮┆----------------------------------------
      707┆ &ConfigGenModuleParams::from_typed(MintGenParams {
      708┆     local: Default::default(),
      709┆     consensus: MintGenParamsConsensus::new(2),
      710┆ })
      711┆ .unwrap(),
        ⋮┆----------------------------------------
      713┆ let client_cfg = ClientModuleConfig::from_typed(
      714┆     0,
      715┆     MintInit::kind(),
      716┆     ModuleConsensusVersion::new(0, 0),
      717┆     MintInit
      718┆         .get_client_config(&mint_cfg[&PeerId::from(0)].consensus)
      719┆         .unwrap(),
      720┆ )
      721┆ .unwrap();
        ⋮┆----------------------------------------
      717┆ MintInit
      718┆     .get_client_config(&mint_cfg[&PeerId::from(0)].consensus)
      719┆     .unwrap(),
        ⋮┆----------------------------------------
      735┆ peer_tbs_pks: mint_server_cfg2[0]
      736┆     .to_typed::<MintConfig>()
      737┆     .unwrap()
        ⋮┆----------------------------------------
      744┆ tbs_sks: mint_server_cfg1[0]
      745┆     .to_typed::<MintConfig>()
      746┆     .unwrap()
        ⋮┆----------------------------------------
      765┆ let sks = *cfg
      766┆     .to_typed::<MintConfig>()
      767┆     .unwrap()
        ⋮┆----------------------------------------
      790┆ let mint = Mint::new(mint_server_cfg[0].to_typed().unwrap());
                                          
modules/fedimint-wallet-client/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      302┆ let address = self
      303┆     .cfg
      304┆     .peg_in_descriptor
      305┆     .tweak(&public_tweak_key, secp256k1::SECP256K1)
      306┆     .address(self.cfg.network)
      307┆     .unwrap();
                                             
modules/fedimint-wallet-common/src/config.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      164┆ Wsh::new_sortedmulti(threshold, pubkeys.values().copied().collect()).unwrap(),
                                          
modules/fedimint-wallet-common/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      108┆ self.consensus_encode(&mut bytes).unwrap();
        ⋮┆----------------------------------------
      138┆ self.consensus_encode(&mut bytes).unwrap();
                                               
modules/fedimint-wallet-common/src/txoproof.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      221┆ let txoutproof = TxOutProof::consensus_decode(
      222┆     &mut Cursor::new(Vec::from_hex(txoutproof_hex).unwrap()),
      223┆     &empty_module_registry,
      224┆ )
      225┆ .unwrap();
        ⋮┆----------------------------------------
      222┆ &mut Cursor::new(Vec::from_hex(txoutproof_hex).unwrap()),
                                          
modules/fedimint-wallet-server/src/lib.rs 
❯❱ config.ban-unwrap
      Using .unwrap() is banned. Consider using .expect() instead.
                                                                  
      260┆ let params = self.parse_params(params).unwrap();
        ⋮┆----------------------------------------
      298┆ let params = self.parse_params(params).unwrap();
        ⋮┆----------------------------------------
      873┆ &Message::from_slice(&tx_hash[..]).unwrap(),
        ⋮┆----------------------------------------
      1527┆ .sign_ecdsa(&Message::from_slice(&tx_hash[..]).unwrap(), &tweaked_secret);
        ⋮┆----------------------------------------
      1611┆ Wsh::new_sortedmulti(
      1612┆     3,
      1613┆     (0..4)
      1614┆         .map(|_| secp.generate_keypair(&mut OsRng))
      1615┆         .map(|(_, key)| CompressedPublicKey { key })
      1616┆         .collect(),
      1617┆ )
      1618┆ .unwrap(),
        ⋮┆----------------------------------------
      1634┆ let recipient = Address::from_str("32iVBEu4dxkUQk9dJbZUiBiQdmypcEyJRf").unwrap();

┌──────────────┐ │ Scan Summary │ └──────────────┘ Some files were skipped or only partially analyzed. Scan was limited to files tracked by git. Scan skipped: 5 files matching .semgrepignore patterns For a full list of skipped files, run semgrep with the --verbose flag.

Ran 10 rules on 218 files: 355 findings.

.unwrap() is used a lot. Are we willing to make all of these changes from .unwrap() -> .expect()?

kernelkind avatar Feb 19 '24 21:02 kernelkind

Can we limit the check to newly introduced code @dpc?

elsirion avatar Feb 20 '24 19:02 elsirion

Nope. I'm not aware of good way to run stuff "for new code only". Changes like this require fixing the code fix, then trying to enforce it.

dpc avatar Feb 20 '24 20:02 dpc

Could we enforce this within certain subdirectories? That'd allow for us to migrate to no-unwrap incrementally, enforcing each subdirectory as we go to prevent regressions. This might be a pain to manage but just want to put the idea out there.

tvolk131 avatar Feb 21 '24 00:02 tvolk131

Could we enforce this within certain subdirectories?

Yep, super easy with semgrep

kernelkind avatar Feb 21 '24 00:02 kernelkind