@@ -60,6 +60,7 @@ var transferCmd = &cobra.Command{
6060 var sigTx , meta interface {}
6161 switch npa .ParaTime {
6262 case nil :
63+ // Consensus layer transfer.
6364 common .CheckForceErr (common .CheckAddressIsConsensusCapable (cfg , toAddr .String ()))
6465 if toEthAddr != nil {
6566 common .CheckForceErr (common .CheckAddressIsConsensusCapable (cfg , toEthAddr .Hex ()))
@@ -69,16 +70,23 @@ var transferCmd = &cobra.Command{
6970 cobra .CheckErr ("consensus layer only supports the native denomination" )
7071 }
7172
72- // Consensus layer transfer.
73- amount , err := helpers .ParseConsensusDenomination (npa .Network , amount )
73+ amt , err := helpers .ParseConsensusDenomination (npa .Network , amount )
7474 cobra .CheckErr (err )
7575
7676 // Prepare transaction.
77- tx := staking . NewTransferTx ( 0 , nil , & staking.Transfer {
77+ innerTx := staking.Transfer {
7878 To : toAddr .ConsensusAddress (),
79- Amount : * amount ,
80- })
81-
79+ Amount : * amt ,
80+ }
81+ tx := staking .NewTransferTx (0 , nil , & innerTx )
82+ if subtractFee {
83+ _ , fee , err := common .PrepareConsensusTransaction (ctx , npa , acc .ConsensusSigner (), conn , tx )
84+ cobra .CheckErr (err )
85+ err = amt .Sub (fee )
86+ cobra .CheckErr (err )
87+ innerTx .Amount = * amt
88+ tx = staking .NewTransferTx (0 , nil , & innerTx )
89+ }
8290 sigTx , err = common .SignConsensusTransaction (ctx , npa , acc , conn , tx )
8391 cobra .CheckErr (err )
8492 default :
@@ -87,11 +95,19 @@ var transferCmd = &cobra.Command{
8795 cobra .CheckErr (err )
8896
8997 // Prepare transaction.
90- tx := accounts . NewTransferTx ( nil , & accounts.Transfer {
98+ innerTx := accounts.Transfer {
9199 To : * toAddr ,
92100 Amount : * amountBaseUnits ,
93- })
94-
101+ }
102+ tx := accounts .NewTransferTx (nil , & innerTx )
103+ if subtractFee {
104+ _ , fee , _ , err := common .PrepareParatimeTransaction (ctx , npa , acc , conn , tx )
105+ cobra .CheckErr (err )
106+ err = amountBaseUnits .Amount .Sub (fee )
107+ cobra .CheckErr (err )
108+ innerTx .Amount = * amountBaseUnits
109+ tx = accounts .NewTransferTx (nil , & innerTx )
110+ }
95111 txDetails := sdkSignature.TxDetails {OrigTo : toEthAddr }
96112 sigTx , meta , err = common .SignParaTimeTransaction (ctx , npa , acc , conn , tx , & txDetails )
97113 cobra .CheckErr (err )
@@ -102,6 +118,7 @@ var transferCmd = &cobra.Command{
102118}
103119
104120func init () {
121+ transferCmd .Flags ().AddFlagSet (SubtractFeeFlags )
105122 transferCmd .Flags ().AddFlagSet (common .SelectorFlags )
106123 transferCmd .Flags ().AddFlagSet (common .RuntimeTxFlags )
107124 transferCmd .Flags ().AddFlagSet (common .ForceFlag )
0 commit comments