Any native asset on cardano can be transferred according to the ledger rules.
To make something non-transferrable you would need to make it unspendable.
- For "pay to pubkey" outputs, this would mean to throw away the key - I don't think this is what you want in this case.
- The only alternative "pay to script" outputs are governed by the script (currently either a simple or plutus script). Making these unspendable is easy, think
const False
for plutus.
As you ask "without the need for smart contracts" I would say: No, scripts will be required to implement something like this.
But isn't Ethereum using smart contracts for this as well?
If scripts are okay, one could draft up a specification what an SBT is. For example (based on my limited familiarity with SBTs) something like:
- A cardano native token / asset with quantity 1, which
- was minted by a policy that ensures single mint & pay to some public key (two parameters:
TxOutRef
and PubKeyHash
) creating an output, that
- is governed by an unspendable script (identified by script hash), which
- also contains a datum (inline or hash) pointing to the owner (
PubKeyHash
above).
Note that "from the outside" this would not be resolvable who some SBT belongs to, you would need the parameters of the minting script and anything needed for the datum pre-image to verify. For example the "seed" TxOutRef
and the PubKeyHash
of the "soul"