Compiler interop APIs (CityOfZion/neo-storm#5)

* added draft of block and transaction interop api.

* added header interop API

* added attribute, transaction, input, output interop API

* Added asset, attribute and account interop api.

* added Runtime interop apis

* added asset renew and create + contract and asset interop apis

Imported from CityOfZion/neo-storm (b6810d58b98312a959980f344db24689839574c4).
This commit is contained in:
Anthony De Meulemeester 2018-08-21 12:57:48 +02:00 committed by Roman Khimov
parent e4c80a001c
commit 523789ee1c
12 changed files with 353 additions and 8 deletions

View file

@ -0,0 +1,23 @@
package account
// Package account provides function signatures that can be used inside
// smart contracts that are written in the neo-go-sc framework.
// Account stubs a NEO account type.
type Account struct{}
// GetScripHash returns the script hash of the given account.
func GetScriptHash(a Account) []byte {
return nil
}
// GetVotes returns the votes of the given account which should be a slice of
// public key raw bytes.
func GetVotes(a Account) [][]byte {
return nil
}
// GetBalance returns the balance of for the given account and asset id.
func GetBalance(a Account, assetID []byte) int {
return 0
}

53
interop/asset/asset.go Normal file
View file

@ -0,0 +1,53 @@
package asset
// Package asset provides function signatures that can be used inside
// smart contracts that are written in the neo-go-sc framework.
// Asset stubs a NEO asset type.
type Asset struct{}
// GetAssetID returns the id of the given asset.
func GetAssetID(a Asset) []byte {
return nil
}
// GetAssetType returns the type of the given asset.
func GetAssetType(a Asset) byte {
return 0x00
}
// GetAmount returns the amount of the given asset.
func GetAmount(a Asset) int {
return 0
}
// GetAvailable returns the available of the given asset.
func GetAvailable(a Asset) int {
return 0
}
// GetPrecision returns the precision of the given asset.
func GetPrecision(a Asset) byte {
return 0x00
}
// GetOwner returns the owner of the given asset.
func GetOwner(a Asset) []byte {
return nil
}
// GetAdmin returns the admin of the given asset.
func GetAdmin(a Asset) []byte {
return nil
}
// GetIssuer returns the issuer of the given asset.
func GetIssuer(a Asset) []byte {
return nil
}
// Create registers a new asset on the blockchain.
func Create(assetType byte, name string, amount int, precision byte, owner, admin, issuer []byte) {}
// Renew renews the existance of an asset by the given years.
func Renew(asset Asset, years int) {}

View file

@ -0,0 +1,17 @@
package attribute
// Package attribute provides function signatures that can be used inside
// smart contracts that are written in the neo-go-sc framework.
// Attribute stubs a NEO transaction attribute type.
type Attribute struct{}
// GetUsage returns the usage of the given attribute.
func GetUsage(attr Attribute) byte {
return 0x00
}
// GetData returns the data of the given attribute.
func GetData(attr Attribute) []byte {
return nil
}

25
interop/block/block.go Normal file
View file

@ -0,0 +1,25 @@
package block
import "github.com/CityOfZion/neo-go-sc/interop/transaction"
// Package block provides function signatures that can be used inside
// smart contracts that are written in the neo-go-sc framework.
// Block stubs a NEO block type.
type Block struct{}
// GetTransactionCount return the number of recorded transactions in the given block.
func GetTransactionCount(b Block) int {
return 0
}
// GetTransactions returns a slice of transactions recorded in the given block.
func GetTransactions(b Block) []transaction.Transaction {
return []transaction.Transaction{}
}
// GetTransaction returns a transaction from the given a block hash of the
// transaction.
func GetTransaction(b Block, hash []byte) transaction.Transaction {
return transaction.Transaction{}
}

View file

@ -0,0 +1,53 @@
package blockchain
import (
"github.com/CityOfZion/neo-go-sc/interop/account"
"github.com/CityOfZion/neo-go-sc/interop/asset"
"github.com/CityOfZion/neo-go-sc/interop/block"
"github.com/CityOfZion/neo-go-sc/interop/contract"
"github.com/CityOfZion/neo-go-sc/interop/header"
"github.com/CityOfZion/neo-go-sc/interop/transaction"
)
// Package blockchain provides function signatures that can be used inside
// smart contracts that are written in the neo-go-sc framework.
// GetHeight returns the height of te block recorded in the current execution scope.
func GetHeight() int {
return 0
}
// GetHeader returns the header found by the given hash or index.
func GetHeader(heightOrHash interface{}) header.Header {
return header.Header{}
}
// GetBlock returns the block found by the given hash or index.
func GetBlock(heightOrHash interface{}) block.Block {
return block.Block{}
}
// GetTransaction returns the transaction found by the given hash.
func GetTransaction(hash []byte) transaction.Transaction {
return transaction.Transaction{}
}
// GetContract returns the contract found by the given script hash.
func GetContract(scriptHash []byte) contract.Contract {
return contract.Contract{}
}
// GetAccount returns the account found by the given script hash.
func GetAccount(scriptHash []byte) account.Account {
return account.Account{}
}
// GetValidators returns a slice of validator addresses.
func GetValidators() [][]byte {
return nil
}
// GetAsset returns the asset found by the given asset id.
func GetAsset(assetID []byte) asset.Asset {
return asset.Asset{}
}

View file

@ -0,0 +1,17 @@
package contract
// Package contract provides function signatures that can be used inside
// smart contracts that are written in the neo-go-sc framework.
// Contract stubs a NEO contract type.
type Contract struct{}
// GetScript returns the script of the given contract.
func GetScript(c Contract) []byte {
return nil
}
// IsPayable returns whether the given contract is payable.
func IsPayable(c Contract) bool {
return false
}

47
interop/header/header.go Normal file
View file

@ -0,0 +1,47 @@
package header
// Package header provides function signatures that can be used inside
// smart contracts that are written in the neo-go-sc framework.
// Header stubs a NEO block header type.
type Header struct{}
// GetIndex returns the index of the given header.
func GetIndex(h Header) int {
return 0
}
// GetHash returns the hash of the given header.
func GetHash(h Header) []byte {
return nil
}
// GetPrevHash returns the previous hash of the given header.
func GetPrevHash(h Header) []byte {
return nil
}
// GetTimestamp returns the timestamp of the given header.
func GetTimestamp(h Header) int {
return 0
}
// GetVersion returns the version of the given header.
func GetVersion(h Header) int {
return 0
}
// GetMerkleRoot returns the merkle root of the given header.
func GetMerkleRoot(h Header) []byte {
return nil
}
// GetConsensusData returns the consensus data of the given header.
func GetConsensusData(h Header) int {
return 0
}
// GetNextConsensus returns the next consensus of the given header.
func GetNextConsensus(h Header) []byte {
return nil
}

17
interop/input/input.go Normal file
View file

@ -0,0 +1,17 @@
package input
// Package input provides function signatures that can be used inside
// smart contracts that are written in the neo-go-sc framework.
// Input stubs the input of a NEO transaction.
type Input struct{}
// GetHash returns the hash of the given input.
func GetHash(in Input) []byte {
return nil
}
// GetIndex returns the index of the given input.
func GetIndex(in Input) int {
return 0
}

22
interop/output/output.go Normal file
View file

@ -0,0 +1,22 @@
package output
// Package output provides function signatures that can be used inside
// smart contracts that are written in the neo-go-sc framework.
// Output stubs the output of a NEO transaction.
type Output struct{}
// GetAssetID returns the asset id of the given output.
func GetAssetID(out Output) []byte {
return nil
}
// GetValue returns the value of the given output.
func GetValue(out Output) int {
return 0
}
// GetScriptHash returns the script hash of the given output.
func GetScriptHash(out Output) []byte {
return nil
}

View file

@ -1,17 +1,31 @@
package runtime package runtime
// CheckWitness verifies if the given hash is the invoker of the contract // Package runtime provides function signatures that can be used inside
// smart contracts that are written in the neo-go-sc framework.
// CheckWitness verifies if the given hash is the invoker of the contract.
func CheckWitness(hash []byte) bool { func CheckWitness(hash []byte) bool {
return true return true
} }
// Notify passes data to the VM // Log instucts the VM to log the given message.
func Log(message string) {}
// Notify an event to the VM.
func Notify(arg interface{}) int { func Notify(arg interface{}) int {
return 0 return 0
} }
// Log passes a message to the VM // GetTime returns the timestamp of the most recent block.
func Log(message string) {} func GetTime() int {
return 0
}
// GetTrigger returns the smart contract invoke trigger which can be either
// verification or application.
func GetTrigger() byte {
return 0x00
}
// Application returns the Application trigger type // Application returns the Application trigger type
func Application() byte { func Application() byte {
@ -23,8 +37,12 @@ func Verification() byte {
return 0x00 return 0x00
} }
// GetTrigger return the current trigger type. The return in this function // Serialize serializes and item into a bytearray.
// Doesn't really matter, this is just an interop placeholder func Serialize(item interface{}) []byte {
func GetTrigger() interface{} { return nil
return 0 }
// Deserializes an item from a bytearray.
func Deserialize(b []byte) interface{} {
return nil
} }

View file

@ -1,5 +1,8 @@
package storage package storage
// Package storage provides function signatures that can be used inside
// smart contracts that are written in the neo-go-sc framework.
// Context represents the storage context // Context represents the storage context
type Context struct{} type Context struct{}

View file

@ -0,0 +1,50 @@
package transaction
import (
"github.com/CityOfZion/neo-go-sc/interop/attribute"
"github.com/CityOfZion/neo-go-sc/interop/input"
"github.com/CityOfZion/neo-go-sc/interop/output"
)
// Package transaction provides function signatures that can be used inside
// smart contracts that are written in the neo-go-sc framework.
// Transaction stubs a NEO transaction type.
type Transaction struct{}
// GetHash returns the hash of the given transaction.
func GetHash(t Transaction) []byte {
return nil
}
// GetType returns the type of the given transaction.
func GetType(t Transaction) byte {
return 0x00
}
// GetAttributes returns a slice of attributes for the given transaction.
func GetAttributes(t Transaction) []attribute.Attribute {
return []attribute.Attribute{}
}
// FIXME: What is the correct return type for this?
// GetReferences returns a slice of references for the given transaction.
func GetReferences(t Transaction) interface{} {
return 0
}
// FIXME: What is the correct return type for this?
// GetUnspentCoins returns the unspent coins for the given transaction.
func GetUnspentCoins(t Transaction) interface{} {
return 0
}
// GetInputs returns the inputs of the given transaction.
func GetInputs(t Transaction) []input.Input {
return []input.Input{}
}
// GetOutputs returns the outputs of the given transaction.
func GetOutputs(t Transaction) []output.Output {
return []output.Output{}
}