arbitraryPKHashSigInput :: Gen (SigInput, PrvKey)
arbitraryPKHashSigInput = do
    k <- arbitraryPrvKey
    let out = PayPKHash $ getAddrHash $ pubKeyAddr $ derivePubKey k
    op <- arbitraryOutPoint
    sh <- arbitraryValidSigHash
    return (SigInput out op sh Nothing, k)

-- | Arbitrary SigInput with a ScriptOutput of type PayMulSig
arbitraryPKHashSigInput :: Gen (SigInput, PrvKey)
arbitraryPKHashSigInput = do
    k <- arbitraryPrvKey
    let out = PayPKHash $ getAddrHash $ pubKeyAddr $ derivePubKey k
    op <- arbitraryOutPoint
    sh <- arbitraryValidSigHash
    return (SigInput out op sh Nothing, k)

-- | Arbitrary SigInput with a ScriptOutput of type PayMulSig
arbitraryPKHashSigInput = do
    k <- arbitraryPrvKey
    let out = PayPKHash $ getAddrHash $ pubKeyAddr $ derivePubKey k
    op <- arbitraryOutPoint
    sh <- arbitraryValidSigHash
    return (SigInput out op sh Nothing, k)

-- | Arbitrary SigInput with a ScriptOutput of type PayMulSig