mirror of https://github.com/status-im/go-waku.git
55 lines
2.1 KiB
Go
55 lines
2.1 KiB
Go
//go:build gowaku_rln
|
|
// +build gowaku_rln
|
|
|
|
package node
|
|
|
|
import (
|
|
"crypto/ecdsa"
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/status-im/go-waku/waku/v2/protocol/rln"
|
|
r "github.com/status-im/go-zerokit-rln/rln"
|
|
)
|
|
|
|
// WithStaticRLNRelay enables the Waku V2 RLN protocol in offchain mode
|
|
// Requires the `gowaku_rln` build constrain (or the env variable RLN=true if building go-waku)
|
|
func WithStaticRLNRelay(pubsubTopic string, contentTopic string, memberIndex r.MembershipIndex, spamHandler rln.SpamHandler) WakuNodeOption {
|
|
return func(params *WakuNodeParameters) error {
|
|
params.enableRLN = true
|
|
params.rlnRelayDynamic = false
|
|
params.rlnRelayMemIndex = memberIndex
|
|
params.rlnRelayPubsubTopic = pubsubTopic
|
|
params.rlnRelayContentTopic = contentTopic
|
|
params.rlnSpamHandler = spamHandler
|
|
return nil
|
|
}
|
|
}
|
|
|
|
type MembershipCredentials struct {
|
|
Contract common.Address `json:"contract"`
|
|
Keypair *r.MembershipKeyPair `json:"membershipKeyPair"`
|
|
Index r.MembershipIndex `json:"rlnIndex"`
|
|
}
|
|
|
|
// WithStaticRLNRelay enables the Waku V2 RLN protocol in onchain mode.
|
|
// Requires the `gowaku_rln` build constrain (or the env variable RLN=true if building go-waku)
|
|
func WithDynamicRLNRelay(pubsubTopic string, contentTopic string, membershipCredentials MembershipCredentials, spamHandler rln.SpamHandler, ethClientAddress string, ethPrivateKey *ecdsa.PrivateKey, registrationHandler rln.RegistrationHandler) WakuNodeOption {
|
|
return func(params *WakuNodeParameters) error {
|
|
params.enableRLN = true
|
|
params.rlnRelayDynamic = true
|
|
params.rlnRelayMemIndex = membershipCredentials.Index
|
|
if membershipCredentials.Keypair != nil {
|
|
params.rlnRelayIDKey = &membershipCredentials.Keypair.IDKey
|
|
params.rlnRelayIDCommitment = &membershipCredentials.Keypair.IDCommitment
|
|
}
|
|
params.rlnRelayPubsubTopic = pubsubTopic
|
|
params.rlnRelayContentTopic = contentTopic
|
|
params.rlnSpamHandler = spamHandler
|
|
params.rlnETHClientAddress = ethClientAddress
|
|
params.rlnETHPrivateKey = ethPrivateKey
|
|
params.rlnMembershipContractAddress = membershipCredentials.Contract
|
|
params.rlnRegistrationHandler = registrationHandler
|
|
return nil
|
|
}
|
|
}
|