@@ -21,14 +21,14 @@ func (k Keeper) ProcessBitcoinDepositTransaction(ctx sdk.Context, msg *types.Msg
2121 return nil , nil , err
2222 }
2323
24- assetType , recipient , err := k .Mint (ctx , msg .Sender , tx , prevTx , uint64 (k .oracleKeeper .GetBlockHeader (ctx , msg .Blockhash ).Height ))
24+ assetType , recipient , amount , err := k .Mint (ctx , msg .Sender , tx , prevTx , uint64 (k .oracleKeeper .GetBlockHeader (ctx , msg .Blockhash ).Height ))
2525 if err != nil {
2626 return nil , nil , err
2727 }
2828
2929 // hook
3030 if assetType == types .AssetType_ASSET_TYPE_BTC {
31- if err := k .AfterDeposit (ctx , recipient .EncodeAddress ()); err != nil {
31+ if err := k .AfterDeposit (ctx , recipient .EncodeAddress (), * amount , tx . MsgTx () ); err != nil {
3232 return nil , nil , err
3333 }
3434 }
@@ -37,10 +37,10 @@ func (k Keeper) ProcessBitcoinDepositTransaction(ctx sdk.Context, msg *types.Msg
3737}
3838
3939// Mint performs the minting operation of the voucher token
40- func (k Keeper ) Mint (ctx sdk.Context , sender string , tx * btcutil.Tx , prevTx * btcutil.Tx , height uint64 ) (types.AssetType , btcutil.Address , error ) {
40+ func (k Keeper ) Mint (ctx sdk.Context , sender string , tx * btcutil.Tx , prevTx * btcutil.Tx , height uint64 ) (types.AssetType , btcutil.Address , * sdk. Coin , error ) {
4141 hash := tx .Hash ().String ()
4242 if k .existsInHistory (ctx , hash ) {
43- return types .AssetType_ASSET_TYPE_UNSPECIFIED , nil , types .ErrTransactionAlreadyMinted
43+ return types .AssetType_ASSET_TYPE_UNSPECIFIED , nil , nil , types .ErrTransactionAlreadyMinted
4444 }
4545
4646 k .addToMintHistory (ctx , hash )
@@ -53,7 +53,7 @@ func (k Keeper) Mint(ctx sdk.Context, sender string, tx *btcutil.Tx, prevTx *btc
5353 // if the edict is not nil, it indicates that this is a legal runes deposit tx
5454 edict , err := types .CheckRunesDepositTransaction (tx .MsgTx (), params .Vaults )
5555 if err != nil {
56- return types .AssetType_ASSET_TYPE_UNSPECIFIED , nil , err
56+ return types .AssetType_ASSET_TYPE_UNSPECIFIED , nil , nil , err
5757 }
5858
5959 isRunes := edict != nil
@@ -65,52 +65,57 @@ func (k Keeper) Mint(ctx sdk.Context, sender string, tx *btcutil.Tx, prevTx *btc
6565
6666 // check if the sender is trusted to relay runes deposit
6767 if isRunes && ! k .IsTrustedNonBtcRelayer (ctx , sender ) {
68- return assetType , nil , types .ErrUntrustedNonBtcRelayer
68+ return assetType , nil , nil , types .ErrUntrustedNonBtcRelayer
6969 }
7070
7171 // extract the recipient for minting voucher token
7272 recipient , err := types .ExtractRecipientAddr (tx .MsgTx (), prevTx .MsgTx (), params .Vaults , isRunes , chainCfg )
7373 if err != nil {
74- return assetType , nil , err
74+ return assetType , nil , nil , err
7575 }
7676
77+ var amount * sdk.Coin
78+
7779 if ! isRunes {
7880 out , vout , vault , err := k .getOutputForMintBTC (ctx , tx .MsgTx (), chainCfg )
7981 if err != nil {
80- return assetType , nil , err
82+ return assetType , nil , nil , err
8183 }
8284
83- if err := k .mintBTC (ctx , tx , height , recipient .EncodeAddress (), vault , out , vout , params .BtcVoucherDenom ); err != nil {
84- return assetType , nil , err
85+ amount , err = k .mintBTC (ctx , tx , height , recipient .EncodeAddress (), vault , out , vout , params .BtcVoucherDenom )
86+ if err != nil {
87+ return assetType , nil , nil , err
8588 }
8689 } else {
8790 outs , vouts , vaults , err := k .getOutputsForMintRunes (ctx , tx .MsgTx (), edict , chainCfg )
8891 if err != nil {
89- return assetType , nil , err
92+ return assetType , nil , nil , err
9093 }
9194
92- if err := k .mintRunes (ctx , tx , height , recipient .EncodeAddress (), vaults , outs , vouts , edict .Id , edict .Amount ); err != nil {
93- return assetType , nil , err
95+ amount , err = k .mintRunes (ctx , tx , height , recipient .EncodeAddress (), vaults , outs , vouts , edict .Id , edict .Amount )
96+ if err != nil {
97+ return assetType , nil , nil , err
9498 }
9599 }
96100
97- return assetType , recipient , nil
101+ return assetType , recipient , amount , nil
98102}
99103
100- func (k Keeper ) mintBTC (ctx sdk.Context , tx * btcutil.Tx , height uint64 , recipient string , vault string , out * wire.TxOut , vout int , denom string ) error {
104+ func (k Keeper ) mintBTC (ctx sdk.Context , tx * btcutil.Tx , height uint64 , recipient string , vault string , out * wire.TxOut , vout int , denom string ) ( * sdk. Coin , error ) {
101105 amount := sdk .NewInt64Coin (denom , out .Value )
102106
103107 recipientAddr , err := sdk .AccAddressFromBech32 (recipient )
104108 if err != nil {
105- return err
109+ return nil , err
106110 }
107111
108112 if err := k .bankKeeper .MintCoins (ctx , types .ModuleName , sdk .NewCoins (amount )); err != nil {
109- return err
113+ return nil , err
110114 }
111115
112- if err := k .mintBTCWithProtocolFee (ctx , recipientAddr , amount ); err != nil {
113- return err
116+ actualAmount , err := k .mintBTCWithProtocolFee (ctx , recipientAddr , amount )
117+ if err != nil {
118+ return nil , err
114119 }
115120
116121 utxo := types.UTXO {
@@ -125,28 +130,28 @@ func (k Keeper) mintBTC(ctx sdk.Context, tx *btcutil.Tx, height uint64, recipien
125130
126131 k .saveUTXO (ctx , & utxo )
127132
128- return nil
133+ return actualAmount , nil
129134}
130135
131- func (k Keeper ) mintRunes (ctx sdk.Context , tx * btcutil.Tx , height uint64 , recipient string , vaults []string , outs []* wire.TxOut , vouts []int , id * types.RuneId , amount string ) error {
132- coins := sdk .NewCoins ( sdk . NewCoin (id .Denom (), sdkmath .NewIntFromBigInt (types .RuneAmountFromString (amount ).Big () )))
136+ func (k Keeper ) mintRunes (ctx sdk.Context , tx * btcutil.Tx , height uint64 , recipient string , vaults []string , outs []* wire.TxOut , vouts []int , id * types.RuneId , amount string ) ( * sdk. Coin , error ) {
137+ coin := sdk .NewCoin (id .Denom (), sdkmath .NewIntFromBigInt (types .RuneAmountFromString (amount ).Big ()))
133138
134139 recipientAddr , err := sdk .AccAddressFromBech32 (recipient )
135140 if err != nil {
136- return err
141+ return nil , err
137142 }
138143
139- if err := k .bankKeeper .MintCoins (ctx , types .ModuleName , coins ); err != nil {
140- return err
144+ if err := k .bankKeeper .MintCoins (ctx , types .ModuleName , sdk . NewCoins ( coin ) ); err != nil {
145+ return nil , err
141146 }
142147
143- if err := k .bankKeeper .SendCoinsFromModuleToAccount (ctx , types .ModuleName , recipientAddr , coins ); err != nil {
144- return err
148+ if err := k .bankKeeper .SendCoinsFromModuleToAccount (ctx , types .ModuleName , recipientAddr , sdk . NewCoins ( coin ) ); err != nil {
149+ return nil , err
145150 }
146151
147152 if k .ProtocolDepositFeeEnabled (ctx ) {
148153 if err := k .handleRunesProtocolFee (ctx , tx .Hash ().String (), height , outs [1 ], vouts [1 ], vaults [1 ]); err != nil {
149- return err
154+ return nil , err
150155 }
151156 }
152157
@@ -166,35 +171,38 @@ func (k Keeper) mintRunes(ctx sdk.Context, tx *btcutil.Tx, height uint64, recipi
166171
167172 k .saveUTXO (ctx , & utxo )
168173
169- return nil
174+ return & coin , nil
170175}
171176
172177// mintBTCWithProtocolFee performs btc minting along with the protocol fee handling
173- func (k Keeper ) mintBTCWithProtocolFee (ctx sdk.Context , recipient sdk.AccAddress , amount sdk.Coin ) error {
178+ func (k Keeper ) mintBTCWithProtocolFee (ctx sdk.Context , recipient sdk.AccAddress , amount sdk.Coin ) ( * sdk. Coin , error ) {
174179 params := k .GetParams (ctx )
175180
176181 var err error
177- depositAmount := amount
178182
179183 if k .ProtocolDepositFeeEnabled (ctx ) {
180184 protocolFee := sdk .NewInt64Coin (params .BtcVoucherDenom , params .ProtocolFees .DepositFee )
181185 protocolFeeCollector := sdk .MustAccAddressFromBech32 (params .ProtocolFees .Collector )
182186
183- depositAmount , err = depositAmount .SafeSub (protocolFee )
187+ amount , err = amount .SafeSub (protocolFee )
184188 if err != nil {
185- return err
189+ return nil , err
186190 }
187191
188192 if err := k .bankKeeper .SendCoinsFromModuleToAccount (ctx , types .ModuleName , protocolFeeCollector , sdk .NewCoins (protocolFee )); err != nil {
189- return err
193+ return nil , err
190194 }
191195 }
192196
193- if depositAmount .Amount .Int64 () < params .ProtocolLimits .BtcMinDeposit {
194- return types .ErrInvalidDepositAmount
197+ if amount .Amount .Int64 () < params .ProtocolLimits .BtcMinDeposit {
198+ return nil , types .ErrInvalidDepositAmount
199+ }
200+
201+ if err := k .bankKeeper .SendCoinsFromModuleToAccount (ctx , types .ModuleName , recipient , sdk .NewCoins (amount )); err != nil {
202+ return nil , err
195203 }
196204
197- return k . bankKeeper . SendCoinsFromModuleToAccount ( ctx , types . ModuleName , recipient , sdk . NewCoins ( depositAmount ))
205+ return & amount , nil
198206}
199207
200208// handleRunesProtocolFee performs the protocol fee handling for runes deposit
0 commit comments