Search Apps Documentation Source Content File Folder Download Copy Actions Download

banktest.gno

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