{"id":19223760,"url":"https://github.com/coldcard/push-tx","last_synced_at":"2025-05-13T10:50:25.061Z","repository":{"id":245286916,"uuid":"814708598","full_name":"Coldcard/push-tx","owner":"Coldcard","description":"NFC Push TX","archived":false,"fork":false,"pushed_at":"2025-02-19T14:06:20.000Z","size":1130,"stargazers_count":5,"open_issues_count":0,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-20T23:32:45.539Z","etag":null,"topics":["bitcoin","bitcoin-transaction"],"latest_commit_sha":null,"homepage":"https://pushtx.org","language":"HTML","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Coldcard.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-06-13T14:39:45.000Z","updated_at":"2025-02-19T14:05:04.000Z","dependencies_parsed_at":"2024-06-21T05:48:21.984Z","dependency_job_id":"8156c599-e11f-4f6d-be4d-ac95b6550e3f","html_url":"https://github.com/Coldcard/push-tx","commit_stats":null,"previous_names":["coldcard/push-tx"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Coldcard%2Fpush-tx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Coldcard%2Fpush-tx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Coldcard%2Fpush-tx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Coldcard%2Fpush-tx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Coldcard","download_url":"https://codeload.github.com/Coldcard/push-tx/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253928528,"owners_count":21985793,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bitcoin","bitcoin-transaction"],"created_at":"2024-11-09T15:09:28.050Z","updated_at":"2025-05-13T10:50:25.041Z","avatar_url":"https://github.com/Coldcard.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NFC Push TX\n\n[![Open video on YouTube](img/cc-pushtx.png)](https://www.youtube.com/watch?v=Tte7nddBUCI)\n\nThis feature allows single-tap broadcast of freshly-signed transactions from a [COLDCARD](https://coldcard.com) and hopefully others soon(tm) \n\n`PSBT ==[SD|QR|NFC]==\u003e COLDCARD signed TXN ==[NFC tap]==\u003e Phone Browser ==\u003e TXN Broadcast by node`\n\nOnce enabled with a URL, the COLDCARD will show the NFC animation\nafter signing the transaction. When the user taps their phone, the\nphone will see an NFC tag with URL inside. That URL contains the\nsigned transaction ready to go, and once opening in the mobile\nbrowser of the phone, that URL will load. The page will connect to\na Bitcoin node and send the transaction on the public Bitcoin network.\n\nThis feature is available on Q and Mk4 and requires NFC to be enabled.\nSee `Settings \u003e NFC Push Tx` to enable.\n\n## URL Protocol Spec\n\nThe URL contains the signed transaction in \n[base64url](https://datatracker.ietf.org/doc/html/rfc4648#section-5)\nand an truncated SHA-256 checksum.\n\nRead the [full specification here](https://github.com/Coldcard/firmware/blob/master/docs/nfc-pushtx.md).\n\n## Public Services\n\nWe know of the following services that your Coldcard can use:\n\n- `mempool.space/pushtx`\n- `coldcard.com/pushtx`\n- `pushtx.org/pushtx`\n\nYou can also host your own backend and there may be other services out there\nwe don't know about.\n\n## Roll Your Own\n\nThis [github repo](https://github.com/Coldcard/push-tx) contains the source for\nthe code hosted at `Coldcard.com/pushtx` for your review or to replace\nand personalize. It also is the source for this website (*pushtx.org*).\n\nA single-file (html and javascript) file is available\nat [from pushtx.org](cc-implementation/build-single-file/index.html)\nor slightly more directly\n[from the github repo.](https://github.com/Coldcard/push-tx/blob/master/cc-implementation/build-single-file/index.html)\nYou can host this file anywhere your phone can reach, and then use that URL in your\nCOLDCARD settings. It uses your phone's browser to submit \nto `mempool.space` and `blockstream.info` sites (both at same time). It is equivalent\nto the page hosted at `https://coldcard.com/pushtx#`\n\nIt's not hard to write your own code to submit a signed transaction to your\nnode directly using the RPC-JSON protocol. For maximum privacy, that would\nbe best, since there is no need to involve outside services.\n\n### Notes\n\n- Complete URL might be as large as 8,000 bytes. Some web servers will not support beyond\n  4k bytes and the NFC implementation of the phone may also have limits. Truncation\n  errors will be detected by the checksum.\n- The service URL provided must end in `?` or `#` or `\u0026`.\n- Honest backends will not log the IP address of incoming transactions, but there is\n  no way to enforce that, and CloudFlare sees all.\n\n## Example URL\n\n```\nhttps://mempool.space/pushtx#t=AgAAAAOHqK3w3hC6PSC0buthnJA5R9Y88WAlEvm9cifNVUPhIwAAAABqRzBEAiB-M9YprNYoohqHdQHg4wY_qcEMwDmyIQH8prykk8-0KwIgARxcojKrtixicouiUxhk4jQq_MAl11ptIgHDlRjgk5ABIQM4bgMAVDbDSr_9CvLjbg5nxrWnDGI-kVmkfL81GXZtCf____8OaH0RxW7DjZKdIF6rvbHvvyFGCBQ0PTgpx20nA_wbLgAAAABqRzBEAiBwUFigORJDPK8ptnYPAntjV-RUn1jAuzphicQstwVv-QIgEbMC8FWXQ5Jve5DaAqKJsqoj3peK83iub_oOkmbiYg4BIQO5Ehn2t0oUG3hnK4cBnwCwMc33DcdJ8aSMWzRQ_wjZL_____-UG6M-eBeAun-EZp6EbVypvVJ3mXCQrN_fUDn-kwoEnQAAAABqRzBEAiAgFAtVTpQYTKplc9NuV7Ws7ZFYeNO8BCS4ozgWrgd2ogIgGTTcw98xQdcGWeWQhVfVm_vZorBIOYovQPQeK0Lg9t8BIQLPWPioVWvj1z4NMHBCkeirYOUalCa83wbSH0CREnGZvv____8CjM_wCAAAAAAZdqkUIJA8_yqzaj0NzhvYVEIBno5gETGIrIzP8AgAAAAAGXapFEaV7xTyleuEX9OejdlUlsz7RTr0iKwAAAAA\u0026c=hre47vyMC78\u0026n=XTN\n```\n\n- this transaction doesn't have valid inputs, and will cause an error\n- mempool.space will redirect this to a testnet endpoint (because ends with `n=XTN`)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoldcard%2Fpush-tx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoldcard%2Fpush-tx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoldcard%2Fpush-tx/lists"}