XChain Platform Action - SEND
This action sends one or more TICK to an ADDRESS.
PARAMS
| Name | Type | Description |
|---|---|---|
VERSION |
String | Format Version |
TICK |
String | Ticker name or Ticker ID |
AMOUNT |
String | Amount of TICK to send |
DESTINATION |
String | Address to send TICK to |
MEMO |
String | An optional memo to include |
Formats
Version 0 - Single Send
VERSION|TICK|AMOUNT|DESTINATION|MEMO
Version 1 - Multi-Send (Brief)
VERSION|TICK|AMOUNT|DESTINATION|AMOUNT|DESTINATION|MEMO
Version 2 - Multi-Send (Full)
VERSION|TICK|AMOUNT|DESTINATION|TICK|AMOUNT|DESTINATION|MEMO
Version 3 - Multi-Send (Full) with Multiple Memos
VERSION|TICK|AMOUNT|DESTINATION|MEMO|TICK|AMOUNT|DESTINATION|MEMO
Examples
SEND|0|JDOG|1|1ExampleAddressXXXXXXXXXXXXXXXXXXX
This example sends 1 JDOG token to 1ExampleAddressXXXXXXXXXXXXXXXXXXX
SEND|0|BRRR|5|1ExampleAddressXXXXXXXXXXXXXXXXXXX|BTNS is Awesome
This example sends 5 BRRR tokens to 1ExampleAddressXXXXXXXXXXXXXXXXXXX with a memo
SEND|1|BRRR|5|1ExampleAddressXXXXXXXXXXXXXXXXXXX|1|1BoogrfDADPLQpq8LMASmWQUVYDp4t2hF9
This example sends 5 BRRR tokens to 1ExampleAddressXXXXXXXXXXXXXXXXXXX and 1 BRRR token to 1BoogrfDADPLQpq8LMASmWQUVYDp4t2hF9
SEND|2|BRRR|5|1ExampleAddressXXXXXXXXXXXXXXXXXXX|TEST|1|1BoogrfDADPLQpq8LMASmWQUVYDp4t2hF9|BTNS is Awesome
This example sends 5 BRRR tokens to 1ExampleAddressXXXXXXXXXXXXXXXXXXX and 1 TEST token to 1BoogrfDADPLQpq8LMASmWQUVYDp4t2hF9 with a memo
Rules
-
A
TICKsend shall only be considered valid if theSOURCEaddress has balances of theTICKto cover the sendAMOUNT -
A
TICKsend that does not haveAMOUNTin theSOURCEaddress shall be considered invalid and ignored. -
A valid
TICKsend will debit theTICKAMOUNTfrom theSOURCEaddress balances -
A valid
TICKsend will credit theTICKAMOUNTto theDESTINATIONaddress or addresses -
MEMOcharacters NOT allowed are :- pipe
|(used as field separator) - semicolon
;(used as command separator)
- pipe
-
Token-gated transfer rule. If
TICKhas at least one active gatedFILE(aFILEwith a non-emptyGATE_TICKER = TICKthat has not been superseded), theSENDis only valid when it appears in the same transaction as aMESSAGEv2 (ECIES) addressed to theDESTINATION. Typically the sending wallet composes this asBATCH(SEND, MESSAGE). If the siblingMESSAGEis missing, theSENDis rejected; sibling actions (if any) survive. The indexer enforces the structural presence of the MESSAGE; the wallet enforces the cryptographic correctness of the key payload at unlock time.The requirement is CONDITIONAL where the gating files set an unlock threshold (
GATE_MIN_AMOUNT). Each pack gatingTICK(same publisher,GATE_TICKERandKEY_HASH) has an effective threshold equal to the MINIMUMGATE_MIN_AMOUNTacross its files, and a pack with any threshold-less file is unconditional. A pack requires the handoff when it is unconditional, or when the DESTINATION’s balance ofTICKafter this action (its pre-action balance plus everything this action sends it, totalled across all legs) reaches that threshold. The MESSAGE is required if at least one pack requires it; if every pack sits above the recipient’s post-send balance, a plainSENDwith no MESSAGE is valid and the recipient deliberately receives no key. See Token-Gated Content.
flowchart TD
Start["SEND action targets TICK, DESTINATION"] --> Gated{"TICK has an active gated FILE,<br>non-empty GATE_TICKER, not superseded?"}
Gated -->|"no"| PlainOK["Plain SEND is valid, no MESSAGE needed"]
Gated -->|"yes"| Threshold{"Any pack gating TICK is unconditional,<br>no GATE_MIN_AMOUNT,<br>or DESTINATION's post-send TICK balance<br>reaches that pack's effective threshold?"}
Threshold -->|"no pack requires it"| PlainOK
Threshold -->|"yes, at least one pack requires it"| NeedMsg["MESSAGE v2 (ECIES) to DESTINATION<br>required in the same transaction"]
NeedMsg --> Present{"Sibling MESSAGE v2 present<br>in the same transaction?"}
Present -->|"yes"| Valid["SEND is valid"]
Present -->|"no"| Rejected["SEND is rejected, sibling actions survive"]
Notes
TRANSFERaction can be used for compatability with BRC20/SRC20TRANSFER- Format version
0allows for a single send - Format version
1allows for repeatingAMOUNTandDESTINATIONparams to enable multiple transfers - Format version
2allows for repeatingTICK,AMOUNTandDESTINATIONparams to enable multiple transfers - Format version
3allows for repeatingTICK,AMOUNT,DESTINATION, andMEMOparams to enable multiple transfers - Format version
0,1, and2allow for a single optionalMEMOfield to be included as the last PARAM - Use
^(caret) as prefix when passingTICK_IDforTICKfield (^1234 =TICK_ID1234) - Use
^(caret) as prefix when passing anADDRESS_IDforDESTINATION(^57 =ADDRESS_ID57); see Index ID References
Copyright © 2025–2026 Dankest, LLC
Based on XChain Platform by Dankest, LLC – https://dankest.llc
Licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-or-later) with a commercial license available for proprietary use.
You may use, modify, and distribute this material under the terms of the License. See LICENSE and NOTICE for full terms. See the licensing overview.