PathrockNetwork Gno Explorer
HomeBlocksTransactionsTokensRealmsPackagesValidatorsAnalytics

PathrockNetwork Gno Explorer — an independent explorer for Gno.land Mainnet (gnoland-1), operated by PathrockNetwork. Not an official Gno.land service.

gnowebarchive RPC

gno.land/p/nt/treasury/v0

Package
Open in gnoweb ↗

Overview

Kind
Pure package
Name
v0
Namespace
nt / treasury
Files
14 (README)(gnomod.toml)
Exported functions
n/a — not supported for pure packages by the node (vm/qfuncs)
Module
gno.land/p/nt/treasury/v0
gno
0.9

Files (14)

  • README.mdmarkdown
  • gnomod.tomltoml
  • banker_coins.gnogno
  • banker_grc20.gnogno
  • doc.gnogno
  • render.gnogno
  • treasury.gnogno
  • types.gnogno
  • banker_canonical_filetest.gnogno
  • banker_coins_filetest.gnogno
  • banker_coins_payment_canonical_filetest.gnogno
  • banker_coins_payment_copy_filetest.gnogno
  • banker_grc20_filetest.gnogno
  • treasury_filetest.gnogno
  • banker_canonical_filetest.gnogno
    1// PKGPATH: gno.land/r/treasury/canonicaltest23package canonicaltest45import (6	"chain"7	"chain/banker"89	"gno.land/p/nt/treasury/v0"10)1112// evilBanker embeds *treasury.CoinsBanker so it inherits ID/Send/Balances/13// Address via promotion. If treasury used a sealed-interface marker, this14// type would satisfy the interface and bypass the gate. The canonical-impl15// allowlist (IsCanonicalBanker / treasury.New's type switch) rejects it16// because type assertions are nominal: *evilBanker is not *CoinsBanker.17type evilBanker struct {18	*treasury.CoinsBanker19}2021func main(cur realm) {22	ownerAddr := chain.PackageAddress("gno.land/r/treasury/canonicaltest")2324	inner := banker.NewBanker(banker.BankerTypeRealmSend, cur)25	legit, err := treasury.NewCoinsBankerWithOwner(ownerAddr, inner)26	if err != nil {27		panic("failed to construct canonical banker: " + err.Error())28	}2930	// Verify the helper accepts the canonical impl.31	if !treasury.IsCanonicalBanker(legit) {32		panic("canonical *CoinsBanker must pass IsCanonicalBanker")33	}3435	// Verify the helper rejects an embedded-impl bypass attempt.36	evil := &evilBanker{CoinsBanker: legit}37	if treasury.IsCanonicalBanker(evil) {38		panic("embedded-impl wrapper must NOT pass IsCanonicalBanker")39	}4041	// Verify treasury.New rejects the same bypass attempt.42	_, err = treasury.New([]treasury.Banker{evil}, "")43	if err != treasury.ErrNonCanonicalBankerImpl {44		panic("expected ErrNonCanonicalBankerImpl from treasury.New; got: " + err.Error())45	}4647	// And confirms the canonical banker still works.48	_, err = treasury.New([]treasury.Banker{legit}, "")49	if err != nil {50		panic("canonical banker must be accepted: " + err.Error())51	}5253	println("canonical allowlist OK")54}5556// Output:57// canonical allowlist OK58

    Functions

    not supported for pure packages by the node (vm/qfuncs)

    Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.