@@ -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