@@ -22,31 +22,96 @@ def _empty(s: str) -> bool:
2222
2323
2424def fill_trade_accounts (e : PumpFunTradeEvent , get : AccountGetter ) -> None :
25- if e .ix_name in ("buy_v2" , "sell_v2" , "buy_exact_quote_in_v2" ):
26- if _empty (e .user ):
27- e .user = get (13 )
28- if _empty (e .bonding_curve ):
29- e .bonding_curve = get (10 )
30- if _empty (e .associated_bonding_curve ):
31- e .associated_bonding_curve = get (11 )
32- if _empty (e .creator_vault ):
33- e .creator_vault = get (16 )
34- if _empty (e .token_program ):
35- e .token_program = get (3 )
25+ def account_at_matches_mint (idx : int ) -> bool :
26+ return not _empty (e .mint ) and get (idx ) == e .mint
27+
28+ def set_attr (name : str , idx : int ) -> None :
29+ if _empty (getattr (e , name )):
30+ setattr (e , name , get (idx ))
31+
32+ is_v2 = e .ix_name in ("buy_v2" , "sell_v2" , "buy_exact_quote_in_v2" ) or (
33+ e .ix_name == "buy_exact_quote_in" and account_at_matches_mint (1 )
34+ )
35+ if is_v2 :
36+ set_attr ("global_account" , 0 )
37+ set_attr ("quote_mint" , 2 )
38+ set_attr ("fee_recipient" , 6 )
39+ set_attr ("bonding_curve" , 10 )
40+ set_attr ("associated_bonding_curve" , 11 )
41+ set_attr ("associated_quote_bonding_curve" , 12 )
42+ set_attr ("user" , 13 )
43+ set_attr ("associated_user" , 14 )
44+ set_attr ("associated_quote_user" , 15 )
45+ set_attr ("token_program" , 3 )
46+ set_attr ("quote_token_program" , 4 )
47+ set_attr ("associated_token_program" , 5 )
48+ set_attr ("creator_vault" , 16 )
49+ set_attr ("associated_quote_fee_recipient" , 7 )
50+ set_attr ("buyback_fee_recipient" , 8 )
51+ set_attr ("associated_quote_buyback_fee_recipient" , 9 )
52+ set_attr ("associated_creator_vault" , 17 )
53+ set_attr ("sharing_config" , 18 )
54+ if e .ix_name == "sell_v2" :
55+ set_attr ("user_volume_accumulator" , 19 )
56+ set_attr ("associated_user_volume_accumulator" , 20 )
57+ set_attr ("fee_config" , 21 )
58+ set_attr ("fee_program" , 22 )
59+ set_attr ("system_program" , 23 )
60+ set_attr ("event_authority" , 24 )
61+ set_attr ("program" , 25 )
62+ else :
63+ set_attr ("global_volume_accumulator" , 19 )
64+ set_attr ("user_volume_accumulator" , 20 )
65+ set_attr ("associated_user_volume_accumulator" , 21 )
66+ set_attr ("fee_config" , 22 )
67+ set_attr ("fee_program" , 23 )
68+ set_attr ("system_program" , 24 )
69+ set_attr ("event_authority" , 25 )
70+ set_attr ("program" , 26 )
3671 return
37- if _empty (e .user ):
38- e .user = get (6 )
39- if _empty (e .bonding_curve ):
40- e .bonding_curve = get (3 )
41- if _empty (e .associated_bonding_curve ):
42- e .associated_bonding_curve = get (4 )
72+ set_attr ("global_account" , 0 )
73+ set_attr ("fee_recipient" , 1 )
74+ set_attr ("bonding_curve" , 3 )
75+ set_attr ("associated_bonding_curve" , 4 )
76+ set_attr ("associated_user" , 5 )
77+ set_attr ("user" , 6 )
78+ set_attr ("system_program" , 7 )
4379 if _empty (e .creator_vault ):
4480 e .creator_vault = get (9 ) if e .is_buy else get (8 )
4581 if _empty (e .token_program ):
4682 e .token_program = get (8 ) if e .is_buy else get (9 )
83+ set_attr ("event_authority" , 10 )
84+ set_attr ("program" , 11 )
85+ if e .is_buy :
86+ set_attr ("global_volume_accumulator" , 12 )
87+ set_attr ("user_volume_accumulator" , 13 )
88+ set_attr ("fee_config" , 14 )
89+ set_attr ("fee_program" , 15 )
90+ set_attr ("bonding_curve_v2" , 16 )
91+ set_attr ("buyback_fee_recipient" , 17 )
92+ a17 = get (17 )
93+ if not _empty (a17 ) and _empty (e .extra_instruction_account ):
94+ e .extra_instruction_account = a17
95+ return
96+ set_attr ("fee_config" , 12 )
97+ set_attr ("fee_program" , 13 )
4798 a16 = get (16 )
4899 if not _empty (a16 ):
49- e .extra_instruction_account = a16
100+ set_attr ("user_volume_accumulator" , 14 )
101+ set_attr ("bonding_curve_v2" , 15 )
102+ set_attr ("buyback_fee_recipient" , 16 )
103+ if _empty (e .extra_instruction_account ):
104+ e .extra_instruction_account = a16
105+ return
106+ if e .is_cashback_coin :
107+ set_attr ("user_volume_accumulator" , 14 )
108+ set_attr ("bonding_curve_v2" , 15 )
109+ return
110+ set_attr ("bonding_curve_v2" , 14 )
111+ set_attr ("buyback_fee_recipient" , 15 )
112+ a15 = get (15 )
113+ if not _empty (a15 ) and _empty (e .extra_instruction_account ):
114+ e .extra_instruction_account = a15
50115
51116
52117def fill_create_accounts (e : PumpFunCreateEvent , get : AccountGetter ) -> None :
0 commit comments