mirror of https://github.com/status-im/go-waku.git
chore: improve docs
This commit is contained in:
parent
03d6614b70
commit
e2b04570c1
|
@ -1,14 +1,3 @@
|
|||
---
|
||||
slug: #
|
||||
title: #/GOWAKU-BINDINGS
|
||||
name: Go-Waku v2 C Bindings
|
||||
status: draft
|
||||
tags: go-waku
|
||||
editor: Richard Ramos <richard@status.im>
|
||||
contributors:
|
||||
|
||||
---
|
||||
|
||||
This specification describes the API for consuming go-waku when built as a dynamic or static library
|
||||
|
||||
|
||||
|
@ -441,9 +430,7 @@ Query historic messages using waku store protocol.
|
|||
"startTime": 1234, // optional, unix epoch time in nanoseconds
|
||||
"endTime": 1234, // optional, unix epoch time in nanoseconds
|
||||
"contentFilters": [ // optional
|
||||
{
|
||||
"contentTopic": "..."
|
||||
}, ...
|
||||
"contentTopic1", "contentTopic2" ...
|
||||
],
|
||||
"pagingOptions": { // optional pagination information
|
||||
"pageSize": 40, // number
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
// Set of functions that are exported when go-waku is built as a static/dynamic library
|
||||
package main
|
||||
|
||||
/*
|
||||
|
|
|
@ -14,9 +14,7 @@ import (
|
|||
// "startTime": 1234, // optional, unix epoch time in nanoseconds
|
||||
// "endTime": 1234, // optional, unix epoch time in nanoseconds
|
||||
// "contentFilters": [ // optional
|
||||
// {
|
||||
// "contentTopic": "..."
|
||||
// }, ...
|
||||
// "contentTopic1", "contentTopic2" ...
|
||||
// ],
|
||||
// "pagingOptions": {// optional pagination information
|
||||
// "pageSize": 40, // number
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
// Implements gomobile bindings for go-waku. Contains a set of functions that
|
||||
// are exported when go-waku is exported as libraries for mobile devices
|
||||
package gowaku
|
||||
|
||||
import (
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
// Contains resources or utils for test units
|
||||
package tests
|
||||
|
|
|
@ -6,16 +6,22 @@ import (
|
|||
"github.com/urfave/cli/v2"
|
||||
)
|
||||
|
||||
// RendezvousOptions are settings for enabling the rendezvous protocol for
|
||||
// discovering new nodes
|
||||
type RendezvousOptions struct {
|
||||
Enable bool
|
||||
Nodes cli.StringSlice
|
||||
}
|
||||
|
||||
// RendezvousServerOptions are settings to enable the waku node to act as a
|
||||
// rendezvous server
|
||||
type RendezvousServerOptions struct {
|
||||
Enable bool
|
||||
DBPath string
|
||||
}
|
||||
|
||||
// DiscV5Options are settings to enable a modified version of Ethereum’s Node
|
||||
// Discovery Protocol v5 as a means for ambient node discovery.
|
||||
type DiscV5Options struct {
|
||||
Enable bool
|
||||
Nodes cli.StringSlice
|
||||
|
@ -23,6 +29,9 @@ type DiscV5Options struct {
|
|||
AutoUpdate bool
|
||||
}
|
||||
|
||||
// RelayOptions are settings to enable the relay protocol which is a pubsub
|
||||
// approach to peer-to-peer messaging with a strong focus on privacy,
|
||||
// censorship-resistance, security and scalability.
|
||||
type RelayOptions struct {
|
||||
Enable bool
|
||||
Topics cli.StringSlice
|
||||
|
@ -30,6 +39,10 @@ type RelayOptions struct {
|
|||
MinRelayPeersToPublish int
|
||||
}
|
||||
|
||||
// FilterOptions are settings used to enable filter protocol. This is a protocol
|
||||
// that enables subscribing to messages that a peer receives. This is a more
|
||||
// lightweight version of WakuRelay specifically designed for bandwidth
|
||||
// restricted devices.
|
||||
type FilterOptions struct {
|
||||
Enable bool
|
||||
DisableFullNode bool
|
||||
|
@ -98,6 +111,8 @@ type RPCServerOptions struct {
|
|||
Private bool
|
||||
}
|
||||
|
||||
// WSOptions are settings used for enabling websockets and secure websockets
|
||||
// support
|
||||
type WSOptions struct {
|
||||
Enable bool
|
||||
Port int
|
||||
|
|
|
@ -71,6 +71,8 @@ func WithDriver(driverName string, datasourceName string) DBOption {
|
|||
}
|
||||
}
|
||||
|
||||
// WithRetentionPolicy is a DBOption that specifies the max number of messages
|
||||
// to be stored and duration before they're removed from the message store
|
||||
func WithRetentionPolicy(maxMessages int, maxDuration time.Duration) DBOption {
|
||||
return func(d *DBStore) error {
|
||||
d.maxDuration = maxDuration
|
||||
|
@ -182,14 +184,14 @@ func (d *DBStore) checkForOlderRecords(t time.Duration) {
|
|||
}
|
||||
}
|
||||
|
||||
// Closes a DB connection
|
||||
// Stop closes a DB connection
|
||||
func (d *DBStore) Stop() {
|
||||
d.quit <- struct{}{}
|
||||
d.wg.Wait()
|
||||
d.db.Close()
|
||||
}
|
||||
|
||||
// Inserts a WakuMessage into the DB
|
||||
// Put inserts a WakuMessage into the DB
|
||||
func (d *DBStore) Put(env *protocol.Envelope) error {
|
||||
stmt, err := d.db.Prepare("INSERT INTO message (id, receiverTimestamp, senderTimestamp, contentTopic, pubsubTopic, payload, version) VALUES (?, ?, ?, ?, ?, ?, ?)")
|
||||
if err != nil {
|
||||
|
@ -211,6 +213,7 @@ func (d *DBStore) Put(env *protocol.Envelope) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Query retrieves messages from the DB
|
||||
func (d *DBStore) Query(query *pb.HistoryQuery) ([]StoredMessage, error) {
|
||||
start := time.Now()
|
||||
defer func() {
|
||||
|
@ -319,6 +322,8 @@ func (d *DBStore) Query(query *pb.HistoryQuery) ([]StoredMessage, error) {
|
|||
return result, nil
|
||||
}
|
||||
|
||||
// MostRecentTimestamp returns an unix timestamp with the most recent senderTimestamp
|
||||
// in the message table
|
||||
func (d *DBStore) MostRecentTimestamp() (int64, error) {
|
||||
result := sql.NullInt64{}
|
||||
|
||||
|
@ -329,7 +334,7 @@ func (d *DBStore) MostRecentTimestamp() (int64, error) {
|
|||
return result.Int64, nil
|
||||
}
|
||||
|
||||
// Returns all the stored WakuMessages
|
||||
// GetAll returns all the stored WakuMessages
|
||||
func (d *DBStore) GetAll() ([]StoredMessage, error) {
|
||||
start := time.Now()
|
||||
defer func() {
|
||||
|
@ -364,7 +369,8 @@ func (d *DBStore) GetAll() ([]StoredMessage, error) {
|
|||
return result, nil
|
||||
}
|
||||
|
||||
func (d *DBStore) GetStoredMessage(rows *sql.Rows) (StoredMessage, error) {
|
||||
// GetStoredMessage is a helper function used to convert a `*sql.Rows` into a `StoredMessage`
|
||||
func (d *DBStore) GetStoredMessage(row *sql.Rows) (StoredMessage, error) {
|
||||
var id []byte
|
||||
var receiverTimestamp int64
|
||||
var senderTimestamp int64
|
||||
|
@ -373,7 +379,7 @@ func (d *DBStore) GetStoredMessage(rows *sql.Rows) (StoredMessage, error) {
|
|||
var version uint32
|
||||
var pubsubTopic string
|
||||
|
||||
err := rows.Scan(&id, &receiverTimestamp, &senderTimestamp, &contentTopic, &pubsubTopic, &payload, &version)
|
||||
err := row.Scan(&id, &receiverTimestamp, &senderTimestamp, &contentTopic, &pubsubTopic, &payload, &version)
|
||||
if err != nil {
|
||||
d.log.Error("scanning messages from db", zap.Error(err))
|
||||
return StoredMessage{}, err
|
||||
|
|
|
@ -17,7 +17,7 @@ type dnsDiscoveryParameters struct {
|
|||
|
||||
type DnsDiscoveryOption func(*dnsDiscoveryParameters)
|
||||
|
||||
// WithMultiaddress is a WakuNodeOption that configures libp2p to listen on a list of multiaddresses
|
||||
// WithNameserver is a DnsDiscoveryOption that configures the nameserver to use
|
||||
func WithNameserver(nameserver string) DnsDiscoveryOption {
|
||||
return func(params *dnsDiscoveryParameters) {
|
||||
params.nameserver = nameserver
|
||||
|
|
|
@ -18,6 +18,7 @@ import (
|
|||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// LightPushID_v20beta1 is the current Waku Lightpush protocol identifier
|
||||
const LightPushID_v20beta1 = libp2pProtocol.ID("/vac/waku/lightpush/2.0.0-beta1")
|
||||
|
||||
var (
|
||||
|
|
|
@ -19,12 +19,15 @@ type LightPushParameters struct {
|
|||
|
||||
type LightPushOption func(*LightPushParameters)
|
||||
|
||||
// WithPeer is an option used to specify the peerID to push a waku message to
|
||||
func WithPeer(p peer.ID) LightPushOption {
|
||||
return func(params *LightPushParameters) {
|
||||
params.selectedPeer = p
|
||||
}
|
||||
}
|
||||
|
||||
// WithAutomaticPeerSelection is an option used to randomly select a peer from the peer store
|
||||
// to push a waku message to
|
||||
func WithAutomaticPeerSelection(host host.Host) LightPushOption {
|
||||
return func(params *LightPushParameters) {
|
||||
p, err := utils.SelectPeer(host, string(LightPushID_v20beta1), params.log)
|
||||
|
@ -36,6 +39,8 @@ func WithAutomaticPeerSelection(host host.Host) LightPushOption {
|
|||
}
|
||||
}
|
||||
|
||||
// WithFastestPeerSelection is an option used to select a peer from the peer store
|
||||
// with the lowest ping
|
||||
func WithFastestPeerSelection(ctx context.Context) LightPushOption {
|
||||
return func(params *LightPushParameters) {
|
||||
p, err := utils.SelectPeerWithLowestRTT(ctx, params.host, string(LightPushID_v20beta1), params.log)
|
||||
|
@ -47,18 +52,23 @@ func WithFastestPeerSelection(ctx context.Context) LightPushOption {
|
|||
}
|
||||
}
|
||||
|
||||
// WithRequestId is an option to set a specific request ID to be used when
|
||||
// publishing a message
|
||||
func WithRequestId(requestId []byte) LightPushOption {
|
||||
return func(params *LightPushParameters) {
|
||||
params.requestId = requestId
|
||||
}
|
||||
}
|
||||
|
||||
// WithAutomaticRequestId is an option to automatically generate a request ID
|
||||
// when publishing a message
|
||||
func WithAutomaticRequestId() LightPushOption {
|
||||
return func(params *LightPushParameters) {
|
||||
params.requestId = protocol.GenerateRequestId()
|
||||
}
|
||||
}
|
||||
|
||||
// DefaultOptions are the default options to be used when using the lightpush protocol
|
||||
func DefaultOptions(host host.Host) []LightPushOption {
|
||||
return []LightPushOption{
|
||||
WithAutomaticRequestId(),
|
||||
|
|
|
@ -279,7 +279,7 @@ func WithPeer(p peer.ID) HistoryRequestOption {
|
|||
}
|
||||
}
|
||||
|
||||
// WithAutomaticPeerSelection is an option used to randomly select a peer from the store
|
||||
// WithAutomaticPeerSelection is an option used to randomly select a peer from the peer store
|
||||
// to request the message history
|
||||
func WithAutomaticPeerSelection() HistoryRequestOption {
|
||||
return func(params *HistoryRequestParameters) {
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"github.com/libp2p/go-libp2p-core/crypto"
|
||||
)
|
||||
|
||||
// EcdsaPubKeyToSecp256k1PublicKey converts an `ecdsa.PublicKey` into a libp2p `crypto.Secp256k1PublicKey``
|
||||
func EcdsaPubKeyToSecp256k1PublicKey(pubKey *ecdsa.PublicKey) *crypto.Secp256k1PublicKey {
|
||||
xFieldVal := &btcec.FieldVal{}
|
||||
yFieldVal := &btcec.FieldVal{}
|
||||
|
@ -15,6 +16,7 @@ func EcdsaPubKeyToSecp256k1PublicKey(pubKey *ecdsa.PublicKey) *crypto.Secp256k1P
|
|||
return (*crypto.Secp256k1PublicKey)(btcec.NewPublicKey(xFieldVal, yFieldVal))
|
||||
}
|
||||
|
||||
// EcdsaPubKeyToSecp256k1PublicKey converts an `ecdsa.PrivateKey` into a libp2p `crypto.Secp256k1PrivateKey``
|
||||
func EcdsaPrivKeyToSecp256k1PrivKey(privKey *ecdsa.PrivateKey) *crypto.Secp256k1PrivateKey {
|
||||
privK, _ := btcec.PrivKeyFromBytes(privKey.D.Bytes())
|
||||
return (*crypto.Secp256k1PrivateKey)(privK)
|
||||
|
|
|
@ -206,6 +206,7 @@ func Multiaddress(node *enode.Node) ([]ma.Multiaddr, error) {
|
|||
return result, nil
|
||||
}
|
||||
|
||||
// EnodeToPeerInfo extracts the peer ID and multiaddresses defined in an ENR
|
||||
func EnodeToPeerInfo(node *enode.Node) (*peer.AddrInfo, error) {
|
||||
addresses, err := Multiaddress(node)
|
||||
if err != nil {
|
||||
|
@ -218,5 +219,4 @@ func EnodeToPeerInfo(node *enode.Node) (*peer.AddrInfo, error) {
|
|||
}
|
||||
|
||||
return &res[0], nil
|
||||
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ func Logger() *zap.Logger {
|
|||
return log
|
||||
}
|
||||
|
||||
// InitLogger initializes a global logger using an specific encoding
|
||||
func InitLogger(encoding string) {
|
||||
cfg := zap.Config{
|
||||
Encoding: encoding,
|
||||
|
|
Loading…
Reference in New Issue