Documentation
¶
Overview ¶
Package zap implements the Zero-copy Application Protocol (ZAP) for Lux.
ZAP is a binary serialization format designed for high-performance inter-process and network communication. Like Cap'n Proto and FlatBuffers, ZAP enables zero-copy reads - data can be accessed directly from the underlying byte buffer without parsing or allocation.
Transport security: set NodeConfig.TLS to a *tls.Config to wrap all TCP connections with TLS. This supports PQ-TLS 1.3 when the Go runtime and configured cipher suites provide post-quantum key exchange (e.g. X25519Kyber768). When TLS is nil (the default), connections are plaintext.
Wire Format:
┌─────────────────────────────────────────────────┐ │ Header (16 bytes) │ │ ├─ Magic (4 bytes): "ZAP\x00" │ │ ├─ Version (2 bytes): 1 │ │ ├─ Flags (2 bytes): compression, etc. │ │ ├─ Root Offset (4 bytes): offset to root │ │ └─ Size (4 bytes): total message size │ ├─────────────────────────────────────────────────┤ │ Data Segment (variable) │ │ └─ Structs, lists, text, bytes... │ └─────────────────────────────────────────────────┘
All multi-byte integers are little-endian. Offsets are relative to the position of the offset field itself.
Index ¶
- Constants
- Variables
- func TypeSize(t Type) int
- type Address
- type Bloom
- type Builder
- func (b *Builder) Finish() []byte
- func (b *Builder) FinishWithFlags(flags uint16) []byte
- func (b *Builder) Reset()
- func (b *Builder) StartList(elemSize int) *ListBuilder
- func (b *Builder) StartObject(dataSize int) *ObjectBuilder
- func (b *Builder) WriteBytes(data []byte) int
- func (b *Builder) WriteText(s string) int
- type Conn
- type Enum
- type Field
- type Handler
- type Hash
- type List
- func (l List) Address(i int) Address
- func (l List) Bytes() []byte
- func (l List) Hash(i int) Hash
- func (l List) IsNull() bool
- func (l List) Len() int
- func (l List) Object(i int, elemSize int) Object
- func (l List) Uint8(i int) uint8
- func (l List) Uint32(i int) uint32
- func (l List) Uint64(i int) uint64
- type ListBuilder
- type Message
- type Node
- func (n *Node) Broadcast(ctx context.Context, msg *Message) map[string]error
- func (n *Node) Call(ctx context.Context, peerID string, msg *Message) (*Message, error)
- func (n *Node) ConnectDirect(addr string) error
- func (n *Node) Handle(msgType uint16, handler Handler)
- func (n *Node) NodeID() string
- func (n *Node) Peers() []string
- func (n *Node) Send(ctx context.Context, peerID string, msg *Message) error
- func (n *Node) Start() error
- func (n *Node) Stop()
- type NodeConfig
- type Object
- func (o Object) Address(fieldOffset int) Address
- func (o Object) AddressSlice(fieldOffset int) []byte
- func (o Object) Bool(fieldOffset int) bool
- func (o Object) Bytes(fieldOffset int) []byte
- func (o Object) Float32(fieldOffset int) float32
- func (o Object) Float64(fieldOffset int) float64
- func (o Object) Hash(fieldOffset int) Hash
- func (o Object) HashSlice(fieldOffset int) []byte
- func (o Object) Int8(fieldOffset int) int8
- func (o Object) Int16(fieldOffset int) int16
- func (o Object) Int32(fieldOffset int) int32
- func (o Object) Int64(fieldOffset int) int64
- func (o Object) IsNull() bool
- func (o Object) List(fieldOffset int) List
- func (o Object) Object(fieldOffset int) Object
- func (o Object) Signature(fieldOffset int) Signature
- func (o Object) Text(fieldOffset int) string
- func (o Object) Uint8(fieldOffset int) uint8
- func (o Object) Uint16(fieldOffset int) uint16
- func (o Object) Uint32(fieldOffset int) uint32
- func (o Object) Uint64(fieldOffset int) uint64
- type ObjectBuilder
- func (ob *ObjectBuilder) Finish() int
- func (ob *ObjectBuilder) FinishAsRoot() int
- func (ob *ObjectBuilder) SetAddress(fieldOffset int, addr Address)
- func (ob *ObjectBuilder) SetBool(fieldOffset int, v bool)
- func (ob *ObjectBuilder) SetBytes(fieldOffset int, v []byte)
- func (ob *ObjectBuilder) SetFloat32(fieldOffset int, v float32)
- func (ob *ObjectBuilder) SetFloat64(fieldOffset int, v float64)
- func (ob *ObjectBuilder) SetHash(fieldOffset int, h Hash)
- func (ob *ObjectBuilder) SetInt8(fieldOffset int, v int8)
- func (ob *ObjectBuilder) SetInt16(fieldOffset int, v int16)
- func (ob *ObjectBuilder) SetInt32(fieldOffset int, v int32)
- func (ob *ObjectBuilder) SetInt64(fieldOffset int, v int64)
- func (ob *ObjectBuilder) SetList(fieldOffset int, listOffset int, length int)
- func (ob *ObjectBuilder) SetObject(fieldOffset int, objOffset int)
- func (ob *ObjectBuilder) SetSignature(fieldOffset int, sig Signature)
- func (ob *ObjectBuilder) SetText(fieldOffset int, v string)
- func (ob *ObjectBuilder) SetUint8(fieldOffset int, v uint8)
- func (ob *ObjectBuilder) SetUint16(fieldOffset int, v uint16)
- func (ob *ObjectBuilder) SetUint32(fieldOffset int, v uint32)
- func (ob *ObjectBuilder) SetUint64(fieldOffset int, v uint64)
- type Schema
- type Signature
- type Struct
- type StructBuilder
- func (sb *StructBuilder) Address(name string) *StructBuilder
- func (sb *StructBuilder) Bool(name string) *StructBuilder
- func (sb *StructBuilder) Build() *Struct
- func (sb *StructBuilder) Bytes(name string) *StructBuilder
- func (sb *StructBuilder) Float64(name string) *StructBuilder
- func (sb *StructBuilder) Hash(name string) *StructBuilder
- func (sb *StructBuilder) Int32(name string) *StructBuilder
- func (sb *StructBuilder) Int64(name string) *StructBuilder
- func (sb *StructBuilder) List(name string, elemType Type) *StructBuilder
- func (sb *StructBuilder) Signature(name string) *StructBuilder
- func (sb *StructBuilder) Struct(name string, structName string) *StructBuilder
- func (sb *StructBuilder) Text(name string) *StructBuilder
- func (sb *StructBuilder) Uint32(name string) *StructBuilder
- func (sb *StructBuilder) Uint64(name string) *StructBuilder
- type Type
Constants ¶
const ( // AddressSize is the size of an EVM address (20 bytes) AddressSize = 20 // HashSize is the size of a keccak256 hash (32 bytes) HashSize = 32 // SignatureSize is the size of an ECDSA signature (65 bytes: r[32] + s[32] + v[1]) SignatureSize = 65 // BloomSize is the size of a bloom filter (256 bytes) BloomSize = 256 )
const ( FieldReqID = 0 // uint32 - request ID for correlation FieldReqFlag = 4 // uint32 - 1=request, 2=response ReqFlagReq = 1 ReqFlagResp = 2 )
Reserved header fields for request/response correlation These are the first 8 bytes of every Call message
const ( // HeaderSize is the size of the ZAP message header HeaderSize = 16 // Magic bytes identifying a ZAP message Magic = "ZAP\x00" // Version of the ZAP format Version = 1 // DefaultPort is the canonical TCP port for ZAP transport across the // Lux ecosystem. Like 80 means HTTP and 443 means HTTPS, 9999 means // ZAP — every ZAP-hosting service binds this port; the DNS name (e.g. // zap.kms.svc, zap.mpc.svc) disambiguates which service is on the // other end. DefaultPort = 9999 // Alignment for data segments Alignment = 8 )
const ( FlagNone uint16 = 0 FlagCompressed uint16 = 1 << 0 FlagEncrypted uint16 = 1 << 1 FlagSigned uint16 = 1 << 2 )
Flags for message header
Variables ¶
var ( ErrInvalidMagic = errors.New("zap: invalid magic bytes") ErrInvalidVersion = errors.New("zap: unsupported version") ErrBufferTooSmall = errors.New("zap: buffer too small") ErrOutOfBounds = errors.New("zap: offset out of bounds") ErrInvalidOffset = errors.New("zap: invalid offset") )
var BlockHeaderSchema = NewStructBuilder("BlockHeader").
Hash("parentHash").
Hash("uncleHash").
Address("coinbase").
Hash("stateRoot").
Hash("transactionsRoot").
Hash("receiptsRoot").
Bytes("logsBloom").
Uint64("difficulty").
Uint64("number").
Uint64("gasLimit").
Uint64("gasUsed").
Uint64("timestamp").
Bytes("extraData").
Hash("mixHash").
Uint64("nonce").
Build()
BlockHeaderSchema defines the schema for an EVM block header.
var LogSchema = NewStructBuilder("Log"). Address("address"). List("topics", TypeBytes). Bytes("data"). Uint64("blockNumber"). Hash("txHash"). Uint32("txIndex"). Hash("blockHash"). Uint32("logIndex"). Bool("removed"). Build()
LogSchema defines the schema for an EVM log entry.
var TransactionSchema = NewStructBuilder("Transaction").
Hash("hash").
Uint64("nonce").
Address("from").
Address("to").
Bytes("value").
Bytes("data").
Uint64("gas").
Bytes("gasPrice").
Uint64("chainId").
Signature("signature").
Build()
TransactionSchema defines the schema for an EVM transaction.
Functions ¶
Types ¶
type Address ¶
type Address [AddressSize]byte
Address is a 20-byte EVM address (zero-copy view).
var ZeroAddress Address
ZeroAddress is the zero address.
func AddressFromHex ¶
AddressFromHex parses an address from hex string.
type Builder ¶
type Builder struct {
// contains filtered or unexported fields
}
Builder constructs ZAP messages.
func NewBuilder ¶
NewBuilder creates a new builder with the given initial capacity.
func (*Builder) FinishWithFlags ¶
FinishWithFlags finalizes with specific flags.
func (*Builder) StartList ¶
func (b *Builder) StartList(elemSize int) *ListBuilder
StartList starts building a list.
func (*Builder) StartObject ¶
func (b *Builder) StartObject(dataSize int) *ObjectBuilder
StartObject starts building an object with the given data size.
func (*Builder) WriteBytes ¶
WriteBytes writes raw bytes and returns the offset.
type Conn ¶
Conn is a ZAP connection to a peer.
type Enum ¶
type Enum struct {
Name string
Type Type // Underlying type (Uint8, Uint16, etc.)
Values map[string]uint64
}
Enum describes a ZAP enum.
type Field ¶
type Field struct {
Name string
Type Type
Offset int // Byte offset within struct
ListElem Type // Element type if Type == TypeList
StructName string // Struct name if Type == TypeStruct
Default any // Default value
}
Field describes a struct field.
type Hash ¶
Hash is a 32-byte hash (zero-copy view).
var ZeroHash Hash
ZeroHash is the zero hash.
func HashFromHex ¶
HashFromHex parses a hash from hex string.
type List ¶
type List struct {
// contains filtered or unexported fields
}
List is a zero-copy view into a ZAP list.
type ListBuilder ¶
type ListBuilder struct {
// contains filtered or unexported fields
}
ListBuilder builds a ZAP list.
func (*ListBuilder) AddBytes ¶
func (lb *ListBuilder) AddBytes(data []byte)
AddBytes adds raw bytes (for byte lists).
func (*ListBuilder) AddUint8 ¶
func (lb *ListBuilder) AddUint8(v uint8)
AddUint8 adds a uint8 element.
func (*ListBuilder) AddUint32 ¶
func (lb *ListBuilder) AddUint32(v uint32)
AddUint32 adds a uint32 element.
func (*ListBuilder) AddUint64 ¶
func (lb *ListBuilder) AddUint64(v uint64)
AddUint64 adds a uint64 element.
func (*ListBuilder) Finish ¶
func (lb *ListBuilder) Finish() (offset int, length int)
Finish returns the list offset and length.
type Message ¶
type Message struct {
// contains filtered or unexported fields
}
Message is a ZAP message that can be read zero-copy.
type Node ¶
type Node struct {
// contains filtered or unexported fields
}
Node is a ZAP node that combines mDNS discovery with zero-copy RPC.
func (*Node) ConnectDirect ¶
ConnectDirect connects directly to a peer at the given address (bypasses mDNS).
type NodeConfig ¶
type NodeConfig struct {
NodeID string
ServiceType string // e.g., "_luxd._tcp", "_fhed._tcp"
Port int
Metadata map[string]string
Logger *slog.Logger
NoDiscovery bool // Disable mDNS discovery (use ConnectDirect only)
TLS *tls.Config // optional PQ-TLS 1.3; nil = plaintext
}
NodeConfig configures a ZAP node.
type Object ¶
type Object struct {
// contains filtered or unexported fields
}
Object is a zero-copy view into a ZAP struct.
func (Object) AddressSlice ¶
AddressSlice returns a slice of the address bytes (zero-copy).
type ObjectBuilder ¶
type ObjectBuilder struct {
// contains filtered or unexported fields
}
ObjectBuilder builds a ZAP object (struct).
func (*ObjectBuilder) Finish ¶
func (ob *ObjectBuilder) Finish() int
Finish finalizes the object and returns its offset. Writes deferred text/bytes data after the object's fixed section and patches relative offsets.
func (*ObjectBuilder) FinishAsRoot ¶
func (ob *ObjectBuilder) FinishAsRoot() int
FinishAsRoot finalizes and sets as the message root.
func (*ObjectBuilder) SetAddress ¶
func (ob *ObjectBuilder) SetAddress(fieldOffset int, addr Address)
SetAddress sets an address field.
func (*ObjectBuilder) SetBool ¶
func (ob *ObjectBuilder) SetBool(fieldOffset int, v bool)
SetBool sets a bool field.
func (*ObjectBuilder) SetBytes ¶
func (ob *ObjectBuilder) SetBytes(fieldOffset int, v []byte)
SetBytes sets a bytes field. The data is written after the object's fixed section during Finish().
func (*ObjectBuilder) SetFloat32 ¶
func (ob *ObjectBuilder) SetFloat32(fieldOffset int, v float32)
SetFloat32 sets a float32 field.
func (*ObjectBuilder) SetFloat64 ¶
func (ob *ObjectBuilder) SetFloat64(fieldOffset int, v float64)
SetFloat64 sets a float64 field.
func (*ObjectBuilder) SetHash ¶
func (ob *ObjectBuilder) SetHash(fieldOffset int, h Hash)
SetHash sets a hash field.
func (*ObjectBuilder) SetInt8 ¶
func (ob *ObjectBuilder) SetInt8(fieldOffset int, v int8)
SetInt8 sets an int8 field.
func (*ObjectBuilder) SetInt16 ¶
func (ob *ObjectBuilder) SetInt16(fieldOffset int, v int16)
SetInt16 sets an int16 field.
func (*ObjectBuilder) SetInt32 ¶
func (ob *ObjectBuilder) SetInt32(fieldOffset int, v int32)
SetInt32 sets an int32 field.
func (*ObjectBuilder) SetInt64 ¶
func (ob *ObjectBuilder) SetInt64(fieldOffset int, v int64)
SetInt64 sets an int64 field.
func (*ObjectBuilder) SetList ¶
func (ob *ObjectBuilder) SetList(fieldOffset int, listOffset int, length int)
SetList sets a list field.
func (*ObjectBuilder) SetObject ¶
func (ob *ObjectBuilder) SetObject(fieldOffset int, objOffset int)
SetObject sets a nested object field (by offset).
func (*ObjectBuilder) SetSignature ¶
func (ob *ObjectBuilder) SetSignature(fieldOffset int, sig Signature)
SetSignature sets a signature field.
func (*ObjectBuilder) SetText ¶
func (ob *ObjectBuilder) SetText(fieldOffset int, v string)
SetText sets a text (string) field.
func (*ObjectBuilder) SetUint8 ¶
func (ob *ObjectBuilder) SetUint8(fieldOffset int, v uint8)
SetUint8 sets a uint8 field.
func (*ObjectBuilder) SetUint16 ¶
func (ob *ObjectBuilder) SetUint16(fieldOffset int, v uint16)
SetUint16 sets a uint16 field.
func (*ObjectBuilder) SetUint32 ¶
func (ob *ObjectBuilder) SetUint32(fieldOffset int, v uint32)
SetUint32 sets a uint32 field.
func (*ObjectBuilder) SetUint64 ¶
func (ob *ObjectBuilder) SetUint64(fieldOffset int, v uint64)
SetUint64 sets a uint64 field.
type StructBuilder ¶
type StructBuilder struct {
// contains filtered or unexported fields
}
StructBuilder helps build struct definitions.
func NewStructBuilder ¶
func NewStructBuilder(name string) *StructBuilder
NewStructBuilder creates a struct builder.
func (*StructBuilder) Address ¶
func (sb *StructBuilder) Address(name string) *StructBuilder
Address adds an address field.
func (*StructBuilder) Bool ¶
func (sb *StructBuilder) Bool(name string) *StructBuilder
Bool adds a bool field.
func (*StructBuilder) Build ¶
func (sb *StructBuilder) Build() *Struct
Build finalizes and returns the struct.
func (*StructBuilder) Bytes ¶
func (sb *StructBuilder) Bytes(name string) *StructBuilder
Bytes adds a bytes field.
func (*StructBuilder) Float64 ¶
func (sb *StructBuilder) Float64(name string) *StructBuilder
Float64 adds a float64 field.
func (*StructBuilder) Hash ¶
func (sb *StructBuilder) Hash(name string) *StructBuilder
Hash adds a hash field.
func (*StructBuilder) Int32 ¶
func (sb *StructBuilder) Int32(name string) *StructBuilder
Int32 adds an int32 field.
func (*StructBuilder) Int64 ¶
func (sb *StructBuilder) Int64(name string) *StructBuilder
Int64 adds an int64 field.
func (*StructBuilder) List ¶
func (sb *StructBuilder) List(name string, elemType Type) *StructBuilder
List adds a list field.
func (*StructBuilder) Signature ¶
func (sb *StructBuilder) Signature(name string) *StructBuilder
Signature adds a signature field.
func (*StructBuilder) Struct ¶
func (sb *StructBuilder) Struct(name string, structName string) *StructBuilder
Struct adds a nested struct field.
func (*StructBuilder) Text ¶
func (sb *StructBuilder) Text(name string) *StructBuilder
Text adds a text field.
func (*StructBuilder) Uint32 ¶
func (sb *StructBuilder) Uint32(name string) *StructBuilder
Uint32 adds a uint32 field.
func (*StructBuilder) Uint64 ¶
func (sb *StructBuilder) Uint64(name string) *StructBuilder
Uint64 adds a uint64 field.
Directories
¶
| Path | Synopsis |
|---|---|
|
Real-world benchmark: ZAP vs gRPC/Protobuf
|
Real-world benchmark: ZAP vs gRPC/Protobuf |
|
examples
|
|
|
agents
command
Multi-Agent LLM Consensus via ZAP Protocol
|
Multi-Agent LLM Consensus via ZAP Protocol |
|
mcp-bridge
command
Example: MCP-to-ZAP Bridge with 20 Tool Servers
|
Example: MCP-to-ZAP Bridge with 20 Tool Servers |
|
Package mcp provides a bridge between MCP (Model Context Protocol) servers and ZAP for high-performance tool calling.
|
Package mcp provides a bridge between MCP (Model Context Protocol) servers and ZAP for high-performance tool calling. |