I have created a P2sh includes OP_CHECKSEQUENCEVERIFY and funded the same. I was trying to redeem the coins. But i could not understand the working of OP_CHECKSEQUENCEVERIFY. Below is the example which I have tried,

Execute the timelock condn: currently the block count is 152

btcc [OP_IF 155 OP_CHECKSEQUENCEVERIFY OP_DROP OP_SHA256 ef7797e13d3a75526946a3bcf00daec9fc9c9c4d51ddc7cc5df888f74dd434d1 OP_EQUAL OP_ENDIF]


bitcoin-cli decodescript 63029b00b275a820ef7797e13d3a75526946a3bcf00daec9fc9c9c4d51ddc7cc5df888f74dd434d18768

  "asm": "OP_IF 155 OP_CHECKSEQUENCEVERIFY OP_DROP OP_SHA256 ef7797e13d3a75526946a3bcf00daec9fc9c9c4d51ddc7cc5df888f74dd434d1 OP_EQUAL OP_ENDIF",
  "type": "nonstandard",
  "p2sh": "2N8grZYRHeBLPy9hE7LoY6MvS53j81UYcpP",
  "segwit": {
    "asm": "0 204808939e268852417e8d2988688fbb7482887aa3ecb10e46e848427976bd77",
    "hex": "0020204808939e268852417e8d2988688fbb7482887aa3ecb10e46e848427976bd77",
    "reqSigs": 1,
    "type": "witness_v0_scripthash",
    "addresses": [
    "p2sh-segwit": "2NFRd4rwoGkRy13fA4h2DhmHrAUgJ1rx5cr"

bitcoin-cli sendtoaddress 2N8grZYRHeBLPy9hE7LoY6MvS53j81UYcpP 0.001

create raw txn with below given txid and vout:

bitcoin-cli getrawtransaction 4383cef8bb9026ec5a0a7ee0be4379b5d888bddbbf328ed2c356941fb0e2a4af

Some parts of o/p:

txid: 4383cef8bb9026ec5a0a7ee0be4379b5d888bddbbf328ed2c356941fb0e2a4af

vout: {

"value": 0.00100000, "n": 1, "scriptPubKey": { "asm": "OP_HASH160 a962d0d582a9ffe4f4ffeef878ced14b381a3daa OP_EQUAL", "hex": "a914a962d0d582a9ffe4f4ffeef878ced14b381a3daa87", "reqSigs": 1, "type": "scripthash", "addresses": [ "2N8grZYRHeBLPy9hE7LoY6MvS53j81UYcpP" ] } }

bitcoin-cli createrawtransaction "[{\"txid\":\"4383cef8bb9026ec5a0a7ee0be4379b5d888bddbbf328ed2c356941fb0e2a4af\",\"vout\":1}]" "[{\"mtrNo3QBMwXRV5HdxknBesWBzitqEnfLxM\":0.0003},{\"2N8grZYRHeBLPy9hE7LoY6MvS53j81UYcpP\":0.000688}]"



adding the signature:

ScriptSig part:

secret hex: 0a626c6f636b636861696e



secrethash + if condn+ redeem script


manually created signature:


bitcoin-cli sendrawtransaction 0200000001afa4e2b01f9456c3d28e32bfdbbd88d8b57943bee07e0a5aec2690bbf8ce834301000000380a626c6f636b636861696e01512a63029b00b275a820ef7797e13d3a75526946a3bcf00daec9fc9c9c4d51ddc7cc5df888f74dd434d18768ffffffff0230750000000000001976a9149245fd67a780afdd93ae3e8d39cdc41b40deeeaa88acc00c01000000000017a914a962d0d582a9ffe4f4ffeef878ced14b381a3daa8700000000

error code: -26 error message: non-mandatory-script-verify-flag (Locktime requirement not satisfied) (code 64)

the same error , was getting even if the blocksize reached more than 155.

Can you please explain to me what I have missed?

  • I would like to replicate what you're doing: could you please edit in the result of bitcoin-cli getrawtransaction 4383cef8bb9026ec5a0a7ee0be4379b5d888bddbbf328ed2c356941fb0e2a4af – Alistair Mann Sep 30 '19 at 16:50
  • @AlistairMann edited. – kitty Oct 1 '19 at 5:52
  • 1
    @kitty you have set nSequence of your transaction to default, which is 4294967295. When redeeming OP_CSV, your nSequence should be higher than the blocks locked in OP_CSV, but lower than the number of blocks that have been mined since the transaction was confirmed in the block. You can set your nSequence to 155 in the createrawtransaction step. – Ugam Kamat Oct 1 '19 at 6:00
  • Hi @UgamKamat , could not understand properly. Say my block size 155, in the script condition is for 160 then what can be set to sequence value to redeem the coins? When you are mentioning the nsequence should be greater than the blocks locked in CSV (i.e script) and should be less than blocks mined (block size). It sounds contradictory. Can you please give some clarification on this? When I changed the seqeunce value to a specified value, I m getting error as error code: -26 error message: non-BIP68-final (code 64) – kitty Oct 1 '19 at 13:40
  • @kitty 1/2 for example, let us assume that you locked the bitcoins in CSV output for 155 blocks and was mined in a block at height N. Now, after some elapsed time the current height of the blockchain is N+166. Since 166 blocks have passed you can spend that locked output. However, you have to indicate that by setting the nSequence value. This value has to be more than 155, but less than 166 in our case. If we set it more than 166, the software will detect that the value of nSequence is higher than the number of blocks have passed and reject the transaction. – Ugam Kamat Oct 1 '19 at 16:05

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.