1

I am new in Bitcoin and I try to create an address in Bitcoind and send a transaction that the amount will be spendable in a specific height of the blockchain.

Here is what I have done:

privateKey = 'cS5bZo8D1PBXwLbpGwYpb3CPvev5FYA7zPpftXAc6vzvbXt3aAa4'

absolute_time = 150

addr = getAddressFromPriv(privateKey) #customFunction

seq = Sequence(TYPE_ABSOLUTE_TIMELOCK, absolute_time)

script = Script([seq.for_script(), 
                        'OP_CHECKLOCKTIMEVERIFY', 
                        'OP_DROP', 
                        'OP_DUP', 
                        'OP_HASH160', 
                        p2pkh_addr.to_hash160(), 
                        'OP_EQUALVERIFY', 
                        'OP_CHECKSIG'])

addr2 = convertScriptToAddress(script) 

Then in bitcoin-cli I use that addr2 to bitcoin-cli sendtoaddress <addr2> 10

However, when I inspect the transaction it says that it is spendable in the current block height. Any idea?

3
  • 1
    Shouldn't you add the <absolute time/blockheight> before OP_CHECKLOCKTIMEVERIFY in the script? Also you are using 150 as the block height, which means it should be spendable immediately.
    – Ugam Kamat
    Commented Apr 12, 2019 at 10:43
  • @UgamKamat: I think you're on to it, but please don't use comments to answer a question, rather post an answer. You can always edit your answer as the topic evolves.
    – Murch
    Commented Apr 12, 2019 at 14:02
  • Yeah, wasn't totally sure. So wanted @Tasos to check if that works. Writing it as an answer.
    – Ugam Kamat
    Commented Apr 12, 2019 at 14:41

1 Answer 1

1

You have to add the absolute time/blockheight before OP_CHECKLOCKTIMEVERIFY in the script to depict how long you want to lock the transaction. Also you are using 150 as the CLTV parameter. Anything that is below 500M is dubbed as block height. Given you are using 150, that means that transaction is not spendable until 150 blocks, which should mean it is spendable immediately.

4
  • I use regtest and I reset the chain to test it. So, 150 blocks haven't reached yet. As for the OP_CHECKLOCKTIMEVERIFY isn't the seq.for_script() which is before that do the trick? Since the seq has the absolute time/blockheight
    – Tasos
    Commented Apr 12, 2019 at 15:36
  • No. nSequnce has different meaning for CLTV. If nSequence value is >=2^31 it indicates that CLTV, or opt-in-replace is used. However, if nSequence value <2^31, it indicates CSV. nSequence value should however not be 0xffffffff when using cltv
    – Ugam Kamat
    Commented Apr 12, 2019 at 15:48
  • So, to understand, it should be replaced with an integer for the absolute height like that? script = Script([150, 'OP_CHECKLOCKTIMEVERIFY', 'OP_DROP', 'OP_DUP', 'OP_HASH160', p2pkh_addr.to_hash160(), 'OP_EQUALVERIFY', 'OP_CHECKSIG'])
    – Tasos
    Commented Apr 12, 2019 at 15:52
  • Unsure about the exact syntax, but think that should work.
    – Ugam Kamat
    Commented Apr 12, 2019 at 16:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.