Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[x/programs] add program abstraction #660

Merged
merged 29 commits into from
Jan 7, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
c71e603
Move fixtures into tests directory
hexfusion Dec 14, 2023
903fefe
Abstract engine from runtime
hexfusion Dec 14, 2023
ff0adb6
React to changes
hexfusion Dec 14, 2023
cea5ea5
Nits
hexfusion Dec 15, 2023
f25a144
Review comments
hexfusion Dec 21, 2023
29d3bbe
Clarify debug mode
hexfusion Dec 21, 2023
a75af73
Nit
hexfusion Dec 21, 2023
3d03b4c
Add host abstraction
hexfusion Dec 15, 2023
2b7ba48
React to changes
hexfusion Dec 15, 2023
3ac1a3f
Cleanup
hexfusion Dec 21, 2023
195c96a
Move program from runtime
hexfusion Dec 22, 2023
af1201b
Add program abstraction
hexfusion Dec 22, 2023
597ff1a
Implement runtime instance and react to changes
hexfusion Dec 22, 2023
2fbdc8e
Nit
hexfusion Dec 22, 2023
fa5565d
Add RegisterImportWrapFn
hexfusion Dec 22, 2023
7485e7c
Update examples
hexfusion Dec 22, 2023
e1bbfc4
Show example of wrap import function impl
hexfusion Dec 22, 2023
8dbe3ed
Remove stale docs
hexfusion Dec 22, 2023
678a8cb
Impliment pstate with wrap functionality
hexfusion Dec 22, 2023
7e5f311
license header lint
samliok Dec 27, 2023
95aa598
remove hardcoded wrapper funcitons, fixed pstate bugs
samliok Jan 6, 2024
13ff0a6
lint
samliok Jan 6, 2024
cee952c
lint
samliok Jan 6, 2024
5c359d9
Merge branch 'dynamic_args' into refactor-statekey
samliok Jan 6, 2024
15b84b5
Revert "Merge branch 'dynamic_args' into refactor-statekey"
samliok Jan 6, 2024
3a23ebb
Revert "Revert "Merge branch 'dynamic_args' into refactor-statekey""
samliok Jan 6, 2024
7f323b2
lint
samliok Jan 6, 2024
b5e64fb
memory tests
samliok Jan 6, 2024
d175d2c
create WAT program instead of memory.wasm
samliok Jan 6, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Revert "Merge branch 'dynamic_args' into refactor-statekey"
This reverts commit 5c359d9, reversing
changes made to cee952c.
  • Loading branch information
samliok committed Jan 6, 2024
commit 15b84b5fb0313a583ff8eaf5e91b116ceb0aff95
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
* @patrick-ogrady
/x/programs/ @samliok @dboehm-avalabs @richardpringle
/x/programs/ @hexfusion @samliok @patrick-ogrady
2 changes: 1 addition & 1 deletion chain/mock_action.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion chain/mock_auth.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion chain/mock_auth_factory.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion chain/mock_rules.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion state/mock_immutable.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion state/mock_mutable.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion state/mock_view.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion vm/mock_controller.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

102 changes: 0 additions & 102 deletions x/programs/runtime/runtime_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -307,105 +307,3 @@ func TestWithMaxWasmStack(t *testing.T) {
_, err = runtime.Call(context.Background(), "get")
require.ErrorIs(err, program.ErrTrapStackOverflow)
}

func TestInfiniteLoop(t *testing.T) {
require := require.New(t)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()

// infinite loop
wasm, err := wasmtime.Wat2Wasm(`
(module
(func (export "get_guest")
(loop
br 0)
)
)
`)
require.NoError(err)
maxUnits := uint64(10000)
cfg := NewConfig().SetLimitMaxMemory(1 * MemoryPageSize)
require.NoError(err)
eng := engine.New(engine.NewConfig())
runtime := New(logging.NoLog{}, eng, host.NoSupportedImports, cfg)
err = runtime.Initialize(ctx, wasm, maxUnits)
require.NoError(err)

_, err = runtime.Call(ctx, "get")
require.ErrorIs(err, ErrTrapInterrupt)
}

func TestMetering(t *testing.T) {
require := require.New(t)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()

// example has 2 ops codes and should cost 2 units
wasm, err := wasmtime.Wat2Wasm(`
(module $test
(type (;0;) (func (result i32)))
(export "get_guest" (func 0))
(func (;0;) (type 0) (result i32)
(local i32)
i32.const 1
)
)
`)
require.NoError(err)
maxUnits := uint64(20)
cfg := NewConfig().SetLimitMaxMemory(1 * MemoryPageSize)
require.NoError(err)
eng := engine.New(engine.NewConfig())
runtime := New(logging.NoLog{}, eng, host.NoSupportedImports, cfg)
err = runtime.Initialize(ctx, wasm, maxUnits)
require.NoError(err)
balance, err := runtime.Meter().GetBalance()
require.NoError(err)

require.Equal(balance, maxUnits)
for i := 0; i < 10; i++ {
_, err = runtime.Call(ctx, "get")
require.NoError(err)
}
balance, err = runtime.Meter().GetBalance()
require.NoError(err)
require.Equal(balance, uint64(0))
}

func TestMeterAfterStop(t *testing.T) {
require := require.New(t)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()

// example has 2 ops codes and should cost 2 units
wasm, err := wasmtime.Wat2Wasm(`
(module $test
(type (;0;) (func (result i32)))
(export "get_guest" (func 0))
(func (;0;) (type 0) (result i32)
(local i32)
i32.const 1
)
)
`)
require.NoError(err)
maxUnits := uint64(20)
cfg := NewConfig().SetLimitMaxMemory(1 * MemoryPageSize)
require.NoError(err)
eng := engine.New(engine.NewConfig())
runtime := New(logging.NoLog{}, eng, host.NoSupportedImports, cfg)
err = runtime.Initialize(ctx, wasm, maxUnits)
require.NoError(err)

// spend 2 units
_, err = runtime.Call(ctx, "get")
require.NoError(err)
// stop engine
runtime.Stop()
_, err = runtime.Call(ctx, "get")
require.ErrorIs(err, ErrTrapUnreachableCodeReached)
// ensure meter is still operational
balance, err := runtime.Meter().GetBalance()
require.NoError(err)
require.Equal(balance, maxUnits-2)
}
Loading