Skip to content

Commit 41007e9

Browse files
Add safety check for sending builder codes to blocked address (#3308)
1 parent 1d6e6ba commit 41007e9

3 files changed

Lines changed: 79 additions & 0 deletions

File tree

protocol/x/clob/keeper/process_operations_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,10 @@ func TestProcessProposerOperations(t *testing.T) {
639639
mock.Anything,
640640
mock.Anything,
641641
).Return(nil)
642+
bk.On(
643+
"BlockedAddr",
644+
mock.Anything,
645+
).Return(false)
642646
bk.On(
643647
"SendCoins",
644648
mock.Anything,
@@ -2539,6 +2543,10 @@ func setupProcessProposerOperationsTestCase(
25392543
mock.Anything,
25402544
mock.Anything,
25412545
).Return(sdk.NewCoin("USDC", sdkmath.NewIntFromUint64(tc.insuranceFundBalance)))
2546+
mockBankKeeper.On(
2547+
"BlockedAddr",
2548+
mock.Anything,
2549+
).Return(false)
25422550
}
25432551

25442552
mockIndexerEventManager = &mocks.IndexerEventManager{}

protocol/x/subaccounts/keeper/transfer.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,10 @@ func (k Keeper) TransferBuilderFees(
468468
return err
469469
}
470470

471+
if k.bankKeeper.BlockedAddr(recipient) {
472+
return errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", recipient)
473+
}
474+
471475
return k.bankKeeper.SendCoins(
472476
ctx,
473477
collateralPoolAddr,

protocol/x/subaccounts/keeper/transfer_test.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2095,3 +2095,70 @@ func TestTransferInsuranceFundPayments(t *testing.T) {
20952095
})
20962096
}
20972097
}
2098+
2099+
func TestTransferBuilderFees_BlockedAddress(t *testing.T) {
2100+
tests := map[string]struct {
2101+
builderAddress string
2102+
expectedErr error
2103+
}{
2104+
"success - regular address receives builder fees": {
2105+
builderAddress: sample_testutil.AccAddress(),
2106+
expectedErr: nil,
2107+
},
2108+
"failure - blocked module account (distribution) cannot receive builder fees": {
2109+
builderAddress: authtypes.NewModuleAddress(distrtypes.ModuleName).String(),
2110+
expectedErr: sdkerrors.ErrUnauthorized,
2111+
},
2112+
}
2113+
2114+
for name, tc := range tests {
2115+
t.Run(name, func(t *testing.T) {
2116+
ctx, keeper, pricesKeeper, perpetualsKeeper, accountKeeper, bankKeeper, assetsKeeper, _, _, _, _ :=
2117+
keepertest.SubaccountsKeepers(t, true)
2118+
keepertest.CreateTestMarkets(t, ctx, pricesKeeper)
2119+
2120+
// Create liquidity tiers and perpetuals.
2121+
keepertest.CreateTestLiquidityTiers(t, ctx, perpetualsKeeper)
2122+
keepertest.CreateTestPerpetuals(t, ctx, perpetualsKeeper)
2123+
2124+
// Set up Subaccounts module account with funds.
2125+
auth_testutil.CreateTestModuleAccount(ctx, accountKeeper, types.ModuleName, []string{})
2126+
err := bank_testutil.FundAccount(
2127+
ctx,
2128+
types.ModuleAddress,
2129+
sdk.Coins{
2130+
sdk.NewCoin(constants.Usdc.Denom, sdkmath.NewInt(10_000_000)), // 10 USDC
2131+
},
2132+
*bankKeeper,
2133+
)
2134+
require.NoError(t, err)
2135+
2136+
// Create USDC asset.
2137+
err = keepertest.CreateUsdcAsset(ctx, assetsKeeper)
2138+
require.NoError(t, err)
2139+
2140+
// Attempt to transfer builder fees using perpetual ID 0 (BTC-USD from test perpetuals).
2141+
builderFeeQuantums := big.NewInt(1_000_000) // 1 USDC
2142+
err = keeper.TransferBuilderFees(
2143+
ctx,
2144+
0, // perpetual ID 0 from CreateTestPerpetuals
2145+
builderFeeQuantums,
2146+
tc.builderAddress,
2147+
)
2148+
2149+
if tc.expectedErr != nil {
2150+
require.ErrorIs(t, err, tc.expectedErr)
2151+
} else {
2152+
require.NoError(t, err)
2153+
2154+
// Verify builder received the funds.
2155+
builderAddr := sdk.MustAccAddressFromBech32(tc.builderAddress)
2156+
builderBalance := bankKeeper.GetBalance(ctx, builderAddr, constants.Usdc.Denom)
2157+
require.Equal(t,
2158+
sdk.NewCoin(constants.Usdc.Denom, sdkmath.NewIntFromBigInt(builderFeeQuantums)),
2159+
builderBalance,
2160+
)
2161+
}
2162+
})
2163+
}
2164+
}

0 commit comments

Comments
 (0)