Transaction

03F4D0BC71261B…E26A68AD6749

Block 26,397 · index 0 · indexed

Summary

Hash
03F4D0BC71261BFE22D49EBC063738BE15ACEB4C3C630AB3A192E26A68AD6749
Block
26,397
Size
4632 bytes
Gas used
9,056,624 / 10,868,008
Fee
1000000ugnot
Memo
gnopublish
Status
success

Messages

Arguments · 9

  1. #1soundexdemo
  2. #2README.md
  3. #3# Soundex > ⚠️ **Experimental — generated with no human supervision** by the daily MCP pipeline to exercise gno tooling. Not audited. See [r/moul/x/daily](https://github.com/moul/gno-contracts/blob/main/r/moul/x/daily/README.md). --- Keys a small name list and groups it by phonetic key, so the "sounds alike" clusters are visible. ``` /r/moul/x/daily/soundexdemo/v0 → the table + clusters /r/moul/x/daily/soundexdemo/v0:Ashcroft → one name's key ``` Demo of the [`p/moul/x/daily/soundex`](https://github.com/moul/gno-contracts/tree/main/p/moul/x/daily/soundex/v0) library — no phonetic logic lives here. Stateless, so `Render` is deterministic: names are grouped in **first-seen order**, never by iterating a map. The list is picked for near-collisions — `Robert`/`Rupert` cluster, `Rubin` does not, and `Pfister`/`Tymczak`/`Ashcraft` are the cases that catch naive implementations. Built for gno 0.9. <!-- BEGIN GNOCONTRACTS FOOTER (generated by `make readmes`; do not edit below) --> --- Part of **[moul/gno-contracts](https://github.com/moul/gno-contracts)** — moul's versioned gno.land contracts. See the repository for the full catalog, build/test tooling, and usage. **Dependency graph:** ![gno.land/r/moul/x/daily/soundexdemo/v0 dependency graph](https://raw.githubusercontent.com/moul/gno-contracts/main/_assets/gno.land/r/moul/x/daily/soundexdemo/v0/deps.png) > 🧪 **Highly experimental — potentially vibe-coded.** Not audited; may break, change, or be removed at any time. Do not use with anything of value. Full disclaimer: [DISCLAIMER](https://github.com/moul/gno-contracts/blob/main/DISCLAIMER.md). <!-- END GNOCONTRACTS FOOTER -->
  4. #4gnomod.toml
  5. #5module = "gno.land/r/moul/x/daily/soundexdemo/v0" gno = "0.9"
  6. #6soundexdemo.gno
  7. #7// Package soundexdemo is a small gnoweb demo of the Soundex phonetic algorithm // provided by the [p/moul/x/daily/soundex](/p/moul/x/daily/soundex/v0) library: // it groups a small name list by phonetic key so the "sounds alike" clusters // are visible. // // It contains no phonetic logic of its own. Stateless, so Render is // deterministic — names are grouped in first-seen order, never by iterating a // map. package soundexdemo import ( "strings" "gno.land/p/moul/x/daily/soundex/v0" ) // names include several deliberate near-collisions. var names = []string{ "Robert", "Rupert", "Rubin", "Ashcraft", "Ashcroft", "Tymczak", "Pfister", "Honeyman", } // Render renders the demo for gnoweb. // // Render("") / Render("/") -> the name table + clusters // Render("/<name>") -> that name's key func Render(path string) string { var b strings.Builder b.WriteString("# Soundex\n\n") b.WriteString("Phonetic keys for English names, demoing the ") b.WriteString("[`p/moul/x/daily/soundex`](/p/moul/x/daily/soundex/v0) library.\n\n") if q := parseArg(path); q != "" { k := soundex.Encode(q) b.WriteString("## `") b.WriteString(q) b.WriteString("`\n\n") if k == "" { b.WriteString("_No ASCII letters — no key._\n") } else { b.WriteString("key: **") b.WriteString(k) b.WriteString("** (normalized: `") b.WriteString(soundex.Normalize(q)) b.WriteString("`)\n") } return b.String() } b.WriteString("| name | key |\n|---|---|\n") for _, n := range names { b.WriteString("| ") b.WriteString(n) b.WriteString(" | `") b.WriteString(soundex.Encode(n)) b.WriteString("` |\n") } // group by key, preserving first-seen order (never iterate a map) b.WriteString("\n## Sounds alike\n\n") keys := []string{} byKey := map[string][]string{} for _, n := range names { k := soundex.Encode(n) if _, seen := byKey[k]; !seen { keys = append(keys, k) } byKey[k] = append(byKey[k], n) } for _, k := range keys { if len(byKey[k]) < 2 { continue } b.WriteString("- **") b.WriteString(k) b.WriteString("**: ") b.WriteString(strings.Join(byKey[k], ", ")) b.WriteString("\n") } b.WriteString("\n> A *blocking* key for finding candidates, never proof that two names match.\n") return b.String() } func parseArg(path string) string { s := strings.TrimSpace(path) s = strings.TrimPrefix(s, "/") if i := strings.IndexByte(s, '/'); i >= 0 { s = s[:i] } return s }
  8. #8/gno.MemPackageType
  9. #9 MPUserProd

Result log

msg:0,success:true,log:,events:[]

← Back to block 26,397