design
design copied to clipboard
Propose an ewasm subset for precompiles on the main chain
The only features ewasm would need to expose are:
useGas- calldata access (
calldatacopy/calldatasize) return/revert
This could be a way to get wasm VMs implemented and experimented with in a more controlled environment on the main chain.
It is not clear whether the precompiles would have "magic gas calculation rules" or just use "a metering process" on them.
BTW, can you pass reference to calldata buffer directly to the contract main function?
Sample precompile in Rust: https://github.com/ewasm/ewasm-precompile-sha256/blob/master/src/lib.rs
Great idea. More generally, we can discuss how to constrain Wasm and EEI to get nice properties, such as allowing "magic gas calculation".
Proposal to expose these functions from the EEI:
useGasgetCallDataSizecallDataCopygetCaller(good for contracts like blockhash - or should begetTxOrigin?!)getCallValue(not necessary, but could be useful to reject calls with value)returnrevert