spacemeshos / svm

SVM - Spacemesh Virtual Machine
https://spacemesh.io
MIT License
85 stars 14 forks source link

Copy the `Transaction` to the Wasm Instance Memory #462

Open YaronWittenstein opened 2 years ago

YaronWittenstein commented 2 years ago

Depends on: #456 #457 #460 #461

As things stand now, the Runtime takes the relevant calldata piece of the transaction and it copies only it to the Wasm Instance Memory before running it.

maybe better to rename: ctor_data to ctordata

https://github.com/spacemeshos/svm/blob/6edb73de199fafce0953f82af061ca1090ff911c/crates/runtime/src/runtime/runtime.rs#L676

This issue wants to achieve two things:

Implementation Proposal

Update the Call struct (see also #458)

Since this issue depends on #456 we should have now the binary transaction accessible within the FuncEnv.

The run method in the Runtime is a lower-level abstraction that will execute code. Each execution will end up calling this function for running: https://github.com/spacemeshos/svm/blob/6edb73de199fafce0953f82af061ca1090ff911c/crates/runtime/src/runtime/runtime.rs#L104

It seems that if we'll update the Call struct (might have a different name by now - see #458) https://github.com/spacemeshos/svm/blob/6edb73de199fafce0953f82af061ca1090ff911c/crates/runtime/src/runtime/call.rs

to be like:

// `Call` might have been renamed by now
#[derive(Debug, Clone, PartialEq)]
pub struct Call {
  // It's enough to just specify what the `calldata` means,
  // we don't need the `func_input` anymore.
  pub kind: TxPart, 
}

Since the calldata is held in the binary Transaction we can manage by just specifying that the Call is for executing a verify/ctor/call tx function. If we decide to have also authorize then it'd be easy to adapt.

Adapt how the calldata offsets are extracted

TBD