Grain may be volatile at times as crypto can be, but there is an insurance protocol that secures a batch of tokens, by design. So if Grain drops 20% the protocol adds the 20% in tokens to the smart contract.
The insurance mechanism is explained in detail on page 12 of the whitepaper: https://grain.io/grain-whitepaper-v101.pdf
GRAIN has liquidity insurance. This means that if the chosen payment options are Escrow or Currency Option, the volatility factor is removed. In the Escrow option, if when the time for payment has come and the value of GRAIN has decreased, GRAIN from the insurance wallet would be added to the escrow to bring the total amount needing to be paid. If the value has increased, then the extra GRAIN in the escrow is removed and added to the insurance wallet to that the amount paid is still the agreed upon amount. So say you were to be paid 50 grain which at the time was say $1 per grain for a total of $50 but when payment time came and the 50 GRAIN was $0.50 per grain, that would only be $25 so another 50 GRAIN would be subtracted from the insurance wallet and added to the escrow to equal the original $50. However, if say the value of the GRAIN at the time of payment due was $2 per grain, then 25 GRAIN would be subtracted and added to the insurance wallet making the payment 25 grain still equaling $50.
In the Currency option, the employer buys the grain to pay you with after at the time of payment but locks in the exchange rate when the contract is made. When the value of GRAIN has increased then the employer buys the GRAIN from the insurance wallet at the lower rate they locked in at. When the value decreases, the employer just buys the GRAIN at the lower rate with the premium the employer paid to lock the rate in going to the insurance wallet.