Skip to content Search Apps Documentation Source Content File Folder Download Copy Actions State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

cla.gno

0.91 Kb · 42 lines
 1package cla
 2
 3import (
 4	"chain"
 5
 6	"gno.land/p/moul/addrset/v0"
 7)
 8
 9const SignedEvent = "CLASigned"
10
11var (
12	requiredHash string // SHA256 hash of the CLA document; empty = enforcement disabled
13	claURL       string // URL where the CLA document can be found
14	signatures   addrset.Set
15)
16
17// Sign records a CLA signature for the caller.
18// The hash must match the current required hash.
19func Sign(cur realm, hash string) {
20	if hash != requiredHash {
21		panic("hash does not match required CLA hash")
22	}
23
24	caller := cur.Previous().Address()
25	signatures.Add(caller)
26
27	chain.Emit(
28		SignedEvent,
29		"signer", caller.String(),
30		"hash", hash,
31	)
32}
33
34// HasValidSignature checks if an address has signed the current required CLA.
35// Returns true if CLA enforcement is disabled (requiredHash == ""),
36// or if the address has signed.
37func HasValidSignature(addr address) bool {
38	if requiredHash == "" {
39		return true
40	}
41	return signatures.Has(addr)
42}