verifier

package
v0.1.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 8, 2025 License: Apache-2.0 Imports: 22 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var BadTxFormatTestCases = []struct {
	Tx             *protoblocktx.Tx
	ExpectedStatus protoblocktx.Status
}{
	{
		Tx: &protoblocktx.Tx{
			Id: "",
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_MISSING_TXID,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "empty namespaces",
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_EMPTY_NAMESPACES,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "invalid signature",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId:       ns1,
					NsVersion:  v0,
					ReadWrites: []*protoblocktx.ReadWrite{{Key: []byte("1")}},
				},
			},
			Signatures: [][]byte{[]byte("dummy")},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_SIGNATURE_INVALID,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "namespace id is invalid in tx",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId: "//",
				},
			},
			Signatures: [][]byte{
				[]byte("dummy"),
			},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_NAMESPACE_ID_INVALID,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "missing namespace version",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId: ns1,
				},
			},
			Signatures: [][]byte{
				[]byte("dummy"),
			},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_MISSING_NAMESPACE_VERSION,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "no writes",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId:      ns1,
					NsVersion: v0,
					ReadsOnly: []*protoblocktx.Read{
						{
							Key: []byte("k1"),
						},
					},
				},
			},
			Signatures: [][]byte{
				[]byte("dummy"),
			},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_NO_WRITES,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "namespace id is invalid in metaNs tx",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId:      ns1,
					NsVersion: v0,
					ReadWrites: []*protoblocktx.ReadWrite{
						{
							Key: []byte("key"),
						},
					},
				},
				{
					NsId:      types.MetaNamespaceID,
					NsVersion: v0,
					ReadWrites: []*protoblocktx.ReadWrite{
						{
							Key: []byte("/\\"),
						},
					},
				},
			},
			Signatures: [][]byte{
				[]byte("dummy"),
				[]byte("dummy"),
			},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_NAMESPACE_ID_INVALID,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "namespace policy is invalid in metaNs tx",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId:      ns1,
					NsVersion: v0,
					ReadWrites: []*protoblocktx.ReadWrite{
						{
							Key: []byte("key"),
						},
					},
				},
				{
					NsId:      types.MetaNamespaceID,
					NsVersion: v0,
					ReadWrites: []*protoblocktx.ReadWrite{
						{
							Key:   []byte("2"),
							Value: []byte("value"),
						},
					},
				},
			},
			Signatures: [][]byte{
				[]byte("dummy"),
				[]byte("dummy"),
			},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_NAMESPACE_POLICY_INVALID,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "duplicate namespace",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId:      ns1,
					NsVersion: v0,
					ReadWrites: []*protoblocktx.ReadWrite{
						{
							Key: []byte("key"),
						},
					},
				},
				{
					NsId:      types.MetaNamespaceID,
					NsVersion: v0,
					ReadWrites: []*protoblocktx.ReadWrite{
						{
							Key:   []byte("2"),
							Value: defaultNsPolicy(),
						},
					},
				},
				{
					NsId:      ns1,
					NsVersion: v0,
				},
			},
			Signatures: [][]byte{
				[]byte("dummy"),
				[]byte("dummy"),
				[]byte("dummy"),
			},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_DUPLICATE_NAMESPACE,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "blind writes not allowed in metaNs tx",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId:      ns1,
					NsVersion: v0,
					ReadWrites: []*protoblocktx.ReadWrite{
						{
							Key: []byte("key"),
						},
					},
				},
				{
					NsId:      types.MetaNamespaceID,
					NsVersion: v0,
					BlindWrites: []*protoblocktx.Write{
						{
							Key:   []byte("2"),
							Value: defaultNsPolicy(),
						},
					},
				},
			},
			Signatures: [][]byte{
				[]byte("dummy"),
				[]byte("dummy"),
			},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_BLIND_WRITES_NOT_ALLOWED,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "nil key in ReadOnly",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId:       ns1,
					NsVersion:  v0,
					ReadsOnly:  []*protoblocktx.Read{{Key: nil}},
					ReadWrites: []*protoblocktx.ReadWrite{{Key: []byte("1")}},
				},
			},
			Signatures: [][]byte{[]byte("dummy")},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_NIL_KEY,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "nil key in ReadWrites",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId:       ns1,
					NsVersion:  v0,
					ReadWrites: []*protoblocktx.ReadWrite{{Key: nil}},
				},
			},
			Signatures: [][]byte{[]byte("dummy")},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_NIL_KEY,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "nil key in BlindWrites",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId:        ns1,
					NsVersion:   v0,
					BlindWrites: []*protoblocktx.Write{{Key: nil}},
				},
			},
			Signatures: [][]byte{[]byte("dummy")},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_NIL_KEY,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "duplicate key within ReadOnly",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId:       ns1,
					NsVersion:  v0,
					ReadsOnly:  []*protoblocktx.Read{{Key: []byte("key1")}, {Key: []byte("key1")}},
					ReadWrites: []*protoblocktx.ReadWrite{{Key: []byte("1")}},
				},
			},
			Signatures: [][]byte{[]byte("dummy")},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_DUPLICATE_KEY_IN_READ_WRITE_SET,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "duplicate key within ReadWrite",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId:       ns1,
					NsVersion:  v0,
					ReadWrites: []*protoblocktx.ReadWrite{{Key: []byte("key1")}, {Key: []byte("key1")}},
				},
			},
			Signatures: [][]byte{[]byte("dummy")},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_DUPLICATE_KEY_IN_READ_WRITE_SET,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "duplicate key within BlindWrites",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId:        ns1,
					NsVersion:   v0,
					BlindWrites: []*protoblocktx.Write{{Key: []byte("key1")}, {Key: []byte("key1")}},
				},
			},
			Signatures: [][]byte{[]byte("dummy")},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_DUPLICATE_KEY_IN_READ_WRITE_SET,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "duplicate key across ReadOnly and ReadWrite",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId:       ns1,
					NsVersion:  v0,
					ReadsOnly:  []*protoblocktx.Read{{Key: []byte("key1")}},
					ReadWrites: []*protoblocktx.ReadWrite{{Key: []byte("key1")}},
				},
			},
			Signatures: [][]byte{[]byte("dummy")},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_DUPLICATE_KEY_IN_READ_WRITE_SET,
	},
	{
		Tx: &protoblocktx.Tx{
			Id: "duplicate key across ReadWrite and BlindWrites",
			Namespaces: []*protoblocktx.TxNamespace{
				{
					NsId:        ns1,
					NsVersion:   v0,
					ReadWrites:  []*protoblocktx.ReadWrite{{Key: []byte("key1")}},
					BlindWrites: []*protoblocktx.Write{{Key: []byte("key1")}},
				},
			},
			Signatures: [][]byte{[]byte("dummy")},
		},
		ExpectedStatus: protoblocktx.Status_ABORTED_DUPLICATE_KEY_IN_READ_WRITE_SET,
	},
}

BadTxFormatTestCases holds the test cases needed to test bad transaction formats.

View Source
var (

	// ErrUpdatePolicies is returned when UpdatePolicies fails to parse a given policy.
	ErrUpdatePolicies = errors.New("failed to update policies")
)

Functions

This section is empty.

Types

type Config

type Config struct {
	Server           *connection.ServerConfig `mapstructure:"server" yaml:"server"`
	Monitoring       monitoring.Config        `mapstructure:"monitoring" yaml:"monitoring"`
	ParallelExecutor ExecutorConfig           `mapstructure:"parallel-executor" yaml:"parallel-executor"`
}

Config describes the signature verifier parameters.

type ExecutorConfig

type ExecutorConfig struct {
	// Parallelism How many parallel go routines will be launched
	Parallelism int `mapstructure:"parallelism" yaml:"parallelism"`
	// BatchSizeCutoff The minimum amount of responses we need to collect before emitting a response
	BatchSizeCutoff int `mapstructure:"batch-size-cutoff" yaml:"batch-size-cutoff"`
	// BatchTimeCutoff How often we should empty the non-empty buffer
	BatchTimeCutoff time.Duration `mapstructure:"batch-time-cutoff" yaml:"batch-time-cutoff"`
	// ChannelBufferSize The size of the buffer of the input channels (increase for high fluctuations of load)
	ChannelBufferSize int `mapstructure:"channel-buffer-size" yaml:"channel-buffer-size"`
}

ExecutorConfig describes the execution parameters.

type Server

type Server struct {
	protosigverifierservice.UnimplementedVerifierServer
	// contains filtered or unexported fields
}

Server implements verifier.Server.

func New

func New(config *Config) *Server

New instantiate a new VerifierServer.

func (*Server) Run

func (s *Server) Run(ctx context.Context) error

Run the verifier background service.

func (*Server) StartStream

StartStream starts a verification stream.

func (*Server) WaitForReady

func (*Server) WaitForReady(context.Context) bool

WaitForReady wait for service to be ready to be exposed as gRPC service. If the context ended before the service is ready, returns false.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL