What is a pull-based transaction model? What is a push-based transaction model?

I've heard people describe bitcoin as a push-based transaction model.

I've heard people describe traditional financial transactions (eg IBAN/SEPA, ACH, credit card, etc) as pull-based.

This fundamental difference appears to me to be one of the most important features of bitcoin over traditional financial money transfers, but I've struggled to find much information on the Internet that explains these differences and why it matters to the security of funds in long-term storage.

I'm looking for a simple (yet thorough) explanation of these two distinct transaction models. Ideally, I'd like an infographic that shoes visually the difference between [a] giving your credentials to someone else and allowing them to take funds out of our account (pull-based) vs [b] using asymmetric cryptography; keeping the keys to yourself, and sending transactions to others (push-based).


2 Answers 2


Let's say you sign up for a monthly subscription to an online newspaper or magazine. A pull based system would take the payment out of your bank account every month until you canceled the subscription. A push based system would require you to agree to or "push" the payment every month as the online newspaper would not have the ability to take the payment otherwise. Blockchains like Bitcoin are generally push based as the only way for funds to move are if the owner constructs and signs a transaction with their private key. With bank accounts the bank can technically move or freeze funds without the owner's permission. Obviously they are constrained by regulation and laws but from a technical perspective they can do whatever they want with your funds.


Bitcoin is push-based because the holder of some BTC must take action to make it move - by signing a set of his UTXOs and publishing the transaction. It is not possible to pre-approve some recipients so they may alone take the money when some agreed-upon conditions would be met.

Pull transactions would be possible if Bitcoin Script would support covenants through some opcodes that would give the running script access to local transaction context. That way, you could make a contract that specifies something like: owner A can take funds at any time OR service B can take 0.001 BTC when N blocks have passed since this transaction was mined and in that case he also MUST return the change back to the same contract address.

That way, service B could know that there's funding for some X months of service, and could alone construct the transaction to take the money at regular intervals. If A wanted to cancel the service, he'd simply withdraw all the funds from the contract at which moment the service monitoring the address would see that and stop delivery of the service.

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.