# Gno.land Settlers
Settlers are small pixel-art gnomes, and each one belongs to a single Gno.land account, forever. A Settler
can't be sold, traded, or given to anyone else. Once it's yours, it stays yours.
## Why they exist
Settlers are a thank-you to the people who were part of Gno.land from the very beginning. Anyone whose
account already held at least 15 GNOT when the `gnoland-1` chain launched can claim one Settler. It's a
simple, permanent way of saying "this account was here at the start."
## No two are alike
Nobody picks how their Settler looks. Its skin tone, hat, beard, clothes, glasses and background are all
worked out automatically from the account that claims it and the moment it's claimed, and the collection
makes sure the same combination is never drawn twice. So every Settler is one of a kind, and it's a little
surprise to see which one you get.
## One per account
Each eligible account can claim exactly one Settler, on a first-come, first-served basis, until all of them
are gone (there are 3,000 in total). There's no cost beyond the usual cost of sending a transaction.
## How to get one
If your account was eligible, you can claim your Settler from the mint page at
[jeronimoalbi.github.io/gnoland-settlers](https://jeronimoalbi.github.io/gnoland-settlers/). Once claimed, you
can look up any Settler, and see who it belongs to, right here in this realm.
The mint page is also the quickest way to get the proof for the
[`Mint`](/r/g17khqpukees4237dtn3astzapmp462vjhsz6st4/settlers/nft$help&func=Mint) call, type your address there and it shows both the proof
and the exact `gnokey` command, ready to copy.
## A friendly word of caution
This project is made by one person, for fun. It has not been audited by anyone. Everything here is open source,
so please have a look yourself, or ask someone you trust to, before connecting a wallet or signing anything.
Nobody involved in this project is responsible for what happens to your account or your funds; using it is
entirely your own choice and your own responsibility.
## Minting without the web page
If you'd rather not use the mint page at all, or just want to see everything for yourself first, you can do
the whole thing by hand with a terminal. Nothing here needs trusting a website: the list of eligible accounts
and your proof are both worked out from the public genesis of `gnoland-1`, and you can check every step
following the instructions you can find in [jeronimoalbi/gnoland-settlers](https://github.com/jeronimoalbi/gnoland-settlers)
repository.
## See your Settler as a picture
Once you have your Settler, a separate [avatar realm](/r/g17khqpukees4237dtn3astzapmp462vjhsz6st4/settlers/avatar) can draw it as a picture
whenever it's asked to, so you, or any other realm or web app, can show it next to your address, as profile
picture, in forum post, a leaderboard row, wherever you like.
Admin() string
Approve(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, to string, tid string)
BalanceOf(owner string) (int64, interface {Error func() string})
Cap() int
ClearNotice(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string})
ExternalURL(tid string) string
GetApproved(tid string) (string, interface {Error func() string})
GetName() string
GetSymbol() string
ID() string
IsApprovedForAll(owner string, operator string) bool
MerkleRoot() string
Mint(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, proof string) string
OwnerOf(tid string) (string, interface {Error func() string})
Render(path string) string
SetApprovalForAll(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, operator string, approved bool)
SetNotice(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, alertType string, msg string)
SetSnapshot(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, rootHex string, count int)
Token() interface {Approve func(int, .uverse.realm, .uverse.address, gno.land/p/nt/grc721/v0.TokenID) .uverse.error; BalanceOf func(.uverse.address) (int64, .uverse.error); GetApproved func(gno.land/p/nt/grc721/v0.TokenID) (.uverse.address, .uverse.error); GetName func() string; GetSymbol func() string; ID func() string; IsApprovedForAll func(.uverse.address, .uverse.address) bool; OwnerOf func(gno.land/p/nt/grc721/v0.TokenID) (.uverse.address, .uverse.error); SetApprovalForAll func(int, .uverse.realm, .uverse.address, bool) .uverse.error; TotalSupply func() int64; TransferFrom func(int, .uverse.realm, .uverse.address, .uverse.address, gno.land/p/nt/grc721/v0.TokenID) .uverse.error}
TokenMetadata(tid string) (string, interface {Error func() string})
TokenOf(addr string) string
TokenURI(tid string) (string, interface {Error func() string})
Total() int
TotalSupply() int64
TraitsOf(tid string) (struct{Skin uint8; Hat uint8; BeardColor uint8; Tunic uint8; Background uint8; HatShape uint8; Flip uint8; Glasses uint8; Beard uint8}, interface {Error func() string})
TransferAdmin(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, newAdmin string)
TransferFrom(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, from string, to string, tid string)
Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.
vm/qrender output, sanitized (docs/render-security.md) and displayed in an empty-sandbox iframe — scripts, forms and popups cannot run. Links stay inert in-preview; right-click to open.