Documentation
      ¶
    
    
  
    
  
    Overview ¶
Package compiler implements Go to NEF smart contract compiler.
Index ¶
- Variables
 - func Compile(name string, r io.Reader) ([]byte, error)
 - func CompileAndSave(src string, o *Options) ([]byte, error)
 - func CreateManifest(di *DebugInfo, o *Options) (*manifest.Manifest, error)
 - type DebugInfo
 - type DebugMethodName
 - type DebugParam
 - type DebugRange
 - type DebugSeqPoint
 - type EventDebugInfo
 - type MethodDebugInfo
 - type Options
 
Constants ¶
This section is empty.
Variables ¶
var ( // ErrMissingExportedParamName is returned when exported contract method has unnamed parameter. ErrMissingExportedParamName = errors.New("exported method is not allowed to have unnamed parameter") // ErrInvalidExportedRetCount is returned when exported contract method has invalid return values count. ErrInvalidExportedRetCount = errors.New("exported method is not allowed to have more than one return value") )
Various exported functions usage errors.
var ErrUnsupportedTypeAssertion = errors.New("type assertion with two return values is not supported")
    ErrUnsupportedTypeAssertion is returned when type assertion statement is not supported by the compiler.
Functions ¶
func Compile ¶
Compile compiles a Go program into a bytecode that can run on the Neo virtual machine. If `r != nil`, `name` is interpreted as a filename, and `r` as file contents. Otherwise `name` is either a file name or a name of the directory containing source files.
func CompileAndSave ¶
CompileAndSave will compile and save the file to disk in the NEF format.
Types ¶
type DebugInfo ¶ added in v0.75.0
type DebugInfo struct {
	MainPkg   string            `json:"-"`
	Hash      util.Uint160      `json:"hash"`
	Documents []string          `json:"documents"`
	Methods   []MethodDebugInfo `json:"methods"`
	// NamedTypes are exported structured types that have some name (even
	// if the original structure doesn't) and a number of internal fields.
	NamedTypes map[string]binding.ExtendedType `json:"-"`
	Events     []EventDebugInfo                `json:"events"`
	// EmittedEvents contains events occurring in code.
	EmittedEvents map[string][][]string `json:"-"`
	// InvokedContracts contains foreign contract invocations.
	InvokedContracts map[util.Uint160][]string `json:"-"`
	// StaticVariables contains a list of static variable names and types.
	StaticVariables []string `json:"static-variables"`
}
    DebugInfo represents smart-contract debug information.
func CompileWithOptions ¶ added in v0.95.2
CompileWithOptions compiles a Go program into bytecode with the provided compiler options.
func (*DebugInfo) ConvertToManifest ¶ added in v0.91.0
ConvertToManifest converts a contract to the manifest.Manifest struct for debugger. Note: manifest is taken from the external source, however it can be generated ad-hoc. See #1038.
type DebugMethodName ¶ added in v0.75.0
DebugMethodName is a combination of a namespace and name.
func (*DebugMethodName) MarshalJSON ¶ added in v0.75.0
func (d *DebugMethodName) MarshalJSON() ([]byte, error)
MarshalJSON implements the json.Marshaler interface.
func (*DebugMethodName) UnmarshalJSON ¶ added in v0.75.0
func (d *DebugMethodName) UnmarshalJSON(data []byte) error
UnmarshalJSON implements the json.Unmarshaler interface.
type DebugParam ¶ added in v0.75.0
type DebugParam struct {
	Name         string                  `json:"name"`
	Type         string                  `json:"type"`
	RealType     binding.Override        `json:"-"`
	ExtendedType *binding.ExtendedType   `json:"-"`
	TypeSC       smartcontract.ParamType `json:"-"`
}
    DebugParam represents the variables's name and type.
func (*DebugParam) MarshalJSON ¶ added in v0.75.0
func (d *DebugParam) MarshalJSON() ([]byte, error)
MarshalJSON implements the json.Marshaler interface.
func (*DebugParam) ToManifestParameter ¶ added in v0.90.0
func (d *DebugParam) ToManifestParameter() manifest.Parameter
ToManifestParameter converts DebugParam to manifest.Parameter.
func (*DebugParam) UnmarshalJSON ¶ added in v0.75.0
func (d *DebugParam) UnmarshalJSON(data []byte) error
UnmarshalJSON implements the json.Unmarshaler interface.
type DebugRange ¶ added in v0.75.0
DebugRange represents the method's section in bytecode.
func (*DebugRange) MarshalJSON ¶ added in v0.75.0
func (d *DebugRange) MarshalJSON() ([]byte, error)
MarshalJSON implements the json.Marshaler interface.
func (*DebugRange) UnmarshalJSON ¶ added in v0.75.0
func (d *DebugRange) UnmarshalJSON(data []byte) error
UnmarshalJSON implements the json.Unmarshaler interface.
type DebugSeqPoint ¶ added in v0.75.0
type DebugSeqPoint struct {
	// Opcode is an opcode's address.
	Opcode int
	// Document is an index of file where sequence point occurs.
	Document int
	// StartLine is the first line of the break-pointed statement.
	StartLine int
	// StartCol is the first column of the break-pointed statement.
	StartCol int
	// EndLine is the last line of the break-pointed statement.
	EndLine int
	// EndCol is the last column of the break-pointed statement.
	EndCol int
}
    DebugSeqPoint represents break-point for debugger.
func (*DebugSeqPoint) MarshalJSON ¶ added in v0.75.0
func (d *DebugSeqPoint) MarshalJSON() ([]byte, error)
MarshalJSON implements the json.Marshaler interface.
func (*DebugSeqPoint) UnmarshalJSON ¶ added in v0.75.0
func (d *DebugSeqPoint) UnmarshalJSON(data []byte) error
UnmarshalJSON implements the json.Unmarshaler interface.
type EventDebugInfo ¶ added in v0.75.0
type EventDebugInfo struct {
	ID string `json:"id"`
	// Name is a human-readable event name in a format "{namespace},{name}".
	Name       string       `json:"name"`
	Parameters []DebugParam `json:"params"`
}
    EventDebugInfo represents smart-contract's event debug information.
type MethodDebugInfo ¶ added in v0.75.0
type MethodDebugInfo struct {
	// ID is the actual name of the method.
	ID string `json:"id"`
	// Name is the name of the method with the first letter in a lowercase
	// together with the namespace it belongs to. We need to keep the first letter
	// lowercased to match manifest standards.
	Name DebugMethodName `json:"name"`
	// IsExported defines whether the method is exported.
	IsExported bool `json:"-"`
	// IsFunction defines whether the method has no receiver.
	IsFunction bool `json:"-"`
	// Range is the range of smart-contract's opcodes corresponding to the method.
	Range DebugRange `json:"range"`
	// Parameters is a list of the method's parameters.
	Parameters []DebugParam `json:"params"`
	// ReturnType is the method's return type.
	ReturnType string `json:"return"`
	// ReturnTypeReal is the method's return type as specified in Go code.
	ReturnTypeReal binding.Override `json:"-"`
	// ReturnTypeExtended is the method's return type with additional data.
	ReturnTypeExtended *binding.ExtendedType `json:"-"`
	// ReturnTypeSC is a return type to use in manifest.
	ReturnTypeSC smartcontract.ParamType `json:"-"`
	Variables    []string                `json:"variables"`
	// SeqPoints is a map between source lines and byte-code instruction offsets.
	SeqPoints []DebugSeqPoint `json:"sequence-points"`
}
    MethodDebugInfo represents smart-contract's method debug information.
func (*MethodDebugInfo) ToManifestMethod ¶ added in v0.90.0
func (m *MethodDebugInfo) ToManifestMethod() manifest.Method
ToManifestMethod converts MethodDebugInfo to manifest.Method.
type Options ¶
type Options struct {
	// The extension of the output file default set to .nef
	Ext string
	// The name of the output file.
	Outfile string
	// The name of the output for debug info.
	DebugInfo string
	// The name of the output for contract manifest file.
	ManifestFile string
	// NoEventsCheck specifies if events emitted by contract needs to be present in manifest.
	// This setting has effect only if manifest is emitted.
	NoEventsCheck bool
	// NoStandardCheck specifies if supported standards compliance needs to be checked.
	// This setting has effect only if manifest is emitted.
	NoStandardCheck bool
	// NoPermissionsCheck specifies if permissions in YAML config need to be checked
	// against invocations performed by the contract.
	// This setting has effect only if manifest is emitted.
	NoPermissionsCheck bool
	// Name is a contract's name to be written to manifest.
	Name string
	// SourceURL is a contract's source URL to be written to manifest.
	SourceURL string
	// Runtime notifications.
	ContractEvents []manifest.Event
	// The list of standards supported by the contract.
	ContractSupportedStandards []string
	// SafeMethods contains a list of methods which will be marked as safe in manifest.
	SafeMethods []string
	// Overloads contains mapping from the compiled method name to the name emitted in manifest.
	// It can be used to provide method overloads as Go doesn't have such capability.
	Overloads map[string]string
	// Permissions is a list of permissions for every contract method.
	Permissions []manifest.Permission
	// BindingsFile contains configuration for smart-contract bindings generator.
	BindingsFile string
}
    Options contains all the parameters that affect the behavior of the compiler.