Documentation ¶
Index ¶
- Constants
- Variables
- func NewCryptoContract(inter *interpreter.Interpreter, constructor interpreter.FunctionValue, ...) (*interpreter.CompositeValue, error)
- type AssertionError
- type CryptoHasher
- type CryptoSignatureVerifier
- type FlowBuiltinImpls
- type FlowLocation
- type HashAlgorithm
- type PanicError
- type SignatureAlgorithm
- type StandardLibraryFunction
- func (f StandardLibraryFunction) ValueDeclarationArgumentLabels() []string
- func (f StandardLibraryFunction) ValueDeclarationAvailable(location common.Location) bool
- func (f StandardLibraryFunction) ValueDeclarationDocString() string
- func (StandardLibraryFunction) ValueDeclarationIsConstant() bool
- func (StandardLibraryFunction) ValueDeclarationKind() common.DeclarationKind
- func (f StandardLibraryFunction) ValueDeclarationName() string
- func (StandardLibraryFunction) ValueDeclarationPosition() ast.Position
- func (f StandardLibraryFunction) ValueDeclarationType() sema.Type
- func (f StandardLibraryFunction) ValueDeclarationValue() interpreter.Value
- type StandardLibraryFunctions
- type StandardLibraryType
- type StandardLibraryTypes
- type StandardLibraryValue
- func (StandardLibraryValue) ValueDeclarationArgumentLabels() []string
- func (v StandardLibraryValue) ValueDeclarationAvailable(location common.Location) bool
- func (v StandardLibraryValue) ValueDeclarationDocString() string
- func (v StandardLibraryValue) ValueDeclarationIsConstant() bool
- func (v StandardLibraryValue) ValueDeclarationKind() common.DeclarationKind
- func (v StandardLibraryValue) ValueDeclarationName() string
- func (StandardLibraryValue) ValueDeclarationPosition() ast.Position
- func (v StandardLibraryValue) ValueDeclarationType() sema.Type
- func (v StandardLibraryValue) ValueDeclarationValue() interpreter.Value
- type StandardLibraryValues
Constants ¶
View Source
const FlowLocationPrefix = "flow"
View Source
const HashSize = 32
Variables ¶
View Source
var AccountContractAddedEventType = newFlowEventType( "AccountContractAdded", AccountEventAddressParameter, AccountEventCodeHashParameter, AccountEventContractParameter, )
View Source
var AccountContractRemovedEventType = newFlowEventType( "AccountContractRemoved", AccountEventAddressParameter, AccountEventCodeHashParameter, AccountEventContractParameter, )
View Source
var AccountContractUpdatedEventType = newFlowEventType( "AccountContractUpdated", AccountEventAddressParameter, AccountEventCodeHashParameter, AccountEventContractParameter, )
View Source
var AccountCreatedEventType = newFlowEventType( "AccountCreated", AccountEventAddressParameter, )
View Source
var AccountEventAddressParameter = &sema.Parameter{ Identifier: "address", TypeAnnotation: sema.NewTypeAnnotation(&sema.AddressType{}), }
View Source
var AccountEventCodeHashParameter = &sema.Parameter{ Identifier: "codeHash", TypeAnnotation: sema.NewTypeAnnotation(HashType), }
View Source
var AccountEventContractParameter = &sema.Parameter{ Identifier: "contract", TypeAnnotation: sema.NewTypeAnnotation(sema.StringType), }
View Source
var AccountEventContractsParameter = &sema.Parameter{ Identifier: "contracts", TypeAnnotation: sema.NewTypeAnnotation(TypeIDsType), }
View Source
var AccountEventPublicKeyParameter = &sema.Parameter{ Identifier: "publicKey", TypeAnnotation: sema.NewTypeAnnotation( &sema.VariableSizedType{ Type: sema.UInt8Type, }, ), }
View Source
var AccountKeyAddedEventType = newFlowEventType( "AccountKeyAdded", AccountEventAddressParameter, AccountEventPublicKeyParameter, )
View Source
var AccountKeyRemovedEventType = newFlowEventType( "AccountKeyRemoved", AccountEventAddressParameter, AccountEventPublicKeyParameter, )
View Source
var AssertFunction = NewStandardLibraryFunction( "assert", &sema.FunctionType{ Parameters: []*sema.Parameter{ { Label: sema.ArgumentLabelNotRequired, Identifier: "condition", TypeAnnotation: sema.NewTypeAnnotation(sema.BoolType), }, { Identifier: "message", TypeAnnotation: sema.NewTypeAnnotation(sema.StringType), }, }, ReturnTypeAnnotation: sema.NewTypeAnnotation( sema.VoidType, ), RequiredArgumentCount: sema.RequiredArgumentCount(1), }, assertFunctionDocString, func(invocation interpreter.Invocation) interpreter.Value { result := invocation.Arguments[0].(interpreter.BoolValue) if !result { var message string if len(invocation.Arguments) > 1 { message = invocation.Arguments[1].(*interpreter.StringValue).Str } panic(AssertionError{ Message: message, LocationRange: invocation.GetLocationRange(), }) } return interpreter.VoidValue{} }, )
View Source
var BuiltinFunctions = StandardLibraryFunctions{ AssertFunction, PanicFunction, CreatePublicKeyFunction, }
View Source
var BuiltinValues = StandardLibraryValues{ SignatureAlgorithmValue, HashAlgorithmValue, }
View Source
var CreatePublicKeyFunction = NewStandardLibraryFunction( sema.PublicKeyTypeName, &sema.FunctionType{ Parameters: []*sema.Parameter{ { Label: sema.PublicKeyPublicKeyField, Identifier: sema.PublicKeyPublicKeyField, TypeAnnotation: sema.NewTypeAnnotation(&sema.VariableSizedType{Type: sema.UInt8Type}), }, { Label: sema.PublicKeySignAlgoField, Identifier: sema.PublicKeySignAlgoField, TypeAnnotation: sema.NewTypeAnnotation(sema.SignatureAlgorithmType), }, }, ReturnTypeAnnotation: sema.NewTypeAnnotation(sema.PublicKeyType), }, createPublicKeyFunctionDocString, func(invocation interpreter.Invocation) interpreter.Value { publicKey := invocation.Arguments[0].(*interpreter.ArrayValue) signAlgo := invocation.Arguments[1].(*interpreter.CompositeValue) verifyFunc := interpreter.NewHostFunctionValue( func(invocation interpreter.Invocation) interpreter.Value { signature := invocation.Arguments[0].(*interpreter.ArrayValue) signedData := invocation.Arguments[1].(*interpreter.ArrayValue) domainSeparationTag := invocation.Arguments[2].(*interpreter.StringValue) hashAlgo := invocation.Arguments[3].(*interpreter.CompositeValue) publicKey := invocation.Self return invocation.Interpreter.SignatureValidationHandler( signature, signedData, domainSeparationTag, hashAlgo, publicKey, ) }, ) validationFunc := invocation.Interpreter.PublicKeyValidationHandler return interpreter.NewPublicKeyValue(publicKey, signAlgo, validationFunc, verifyFunc) }, )
View Source
var CryptoChecker = func() *sema.Checker { code := internal.MustAssetString("contracts/crypto.cdc") program, err := parser2.ParseProgram(code) if err != nil { panic(err) } location := common.IdentifierLocation("Crypto") var checker *sema.Checker checker, err = sema.NewChecker( program, location, sema.WithPredeclaredValues(BuiltinFunctions.ToSemaValueDeclarations()), sema.WithPredeclaredTypes(BuiltinTypes.ToTypeDeclarations()), ) if err != nil { panic(err) } err = checker.Check() if err != nil { panic(err) } return checker }()
View Source
var HashAlgorithmValue = StandardLibraryValue{ Name: sema.HashAlgorithmTypeName, Type: cryptoAlgorithmEnumType(sema.HashAlgorithmType, sema.HashAlgorithms), Value: cryptoAlgorithmEnumValue(sema.HashAlgorithmType, sema.HashAlgorithms), Kind: common.DeclarationKindEnum, }
View Source
var HashType = &sema.ConstantSizedType{ Size: HashSize, Type: sema.UInt8Type, }
View Source
var HelperFunctions = StandardLibraryFunctions{ LogFunction, }
View Source
var LogFunction = NewStandardLibraryFunction( "log", logFunctionType, logFunctionDocString, func(invocation interpreter.Invocation) interpreter.Value { println(invocation.Arguments[0].String()) return interpreter.VoidValue{} }, )
View Source
var PanicFunction = NewStandardLibraryFunction( "panic", &sema.FunctionType{ Parameters: []*sema.Parameter{ { Label: sema.ArgumentLabelNotRequired, Identifier: "message", TypeAnnotation: sema.NewTypeAnnotation(sema.StringType), }, }, ReturnTypeAnnotation: sema.NewTypeAnnotation( sema.NeverType, ), }, panicFunctionDocString, func(invocation interpreter.Invocation) interpreter.Value { message := invocation.Arguments[0].(*interpreter.StringValue) panic(PanicError{ Message: message.Str, LocationRange: invocation.GetLocationRange(), }) }, )
View Source
var SignatureAlgorithmValue = StandardLibraryValue{ Name: sema.SignatureAlgorithmTypeName, Type: cryptoAlgorithmEnumType(sema.SignatureAlgorithmType, sema.SignatureAlgorithms), Value: cryptoAlgorithmEnumValue(sema.SignatureAlgorithmType, sema.SignatureAlgorithms), Kind: common.DeclarationKindEnum, }
View Source
var TypeIDsType = &sema.VariableSizedType{ Type: sema.StringType, }
Functions ¶
func NewCryptoContract ¶ added in v0.5.0
func NewCryptoContract( inter *interpreter.Interpreter, constructor interpreter.FunctionValue, signatureVerifier CryptoSignatureVerifier, hasher CryptoHasher, invocationRange ast.Range, ) ( *interpreter.CompositeValue, error, )
Types ¶
type AssertionError ¶
type AssertionError struct { Message string interpreter.LocationRange }
func (AssertionError) Error ¶
func (e AssertionError) Error() string
type CryptoHasher ¶ added in v0.10.0
type CryptoHasher interface { Hash( data []byte, tag string, hashAlgorithm HashAlgorithm, ) ([]byte, error) }
type CryptoSignatureVerifier ¶ added in v0.5.0
type CryptoSignatureVerifier interface { VerifySignature( signature []byte, tag string, signedData []byte, publicKey []byte, signatureAlgorithm SignatureAlgorithm, hashAlgorithm HashAlgorithm, ) (bool, error) }
type FlowBuiltinImpls ¶
type FlowBuiltinImpls struct { CreateAccount interpreter.HostFunction GetAccount interpreter.HostFunction Log interpreter.HostFunction GetCurrentBlock interpreter.HostFunction GetBlock interpreter.HostFunction UnsafeRandom interpreter.HostFunction }
FlowBuiltinImpls defines the set of functions needed to implement the Flow built-in functions.
func DefaultFlowBuiltinImpls ¶ added in v0.10.0
func DefaultFlowBuiltinImpls() FlowBuiltinImpls
type FlowLocation ¶ added in v0.5.0
type FlowLocation struct{}
func (FlowLocation) ID ¶ added in v0.5.0
func (l FlowLocation) ID() common.LocationID
func (FlowLocation) MarshalJSON ¶ added in v0.12.0
func (l FlowLocation) MarshalJSON() ([]byte, error)
func (FlowLocation) QualifiedIdentifier ¶ added in v0.10.2
func (l FlowLocation) QualifiedIdentifier(typeID common.TypeID) string
func (FlowLocation) String ¶ added in v0.12.0
func (l FlowLocation) String() string
type HashAlgorithm ¶ added in v0.14.0
type HashAlgorithm = sema.HashAlgorithm
type PanicError ¶
type PanicError struct { Message string interpreter.LocationRange }
func (PanicError) Error ¶
func (e PanicError) Error() string
type SignatureAlgorithm ¶ added in v0.14.0
type SignatureAlgorithm = sema.SignatureAlgorithm
type StandardLibraryFunction ¶
type StandardLibraryFunction struct { Name string Type sema.InvokableType DocString string Function interpreter.HostFunctionValue ArgumentLabels []string Available func(common.Location) bool }
func NewStandardLibraryFunction ¶
func NewStandardLibraryFunction( name string, functionType sema.InvokableType, docString string, function interpreter.HostFunction, ) StandardLibraryFunction
func (StandardLibraryFunction) ValueDeclarationArgumentLabels ¶
func (f StandardLibraryFunction) ValueDeclarationArgumentLabels() []string
func (StandardLibraryFunction) ValueDeclarationAvailable ¶ added in v0.12.0
func (f StandardLibraryFunction) ValueDeclarationAvailable(location common.Location) bool
func (StandardLibraryFunction) ValueDeclarationDocString ¶ added in v0.17.0
func (f StandardLibraryFunction) ValueDeclarationDocString() string
func (StandardLibraryFunction) ValueDeclarationIsConstant ¶
func (StandardLibraryFunction) ValueDeclarationIsConstant() bool
func (StandardLibraryFunction) ValueDeclarationKind ¶
func (StandardLibraryFunction) ValueDeclarationKind() common.DeclarationKind
func (StandardLibraryFunction) ValueDeclarationName ¶ added in v0.12.0
func (f StandardLibraryFunction) ValueDeclarationName() string
func (StandardLibraryFunction) ValueDeclarationPosition ¶
func (StandardLibraryFunction) ValueDeclarationPosition() ast.Position
func (StandardLibraryFunction) ValueDeclarationType ¶
func (f StandardLibraryFunction) ValueDeclarationType() sema.Type
func (StandardLibraryFunction) ValueDeclarationValue ¶ added in v0.12.0
func (f StandardLibraryFunction) ValueDeclarationValue() interpreter.Value
type StandardLibraryFunctions ¶
type StandardLibraryFunctions []StandardLibraryFunction
func FlowBuiltInFunctions ¶
func FlowBuiltInFunctions(impls FlowBuiltinImpls) StandardLibraryFunctions
FlowBuiltInFunctions returns a list of standard library functions, bound to the provided implementation.
func (StandardLibraryFunctions) ToInterpreterValueDeclarations ¶ added in v0.12.0
func (functions StandardLibraryFunctions) ToInterpreterValueDeclarations() []interpreter.ValueDeclaration
func (StandardLibraryFunctions) ToSemaValueDeclarations ¶ added in v0.12.0
func (functions StandardLibraryFunctions) ToSemaValueDeclarations() []sema.ValueDeclaration
type StandardLibraryType ¶
type StandardLibraryType struct { Name string Type sema.Type Kind common.DeclarationKind }
func (StandardLibraryType) TypeDeclarationKind ¶
func (t StandardLibraryType) TypeDeclarationKind() common.DeclarationKind
func (StandardLibraryType) TypeDeclarationName ¶ added in v0.12.0
func (t StandardLibraryType) TypeDeclarationName() string
func (StandardLibraryType) TypeDeclarationPosition ¶
func (StandardLibraryType) TypeDeclarationPosition() ast.Position
func (StandardLibraryType) TypeDeclarationType ¶
func (t StandardLibraryType) TypeDeclarationType() sema.Type
type StandardLibraryTypes ¶
type StandardLibraryTypes []StandardLibraryType
var BuiltinTypes StandardLibraryTypes
var FlowBuiltInTypes StandardLibraryTypes
func (StandardLibraryTypes) ToTypeDeclarations ¶
func (types StandardLibraryTypes) ToTypeDeclarations() []sema.TypeDeclaration
type StandardLibraryValue ¶
type StandardLibraryValue struct { Name string Type sema.Type DocString string Value interpreter.Value Kind common.DeclarationKind Available func(common.Location) bool }
func (StandardLibraryValue) ValueDeclarationArgumentLabels ¶
func (StandardLibraryValue) ValueDeclarationArgumentLabels() []string
func (StandardLibraryValue) ValueDeclarationAvailable ¶ added in v0.12.0
func (v StandardLibraryValue) ValueDeclarationAvailable(location common.Location) bool
func (StandardLibraryValue) ValueDeclarationDocString ¶ added in v0.17.0
func (v StandardLibraryValue) ValueDeclarationDocString() string
func (StandardLibraryValue) ValueDeclarationIsConstant ¶
func (v StandardLibraryValue) ValueDeclarationIsConstant() bool
func (StandardLibraryValue) ValueDeclarationKind ¶
func (v StandardLibraryValue) ValueDeclarationKind() common.DeclarationKind
func (StandardLibraryValue) ValueDeclarationName ¶ added in v0.12.0
func (v StandardLibraryValue) ValueDeclarationName() string
func (StandardLibraryValue) ValueDeclarationPosition ¶
func (StandardLibraryValue) ValueDeclarationPosition() ast.Position
func (StandardLibraryValue) ValueDeclarationType ¶
func (v StandardLibraryValue) ValueDeclarationType() sema.Type
func (StandardLibraryValue) ValueDeclarationValue ¶ added in v0.12.0
func (v StandardLibraryValue) ValueDeclarationValue() interpreter.Value
type StandardLibraryValues ¶
type StandardLibraryValues []StandardLibraryValue
func (StandardLibraryValues) ToInterpreterValueDeclarations ¶ added in v0.12.0
func (values StandardLibraryValues) ToInterpreterValueDeclarations() []interpreter.ValueDeclaration
func (StandardLibraryValues) ToSemaValueDeclarations ¶ added in v0.12.0
func (values StandardLibraryValues) ToSemaValueDeclarations() []sema.ValueDeclaration
Source Files ¶
Click to show internal directories.
Click to hide internal directories.