## Description
This PR adds a `ModuleDB` interface which can be used directly by Cosmos SDK modules. A simplified bank example with Mint/Send/Burn functionality against Balance and Supply tables is included in the tests.
This PR also:
* adds simplified `Get` and `Has` methods to `Table` which use the primary key values in the message instead of `...interface{}`
* adds a stable deterministic proto JSON marshaler and updates the `Entry.String` methods to use it because the golden tests are not deterministic without this. This code is currently internal but can be extracted to a public `codec` or `cosmos-proto` package eventually.
---
### Author Checklist
*All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.*
I have...
- [ ] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title
- [ ] added `!` to the type prefix if API or client breaking change
- [ ] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#pr-targeting))
- [ ] provided a link to the relevant issue or specification
- [ ] followed the guidelines for [building modules](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules)
- [ ] included the necessary unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#testing)
- [ ] added a changelog entry to `CHANGELOG.md`
- [ ] included comments for [documenting Go code](https://blog.golang.org/godoc)
- [ ] updated the relevant documentation or specification
- [ ] reviewed "Files changed" and left comments if necessary
- [ ] confirmed all CI checks have passed
### Reviewers Checklist
*All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.*
I have...
- [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title
- [ ] confirmed `!` in the type prefix if API or client breaking change
- [ ] confirmed all author checklist items have been addressed
- [ ] reviewed state machine logic
- [ ] reviewed API design and naming
- [ ] reviewed documentation is accurate
- [ ] reviewed tests and test coverage
- [ ] manually tested (if applicable)
38 lines
1023 B
Go
38 lines
1023 B
Go
package stablejson_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"google.golang.org/protobuf/types/known/anypb"
|
|
|
|
bankv1beta1 "github.com/cosmos/cosmos-sdk/api/cosmos/bank/v1beta1"
|
|
basev1beta1 "github.com/cosmos/cosmos-sdk/api/cosmos/base/v1beta1"
|
|
txv1beta1 "github.com/cosmos/cosmos-sdk/api/cosmos/tx/v1beta1"
|
|
"github.com/cosmos/cosmos-sdk/orm/internal/stablejson"
|
|
)
|
|
|
|
func TestStableJSON(t *testing.T) {
|
|
msg, err := anypb.New(&bankv1beta1.MsgSend{
|
|
FromAddress: "foo213325",
|
|
ToAddress: "foo32t5sdfh",
|
|
Amount: []*basev1beta1.Coin{
|
|
{
|
|
Denom: "bar",
|
|
Amount: "1234",
|
|
},
|
|
{
|
|
Denom: "baz",
|
|
Amount: "321",
|
|
},
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
bz, err := stablejson.Marshal(&txv1beta1.TxBody{Messages: []*anypb.Any{msg}})
|
|
require.NoError(t, err)
|
|
require.Equal(t,
|
|
`{"messages":[{"@type":"cosmos.bank.v1beta1.MsgSend","from_address":"foo213325","to_address":"foo32t5sdfh","amount":[{"denom":"bar","amount":"1234"},{"denom":"baz","amount":"321"}]}]}`,
|
|
string(bz))
|
|
}
|