types.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package qlight
  2. import (
  3. "encoding/base64"
  4. "fmt"
  5. "github.com/ethereum/go-ethereum/common"
  6. "github.com/ethereum/go-ethereum/core/types"
  7. "github.com/ethereum/go-ethereum/plugin/security"
  8. "github.com/ethereum/go-ethereum/private/engine"
  9. "github.com/ethereum/go-ethereum/private/engine/qlightptm"
  10. "github.com/ethereum/go-ethereum/rlp"
  11. )
  12. type PrivateStateRootHashValidator interface {
  13. ValidatePrivateStateRoot(blockHash common.Hash, blockPublicStateRoot common.Hash) error
  14. }
  15. type PrivateClientCache interface {
  16. PrivateStateRootHashValidator
  17. AddPrivateBlock(blockPrivateData BlockPrivateData) error
  18. CheckAndAddEmptyEntry(hash common.EncryptedPayloadHash)
  19. }
  20. type PrivateBlockDataResolver interface {
  21. PrepareBlockPrivateData(block *types.Block, psi string) (*BlockPrivateData, error)
  22. }
  23. type AuthManagerProvider func() security.AuthenticationManager
  24. type AuthProvider interface {
  25. Initialize() error
  26. Authorize(token string, psi string) error
  27. }
  28. type CacheWithEmpty interface {
  29. Cache(privateTxData *qlightptm.CachablePrivateTransactionData) error
  30. CheckAndAddEmptyToCache(hash common.EncryptedPayloadHash)
  31. }
  32. type BlockPrivateData struct {
  33. BlockHash common.Hash
  34. PSI types.PrivateStateIdentifier
  35. PrivateStateRoot common.Hash
  36. PrivateTransactions []PrivateTransactionData
  37. }
  38. type QLightCacheKey struct {
  39. BlockHash common.Hash
  40. PSI types.PrivateStateIdentifier
  41. }
  42. func (k *QLightCacheKey) String() string {
  43. bytes, err := rlp.EncodeToBytes(k)
  44. if err != nil {
  45. return err.Error()
  46. }
  47. return base64.StdEncoding.EncodeToString(bytes)
  48. }
  49. type PrivateTransactionData struct {
  50. Hash *common.EncryptedPayloadHash
  51. Payload []byte
  52. Extra *engine.ExtraMetadata
  53. IsSender bool
  54. }
  55. func (d *PrivateTransactionData) ToCachable() *qlightptm.CachablePrivateTransactionData {
  56. return &qlightptm.CachablePrivateTransactionData{
  57. Hash: *d.Hash,
  58. QuorumPrivateTxData: engine.QuorumPayloadExtra{
  59. Payload: fmt.Sprintf("0x%x", d.Payload),
  60. ExtraMetaData: d.Extra,
  61. IsSender: d.IsSender,
  62. },
  63. }
  64. }