vm: implement serialization interops in core package

This commit is contained in:
Evgenii Stratonikov 2019-11-05 17:10:52 +03:00
parent 412582dc78
commit ed758458d5
4 changed files with 22 additions and 12 deletions

View file

@ -736,3 +736,13 @@ func (ic *interopContext) assetRenew(v *vm.VM) error {
v.Estack().PushVal(expiration) v.Estack().PushVal(expiration)
return nil return nil
} }
// runtimeSerialize serializes top stack item into a ByteArray.
func (ic *interopContext) runtimeSerialize(v *vm.VM) error {
return vm.RuntimeSerialize(v)
}
// runtimeDeserialize deserializes ByteArray from a stack into an item.
func (ic *interopContext) runtimeDeserialize(v *vm.VM) error {
return vm.RuntimeDeserialize(v)
}

View file

@ -64,8 +64,8 @@ func (ic *interopContext) getSystemInteropMap() map[string]vm.InteropFuncPrice {
"System.Storage.PutEx": {Func: ic.storagePutEx, Price: 0}, "System.Storage.PutEx": {Func: ic.storagePutEx, Price: 0},
"System.StorageContext.AsReadOnly": {Func: ic.storageContextAsReadOnly, Price: 1}, "System.StorageContext.AsReadOnly": {Func: ic.storageContextAsReadOnly, Price: 1},
"System.Transaction.GetHash": {Func: ic.txGetHash, Price: 1}, "System.Transaction.GetHash": {Func: ic.txGetHash, Price: 1},
// "System.Runtime.Deserialize": {Func: ic.runtimeDeserialize, Price: 1}, "System.Runtime.Deserialize": {Func: ic.runtimeDeserialize, Price: 1},
// "System.Runtime.Serialize": {Func: ic.runtimeSerialize, Price: 1}, "System.Runtime.Serialize": {Func: ic.runtimeSerialize, Price: 1},
} }
} }
@ -148,8 +148,8 @@ func (ic *interopContext) getNeoInteropMap() map[string]vm.InteropFuncPrice {
// "Neo.Iterator.Key": {Func: ic.iteratorKey, Price: 1}, // "Neo.Iterator.Key": {Func: ic.iteratorKey, Price: 1},
// "Neo.Iterator.Keys": {Func: ic.iteratorKeys, Price: 1}, // "Neo.Iterator.Keys": {Func: ic.iteratorKeys, Price: 1},
// "Neo.Iterator.Values": {Func: ic.iteratorValues, Price: 1}, // "Neo.Iterator.Values": {Func: ic.iteratorValues, Price: 1},
// "Neo.Runtime.Deserialize": {Func: ic.runtimeDeserialize, Price: 1}, "Neo.Runtime.Deserialize": {Func: ic.runtimeDeserialize, Price: 1},
// "Neo.Runtime.Serialize": {Func: ic.runtimeSerialize, Price: 1}, "Neo.Runtime.Serialize": {Func: ic.runtimeSerialize, Price: 1},
// "Neo.Storage.Find": {Func: ic.storageFind, Price: 1}, // "Neo.Storage.Find": {Func: ic.storageFind, Price: 1},
// "Neo.Witness.GetVerificationScript": {Func: ic.witnessGetVerificationScript, Price: 100}, // "Neo.Witness.GetVerificationScript": {Func: ic.witnessGetVerificationScript, Price: 100},

View file

@ -22,8 +22,8 @@ func runtimeNotify(vm *VM) error {
return nil return nil
} }
// runtimeSerialize handles syscalls System.Runtime.Serialize and Neo.Runtime.Serialize. // RuntimeSerialize handles syscalls System.Runtime.Serialize and Neo.Runtime.Serialize.
func runtimeSerialize(vm *VM) error { func RuntimeSerialize(vm *VM) error {
item := vm.Estack().Pop() item := vm.Estack().Pop()
data, err := serializeItem(item.value) data, err := serializeItem(item.value)
if err != nil { if err != nil {
@ -37,8 +37,8 @@ func runtimeSerialize(vm *VM) error {
return nil return nil
} }
// runtimeDeserialize handles syscalls System.Runtime.Deserialize and Neo.Runtime.Deserialize. // RuntimeDeserialize handles syscalls System.Runtime.Deserialize and Neo.Runtime.Deserialize.
func runtimeDeserialize(vm *VM) error { func RuntimeDeserialize(vm *VM) error {
data := vm.Estack().Pop().Bytes() data := vm.Estack().Pop().Bytes()
item, err := deserializeItem(data) item, err := deserializeItem(data)

View file

@ -86,10 +86,10 @@ func New() *VM {
// Register native interop hooks. // Register native interop hooks.
vm.RegisterInteropFunc("Neo.Runtime.Log", runtimeLog, 1) vm.RegisterInteropFunc("Neo.Runtime.Log", runtimeLog, 1)
vm.RegisterInteropFunc("Neo.Runtime.Notify", runtimeNotify, 1) vm.RegisterInteropFunc("Neo.Runtime.Notify", runtimeNotify, 1)
vm.RegisterInteropFunc("Neo.Runtime.Serialize", runtimeSerialize, 1) vm.RegisterInteropFunc("Neo.Runtime.Serialize", RuntimeSerialize, 1)
vm.RegisterInteropFunc("System.Runtime.Serialize", runtimeSerialize, 1) vm.RegisterInteropFunc("System.Runtime.Serialize", RuntimeSerialize, 1)
vm.RegisterInteropFunc("Neo.Runtime.Deserialize", runtimeDeserialize, 1) vm.RegisterInteropFunc("Neo.Runtime.Deserialize", RuntimeDeserialize, 1)
vm.RegisterInteropFunc("System.Runtime.Deserialize", runtimeDeserialize, 1) vm.RegisterInteropFunc("System.Runtime.Deserialize", RuntimeDeserialize, 1)
return vm return vm
} }