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

/ratelimit package

Overview

Package ratelimit ports golang.org/x/time/rate (the standard Go token-bucket rate limiter) to an on-chain gno.land realm.

Each caller address owns a token bucket with a fixed capacity (burst) that refills at a steady rate expressed in tokens per block. There is no wall clock on-chain, so runtime.ChainHeight() is the monotonic clock: between two observations at heights `last` and `now`, the bucket gains (now-last)*rate tokens, capped at `burst`. Everything is pure, integer/ float arithmetic over persistent avl state, hence deterministic.

Function

Allow

func Allow(cur realm) bool

Allow consumes one token for the calling realm/user and reports whether the request is permitted. Returns false (and consumes nothing) when the bucket is empty.

Command

# WARNING: This command is running in an INSECURE mode.
# It is strongly recommended to use a hardware device for signing
# and avoid trusting any computer connected to the internet,
# as your private keys could be exposed.

gnokey maketx call -pkgpath "gno.land/r/g12cs4cehujpffpjpywmkqj43m6u5ya53nj69sjz/ratelimit" -func "Allow" -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -chainid "topaz-1" -remote "https://rpc.topaz.testnets.gno.land" ADDRESSgnokey query -remote "https://rpc.topaz.testnets.gno.land" auth/accounts/ADDRESS
gnokey maketx call -pkgpath "gno.land/r/g12cs4cehujpffpjpywmkqj43m6u5ya53nj69sjz/ratelimit" -func "Allow" -gas-fee 1000000ugnot -gas-wanted 1_000_000_000 -send "" -broadcast=false ADDRESS > call.tx
gnokey sign -tx-path call.tx -chainid "topaz-1" -account-number ACCOUNTNUMBER -account-sequence SEQUENCENUMBER ADDRESS
gnokey broadcast -remote "https://rpc.topaz.testnets.gno.land" call.tx