I try with timelockStart but when mint nft with this policyScript, it return error transaction submit error ShelleyTxValidationError ShelleyBasedEraBabbage (ApplyTxError [UtxowFailure (FromAlonzoUtxowFail (WrappedShelleyEraFailure (ScriptWitnessNotValidatingUTXOW (fromList [ScriptHash \"16959a84b47c4638a02d4b6fb413873127ca0f056984945f979cb1ca\"]))))])
I don’t know what your ttl is. It might be that ttl - 10 (10 seconds before the transaction becomes invalid) is still in the future. I would have chosen a value way in the past like the start of the current epoch (70156800) or something like that.
As for the keys: Somewhere in your code, you are deriving that payment key from the seed phrase or from a master key. In the same way you can derive lots of other keys. But if you want to use them as the keys for a policy script, you will have to sign the transaction with those keys.