July 24, 2024

Eiger brings Move to the Polkadot ecosystem

Subscribe to our newsletter

We have now completed our work to integrate Move to Substrate. Using this pallet, builders can now integrate the Move VM, thereby allowing Substrate blockchains to execute Move smart contracts. Anyone can now create a Move parachain on Polkadot.

Overview

Since our last update in December, we have diligently worked on the Move Substrate integration. Eiger has now finished milestone three and delivered the Move pallet to be used in Substrate. To reach our goals, we had to:

Project repositories

MoveVM Adaptation

Our work included forking the original Diem-based MoveVM and doing adaptation work to achieve full compatibility within Substrate runtime. The work included the following:

Pallet Move Design

As mentioned above, the pallet shall provide the ability to publish Move modules and bundles, and the possibility to call those functionalities when executing Move scripts. Therefore, we defined three important extrinsic calls (pseudo code):

fn execute(origin, transaction_bc, gas_limit, cheque_limit)
fn publish_module(origin, bytecode, gas_limit)
fn publish_module_bundle(origin, bundle, gas_limit)

The signed origins will be turned into the Move datatype signer (authorised Move account access), and the following parameters in different namings will always be the compiled and serialised Move bytecode. 

The “execute” extrinsic is designed to be used in multiple signer scenarios (situations in which a smart contract needs to be signed by multiple participants). Parachain developers can configure a maximum lifetime and a maximum number of signers for those multiple signer script execution requests via the pallet’s configuration.

We will discuss the gas cost background a little more in detail later, but for now, let’s mention that you can limit those costs for executing or publishing Move bytecode.

Because the pallet enables Move smart contract developers to transfer tokens directly on the blockchain (internally using the Substrate trait Currency), the user can also specify a ‘cheque limit’ to specify the maximum amount of tokens used during the execution.

For parachain maintainers or, more in detail, the sudo user, one more extrinsic is available to update the two Move standard libraries, which technically are bundled but “owned” by sudo:

fn update_stdlib_bundle(origin, stdlib)

Gas Costs

Operations within the MoveVM can use variable CPU processing time and memory access, and gas fees address that issue. Every Move bytecode instruction and native function call has a fine-tuned defined gas cost. The MoveVM calculates the gas costs for each Move script execution, which are converted to the Substrate weights, which can then be turned into fees in the blockchain. The relation between MoveVM gas and Substrate weight is linear - the more gas the MoveVM consumes, the higher the Substrate fees will be for the end user.

By creating parameterised Substrate benchmark functions driven by gas costs and Move example code, we could generate an almost perfectly linear relationship between gas costs and Substrate weights. The Move example code used increased linearly between iterations of the running benchmarks. In case of later gas cost adoptions, only the Substrate-Move internal gas cost table for bytecode instructions needs to be tuned.

To avoid unnecessary gas costs, users can estimate the needed amount of gas for publishing a module/bundle and executing a Move script in advance using the tool "smove", an extended variant of the foregoing "move-cli".

Conclusion

The introduced pallet brings the interoperable Move ecosystem into the Substrate. Slightly tweaked and adapted, but the VM can handle Move language the way it's supposed to.

We have created comprehensive documentation and two tutorials as part of our commitment to user-friendliness and future updates. These resources provide a quick introduction to using the pallet and guide users on how to modify possible parameter updates in the future. Feel free to reach out to us at hello@eiger.co

Subscribe to news from us

to receive company news, client cases and technical articles on the latest applications of blockchain and web3.
Thank you! Please verify your subscription by clicking on the link we've sent you.
Oops! Something went wrong while submitting the form.