message: fix utxo addressing in the btreemap to be more unique
diff: @@ -58,7 +58,8 @@ impl fmt::Display for Utxo {
  }
  }
  -pub type Utxos = BTreeMap<TxId, Utxo>;
  +pub type UtxoAddr = (TxId, u32);
  +pub type Utxos = BTreeMap<UtxoAddr, Utxo>;
  pub trait AddrLookup {
  /// given the lookup structure, return the list
  @@ -130,10 +131,10 @@ impl <T: AddrLookup> State<T> {
  Log::Checkpoint(known_ptr) => ptr = known_ptr,
  Log::ReceivedFund(utxo) => {
  ptr = utxo.block_addr.clone();
  - utxos.insert(utxo.txid, utxo);
  + utxos.insert((utxo.txid, utxo.offset), utxo);
  },
  Log::SpentFund(utxo) => {
  - utxos.remove(&utxo.txid);
  + utxos.remove(&(utxo.txid, utxo.offset));
  },
  }
  }
  @@ -177,8 +178,8 @@ impl <T: AddrLookup> State<T> {
  let txid = txaux.tx.id();
  // only do the input loop if we have local utxos
  if has_local_utxo {
  - for txin in txaux.tx.inputs.iter() {
  - match self.utxos.remove(&txin.id) {
  + for (txin, txofs) in txaux.tx.inputs.iter().zip(0..) {
  + match self.utxos.remove(&(txin.id, txofs)) {
  None => {},
  Some(utxo) => {
  // TODO verify signature
  @@ -196,7 +197,7 @@ impl <T: AddrLookup> State<T> {
  let found_utxos = self.lookup_struct.lookup(&current_ptr, &all_outputs[..])?;
  for utxo in found_utxos {
  events.push(Log::ReceivedFund(utxo.clone()));
  - self.utxos.insert(utxo.txid, utxo);
  + self.utxos.insert((utxo.txid, utxo.offset), utxo);
  }
  // utxo
  