neo-go/examples/token/token.go

75 lines
1.6 KiB
Go
Raw Normal View History

package tokencontract
import (
"github.com/nspcc-dev/neo-go/examples/token/nep5"
"github.com/nspcc-dev/neo-go/pkg/interop/storage"
"github.com/nspcc-dev/neo-go/pkg/interop/util"
)
const (
decimals = 8
multiplier = 100000000
)
var owner = util.FromAddress("NPAsqZkx9WhNd4P72uhZxBhLinSuNkxfB8")
// CreateToken initializes the Token Interface for the Smart Contract to operate with
func CreateToken() nep5.Token {
return nep5.Token{
Name: "Awesome NEO Token",
Symbol: "ANT",
Decimals: decimals,
Owner: owner,
TotalSupply: 11000000 * multiplier,
CirculationKey: "TokenCirculation",
}
}
// Main function = contract entry
func Main(operation string, args []interface{}) interface{} {
token := CreateToken()
if operation == "name" {
return token.Name
}
if operation == "symbol" {
return token.Symbol
}
if operation == "decimals" {
return token.Decimals
}
// The following operations need ctx
ctx := storage.GetContext()
if operation == "totalSupply" {
return token.GetSupply(ctx)
}
if operation == "balanceOf" {
hodler := args[0].([]byte)
return token.BalanceOf(ctx, hodler)
}
if operation == "transfer" && CheckArgs(args, 3) {
from := args[0].([]byte)
to := args[1].([]byte)
amount := args[2].(int)
return token.Transfer(ctx, from, to, amount)
}
if operation == "mint" && CheckArgs(args, 1) {
addr := args[0].([]byte)
return token.Mint(ctx, addr)
}
return true
}
// CheckArgs checks args array against a length indicator
func CheckArgs(args []interface{}, length int) bool {
if len(args) == length {
return true
}
return false
}