Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
46 changes: 23 additions & 23 deletions app/simple/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ func TestSimpleAppIntegration(t *testing.T) {
payloadBytes, err := json.Marshal(payload)
require.NoError(t, err)

withdrawStateBytes, withdrawEvents, _, withdrawals, _, fuel, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, payloadBytes, depositState2Bytes, wasmBytes)
withdrawStateBytes, withdrawEvents, _, withdrawals, _, fuel, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, uint64(0), payloadBytes, depositState2Bytes, wasmBytes)
require.Nil(t, err)
require.NotNil(t, withdrawStateBytes)
require.Len(t, withdrawEvents, 1)
Expand All @@ -158,7 +158,7 @@ func TestSimpleAppIntegration(t *testing.T) {
payloadBytes, err = json.Marshal(deanonPayload)
require.NoError(t, err)

deanonStateBytes, _, _, _, reportBytes, fuel, failure := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Deanonymize, payloadBytes, withdrawStateBytes, wasmBytes)
deanonStateBytes, _, _, _, reportBytes, fuel, failure := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Deanonymize, uint64(0), payloadBytes, withdrawStateBytes, wasmBytes)
require.Nil(t, failure)
require.NotNil(t, deanonStateBytes)
require.NotNil(t, reportBytes)
Expand All @@ -183,7 +183,7 @@ func TestSimpleAppIntegration(t *testing.T) {
payloadBytes, err = json.Marshal(payload)
require.NoError(t, err)

compareStateBytes, events, _, withdrawals, _, fuel, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, payloadBytes, withdrawStateBytes, wasmBytes)
compareStateBytes, events, _, withdrawals, _, fuel, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, uint64(0), payloadBytes, withdrawStateBytes, wasmBytes)
require.Nil(t, err)
require.NotNil(t, compareStateBytes)
require.Len(t, events, 1)
Expand Down Expand Up @@ -227,7 +227,7 @@ func TestSimpleAppIntegration_NullPayload(t *testing.T) {

t.Run("null payload json", func(t *testing.T) {
nullPayload := []byte{}
_, _, _, _, _, _, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, nullPayload, initialStateBytes, wasmBytes)
_, _, _, _, _, _, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, uint64(0), nullPayload, initialStateBytes, wasmBytes)
require.Nil(t, err)
})
}
Expand Down Expand Up @@ -268,7 +268,7 @@ func TestSimpleAppIntegration_NegativeScenarios(t *testing.T) {
payloadBytes, err := json.Marshal(payload)
require.NoError(t, err)

_, _, _, _, _, _, err = runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, payloadBytes, populatedStateBytes, wasmBytes)
_, _, _, _, _, _, err = runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, uint64(0), payloadBytes, populatedStateBytes, wasmBytes)
require.Error(t, err)
require.Contains(t, err.Error(), "Insufficient balance")
})
Expand All @@ -286,7 +286,7 @@ func TestSimpleAppIntegration_NegativeScenarios(t *testing.T) {
payloadBytes, err := json.Marshal(payload)
require.NoError(t, err)

_, _, _, _, _, _, err = runtime.ProcessRequest(ctx, appId, ethCommon.Address(nonExistentUser), common.Process, payloadBytes, populatedStateBytes, wasmBytes)
_, _, _, _, _, _, err = runtime.ProcessRequest(ctx, appId, ethCommon.Address(nonExistentUser), common.Process, uint64(0), payloadBytes, populatedStateBytes, wasmBytes)
require.Error(t, err)
require.Contains(t, err.Error(), "does not exist")
})
Expand All @@ -302,7 +302,7 @@ func TestSimpleAppIntegration_NegativeScenarios(t *testing.T) {
payloadBytes, err := json.Marshal(payload)
require.NoError(t, err)

_, _, _, _, _, _, err = runtime.ProcessRequest(ctx, appId, ethCommon.Address(nonExistentUser), common.Process, payloadBytes, populatedStateBytes, wasmBytes)
_, _, _, _, _, _, err = runtime.ProcessRequest(ctx, appId, ethCommon.Address(nonExistentUser), common.Process, uint64(0), payloadBytes, populatedStateBytes, wasmBytes)
require.Error(t, err)
require.Contains(t, err.Error(), "Account "+nonExistentUser.Hex()+" does not exist!")
})
Expand All @@ -312,7 +312,7 @@ func TestSimpleAppIntegration_NegativeScenarios(t *testing.T) {
payloadBytes, err := json.Marshal(payload)
require.NoError(t, err)

_, _, _, _, _, _, err = runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, payloadBytes, populatedStateBytes, wasmBytes)
_, _, _, _, _, _, err = runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, uint64(0), payloadBytes, populatedStateBytes, wasmBytes)
require.Error(t, err)
require.Contains(t, err.Error(), "Withdraw instruction is missing")
})
Expand All @@ -322,21 +322,21 @@ func TestSimpleAppIntegration_NegativeScenarios(t *testing.T) {
payloadBytes, err := json.Marshal(payload)
require.NoError(t, err)

_, _, _, _, _, _, err = runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, payloadBytes, populatedStateBytes, wasmBytes)
_, _, _, _, _, _, err = runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, uint64(0), payloadBytes, populatedStateBytes, wasmBytes)
require.Error(t, err)
require.Contains(t, err.Error(), "Compare instruction is missing")
})

t.Run("unsupported instruction type", func(t *testing.T) {
payload := `{"type":"invalid_instruction"}`
_, _, _, _, _, _, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, []byte(payload), populatedStateBytes, wasmBytes)
_, _, _, _, _, _, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, uint64(0), []byte(payload), populatedStateBytes, wasmBytes)
require.Error(t, err)
require.Contains(t, err.Error(), "Unsupported instruction type")
})

t.Run("invalid payload json", func(t *testing.T) {
payload := `{"type":"withdraw","withdraw":{"to":`
_, _, _, _, _, _, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, []byte(payload), populatedStateBytes, wasmBytes)
_, _, _, _, _, _, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, uint64(0), []byte(payload), populatedStateBytes, wasmBytes)
require.Error(t, err)
require.Contains(t, err.Error(), "Failed to parse payload instructions")
})
Expand Down Expand Up @@ -372,7 +372,7 @@ func TestSimpleAppIntegration_NilData(t *testing.T) {
payloadBytes, err := json.Marshal(deanonPayload)
require.NoError(t, err)

_, _, _, _, _, _, err = runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Deanonymize, payloadBytes, nil, wasmBytes)
_, _, _, _, _, _, err = runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Deanonymize, uint64(0), payloadBytes, nil, wasmBytes)
require.Error(t, err)
require.Contains(t, err.Error(), "Failed to parse application state")
})
Expand Down Expand Up @@ -407,7 +407,7 @@ func TestSimpleAppIntegration_InvalidWasm(t *testing.T) {

t.Run("process request with nil wasm", func(t *testing.T) {
payload := []byte(`{"type":"withdraw","withdraw":{"to":"some_address","amount":100}}`)
_, _, _, _, _, _, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, payload, initialStateBytes, nil)
_, _, _, _, _, _, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, uint64(0), payload, initialStateBytes, nil)
require.Error(t, err)
require.Contains(t, err.Error(), "failed to load module")
})
Expand All @@ -432,7 +432,7 @@ func TestSimpleAppIntegration_InvalidState(t *testing.T) {

t.Run("process request with invalid state", func(t *testing.T) {
payload := []byte(`{"type":"withdraw","withdraw":{"to":"some_address","amount":100}}`)
_, _, _, _, _, _, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, payload, invalidState, wasmBytes)
_, _, _, _, _, _, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, uint64(0), payload, invalidState, wasmBytes)
require.Error(t, err)
require.Contains(t, err.Error(), "Failed to parse application state")
})
Expand Down Expand Up @@ -493,7 +493,7 @@ func TestSimpleAppIntegration_MemoryStress(t *testing.T) {
require.NoError(t, ret, "failed to marshal withdraw payload at iteration %d", iterationIndex)

runtimeMutex.Lock()
processStateBytes, _, _, _, _, _, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(userAddress), common.Process, withdrawPayloadBytes, stateBytes, wasmBytes)
processStateBytes, _, _, _, _, _, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(userAddress), common.Process, uint64(0), withdrawPayloadBytes, stateBytes, wasmBytes)
require.Nil(t, err, "ProcessRequest failed at iteration %d", iterationIndex)
stateBytes = processStateBytes
runtimeMutex.Unlock()
Expand All @@ -506,7 +506,7 @@ func TestSimpleAppIntegration_MemoryStress(t *testing.T) {
deanonPayloadBytes, ret := json.Marshal(deanonPayload)
require.NoError(t, ret, "failed to marshal deanonymize payload at iteration %d", iterationIndex)
runtimeMutex.Lock()
deanonStateBytes, _, _, _, _, _, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(userAddress), common.Deanonymize, deanonPayloadBytes, stateBytes, wasmBytes)
deanonStateBytes, _, _, _, _, _, err := runtime.ProcessRequest(ctx, appId, ethCommon.Address(userAddress), common.Deanonymize, uint64(0), deanonPayloadBytes, stateBytes, wasmBytes)
require.Nil(t, err, "Deanonymize ProcessRequest failed at iteration %d", iterationIndex)
stateBytes = deanonStateBytes
runtimeMutex.Unlock()
Expand Down Expand Up @@ -573,7 +573,7 @@ func TestSimpleAppIntegration_MemoryCleanBetweenOps(t *testing.T) {
payloadBytes, err := json.Marshal(payload)
require.NoError(t, err)

stateBytes, _, _, _, _, _, failure2 := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, payloadBytes, stateBytes, wasmBytes)
stateBytes, _, _, _, _, _, failure2 := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, uint64(0), payloadBytes, stateBytes, wasmBytes)
require.Nil(t, failure2)
requireMemoryClean(t, runtime, wasmBytes, "memory leak after ProcessRequest (withdraw)")

Expand All @@ -592,7 +592,7 @@ func TestSimpleAppIntegration_MemoryCleanBetweenOps(t *testing.T) {
payloadBytes2, err := json.Marshal(payload2)
require.NoError(t, err)

stateBytes, _, _, _, _, _, failure2 = runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, payloadBytes2, stateBytes, wasmBytes)
stateBytes, _, _, _, _, _, failure2 = runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, uint64(0), payloadBytes2, stateBytes, wasmBytes)
require.Nil(t, failure2)
requireMemoryClean(t, runtime, wasmBytes, "memory leak after ProcessRequest (compare)")

Expand All @@ -604,7 +604,7 @@ func TestSimpleAppIntegration_MemoryCleanBetweenOps(t *testing.T) {
payloadBytes, err = json.Marshal(deanonPayload)
require.NoError(t, err)

_, _, _, _, _, _, failure = runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Deanonymize, payloadBytes, stateBytes, wasmBytes)
_, _, _, _, _, _, failure = runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Deanonymize, uint64(0), payloadBytes, stateBytes, wasmBytes)

require.Nil(t, failure)
requireMemoryClean(t, runtime, wasmBytes, "memory leak after GenerateDeanonymizationReport")
Expand Down Expand Up @@ -639,12 +639,12 @@ func TestSimpleAppIntegration_ErrorPathMemory(t *testing.T) {
payloadBytes, err := json.Marshal(payload)
require.NoError(t, err)

_, _, _, _, _, _, failure2 := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, payloadBytes, stateBytes, wasmBytes)
_, _, _, _, _, _, failure2 := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, uint64(0), payloadBytes, stateBytes, wasmBytes)
require.NotNil(t, failure2, "expected error for insufficient balance")
requireMemoryClean(t, runtime, wasmBytes, "memory leak after error result from ProcessRequest")

// Trigger error: non-existent account
_, _, _, _, _, _, failure2 = runtime.ProcessRequest(ctx, appId, ethCommon.Address(user2Address), common.Process, payloadBytes, stateBytes, wasmBytes)
_, _, _, _, _, _, failure2 = runtime.ProcessRequest(ctx, appId, ethCommon.Address(user2Address), common.Process, uint64(0), payloadBytes, stateBytes, wasmBytes)
require.NotNil(t, failure2, "expected error for non-existent account")
requireMemoryClean(t, runtime, wasmBytes, "memory leak after error result for non-existent account")

Expand Down Expand Up @@ -692,7 +692,7 @@ func TestSimpleAppIntegration_LargeResultRoundTrip(t *testing.T) {
payloadBytes, err := json.Marshal(deanonPayload)
require.NoError(t, err)

_, _, _, _, reportBytes, _, failure := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Deanonymize, payloadBytes, stateBytes, wasmBytes)
_, _, _, _, reportBytes, _, failure := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Deanonymize, uint64(0), payloadBytes, stateBytes, wasmBytes)
// Generate report: SerializeAndWriteResult must handle the large report via BytesToPtr
require.Nil(t, failure)
require.NotNil(t, reportBytes)
Expand Down Expand Up @@ -842,7 +842,7 @@ func TestERC20WithdrawalThroughWasm(t *testing.T) {
payloadBytes, err := json.Marshal(payload)
require.NoError(t, err)

newStateBytes, events, _, withdrawals, _, fuel, processFailure := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, payloadBytes, stateBytes, wasmBytes)
newStateBytes, events, _, withdrawals, _, fuel, processFailure := runtime.ProcessRequest(ctx, appId, ethCommon.Address(user1Address), common.Process, uint64(0), payloadBytes, stateBytes, wasmBytes)
require.Nil(t, processFailure)
require.NotNil(t, newStateBytes)
require.Len(t, events, 1)
Expand Down
3 changes: 2 additions & 1 deletion app/simple/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,9 @@ func deposit(appId int64, senderPtr *byte, senderLen int32, tokenPtr *byte, toke
}

//export process_request
func process_request(appId int64, senderPtr *byte, senderLen int32, requestType int32, payloadPtr *byte, payloadLen int32, statePtr *byte, stateLen int32) *byte {
func process_request(appId int64, senderPtr *byte, senderLen int32, requestType int32, blockTimestamp int64, payloadPtr *byte, payloadLen int32, statePtr *byte, stateLen int32) *byte {
_ = appId
_ = blockTimestamp
sender := types.PtrToAddress(senderPtr, senderLen)
payloadJSON := utils.PtrToString(payloadPtr, payloadLen)
stateJSON := utils.PtrToString(statePtr, stateLen)
Expand Down
6 changes: 6 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -132,3 +132,9 @@ require (
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

// Local replace for cross-repo development of the b-full dedup
// (SubtypeKeyMessage / DefaultSubtypeN / GenerateSubtype / AllSubtypes
// moved into vela-common-go/subtypes). Re-comment before any upstream PR
// per the [[preserve-local-replaces]] convention.
replace github.com/HorizenOfficial/vela-common-go => ../vela-common-go
Loading