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

v1 state

Back to all declarations

RegisterArtist

func(name string, bio string) int

RegisterArtist creates or updates the caller's artist profile. Names use Latin letters so look-alike names in other scripts cannot impersonate.

Open
OID
073d14…7a6f:3
RegisterArtist details

Inspect func

CreateArtist

func(kind string, name string, bio string, source string) int

CreateArtist 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.

Open
OID
073d14…7a6f:5
CreateArtist details

Inspect func

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.

Open
OID
073d14…7a6f:6
AssignArtist details

Inspect func

Follow

func(artistID int)

Follow and Unfollow an artist.

Open
OID
073d14…7a6f:7
Follow details

Inspect func

newArtist

func(t *v1.tx, kind string, name string, bio string, source string, owner .uverse.address) *v1.Artist
Open
OID
073d14…7a6f:9
newArtist details

Inspect func

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.

Open
OID
073d14…7a6f:10
rename details

Inspect func

ReleaseName

func(name string)

ReleaseName frees a reserved name no visible artist is using. Admin only.

Open
OID
073d14…7a6f:11
ReleaseName details

Inspect func

refUser

func(kind string) string

refUser is the source prefix of a pointer artist's platform id.

Open
OID
073d14…7a6f:12
refUser details

Inspect func

validRef

func(kind string, source string) bool
Open
OID
073d14…7a6f:13
validRef details

Inspect func

version

untyped string

Value

"1.0.0"

denom

untyped string

Value

"ugnot"

ugnot

untyped bigint

Value

(1000000 <untyped> bigint)

OriginArtist

untyped string

Value

"artist"

OriginCurated

untyped string

Value

"curated"

OriginAudius

untyped string

Value

"audius"

OriginJamendo

untyped string

Value

"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 bigint

Value

(4 <untyped> bigint)

maxSplitPct

untyped bigint

// the artist always keeps at least 10%

Value

(90 <untyped> bigint)

earlyBadges

untyped bigint

Value

(10 <untyped> bigint)

minDuration

untyped bigint

Value

(10 <untyped> bigint)

maxDuration

untyped bigint

Value

(1200 <untyped> bigint)

maxPerArtist

untyped bigint

// tracks per artist

Value

(500 <untyped> bigint)

maxAlbumTracks

untyped bigint

Value

(40 <untyped> bigint)

maxListTracks

untyped bigint

Value

(200 <untyped> bigint)

maxUserLists

untyped bigint

Value

(50 <untyped> bigint)

maxFollows

untyped bigint

Value

(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 bigint

Value

(10 <untyped> bigint)

maxSupportPct

untyped bigint

Value

(50 <untyped> bigint)

NumGenres

untyped bigint

NumGenres is the size of the fixed genre list; genre ids are 1..NumGenres.

Value

(20 <untyped> bigint)

licenses

[]string (len=8)

licenses an artist may pick; curated imports are limited to CC0, BY, BY-SA, BY-NC and BY-NC-SA (no ND, no reserved rights).

Open
OID
073d14…7a6f:17
licenses details (len=8)

+8 more Inspect slice

AudiusLicense

untyped string

AudiusLicense is the license id of tracks streamed from Audius.

Value

"Audius-OML"

rightsTerms

untyped string

Value

"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

Open
OID
073d14…7a6f:262
admin details

Inspect pointer

userCaller

func() .uverse.address
Open
OID
073d14…7a6f:23
userCaller details

Inspect func

adminAddr

func() .uverse.address
Open
OID
073d14…7a6f:24
adminAddr details

Inspect func

syncAdmin

func()

syncAdmin adopts the mirror when the previous release changed it after this one's init (during the release's delay).

Open
OID
073d14…7a6f:25
syncAdmin details

Inspect func

paid

func() int64

paid returns the ugnot attached to the call; anything else is refused.

Open
OID
073d14…7a6f:28
paid details

Inspect func

emitEvent

func(name string, kv []string)
Open
OID
073d14…7a6f:29
emitEvent details

Inspect func

Ready

func()

Ready tells the data realm that this release is on chain (see data.Propose). Anyone may call it.

Open
OID
073d14…7a6f:30
Ready details

Inspect func

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.

Open
OID
073d14…7a6f:31
OfferAdmin details

Inspect func

RenounceAdmin

func()

RenounceAdmin gives the admin role up for good, for this release and the next ones.

Open
OID
073d14…7a6f:33
RenounceAdmin details

Inspect func

Render

func(string) string

Render points gnoweb visitors to the GnoRadio site; a retired release says which realm took over.

Open
OID
073d14…7a6f:34
Render details

Inspect func

Info

func() string

Info is the catalog's summary for the app: counts, the admin and the realm that writes the catalog now ("current", this one unless retired).

Open
OID
073d14…7a6f:35
Info details

Inspect func

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"

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 bigint

Value

(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).

Open
OID
073d14…7a6f:38
setup details

Inspect func

tx

type

tx 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

type

Value

v1.entry

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).

Open
OID
073d14…7a6f:41
save details

Inspect func

point

func(c string, id int) string

point 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.

Open
OID
073d14…7a6f:42
point details

Inspect func

artistAt

func(id int, f int) string

artistAt is field f of an artist's record, "" when unknown (point).

Open
OID
073d14…7a6f:43
artistAt details

Inspect func

fits

func(rec string) string

fits 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.

Open
OID
073d14…7a6f:44
fits details

Inspect func

mTracks

untyped bigint

Count 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 bigint

Value

(21 <untyped> bigint)

mAlbums

untyped bigint

Value

(22 <untyped> bigint)

mPlaylists

untyped bigint

Value

(23 <untyped> bigint)

mReports

untyped bigint

// filed

Value

(24 <untyped> bigint)

mOpen

untyped bigint

// reports not yet resolved

Value

(25 <untyped> bigint)

mSupporters

untyped bigint

Value

(26 <untyped> bigint)

mSupport

untyped bigint

// ugnot

Value

(27 <untyped> bigint)

mFields

untyped bigint

Value

(28 <untyped> bigint)

rangeKey

func(prefix string, id int) string
Open
OID
073d14…7a6f:46
rangeKey details

Inspect func

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.

Open
OID
073d14…7a6f:47
rangePage details

Inspect func

Activity

type

Activity is one entry of the public activity feed.

Value

v1.Activity

Rank

type

Value

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"

updateTop

func(list []v1.Rank, k string, v int64) []v1.Rank

updateTop keeps a short leaderboard sorted by value, highest first.

Open
OID
073d14…7a6f:49
updateTop details

Inspect func

trackJSON

func(id int, rec string, arec string) string

trackJSON writes track id from its record and its artist's head.

Open
OID
073d14…7a6f:52
trackJSON details

Inspect func

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).

Open
OID
073d14…7a6f:53
playableRec details

Inspect func

TrackJSON

func(id int) string

TrackJSON returns one playable track.

Open
OID
073d14…7a6f:54
TrackJSON details

Inspect func

TracksJSON

func(offset int, limit int) string

TracksJSON pages through playable tracks (newest first), at most 100. Chunks and artist heads are read once per page.

Open
OID
073d14…7a6f:55
TracksJSON details

Inspect func

ArtistJSON

func(id int) string
Open
OID
073d14…7a6f:56
ArtistJSON details

Inspect func

artistJSON

func(t *v1.tx, id int, arec string) string
Open
OID
073d14…7a6f:57
artistJSON details

Inspect func

albumJSON

func(t *v1.tx, id int) string

albumJSON writes a visible album ("" when it or its artist is hidden).

Open
OID
073d14…7a6f:58
albumJSON details

Inspect func

playlistJSON

func(t *v1.tx, id int) string

playlistJSON writes a visible playlist ("" when hidden or unknown).

Open
OID
073d14…7a6f:60
playlistJSON details

Inspect func

PlaylistJSON

func(id int) string
Open
OID
073d14…7a6f:61
PlaylistJSON details

Inspect func

UserJSON

func(addr .uverse.address) string

UserJSON returns a listener's public counters (likes are paged with LikesJSON).

Open
OID
073d14…7a6f:62
UserJSON details

Inspect func

LikesJSON

func(addr .uverse.address, offset int, limit int) string
Open
OID
073d14…7a6f:63
LikesJSON details

Inspect func

maxBatch

untyped bigint

maxBatch 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(...)) string

batch writes {"total":n,"\<key>":\[...]} for ids offset+1..offset+limit, skipping hidden items; one query replaces up to 100 single reads.

Open
OID
073d14…7a6f:65
batch details

Inspect func

ArtistsJSON

func(offset int, limit int) string

ArtistsJSON returns visible artists with ids offset+1..offset+limit (at most 100).

Open
OID
073d14…7a6f:66
ArtistsJSON details

Inspect func

AlbumsJSON

func(offset int, limit int) string

AlbumsJSON returns visible albums with ids offset+1..offset+limit (at most 100).

Open
OID
073d14…7a6f:67
AlbumsJSON details

Inspect func

PlaylistsJSON

func(offset int, limit int) string

PlaylistsJSON returns visible playlists with ids offset+1..offset+limit (at most 100).

Open
OID
073d14…7a6f:68
PlaylistsJSON details

Inspect func

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").

Open
OID
073d14…7a6f:69
Report details

Inspect func

getReport

func(t *v1.tx, id int) (v1.ReportInfo, bool)
Open
OID
073d14…7a6f:71
getReport details

Inspect func

ResolveReport

func(id int)

ResolveReport closes a report once handled. Admin only.

Open
OID
073d14…7a6f:72
ResolveReport details

Inspect func

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.

Open
OID
073d14…7a6f:73
ResolveReports details

Inspect func

resolve

func(t *v1.tx, id int) bool

resolve closes one report, false when there is no such open report.

Open
OID
073d14…7a6f:74
resolve details

Inspect func

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).

Open
OID
073d14…7a6f:75
HideTrack details

Inspect func

HideAlbum

func(albumID int, hidden bool, reason string)
Open
OID
073d14…7a6f:76
HideAlbum details

Inspect func

HideArtist

func(artistID int, hidden bool, reason string)
Open
OID
073d14…7a6f:77
HideArtist details

Inspect func

HidePlaylist

func(playlistID int, hidden bool, reason string)
Open
OID
073d14…7a6f:78
HidePlaylist details

Inspect func

moderate

func(t *v1.tx, kind string, id int, hidden bool, reason string)

moderate records the moderator's public reason and saves t.

Open
OID
073d14…7a6f:79
moderate details

Inspect func

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).

Open
OID
073d14…7a6f:80
mark details

Inspect func

maxHideBatch

untyped bigint

maxHideBatch bounds HideSource: 2 writes per artist.

Value

(50 <untyped> bigint)

HideSource

func(kind string, from int, count int, reason string) int

HideSource 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.

Open
OID
073d14…7a6f:81
HideSource details

Inspect func

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.

Open
OID
073d14…7a6f:82
HideOwn details

Inspect func

mustToggle

func(was bool, hidden bool)
Open
OID
073d14…7a6f:83
mustToggle details

Inspect func

HiddenNote

func(kind string, id int) string

HiddenNote says why a track, album, artist or playlist is hidden, for its page: "Removed by moderation: \<reason>", "Hidden by the artist.", or "".

Open
OID
073d14…7a6f:84
HiddenNote details

Inspect func

Verify

func(artistID int, verified bool)

Verify marks an artist whose identity was checked off-chain.

Open
OID
073d14…7a6f:85
Verify details

Inspect func

AllowHost

func(host string, allowed bool)

AllowHost adds or removes an https host that audio and covers may use.

Open
OID
073d14…7a6f:86
AllowHost details

Inspect func

defaultPromoPct

untyped bigint

Value

(0 <untyped> bigint)

maxPromoPct

untyped bigint

Value

(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).

Open
OID
073d14…7a6f:87
SetPromoShare details

Inspect func

PromoShare

func(artistID int) int

PromoShare returns an artist's promo percent.

Open
OID
073d14…7a6f:89
PromoShare details

Inspect func

promoShare

func(t *v1.tx, artistID int) int
Open
OID
073d14…7a6f:90
promoShare details

Inspect func

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.

Open
OID
073d14…7a6f:91
RadioTip details

Inspect func

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.

Open
OID
073d14…7a6f:92
onlyRadio details

Inspect func

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.

Open
OID
073d14…7a6f:93
promoShares details

Inspect func

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.

Open
OID
073d14…7a6f:100
TrackBrief details

Inspect func

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.

Open
OID
073d14…7a6f:101
TrackBriefFor details

Inspect func

PlayableTitle

func(id int) string

PlayableTitle is a track's title, "" unless it is playable (TrackBrief).

Open
OID
073d14…7a6f:102
PlayableTitle details

Inspect func

TrackTitle

func(id int) string
Open
OID
073d14…7a6f:103
TrackTitle details

Inspect func

ArtistName

func(artistID int) string
Open
OID
073d14…7a6f:104
ArtistName details

Inspect func

ArtistOwner

func(artistID int) .uverse.address
Open
OID
073d14…7a6f:105
ArtistOwner details

Inspect func

ArtistOf

func(owner .uverse.address) int
Open
OID
073d14…7a6f:106
ArtistOf details

Inspect func

ArtistPayee

func(id int) (owner .uverse.address, verified bool, visible bool)
Open
OID
073d14…7a6f:107
ArtistPayee details

Inspect func

ArtistVisible

func(artistID int) bool
Open
OID
073d14…7a6f:108
ArtistVisible details

Inspect func

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").

Open
OID
073d14…7a6f:109
GetTrack details

Inspect func

GetArtist

func(id int) (v1.Artist, bool)
Open
OID
073d14…7a6f:110
GetArtist details

Inspect func

ArtistByRef

func(ref string) int

ArtistByRef looks a pointer artist up by its platform id ("audius-user:12").

Open
OID
073d14…7a6f:111
ArtistByRef details

Inspect func

ArtistByName

func(name string) int

ArtistByName looks a profile up by its (case-insensitive) name.

Open
OID
073d14…7a6f:112
ArtistByName details

Inspect func

GetAlbum

func(id int) (v1.Album, bool)
Open
OID
073d14…7a6f:113
GetAlbum details

Inspect func

GetPlaylist

func(id int) (v1.Playlist, bool)
Open
OID
073d14…7a6f:114
GetPlaylist details

Inspect func

ReportCount

func() int

ReportCount is the number of open (unresolved) reports.

Open
OID
073d14…7a6f:115
ReportCount details

Inspect func

GetReport

func(id int) (v1.ReportInfo, bool)
Open
OID
073d14…7a6f:116
GetReport details

Inspect func

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.

Open
OID
073d14…7a6f:117
UserStats details

Inspect func

LikedPage

func(addr .uverse.address, offset int, limit int) []int

LikedPage 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).

Open
OID
073d14…7a6f:118
LikedPage details

Inspect func

ArtistTrackCount

func(artistID int) int

ArtistTrackCount is the number of tracks an artist published.

Open
OID
073d14…7a6f:119
ArtistTrackCount details

Inspect func

ArtistTrackPage

func(artistID int, offset int, limit int) []int

ArtistTrackPage lists an artist's track ids in publishing order, paginated.

Open
OID
073d14…7a6f:120
ArtistTrackPage details

Inspect func

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.

Open
OID
073d14…7a6f:121
ArtistBrief details

Inspect func

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.

Open
OID
073d14…7a6f:122
PlaylistBrief details

Inspect func

FollowsPage

func(addr .uverse.address, offset int, limit int) []int

FollowsPage lists the artist ids a listener follows, paginated.

Open
OID
073d14…7a6f:123
FollowsPage details

Inspect func

GenrePage

func(genre int, offset int, limit int) []int

GenrePage lists the track ids of a genre (hidden ones included), newest first.

Open
OID
073d14…7a6f:124
GenrePage details

Inspect func

GenreCount

func(genre int) int

GenreCount is the number of tracks filed under a genre.

Open
OID
073d14…7a6f:125
GenreCount details

Inspect func

TrackPage

func(offset int, limit int, newest bool) []int

TrackPage lists track ids, newest first when newest is true. Ids are dense (1..count), so these pages are arithmetic.

Open
OID
073d14…7a6f:126
TrackPage details

Inspect func

ArtistPage

func(offset int, limit int) []int
Open
OID
073d14…7a6f:127
ArtistPage details

Inspect func

AlbumPage

func(offset int, limit int) []int
Open
OID
073d14…7a6f:128
AlbumPage details

Inspect func

PlaylistPage

func(offset int, limit int) []int
Open
OID
073d14…7a6f:129
PlaylistPage details

Inspect func

ReportPage

func(offset int, limit int) []int

ReportPage lists open report ids, newest first.

Open
OID
073d14…7a6f:130
ReportPage details

Inspect func

seqPage

func(n int, offset int, limit int, newest bool) []int
Open
OID
073d14…7a6f:131
seqPage details

Inspect func

PendingAdmin

func() .uverse.address
Open
OID
073d14…7a6f:137
PendingAdmin details

Inspect func

HostAllowed

func(h string) bool
Open
OID
073d14…7a6f:140
HostAllowed details

Inspect func

Split

type

Value

v1.Split

Artist

type

Value

v1.Artist

Track

type

Value

v1.Track

Album

type

Value

v1.Album

Playlist

type

Value

v1.Playlist

User

type

User 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

type

Value

v1.ReportInfo

fArtist

untyped bigint

Track 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 bigint

Track 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 bigint

Track 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)

fHidden

untyped bigint

Track 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

(3 <untyped> bigint)

fLikes

untyped bigint

Track 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 bigint

Track 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 bigint

Track 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 bigint

Track 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 bigint

Track 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 bigint

Track 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 bigint

Track 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 bigint

Track 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 bigint

Track 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 bigint

Track 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 bigint

Track 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 bigint

Track 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 bigint

Track 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 bigint

Track 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 bigint

Track 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 bigint

Track 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
Open
OID
073d14…7a6f:141
getTrack details

Inspect func

trackRecord

func(tr *v1.Track) string
Open
OID
073d14…7a6f:143
trackRecord details

Inspect func

putTrack

func(t *v1.tx, tr *v1.Track)
Open
OID
073d14…7a6f:144
putTrack details

Inspect func

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.

Open
OID
073d14…7a6f:145
brief details

Inspect func

aHidden

untyped bigint

Artist 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

(0 <untyped> bigint)

aOwner

untyped bigint

Artist 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 bigint

Artist 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 bigint

Artist 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 bigint

Artist 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 bigint

Artist 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 bigint

Artist 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 bigint

Artist 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 bigint

Artist 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 bigint

Artist 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.Artist

getArtist returns an artist's head; Tracks and Albums stay empty (see withLists).

Open
OID
073d14…7a6f:146
getArtist details

Inspect func

artistRecord

func(a *v1.Artist) string
Open
OID
073d14…7a6f:147
artistRecord details

Inspect func

putArtist

func(t *v1.tx, a *v1.Artist)
Open
OID
073d14…7a6f:148
putArtist details

Inspect func

artistField

func(t *v1.tx, id int, i int) string

artistField reads one field of the head ("" for an unknown artist).

Open
OID
073d14…7a6f:149
artistField details

Inspect func

artistVisible

func(t *v1.tx, id int) bool
Open
OID
073d14…7a6f:150
artistVisible details

Inspect func

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).

Open
OID
073d14…7a6f:151
lists details

Inspect func

setLists

func(t *v1.tx, artistID int, trackIDs string, albumIDs string)
Open
OID
073d14…7a6f:152
setLists details

Inspect func

withLists

func(t *v1.tx, a *v1.Artist) *v1.Artist

withLists fills an artist head's Tracks and Albums.

Open
OID
073d14…7a6f:153
withLists details

Inspect func

artistOf

func(t *v1.tx, owner .uverse.address) int
Open
OID
073d14…7a6f:154
artistOf details

Inspect func

getAlbum

func(t *v1.tx, id int) *v1.Album
Open
OID
073d14…7a6f:155
getAlbum details

Inspect func

albumRecord

func(al *v1.Album) string
Open
OID
073d14…7a6f:156
albumRecord details

Inspect func

putAlbum

func(t *v1.tx, al *v1.Album)
Open
OID
073d14…7a6f:157
putAlbum details

Inspect func

getPlaylist

func(t *v1.tx, id int) *v1.Playlist
Open
OID
073d14…7a6f:158
getPlaylist details

Inspect func

putPlaylist

func(t *v1.tx, p *v1.Playlist)
Open
OID
073d14…7a6f:159
putPlaylist details

Inspect func

user

func(t *v1.tx, addr .uverse.address) *v1.User

user returns a listener's record (an empty one if none); save it with putUser.

Open
OID
073d14…7a6f:160
user details

Inspect func

putUser

func(t *v1.tx, addr .uverse.address, u *v1.User)
Open
OID
073d14…7a6f:161
putUser details

Inspect func

visibleArtist

func(a *v1.Artist) bool
Open
OID
073d14…7a6f:162
visibleArtist details

Inspect func

playable

func(t *v1.tx, tr *v1.Track) bool
Open
OID
073d14…7a6f:163
playable details

Inspect func

mustArtist

func(t *v1.tx, id int) *v1.Artist
Open
OID
073d14…7a6f:164
mustArtist details

Inspect func

mustTrack

func(t *v1.tx, id int) *v1.Track
Open
OID
073d14…7a6f:165
mustTrack details

Inspect func

ownArtist

func(t *v1.tx, caller .uverse.address) (int, string)

ownArtist returns the caller's visible artist profile: its id and head.

Open
OID
073d14…7a6f:166
ownArtist details

Inspect func

mayEdit

func(caller .uverse.address, a *v1.Artist) bool

mayEdit reports whether caller manages artist a: its owner, or the admin while the artist is unclaimed.

Open
OID
073d14…7a6f:167
mayEdit details

Inspect func

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.)

Open
OID
073d14…7a6f:168
Like details

Inspect func

hasEarly

func(list string, a .uverse.address) bool

hasEarly reports whether a comma-joined address list holds a (addresses share one length, so this compares slices instead of scanning bytes).

Open
OID
073d14…7a6f:170
hasEarly details

Inspect func

dropEarly

func(list string, a .uverse.address) string

dropEarly takes a out of a comma-joined address list.

Open
OID
073d14…7a6f:171
dropEarly details

Inspect func

Unlike

func(trackID int)

Unlike takes a like back, and its early-listener badge with it.

Open
OID
073d14…7a6f:172
Unlike details

Inspect func

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.

Open
OID
073d14…7a6f:173
Tip details

Inspect func

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.

Open
OID
073d14…7a6f:174
TipWithSupport details

Inspect func

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.

Open
OID
073d14…7a6f:175
tip details

Inspect func

CreateAlbum

func(artistID int, title string, cover string, coverSHA string, year int, trackIDs string) int

CreateAlbum groups tracks of one artist. The artist (or the admin for an unclaimed artist) creates it; trackIDs is "12,13,14" in play order.

Open
OID
073d14…7a6f:176
CreateAlbum details

Inspect func

PublishPlaylist

func(title string, trackIDs string) int

PublishPlaylist makes a public playlist in one signature; trackIDs is "12,40,7". Private playlists live in the app and cost nothing.

Open
OID
073d14…7a6f:177
PublishPlaylist details

Inspect func

UpdatePlaylist

func(playlistID int, title string, trackIDs string)

UpdatePlaylist replaces a playlist's title and tracks. Owner only.

Open
OID
073d14…7a6f:178
UpdatePlaylist details

Inspect func

checkedIDs

func(t *v1.tx, s string) []int

checkedIDs 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.

Open
OID
073d14…7a6f:179
checkedIDs details

Inspect func

defaultPickPay

untyped bigint

// ugnot per aired sponsored pick, 0.2 GNOT: the pick and its collect (above)

Value

(200000 <untyped> bigint)

minPickPay

untyped bigint

Value

(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 bigint

Value

(86400 <untyped> bigint)

dataPath

untyped string

dataPath is the data realm: its address holds the vault's coins.

Value

"gno.land/r/nym-alexiscolin000/gnoradio/data"

budget

type

Value

v1.budget

acct

func(artistID int) string

acct is an artist's vault account.

Open
OID
073d14…7a6f:180
acct details

Inspect func

getBudget

func(t *v1.tx, artistID int) (v1.budget, bool)
Open
OID
073d14…7a6f:182
getBudget details

Inspect func

putBudget

func(t *v1.tx, artistID int, b v1.budget)
Open
OID
073d14…7a6f:183
putBudget details

Inspect func

lapseDay

func(end int64) int64

lapseDay is the last UTC day a pick ending at end can be paid.

Open
OID
073d14…7a6f:185
lapseDay details

Inspect func

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.

Open
OID
073d14…7a6f:186
FundPromo details

Inspect func

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).

Open
OID
073d14…7a6f:187
SetPromoPay details

Inspect func

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.

Open
OID
073d14…7a6f:188
PromoReserve details

Inspect func

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.

Open
OID
073d14…7a6f:189
PromoClaim details

Inspect func

PromoClaimable

func(trackID int, end int64, amount int64, gen int) bool

PromoClaimable reports whether PromoClaim would pay a sponsored pick's refund: reserved for end in generation gen, neither lapsed nor cancelled.

Open
OID
073d14…7a6f:190
PromoClaimable details

Inspect func

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.

Open
OID
073d14…7a6f:191
PromoRelease details

Inspect func

PromoOffer

func(artistID int) int64

PromoOffer is what a sponsored pick of the artist's tracks refunds right now (0: none). Picker-specific limits are checked when picking.

Open
OID
073d14…7a6f:192
PromoOffer details

Inspect func

offer

func(t *v1.tx, a *v1.Artist) int64
Open
OID
073d14…7a6f:193
offer details

Inspect func

PromoJSON

func(artistID int) string

PromoJSON 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.

Open
OID
073d14…7a6f:194
PromoJSON details

Inspect func

SupportGnoRadio

func()

SupportGnoRadio sends the attached ugnot to the GnoRadio treasury.

Open
OID
073d14…7a6f:195
SupportGnoRadio details

Inspect func

SetTreasury

func(to .uverse.address)

SetTreasury changes where GnoRadio's support goes; "" (the default) takes none. Admin only.

Open
OID
073d14…7a6f:197
SetTreasury details

Inspect func

SetMonthlyGoal

func(ugnot int64)

SetMonthlyGoal sets the monthly support goal shown in the app (ugnot). Admin only.

Open
OID
073d14…7a6f:198
SetMonthlyGoal details

Inspect func

treasury

func(t *v1.tx) .uverse.address
Open
OID
073d14…7a6f:199
treasury details

Inspect func

Treasury

func() .uverse.address
Open
OID
073d14…7a6f:200
Treasury details

Inspect func

SupportInfo

func() (to .uverse.address, total int64, supporters int, monthTotal int64, goal int64)
Open
OID
073d14…7a6f:201
SupportInfo details

Inspect func

recordSupport

func(t *v1.tx, by .uverse.address, amt int64)
Open
OID
073d14…7a6f:202
recordSupport details

Inspect func

Activities

func(limit int) []v1.Activity

Activities returns up to limit entries, newest first.

Open
OID
073d14…7a6f:204
Activities details

Inspect func

ActivityJSON

func(limit int) string

ActivityJSON returns the activity feed, newest first (limit \<= 64).

Open
OID
073d14…7a6f:205
ActivityJSON details

Inspect func

SupportJSON

func() string

SupportJSON returns GnoRadio's public funding state.

Open
OID
073d14…7a6f:206
SupportJSON details

Inspect func

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) int

PublishFor 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).

Open
OID
073d14…7a6f:207
PublishFor details

Inspect func

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) int

ImportFor 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.

Open
OID
073d14…7a6f:209
ImportFor details

Inspect func

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.

Open
OID
073d14…7a6f:210
EditFor details

Inspect func

addTrack

func(t *v1.tx, publisher .uverse.address, artistID int, tr *v1.Track) int
Open
OID
073d14…7a6f:211
addTrack details

Inspect func

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.

Open
OID
073d14…7a6f:212
setInfo details

Inspect func

refKey

untyped string

refKey prefixes a pointer's audio in cNames (the '-' keeps it off every name skeleton).

Value

"track-"

isRef

func(origin string) bool

isRef reports whether tracks of this origin are pointers: read live from Audius or Jamendo, with no title or credits stored on chain.

Open
OID
073d14…7a6f:213
isRef details

Inspect func

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.

Open
OID
073d14…7a6f:214
mustRefAudio details

Inspect func

refLabel

func(origin string, stored string, what string) string

refLabel is what gnoweb shows for a pointer's empty title or name: the platform it is read from ("Audius track", "Jamendo artist").

Open
OID
073d14…7a6f:215
refLabel details

Inspect func

setLicense

func(tr *v1.Track, license string, cmo string)
Open
OID
073d14…7a6f:216
setLicense details

Inspect func

setMedia

func(tr *v1.Track, audio string, audioSHA string, cover string, coverSHA string)
Open
OID
073d14…7a6f:217
setMedia details

Inspect func

parseSplits

func(s string, artist .uverse.address) []v1.Split

parseSplits reads the collaborators: never the artist, never a GnoRadio realm.

Open
OID
073d14…7a6f:218
parseSplits details

Inspect func

mustText

func(field string, s string, min int, max int)
Open
OID
073d14…7a6f:219
mustText details

Inspect func

validName

func(s string) bool

validName restricts artist names to ASCII letters and digits plus the Latin-1 accented letters, so look-alike names cannot impersonate an artist.

Open
OID
073d14…7a6f:221
validName details

Inspect func

latin1

[64]string

latin1 folds the Latin-1 letters 0xC0-0xFF (lowercased) to ASCII.

Open
OID
073d14…7a6f:223
latin1 details

Inspect array

skeleton

func(s string) string

skeleton 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.

Open
OID
073d14…7a6f:224
skeleton details

Inspect func

confusable

func(s string) string

confusable folds characters that look alike in common fonts.

Open
OID
073d14…7a6f:225
confusable details

Inspect func

reservedStems

[]string (len=6)

Reserved 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").

Open
OID
073d14…7a6f:227
reservedStems details (len=6)

+6 more Inspect slice

reservedWords

[]string (len=3)

Reserved 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").

Open
OID
073d14…7a6f:229
reservedWords details (len=3)

+3 more Inspect slice

reservedPrefixes

[]string (len=2)

Reserved 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").

Open
OID
073d14…7a6f:231
reservedPrefixes details (len=2)

+2 more Inspect slice

reserved

func(name string) bool
Open
OID
073d14…7a6f:232
reserved details

Inspect func

anyWord

func(name string, ok func(...)) bool

anyWord reports whether the skeleton of a word of name passes ok.

Open
OID
073d14…7a6f:233
anyWord details

Inspect func

alnum

func(s string, min int, max int) bool
Open
OID
073d14…7a6f:235
alnum details

Inspect func

hostOf

func(url string) string

hostOf is the authority of an https link: up to the first / ? or # (lower case). It is a plain host only when validHost says so.

Open
OID
073d14…7a6f:237
hostOf details

Inspect func

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

Open
OID
073d14…7a6f:239
mustMedia details

Inspect func

normLicense

func(s string) string

normLicense maps loose input ("cc by", "cc-by-4.0", "CC0") to an SPDX id.

Open
OID
073d14…7a6f:240
normLicense details

Inspect func

parseClock

func(s string) (int64, bool)

parseClock parses "m:ss" (or plain seconds) into seconds.

Open
OID
073d14…7a6f:241
parseClock details

Inspect func

parseIDs

func(s string, max int) []int

parseIDs parses "12,40,7" into distinct ids, at most max of them.

Open
OID
073d14…7a6f:242
parseIDs details

Inspect func

curatedLicense

func(s string) string

curatedLicense 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.

Open
OID
073d14…7a6f:243
curatedLicense details

Inspect func

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

type

Value

v1.claim

ClaimMessage

func(artistID int, to .uverse.address, proof string, expires int64) string

ClaimMessage 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.

Open
OID
073d14…7a6f:244
ClaimMessage details

Inspect func

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.

Open
OID
073d14…7a6f:246
botKey details

Inspect func

getClaim

func(t *v1.tx, artistID int) *v1.claim
Open
OID
073d14…7a6f:247
getClaim details

Inspect func

liveClaim

func(t *v1.tx, artistID int) *v1.claim

liveClaim is the pending claim made with the current robot key, if any.

Open
OID
073d14…7a6f:248
liveClaim details

Inspect func

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.

Open
OID
073d14…7a6f:249
SetBot details

Inspect func

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.

Open
OID
073d14…7a6f:250
Claim details

Inspect func

FinalizeClaim

func(artistID int)

FinalizeClaim applies a pending claim once claimDelay has passed. Anyone can call it, usually the artist from the app.

Open
OID
073d14…7a6f:251
FinalizeClaim details

Inspect func

CancelClaim

func(artistID int)

CancelClaim drops a pending claim (e.g. the proof page was hijacked). Admin only.

Open
OID
073d14…7a6f:252
CancelClaim details

Inspect func

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.

Open
OID
073d14…7a6f:253
ResetOwner details

Inspect func

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).

Open
OID
073d14…7a6f:254
mustRobotVerifiable details

Inspect func

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.

Open
OID
073d14…7a6f:255
mustClaimable details

Inspect func

ArtistVerified

func(artistID int) bool

ArtistVerified reports whether an artist proved who they are (tips and paid tickets need it).

Open
OID
073d14…7a6f:256
ArtistVerified details

Inspect func

ClaimState

func(artistID int) (pending bool, to .uverse.address, readyAt int64)
Open
OID
073d14…7a6f:257
ClaimState details

Inspect func

PendingClaim

type

PendingClaim 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.

Open
OID
073d14…7a6f:258
PendingClaims details

Inspect func

ProofHost

func(artistID int) string

ProofHost 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).

Open
OID
073d14…7a6f:259
ProofHost details

Inspect func

proofHost

func(t *v1.tx, artistID int, verified string) string
Open
OID
073d14…7a6f:260
proofHost details

Inspect func

ClaimJSON

func(artistID int) string

ClaimJSON is the verification state of an artist for the app: {"verified":b,"proof":"…","pending":b,"to":"…","pendingProof":"…","readyAt":n,"bot":"…"}.

Open
OID
073d14…7a6f:261
ClaimJSON details

Inspect func
RegisterArtist : func(name string, bio string) int Inspect
CreateArtist : func(kind string, name string, bio string, source string) int Inspect
AssignArtist : func(artistID int, owner .uverse.address) Inspect
Follow : func(artistID int) Inspect
Unfollow : func(artistID int) Inspect
newArtist : func(t *v1.tx, kind string, name string, bio string, source string, owner .uverse.address) *v1.Artist Inspect
rename : func(t *v1.tx, a *v1.Artist, name string) Inspect
ReleaseName : func(name string) Inspect
refUser : func(kind string) string Inspect
validRef : func(kind string, source string) bool Inspect
version : untyped string ="1.0.0"
denom : untyped string ="ugnot"
ugnot : untyped bigint =(1000000 <untyped> bigint)
OriginArtist : untyped string ="artist"
OriginCurated : untyped string ="curated"
OriginAudius : untyped string ="audius"
OriginJamendo : untyped string ="jamendo"
minTip : untyped bigint =(100000 <untyped> bigint)
maxTip : untyped bigint =(1000000000000 <untyped> bigint)
maxSplits : untyped bigint =(4 <untyped> bigint)
maxSplitPct : untyped bigint =(90 <untyped> bigint)
earlyBadges : untyped bigint =(10 <untyped> bigint)
minDuration : untyped bigint =(10 <untyped> bigint)
maxDuration : untyped bigint =(1200 <untyped> bigint)
maxPerArtist : untyped bigint =(500 <untyped> bigint)
maxAlbumTracks : untyped bigint =(40 <untyped> bigint)
maxListTracks : untyped bigint =(200 <untyped> bigint)
maxUserLists : untyped bigint =(50 <untyped> bigint)
maxFollows : untyped bigint =(1000 <untyped> bigint)
maxUserReports : untyped bigint =(5 <untyped> bigint)
maxTitle : untyped bigint =(64 <untyped> bigint)
maxBio : untyped bigint =(280 <untyped> bigint)
maxCredits : untyped bigint =(160 <untyped> bigint)
maxReason : untyped bigint =(200 <untyped> bigint)
topSize : untyped bigint =(10 <untyped> bigint)
maxSupportPct : untyped bigint =(50 <untyped> bigint)
NumGenres : untyped bigint =(20 <untyped> bigint)
genres : [21]string Inspect
licenses : []string (len=8) Inspect
AudiusLicense : untyped string ="Audius-OML"
rightsTerms : untyped string ="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 ="gno.land/r/nym-alexiscolin000/gnoradio/catalog/v1"
admin : *v0.Role Inspect
init.43 : func() Inspect
now : func() int64 Inspect
userCaller : func() .uverse.address Inspect
adminAddr : func() .uverse.address Inspect
syncAdmin : func() Inspect
onlyAdmin : func() Inspect
noPayment : func() Inspect
paid : func() int64 Inspect
emitEvent : func(name string, kv []string) Inspect
Ready : func() Inspect
OfferAdmin : func(to .uverse.address) Inspect
AcceptAdmin : func() Inspect
RenounceAdmin : func() Inspect
Render : func(string) string Inspect
Info : func() string Inspect
cArtists : untyped string ="catalog/artists"
cAlists : untyped string ="catalog/alists"
cOwners : untyped string ="catalog/owners"
cNames : untyped string ="catalog/names"
cTracks : untyped string ="catalog/tracks"
cGenres : untyped string ="catalog/genres"
cAlbums : untyped string ="catalog/albums"
cPlaylists : untyped string ="catalog/playlists"
cUsers : untyped string ="catalog/users"
cLikes : untyped string ="catalog/likes"
cTipped : untyped string ="catalog/tipped"
cReports : untyped string ="catalog/reports"
cRemoved : untyped string ="catalog/removed"
cHosts : untyped string ="catalog/hosts"
cMeta : untyped string ="catalog/meta"
cTops : untyped string ="catalog/tops"
cActivity : untyped string ="catalog/activity"
cConfig : untyped string ="catalog/config"
cSupporters : untyped string ="catalog/supporters"
cMonthly : untyped string ="catalog/monthly"
cPromo : untyped string ="catalog/promo"
cBudgets : untyped string ="catalog/budgets"
cWalletDay : untyped string ="catalog/walletday"
cClaims : untyped string ="catalog/claims"
cProofs : untyped string ="catalog/proofs"
collections : []string (len=25) Inspect
chunkSize : untyped bigint =(8 <untyped> bigint)
maxRec : untyped bigint =(1500 <untyped> bigint)
idRange : untyped bigint =(9 <untyped> bigint)
activitySize : untyped bigint =(64 <untyped> bigint)
setup : func(holder .uverse.address) Inspect
tx : type =v1.tx
entry : type =v1.entry
rd : func() *v1.tx Inspect
save : func(t *v1.tx) Inspect
point : func(c string, id int) string Inspect
artistAt : func(id int, f int) string Inspect
fits : func(rec string) string Inspect
mTracks : untyped bigint =(0 <untyped> bigint)
mGenre : untyped bigint =(0 <untyped> bigint)
mArtists : untyped bigint =(21 <untyped> bigint)
mAlbums : untyped bigint =(22 <untyped> bigint)
mPlaylists : untyped bigint =(23 <untyped> bigint)
mReports : untyped bigint =(24 <untyped> bigint)
mOpen : untyped bigint =(25 <untyped> bigint)
mSupporters : untyped bigint =(26 <untyped> bigint)
mSupport : untyped bigint =(27 <untyped> bigint)
mFields : untyped bigint =(28 <untyped> bigint)
newCounts : func() string Inspect
rangeKey : func(prefix string, id int) string Inspect
rangePage : func(c string, prefix string, offset int, limit int) (ids []int, total int) Inspect
Activity : type =v1.Activity
Rank : type =v1.Rank
topLiked : untyped string ="liked"
topArtists : untyped string ="artists"
topFans : untyped string ="fans"
topSupport : untyped string ="support"
ranks : func(rec string) []v1.Rank Inspect
updateTop : func(list []v1.Rank, k string, v int64) []v1.Rank Inspect
ints : func(xs []int) string Inspect
trackJSON : func(id int, rec string, arec string) string Inspect
playableRec : func(t *v1.tx, id int) (rec string, arec string) Inspect
TrackJSON : func(id int) string Inspect
TracksJSON : func(offset int, limit int) string Inspect
ArtistJSON : func(id int) string Inspect
artistJSON : func(t *v1.tx, id int, arec string) string Inspect
albumJSON : func(t *v1.tx, id int) string Inspect
AlbumJSON : func(id int) string Inspect
playlistJSON : func(t *v1.tx, id int) string Inspect
PlaylistJSON : func(id int) string Inspect
UserJSON : func(addr .uverse.address) string Inspect
LikesJSON : func(addr .uverse.address, offset int, limit int) string Inspect
GenresJSON : func() string Inspect
maxBatch : untyped bigint =(100 <untyped> bigint)
batch : func(key string, total int, offset int, limit int, one func(...)) string Inspect
ArtistsJSON : func(offset int, limit int) string Inspect
AlbumsJSON : func(offset int, limit int) string Inspect
PlaylistsJSON : func(offset int, limit int) string Inspect
Report : func(kind string, target int, reason string) Inspect
getReport : func(t *v1.tx, id int) (v1.ReportInfo, bool) Inspect
ResolveReport : func(id int) Inspect
ResolveReports : func(from int, count int) Inspect
resolve : func(t *v1.tx, id int) bool Inspect
HideTrack : func(trackID int, hidden bool, reason string) Inspect
HideAlbum : func(albumID int, hidden bool, reason string) Inspect
HideArtist : func(artistID int, hidden bool, reason string) Inspect
HidePlaylist : func(playlistID int, hidden bool, reason string) Inspect
moderate : func(t *v1.tx, kind string, id int, hidden bool, reason string) Inspect
mark : func(t *v1.tx, kind string, id int, hidden bool, reason string) Inspect
maxHideBatch : untyped bigint =(50 <untyped> bigint)
HideSource : func(kind string, from int, count int, reason string) int Inspect
HideOwn : func(kind string, id int, hidden bool) Inspect
mustToggle : func(was bool, hidden bool) Inspect
HiddenNote : func(kind string, id int) string Inspect
Verify : func(artistID int, verified bool) Inspect
AllowHost : func(host string, allowed bool) Inspect
defaultPromoPct : untyped bigint =(0 <untyped> bigint)
maxPromoPct : untyped bigint =(20 <untyped> bigint)
SetPromoShare : func(pct int) Inspect
PromoShare : func(artistID int) int Inspect
promoShare : func(t *v1.tx, artistID int) int Inspect
RadioTip : func(trackID int, supportPct int, tipper .uverse.address, picker .uverse.address, ref .uverse.address, total int64) (toPicker int64, toRef int64) Inspect
onlyRadio : func() Inspect
promoShares : func(amt int64, pct int, picker .uverse.address, ref .uverse.address) (toPicker int64, toRef int64) Inspect
GenreName : func(g int) string Inspect
TrackCount : func() int Inspect
ArtistCount : func() int Inspect
AlbumCount : func() int Inspect
PlaylistCount : func() int Inspect
TrackBrief : func(id int) (artistID int, genre int, duration int64, playable_ bool) Inspect
TrackBriefFor : func(id int, addr .uverse.address) (artistID int, genre int, duration int64, playable_ bool, own bool) Inspect
PlayableTitle : func(id int) string Inspect
TrackTitle : func(id int) string Inspect
ArtistName : func(artistID int) string Inspect
ArtistOwner : func(artistID int) .uverse.address Inspect
ArtistOf : func(owner .uverse.address) int Inspect
ArtistPayee : func(id int) (owner .uverse.address, verified bool, visible bool) Inspect
ArtistVisible : func(artistID int) bool Inspect
GetTrack : func(id int) (v1.Track, bool) Inspect
GetArtist : func(id int) (v1.Artist, bool) Inspect
ArtistByRef : func(ref string) int Inspect
ArtistByName : func(name string) int Inspect
GetAlbum : func(id int) (v1.Album, bool) Inspect
GetPlaylist : func(id int) (v1.Playlist, bool) Inspect
ReportCount : func() int Inspect
GetReport : func(id int) (v1.ReportInfo, bool) Inspect
UserStats : func(addr .uverse.address) (likes int, follows int, tipped int64, lists []int) Inspect
LikedPage : func(addr .uverse.address, offset int, limit int) []int Inspect
ArtistTrackCount : func(artistID int) int Inspect
ArtistTrackPage : func(artistID int, offset int, limit int) []int Inspect
ArtistBrief : func(artistID int) (name string, verified bool, hidden bool, ok bool) Inspect
PlaylistBrief : func(id int) (owner .uverse.address, title string, tracks int, hidden bool, ok bool) Inspect
FollowsPage : func(addr .uverse.address, offset int, limit int) []int Inspect
GenrePage : func(genre int, offset int, limit int) []int Inspect
GenreCount : func(genre int) int Inspect
TrackPage : func(offset int, limit int, newest bool) []int Inspect
ArtistPage : func(offset int, limit int) []int Inspect
AlbumPage : func(offset int, limit int) []int Inspect
PlaylistPage : func(offset int, limit int) []int Inspect
ReportPage : func(offset int, limit int) []int Inspect
seqPage : func(n int, offset int, limit int, newest bool) []int Inspect
max0 : func(n int) int Inspect
TopLiked : func() []v1.Rank Inspect
TopArtists : func() []v1.Rank Inspect
TopFans : func() []v1.Rank Inspect
Admin : func() .uverse.address Inspect
PendingAdmin : func() .uverse.address Inspect
Version : func() string Inspect
RightsTerms : func() string Inspect
HostAllowed : func(h string) bool Inspect
Split : type =v1.Split
Artist : type =v1.Artist
Track : type =v1.Track
Album : type =v1.Album
Playlist : type =v1.Playlist
User : type =v1.User
ReportInfo : type =v1.ReportInfo
fArtist : untyped bigint =(0 <untyped> bigint)
fGenre : untyped bigint =(1 <untyped> bigint)
fDuration : untyped bigint =(2 <untyped> bigint)
fHidden : untyped bigint =(3 <untyped> bigint)
fLikes : untyped bigint =(4 <untyped> bigint)
fEarly : untyped bigint =(5 <untyped> bigint)
fTips : untyped bigint =(6 <untyped> bigint)
fSupporters : untyped bigint =(7 <untyped> bigint)
fAlbum : untyped bigint =(8 <untyped> bigint)
fCreated : untyped bigint =(9 <untyped> bigint)
fOrigin : untyped bigint =(10 <untyped> bigint)
fTitle : untyped bigint =(11 <untyped> bigint)
fLicense : untyped bigint =(12 <untyped> bigint)
fCMO : untyped bigint =(13 <untyped> bigint)
fCredits : untyped bigint =(14 <untyped> bigint)
fAudio : untyped bigint =(15 <untyped> bigint)
fAudioSHA : untyped bigint =(16 <untyped> bigint)
fCover : untyped bigint =(17 <untyped> bigint)
fCoverSHA : untyped bigint =(18 <untyped> bigint)
fSource : untyped bigint =(19 <untyped> bigint)
fAttribution : untyped bigint =(20 <untyped> bigint)
fSplits : untyped bigint =(21 <untyped> bigint)
getTrack : func(t *v1.tx, id int) *v1.Track Inspect
trackRecord : func(tr *v1.Track) string Inspect
putTrack : func(t *v1.tx, tr *v1.Track) Inspect
brief : func(t *v1.tx, id int) (artist int, genre int, dur int64, hidden bool, ok bool) Inspect
aHidden : untyped bigint =(0 <untyped> bigint)
aOwner : untyped bigint =(1 <untyped> bigint)
aVerified : untyped bigint =(2 <untyped> bigint)
aTips : untyped bigint =(3 <untyped> bigint)
aFollowers : untyped bigint =(4 <untyped> bigint)
aKind : untyped bigint =(5 <untyped> bigint)
aName : untyped bigint =(6 <untyped> bigint)
aBio : untyped bigint =(7 <untyped> bigint)
aSource : untyped bigint =(8 <untyped> bigint)
aJoined : untyped bigint =(9 <untyped> bigint)
getArtist : func(t *v1.tx, id int) *v1.Artist Inspect
artistRecord : func(a *v1.Artist) string Inspect
putArtist : func(t *v1.tx, a *v1.Artist) Inspect
artistField : func(t *v1.tx, id int, i int) string Inspect
artistVisible : func(t *v1.tx, id int) bool Inspect
lists : func(t *v1.tx, artistID int) (trackIDs string, albumIDs string) Inspect
setLists : func(t *v1.tx, artistID int, trackIDs string, albumIDs string) Inspect
withLists : func(t *v1.tx, a *v1.Artist) *v1.Artist Inspect
artistOf : func(t *v1.tx, owner .uverse.address) int Inspect
getAlbum : func(t *v1.tx, id int) *v1.Album Inspect
albumRecord : func(al *v1.Album) string Inspect
putAlbum : func(t *v1.tx, al *v1.Album) Inspect
getPlaylist : func(t *v1.tx, id int) *v1.Playlist Inspect
putPlaylist : func(t *v1.tx, p *v1.Playlist) Inspect
user : func(t *v1.tx, addr .uverse.address) *v1.User Inspect
putUser : func(t *v1.tx, addr .uverse.address, u *v1.User) Inspect
visibleArtist : func(a *v1.Artist) bool Inspect
playable : func(t *v1.tx, tr *v1.Track) bool Inspect
mustArtist : func(t *v1.tx, id int) *v1.Artist Inspect
mustTrack : func(t *v1.tx, id int) *v1.Track Inspect
ownArtist : func(t *v1.tx, caller .uverse.address) (int, string) Inspect
mayEdit : func(caller .uverse.address, a *v1.Artist) bool Inspect
Like : func(trackID int) Inspect
hasEarly : func(list string, a .uverse.address) bool Inspect
dropEarly : func(list string, a .uverse.address) string Inspect
Unlike : func(trackID int) Inspect
Tip : func(trackID int) Inspect
TipWithSupport : func(trackID int, supportPct int) Inspect
tip : func(caller .uverse.address, total int64, trackID int, supportPct int, picker .uverse.address, ref .uverse.address) (toPicker int64, toRef int64) Inspect
CreateAlbum : func(artistID int, title string, cover string, coverSHA string, year int, trackIDs string) int Inspect
PublishPlaylist : func(title string, trackIDs string) int Inspect
UpdatePlaylist : func(playlistID int, title string, trackIDs string) Inspect
checkedIDs : func(t *v1.tx, s string) []int Inspect
defaultPickPay : untyped bigint =(200000 <untyped> bigint)
minPickPay : untyped bigint =(10000 <untyped> bigint)
maxPickPay : untyped bigint =(500000 <untyped> bigint)
maxPickPerDay : untyped bigint =(100 <untyped> bigint)
defaultPerDay : untyped bigint =(10 <untyped> bigint)
walletPicksDay : untyped bigint =(3 <untyped> bigint)
claimDays : untyped bigint =(7 <untyped> bigint)
daySecs : untyped bigint =(86400 <untyped> bigint)
dataPath : untyped string ="gno.land/r/nym-alexiscolin000/gnoradio/data"
budget : type =v1.budget
acct : func(artistID int) string Inspect
getBudget : func(t *v1.tx, artistID int) (v1.budget, bool) Inspect
putBudget : func(t *v1.tx, artistID int, b v1.budget) Inspect
today : func() int64 Inspect
lapseDay : func(end int64) int64 Inspect
FundPromo : func() Inspect
SetPromoPay : func(ugnotPerPick int64, perDay int) Inspect
PromoReserve : func(trackID int, picker .uverse.address, end int64) (int64, int) Inspect
PromoClaim : func(trackID int, picker .uverse.address, end int64, amount int64, gen int) Inspect
PromoClaimable : func(trackID int, end int64, amount int64, gen int) bool Inspect
PromoRelease : func(trackID int, picker .uverse.address, end int64, amount int64, reserved int64, gen int) Inspect
PromoOffer : func(artistID int) int64 Inspect
offer : func(t *v1.tx, a *v1.Artist) int64 Inspect
PromoJSON : func(artistID int) string Inspect
SupportGnoRadio : func() Inspect
SetTreasury : func(to .uverse.address) Inspect
SetMonthlyGoal : func(ugnot int64) Inspect
treasury : func(t *v1.tx) .uverse.address Inspect
Treasury : func() .uverse.address Inspect
SupportInfo : func() (to .uverse.address, total int64, supporters int, monthTotal int64, goal int64) Inspect
recordSupport : func(t *v1.tx, by .uverse.address, amt int64) Inspect
month : func(unix int64) string Inspect
Activities : func(limit int) []v1.Activity Inspect
ActivityJSON : func(limit int) string Inspect
SupportJSON : func() string Inspect
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) int Inspect
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) int Inspect
EditFor : func(caller .uverse.address, trackID int, title string, genre int, duration string, credits string, audio string, audioSHA string, cover string, coverSHA string) Inspect
addTrack : func(t *v1.tx, publisher .uverse.address, artistID int, tr *v1.Track) int Inspect
setInfo : func(tr *v1.Track, title string, genre int, duration string, credits string, named bool) Inspect
refKey : untyped string ="track-"
isRef : func(origin string) bool Inspect
mustRefAudio : func(tr *v1.Track, audio string) Inspect
refLabel : func(origin string, stored string, what string) string Inspect
setLicense : func(tr *v1.Track, license string, cmo string) Inspect
setMedia : func(tr *v1.Track, audio string, audioSHA string, cover string, coverSHA string) Inspect
parseSplits : func(s string, artist .uverse.address) []v1.Split Inspect
mustText : func(field string, s string, min int, max int) Inspect
validName : func(s string) bool Inspect
latin1 : [64]string Inspect
skeleton : func(s string) string Inspect
confusable : func(s string) string Inspect
reservedStems : []string (len=6) Inspect
reservedWords : []string (len=3) Inspect
reservedPrefixes : []string (len=2) Inspect
reserved : func(name string) bool Inspect
anyWord : func(name string, ok func(...)) bool Inspect
mustName : func(s string) Inspect
alnum : func(s string, min int, max int) bool Inspect
validHost : func(h string) bool Inspect
hostOf : func(url string) string Inspect
isSHA256 : func(s string) bool Inspect
mustMedia : func(field string, uri string, sha string, audioField bool) Inspect
normLicense : func(s string) string Inspect
parseClock : func(s string) (int64, bool) Inspect
parseIDs : func(s string, max int) []int Inspect
curatedLicense : func(s string) string Inspect
claimDelay : untyped bigint =(259200 <untyped> bigint)
certLife : untyped bigint =(7200 <untyped> bigint)
claim : type =v1.claim
ClaimMessage : func(artistID int, to .uverse.address, proof string, expires int64) string Inspect
botKey : func(t *v1.tx) (key []uint8, gen int) Inspect
getClaim : func(t *v1.tx, artistID int) *v1.claim Inspect
liveClaim : func(t *v1.tx, artistID int) *v1.claim Inspect
SetBot : func(pubKeyHex string) Inspect
Claim : func(artistID int, proof string, expires int64, sigHex string) Inspect
FinalizeClaim : func(artistID int) Inspect
CancelClaim : func(artistID int) Inspect
ResetOwner : func(artistID int) Inspect
mustRobotVerifiable : func(a *v1.Artist) Inspect
mustClaimable : func(t *v1.tx, a *v1.Artist, to .uverse.address) Inspect
ArtistVerified : func(artistID int) bool Inspect
ClaimState : func(artistID int) (pending bool, to .uverse.address, readyAt int64) Inspect
PendingClaim : type =v1.PendingClaim
PendingClaims : func(offset int, limit int) (out []v1.PendingClaim, total int) Inspect
ProofHost : func(artistID int) string Inspect
proofHost : func(t *v1.tx, artistID int, verified string) string Inspect
ClaimJSON : func(artistID int) string Inspect