In sexService.io there are different transaction types:

  1. Payment (Transfer funds) transaction
  2. Add multisignature transaction
  3. Timeout transaction
  4. Register / update a profile transaction
  5. Election transaction
  6. Witness registration transaction
  7. Null transaction

All of transactions signed using Ed25519 EdDSA signature scheme, which offers faster than existing digital signature schemes without sacrificing security.

1-2. Payment (Transfer funds) transaction defines the fund transfer from one wallet to another. It can be used when Buyer pays for a service to Seller (this is more complex process and involves more than one type of transaction) or just usual transfer as Bitcoin does.

To transfer funds (tokens) to a wallet, it’s public key (generated from wallet address) should be known, and if there is no such wallet, it is created.

Wallets can be temporary, it is a special type of wallet. If wallet is temporary, when after it timeout is reached, all available funds will be transferred back to the ones who have transferred money there (Timeout transaction), starting with minimal transaction amount, till wallet become empty. Timeout transaction is triggered by witness from the awaiting wallets while forging new block. It consists of two transfer funds transactions, and feedback summary, so that full nodes could update profile data, returned for null transaction requests.

Each transfer fund transaction has system comment field to identify the type of transaction. Comment field can be empty or contain valid messagepack.

Messagepack object has two fields, type and value. Type can be one of the following:

  • RAW_MESSAGE: raw text message, available to anyone
  • ENCODED_MESSAGE: chat message between wallet users, encoded using public key of opposite side, so that only the recipient could read the message. The value can be encoded json, that can hold additional data, such as rate, and/or message metadata.
  • FEEDBACK: feedback is encoded, public key of the sender is used for decoding. It is visible for everyone, and ensures that feedback is left by specific person. It helps to build a reputation. No bot feedbacks. The value can be encoded json, that can hold additional data, such as rate, and/or message metadata.
  • CANCELLATION_REQUEST_FROM_BUYER. The value is transfer funds back (cancellation) transaction signed by Buyer and needs to be signed by Seller.
  • CANCELLATION_REQUEST_FROM_SELLER. In this case, buyer’s client app should create a transfer funds back transaction, sign it with it’s key, and forward it with CANCELLATION_REQUEST_FROM_BUYER to the the Seller. Seller’s client app after it shouldn’t ask anything, just sign the transfer transaction and send it to transaction query.

More of Seller/Buyer transactions will described soon.

  1. Add multisignature transaction. Transaction adds additional owner to the wallet, after this, all fund transfer from this wallet must be processed using both keys. This type of transaction is essential for buyer-seller communication in order to receive the service and get paid for this.
  2. Timeout transaction occurs when temporary wallet lifetime has been ended. Network transfer funds left on this wallet balance, back to their owners.
  3. Profile is based on a simple inquiry form. Data in this form encoded using dictionaries to take less place. Images are provided as IPFS links.

After profile data is completed, there will be profile register transaction generated for this account. It is signed and added to the blockchain.

After processing register/ update a profile transaction, full node extracts data and stores it separately, for data query. If profile update transaction is registered, separate data is updated. All profile change history is available in blockchain, and can be retrieved.

  1. SSIO uses dPoS. After N generated blocks Election takes place selecting N witnesses from registered witness pool.
  2. To be elected as witness, node should first to be registered as possible witness using Witness registration transaction.
  3. Null transactions are not stored in blockchain, their purpose is to transfer requests to nodes. Lite client can use null transaction for data retrieval, getting list of transactions, or fetching profile data.