compiler, cli: support events from .yml config file

We currently can't process events in codegen, so we have to provide
them via .yml config file. Do not delete the rest of the code connected
with conversion of MethodDebugInfo.Event into manifest.Event as we have
issue #1038.
This commit is contained in:
Anna Shaleva 2020-08-11 11:21:54 +03:00
parent de8db692f4
commit b5494320f9
6 changed files with 13 additions and 13 deletions

View file

@ -389,6 +389,7 @@ func contractCompile(ctx *cli.Context) error {
return err return err
} }
o.ContractFeatures = conf.GetFeatures() o.ContractFeatures = conf.GetFeatures()
o.ContractEvents = conf.Events
o.ContractSupportedStandards = conf.SupportedStandards o.ContractSupportedStandards = conf.SupportedStandards
} }

View file

@ -14,6 +14,7 @@ import (
"strings" "strings"
"github.com/nspcc-dev/neo-go/pkg/smartcontract" "github.com/nspcc-dev/neo-go/pkg/smartcontract"
"github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest"
"github.com/nspcc-dev/neo-go/pkg/smartcontract/nef" "github.com/nspcc-dev/neo-go/pkg/smartcontract/nef"
"golang.org/x/tools/go/loader" "golang.org/x/tools/go/loader"
) )
@ -37,6 +38,9 @@ type Options struct {
// Contract features. // Contract features.
ContractFeatures smartcontract.PropertyState ContractFeatures smartcontract.PropertyState
// Runtime notifications.
ContractEvents []manifest.Event
// The list of standards supported by the contract. // The list of standards supported by the contract.
ContractSupportedStandards []string ContractSupportedStandards []string
} }
@ -176,7 +180,7 @@ func CompileAndSave(src string, o *Options) ([]byte, error) {
} }
if o.ManifestFile != "" { if o.ManifestFile != "" {
m, err := di.ConvertToManifest(o.ContractFeatures, o.ContractSupportedStandards...) m, err := di.ConvertToManifest(o.ContractFeatures, o.ContractEvents, o.ContractSupportedStandards...)
if err != nil { if err != nil {
return b, fmt.Errorf("failed to convert debug info to manifest: %w", err) return b, fmt.Errorf("failed to convert debug info to manifest: %w", err)
} }

View file

@ -359,8 +359,7 @@ func parsePairJSON(data []byte, sep string) (string, string, error) {
// ConvertToManifest converts contract to the manifest.Manifest struct for debugger. // ConvertToManifest converts 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. // Note: manifest is taken from the external source, however it can be generated ad-hoc. See #1038.
func (di *DebugInfo) ConvertToManifest(fs smartcontract.PropertyState, supportedStandards ...string) (*manifest.Manifest, error) { func (di *DebugInfo) ConvertToManifest(fs smartcontract.PropertyState, events []manifest.Event, supportedStandards ...string) (*manifest.Manifest, error) {
var err error
if di.MainPkg == "" { if di.MainPkg == "" {
return nil, errors.New("no Main method was found") return nil, errors.New("no Main method was found")
} }
@ -374,19 +373,15 @@ func (di *DebugInfo) ConvertToManifest(fs smartcontract.PropertyState, supported
methods = append(methods, mMethod) methods = append(methods, mMethod)
} }
} }
events := make([]manifest.Event, len(di.Events))
for i, event := range di.Events {
events[i], err = event.ToManifestEvent()
if err != nil {
return nil, err
}
}
result := manifest.NewManifest(di.Hash) result := manifest.NewManifest(di.Hash)
result.Features = fs result.Features = fs
if supportedStandards != nil { if supportedStandards != nil {
result.SupportedStandards = supportedStandards result.SupportedStandards = supportedStandards
} }
if events == nil {
events = make([]manifest.Event, 0)
}
result.ABI = manifest.ABI{ result.ABI = manifest.ABI{
Hash: di.Hash, Hash: di.Hash,
Methods: methods, Methods: methods,

View file

@ -127,7 +127,7 @@ func unexportedMethod() int { return 1 }
} }
t.Run("convert to Manifest", func(t *testing.T) { t.Run("convert to Manifest", func(t *testing.T) {
actual, err := d.ConvertToManifest(smartcontract.HasStorage) actual, err := d.ConvertToManifest(smartcontract.HasStorage, nil)
require.NoError(t, err) require.NoError(t, err)
// note: offsets are hard to predict, so we just take them from the output // note: offsets are hard to predict, so we just take them from the output
expected := &manifest.Manifest{ expected := &manifest.Manifest{

View file

@ -88,7 +88,7 @@ func TestAppCall(t *testing.T) {
inner, di, err := compiler.CompileWithDebugInfo(strings.NewReader(srcInner)) inner, di, err := compiler.CompileWithDebugInfo(strings.NewReader(srcInner))
require.NoError(t, err) require.NoError(t, err)
m, err := di.ConvertToManifest(smartcontract.NoProperties) m, err := di.ConvertToManifest(smartcontract.NoProperties, nil)
require.NoError(t, err) require.NoError(t, err)
ih := hash.Hash160(inner) ih := hash.Hash160(inner)

View file

@ -232,7 +232,7 @@ func TestCreateBasicChain(t *testing.T) {
t.Logf("contractHash: %s", hash.Hash160(avm).StringLE()) t.Logf("contractHash: %s", hash.Hash160(avm).StringLE())
script := io.NewBufBinWriter() script := io.NewBufBinWriter()
m, err := di.ConvertToManifest(smartcontract.HasStorage) m, err := di.ConvertToManifest(smartcontract.HasStorage, nil)
require.NoError(t, err) require.NoError(t, err)
bs, err := m.MarshalJSON() bs, err := m.MarshalJSON()
require.NoError(t, err) require.NoError(t, err)