diff --git a/p2pkh-template.json b/p2pkh-template.json index bb80ce1..bdc1208 100644 --- a/p2pkh-template.json +++ b/p2pkh-template.json @@ -1 +1,904 @@ -{"$schema":"https://libauth.org/schemas/wallet-template-v0.schema.json","name":"Wallet (P2PKH)","description":"A standard single-factor wallet template that uses Pay-to-Public-Key-Hash (P2PKH) locking scripts.","icon":"wallet","version":0,"supported":["BCH_2023_05","BCH_2024_05","BCH_2025_05","BCH_2026_05"],"roles":{"owner":{"name":"Wallet Owner","description":"The party who can spend from this wallet.","icon":"owner"},"receiver":{"name":"Receiver","description":"A party that is receiving value.","icon":"receiver"},"sender":{"name":"Sender","description":"A party that is sending value.","icon":"sender"}},"start":[{"action":"receive","role":"receiver"},{"action":"requestSatoshis","role":"receiver"},{"action":"requestFungibleTokens","role":"receiver"},{"action":"requestNonfungibleTokens","role":"receiver"}],"actions":{"receive":{"name":"Receive","description":"Receive an unspecified amount of cash and/or tokens from one or more senders.","icon":"receive","roles":{"receiver":{"name":"Receive","description":"Receive an unspecified amount of cash and/or tokens from one or more senders.","icon":"receive","requirements":{"generate":["ownerKey"]}},"sender":{"name":"Send","description":"Send an unspecified amount of cash and/or tokens to the provided receiver.","icon":"send"}},"requirements":{"roles":[{"role":"receiver","slots":{"min":1,"max":1}},{"role":"sender","slots":{"min":1}}],"variables":["requestedSatoshis"]},"transaction":"receiveTransaction"},"requestSatoshis":{"name":"Request Satoshis","description":"Requests a specific amount of Bitcoin Cash from one or more senders.","icon":"request","roles":{"receiver":{"name":"Request Satoshis","description":"Requests a specific amount of Bitcoin Cash from one or more senders.","icon":"request","requirements":{"generate":["ownerKey"],"variables":["requestedSatoshis"]}},"sender":{"name":"Send","description":"Send a specific amount of Bitcoin Cash to the provided receiver.","icon":"send"}},"requirements":{"roles":[{"role":"receiver","slots":{"min":1,"max":1}},{"role":"sender","slots":{"min":1}}]},"transaction":"requestSatoshisTransaction"},"requestFungibleTokens":{"name":"Request Fungible Tokens","description":"Requests a specific amount of a fungible tokens from one or more senders.","icon":"request","roles":{"receiver":{"name":"Request Fungible Tokens","description":"Requests a specific amount of a fungible tokens from one or more senders.","icon":"request","requirements":{"generate":["ownerKey"],"variables":["requestedTokenCategory","requestedTokenAmount"]}},"sender":{"name":"Send","description":"Send a specific amount of fungible tokens to the provided receiver.","icon":"send"}},"requirements":{"roles":[{"role":"receiver","slots":{"min":1,"max":1}},{"role":"sender","slots":{"min":1}}]},"transaction":"requestFungibleTokensTransaction"},"requestNonfungibleTokens":{"name":"Request a Non-fungible Token","description":"Requests a non-fungible token from one or more senders.","icon":"request","roles":{"receiver":{"name":"Request a Non-fungible Token","description":"Requests a non-fungible token from one or more senders.","icon":"request","requirements":{"generate":["ownerKey"],"variables":["requestedTokenCategory","requestedTokenCapability","requestedTokenCommitment"]}},"sender":{"name":"Send","description":"Send a non-fungible token to the provided receiver.","icon":"send"}},"requirements":{"roles":[{"role":"receiver","slots":{"min":1,"max":1}},{"role":"sender","slots":{"min":1}}]},"transaction":"requestNonfungibleTokensTransaction"},"sendSatoshis":{"name":"Send Satoshis","description":"Sends a specific amount of Bitcoin Cash to a given recipient.","icon":"send","roles":{"sender":{"requirements":{"variables":["transferredSatoshis","recipientLockingscript"],"secrets":["ownerKey"]}}},"requirements":{"roles":[{"role":"sender","slots":{"min":1,"max":1}}]},"condition":"$(OP_INPUTINDEX OP_UTXOVALUE OP_GREATERTHAN)","transaction":"transferSatoshisTransaction"},"sendFungibleTokens":{"name":"Send Fungible Tokens","description":"Send a specific amount of a fungible token to a given recipient.","icon":"send","roles":{"sender":{"requirements":{"variables":["transferredTokenCategory","transferredTokenAmount","recipientLockingscript"],"secrets":["ownerKey"]}}},"requirements":{"roles":[{"role":"sender","slots":{"min":1,"max":1}}]},"condition":"$(OP_INPUTINDEX OP_UTXOTOKENAMOUNT <0> OP_GREATERTHAN)","transaction":"transferFungibleTokensTransaction"},"sendNonfungibleTokens":{"name":"Send a Non-fungible Token","description":"Send a non-fungible token to a given recipient.","icon":"send","roles":{"sender":{"requirements":{"variables":["transferredTokenCategory","transferredTokenCapability","transferredTokenCommitment","recipientLockingscript"],"secrets":["ownerKey"]}}},"requirements":{"roles":[{"role":"sender","slots":{"min":1,"max":1}}]},"condition":"$(OP_INPUTINDEX OP_UTXOTOKENCATEGORY OP_SIZE OP_NIP <32> OP_GREATERTHAN)","transaction":"transferNonfungibleTokensTransaction"},"burnFungibleTokens":{"name":"Delete Fungible Tokens","description":"Permanently and irreversibly deletes one or more fungible tokens.","icon":"burn","roles":{"owner":{"requirements":{"variables":["burnedTokenCategory","burnedTokenAmount"],"secrets":["ownerKey"]}}},"requirements":{"roles":[{"role":"owner","slots":{"min":1,"max":1}}]},"condition":"$(OP_INPUTINDEX OP_UTXOTOKENAMOUNT <0> OP_GREATERTHAN)","transaction":"burnFungibleTokensTransaction"},"burnNonfungibleTokens":{"name":"Delete a Non-fungible Token","description":"Permanently and irreversibly deletes one non-fungible token.","icon":"burn","roles":{"owner":{"requirements":{"variables":["burnedTokenCategory","burnedTokenCapability","burnedTokenCommitment"],"secrets":["ownerKey"]}}},"requirements":{"roles":[{"role":"owner","slots":{"min":1,"max":1}}]},"condition":"$(OP_INPUTINDEX OP_UTXOTOKENCATEGORY OP_SIZE OP_NIP <32> OP_GREATERTHAN)","transaction":"burnNonfungibleTokenTransaction"},"sign":{"name":"Sign Message","description":"Signs a provided message using the Bitcoin message signing protocol.","icon":"sign","roles":{"owner":{"requirements":{"variables":["messageToSign"],"secrets":["ownerKey"]}}},"requirements":{"roles":[{"role":"owner","slots":{"min":1,"max":1}}]},"data":["messageSignature"]},"verify":{"name":"Verify Message Signature","description":"Verifies a provided message signature according to the Bitcoin message signing protocol.","icon":"verify","roles":{"owner":{"requirements":{"variables":["messageSignature","messageToVerify"],"secrets":["ownerKey"]}}},"requirements":{"roles":[{"role":"owner","slots":{"min":1,"max":1}}]},"data":["messageSignatureValidity"]}},"data":{"messageSignature":{"value":"$( OP_CAT )","type":"bytes","hint":"signature"},"messageSignatureValidity":{"value":"$( OP_CAT OP_CHECKDATASIG)","type":"integer","hint":"script_boolean"}},"transactions":{"receiveTransaction":{"name":"Transfer request","description":"Transfer request for an unspecified amount of cash and/or tokens.","icon":"request","roles":{"receiver":{"name":"Received","description":"Received an unspecified amount of cash and/or tokens.","icon":"receive"},"sender":{"name":"Sent","description":"Sent an unspecified amount of cash and/or tokens.","icon":"send"}},"inputs":[],"outputs":[{"output":"receiveOutput"}],"version":2,"locktime":0,"composable":true},"requestSatoshisTransaction":{"name":"Transfer request","description":"Transfer request for $() satoshis.","icon":"request","roles":{"receiver":{"name":"Received","description":"Received $() satoshis.","icon":"receive"},"sender":{"name":"Sent","description":"Sent $() satoshis.","icon":"send"}},"inputs":[],"outputs":[{"output":"requestSatoshisOutput"}],"version":2,"locktime":0,"composable":true},"requestFungibleTokensTransaction":{"name":"Transfer request","description":"Transfer request for $( OP_DIV).$( OP_MOD) $() tokens.","icon":"request","roles":{"receiver":{"name":"Received","description":"Received $( OP_DIV).$( OP_MOD) $() tokens.","icon":"receive"},"sender":{"name":"Sent","description":"Sent $( OP_DIV).$( OP_MOD) $() tokens.","icon":"send"}},"inputs":[],"outputs":[{"output":"requestFungibleTokensOutput"}],"version":2,"locktime":0,"composable":true},"requestNonfungibleTokensTransaction":{"name":"Transfer request","description":"Transfer request for one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) () token, with $() commitment.","icon":"request","roles":{"receiver":{"name":"Received","description":"Received one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) () token, with $() commitment.","icon":"receive"},"sender":{"name":"Sent","description":"Sent the requested non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) () token, with $() commitment.","icon":"send"}},"inputs":[],"outputs":[{"output":"requestNonfungibleTokensOutput"}],"version":2,"locktime":0,"composable":true},"transferSatoshisTransaction":{"name":"Satoshis Transferred","description":"$() satoshis were transferred to a recipient.","icon":"send","roles":{"receiver":{"name":"Received","description":"Received $() satoshis.","icon":"receive"},"sender":{"name":"Sent","description":"Sent $() satoshis.","icon":"send"}},"inputs":[],"outputs":[{"output":"transferSatoshisOutput"}],"version":2,"locktime":0,"composable":true},"transferFungibleTokensTransaction":{"name":"Fungible Tokens Transferred","description":"$( OP_DIV).$( OP_MOD) $() tokens were transferred to a recipient.","icon":"send","roles":{"receiver":{"name":"Received","description":"Received $( OP_DIV).$( OP_MOD) $() tokens.","icon":"receive"},"sender":{"name":"Sent","description":"Sent $( OP_DIV).$( OP_MOD) $() tokens.","icon":"send"}},"inputs":[],"outputs":[{"output":"transferFungibleTokensOutput"}],"version":2,"locktime":0,"composable":true},"transferNonfungibleTokensTransaction":{"name":"Non-fungible Token Transferred","description":"One non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) $() token was transferred to a recipient, with $() commitment.","icon":"send","roles":{"receiver":{"name":"Received","description":"Received one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) () token, with $() commitment.","icon":"receive"},"sender":{"name":"Sent","description":"Sent one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) () token, with $() commitment.","icon":"send"}},"inputs":[],"outputs":[{"output":"transferNonfungibleTokenOutput"}],"version":2,"locktime":0,"composable":true},"burnFungibleTokensTransaction":{"name":"Deleted fungible tokens","description":"Permanently and irreversibly deleted $( OP_DIV).$( OP_MOD) $() tokens.","icon":"burn","inputs":[{"input":"burnFungibleTokensInput"}],"outputs":[],"version":2,"locktime":0,"composable":true},"burnNonfungibleTokenTransaction":{"name":"Deleted non fungible token","description":"Permanently and irreversibly deleted a non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) () token, with $() commitment.","icon":"burn","inputs":[{"input":"burnNonfungibleTokenInput"}],"outputs":[],"version":2,"locktime":0,"composable":true}},"outputs":{"receiveOutput":{"name":"Recipient output","description":"Transferred an unspecified amount of cash and/or tokens to a recipient.","icon":"receive","roles":{"receiver":{"name":"Received","description":"Received an unspecified amount of cash and/or tokens."},"sender":{"name":"Sent","description":"Sent an unspecified amount of cash and/or tokens."}},"lockscript":"receivingLockingScript"},"requestSatoshisOutput":{"name":"Recipient output","description":"Transferred $() satoshis to a recipient.","icon":"request","roles":{"receiver":{"name":"Received","description":"Received $() satoshis."},"sender":{"name":"Sent","description":"Sent $() satoshis."}},"lockscript":"receivingLockingScript","valueSatoshis":"$()","token":null},"requestFungibleTokensOutput":{"name":"Recipient output","description":"Transferred $( OP_DIV).$( OP_MOD) $() tokens to a recipient.","icon":"request","roles":{"receiver":{"name":"Received","description":"Received $( OP_DIV).$( OP_MOD) $() tokens."},"sender":{"name":"Sent","description":"Sent $( OP_DIV).$( OP_MOD) $() tokens."}},"lockscript":"receivingLockingScript","valueSatoshis":"1000","token":{"category":"$()","amount":"$()","nft":null}},"requestNonfungibleTokensOutput":{"name":"Recipient output","description":"Transferred one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) $() token to a recipient, with $() commitment.","icon":"request","roles":{"receiver":{"name":"Received","description":"Received one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) $() token, with $() commitment."},"sender":{"name":"Sent","description":"Sent the requested non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) $() token, with $() commitment."}},"lockscript":"receivingLockingScript","valueSatoshis":"1000","token":{"category":"$()","amount":null,"nft":{"capability":"$()","commitment":"$()"}}},"transferSatoshisOutput":{"name":"Recipient output","description":"Transferred $() satoshis to a recipient.","icon":"send","roles":{"receiver":{"name":"Received","description":"Received $() satoshis."},"sender":{"name":"Sent","description":"Sent $() satoshis."}},"lockscript":"sendingLockingscript","valueSatoshis":"$()"},"transferFungibleTokensOutput":{"name":"Recipient output","description":"Transferred $( OP_DIV).$( OP_MOD) $() tokens to a recipient.","icon":"send","roles":{"receiver":{"name":"Received","description":"Received $( OP_DIV).$( OP_MOD) $() tokens."},"sender":{"name":"Sent","description":"Sent $( OP_DIV).$( OP_MOD) $() tokens."}},"lockscript":"sendingLockingscript","token":{"category":"$()","amount":"$()"}},"transferNonfungibleTokenOutput":{"name":"Recipient output","description":"Transferred one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) $() token to a recipient, with $() commitment.","icon":"send","roles":{"receiver":{"name":"Received","description":"Received one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) $() token, with $() commitment."},"sender":{"name":"Sent","description":"Sent one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) $() token, with $() commitment."}},"lockscript":"sendingLockingscript","token":{"category":"$()","nft":{"capability":"$()","commitment":"$()"}}}},"inputs":{"burnFungibleTokensInput":{"name":"Deleted fungible tokens","description":"Permanently and irreversibly deleted $() $().","icon":"burn","unlockingScript":"unlockP2PKH","token":{"category":"$()","amount":"$( OP_GREATERTHANOREQUAL OP_IF OP_ENDIF)"},"omitChangeAmounts":{"fungibleTokens":"${}"}},"burnNonfungibleTokenInput":{"name":"Deleted non-fungible token","description":"Permanently and irreversibly burned one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) token of category $(), with a $() commitment.","icon":"burn","unlockingScript":"unlockP2PKH","token":{"category":"$()","nft":{"capability":"$()","commitment":"$()"}},"omitChangeAmounts":{"nonfungibleTokens":1}}},"lockingScripts":{"sendingLockingscript":{"name":"Sent","description":"Funds sent to an external recipient","icon":"address","lockingType":"standard","lockingScript":"lockToRecipient","actions":[],"state":[],"secrets":[],"balance":false,"selectable":false,"privacy":false},"receivingLockingScript":{"name":"Received","description":"Funds received without wallet coordination.","icon":"address","lockingType":"standard","lockingScript":"lockP2PKH","unlockingScript":"unlockP2PKH","roles":{"receiver":{"state":{"variables":[],"secrets":["ownerKey"]},"actions":[{"action":"sign","role":"owner","secrets":["ownerKey"]},{"action":"verify","role":"owner","secrets":["ownerKey"]},{"action":"sendSatoshis","role":"sender","secrets":["ownerKey"]},{"action":"sendFungibleTokens","role":"sender","secrets":["ownerKey"]},{"action":"sendNonfungibleTokens","role":"sender","secrets":["ownerKey"]},{"action":"burnFungibleTokens","role":"sender","secrets":["ownerKey"]},{"action":"burnNonfungibleTokens","role":"sender","secrets":["ownerKey"]}],"balance":{"satoshis":true,"fungibleTokens":true},"selectable":true,"privacy":false}}}},"scripts":{"lockP2PKH":"OP_DUP OP_HASH160 <$( OP_HASH160)> OP_EQUALVERIFY OP_CHECKSIG","unlockP2PKH":" ","lockToRecipient":""},"constants":{"dustLimit":{"name":"Dust Limit","description":"Standard required minimum satoshis for Pay to Public Key Hash outputs.","type":"integer","value":546},"messagePrefix":{"name":"Message Prefix","description":"Standard message prefix used in the bitcoin signed message protocol.","type":"bytes","value":"0x18426974636f696e205369676e6564204d6573736167653a0a"}},"variables":{"ownerKey":{"name":"Owners Private Key","description":"The private key used to authorize spending of received funds.","type":"bytes","hint":"private_key"},"messageToSign":{"name":"Message","description":"The text message to sign.","type":"string"},"messageToVerify":{"name":"Message","description":"The text message to verify.","type":"string"},"messageSignature":{"name":"Message Signature","description":"The signature for the message.","type":"bytes","hint":"signature"},"requestedSatoshis":{"name":"Requested Amount","description":"The Bitcoin Cash amount requested","type":"integer","hint":"satoshis"},"requestedTokenCategory":{"name":"Requested Token Category","description":"The token category requested","type":"bytes","hint":"token_category"},"requestedTokenAmount":{"name":"Requested Token Amount","description":"The fungible token amount requested","type":"integer","hint":"token_amount"},"requestedTokenCapability":{"name":"Requested Token Capability","description":"The non-fungible token capability requested","type":"bytes","hint":"token_capability"},"requestedTokenCommitment":{"name":"Requested Token Commitment","description":"The non-fungible token commitment requested","type":"bytes","hint":"token_commitment"},"transferredTokenCategory":{"name":"Sending Token Category","description":"The token category of the token(s) to send","type":"bytes","hint":"token_category"},"transferredTokenAmount":{"name":"Sending Token Amount","description":"The fungible token amount to send","type":"integer","hint":"token_amount"},"transferredTokenCapability":{"name":"Sending Token Capability","description":"The token capability for the non-fungible token to send","type":"bytes","hint":"token_capability"},"transferredTokenCommitment":{"name":"Sending Token Commitment","description":"The token commitment for the non-fungible token to send","type":"bytes","hint":"token_commitment"},"burnedTokenCategory":{"name":"Deleted Token Category","description":"The token category of the token(s) to delete","type":"bytes","hint":"token_category"},"burnedTokenAmount":{"name":"Deleted Token Amount","description":"The fungible token amount to delete","type":"integer","hint":"token_amount"},"burnedTokenCapability":{"name":"Deleted Token Capability","description":"The token capability for the non-fungible token to delete","type":"bytes","hint":"token_capability"},"burnedTokenCommitment":{"name":"Deleted Token Commitment","description":"The token commitment for the non-fungible token to delete","type":"bytes","hint":"token_commitment"}},"icons":[{"name":"wallet","hash":"0000000000000000000000"},{"name":"owner","hash":"0000000000000000000000"},{"name":"sender","hash":"0000000000000000000000"},{"name":"address","hash":"0000000000000000000000"},{"name":"receive","hash":"0000000000000000000000"},{"name":"request","hash":"0000000000000000000000"},{"name":"send","hash":"0000000000000000000000"},{"name":"burn","hash":"0000000000000000000000"},{"name":"sign","hash":"0000000000000000000000"},{"name":"verify","hash":"0000000000000000000000"}],"scenarios":[{"name":"requesting satoshis","description":"happy-path evaluation for requesting satoshis.","action":"requestSatoshis","roles":[{"role":"receiver","values":{"generated":{"ownerKey":"KyRQa5pEXuzVcDwnXRLpYAascjchQW5DoxVRMbj4DTxS83573mz8"},"variables":{"requestedSatoshis":2000},"secrets":{},"inputs":[],"outputs":[{"lockingBytecode":"76a91475c715ecb74178fe87933e57e947e5e92d904b8188ac","valueSatoshis":2000}]}},{"role":"sender","values":{"generated":{},"variables":{},"secrets":{},"inputs":[{"outpointTransactionHash":"4ef28553a31a266719e66ba97fee3aeecd6d1788f7ff6ab12f8ebceda49660c0","outpointIndex":0,"sequenceNumber":0,"unlockingBytecode":"41226b2be7c2890c8bbde2f79e79640e56d866843f2e822ec51c469019d13db04a422c9ee49f5eefd26fee24e91910edbbb032b90cc54c34da80a61e69b0ee3d22412103e7ab26c36a7c7f45b2c26f33c08b0fa43a633268700f47216646d4cb37ae5696"}],"outputs":[{"lockingBytecode":"76a91475c715ecb74178fe87933e57e947e5e92d904b8188ac","valueSatoshis":2000}]}}],"values":{"generated":{},"variables":{},"secrets":{}},"outcome":{"roles":{"receiver":{"name":"Request","description":"Requested a specific amount of satoshis from one or more senders.","icon":"request"},"sender":{"name":"Send","description":"Sent a specific amount of satoshis to the provided receiver.","icon":"send"}},"transactions":[{"transaction":"0200000001c06096a4edbc8e2fb16afff788176dcdee3aee7fa96be61967261aa35385f24e000000006441226b2be7c2890c8bbde2f79e79640e56d866843f2e822ec51c469019d13db04a422c9ee49f5eefd26fee24e91910edbbb032b90cc54c34da80a61e69b0ee3d22412103e7ab26c36a7c7f45b2c26f33c08b0fa43a633268700f47216646d4cb37ae5696000000000267530300000000001976a91475c715ecb74178fe87933e57e947e5e92d904b8188acd0070000000000001976a91475c715ecb74178fe87933e57e947e5e92d904b8188ac00000000","value":""}]}}]} \ No newline at end of file +{ + "$schema": "https://libauth.org/schemas/wallet-template-v0.schema.json", + "name": "Wallet (P2PKH)", + "description": "A standard single-factor wallet template that uses Pay-to-Public-Key-Hash (P2PKH) locking scripts.", + "icon": "wallet", + "version": 0, + "supported": ["BCH_2023_05", "BCH_2024_05", "BCH_2025_05", "BCH_2026_05"], + "roles": { + "owner": { + "name": "Wallet Owner", + "description": "The party who can spend from this wallet.", + "icon": "owner" + }, + "receiver": { + "name": "Receiver", + "description": "A party that is receiving value.", + "icon": "receiver" + }, + "sender": { + "name": "Sender", + "description": "A party that is sending value.", + "icon": "sender" + } + }, + "start": [ + { "action": "receive", "role": "receiver" }, + { "action": "requestSatoshis", "role": "receiver" }, + { "action": "requestFungibleTokens", "role": "receiver" }, + { "action": "requestNonfungibleTokens", "role": "receiver" } + ], + "actions": { + "receive": { + "name": "Receive", + "description": "Receive an unspecified amount of cash and/or tokens from one or more senders.", + "icon": "receive", + "roles": { + "receiver": { + "name": "Receive", + "description": "Receive an unspecified amount of cash and/or tokens from one or more senders.", + "icon": "receive", + "requirements": { "generate": ["ownerKey"] } + }, + "sender": { + "name": "Send", + "description": "Send an unspecified amount of cash and/or tokens to the provided receiver.", + "icon": "send" + } + }, + "requirements": { + "roles": [ + { "role": "receiver", "slots": { "min": 1, "max": 1 } }, + { "role": "sender", "slots": { "min": 1 } } + ], + "variables": ["requestedSatoshis"] + }, + "transaction": "receiveTransaction" + }, + "requestSatoshis": { + "name": "Request Satoshis", + "description": "Requests a specific amount of Bitcoin Cash from one or more senders.", + "icon": "request", + "roles": { + "receiver": { + "name": "Request Satoshis", + "description": "Requests a specific amount of Bitcoin Cash from one or more senders.", + "icon": "request", + "requirements": { + "generate": ["ownerKey"], + "variables": ["requestedSatoshis"] + } + }, + "sender": { + "name": "Send", + "description": "Send a specific amount of Bitcoin Cash to the provided receiver.", + "icon": "send" + } + }, + "requirements": { + "roles": [ + { "role": "receiver", "slots": { "min": 1, "max": 1 } }, + { "role": "sender", "slots": { "min": 1 } } + ] + }, + "transaction": "requestSatoshisTransaction" + }, + "requestFungibleTokens": { + "name": "Request Fungible Tokens", + "description": "Requests a specific amount of a fungible tokens from one or more senders.", + "icon": "request", + "roles": { + "receiver": { + "name": "Request Fungible Tokens", + "description": "Requests a specific amount of a fungible tokens from one or more senders.", + "icon": "request", + "requirements": { + "generate": ["ownerKey"], + "variables": ["requestedTokenCategory", "requestedTokenAmount"] + } + }, + "sender": { + "name": "Send", + "description": "Send a specific amount of fungible tokens to the provided receiver.", + "icon": "send" + } + }, + "requirements": { + "roles": [ + { "role": "receiver", "slots": { "min": 1, "max": 1 } }, + { "role": "sender", "slots": { "min": 1 } } + ] + }, + "transaction": "requestFungibleTokensTransaction" + }, + "requestNonfungibleTokens": { + "name": "Request a Non-fungible Token", + "description": "Requests a non-fungible token from one or more senders.", + "icon": "request", + "roles": { + "receiver": { + "name": "Request a Non-fungible Token", + "description": "Requests a non-fungible token from one or more senders.", + "icon": "request", + "requirements": { + "generate": ["ownerKey"], + "variables": [ + "requestedTokenCategory", + "requestedTokenCapability", + "requestedTokenCommitment" + ] + } + }, + "sender": { + "name": "Send", + "description": "Send a non-fungible token to the provided receiver.", + "icon": "send" + } + }, + "requirements": { + "roles": [ + { "role": "receiver", "slots": { "min": 1, "max": 1 } }, + { "role": "sender", "slots": { "min": 1 } } + ] + }, + "transaction": "requestNonfungibleTokensTransaction" + }, + "sendSatoshis": { + "name": "Send Satoshis", + "description": "Sends a specific amount of Bitcoin Cash to a given recipient.", + "icon": "send", + "roles": { + "sender": { + "requirements": { + "variables": ["transferredSatoshis", "recipientLockingscript"], + "secrets": ["ownerKey"] + } + } + }, + "requirements": { + "roles": [{ "role": "sender", "slots": { "min": 1, "max": 1 } }] + }, + "condition": "$(OP_INPUTINDEX OP_UTXOVALUE OP_GREATERTHAN)", + "transaction": "transferSatoshisTransaction" + }, + "sendFungibleTokens": { + "name": "Send Fungible Tokens", + "description": "Send a specific amount of a fungible token to a given recipient.", + "icon": "send", + "roles": { + "sender": { + "requirements": { + "variables": [ + "transferredTokenCategory", + "transferredTokenAmount", + "recipientLockingscript" + ], + "secrets": ["ownerKey"] + } + } + }, + "requirements": { + "roles": [{ "role": "sender", "slots": { "min": 1, "max": 1 } }] + }, + "condition": "$(OP_INPUTINDEX OP_UTXOTOKENAMOUNT <0> OP_GREATERTHAN)", + "transaction": "transferFungibleTokensTransaction" + }, + "sendNonfungibleTokens": { + "name": "Send a Non-fungible Token", + "description": "Send a non-fungible token to a given recipient.", + "icon": "send", + "roles": { + "sender": { + "requirements": { + "variables": [ + "transferredTokenCategory", + "transferredTokenCapability", + "transferredTokenCommitment", + "recipientLockingscript" + ], + "secrets": ["ownerKey"] + } + } + }, + "requirements": { + "roles": [{ "role": "sender", "slots": { "min": 1, "max": 1 } }] + }, + "condition": "$(OP_INPUTINDEX OP_UTXOTOKENCATEGORY OP_SIZE OP_NIP <32> OP_GREATERTHAN)", + "transaction": "transferNonfungibleTokensTransaction" + }, + "burnFungibleTokens": { + "name": "Delete Fungible Tokens", + "description": "Permanently and irreversibly deletes one or more fungible tokens.", + "icon": "burn", + "roles": { + "owner": { + "requirements": { + "variables": ["burnedTokenCategory", "burnedTokenAmount"], + "secrets": ["ownerKey"] + } + } + }, + "requirements": { + "roles": [{ "role": "owner", "slots": { "min": 1, "max": 1 } }] + }, + "condition": "$(OP_INPUTINDEX OP_UTXOTOKENAMOUNT <0> OP_GREATERTHAN)", + "transaction": "burnFungibleTokensTransaction" + }, + "burnNonfungibleTokens": { + "name": "Delete a Non-fungible Token", + "description": "Permanently and irreversibly deletes one non-fungible token.", + "icon": "burn", + "roles": { + "owner": { + "requirements": { + "variables": [ + "burnedTokenCategory", + "burnedTokenCapability", + "burnedTokenCommitment" + ], + "secrets": ["ownerKey"] + } + } + }, + "requirements": { + "roles": [{ "role": "owner", "slots": { "min": 1, "max": 1 } }] + }, + "condition": "$(OP_INPUTINDEX OP_UTXOTOKENCATEGORY OP_SIZE OP_NIP <32> OP_GREATERTHAN)", + "transaction": "burnNonfungibleTokenTransaction" + }, + "sign": { + "name": "Sign Message", + "description": "Signs a provided message using the Bitcoin message signing protocol.", + "icon": "sign", + "roles": { + "owner": { + "requirements": { + "variables": ["messageToSign"], + "secrets": ["ownerKey"] + } + } + }, + "requirements": { + "roles": [{ "role": "owner", "slots": { "min": 1, "max": 1 } }] + }, + "data": ["messageSignature"] + }, + "verify": { + "name": "Verify Message Signature", + "description": "Verifies a provided message signature according to the Bitcoin message signing protocol.", + "icon": "verify", + "roles": { + "owner": { + "requirements": { + "variables": ["messageSignature", "messageToVerify"], + "secrets": ["ownerKey"] + } + } + }, + "requirements": { + "roles": [{ "role": "owner", "slots": { "min": 1, "max": 1 } }] + }, + "data": ["messageSignatureValidity"] + } + }, + "data": { + "messageSignature": { + "value": "$( OP_CAT )", + "type": "bytes", + "hint": "signature" + }, + "messageSignatureValidity": { + "value": "$( OP_CAT OP_CHECKDATASIG)", + "type": "integer", + "hint": "script_boolean" + } + }, + "transactions": { + "receiveTransaction": { + "name": "Transfer request", + "description": "Transfer request for an unspecified amount of cash and/or tokens.", + "icon": "request", + "roles": { + "receiver": { + "name": "Received", + "description": "Received an unspecified amount of cash and/or tokens.", + "icon": "receive" + }, + "sender": { + "name": "Sent", + "description": "Sent an unspecified amount of cash and/or tokens.", + "icon": "send" + } + }, + "inputs": [], + "outputs": [{ "output": "receiveOutput" }], + "version": 2, + "locktime": 0, + "composable": true + }, + "requestSatoshisTransaction": { + "name": "Transfer request", + "description": "Transfer request for $() satoshis.", + "icon": "request", + "roles": { + "receiver": { + "name": "Received", + "description": "Received $() satoshis.", + "icon": "receive" + }, + "sender": { + "name": "Sent", + "description": "Sent $() satoshis.", + "icon": "send" + } + }, + "inputs": [], + "outputs": [{ "output": "requestSatoshisOutput" }], + "version": 2, + "locktime": 0, + "composable": true + }, + "requestFungibleTokensTransaction": { + "name": "Transfer request", + "description": "Transfer request for $( OP_DIV).$( OP_MOD) $() tokens.", + "icon": "request", + "roles": { + "receiver": { + "name": "Received", + "description": "Received $( OP_DIV).$( OP_MOD) $() tokens.", + "icon": "receive" + }, + "sender": { + "name": "Sent", + "description": "Sent $( OP_DIV).$( OP_MOD) $() tokens.", + "icon": "send" + } + }, + "inputs": [], + "outputs": [{ "output": "requestFungibleTokensOutput" }], + "version": 2, + "locktime": 0, + "composable": true + }, + "requestNonfungibleTokensTransaction": { + "name": "Transfer request", + "description": "Transfer request for one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) () token, with $() commitment.", + "icon": "request", + "roles": { + "receiver": { + "name": "Received", + "description": "Received one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) () token, with $() commitment.", + "icon": "receive" + }, + "sender": { + "name": "Sent", + "description": "Sent the requested non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) () token, with $() commitment.", + "icon": "send" + } + }, + "inputs": [], + "outputs": [{ "output": "requestNonfungibleTokensOutput" }], + "version": 2, + "locktime": 0, + "composable": true + }, + "transferSatoshisTransaction": { + "name": "Satoshis Transferred", + "description": "$() satoshis were transferred to a recipient.", + "icon": "send", + "roles": { + "receiver": { + "name": "Received", + "description": "Received $() satoshis.", + "icon": "receive" + }, + "sender": { + "name": "Sent", + "description": "Sent $() satoshis.", + "icon": "send" + } + }, + "inputs": [], + "outputs": [{ "output": "transferSatoshisOutput" }], + "version": 2, + "locktime": 0, + "composable": true + }, + "transferFungibleTokensTransaction": { + "name": "Fungible Tokens Transferred", + "description": "$( OP_DIV).$( OP_MOD) $() tokens were transferred to a recipient.", + "icon": "send", + "roles": { + "receiver": { + "name": "Received", + "description": "Received $( OP_DIV).$( OP_MOD) $() tokens.", + "icon": "receive" + }, + "sender": { + "name": "Sent", + "description": "Sent $( OP_DIV).$( OP_MOD) $() tokens.", + "icon": "send" + } + }, + "inputs": [], + "outputs": [{ "output": "transferFungibleTokensOutput" }], + "version": 2, + "locktime": 0, + "composable": true + }, + "transferNonfungibleTokensTransaction": { + "name": "Non-fungible Token Transferred", + "description": "One non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) $() token was transferred to a recipient, with $() commitment.", + "icon": "send", + "roles": { + "receiver": { + "name": "Received", + "description": "Received one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) () token, with $() commitment.", + "icon": "receive" + }, + "sender": { + "name": "Sent", + "description": "Sent one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) () token, with $() commitment.", + "icon": "send" + } + }, + "inputs": [], + "outputs": [{ "output": "transferNonfungibleTokenOutput" }], + "version": 2, + "locktime": 0, + "composable": true + }, + "burnFungibleTokensTransaction": { + "name": "Deleted fungible tokens", + "description": "Permanently and irreversibly deleted $( OP_DIV).$( OP_MOD) $() tokens.", + "icon": "burn", + "inputs": [{ "input": "burnFungibleTokensInput" }], + "outputs": [], + "version": 2, + "locktime": 0, + "composable": true + }, + "burnNonfungibleTokenTransaction": { + "name": "Deleted non fungible token", + "description": "Permanently and irreversibly deleted a non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) () token, with $() commitment.", + "icon": "burn", + "inputs": [{ "input": "burnNonfungibleTokenInput" }], + "outputs": [], + "version": 2, + "locktime": 0, + "composable": true + } + }, + "outputs": { + "receiveOutput": { + "name": "Recipient output", + "description": "Transferred an unspecified amount of cash and/or tokens to a recipient.", + "icon": "receive", + "roles": { + "receiver": { + "name": "Received", + "description": "Received an unspecified amount of cash and/or tokens." + }, + "sender": { + "name": "Sent", + "description": "Sent an unspecified amount of cash and/or tokens." + } + }, + "lockscript": "receivingLockingScript" + }, + "requestSatoshisOutput": { + "name": "Recipient output", + "description": "Transferred $() satoshis to a recipient.", + "icon": "request", + "roles": { + "receiver": { + "name": "Received", + "description": "Received $() satoshis." + }, + "sender": { + "name": "Sent", + "description": "Sent $() satoshis." + } + }, + "lockscript": "receivingLockingScript", + "valueSatoshis": "$()", + "token": null + }, + "requestFungibleTokensOutput": { + "name": "Recipient output", + "description": "Transferred $( OP_DIV).$( OP_MOD) $() tokens to a recipient.", + "icon": "request", + "roles": { + "receiver": { + "name": "Received", + "description": "Received $( OP_DIV).$( OP_MOD) $() tokens." + }, + "sender": { + "name": "Sent", + "description": "Sent $( OP_DIV).$( OP_MOD) $() tokens." + } + }, + "lockscript": "receivingLockingScript", + "valueSatoshis": "1000", + "token": { + "category": "$()", + "amount": "$()", + "nft": null + } + }, + "requestNonfungibleTokensOutput": { + "name": "Recipient output", + "description": "Transferred one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) $() token to a recipient, with $() commitment.", + "icon": "request", + "roles": { + "receiver": { + "name": "Received", + "description": "Received one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) $() token, with $() commitment." + }, + "sender": { + "name": "Sent", + "description": "Sent the requested non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) $() token, with $() commitment." + } + }, + "lockscript": "receivingLockingScript", + "valueSatoshis": "1000", + "token": { + "category": "$()", + "amount": null, + "nft": { + "capability": "$()", + "commitment": "$()" + } + } + }, + "transferSatoshisOutput": { + "name": "Recipient output", + "description": "Transferred $() satoshis to a recipient.", + "icon": "send", + "roles": { + "receiver": { + "name": "Received", + "description": "Received $() satoshis." + }, + "sender": { + "name": "Sent", + "description": "Sent $() satoshis." + } + }, + "lockscript": "sendingLockingscript", + "valueSatoshis": "$()" + }, + "transferFungibleTokensOutput": { + "name": "Recipient output", + "description": "Transferred $( OP_DIV).$( OP_MOD) $() tokens to a recipient.", + "icon": "send", + "roles": { + "receiver": { + "name": "Received", + "description": "Received $( OP_DIV).$( OP_MOD) $() tokens." + }, + "sender": { + "name": "Sent", + "description": "Sent $( OP_DIV).$( OP_MOD) $() tokens." + } + }, + "lockscript": "sendingLockingscript", + "token": { + "category": "$()", + "amount": "$()" + } + }, + "transferNonfungibleTokenOutput": { + "name": "Recipient output", + "description": "Transferred one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) $() token to a recipient, with $() commitment.", + "icon": "send", + "roles": { + "receiver": { + "name": "Received", + "description": "Received one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) $() token, with $() commitment." + }, + "sender": { + "name": "Sent", + "description": "Sent one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) $() token, with $() commitment." + } + }, + "lockscript": "sendingLockingscript", + "token": { + "category": "$()", + "nft": { + "capability": "$()", + "commitment": "$()" + } + } + } + }, + "inputs": { + "burnFungibleTokensInput": { + "name": "Deleted fungible tokens", + "description": "Permanently and irreversibly deleted $() $().", + "icon": "burn", + "unlockingScript": "unlockP2PKH", + "token": { + "category": "$()", + "amount": "$( OP_GREATERTHANOREQUAL OP_IF OP_ENDIF)" + }, + "omitChangeAmounts": { "fungibleTokens": "${}" } + }, + "burnNonfungibleTokenInput": { + "name": "Deleted non-fungible token", + "description": "Permanently and irreversibly burned one non-fungible $( <0x02> OP_EQUAL OP_IF <\"minting\"> OP_ELSE <0x01> OP_EQUAL OP_IF <\"mutable\"> OP_ELSE <\"immutable\"> OP_ENDIF OP_ENDIF) token of category $(), with a $() commitment.", + "icon": "burn", + "unlockingScript": "unlockP2PKH", + "token": { + "category": "$()", + "nft": { + "capability": "$()", + "commitment": "$()" + } + }, + "omitChangeAmounts": { "nonfungibleTokens": 1 } + } + }, + "lockingScripts": { + "sendingLockingscript": { + "name": "Sent", + "description": "Funds sent to an external recipient", + "icon": "address", + "lockingType": "standard", + "lockingScript": "lockToRecipient", + "actions": [], + "state": [], + "secrets": [], + "balance": false, + "selectable": false, + "privacy": false + }, + "receivingLockingScript": { + "name": "Received", + "description": "Funds received without wallet coordination.", + "icon": "address", + "lockingType": "standard", + "lockingScript": "lockP2PKH", + "unlockingScript": "unlockP2PKH", + "roles": { + "receiver": { + "state": { "variables": [], "secrets": ["ownerKey"] }, + "actions": [ + { "action": "sign", "role": "owner", "secrets": ["ownerKey"] }, + { "action": "verify", "role": "owner", "secrets": ["ownerKey"] }, + { + "action": "sendSatoshis", + "role": "sender", + "secrets": ["ownerKey"] + }, + { + "action": "sendFungibleTokens", + "role": "sender", + "secrets": ["ownerKey"] + }, + { + "action": "sendNonfungibleTokens", + "role": "sender", + "secrets": ["ownerKey"] + }, + { + "action": "burnFungibleTokens", + "role": "sender", + "secrets": ["ownerKey"] + }, + { + "action": "burnNonfungibleTokens", + "role": "sender", + "secrets": ["ownerKey"] + } + ], + "balance": { "satoshis": true, "fungibleTokens": true }, + "selectable": true, + "privacy": false + } + } + } + }, + "scripts": { + "lockP2PKH": "OP_DUP OP_HASH160 <$( OP_HASH160)> OP_EQUALVERIFY OP_CHECKSIG", + "unlockP2PKH": " ", + "lockToRecipient": "" + }, + "constants": { + "dustLimit": { + "name": "Dust Limit", + "description": "Standard required minimum satoshis for Pay to Public Key Hash outputs.", + "type": "integer", + "value": 546 + }, + "messagePrefix": { + "name": "Message Prefix", + "description": "Standard message prefix used in the bitcoin signed message protocol.", + "type": "bytes", + "value": "0x18426974636f696e205369676e6564204d6573736167653a0a" + } + }, + "variables": { + "ownerKey": { + "name": "Owners Private Key", + "description": "The private key used to authorize spending of received funds.", + "type": "bytes", + "hint": "private_key" + }, + "messageToSign": { + "name": "Message", + "description": "The text message to sign.", + "type": "string" + }, + "messageToVerify": { + "name": "Message", + "description": "The text message to verify.", + "type": "string" + }, + "messageSignature": { + "name": "Message Signature", + "description": "The signature for the message.", + "type": "bytes", + "hint": "signature" + }, + "requestedSatoshis": { + "name": "Requested Amount", + "description": "The Bitcoin Cash amount requested", + "type": "integer", + "hint": "satoshis" + }, + "requestedTokenCategory": { + "name": "Requested Token Category", + "description": "The token category requested", + "type": "bytes", + "hint": "token_category" + }, + "requestedTokenAmount": { + "name": "Requested Token Amount", + "description": "The fungible token amount requested", + "type": "integer", + "hint": "token_amount" + }, + "requestedTokenCapability": { + "name": "Requested Token Capability", + "description": "The non-fungible token capability requested", + "type": "bytes", + "hint": "token_capability" + }, + "requestedTokenCommitment": { + "name": "Requested Token Commitment", + "description": "The non-fungible token commitment requested", + "type": "bytes", + "hint": "token_commitment" + }, + "transferredTokenCategory": { + "name": "Sending Token Category", + "description": "The token category of the token(s) to send", + "type": "bytes", + "hint": "token_category" + }, + "transferredTokenAmount": { + "name": "Sending Token Amount", + "description": "The fungible token amount to send", + "type": "integer", + "hint": "token_amount" + }, + "transferredTokenCapability": { + "name": "Sending Token Capability", + "description": "The token capability for the non-fungible token to send", + "type": "bytes", + "hint": "token_capability" + }, + "transferredTokenCommitment": { + "name": "Sending Token Commitment", + "description": "The token commitment for the non-fungible token to send", + "type": "bytes", + "hint": "token_commitment" + }, + "burnedTokenCategory": { + "name": "Deleted Token Category", + "description": "The token category of the token(s) to delete", + "type": "bytes", + "hint": "token_category" + }, + "burnedTokenAmount": { + "name": "Deleted Token Amount", + "description": "The fungible token amount to delete", + "type": "integer", + "hint": "token_amount" + }, + "burnedTokenCapability": { + "name": "Deleted Token Capability", + "description": "The token capability for the non-fungible token to delete", + "type": "bytes", + "hint": "token_capability" + }, + "burnedTokenCommitment": { + "name": "Deleted Token Commitment", + "description": "The token commitment for the non-fungible token to delete", + "type": "bytes", + "hint": "token_commitment" + } + }, + "icons": [ + { "name": "wallet", "hash": "0000000000000000000000" }, + { "name": "owner", "hash": "0000000000000000000000" }, + { "name": "sender", "hash": "0000000000000000000000" }, + { "name": "address", "hash": "0000000000000000000000" }, + { "name": "receive", "hash": "0000000000000000000000" }, + { "name": "request", "hash": "0000000000000000000000" }, + { "name": "send", "hash": "0000000000000000000000" }, + { "name": "burn", "hash": "0000000000000000000000" }, + { "name": "sign", "hash": "0000000000000000000000" }, + { "name": "verify", "hash": "0000000000000000000000" } + ], + "scenarios": [ + { + "name": "requesting satoshis", + "description": "happy-path evaluation for requesting satoshis.", + "action": "requestSatoshis", + "roles": [ + { + "role": "receiver", + "values": { + "generated": { + "ownerKey": "KyRQa5pEXuzVcDwnXRLpYAascjchQW5DoxVRMbj4DTxS83573mz8" + }, + "variables": { "requestedSatoshis": 2000 }, + "secrets": {}, + "inputs": [], + "outputs": [ + { + "lockingBytecode": "76a91475c715ecb74178fe87933e57e947e5e92d904b8188ac", + "valueSatoshis": 2000 + } + ] + } + }, + { + "role": "sender", + "values": { + "generated": {}, + "variables": {}, + "secrets": {}, + "inputs": [ + { + "outpointTransactionHash": "4ef28553a31a266719e66ba97fee3aeecd6d1788f7ff6ab12f8ebceda49660c0", + "outpointIndex": 0, + "sequenceNumber": 0, + "unlockingBytecode": "41226b2be7c2890c8bbde2f79e79640e56d866843f2e822ec51c469019d13db04a422c9ee49f5eefd26fee24e91910edbbb032b90cc54c34da80a61e69b0ee3d22412103e7ab26c36a7c7f45b2c26f33c08b0fa43a633268700f47216646d4cb37ae5696" + } + ], + "outputs": [ + { + "lockingBytecode": "76a91475c715ecb74178fe87933e57e947e5e92d904b8188ac", + "valueSatoshis": 2000 + } + ] + } + } + ], + "values": { "generated": {}, "variables": {}, "secrets": {} }, + "outcome": { + "roles": { + "receiver": { + "name": "Request", + "description": "Requested a specific amount of satoshis from one or more senders.", + "icon": "request" + }, + "sender": { + "name": "Send", + "description": "Sent a specific amount of satoshis to the provided receiver.", + "icon": "send" + } + }, + "transactions": [ + { + "transaction": "0200000001c06096a4edbc8e2fb16afff788176dcdee3aee7fa96be61967261aa35385f24e000000006441226b2be7c2890c8bbde2f79e79640e56d866843f2e822ec51c469019d13db04a422c9ee49f5eefd26fee24e91910edbbb032b90cc54c34da80a61e69b0ee3d22412103e7ab26c36a7c7f45b2c26f33c08b0fa43a633268700f47216646d4cb37ae5696000000000267530300000000001976a91475c715ecb74178fe87933e57e947e5e92d904b8188acd0070000000000001976a91475c715ecb74178fe87933e57e947e5e92d904b8188ac00000000", + "value": "" + } + ] + } + } + ] +} diff --git a/scripts/template-to-json.ts b/scripts/template-to-json.ts index e8b3020..c528c4b 100644 --- a/scripts/template-to-json.ts +++ b/scripts/template-to-json.ts @@ -5,7 +5,7 @@ import { pathToFileURL } from "node:url"; /** * This just convers the