Rishabh Pant scored a record-breaking half-century and Jasprit Bumrah did more damage as India totally dominated day two of the second Test at M. Chinnaswamy Stadium.
Bumrah (5-24) claimed his first five-wicket Test haul on home soil as India took only 35 balls to reduce the tourists from 86-6 to 109 all out in the opening session in Bengaluru on Sunday.
Rohit Sharma's home side then made 303-9 declared in their second innings of the day-night Test, setting Sri Lanka a highly improbable 447 to draw the series.
Pant (50) bludgeoned a 28-ball half-century - the fastest of all time for India in the longest format - and Shreyas Iyer (67) scored his second fifty of the match, with Rohit striking 46 at the top of the order.
Sri Lanka were 28-1 at stumps after Bumrah removed Lahiru Thirimanne without scoring with the pink ball under the lights as India closed in on a 2-0 whitewash.
Bumrah and Ravichandran Ashwin (2-30) wasted no time in wrapping up the tourists' first innings at the start of the day, after they resumed in big trouble in reply to India's 252 all out.
Mayank Agarwal (22) then missed out again with the bat for India, but captain Rohit and Hanuma Vihari (35) put on 56 for the second wicket.
It was Pant who produced the fireworks, taking the Sri Lanka attack to all parts, with Virat Kohli (13) falling to Praveen Jayawickrama (4-78) and Ravindra Jadeja bowled by Vishwa Fernando for 22 as India were in a rush to pile on the runs.
Jayawickrama, who was able to return to the field after limping off, had Pant caught and bowled and Iyer ticked along nicely before Lasith Embuldeniya (3-87) trapped him leg before.
Thirimanne fell to Bumrah in the first over of Sri Lanka's second innings after Rohit declared, but Dimuth Karunaratne and Kusal Mendis prevented further damage from being done.
Home comforts for brilliant Bumrah
Bumrah had struck three times on day one to put Sri Lanka in the mire and the paceman finally claimed a maiden five-wicket Test haul in his homeland on Sunday.
The relentless quick had taken five wickets seven times on tour and added the eighth such harvest of his career by getting Embuldeniya and Niroshan Dickwella caught behind.
Bumrah later struck again by generating sharp swing to see the back of Thirimanne.
Pant cuts loose
The stage was set for wicketkeeper-batsman Pant to cut loose, and he did not disappoint the India fans.
The explosive left-hander struck two sixes and seven fours as he broke a record that was held by the great Kapil Dev, who blasted a 30-ball half-century against Pakistan back in 1982.
Iyer gave another exhibition of his class in the middle order in an 87-ball knock.