diff --git a/x/tally/keeper/abci.go b/x/tally/keeper/abci.go index e0b9f8d1..3b71ec4e 100644 --- a/x/tally/keeper/abci.go +++ b/x/tally/keeper/abci.go @@ -200,8 +200,16 @@ func (k Keeper) FilterAndTally(ctx sdk.Context, req types.Request) (tallyvm.VmRe "arguments", args, ) vmRes := tallyvm.ExecuteTallyVm(tallyWasm.Bytecode, args, map[string]string{ - "VM_MODE": "tally", - "CONSENSUS": fmt.Sprintf("%v", consensus), + "VM_MODE": "tally", + "CONSENSUS": fmt.Sprintf("%v", consensus), + "DR_ID": req.ID, + "DR_INPUT": req.DrInputs, + "BINARY_ID": req.DrBinaryID, + "DR_REPLICATION_FACTOR": fmt.Sprintf("%v", req.ReplicationFactor), + "DR_GAS_PRICE": req.GasPrice, + "DR_GAS_LIMIT": req.GasLimit, + "DR_MEMO": req.Memo, + "DR_PAYBACK_ADDRESS": req.PaybackAddress, }) return vmRes, consensus, nil } diff --git a/x/tally/keeper/abci_test.go b/x/tally/keeper/abci_test.go index 061df409..1b22fec3 100644 --- a/x/tally/keeper/abci_test.go +++ b/x/tally/keeper/abci_test.go @@ -9,7 +9,7 @@ import ( "github.com/sedaprotocol/seda-wasm-vm/tallyvm" - "github.com/sedaprotocol/seda-chain/x/wasm-storage/keeper/testdata" + "github.com/sedaprotocol/seda-chain/x/tally/keeper/testdata" wasmstoragetypes "github.com/sedaprotocol/seda-chain/x/wasm-storage/types" ) @@ -66,25 +66,147 @@ func TestExecuteTally(t *testing.T) { f := initFixture(t) ctx := f.Context() + // NOTE: consensus_filter = "AQAAAAAAAAALcmVzdWx0LnRleHQ=" + // represents mode filter with data path "result.text". tests := []struct { name string resp []byte wantErrStr []string }{ { - name: "None filter - Tally 8ade60", - resp: []byte(`[{"consensus_filter":"AAEBAQE=","commits":{},"dr_binary_id":"9471d36add157cd7eaa32a42b5ddd091d5d5d396bf9ad67938a4fc40209df6cf","dr_inputs":"","gas_limit":"20","gas_price":"10","height":1661661742461173125,"id":"fba5314c57e52da7d1a2245d18c670fde1cb8c237062d2a1be83f449ace0932e","memo":"","payback_address":"","replication_factor":3,"reveals":{"1b85dfb9420e6757630a0db2280fa1787ec8c1e419a6aca76dbbfe8ef6e17521":{"exit_code":0,"gas_used":"10","reveal":"Ng==","salt":"05952214b2ba3549a8d627c57d2d0dd1b0a2ce65c46e3b2f25c273464be8ba5f"},"1dae290cd880b79d21079d89aee3460cf8a7d445fb35cade70cf8aa96924441c":{"exit_code":0,"gas_used":"10","reveal":"LQ==","salt":"05952214b2ba3549a8d627c57d2d0dd1b0a2ce65c46e3b2f25c273464be8ba5f"},"421e735518ef77fc1209a9d3585cdf096669b52ea68549e2ce048d4919b4c8c0":{"exit_code":0,"gas_used":"10","reveal":"DQ==","salt":"05952214b2ba3549a8d627c57d2d0dd1b0a2ce65c46e3b2f25c273464be8ba5f"}},"seda_payload":"","tally_binary_id":"8ade60039246740faa80bf424fc29e79fe13b32087043e213e7bc36620111f6b","tally_inputs":"bXktdGFsbHktaW5wdXRz","version":"1.0.0"},{"consensus_filter":"AAEBAQE=","commits":{},"dr_binary_id":"9471d36add157cd7eaa32a42b5ddd091d5d5d396bf9ad67938a4fc40209df6cf","dr_inputs":"","gas_limit":"20","gas_price":"10","height":9859593541233596221,"id":"d4e40f45fbf529134926acf529baeb6d4f37b5c380d7ab6b934833e7c00d725f","memo":"","payback_address":"","replication_factor":1,"reveals":{"c9a4c8f1e70a0059a88b4768a920e41c95c587b8387ea3286d8fa4ee3b68b038":{"exit_code":0,"gas_used":"10","reveal":"Yw==","salt":"f837455a930a66464f1c50586dc745a6b14ea807727c6069acac24c9558b6dbf"}},"seda_payload":"","tally_binary_id":"8ade60039246740faa80bf424fc29e79fe13b32087043e213e7bc36620111f6b","tally_inputs":"bXktdGFsbHktaW5wdXRz","version":"1.0.0"}]`), - wantErrStr: []string{"seda_common::msgs::data_requests::types::DataRequest; key:", "not found"}, - }, - { - name: "None filter - Tally f49da6", - resp: []byte(`[{"consensus_filter":"AAEBAQE=","commits":{},"dr_binary_id":"9471d36add157cd7eaa32a42b5ddd091d5d5d396bf9ad67938a4fc40209df6cf","dr_inputs":"","gas_limit":"20","gas_price":"10","height":1661661742461173125,"id":"fba5314c57e52da7d1a2245d18c670fde1cb8c237062d2a1be83f449ace0932e","memo":"","payback_address":"","replication_factor":3,"reveals":{"1b85dfb9420e6757630a0db2280fa1787ec8c1e419a6aca76dbbfe8ef6e17521":{"exit_code":0,"gas_used":"10","reveal":"Ng==","salt":"05952214b2ba3549a8d627c57d2d0dd1b0a2ce65c46e3b2f25c273464be8ba5f"},"1dae290cd880b79d21079d89aee3460cf8a7d445fb35cade70cf8aa96924441c":{"exit_code":0,"gas_used":"10","reveal":"LQ==","salt":"05952214b2ba3549a8d627c57d2d0dd1b0a2ce65c46e3b2f25c273464be8ba5f"},"421e735518ef77fc1209a9d3585cdf096669b52ea68549e2ce048d4919b4c8c0":{"exit_code":0,"gas_used":"10","reveal":"DQ==","salt":"05952214b2ba3549a8d627c57d2d0dd1b0a2ce65c46e3b2f25c273464be8ba5f"}},"seda_payload":"","tally_binary_id":"8ade60039246740faa80bf424fc29e79fe13b32087043e213e7bc36620111f6b","tally_inputs":"bXktdGFsbHktaW5wdXRz","version":"1.0.0"},{"consensus_filter":"AAEBAQE=","commits":{},"dr_binary_id":"9471d36add157cd7eaa32a42b5ddd091d5d5d396bf9ad67938a4fc40209df6cf","dr_inputs":"","gas_limit":"20","gas_price":"10","height":9859593541233596221,"id":"d4e40f45fbf529134926acf529baeb6d4f37b5c380d7ab6b934833e7c00d725f","memo":"","payback_address":"","replication_factor":1,"reveals":{"c9a4c8f1e70a0059a88b4768a920e41c95c587b8387ea3286d8fa4ee3b68b038":{"exit_code":0,"gas_used":"10","reveal":"Yw==","salt":"f837455a930a66464f1c50586dc745a6b14ea807727c6069acac24c9558b6dbf"}},"seda_payload":"","tally_binary_id":"8ade60039246740faa80bf424fc29e79fe13b32087043e213e7bc36620111f6b","tally_inputs":"bXktdGFsbHktaW5wdXRz","version":"1.0.0"}]`), + name: "None filter", + resp: []byte(`[ + { + "consensus_filter":"AAEBAQE=", + "commits":{}, + "dr_binary_id":"9471d36add157cd7eaa32a42b5ddd091d5d5d396bf9ad67938a4fc40209df6cf", + "dr_inputs":"", + "gas_limit":"20", + "gas_price":"10", + "height":1661661742461173125, + "id":"fba5314c57e52da7d1a2245d18c670fde1cb8c237062d2a1be83f449ace0932e", + "memo":"", + "payback_address":"", + "replication_factor":3, + "reveals":{ + "1b85dfb9420e6757630a0db2280fa1787ec8c1e419a6aca76dbbfe8ef6e17521":{ + "exit_code":0, + "gas_used":"10", + "reveal":"Ng==", + "salt":"05952214b2ba3549a8d627c57d2d0dd1b0a2ce65c46e3b2f25c273464be8ba5f" + }, + "1dae290cd880b79d21079d89aee3460cf8a7d445fb35cade70cf8aa96924441c":{ + "exit_code":0, + "gas_used":"10", + "reveal":"LQ==", + "salt":"05952214b2ba3549a8d627c57d2d0dd1b0a2ce65c46e3b2f25c273464be8ba5f" + }, + "421e735518ef77fc1209a9d3585cdf096669b52ea68549e2ce048d4919b4c8c0":{ + "exit_code":0, + "gas_used":"10", + "reveal":"DQ==", + "salt":"05952214b2ba3549a8d627c57d2d0dd1b0a2ce65c46e3b2f25c273464be8ba5f" + } + }, + "seda_payload":"", + "tally_binary_id":"8ade60039246740faa80bf424fc29e79fe13b32087043e213e7bc36620111f6b", + "tally_inputs":"bXktdGFsbHktaW5wdXRz", + "version":"1.0.0" + }, + { + "consensus_filter":"AAEBAQE=", + "commits":{}, + "dr_binary_id":"9471d36add157cd7eaa32a42b5ddd091d5d5d396bf9ad67938a4fc40209df6cf", + "dr_inputs":"", + "gas_limit":"20", + "gas_price":"10", + "height":9859593541233596221, + "id":"d4e40f45fbf529134926acf529baeb6d4f37b5c380d7ab6b934833e7c00d725f", + "memo":"", + "payback_address":"", + "replication_factor":1, + "reveals":{ + "c9a4c8f1e70a0059a88b4768a920e41c95c587b8387ea3286d8fa4ee3b68b038":{ + "exit_code":0, + "gas_used":"10", + "reveal":"Yw==", + "salt":"f837455a930a66464f1c50586dc745a6b14ea807727c6069acac24c9558b6dbf" + } + }, + "seda_payload":"", + "tally_binary_id":"8ade60039246740faa80bf424fc29e79fe13b32087043e213e7bc36620111f6b", + "tally_inputs":"bXktdGFsbHktaW5wdXRz", + "version":"1.0.0" + } + ]`), wantErrStr: []string{"seda_common::msgs::data_requests::types::DataRequest; key:", "not found"}, }, { name: "Mode filter", - // consensus_filter = "AQAAAAAAAAALcmVzdWx0LnRleHQ=" represents mode filter with data path "result.text". - resp: []byte(`[{"commits":{},"dr_binary_id":"9471d36add157cd7eaa32a42b5ddd091d5d5d396bf9ad67938a4fc40209df6cf","dr_inputs":"","gas_limit":"20","gas_price":"10","height":1661661742461173200,"id":"fba5314c57e52da7d1a2245d18c670fde1cb8c237062d2a1be83f449ace0932e","memo":"","payback_address":"","consensus_filter":"AQAAAAAAAAALcmVzdWx0LnRleHQ=","replication_factor":3,"reveals":{"1b85dfb9420e6757630a0db2280fa1787ec8c1e419a6aca76dbbfe8ef6e17521":{"exit_code":0,"gas_used":"10","reveal":"eyJyZXN1bHQiOiB7InRleHQiOiAiQSIsICJudW1iZXIiOiAxMH19","salt":"05952214b2ba3549a8d627c57d2d0dd1b0a2ce65c46e3b2f25c273464be8ba5f"},"1dae290cd880b79d21079d89aee3460cf8a7d445fb35cade70cf8aa96924441c":{"exit_code":0,"gas_used":"10","reveal":"eyJyZXN1bHQiOiB7InRleHQiOiAiQSIsICJudW1iZXIiOiAyMH19","salt":"05952214b2ba3549a8d627c57d2d0dd1b0a2ce65c46e3b2f25c273464be8ba5f"},"421e735518ef77fc1209a9d3585cdf096669b52ea68549e2ce048d4919b4c8c0":{"exit_code":0,"gas_used":"10","reveal":"eyJyZXN1bHQiOiB7InRleHQiOiAiQiIsICJudW1iZXIiOiAxMH19","salt":"05952214b2ba3549a8d627c57d2d0dd1b0a2ce65c46e3b2f25c273464be8ba5f"}},"seda_payload":"","tally_binary_id":"8ade60039246740faa80bf424fc29e79fe13b32087043e213e7bc36620111f6b","tally_inputs":"AAEBAQE=","version":"1.0.0"},{"commits":{},"dr_binary_id":"9471d36add157cd7eaa32a42b5ddd091d5d5d396bf9ad67938a4fc40209df6cf","dr_inputs":"","gas_limit":"20","gas_price":"10","height":9859593541233596000,"id":"d4e40f45fbf529134926acf529baeb6d4f37b5c380d7ab6b934833e7c00d725f","memo":"","payback_address":"","consensus_filter":"AQAAAAAAAAALcmVzdWx0LnRleHQ=","replication_factor":1,"reveals":{"c9a4c8f1e70a0059a88b4768a920e41c95c587b8387ea3286d8fa4ee3b68b038":{"exit_code":0,"gas_used":"10","reveal":"eyJyZXN1bHQiOiB7InRleHQiOiAiQiIsICJudW1iZXIiOiAxMH19","salt":"f837455a930a66464f1c50586dc745a6b14ea807727c6069acac24c9558b6dbf"}},"seda_payload":"","tally_binary_id":"8ade60039246740faa80bf424fc29e79fe13b32087043e213e7bc36620111f6b","tally_inputs":"AAEBAQE=","version":"1.0.0"}]`), + resp: []byte(`[ + { + "commits":{}, + "dr_binary_id":"9471d36add157cd7eaa32a42b5ddd091d5d5d396bf9ad67938a4fc40209df6cf", + "dr_inputs":"", + "gas_limit":"20", + "gas_price":"10", + "height":1661661742461173200, + "id":"fba5314c57e52da7d1a2245d18c670fde1cb8c237062d2a1be83f449ace0932e", + "memo":"mock_data_request_num_one", + "payback_address":"YrzimoSJXwpA7ju71AkhkirkDCU=", + "consensus_filter":"AQAAAAAAAAALcmVzdWx0LnRleHQ=", + "replication_factor":3, + "reveals":{ + "1b85dfb9420e6757630a0db2280fa1787ec8c1e419a6aca76dbbfe8ef6e17521":{ + "exit_code":0, + "gas_used":"10", + "reveal":"eyJyZXN1bHQiOiB7InRleHQiOiAiQSIsICJudW1iZXIiOiAxMH19", + "salt":"05952214b2ba3549a8d627c57d2d0dd1b0a2ce65c46e3b2f25c273464be8ba5f" + }, + "1dae290cd880b79d21079d89aee3460cf8a7d445fb35cade70cf8aa96924441c":{ + "exit_code":0, + "gas_used":"10", + "reveal":"eyJyZXN1bHQiOiB7InRleHQiOiAiQSIsICJudW1iZXIiOiAyMH19", + "salt":"05952214b2ba3549a8d627c57d2d0dd1b0a2ce65c46e3b2f25c273464be8ba5f" + }, + "421e735518ef77fc1209a9d3585cdf096669b52ea68549e2ce048d4919b4c8c0":{ + "exit_code":0, + "gas_used":"10", + "reveal":"eyJyZXN1bHQiOiB7InRleHQiOiAiQiIsICJudW1iZXIiOiAxMH19", + "salt":"05952214b2ba3549a8d627c57d2d0dd1b0a2ce65c46e3b2f25c273464be8ba5f" + } + }, + "seda_payload":"", + "tally_binary_id":"5f3b31bff28c64a143119ee6389d62e38767672daace9c36db54fa2d18e9f391", + "tally_inputs":"AAEBAQE=", + "version":"1.0.0" + }, + { + "commits":{}, + "dr_binary_id":"9471d36add157cd7eaa32a42b5ddd091d5d5d396bf9ad67938a4fc40209df6cf", + "dr_inputs":"", + "gas_limit":"20", + "gas_price":"10", + "height":9859593541233596000, + "id":"d4e40f45fbf529134926acf529baeb6d4f37b5c380d7ab6b934833e7c00d725f", + "memo":"mock_data_request_num_two", + "payback_address":"YrzimoSJXwpA7ju71AkhkirkDCU=", + "consensus_filter":"AQAAAAAAAAALcmVzdWx0LnRleHQ=", + "replication_factor":1, + "reveals":{ + "c9a4c8f1e70a0059a88b4768a920e41c95c587b8387ea3286d8fa4ee3b68b038":{ + "exit_code":0, + "gas_used":"10", + "reveal":"eyJyZXN1bHQiOiB7InRleHQiOiAiQiIsICJudW1iZXIiOiAxMH19", + "salt":"f837455a930a66464f1c50586dc745a6b14ea807727c6069acac24c9558b6dbf" + } + }, + "seda_payload":"", + "tally_binary_id":"5f3b31bff28c64a143119ee6389d62e38767672daace9c36db54fa2d18e9f391", + "tally_inputs":"AAEBAQE=", + "version":"1.0.0" + } + ]`), wantErrStr: []string{"seda_common::msgs::data_requests::types::DataRequest; key:", "not found"}, }, } @@ -98,7 +220,7 @@ func TestExecuteTally(t *testing.T) { err := f.wasmStorageKeeper.DataRequestWasm.Set(ctx, tallyWasm.Hash, tallyWasm) require.NoError(t, err) - tallyWasm = wasmstoragetypes.NewDataRequestWasm(testdata.SampleTallyWasm(), ctx.BlockTime(), ctx.BlockHeight(), 100) + tallyWasm = wasmstoragetypes.NewDataRequestWasm(testdata.SampleTallyWasm2(), ctx.BlockTime(), ctx.BlockHeight(), 100) err = f.wasmStorageKeeper.DataRequestWasm.Set(ctx, tallyWasm.Hash, tallyWasm) require.NoError(t, err) diff --git a/x/tally/keeper/integration_test.go b/x/tally/keeper/integration_test.go index d9301f10..836a1c2b 100644 --- a/x/tally/keeper/integration_test.go +++ b/x/tally/keeper/integration_test.go @@ -45,10 +45,10 @@ import ( stakingkeeper "github.com/sedaprotocol/seda-chain/x/staking/keeper" "github.com/sedaprotocol/seda-chain/x/tally" "github.com/sedaprotocol/seda-chain/x/tally/keeper" + "github.com/sedaprotocol/seda-chain/x/tally/keeper/testdata" "github.com/sedaprotocol/seda-chain/x/tally/types" wasmstorage "github.com/sedaprotocol/seda-chain/x/wasm-storage" wasmstoragekeeper "github.com/sedaprotocol/seda-chain/x/wasm-storage/keeper" - "github.com/sedaprotocol/seda-chain/x/wasm-storage/keeper/testdata" "github.com/sedaprotocol/seda-chain/x/wasm-storage/keeper/testutil" wasmstoragetypes "github.com/sedaprotocol/seda-chain/x/wasm-storage/types" ) @@ -187,7 +187,7 @@ func initFixture(tb testing.TB) *fixture { // Upload and instantiate the SEDA contract. creator := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address()) - codeID, _, err := contractKeeper.Create(ctx, creator, testdata.SedaContractWasm(), nil) + codeID, _, err := contractKeeper.Create(ctx, creator, testdata.CoreContractWasm(), nil) require.NoError(tb, err) require.Equal(tb, uint64(1), codeID) diff --git a/x/tally/keeper/testdata/contracts.go b/x/tally/keeper/testdata/contracts.go index d56d0ce6..077d4353 100644 --- a/x/tally/keeper/testdata/contracts.go +++ b/x/tally/keeper/testdata/contracts.go @@ -5,19 +5,29 @@ import ( ) var ( - //go:embed seda_contract.wasm - sedaContract []byte + //go:embed core_contract.wasm + coreContract []byte //go:embed sample_tally.wasm sampleTallyWasm []byte + + //go:embed sample_tally_2.wasm + sampleTallyWasm2 []byte ) -func SedaContractWasm() []byte { - return sedaContract +func CoreContractWasm() []byte { + return coreContract } -// SampleTallyWasm returns the sample tally wasm binary, whose Keccak256 +// SampleTallyWasm returns a sample tally wasm binary whose Keccak256 // hash is 8ade60039246740faa80bf424fc29e79fe13b32087043e213e7bc36620111f6b. func SampleTallyWasm() []byte { return sampleTallyWasm } + +// SampleTallyWasm2 returns a tally wasm binary that prints all the +// tally VM environment variables. +// Hash: 5f3b31bff28c64a143119ee6389d62e38767672daace9c36db54fa2d18e9f391 +func SampleTallyWasm2() []byte { + return sampleTallyWasm2 +} diff --git a/x/tally/keeper/testdata/seda_contract.wasm b/x/tally/keeper/testdata/core_contract.wasm similarity index 100% rename from x/tally/keeper/testdata/seda_contract.wasm rename to x/tally/keeper/testdata/core_contract.wasm diff --git a/x/tally/keeper/testdata/sample_tally_2.wasm b/x/tally/keeper/testdata/sample_tally_2.wasm new file mode 100644 index 00000000..1261bfd5 Binary files /dev/null and b/x/tally/keeper/testdata/sample_tally_2.wasm differ diff --git a/x/tally/types/abci_types.go b/x/tally/types/abci_types.go index e865dc5c..b0b058f1 100644 --- a/x/tally/types/abci_types.go +++ b/x/tally/types/abci_types.go @@ -71,7 +71,7 @@ type DataResult struct { ExitCode byte `json:"exit_code"` GasUsed string `json:"gas_used"` Result []byte `json:"result"` - PaybackAddress string `json:"payback_address"` + PaybackAddress string `json:"payback_address"` // base64-encoded string SedaPayload string `json:"seda_payload"` Consensus bool `json:"consensus"` } diff --git a/x/wasm-storage/keeper/testdata/contracts.go b/x/wasm-storage/keeper/testdata/contracts.go deleted file mode 100644 index d56d0ce6..00000000 --- a/x/wasm-storage/keeper/testdata/contracts.go +++ /dev/null @@ -1,23 +0,0 @@ -package testdata - -import ( - _ "embed" -) - -var ( - //go:embed seda_contract.wasm - sedaContract []byte - - //go:embed sample_tally.wasm - sampleTallyWasm []byte -) - -func SedaContractWasm() []byte { - return sedaContract -} - -// SampleTallyWasm returns the sample tally wasm binary, whose Keccak256 -// hash is 8ade60039246740faa80bf424fc29e79fe13b32087043e213e7bc36620111f6b. -func SampleTallyWasm() []byte { - return sampleTallyWasm -} diff --git a/x/wasm-storage/keeper/testdata/data_requests.wasm b/x/wasm-storage/keeper/testdata/data_requests.wasm deleted file mode 100644 index eb8dada3..00000000 Binary files a/x/wasm-storage/keeper/testdata/data_requests.wasm and /dev/null differ diff --git a/x/wasm-storage/keeper/testdata/sample_tally.wasm b/x/wasm-storage/keeper/testdata/sample_tally.wasm deleted file mode 100644 index 03e12916..00000000 Binary files a/x/wasm-storage/keeper/testdata/sample_tally.wasm and /dev/null differ diff --git a/x/wasm-storage/keeper/testdata/seda_contract.wasm b/x/wasm-storage/keeper/testdata/seda_contract.wasm deleted file mode 100644 index 174d2fd1..00000000 Binary files a/x/wasm-storage/keeper/testdata/seda_contract.wasm and /dev/null differ