Update go-randomx, bump dependencies and use hashicorp LRU to remove golang.org/x/text, github.com/bahlo/generic-list-go dependencies
This commit is contained in:
parent
ad17d3724a
commit
dbeb877d6c
8
go.mod
8
go.mod
|
@ -4,14 +4,14 @@ go 1.22
|
|||
|
||||
require (
|
||||
git.gammaspectra.live/P2Pool/edwards25519 v0.0.0-20240405085108-e2f706cb5c00
|
||||
git.gammaspectra.live/P2Pool/go-randomx/v2 v2.0.0
|
||||
git.gammaspectra.live/P2Pool/go-randomx/v2 v2.1.0
|
||||
git.gammaspectra.live/P2Pool/monero-base58 v1.0.0
|
||||
git.gammaspectra.live/P2Pool/randomx-go-bindings v1.0.0
|
||||
git.gammaspectra.live/P2Pool/sha3 v0.17.0
|
||||
github.com/dolthub/swiss v0.2.2-0.20240312182618-f4b2babd2bc1
|
||||
github.com/floatdrop/lru v1.3.0
|
||||
github.com/go-zeromq/zmq4 v0.16.1-0.20240124085909-e75c615ba1b3
|
||||
github.com/goccy/go-json v0.10.2
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7
|
||||
github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc
|
||||
golang.org/x/sync v0.7.0
|
||||
golang.org/x/sys v0.19.0
|
||||
|
@ -19,12 +19,10 @@ require (
|
|||
)
|
||||
|
||||
require (
|
||||
github.com/bahlo/generic-list-go v0.2.0 // indirect
|
||||
github.com/dolthub/maphash v0.1.0 // indirect
|
||||
golang.org/x/crypto v0.22.0 // indirect
|
||||
golang.org/x/text v0.14.0 // indirect
|
||||
)
|
||||
|
||||
replace github.com/goccy/go-json => github.com/WeebDataHoarder/go-json v0.0.0-20230730135821-d8f6463bb887
|
||||
|
||||
replace github.com/go-zeromq/zmq4 => git.gammaspectra.live/P2Pool/zmq4 v0.16.1-0.20240407153747-7f7d531f586e
|
||||
replace github.com/go-zeromq/zmq4 => git.gammaspectra.live/P2Pool/zmq4 v0.16.1-0.20240412221749-a35fa84ca9f4
|
||||
|
|
16
go.sum
16
go.sum
|
@ -1,27 +1,25 @@
|
|||
git.gammaspectra.live/P2Pool/edwards25519 v0.0.0-20240405085108-e2f706cb5c00 h1:mDQY337iKB+kle5RYWL5CoAz+3DmnkAh/B2XD8B+PFk=
|
||||
git.gammaspectra.live/P2Pool/edwards25519 v0.0.0-20240405085108-e2f706cb5c00/go.mod h1:FZsrMWGucMP3SZamzrd7m562geIs5zp1O/9MGoiAKH0=
|
||||
git.gammaspectra.live/P2Pool/go-randomx/v2 v2.0.0 h1:lHi2z8Nz3H1Xpu1p53TYccz072BDhbJGNHquiX9orCM=
|
||||
git.gammaspectra.live/P2Pool/go-randomx/v2 v2.0.0/go.mod h1:vNmHlEIRAcU/bA85mxbUKEiBYtrtS4MVwozf29KmoHM=
|
||||
git.gammaspectra.live/P2Pool/go-randomx/v2 v2.1.0 h1:L1fV2XBYFmpFU+JKP/7fsgDm2Lfh9yFlS+800v+3OsM=
|
||||
git.gammaspectra.live/P2Pool/go-randomx/v2 v2.1.0/go.mod h1:vNmHlEIRAcU/bA85mxbUKEiBYtrtS4MVwozf29KmoHM=
|
||||
git.gammaspectra.live/P2Pool/monero-base58 v1.0.0 h1:s8LZxVNc93YEs2NCCNWZ7CKr8RbEb031y6Wkvhn+TS4=
|
||||
git.gammaspectra.live/P2Pool/monero-base58 v1.0.0/go.mod h1:WWEJy/AdWKxKAruvlKI82brw+DtVlePy0ct3ZiBlc68=
|
||||
git.gammaspectra.live/P2Pool/randomx-go-bindings v1.0.0 h1:tajr4QFSPrb8NtHmU14JaXdhr+z+0RbOBLIgUDI5Tow=
|
||||
git.gammaspectra.live/P2Pool/randomx-go-bindings v1.0.0/go.mod h1:S17NNidG5hxqaVLsSykKqDBg/hTPSzP0KcSwXfH8WIA=
|
||||
git.gammaspectra.live/P2Pool/sha3 v0.17.0 h1:CZpB466LPbNVQrUNjQTtQScGDc30xSMkZ6Bmw0W9VuM=
|
||||
git.gammaspectra.live/P2Pool/sha3 v0.17.0/go.mod h1:HmrrYa97BZTKklUk2n/wAY+wrY0gHhoSGRd2+lIqXq8=
|
||||
git.gammaspectra.live/P2Pool/zmq4 v0.16.1-0.20240407153747-7f7d531f586e h1:U6zpCbwIW1Pr4wyLjbbRNa3aJcCXwnWOPsJmiHGFKsY=
|
||||
git.gammaspectra.live/P2Pool/zmq4 v0.16.1-0.20240407153747-7f7d531f586e/go.mod h1:AOWpIfDC+phUiEeiZRXf5oth8YLsfLtflF+6BJNagi4=
|
||||
git.gammaspectra.live/P2Pool/zmq4 v0.16.1-0.20240412221749-a35fa84ca9f4 h1:K34kPogf+BpaLkUYQJSM1icWU69TL2ISrmx9u977zvw=
|
||||
git.gammaspectra.live/P2Pool/zmq4 v0.16.1-0.20240412221749-a35fa84ca9f4/go.mod h1:G/caphb5HAHcnNIIDDgOqJ3HN6r4rnTP14Q621H4rK4=
|
||||
github.com/WeebDataHoarder/go-json v0.0.0-20230730135821-d8f6463bb887 h1:P01nqSM+0b6zlPasOFYsqnQSP2dTRVZkanAnY9q/Bcc=
|
||||
github.com/WeebDataHoarder/go-json v0.0.0-20230730135821-d8f6463bb887/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||
github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=
|
||||
github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/dolthub/maphash v0.1.0 h1:bsQ7JsF4FkkWyrP3oCnFJgrCUAFbFf3kOl4L/QxPDyQ=
|
||||
github.com/dolthub/maphash v0.1.0/go.mod h1:gkg4Ch4CdCDu5h6PMriVLawB7koZ+5ijb9puGMV50a4=
|
||||
github.com/dolthub/swiss v0.2.2-0.20240312182618-f4b2babd2bc1 h1:F7u1ZVCidajlPuJJzdL5REPHfLO/O6xLQRUw/YMxrkM=
|
||||
github.com/dolthub/swiss v0.2.2-0.20240312182618-f4b2babd2bc1/go.mod h1:8AhKZZ1HK7g18j7v7k6c5cYIGEZJcPn0ARsai8cUrh0=
|
||||
github.com/floatdrop/lru v1.3.0 h1:83abtaKjXcWrPmtzTAk2Ggq8DUKqI29YzrTrB8+vu0c=
|
||||
github.com/floatdrop/lru v1.3.0/go.mod h1:83zlXKA06Bm32JImNINCiTr0ldadvdAjUe5jSwIaw0s=
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
|
||||
|
@ -34,8 +32,6 @@ golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
|
|||
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
|
||||
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
lukechampine.com/uint128 v1.3.0 h1:cDdUVfRwDUDovz610ABgFD17nXD4/uDgVHl2sC3+sbo=
|
||||
|
|
|
@ -9,7 +9,7 @@ import (
|
|||
"git.gammaspectra.live/P2Pool/consensus/v3/monero/transaction"
|
||||
"git.gammaspectra.live/P2Pool/consensus/v3/types"
|
||||
"git.gammaspectra.live/P2Pool/consensus/v3/utils"
|
||||
"github.com/floatdrop/lru"
|
||||
"github.com/hashicorp/golang-lru/v2"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
@ -55,7 +55,7 @@ type Client struct {
|
|||
c *rpc.Client
|
||||
d *daemon.Client
|
||||
|
||||
coinbaseTransactionCache *lru.LRU[types.Hash, *transaction.CoinbaseTransaction]
|
||||
coinbaseTransactionCache *lru.Cache[types.Hash, *transaction.CoinbaseTransaction]
|
||||
|
||||
throttler <-chan time.Time
|
||||
}
|
||||
|
@ -65,10 +65,16 @@ func NewClient(address string) (*Client, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cache, err := lru.New[types.Hash, *transaction.CoinbaseTransaction](1024)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &Client{
|
||||
c: c,
|
||||
d: daemon.NewClient(c),
|
||||
coinbaseTransactionCache: lru.New[types.Hash, *transaction.CoinbaseTransaction](1024),
|
||||
coinbaseTransactionCache: cache,
|
||||
throttler: time.Tick(time.Second / 8),
|
||||
}, nil
|
||||
}
|
||||
|
@ -126,7 +132,7 @@ func (c *Client) GetTransactions(txIds ...types.Hash) (data [][]byte, jsonTx []*
|
|||
}
|
||||
|
||||
func (c *Client) GetCoinbaseTransaction(txId types.Hash) (*transaction.CoinbaseTransaction, error) {
|
||||
if tx := c.coinbaseTransactionCache.Get(txId); tx == nil {
|
||||
if tx, ok := c.coinbaseTransactionCache.Get(txId); !ok || tx == nil {
|
||||
<-c.throttler
|
||||
if result, err := c.d.GetTransactions(context.Background(), []types.Hash{txId}); err != nil {
|
||||
return nil, err
|
||||
|
@ -144,12 +150,12 @@ func (c *Client) GetCoinbaseTransaction(txId types.Hash) (*transaction.CoinbaseT
|
|||
return nil, fmt.Errorf("expected %s, got %s", txId.String(), tx.CalculateId().String())
|
||||
}
|
||||
|
||||
c.coinbaseTransactionCache.Set(txId, tx)
|
||||
c.coinbaseTransactionCache.Add(txId, tx)
|
||||
|
||||
return tx, nil
|
||||
}
|
||||
} else {
|
||||
return *tx, nil
|
||||
return tx, nil
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ import (
|
|||
p2pooltypes "git.gammaspectra.live/P2Pool/consensus/v3/p2pool/types"
|
||||
"git.gammaspectra.live/P2Pool/consensus/v3/types"
|
||||
"git.gammaspectra.live/P2Pool/consensus/v3/utils"
|
||||
"github.com/floatdrop/lru"
|
||||
"github.com/hashicorp/golang-lru/v2"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/netip"
|
||||
|
@ -24,17 +24,21 @@ type P2PoolApi struct {
|
|||
Client *http.Client
|
||||
consensus atomic.Pointer[sidechain.Consensus]
|
||||
derivationCache sidechain.DerivationCacheInterface
|
||||
difficultyByHeightCache *lru.LRU[uint64, types.Difficulty]
|
||||
difficultyByHeightCache *lru.Cache[uint64, types.Difficulty]
|
||||
}
|
||||
|
||||
func NewP2PoolApi(host string) *P2PoolApi {
|
||||
cache, err := lru.New[uint64, types.Difficulty](1024)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return &P2PoolApi{
|
||||
Host: host,
|
||||
Client: &http.Client{
|
||||
Timeout: time.Second * 15,
|
||||
},
|
||||
derivationCache: sidechain.NewDerivationLRUCache(),
|
||||
difficultyByHeightCache: lru.New[uint64, types.Difficulty](1024),
|
||||
difficultyByHeightCache: cache,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package utils
|
||||
|
||||
import (
|
||||
"github.com/floatdrop/lru"
|
||||
"github.com/hashicorp/golang-lru/v2"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
@ -15,7 +15,7 @@ type Cache[K comparable, T any] interface {
|
|||
}
|
||||
|
||||
type LRUCache[K comparable, T any] struct {
|
||||
values atomic.Pointer[lru.LRU[K, T]]
|
||||
values atomic.Pointer[lru.Cache[K, T]]
|
||||
hits, misses atomic.Uint64
|
||||
size int
|
||||
}
|
||||
|
@ -29,9 +29,9 @@ func NewLRUCache[K comparable, T any](size int) *LRUCache[K, T] {
|
|||
}
|
||||
|
||||
func (c *LRUCache[K, T]) Get(key K) (value T, ok bool) {
|
||||
if v := c.values.Load().Get(key); v != nil {
|
||||
if value, ok = c.values.Load().Get(key); !ok {
|
||||
c.hits.Add(1)
|
||||
return *v, true
|
||||
return value, true
|
||||
} else {
|
||||
c.misses.Add(1)
|
||||
return value, false
|
||||
|
@ -39,7 +39,7 @@ func (c *LRUCache[K, T]) Get(key K) (value T, ok bool) {
|
|||
}
|
||||
|
||||
func (c *LRUCache[K, T]) Set(key K, value T) {
|
||||
c.values.Load().Set(key, value)
|
||||
c.values.Load().Add(key, value)
|
||||
}
|
||||
|
||||
func (c *LRUCache[K, T]) Delete(key K) {
|
||||
|
@ -47,7 +47,11 @@ func (c *LRUCache[K, T]) Delete(key K) {
|
|||
}
|
||||
|
||||
func (c *LRUCache[K, T]) Clear() {
|
||||
c.values.Store(lru.New[K, T](c.size))
|
||||
cache, err := lru.New[K, T](c.size)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
c.values.Store(cache)
|
||||
}
|
||||
|
||||
func (c *LRUCache[K, T]) Stats() (hits, misses uint64) {
|
||||
|
|
Loading…
Reference in a new issue