Skip to content

Instantly share code, notes, and snippets.

@s1na
Created June 4, 2019 12:43
Show Gist options
  • Save s1na/ec92dfbb3fb5eee6153de30dc1b22139 to your computer and use it in GitHub Desktop.
Save s1na/ec92dfbb3fb5eee6153de30dc1b22139 to your computer and use it in GitHub Desktop.
Hello world scout script in assemblyscript

A simple scout script which simply increments the last byte of the pre state root, and saves that as post state root.

Build

Install assemblyscript:

npm i -D AssemblyScript/assemblyscript

Compile source:

asc index.ts -b build/optimized.wasm -t build/optimized.wat --sourceMap --validate --optimize --noAssert

Run

Put astest.yaml in scout's directory, fix the path to point to the built wasm module and run:

target/release/phase2-scout astest.yaml
beacon_state:
execution_scripts:
- path/to/module.wasm
shard_pre_state:
exec_env_states:
- "0000000000000000000000000000000000000000000000000000000000000002"
shard_blocks:
- env: 0
data: ""
- env: 0
data: ""
shard_post_state:
exec_env_states:
- "0000000000000000000000000000000000000000000000000000000000000004"
export declare function eth2_loadPreStateRoot(offset: u32): void;
export declare function eth2_blockDataSize(): u32;
export declare function eth2_blockDataCopy(outputOffset: u32, offset: u32, length: u32): void;
export declare function eth2_savePostStateRoot(offset: u32): void;
export declare function eth2_pushNewDeposit(offset: u32, length: u32): void;
import "allocator/tlsf"
import * as env from './env'
export function main(): void {
var preStateRootPtr: usize = memory.allocate(32)
env.eth2_loadPreStateRoot(preStateRootPtr)
var postStateRootPtr: usize = memory.allocate(32)
memory.copy(postStateRootPtr, preStateRootPtr, 32)
var lastByte: u8 = load<u8>(preStateRootPtr, 31)
store<u8>(postStateRootPtr, lastByte + 1, 31)
env.eth2_savePostStateRoot(postStateRootPtr)
}
{
"extends": "node_modules/assemblyscript/std/assembly.json",
"include": [
"./**/*.ts"
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment