Decide whether or not I should do this at all. Fungible tokens are almost entirely meritless. However, alternative fungible token standards, like BRC-20, have a large on-chain footprint and have lead to a proliferation of UTXOs, and standards with no on-chain footprint have UX challenges and have been slow to see adoption.
You should, because otherwise others with no long-term thinking in mind will destroy the rune movement before it truly starts.
Finalize the varint encoding should be used. LEB128, VLQ, and a prefix varint are all contenders.
I am a large proponent of VLQ, it matches the UTF-8 endianness, and is used a lot everywhere.
Decide whether or not duplicate symbols are allowed.
I am in favor or duplicate symbols, symbol alone is not sufficient for degens to ape in anyhow, gotta DYOR.
Decide if symbols should be restricted to be no longer than the most recently mined sat name.
This is only useful if we want to keep unique symbols, it could also be interesting to restrict symbol to the set of sat names burned into the OP_RETURN, that's an unambiguous way of enforcing uniqueness of symbol name, and driving secondary demand of sats for nice-sounding sat names.
Decide whether or not the ID of an asset is a sequentally assigned ID, or based on the block height and transaction index of the issuance transaction. The former is more compact, but the latter is less ambiguous and allows for compact SPV proofs.
I like block height and transaction index, but the only correct way of encoding this is 2 integers; there's no good future proof way of combining this into a single integer, and loses out the possibility of using ID deltas. Another possibility that is slightly less compact is to use the symbol itself as the ID (if it is unique).
Decide whether or not ID should be a delta, which would be more compact, but would require that transfers be encoded in increasing order of asset ID.
I like it, only because it generalizes using 0 ID to continue reusing the previous rune ID as opposed to making 0 be a special case. (And in practice, people won't really care to handle multiple rune types in a single transaction, so its more about protocol consistency more than anything else).
Decide whether or not we should encode transfer outputs as ceil(log2(output_count))-length bit strings instead of varints, since we know the number of transaction outputs. Saves space but somewhat tricky.
This only practically saves space in the 128-255 outputs scenario, where the output could be encoded as 1 byte instead of 2. Given that the protocol doesn't really allow us to specify that many transfer instructions anyways due to 83 byte limitation in OP_RETURN output, I don't see this as being a practical saving only varint consistency.
Decide whether or not an amount of 0 in a transfer should be a shorthand for all remaining runes.
Not sure if this is necessary, since all remaining runes gets transferred to first non-OP_RETURN output already; no need for duplicate ways to do the same thing.
Decide on an activation height. The degens will surely REEEEEE loudly if there are any shenanigans around launch of the protocol. The best way to avoid this is to define an activation height well into the future.
I like this, not only to avoid handling the noise that is being generated now, but also so that indexers don't need to arbitrarily start indexer from the beginning when in practice there's nothing there anyways.
Hope others will chime in and come to consensus here!