Merge PR #4948: Emit send coin events before action
This commit is contained in:
parent
eeb847c845
commit
e7b378d81d
|
@ -216,16 +216,6 @@ func (keeper BaseSendKeeper) InputOutputCoins(ctx sdk.Context, inputs []types.In
|
|||
|
||||
// SendCoins moves coins from one account to another
|
||||
func (keeper BaseSendKeeper) SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) sdk.Error {
|
||||
_, err := keeper.SubtractCoins(ctx, fromAddr, amt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = keeper.AddCoins(ctx, toAddr, amt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ctx.EventManager().EmitEvents(sdk.Events{
|
||||
sdk.NewEvent(
|
||||
types.EventTypeTransfer,
|
||||
|
@ -238,6 +228,16 @@ func (keeper BaseSendKeeper) SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress,
|
|||
),
|
||||
})
|
||||
|
||||
_, err := keeper.SubtractCoins(ctx, fromAddr, amt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = keeper.AddCoins(ctx, toAddr, amt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@ import (
|
|||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/tendermint/tendermint/libs/common"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
|
@ -148,6 +150,51 @@ func TestSendKeeper(t *testing.T) {
|
|||
require.Error(t, err)
|
||||
}
|
||||
|
||||
func TestMsgSendEvents(t *testing.T) {
|
||||
app, ctx := createTestApp(false)
|
||||
|
||||
app.BankKeeper.SetSendEnabled(ctx, true)
|
||||
|
||||
addr := sdk.AccAddress([]byte("addr1"))
|
||||
addr2 := sdk.AccAddress([]byte("addr2"))
|
||||
acc := app.AccountKeeper.NewAccountWithAddress(ctx, addr)
|
||||
|
||||
app.AccountKeeper.SetAccount(ctx, acc)
|
||||
newCoins := sdk.NewCoins(sdk.NewInt64Coin("foocoin", 50))
|
||||
err := app.BankKeeper.SendCoins(ctx, addr, addr2, newCoins)
|
||||
require.Error(t, err)
|
||||
events := ctx.EventManager().Events()
|
||||
require.Equal(t, 2, len(events))
|
||||
event1 := sdk.Event{
|
||||
Type: types.EventTypeTransfer,
|
||||
Attributes: []common.KVPair{},
|
||||
}
|
||||
event1.Attributes = append(
|
||||
event1.Attributes,
|
||||
common.KVPair{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr2.String())})
|
||||
event1.Attributes = append(
|
||||
event1.Attributes,
|
||||
common.KVPair{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins.String())})
|
||||
event2 := sdk.Event{
|
||||
Type: sdk.EventTypeMessage,
|
||||
Attributes: []common.KVPair{},
|
||||
}
|
||||
event2.Attributes = append(
|
||||
event2.Attributes,
|
||||
common.KVPair{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())})
|
||||
require.Equal(t, event1, events[0])
|
||||
require.Equal(t, event2, events[1])
|
||||
|
||||
app.BankKeeper.SetCoins(ctx, addr, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 50)))
|
||||
newCoins = sdk.NewCoins(sdk.NewInt64Coin("foocoin", 50))
|
||||
err = app.BankKeeper.SendCoins(ctx, addr, addr2, newCoins)
|
||||
require.NoError(t, err)
|
||||
events = ctx.EventManager().Events()
|
||||
require.Equal(t, 4, len(events))
|
||||
require.Equal(t, event1, events[2])
|
||||
require.Equal(t, event2, events[3])
|
||||
}
|
||||
|
||||
func TestViewKeeper(t *testing.T) {
|
||||
app, ctx := createTestApp(false)
|
||||
|
||||
|
|
Loading…
Reference in New Issue