native: save native contract state on deploy

This commit is contained in:
Evgenii Stratonikov 2020-05-07 14:03:14 +03:00
parent f9f3192b48
commit 301c1b7601

View file

@ -5,6 +5,8 @@ import (
"fmt" "fmt"
"github.com/nspcc-dev/neo-go/pkg/core/interop" "github.com/nspcc-dev/neo-go/pkg/core/interop"
"github.com/nspcc-dev/neo-go/pkg/core/state"
"github.com/nspcc-dev/neo-go/pkg/smartcontract"
"github.com/nspcc-dev/neo-go/pkg/vm" "github.com/nspcc-dev/neo-go/pkg/vm"
) )
@ -15,8 +17,23 @@ func Deploy(ic *interop.Context, _ *vm.VM) error {
} }
for _, native := range ic.Natives { for _, native := range ic.Natives {
md := native.Metadata()
ps := md.Manifest.ABI.EntryPoint.Parameters
params := make([]smartcontract.ParamType, len(ps))
for i := range ps {
params[i] = ps[i].Type
}
cs := &state.Contract{
Script: md.Script,
ParamList: params,
ReturnType: md.Manifest.ABI.EntryPoint.ReturnType,
}
if err := ic.DAO.PutContractState(cs); err != nil {
return err
}
if err := native.Initialize(ic); err != nil { if err := native.Initialize(ic); err != nil {
md := native.Metadata()
return fmt.Errorf("initializing %s native contract: %v", md.ServiceName, err) return fmt.Errorf("initializing %s native contract: %v", md.ServiceName, err)
} }
} }