OIS Discounting:
First note that we already discount using USD OIS rates, but these would be OIS rates constructed from USD OIS Swaps linked to the Effective Federal Funds Rate (EFFR). In other words, the floating rate of the OIS swap would be based on the EFFR rate, whilst the fixed leg would be the normal fixed leg we are used to seeing in swaps.
So the first point to note is that Libor discounting hasn't been used for quite some time now (pretty much since post-Lehman, i.e. ~2009).
Now, another point to note is that cleared portfolios have already been switched from USD OIS-EFFR discounting to USD OIS-SOFR discounting recently.
Mechanics of OIS-SOFR Swaps
Let's consider a single-period 9-month USD OIS-SOFR Swap, such that there is only one fixed coupon at the swap maturity, and one floating coupon at the swap maturity date.
- The floating leg of the OIS-SOFR swap is the daily realized overnight SOFR rate, compounded in arrears, i.e.:
$$\prod_{t=1}^{t=n}\left(1+\frac{\delta(t)}{360}r_{SOFR}(t)\right)-1$$
Above, $n$ is the number of days in the accrual period (so for 9 months, this would be $n\approx 9*30=270$). $\delta(t)$ is the accrual factor for each of the SOFR rates $r_{SOFR}(t)$, so this is always equal to $1$, unless the $r_{SOFR}(t)$ falls on a Friday (in which case $\delta(t)=3$) or a bank holiday (in which case $\delta(t)$ could be 2 or even 4, if the bank holiday is on Monday or Friday and $r_{SOFR}(t)$ falls just before this "extended weekend").
- The fixed leg would be just the fixed leg, i.e. $r_{fixed(9m)}$
Bootstrapping:
If all the OIS-SOFR swaps are just single period (i.e. single fixed-coupon) swaps, then you get the discount factors directly from the fixed coupons, i.e.:
$$DF_{9m}=\frac{1}{1+r_{fixed(9m)}}, DF_{18m}=\frac{1}{1+r_{fixed(18m)}}, DF_{30m}=\frac{1}{1+r_{fixed(30m)}}$$
If the OIS-SOFR swaps are not single-period swaps, then they need to be bootstrapped. Let's assume that the $9m$ OIS-SOFR swap is single-coupon, whilst the $1.5y$ swap is two-coupon (so it pays $r_{fixed(18m)}$ at the 9-month point and then at the 18-month point), and the $2.5y$ swap is three-coupon swap (so it pays $r_{fixed(30m)}$ at the 9-month point and then at the 18-month point and the 30-month point). Then, we bootstrap as follows (I assume notional of the swaps is 100):
$$100=100*r_{fixed(18m)}*DF_{9m}+100*r_{fixed(18m)}*DF_{18m}+100*DF_{18m}$$
The only unknown above is $DF_{18m}$, for which you can easily solve. Then you repeat the same exercise for the 30-month swap:
$$100=100*r_{fixed(30m)}*DF_{9m}+100*r_{fixed(30m)}*DF_{18m}+100*r_{fixed(30m)}*DF_{30m}+100*DF_{30m}$$
And you solve for the $DF_{30m}$.
If the coupon-periods are different, you just need to adjust your bootstrapping accordingly.