-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
55 lines (46 loc) · 1.04 KB
/
main.go
File metadata and controls
55 lines (46 loc) · 1.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package main
import (
"strconv"
"github.com/xuperchain/contract-sdk-go/code"
"github.com/xuperchain/contract-sdk-go/driver"
)
type counter struct{}
func (c *counter) Initialize(ctx code.Context) code.Response {
return code.OK(nil)
}
func (c *counter) Increase(ctx code.Context) code.Response {
key, ok := ctx.Args()["key"]
if !ok {
return code.Errors("missing key")
}
value, err := ctx.GetObject(key)
cnt := 0
if err == nil {
cnt, _ = strconv.Atoi(string(value))
}
ctx.Logf("get value %s -> %d", key, cnt)
cntstr := strconv.Itoa(cnt + 1)
err = ctx.PutObject(key, []byte(cntstr))
if err != nil {
return code.Error(err)
}
ctx.EmitJSONEvent("increase", map[string]interface{}{
"key": string(key),
"value": cntstr,
})
return code.OK([]byte(cntstr))
}
func (c *counter) Get(ctx code.Context) code.Response {
key, ok := ctx.Args()["key"]
if !ok {
return code.Errors("missing key")
}
value, err := ctx.GetObject(key)
if err != nil {
return code.Error(err)
}
return code.OK(value)
}
func main() {
driver.Serve(new(counter))
}