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
  • treasury_filetest.gnogno
    1// PKGPATH: gno.land/r/treasury/main23package main45import (6	"chain"7	"chain/banker"8

    Functions

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

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

    "strings"
    9 "testing"
    10
    11 "gno.land/p/nt/grc20/v0"
    12 "gno.land/p/nt/treasury/v0"
    13)
    14
    15func checkBalanceAndHistory(t *treasury.Treasury, bankerIDs []string) {
    16 for _, bankerID := range bankerIDs {
    17 balances, err := t.Balances(bankerID)
    18 if err != nil {
    19 panic("failed to get banker balances: " + err.Error())
    20 }
    21 println("Banker", bankerID, "Balance:", balances[0].Amount)
    22
    23 history, err := t.History(bankerID, 1, 10)
    24 if err != nil {
    25 panic("failed to get banker history: " + err.Error())
    26 }
    27 println("Banker", bankerID, "History count:", len(history))
    28 }
    29}
    30
    31func main(cur realm) {
    32 // Define addresses for the sender (owner) and destination.
    33 ownerAddr := chain.PackageAddress("gno.land/r/treasury/main")
    34 destAddr := chain.PackageAddress("gno.land/r/dest/main")
    35
    36 // Try to create a Treasury instance with no bankers.
    37 _, err := treasury.New(nil, "")
    38 if err != treasury.ErrNoBankerProvided {
    39 panic("expected error when creating Treasury with no bankers")
    40 }
    41
    42 // Define a token and the associated lister.
    43 const amount = int64(1000)
    44 token, ledger := grc20.NewToken("TestToken", "TEST", 0, 0, cur)
    45 ledger.Mint(ownerAddr, amount)
    46
    47 grc20Lister := func() map[string]*grc20.Token {
    48 return map[string]*grc20.Token{
    49 "TEST": token,
    50 }
    51 }
    52
    53 // Try to create a Treasury instance with a duplicate banker.
    54 var (
    55 banker_ = banker.NewBanker(banker.BankerTypeRealmSend, cur)
    56 coinsBanker, _ = treasury.NewCoinsBankerWithOwner(ownerAddr, banker_)
    57 grc20Banker, _ = treasury.NewGRC20BankerWithOwner(ownerAddr, grc20Lister)
    58 grc20BankerDup, _ = treasury.NewGRC20BankerWithOwner(ownerAddr, grc20Lister)
    59 )
    60
    61 _, err = treasury.New([]treasury.Banker{coinsBanker, grc20Banker, grc20BankerDup}, "")
    62 if !strings.Contains(err.Error(), treasury.ErrDuplicateBanker.Error()) {
    63 panic("expected error when creating Treasury with duplicate banker")
    64 }
    65
    66 // Create a Treasury instance with valid bankers.
    67 bankers := []treasury.Banker{coinsBanker, grc20Banker}
    68 t, err := treasury.New(bankers, "")
    69 if err != nil {
    70 panic("failed to create Treasury: " + err.Error())
    71 }
    72
    73 // Test if the Treasury instance has the expected bankers.
    74 println("Treasury banker IDs:", t.ListBankerIDs())
    75
    76 const unknownBankerID = "unknown-banker-id"
    77
    78 if t.HasBanker(unknownBankerID) {
    79 panic("expected banker not to be found")
    80 }
    81
    82 // Check if the addresses of the bankers matches the owner address.
    83 for _, banker_ := range bankers {
    84 addr, err := t.Address(banker_.ID())
    85 if err != nil {
    86 panic("failed to get banker address: " + err.Error())
    87 }
    88 println("Banker", banker_.ID(), "Address:", addr)
    89 }
    90
    91 // Check if the balances and history of the bankers match the expected values.
    92 testing.IssueCoins(ownerAddr, chain.NewCoins(chain.NewCoin("ugnot", amount)))
    93 bankerIDs := []string{coinsBanker.ID(), grc20Banker.ID()}
    94 checkBalanceAndHistory(t, bankerIDs)
    95
    96 // Send 3 valid payments using the CoinsBanker.
    97 validCoinsPayment := treasury.NewCoinsPayment(
    98 chain.NewCoins(chain.NewCoin("ugnot", 100)),
    99 destAddr,
    100 )
    101 for i := 0; i < 3; i++ {
    102 err = t.Send(0, cur, validCoinsPayment)
    103 if err != nil {
    104 panic("failed to send valid Coins payment: " + err.Error())
    105 }
    106 }
    107
    108 // Send 3 valid payments using the GRC20Banker.
    109 validGRC20Payment := treasury.NewGRC20Payment(
    110 token.GetSymbol(),
    111 100,
    112 destAddr,
    113 )
    114 for i := 0; i < 3; i++ {
    115 err = t.Send(0, cur, validGRC20Payment)
    116 if err != nil {
    117 panic("failed to send valid GRC20 payment: " + err.Error())
    118 }
    119 }
    120
    121 // Check if the balances and history of the bankers match the expected values.
    122 checkBalanceAndHistory(t, bankerIDs)
    123}
    124
    125// Output:
    126// Treasury banker IDs: slice[("Coins" string),("GRC20" string)]
    127// Banker Coins Address: g1ynsdz5zaxhn9gnqtr6t40m5k4fueeutq7xy224
    128// Banker GRC20 Address: g1ynsdz5zaxhn9gnqtr6t40m5k4fueeutq7xy224
    129// Banker Coins Balance: 1000
    130// Banker Coins History count: 0
    131// Banker GRC20 Balance: 1000
    132// Banker GRC20 History count: 0
    133// Banker Coins Balance: 700
    134// Banker Coins History count: 3
    135// Banker GRC20 Balance: 700
    136// Banker GRC20 History count: 3
    137