RegisterArtist
func(name string, bio string) intRegisterArtist creates or updates the caller's artist profile. Names use Latin letters so look-alike names in other scripts cannot impersonate.
- OID
- 073d14…7a6f:3
RegisterArtist details
CreateArtist
func(kind string, name string, bio string, source string) intCreateArtist adds an unclaimed artist. Admin only. A curated artist has a name and its page at the source (https), shown for attribution. An Audius or Jamendo artist is a pointer: no name or bio, and source is its platform id ("audius-user:\<id>", "jamendo-artist:\<id>"), which also keeps it unique; the app reads its name live from the platform.
- OID
- 073d14…7a6f:5
CreateArtist details
AssignArtist
func(artistID int, owner .uverse.address)AssignArtist hands an unclaimed artist to the wallet that proved it owns the profile (claim checked off-chain). Their tracks then receive tips.
- OID
- 073d14…7a6f:6
AssignArtist details
Follow
func(artistID int)Follow and Unfollow an artist.
- OID
- 073d14…7a6f:7
Follow details
Unfollow
func(artistID int)- OID
- 073d14…7a6f:8
Unfollow details
newArtist
func(t *v1.tx, kind string, name string, bio string, source string, owner .uverse.address) *v1.Artist- OID
- 073d14…7a6f:9
newArtist details
rename
func(t *v1.tx, a *v1.Artist, name string)rename moves the artist to a new name and frees the old one (the caller saves a). A hidden artist keeps its name so it cannot dodge moderation.
- OID
- 073d14…7a6f:10
rename details
ReleaseName
func(name string)ReleaseName frees a reserved name no visible artist is using. Admin only.
- OID
- 073d14…7a6f:11
ReleaseName details
refUser
func(kind string) stringrefUser is the source prefix of a pointer artist's platform id.
- OID
- 073d14…7a6f:12
refUser details
validRef
func(kind string, source string) bool- OID
- 073d14…7a6f:13
validRef details
version
untyped stringValue
"1.0.0"
denom
untyped stringValue
"ugnot"
ugnot
untyped bigintValue
(1000000 <untyped> bigint)
OriginArtist
untyped stringValue
"artist"
OriginCurated
untyped stringValue
"curated"
OriginAudius
untyped stringValue
"audius"
OriginJamendo
untyped stringValue
"jamendo"
minTip
untyped bigint// 0.1 GNOT
Value
(100000 <untyped> bigint)
maxTip
untyped bigint// keeps share math far from overflow
Value
(1000000000000 <untyped> bigint)
maxSplits
untyped bigintValue
(4 <untyped> bigint)
maxSplitPct
untyped bigint// the artist always keeps at least 10%
Value
(90 <untyped> bigint)
earlyBadges
untyped bigintValue
(10 <untyped> bigint)
minDuration
untyped bigintValue
(10 <untyped> bigint)
maxDuration
untyped bigintValue
(1200 <untyped> bigint)
maxPerArtist
untyped bigint// tracks per artist
Value
(500 <untyped> bigint)
maxAlbumTracks
untyped bigintValue
(40 <untyped> bigint)
maxListTracks
untyped bigintValue
(200 <untyped> bigint)
maxUserLists
untyped bigintValue
(50 <untyped> bigint)
maxFollows
untyped bigintValue
(1000 <untyped> bigint)
maxUserReports
untyped bigint// open reports per reporter
Value
(5 <untyped> bigint)
maxTitle
untyped bigint// track, album and playlist titles, in characters
Value
(64 <untyped> bigint)
maxBio
untyped bigint// artist bio
Value
(280 <untyped> bigint)
maxCredits
untyped bigint// a track's credits and a curated import's attribution
Value
(160 <untyped> bigint)
maxReason
untyped bigint// report and moderation reasons
Value
(200 <untyped> bigint)
topSize
untyped bigintValue
(10 <untyped> bigint)
maxSupportPct
untyped bigintValue
(50 <untyped> bigint)
NumGenres
untyped bigintNumGenres is the size of the fixed genre list; genre ids are 1..NumGenres.
Value
(20 <untyped> bigint)
genres
[21]string- OID
- 073d14…7a6f:15
genres details
licenses
[]stringlicenses an artist may pick; curated imports are limited to CC0, BY, BY-SA, BY-NC and BY-NC-SA (no ND, no reserved rights).
- OID
- 073d14…7a6f:17
licenses details
AudiusLicense
untyped stringAudiusLicense is the license id of tracks streamed from Audius.
Value
"Audius-OML"
rightsTerms
untyped stringValue
"I own or control the rights to this recording and its composition, or hold a licence that allows this, and I grant the operator of GnoRadio and its users a worldwide, non-exclusive, royalty-free licence to store, stream, broadcast and display it through Gn"...
self
string// this realm's path
Value
"gno.land/r/nym-alexiscolin000/gnoradio/catalog/v1"
admin
*v0.Role// the moderator; nil when a release before renounced it
- OID
- 073d14…7a6f:262
admin details
init.43
func()- OID
- 073d14…7a6f:20
init.43 details
now
func() int64- OID
- 073d14…7a6f:22
now details
userCaller
func() .uverse.address- OID
- 073d14…7a6f:23
userCaller details
adminAddr
func() .uverse.address- OID
- 073d14…7a6f:24
adminAddr details
syncAdmin
func()syncAdmin adopts the mirror when the previous release changed it after this one's init (during the release's delay).
- OID
- 073d14…7a6f:25
syncAdmin details
onlyAdmin
func()- OID
- 073d14…7a6f:26
onlyAdmin details
noPayment
func()- OID
- 073d14…7a6f:27
noPayment details
paid
func() int64paid returns the ugnot attached to the call; anything else is refused.
- OID
- 073d14…7a6f:28
paid details
emitEvent
func(name string, kv []string)- OID
- 073d14…7a6f:29
emitEvent details
Ready
func()Ready tells the data realm that this release is on chain (see data.Propose). Anyone may call it.
- OID
- 073d14…7a6f:30
Ready details
OfferAdmin
func(to .uverse.address)OfferAdmin offers the admin role to an address (offering it to the admin cancels the offer); AcceptAdmin takes it. Each change is mirrored to the data realm, so the next release keeps the admin.
- OID
- 073d14…7a6f:31
OfferAdmin details
AcceptAdmin
func()- OID
- 073d14…7a6f:32
AcceptAdmin details
RenounceAdmin
func()RenounceAdmin gives the admin role up for good, for this release and the next ones.
- OID
- 073d14…7a6f:33
RenounceAdmin details
Render
func(string) stringRender points gnoweb visitors to the GnoRadio site; a retired release says which realm took over.
- OID
- 073d14…7a6f:34
Render details
Info
func() stringInfo is the catalog's summary for the app: counts, the admin and the realm that writes the catalog now ("current", this one unless retired).
- OID
- 073d14…7a6f:35
Info details
cArtists
untyped string// P((id-1)/chunkSize) -> artist heads (chunk)
Value
"catalog/artists"
cAlists
untyped string// P(artist) -> Rec(track ids, album ids)
Value
"catalog/alists"
cOwners
untyped string// owner address -> artist id
Value
"catalog/owners"
cNames
untyped string// name skeleton -> artist id
Value
"catalog/names"
cTracks
untyped string// P((id-1)/chunkSize) -> track records (chunk)
Value
"catalog/tracks"
cGenres
untyped string// P(genre)/P(id>>9) -> packed track ids
Value
"catalog/genres"
cAlbums
untyped string// P((id-1)/chunkSize) -> album records (chunk)
Value
"catalog/albums"
cPlaylists
untyped string// P(id) -> playlist record
Value
"catalog/playlists"
cUsers
untyped string// address -> Rec(follows, tipped, playlists, reports)
Value
"catalog/users"
cLikes
untyped string// address/P(id>>9) -> packed liked track ids
Value
"catalog/likes"
cTipped
untyped string// address/P(id>>9) -> packed tipped track ids
Value
"catalog/tipped"
cReports
untyped string// P(id) -> report record (open reports only)
Value
"catalog/reports"
cRemoved
untyped string// kind:id -> moderator's reason, "" when its artist hid it
Value
"catalog/removed"
cHosts
untyped string// allowed https host -> "1"
Value
"catalog/hosts"
cMeta
untyped string// "n" -> counts
Value
"catalog/meta"
cTops
untyped string// liked|artists|fans|support -> ranks
Value
"catalog/tops"
cActivity
untyped string// P(0..63) -> activity record (ring, head in meta)
Value
"catalog/activity"
cConfig
untyped string// admin, treasury, goal, bot, gen
Value
"catalog/config"
cSupporters
untyped string// address -> lifetime support
Value
"catalog/supporters"
cMonthly
untyped string// YYYY-MM -> support that month
Value
"catalog/monthly"
cPromo
untyped string// P(artist) -> promo percent
Value
"catalog/promo"
cBudgets
untyped string// P(artist) -> sponsored-pick settings and stats
Value
"catalog/budgets"
cWalletDay
untyped string// address -> day|artist ids sponsored that day
Value
"catalog/walletday"
cClaims
untyped string// P(artist) -> pending claim
Value
"catalog/claims"
cProofs
untyped string// P(artist) -> proof URL of the last finalized claim
Value
"catalog/proofs"
collections
[]string- OID
- 073d14…7a6f:37
collections details
chunkSize
untyped bigint// records per key of the chunked collections; tickets/nft reads artists with it: frozen
Value
(8 <untyped> bigint)
maxRec
untyped bigint// longest artist, track or album record when written by its author
Value
(1500 <untyped> bigint)
idRange
untyped bigint// likes, tips and genres are kept per range of 1\<\<idRange track ids
Value
(9 <untyped> bigint)
activitySize
untyped bigintValue
(64 <untyped> bigint)
setup
func(holder .uverse.address)setup makes the catalog's collections and its first settings, once: a later release finds them made (it is not the writer in its init).
- OID
- 073d14…7a6f:38
setup details
tx
typetx reads each key from the data realm once and writes every key it changed once, in one call (data.Set or data.Batch). Every entrypoint loads what it needs, changes it in its tx, then saves; readers use one too, so a chunk is decoded once per call. A tx is never stored.
Value
v1.tx
entry
typeValue
v1.entry
rd
func() *v1.tx- OID
- 073d14…7a6f:40
rd details
save
func(t *v1.tx)save writes what t changed: one data.Set or data.Remove, or Batches of 64 ops (a bulk ResolveReports may change more keys than one Batch takes; the transaction keeps them atomic, as in radio).
- OID
- 073d14…7a6f:41
save details
point
func(c string, id int) stringpoint is tx.rec without a tx, for the getters that read one or two records: no tx to build for a call the radio makes in loops.
- OID
- 073d14…7a6f:42
point details
artistAt
func(id int, f int) stringartistAt is field f of an artist's record, "" when unknown (point).
- OID
- 073d14…7a6f:43
artistAt details
fits
func(rec string) stringfits refuses a record too long for its chunk: chunkSize records, each with room left for its counters and early badges, stay under data's 16 KiB value limit, so one author can never fill a chunk others share.
- OID
- 073d14…7a6f:44
fits details
mTracks
untyped bigintCount fields. A count is read and changed in place (store.Field and store.With): converting numbers costs gas, so nothing decodes the record. Reaching field i walks the i before it: what a publish changes comes first.
Value
(0 <untyped> bigint)
mGenre
untyped bigint// + genre id (1..NumGenres): tracks filed under it
Value
(0 <untyped> bigint)
mArtists
untyped bigintValue
(21 <untyped> bigint)
mAlbums
untyped bigintValue
(22 <untyped> bigint)
mPlaylists
untyped bigintValue
(23 <untyped> bigint)
mReports
untyped bigint// filed
Value
(24 <untyped> bigint)
mOpen
untyped bigint// reports not yet resolved
Value
(25 <untyped> bigint)
mSupporters
untyped bigintValue
(26 <untyped> bigint)
mSupport
untyped bigint// ugnot
Value
(27 <untyped> bigint)
mFields
untyped bigintValue
(28 <untyped> bigint)
newCounts
func() string- OID
- 073d14…7a6f:45
newCounts details
rangeKey
func(prefix string, id int) string- OID
- 073d14…7a6f:46
rangeKey details
rangePage
func(c string, prefix string, offset int, limit int) (ids []int, total int)rangePage reads up to limit ids of a ranged set from offset, highest first, and the set's size, one data.Page per 100 ranges.
- OID
- 073d14…7a6f:47
rangePage details
Activity
typeActivity is one entry of the public activity feed.
Value
v1.Activity
Rank
typeValue
v1.Rank
topLiked
untyped string// track ids by likes
Value
"liked"
topArtists
untyped string// artist ids by tips
Value
"artists"
topFans
untyped string// addresses by tipped
Value
"fans"
topSupport
untyped string// addresses by support
Value
"support"
ranks
func(rec string) []v1.Rank- OID
- 073d14…7a6f:48
ranks details
updateTop
func(list []v1.Rank, k string, v int64) []v1.RankupdateTop keeps a short leaderboard sorted by value, highest first.
- OID
- 073d14…7a6f:49
updateTop details
ints
func(xs []int) string- OID
- 073d14…7a6f:50
ints details
trackJSON
func(id int, rec string, arec string) stringtrackJSON writes track id from its record and its artist's head.
- OID
- 073d14…7a6f:52
trackJSON details
playableRec
func(t *v1.tx, id int) (rec string, arec string)playableRec returns a track's record and its artist's head when both are visible ("" otherwise).
- OID
- 073d14…7a6f:53
playableRec details
TrackJSON
func(id int) stringTrackJSON returns one playable track.
- OID
- 073d14…7a6f:54
TrackJSON details
TracksJSON
func(offset int, limit int) stringTracksJSON pages through playable tracks (newest first), at most 100. Chunks and artist heads are read once per page.
- OID
- 073d14…7a6f:55
TracksJSON details
ArtistJSON
func(id int) string- OID
- 073d14…7a6f:56
ArtistJSON details
artistJSON
func(t *v1.tx, id int, arec string) string- OID
- 073d14…7a6f:57
artistJSON details
albumJSON
func(t *v1.tx, id int) stringalbumJSON writes a visible album ("" when it or its artist is hidden).
- OID
- 073d14…7a6f:58
albumJSON details
AlbumJSON
func(id int) string- OID
- 073d14…7a6f:59
AlbumJSON details
playlistJSON
func(t *v1.tx, id int) stringplaylistJSON writes a visible playlist ("" when hidden or unknown).
- OID
- 073d14…7a6f:60
playlistJSON details
PlaylistJSON
func(id int) string- OID
- 073d14…7a6f:61
PlaylistJSON details
UserJSON
func(addr .uverse.address) stringUserJSON returns a listener's public counters (likes are paged with LikesJSON).
- OID
- 073d14…7a6f:62
UserJSON details
LikesJSON
func(addr .uverse.address, offset int, limit int) string- OID
- 073d14…7a6f:63
LikesJSON details
GenresJSON
func() string- OID
- 073d14…7a6f:64
GenresJSON details
maxBatch
untyped bigintmaxBatch caps the batched readers, so one query stays far below the qeval budget.
Value
(100 <untyped> bigint)
batch
func(key string, total int, offset int, limit int, one func(...)) stringbatch writes {"total":n,"\<key>":\[...]} for ids offset+1..offset+limit, skipping hidden items; one query replaces up to 100 single reads.
- OID
- 073d14…7a6f:65
batch details
ArtistsJSON
func(offset int, limit int) stringArtistsJSON returns visible artists with ids offset+1..offset+limit (at most 100).
- OID
- 073d14…7a6f:66
ArtistsJSON details
AlbumsJSON
func(offset int, limit int) stringAlbumsJSON returns visible albums with ids offset+1..offset+limit (at most 100).
- OID
- 073d14…7a6f:67
AlbumsJSON details
PlaylistsJSON
func(offset int, limit int) stringPlaylistsJSON returns visible playlists with ids offset+1..offset+limit (at most 100).
- OID
- 073d14…7a6f:68
PlaylistsJSON details
Report
func(kind string, target int, reason string)Report flags a track, album, artist or playlist for the moderators (e.g. "broken link", "not the real artist", "copyright").
- OID
- 073d14…7a6f:69
Report details
getReport
func(t *v1.tx, id int) (v1.ReportInfo, bool)- OID
- 073d14…7a6f:71
getReport details
ResolveReport
func(id int)ResolveReport closes a report once handled. Admin only.
- OID
- 073d14…7a6f:72
ResolveReport details
ResolveReports
func(from int, count int)ResolveReports closes the open reports with ids from..from+count-1 (count 1-50) in one transaction, e.g. a run of spam reports; ids already closed are skipped. There is no global cap on open reports, so spam never blocks an honest reporter: each wallet keeps at most 5 open. Admin only.
- OID
- 073d14…7a6f:73
ResolveReports details
resolve
func(t *v1.tx, id int) boolresolve closes one report, false when there is no such open report.
- OID
- 073d14…7a6f:74
resolve details
HideTrack
func(trackID int, hidden bool, reason string)Hide or restore content. Admin only; hiding takes a public reason (4-200 characters) and restoring works on anything, whoever hid it. Hidden content stays on-chain (and on IPFS); it is no longer listed, played or tippable. Radio stations drop a hidden track on their next Refresh (radio.RefreshArtist for a whole artist).
- OID
- 073d14…7a6f:75
HideTrack details
HideAlbum
func(albumID int, hidden bool, reason string)- OID
- 073d14…7a6f:76
HideAlbum details
HideArtist
func(artistID int, hidden bool, reason string)- OID
- 073d14…7a6f:77
HideArtist details
HidePlaylist
func(playlistID int, hidden bool, reason string)- OID
- 073d14…7a6f:78
HidePlaylist details
moderate
func(t *v1.tx, kind string, id int, hidden bool, reason string)moderate records the moderator's public reason and saves t.
- OID
- 073d14…7a6f:79
moderate details
mark
func(t *v1.tx, kind string, id int, hidden bool, reason string)mark records the moderator's public reason for one item (the caller saves).
- OID
- 073d14…7a6f:80
mark details
maxHideBatch
untyped bigintmaxHideBatch bounds HideSource: 2 writes per artist.
Value
(50 <untyped> bigint)
HideSource
func(kind string, from int, count int, reason string) intHideSource hides every artist read from a platform ("audius" or "jamendo"), and so all their tracks, for a platform that ends GnoRadio's API access. It walks artist ids from \`from\`, count (1-50) at a time, and returns where to go on (0 once past the last artist). One artist opting out is a HideArtist. Admin only.
- OID
- 073d14…7a6f:81
HideSource details
HideOwn
func(kind string, id int, hidden bool)HideOwn hides or shows again the caller's own track, album or artist profile ("artist", with the profile's id). The artist can show again only what they hid themselves: what the moderator hid stays hidden.
- OID
- 073d14…7a6f:82
HideOwn details
mustToggle
func(was bool, hidden bool)- OID
- 073d14…7a6f:83
mustToggle details
Verify
func(artistID int, verified bool)Verify marks an artist whose identity was checked off-chain.
- OID
- 073d14…7a6f:85
Verify details
AllowHost
func(host string, allowed bool)AllowHost adds or removes an https host that audio and covers may use.
- OID
- 073d14…7a6f:86
AllowHost details
defaultPromoPct
untyped bigintValue
(0 <untyped> bigint)
maxPromoPct
untyped bigintValue
(20 <untyped> bigint)
SetPromoShare
func(pct int)SetPromoShare sets the percent of each tip on the caller's tracks that goes to the picker and the referrer (0..20).
- OID
- 073d14…7a6f:87
SetPromoShare details
PromoShare
func(artistID int) intPromoShare returns an artist's promo percent.
- OID
- 073d14…7a6f:89
PromoShare details
promoShare
func(t *v1.tx, artistID int) int- OID
- 073d14…7a6f:90
promoShare details
RadioTip
func(trackID int, supportPct int, tipper .uverse.address, picker .uverse.address, ref .uverse.address, total int64) (toPicker int64, toRef int64)RadioTip pays a tip the radio realm received for the listener tipper (radio.TipOnAir): the radio has already forwarded total ugnot to this realm and names the picker of the slot on air. Only the radio writer may call it. It returns what the picker and the referrer received.
- OID
- 073d14…7a6f:91
RadioTip details
onlyRadio
func()onlyRadio admits the radio realm the data realm names as radio writer now, unless the radio role is paused: a paused radio moves no coins through the catalog either.
- OID
- 073d14…7a6f:92
onlyRadio details
promoShares
func(amt int64, pct int, picker .uverse.address, ref .uverse.address) (toPicker int64, toRef int64)promoShares splits an artist-side amount's promo share between the picker and the referrer still eligible ("" when not): half each, the odd ugnot to the picker, all of it to one alone.
- OID
- 073d14…7a6f:93
promoShares details
GenreName
func(g int) string- OID
- 073d14…7a6f:94
GenreName details
TrackCount
func() int- OID
- 073d14…7a6f:96
TrackCount details
ArtistCount
func() int- OID
- 073d14…7a6f:97
ArtistCount details
AlbumCount
func() int- OID
- 073d14…7a6f:98
AlbumCount details
PlaylistCount
func() int- OID
- 073d14…7a6f:99
PlaylistCount details
TrackBrief
func(id int) (artistID int, genre int, duration int64, playable_ bool)TrackBrief is what the radio needs; playable is false for an unknown or hidden track, or one whose artist is hidden.
- OID
- 073d14…7a6f:100
TrackBrief details
TrackBriefFor
func(id int, addr .uverse.address) (artistID int, genre int, duration int64, playable_ bool, own bool)TrackBriefFor is TrackBrief and whether addr ("" for nobody) is the track's artist or one of its collaborators, from the same reads.
- OID
- 073d14…7a6f:101
TrackBriefFor details
PlayableTitle
func(id int) stringPlayableTitle is a track's title, "" unless it is playable (TrackBrief).
- OID
- 073d14…7a6f:102
PlayableTitle details
TrackTitle
func(id int) string- OID
- 073d14…7a6f:103
TrackTitle details
ArtistName
func(artistID int) string- OID
- 073d14…7a6f:104
ArtistName details
ArtistOwner
func(artistID int) .uverse.address- OID
- 073d14…7a6f:105
ArtistOwner details
ArtistOf
func(owner .uverse.address) int- OID
- 073d14…7a6f:106
ArtistOf details
ArtistPayee
func(id int) (owner .uverse.address, verified bool, visible bool)- OID
- 073d14…7a6f:107
ArtistPayee details
ArtistVisible
func(artistID int) bool- OID
- 073d14…7a6f:108
ArtistVisible details
GetTrack
func(id int) (v1.Track, bool)GetTrack returns a copy of a track; ok is false if unknown. A pointer's empty title reads as its platform ("Audius track").
- OID
- 073d14…7a6f:109
GetTrack details
GetArtist
func(id int) (v1.Artist, bool)- OID
- 073d14…7a6f:110
GetArtist details
ArtistByRef
func(ref string) intArtistByRef looks a pointer artist up by its platform id ("audius-user:12").
- OID
- 073d14…7a6f:111
ArtistByRef details
ArtistByName
func(name string) intArtistByName looks a profile up by its (case-insensitive) name.
- OID
- 073d14…7a6f:112
ArtistByName details
GetAlbum
func(id int) (v1.Album, bool)- OID
- 073d14…7a6f:113
GetAlbum details
GetPlaylist
func(id int) (v1.Playlist, bool)- OID
- 073d14…7a6f:114
GetPlaylist details
ReportCount
func() intReportCount is the number of open (unresolved) reports.
- OID
- 073d14…7a6f:115
ReportCount details
GetReport
func(id int) (v1.ReportInfo, bool)- OID
- 073d14…7a6f:116
GetReport details
UserStats
func(addr .uverse.address) (likes int, follows int, tipped int64, lists []int)UserStats returns a listener's public counters and playlists. The like count reads the listener's own like ranges, one page.
- OID
- 073d14…7a6f:117
UserStats details
LikedPage
func(addr .uverse.address, offset int, limit int) []intLikedPage lists a listener's liked track ids, newest tracks first, paginated. Likes are keyed by track id, so this is the newest music the listener liked, not the order of their likes (that needs an index per like, which would add to every like's storage deposit).
- OID
- 073d14…7a6f:118
LikedPage details
ArtistTrackCount
func(artistID int) intArtistTrackCount is the number of tracks an artist published.
- OID
- 073d14…7a6f:119
ArtistTrackCount details
ArtistTrackPage
func(artistID int, offset int, limit int) []intArtistTrackPage lists an artist's track ids in publishing order, paginated.
- OID
- 073d14…7a6f:120
ArtistTrackPage details
ArtistBrief
func(artistID int) (name string, verified bool, hidden bool, ok bool)ArtistBrief returns what a link to an artist needs, without the bio or the id lists; ok is false for an unknown artist.
- OID
- 073d14…7a6f:121
ArtistBrief details
PlaylistBrief
func(id int) (owner .uverse.address, title string, tracks int, hidden bool, ok bool)PlaylistBrief returns a playlist's header without its track ids.
- OID
- 073d14…7a6f:122
PlaylistBrief details
FollowsPage
func(addr .uverse.address, offset int, limit int) []intFollowsPage lists the artist ids a listener follows, paginated.
- OID
- 073d14…7a6f:123
FollowsPage details
GenrePage
func(genre int, offset int, limit int) []intGenrePage lists the track ids of a genre (hidden ones included), newest first.
- OID
- 073d14…7a6f:124
GenrePage details
GenreCount
func(genre int) intGenreCount is the number of tracks filed under a genre.
- OID
- 073d14…7a6f:125
GenreCount details
TrackPage
func(offset int, limit int, newest bool) []intTrackPage lists track ids, newest first when newest is true. Ids are dense (1..count), so these pages are arithmetic.
- OID
- 073d14…7a6f:126
TrackPage details
ArtistPage
func(offset int, limit int) []int- OID
- 073d14…7a6f:127
ArtistPage details
AlbumPage
func(offset int, limit int) []int- OID
- 073d14…7a6f:128
AlbumPage details
PlaylistPage
func(offset int, limit int) []int- OID
- 073d14…7a6f:129
PlaylistPage details
ReportPage
func(offset int, limit int) []intReportPage lists open report ids, newest first.
- OID
- 073d14…7a6f:130
ReportPage details
seqPage
func(n int, offset int, limit int, newest bool) []int- OID
- 073d14…7a6f:131
seqPage details
max0
func(n int) int- OID
- 073d14…7a6f:132
max0 details
TopLiked
func() []v1.Rank- OID
- 073d14…7a6f:133
TopLiked details
TopArtists
func() []v1.Rank- OID
- 073d14…7a6f:134
TopArtists details
TopFans
func() []v1.Rank- OID
- 073d14…7a6f:135
TopFans details
Admin
func() .uverse.address- OID
- 073d14…7a6f:136
Admin details
PendingAdmin
func() .uverse.address- OID
- 073d14…7a6f:137
PendingAdmin details
Version
func() string- OID
- 073d14…7a6f:138
Version details
RightsTerms
func() string- OID
- 073d14…7a6f:139
RightsTerms details
HostAllowed
func(h string) bool- OID
- 073d14…7a6f:140
HostAllowed details
Split
typeValue
v1.Split
Artist
typeValue
v1.Artist
Track
typeValue
v1.Track
Album
typeValue
v1.Album
Playlist
typeValue
v1.Playlist
User
typeUser is what a listener writes, so a follow only touches that listener's own record. Follows are a sorted packed list (9 bytes each); likes and the tipped tracks live apart, per range of 512 track ids.
Value
v1.User
ReportInfo
typeValue
v1.ReportInfo
fArtist
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(0 <untyped> bigint)
fGenre
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(1 <untyped> bigint)
fDuration
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(2 <untyped> bigint)
fLikes
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(4 <untyped> bigint)
fEarly
untyped bigint// first listeners to like it, comma-joined
Value
(5 <untyped> bigint)
fTips
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(6 <untyped> bigint)
fSupporters
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(7 <untyped> bigint)
fAlbum
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(8 <untyped> bigint)
fCreated
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(9 <untyped> bigint)
fOrigin
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(10 <untyped> bigint)
fTitle
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(11 <untyped> bigint)
fLicense
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(12 <untyped> bigint)
fCMO
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(13 <untyped> bigint)
fCredits
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(14 <untyped> bigint)
fAudio
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(15 <untyped> bigint)
fAudioSHA
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(16 <untyped> bigint)
fCover
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(17 <untyped> bigint)
fCoverSHA
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(18 <untyped> bigint)
fSource
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(19 <untyped> bigint)
fAttribution
untyped bigintTrack record fields. Reading or replacing field i walks the i fields before it, so the fields the frequent actions read and change come first.
Value
(20 <untyped> bigint)
fSplits
untyped bigint// "addr:pct,…"
Value
(21 <untyped> bigint)
getTrack
func(t *v1.tx, id int) *v1.Track- OID
- 073d14…7a6f:141
getTrack details
trackRecord
func(tr *v1.Track) string- OID
- 073d14…7a6f:143
trackRecord details
putTrack
func(t *v1.tx, tr *v1.Track)- OID
- 073d14…7a6f:144
putTrack details
brief
func(t *v1.tx, id int) (artist int, genre int, dur int64, hidden bool, ok bool)brief reads only what playback needs, without decoding the whole track.
- OID
- 073d14…7a6f:145
brief details
aOwner
untyped bigintArtist head fields, in the same spirit: what tips and follows read and change first. The permanent tickets/nft realm reads aHidden and aName (and chunkSize) straight from the data realm: no release may move them.
Value
(1 <untyped> bigint)
aVerified
untyped bigintArtist head fields, in the same spirit: what tips and follows read and change first. The permanent tickets/nft realm reads aHidden and aName (and chunkSize) straight from the data realm: no release may move them.
Value
(2 <untyped> bigint)
aTips
untyped bigintArtist head fields, in the same spirit: what tips and follows read and change first. The permanent tickets/nft realm reads aHidden and aName (and chunkSize) straight from the data realm: no release may move them.
Value
(3 <untyped> bigint)
aFollowers
untyped bigintArtist head fields, in the same spirit: what tips and follows read and change first. The permanent tickets/nft realm reads aHidden and aName (and chunkSize) straight from the data realm: no release may move them.
Value
(4 <untyped> bigint)
aKind
untyped bigintArtist head fields, in the same spirit: what tips and follows read and change first. The permanent tickets/nft realm reads aHidden and aName (and chunkSize) straight from the data realm: no release may move them.
Value
(5 <untyped> bigint)
aName
untyped bigintArtist head fields, in the same spirit: what tips and follows read and change first. The permanent tickets/nft realm reads aHidden and aName (and chunkSize) straight from the data realm: no release may move them.
Value
(6 <untyped> bigint)
aBio
untyped bigintArtist head fields, in the same spirit: what tips and follows read and change first. The permanent tickets/nft realm reads aHidden and aName (and chunkSize) straight from the data realm: no release may move them.
Value
(7 <untyped> bigint)
aSource
untyped bigintArtist head fields, in the same spirit: what tips and follows read and change first. The permanent tickets/nft realm reads aHidden and aName (and chunkSize) straight from the data realm: no release may move them.
Value
(8 <untyped> bigint)
aJoined
untyped bigintArtist head fields, in the same spirit: what tips and follows read and change first. The permanent tickets/nft realm reads aHidden and aName (and chunkSize) straight from the data realm: no release may move them.
Value
(9 <untyped> bigint)
getArtist
func(t *v1.tx, id int) *v1.ArtistgetArtist returns an artist's head; Tracks and Albums stay empty (see withLists).
- OID
- 073d14…7a6f:146
getArtist details
artistRecord
func(a *v1.Artist) string- OID
- 073d14…7a6f:147
artistRecord details
putArtist
func(t *v1.tx, a *v1.Artist)- OID
- 073d14…7a6f:148
putArtist details
artistField
func(t *v1.tx, id int, i int) stringartistField reads one field of the head ("" for an unknown artist).
- OID
- 073d14…7a6f:149
artistField details
artistVisible
func(t *v1.tx, id int) bool- OID
- 073d14…7a6f:150
artistVisible details
lists
func(t *v1.tx, artistID int) (trackIDs string, albumIDs string)lists returns an artist's track and album id lists (made at its first publish).
- OID
- 073d14…7a6f:151
lists details
setLists
func(t *v1.tx, artistID int, trackIDs string, albumIDs string)- OID
- 073d14…7a6f:152
setLists details
withLists
func(t *v1.tx, a *v1.Artist) *v1.ArtistwithLists fills an artist head's Tracks and Albums.
- OID
- 073d14…7a6f:153
withLists details
artistOf
func(t *v1.tx, owner .uverse.address) int- OID
- 073d14…7a6f:154
artistOf details
getAlbum
func(t *v1.tx, id int) *v1.Album- OID
- 073d14…7a6f:155
getAlbum details
albumRecord
func(al *v1.Album) string- OID
- 073d14…7a6f:156
albumRecord details
putAlbum
func(t *v1.tx, al *v1.Album)- OID
- 073d14…7a6f:157
putAlbum details
getPlaylist
func(t *v1.tx, id int) *v1.Playlist- OID
- 073d14…7a6f:158
getPlaylist details
putPlaylist
func(t *v1.tx, p *v1.Playlist)- OID
- 073d14…7a6f:159
putPlaylist details
user
func(t *v1.tx, addr .uverse.address) *v1.Useruser returns a listener's record (an empty one if none); save it with putUser.
- OID
- 073d14…7a6f:160
user details
putUser
func(t *v1.tx, addr .uverse.address, u *v1.User)- OID
- 073d14…7a6f:161
putUser details
visibleArtist
func(a *v1.Artist) bool- OID
- 073d14…7a6f:162
visibleArtist details
playable
func(t *v1.tx, tr *v1.Track) bool- OID
- 073d14…7a6f:163
playable details
mustArtist
func(t *v1.tx, id int) *v1.Artist- OID
- 073d14…7a6f:164
mustArtist details
mustTrack
func(t *v1.tx, id int) *v1.Track- OID
- 073d14…7a6f:165
mustTrack details
ownArtist
func(t *v1.tx, caller .uverse.address) (int, string)ownArtist returns the caller's visible artist profile: its id and head.
- OID
- 073d14…7a6f:166
ownArtist details
mayEdit
func(caller .uverse.address, a *v1.Artist) boolmayEdit reports whether caller manages artist a: its owner, or the admin while the artist is unclaimed.
- OID
- 073d14…7a6f:167
mayEdit details
Like
func(trackID int)Like records a public like. The first listeners to like a track earn its early-listener badge. (Saving a track privately is done in the app, free.)
- OID
- 073d14…7a6f:168
Like details
hasEarly
func(list string, a .uverse.address) boolhasEarly reports whether a comma-joined address list holds a (addresses share one length, so this compares slices instead of scanning bytes).
- OID
- 073d14…7a6f:170
hasEarly details
dropEarly
func(list string, a .uverse.address) stringdropEarly takes a out of a comma-joined address list.
- OID
- 073d14…7a6f:171
dropEarly details
Unlike
func(trackID int)Unlike takes a like back, and its early-listener badge with it.
- OID
- 073d14…7a6f:172
Unlike details
Tip
func(trackID int)Tip forwards the attached ugnot to the track's artist and collaborators, split as declared at publish time, in this same transaction. Only verified artists receive tips (verify.gno). Verification proves control of a web host or an Audius account, not who the artist is: the proof host is public next to every ✓ (ProofHost), and the 72 h claim window (PendingClaims) is there to catch an impersonator before tips open.
- OID
- 073d14…7a6f:173
Tip details
TipWithSupport
func(trackID int, supportPct int)TipWithSupport is Tip plus an optional contribution to GnoRadio: of the attached total T, the artist side receives T\*100/(100+supportPct) (split as in Tip) and the rest goes to the GnoRadio treasury. supportPct is 0..50.
- OID
- 073d14…7a6f:174
TipWithSupport details
tip
func(caller .uverse.address, total int64, trackID int, supportPct int, picker .uverse.address, ref .uverse.address) (toPicker int64, toRef int64)tip pays total from this realm's balance for caller. The artist's promo share (promo.gno) of the artist side goes to picker and ref, when given and neither the tipper nor the artist, and only when the tipper did not pick the track themselves; collaborators split what is left.
- OID
- 073d14…7a6f:175
tip details
CreateAlbum
func(artistID int, title string, cover string, coverSHA string, year int, trackIDs string) intCreateAlbum groups tracks of one artist. The artist (or the admin for an unclaimed artist) creates it; trackIDs is "12,13,14" in play order.
- OID
- 073d14…7a6f:176
CreateAlbum details
PublishPlaylist
func(title string, trackIDs string) intPublishPlaylist makes a public playlist in one signature; trackIDs is "12,40,7". Private playlists live in the app and cost nothing.
- OID
- 073d14…7a6f:177
PublishPlaylist details
UpdatePlaylist
func(playlistID int, title string, trackIDs string)UpdatePlaylist replaces a playlist's title and tracks. Owner only.
- OID
- 073d14…7a6f:178
UpdatePlaylist details
checkedIDs
func(t *v1.tx, s string) []intcheckedIDs parses a playlist's track ids. Only the id range and duplicates are checked: loading every track would cost a read per id, and hidden or removed tracks are skipped when the playlist is read.
- OID
- 073d14…7a6f:179
checkedIDs details
defaultPickPay
untyped bigint// ugnot per aired sponsored pick, 0.2 GNOT: the pick and its collect (above)
Value
(200000 <untyped> bigint)
minPickPay
untyped bigintValue
(10000 <untyped> bigint)
maxPickPay
untyped bigint// room for dearer gas, still a refund, never a wage
Value
(500000 <untyped> bigint)
maxPickPerDay
untyped bigint// the artist's own daily limit
Value
(100 <untyped> bigint)
defaultPerDay
untyped bigint// the daily limit unless the artist sets one (0 = this default): a farming script drains a budget slowly
Value
(10 <untyped> bigint)
walletPicksDay
untyped bigint// sponsored picks per listener per UTC day, one per artist
Value
(3 <untyped> bigint)
claimDays
untyped bigint// a reservation lapses this long after the slot ends
Value
(7 <untyped> bigint)
daySecs
untyped bigintValue
(86400 <untyped> bigint)
dataPath
untyped stringdataPath is the data realm: its address holds the vault's coins.
Value
"gno.land/r/nym-alexiscolin000/gnoradio/data"
budget
typeValue
v1.budget
acct
func(artistID int) stringacct is an artist's vault account.
- OID
- 073d14…7a6f:180
acct details
getBudget
func(t *v1.tx, artistID int) (v1.budget, bool)- OID
- 073d14…7a6f:182
getBudget details
putBudget
func(t *v1.tx, artistID int, b v1.budget)- OID
- 073d14…7a6f:183
putBudget details
today
func() int64- OID
- 073d14…7a6f:184
today details
lapseDay
func(end int64) int64lapseDay is the last UTC day a pick ending at end can be paid.
- OID
- 073d14…7a6f:185
lapseDay details
FundPromo
func()FundPromo adds the attached ugnot to the caller's sponsored-pick budget in the vault. A new budget pays defaultPickPay per aired pick (SetPromoPay changes it). If the profile changed hands since the last funding, the previous funder gets their whole balance back first, reservations included, and the budget starts a new funding generation. The caller's budget must then hold at least one refund, or no pick could ever use it.
- OID
- 073d14…7a6f:186
FundPromo details
SetPromoPay
func(ugnotPerPick int64, perDay int)SetPromoPay sets what each aired sponsored pick of the caller's tracks refunds (10 000..500 000 ugnot, 0 pauses) and the daily limit (1 to 100, 0 = the default, 10).
- OID
- 073d14…7a6f:187
SetPromoPay details
PromoReserve
func(trackID int, picker .uverse.address, end int64) (int64, int)PromoReserve reserves the refund of a sponsored pick of trackID by picker whose slot ends at end. Only the radio realm may call it (radio.QueueSponsored); it panics with the reason when the pick cannot be sponsored. It returns the amount reserved and the budget's funding generation, which the radio passes back to PromoClaim, PromoClaimable and PromoRelease.
- OID
- 073d14…7a6f:188
PromoReserve details
PromoClaim
func(trackID int, picker .uverse.address, end int64, amount int64, gen int)PromoClaim pays picker a reservation of funding generation gen once their sponsored pick ending at end has aired; the radio realm checks the slot. A lapsed or cancelled reservation (the budget was refunded since) pays nothing.
- OID
- 073d14…7a6f:189
PromoClaim details
PromoClaimable
func(trackID int, end int64, amount int64, gen int) boolPromoClaimable reports whether PromoClaim would pay a sponsored pick's refund: reserved for end in generation gen, neither lapsed nor cancelled.
- OID
- 073d14…7a6f:190
PromoClaimable details
PromoRelease
func(trackID int, picker .uverse.address, end int64, amount int64, reserved int64, gen int)PromoRelease returns a reservation to its budget: the slot was dropped or cut before it aired in full. A reservation of an earlier funding generation than gen's budget was refunded with it: nothing to release. A pick that never aired, reserved at reserved (unix; 0 when it partly aired), also gives back the daily counts it took, the artist's and picker's, if that was today. Radio realm only.
- OID
- 073d14…7a6f:191
PromoRelease details
PromoOffer
func(artistID int) int64PromoOffer is what a sponsored pick of the artist's tracks refunds right now (0: none). Picker-specific limits are checked when picking.
- OID
- 073d14…7a6f:192
PromoOffer details
offer
func(t *v1.tx, a *v1.Artist) int64- OID
- 073d14…7a6f:193
offer details
PromoJSON
func(artistID int) stringPromoJSON is an artist's sponsored-pick budget: {"artist","funder","balance","reserved","free","pay","perDay","today","funded","paid","picks","offer"}. The funder withdraws "free" with data.VaultWithdraw(acct) where acct is "catalog/" and the artist id on 8 digits.
- OID
- 073d14…7a6f:194
PromoJSON details
SupportGnoRadio
func()SupportGnoRadio sends the attached ugnot to the GnoRadio treasury.
- OID
- 073d14…7a6f:195
SupportGnoRadio details
SetTreasury
func(to .uverse.address)SetTreasury changes where GnoRadio's support goes; "" (the default) takes none. Admin only.
- OID
- 073d14…7a6f:197
SetTreasury details
SetMonthlyGoal
func(ugnot int64)SetMonthlyGoal sets the monthly support goal shown in the app (ugnot). Admin only.
- OID
- 073d14…7a6f:198
SetMonthlyGoal details
treasury
func(t *v1.tx) .uverse.address- OID
- 073d14…7a6f:199
treasury details
Treasury
func() .uverse.address- OID
- 073d14…7a6f:200
Treasury details
SupportInfo
func() (to .uverse.address, total int64, supporters int, monthTotal int64, goal int64)- OID
- 073d14…7a6f:201
SupportInfo details
recordSupport
func(t *v1.tx, by .uverse.address, amt int64)- OID
- 073d14…7a6f:202
recordSupport details
month
func(unix int64) string- OID
- 073d14…7a6f:203
month details
Activities
func(limit int) []v1.ActivityActivities returns up to limit entries, newest first.
- OID
- 073d14…7a6f:204
Activities details
ActivityJSON
func(limit int) stringActivityJSON returns the activity feed, newest first (limit \<= 64).
- OID
- 073d14…7a6f:205
ActivityJSON details
SupportJSON
func() stringSupportJSON returns GnoRadio's public funding state.
- OID
- 073d14…7a6f:206
SupportJSON details
PublishFor
func(caller .uverse.address, title string, genre int, duration string, license string, cmo string, credits string, audio string, audioSHA string, cover string, coverSHA string, splits string, rights string) intPublishFor adds a track by caller's own artist profile. duration is "m:ss"; cmo is "none" or "sacem-nc"; splits is optional, "g1...:30,g1...:15" in percent (the artist keeps at least 10%); rights must be "yes" (the caller accepts RightsTerms). audio and cover are ipfs://, ar:// or https:// links (an allowed host, with the file's sha256).
- OID
- 073d14…7a6f:207
PublishFor details
ImportFor
func(by .uverse.address, artistID int, title string, genre int, duration string, license string, credits string, audio string, audioSHA string, cover string, coverSHA string, sourceURL string, attribution string) intImportFor adds a curated (CC0 / CC BY / CC BY-SA / CC BY-NC / CC BY-NC-SA) track, or a pointer to an Audius or Jamendo track, to an unclaimed artist. by must be the admin. A pointer keeps only what the radio needs (audio "audius:\<id>" or "jamendo:\<id>", genre, duration, licence): title, credits, cover, source and attribution stay empty and the app reads them live from the platform, whose API terms allow session caching only.
- OID
- 073d14…7a6f:209
ImportFor details
EditFor
func(caller .uverse.address, trackID int, title string, genre int, duration string, credits string, audio string, audioSHA string, cover string, coverSHA string)EditFor fixes a track's details. Its artist only (the admin while the artist is unclaimed): caller is who signed.
- OID
- 073d14…7a6f:210
EditFor details
addTrack
func(t *v1.tx, publisher .uverse.address, artistID int, tr *v1.Track) int- OID
- 073d14…7a6f:211
addTrack details
setInfo
func(tr *v1.Track, title string, genre int, duration string, credits string, named bool)setInfo sets a track's text and timing. An Audius or Jamendo pointer stores no title or credits unless named: its claimed artist's owner fills them in. Without that, an edit may keep or clear the stored text (a legacy import), never set new text.
- OID
- 073d14…7a6f:212
setInfo details
refKey
untyped stringrefKey prefixes a pointer's audio in cNames (the '-' keeps it off every name skeleton).
Value
"track-"
isRef
func(origin string) boolisRef reports whether tracks of this origin are pointers: read live from Audius or Jamendo, with no title or credits stored on chain.
- OID
- 073d14…7a6f:213
isRef details
mustRefAudio
func(tr *v1.Track, audio string)mustRefAudio keeps a pointer's audio on its platform ("audius:\<id>", "jamendo:\<id>") and every other track off both.
- OID
- 073d14…7a6f:214
mustRefAudio details
refLabel
func(origin string, stored string, what string) stringrefLabel is what gnoweb shows for a pointer's empty title or name: the platform it is read from ("Audius track", "Jamendo artist").
- OID
- 073d14…7a6f:215
refLabel details
setLicense
func(tr *v1.Track, license string, cmo string)- OID
- 073d14…7a6f:216
setLicense details
setMedia
func(tr *v1.Track, audio string, audioSHA string, cover string, coverSHA string)- OID
- 073d14…7a6f:217
setMedia details
parseSplits
func(s string, artist .uverse.address) []v1.SplitparseSplits reads the collaborators: never the artist, never a GnoRadio realm.
- OID
- 073d14…7a6f:218
parseSplits details
mustText
func(field string, s string, min int, max int)- OID
- 073d14…7a6f:219
mustText details
validName
func(s string) boolvalidName restricts artist names to ASCII letters and digits plus the Latin-1 accented letters, so look-alike names cannot impersonate an artist.
- OID
- 073d14…7a6f:221
validName details
latin1
[64]stringlatin1 folds the Latin-1 letters 0xC0-0xFF (lowercased) to ASCII.
- OID
- 073d14…7a6f:223
latin1 details
skeleton
func(s string) stringskeleton is the key an artist name is reserved under: lowercase, common Latin accents stripped, fullwidth letters and digits mapped to ASCII, spaces and punctuation dropped and look-alikes folded (i/l/1 → l, 0 → o, 3 → e, 4 → a, 5 → s, 7 → t, 9 → g, u → v, rn → m, vv → w, cl → d), so "Beyonce", "BEYONCÉ", "Beyonce", "Daft Punk", "DAFT PUNK", "Kanye Vvest", "Kanye Uuest", "Clrake" and "9orillaz" collide with the real names.
- OID
- 073d14…7a6f:224
skeleton details
confusable
func(s string) stringconfusable folds characters that look alike in common fonts.
- OID
- 073d14…7a6f:225
confusable details
reservedStems
[]stringReserved names, as skeletons: a name holding a stem anywhere, or one of the words as a word, could pass for GnoRadio, its staff, the chain (gno.land folds to gnoland), the wallet (Adena) or the audio source (Audius). Adena and Audius are prefixes, not stems: refused at the start of the name or of any word in it ("AdenaWallet", "Ade-na", "Audius2"), while names that only end with them pass ("Pasadena", "La Cadena", "Claudius").
- OID
- 073d14…7a6f:227
reservedStems details
reservedWords
[]stringReserved names, as skeletons: a name holding a stem anywhere, or one of the words as a word, could pass for GnoRadio, its staff, the chain (gno.land folds to gnoland), the wallet (Adena) or the audio source (Audius). Adena and Audius are prefixes, not stems: refused at the start of the name or of any word in it ("AdenaWallet", "Ade-na", "Audius2"), while names that only end with them pass ("Pasadena", "La Cadena", "Claudius").
- OID
- 073d14…7a6f:229
reservedWords details
reservedPrefixes
[]stringReserved names, as skeletons: a name holding a stem anywhere, or one of the words as a word, could pass for GnoRadio, its staff, the chain (gno.land folds to gnoland), the wallet (Adena) or the audio source (Audius). Adena and Audius are prefixes, not stems: refused at the start of the name or of any word in it ("AdenaWallet", "Ade-na", "Audius2"), while names that only end with them pass ("Pasadena", "La Cadena", "Claudius").
- OID
- 073d14…7a6f:231
reservedPrefixes details
reserved
func(name string) bool- OID
- 073d14…7a6f:232
reserved details
anyWord
func(name string, ok func(...)) boolanyWord reports whether the skeleton of a word of name passes ok.
- OID
- 073d14…7a6f:233
anyWord details
mustName
func(s string)- OID
- 073d14…7a6f:234
mustName details
alnum
func(s string, min int, max int) bool- OID
- 073d14…7a6f:235
alnum details
validHost
func(h string) bool- OID
- 073d14…7a6f:236
validHost details
hostOf
func(url string) stringhostOf is the authority of an https link: up to the first / ? or # (lower case). It is a plain host only when validHost says so.
- OID
- 073d14…7a6f:237
hostOf details
isSHA256
func(s string) bool- OID
- 073d14…7a6f:238
isSHA256 details
mustMedia
func(field string, uri string, sha string, audioField bool)mustMedia checks an audio or cover reference: ipfs://<cid> content-addressed, sha256 optional ar://<txid> Arweave, sha256 optional audius:<trackId> audio only, streamed through the Audius API jamendo:<trackId> audio only, streamed from Jamendo https://<host>/… host must be allowed, sha256 required
- OID
- 073d14…7a6f:239
mustMedia details
normLicense
func(s string) stringnormLicense maps loose input ("cc by", "cc-by-4.0", "CC0") to an SPDX id.
- OID
- 073d14…7a6f:240
normLicense details
parseClock
func(s string) (int64, bool)parseClock parses "m:ss" (or plain seconds) into seconds.
- OID
- 073d14…7a6f:241
parseClock details
parseIDs
func(s string, max int) []intparseIDs parses "12,40,7" into distinct ids, at most max of them.
- OID
- 073d14…7a6f:242
parseIDs details
curatedLicense
func(s string) stringcuratedLicense accepts the redistributable licenses curated imports may carry, in any version and national port: CC0-1.0, CC-BY-\<v>\[-XX], CC-BY-SA-\<v>\[-XX], CC-BY-NC-\<v>\[-XX], CC-BY-NC-SA-\<v>\[-XX] (v = 1.0, 2.0, 2.5, 3.0, 4.0). It returns the normalized id, or "" when the license is not allowed.
- OID
- 073d14…7a6f:243
curatedLicense details
claimDelay
untyped bigint// seconds a claim stays public before it counts
Value
(259200 <untyped> bigint)
certLife
untyped bigint// longest validity of a robot certificate, seconds
Value
(7200 <untyped> bigint)
claim
typeValue
v1.claim
ClaimMessage
func(artistID int, to .uverse.address, proof string, expires int64) stringClaimMessage is what the robot signs: the chain, the GnoRadio deployment (its data realm, so a staging deployment on the same chain cannot reuse a certificate), the profile, the wallet, where the proof was found and until when the certificate holds.
- OID
- 073d14…7a6f:244
ClaimMessage details
botKey
func(t *v1.tx) (key []uint8, gen int)botKey is the robot's Ed25519 public key (empty: verification paused) and gen its generation, bumped by SetBot.
- OID
- 073d14…7a6f:246
botKey details
getClaim
func(t *v1.tx, artistID int) *v1.claim- OID
- 073d14…7a6f:247
getClaim details
liveClaim
func(t *v1.tx, artistID int) *v1.claimliveClaim is the pending claim made with the current robot key, if any.
- OID
- 073d14…7a6f:248
liveClaim details
SetBot
func(pubKeyHex string)SetBot sets the robot's Ed25519 public key, hex ("" disables it). Every pending claim started with the previous key is voided: its artist claims again with a fresh certificate. Admin only.
- OID
- 073d14…7a6f:249
SetBot details
Claim
func(artistID int, proof string, expires int64, sigHex string)Claim starts the verification of artistID for the caller with the robot's certificate (ClaimMessage signed, hex). It replaces any pending claim for the artist and restarts the delay. The artist pays its gas.
- OID
- 073d14…7a6f:250
Claim details
FinalizeClaim
func(artistID int)FinalizeClaim applies a pending claim once claimDelay has passed. Anyone can call it, usually the artist from the app.
- OID
- 073d14…7a6f:251
FinalizeClaim details
CancelClaim
func(artistID int)CancelClaim drops a pending claim (e.g. the proof page was hijacked). Admin only.
- OID
- 073d14…7a6f:252
CancelClaim details
ResetOwner
func(artistID int)ResetOwner undoes a wrong claim on an imported profile (e.g. a hijacked proof page found too late): the profile is unclaimed again. Self-registered profiles keep their owner. Admin only.
- OID
- 073d14…7a6f:253
ResetOwner details
mustRobotVerifiable
func(a *v1.Artist)mustRobotVerifiable refuses the robot's path for a curated profile: it carries a real artist's name and tracks that GnoRadio imported, and no domain proves who that artist is (neither the import site's operator nor any domain an impersonator buys). The moderator assigns it (AssignArtist).
- OID
- 073d14…7a6f:254
mustRobotVerifiable details
mustClaimable
func(t *v1.tx, a *v1.Artist, to .uverse.address)mustClaimable: an unowned profile goes to a wallet without a profile; an owned one can only be verified for its own wallet.
- OID
- 073d14…7a6f:255
mustClaimable details
ArtistVerified
func(artistID int) boolArtistVerified reports whether an artist proved who they are (tips and paid tickets need it).
- OID
- 073d14…7a6f:256
ArtistVerified details
ClaimState
func(artistID int) (pending bool, to .uverse.address, readyAt int64)- OID
- 073d14…7a6f:257
ClaimState details
PendingClaim
typePendingClaim is a verification on its way: the artist, the wallet it goes to, the proof link and when FinalizeClaim may apply it.
Value
v1.PendingClaim
PendingClaims
func(offset int, limit int) (out []v1.PendingClaim, total int)PendingClaims lists up to limit (1-100) verifications pending with the current robot key, by artist id from offset, and how many claims are stored (stale ones included, so offset+limit \< total means more). A claim stays public for 72 hours before it counts: this is where anyone watches them.
- OID
- 073d14…7a6f:258
PendingClaims details
ProofHost
func(artistID int) stringProofHost is where a verified artist's proof was found: a host they control, not proof of who they are, so show it next to the ✓. It is "" when the artist is not verified, or a moderator verified it (Verify, AssignArtist).
- OID
- 073d14…7a6f:259
ProofHost details
proofHost
func(t *v1.tx, artistID int, verified string) string- OID
- 073d14…7a6f:260
proofHost details
ClaimJSON
func(artistID int) stringClaimJSON is the verification state of an artist for the app: {"verified":b,"proof":"…","pending":b,"to":"…","pendingProof":"…","readyAt":n,"bot":"…"}.
- OID
- 073d14…7a6f:261