github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/examples/gno.land/r/demo/banktest/banktest.gno (about)

     1  package banktest
     2  
     3  import (
     4  	"std"
     5  	"time"
     6  )
     7  
     8  type activity struct {
     9  	caller   std.Address
    10  	sent     std.Coins
    11  	returned std.Coins
    12  	time     time.Time
    13  }
    14  
    15  func (act *activity) String() string {
    16  	return act.caller.String() + " " +
    17  		act.sent.String() + " sent, " +
    18  		act.returned.String() + " returned, at " +
    19  		act.time.Format("2006-01-02 3:04pm MST")
    20  }
    21  
    22  var latest [10]*activity
    23  
    24  // Deposit will take the coins (to the realm's pkgaddr) or return them to user.
    25  func Deposit(returnDenom string, returnAmount int64) string {
    26  	std.AssertOriginCall()
    27  	caller := std.GetOrigCaller()
    28  	send := std.Coins{{returnDenom, returnAmount}}
    29  	// record activity
    30  	act := &activity{
    31  		caller:   caller,
    32  		sent:     std.GetOrigSend(),
    33  		returned: send,
    34  		time:     time.Now(),
    35  	}
    36  	for i := len(latest) - 2; i >= 0; i-- {
    37  		latest[i+1] = latest[i] // shift by +1.
    38  	}
    39  	latest[0] = act
    40  	// return if any.
    41  	if returnAmount > 0 {
    42  		banker := std.GetBanker(std.BankerTypeOrigSend)
    43  		pkgaddr := std.CurrentRealm().Addr()
    44  		// TODO: use std.Coins constructors, this isn't generally safe.
    45  		banker.SendCoins(pkgaddr, caller, send)
    46  		return "returned!"
    47  	} else {
    48  		return "thank you!"
    49  	}
    50  }
    51  
    52  func Render(path string) string {
    53  	// get realm coins.
    54  	banker := std.GetBanker(std.BankerTypeReadonly)
    55  	coins := banker.GetCoins(std.GetOrigPkgAddr())
    56  
    57  	// render
    58  	res := ""
    59  	res += "## recent activity\n"
    60  	res += "\n"
    61  	for _, act := range latest {
    62  		if act == nil {
    63  			break
    64  		}
    65  		res += " * " + act.String() + "\n"
    66  	}
    67  	res += "\n"
    68  	res += "## total deposits\n"
    69  	res += coins.String()
    70  	return res
    71  }