Add runner contract

This commit is contained in:
Dmitriy Zverev 2024-09-22 09:47:09 +03:00
parent 5109ce9ba7
commit bda71c7d43
4 changed files with 74 additions and 0 deletions

5
runnner/config.yml Normal file
View file

@ -0,0 +1,5 @@
name: "Runner"
supportedstandards: []
events:
permissions:
- methods: []

5
runnner/go.mod Normal file
View file

@ -0,0 +1,5 @@
module runner
go 1.23.1
require github.com/nspcc-dev/neo-go/pkg/interop v0.0.0-20240912064531-e1d5ac8557d7

2
runnner/go.sum Normal file
View file

@ -0,0 +1,2 @@
github.com/nspcc-dev/neo-go/pkg/interop v0.0.0-20240912064531-e1d5ac8557d7 h1:M8YSwQMkcUA3TJ1uT53eZ8WDoXnpIcXsRMPs7CjowV0=
github.com/nspcc-dev/neo-go/pkg/interop v0.0.0-20240912064531-e1d5ac8557d7/go.mod h1:kVLzmbeJJdbIPF2bUYhD8YppIiLXnRQj5yqNZvzbOL0=

62
runnner/runner.go Normal file
View file

@ -0,0 +1,62 @@
package runner
import (
"github.com/nspcc-dev/neo-go/pkg/interop/native/std"
"github.com/nspcc-dev/neo-go/pkg/interop/storage"
)
type Runner struct {
name string
controlPoints []ControlPoint
}
type ControlPoint struct {
id int32
photo string
}
func NewRunner(runnerName string) {
ctx := storage.GetContext()
existingRunner := storage.Get(ctx, runnerName)
if existingRunner != nil {
panic("runnner already exists")
}
runner := Runner{
name: runnerName,
controlPoints: make([]ControlPoint, 0),
}
storage.Put(ctx, runnerName, std.Serialize(runner))
}
func Save(controlPointID int32, photo, runnerName string) {
ctx := storage.GetReadOnlyContext()
data := storage.Get(ctx, runnerName)
if data == nil {
panic("runner not found")
}
ctx = storage.GetContext()
runner := std.Deserialize(data.([]byte)).(Runner)
for _, controlPoint := range runner.controlPoints {
if controlPoint.id == controlPointID {
controlPoint.photo = photo
storage.Put(ctx, runnerName, std.Serialize(runner))
return
}
}
runner.controlPoints = append(runner.controlPoints, ControlPoint{id: controlPointID, photo: photo})
storage.Put(ctx, runnerName, std.Serialize(runner))
}
func Get(runnerName string) Runner {
ctx := storage.GetContext()
data := storage.Get(ctx, runnerName)
if data == nil {
panic("runner not found")
}
return std.Deserialize(data.([]byte)).(Runner)
}