{"id":16340798,"url":"https://github.com/casey/nftparty","last_synced_at":"2026-01-24T11:01:25.474Z","repository":{"id":81087708,"uuid":"500223354","full_name":"casey/nftparty","owner":"casey","description":null,"archived":false,"fork":false,"pushed_at":"2022-06-09T21:32:15.000Z","size":2470,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-25T14:40:33.917Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"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/casey.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}},"created_at":"2022-06-05T22:10:35.000Z","updated_at":"2023-06-05T10:02:22.000Z","dependencies_parsed_at":null,"dependency_job_id":"7ca1b358-9326-48b8-9e0e-973f72bc3daa","html_url":"https://github.com/casey/nftparty","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/casey/nftparty","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/casey%2Fnftparty","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/casey%2Fnftparty/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/casey%2Fnftparty/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/casey%2Fnftparty/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/casey","download_url":"https://codeload.github.com/casey/nftparty/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/casey%2Fnftparty/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28725502,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T10:24:43.181Z","status":"ssl_error","status_checked_at":"2026-01-24T10:24:36.112Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2024-10-10T23:57:55.151Z","updated_at":"2026-01-24T11:01:25.449Z","avatar_url":"https://github.com/casey.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ordinal NFT Party\n\n---\n\n# [buddha.nft](nfts/buddha.nft)\n- Ordinal: 1425808478041399\n- Issuer: pubkey133rdsdr9ty662pe7ncznfeea89mrj559k7zatmevuep6hv2qh4hqk2lt6e\n![](nfts/buddha.jpg)\n\n---\n\n# [cypherperro.nft](nfts/cypherperro.nft)\n- Ordinal: 1425808477891389\n- Issuer: pubkey1yc20ykku7pnnxe6cvyzpvagtuhys8qmwwcz79acehvd3ek0rfunqesmk6f\n![](nfts/cypherperro.jpg)\n\n---\n\n# [joerodgers.nft](nfts/joerodgers.nft)\n- Ordinal: 1715740163942679\n- Issuer: pubkey1k2pg35p7e7cela42znvrk5z4nl8s99sx0ezk5haznt9rzm4xeynqfeself\n![](nfts/joerodgers.jpg)\n\n---\n\n# [purity.nft](nfts/purity.nft)\n- Ordinal: 1425808478031389\n- Issuer: pubkey1p65jx0hkcl005drxr74y5cpa9438s5e6murwca036v7mkdq0nzfsn68qfc\n\n```\n== What is the pure digital practice? ==\n\nThe pure digital practice removes impurities and confusion in digital realms.\n\nThe purpose of pure digital practice is to cleanse and nourish living souls.\n\n== Why is digital purity desirable? ==\n\nAnything that offers the ability to verify its purity is like God. The more\neasily verifiable its purity, the more God-like it is.\n```\n\n---\n\n# [ratio.nft](nfts/ratio.nft)\n- Ordinal: 1425808478091389\n- Issuer: pubkey1mqlg3p5naw7dk3w935wzcztqsp08xjckyw4lycf4wsz78j9ftyssqg60la\n![](nfts/ratio.png)\n\n---\n\n# [shitcoin.nft](nfts/shitcoin.nft)\n- Ordinal: 1425808477901389\n- Issuer: pubkey14dg8f49kzzqshqsjcf2lauanwpnud5kxu92uu9xkqdywsh27sguseelqst\n![](nfts/shitcoin.jpg)\n\n---\n\n# Today's Agenda\n- Who am I?\n- What are ordinals?\n- What does that have to do with NFTs?\n- Paper wallet ordinal NFT minting party w/free sats and wildly irresponsible\n  private key management!\n\n---\n\n# Feel free to interrupt and ask questions!\n\n---\n\n# Who am I?\n- I'm just this guy, you know?\n- Bitcoin, Rust, and generative art programmer\n- Last big project was Agora, a server for selling downloads for Lightning\n  Network payments\n\n---\n\n# Why ordinals?\n- Wanted a simple protocol for assets on Bitcoin\n- Don't require any modification to the protocol\n- Aesthetically appealing, so particularly well-suited for art\n\n---\n\n# What are ordinals?\n\n---\n\n# Ordinals are just serial numbers for satoshis\n\n---\n\n# They start at 0, and go up to 1,906,077,499,999,999 (so far!)\n\n---\n\n# Are transferred with a simple first-in-first-out algorithm\n\n```\n[2] [1] [3] → [4] [2]\n```\n\n```\n[a b] [c] [d e f] → [? ? ? ?] [? ?]\n```\n\n```\n[a b] [c] [d e f] → [a b c d] [e f]\n```\n\n---\n\n# What about fees?\n\n```\n[2] [1] [3] → [4]\n```\n\n```\n[a b] [c] [d e f] → [a b c d]\n```\n\n```\n[SUBSIDY] [e f] → [SUBSIDY e f]\n```\n\n---\n\n# Specification\n\n```python\n# subsidy of block at given height\ndef subsidy(height):\n  return 50 * 100_000_000 \u003e\u003e height // 210_000\n\n# first ordinal of subsidy of block at given height\ndef first_ordinal(height):\n  start = 0\n  for height in range(height):\n    start += subsidy(height)\n  return start\n\n# assign ordinals in given block\ndef assign_ordinals(block):\n  first = first_ordinal(block.height)\n  last = first + subsidy(block.height)\n  coinbase_ordinals = list(range(first, last))\n\n  for transaction in block.transactions[1:]:\n    ordinals = []\n    for input in transaction.inputs:\n      ordinals.extend(input.ordinals)\n\n    for output in transaction.outputs:\n      output.ordinals = ordinals[:output.value]\n      del ordinals[:output.value]\n\n    coinbase_ordinals.extend(ordinals)\n\n  for output in block.transaction[0].outputs:\n    output.ordinals = coinbase_ordinals[:output.value]\n    del coinbase_ordinals[:output.value]\n```\n\n---\n\n# What are ordinals good for?\n\nIf you want a token, you can just pick and ordinal to represent your token, and\nuse the location of the ordinal to represent ownership.\n\nThe person who controls the private key that corresponds to the public key of\nthe UTXO that contains the ordinal is the current owner of the token.\n\n---\n\n# What else are ordinals good for?\n\n- Aesthetics!\n- Supporting the fee market!\n\n---\n\n# Wacky aside: Ordinal traits\n\n- 😏 Rare ordinals\n- 🤤 Epic ordinals\n- 🥵 Legendary ordinals\n- Bounties: https://ordinals.com/bounties/\n\n---\n\n# Ordinal Index\n\n- [big](http://api.ordinals.com:8000/list/e11d223685e110c5df93d7ae57f63c535ac59d1d65c16de779f23a9166229c7e:0)\n- [small](http://api.ordinals.com:8000/list/81bb70199e0c2cf6a32ee0b8079085eb590c311f6e91bb51c14b85846593a76e:1)\n- [spent](http://api.ordinals.com:8000/list/b40375d8e4f50728c18ed292c2e40ed616797592a2f5587c9f72a23a55973f9e:0)\n\n---\n\n# What are ordinals not good for?\n\n- Not having to make weird multi-step transactions to avoid hitting the dust\n  limit\n- Being efficient with block space\n- Very high divisibility\n- Small databases\n\n---\n\n# Ordinal NFTs\n\n1. Hash: (ordinal || content hash || public key)\n2. Sign\n3. Append signature, data, and then bech32 encode\n4. Et voilà: `nft1qqz3psl8mvjm9t573n29l8q0phklcdhg65392pv0gpc79tydeujltn5g2h4fsg...`\n\n---\n\n# Ordinal NFTs\n\n- No on-chain transaction to mint\n- Store the NFT wherever\n- Anyone who has access to the NFT will know the secret, hidden meaning of the\n  ordinal.\n\n---\n\n# DISCLAIMER\n\n[thicccc transaction](https://mempool.space/tx/c3a7786e164bbc7620a90601a1f284cff1a5e93c59978f566a9c7104bc33975a)\n\n---\n\n# NFT Minting Party!\n1. Get a paper wallet with a PRIVATE_KEY\n2. Pick a FILE to nft-ize (A meme? Some art? A poem?)\n3. Pick an appealing ORDINAL on your paper wallet\n4. Mint an nft and verify it:\n    ```\n    ord mint \\\n      --data-path FILE \\\n      --ordinal ORDINAL \\\n      --signing-key PRIVATE_KEY \\\n      --output-path output.nft\n\n    ord verify --input-path output.nft\n    ```\n5. Send `output.nft` to casey@rodarmor.com or @rodarmor, if you want, so I can\n   make a gallery!\n\n## `ord` installation options:\n\n1. Linux, MacOS, and Windows x86 binaries:\n   `https://github.com/casey/ord/releases/tag/0.0.2`\n2. `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh \u0026\u0026 cargo install ord`\n3. Make me run it for you so you don't have to install weird code on your laptop\n\n## Extra Credit for the Deranged Overachiever: Mint a Degenerate NFT\n\n1. Go to: https://degenerate.computer\n2. Read the inscrutable manual: https://degenerate.computer/man/\n3. Input a program and execute it with `Shift + Enter`. for example:\n    ```\n    computer.resolution(4096);\n    computer.scale(0.99);\n    computer.circle();\n    for (let i = 0; i \u003c 100; i++) {\n      computer.render();\n    }\n    computer.save();\n    ```\n4. Mint an NFT with the PNG\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcasey%2Fnftparty","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcasey%2Fnftparty","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcasey%2Fnftparty/lists"}