mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-10-14 00:59:33 +00:00

* [NOD-406] Don't do ECMH operations on mempool * [NOD-406] Change NewUTXODiff(false) to NewUTXODiffWithoutMultiset * [NOD-406] Rename dClone -> clone * [NOD-406] Remove redudnant assignment * [NOD-406] Remove dag.UTXOToECMHCacheLock and make NewBlockTemplate use dag's write lock * [NOD-406] Add tests to UTXO diffs without multiset
33 lines
770 B
Go
33 lines
770 B
Go
package blockdag
|
|
|
|
import (
|
|
"bytes"
|
|
"github.com/daglabs/btcd/btcec"
|
|
"github.com/daglabs/btcd/util/daghash"
|
|
"github.com/daglabs/btcd/wire"
|
|
"github.com/golang/groupcache/lru"
|
|
)
|
|
|
|
const ecmhCacheSize = 4_000_000
|
|
|
|
var (
|
|
utxoToECMHCache = lru.New(ecmhCacheSize)
|
|
)
|
|
|
|
func utxoMultiset(entry *UTXOEntry, outpoint *wire.Outpoint) (*btcec.Multiset, error) {
|
|
w := &bytes.Buffer{}
|
|
err := serializeUTXO(w, entry, outpoint)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
serializedUTXO := w.Bytes()
|
|
utxoHash := daghash.DoubleHashH(serializedUTXO)
|
|
|
|
if cachedMSPoint, ok := utxoToECMHCache.Get(utxoHash); ok {
|
|
return cachedMSPoint.(*btcec.Multiset), nil
|
|
}
|
|
msPoint := btcec.NewMultiset(btcec.S256()).Add(serializedUTXO)
|
|
utxoToECMHCache.Add(utxoHash, msPoint)
|
|
return msPoint, nil
|
|
}
|