The Fluid Protocol

Progressive updating of blockchain parameters without hard forking

Executive Summary:

Duality Blockchain Solutions LLC is a blockchain as a service (BaaS) provider for our clients. As such, Duality needs a way to self-regulate the decentralized blockchain. The fluid protocol is the answer to the problem mentioned above without going through contentious hard forking scenarios. The core of the protocol, as of right now, can generate or mint new coins, change Dynode rewards, and change miner rewards. In the future, other additional changes to the consensus rules will follow.

Fluid Protocol Use Case

The market demand for alternative methods of money is present and here to stay with the advent of the Internet, the 2008 market crash, and overall lack of government accountability. Digital currencies are the answer to the rising needs of the market. In late 2008-2009, Bitcoin was the response of unaccountable government from the brilliant mind of Satoshi Nakamoto. While fast transactions, no middle-men, and cryptographic proofs provided transparency in Bitcoin, it did not offer the same level of features that the market wanted. The market enjoys regulatory oversight, uniform rules among a shared jurisdiction, and arbitration.

Duality Solutions is responding to such market needs with self-regulation, added arbitration features, and voluntary governance. Duality uniquely understands the shifting needs of the market investor, and the Fluid protocol is the solution to address those needs. The Fluid protocol is a mechanism to change the consensus rules of Duality’s blockchain, Dynamic, to enforce self-regulation, change the reward amounts for Dynode holders and miners, and respond to arbitration.

From a technical level, there are five sovereign wallets, think of them as arbitrators, who need three out of five sovereign wallets signatures to make a decision. In essence, a counterparty mechanism to prevent abuse from malicious users. In traditional banking and finance, banks and third parties are the ultimate approval mechanisms for transactions and changes within the financial network. The way to traverse and avoid the need for a final arbitrator is by spreading the power among multiple, vested parties. In digital currencies, this is called counterparty risk, and multi-signature wallets, which is an account where a specified amount of people out of the total amount are needed to move the funds out of the wallet, are the solution for addressing counterparty risk. The Fluid protocol is that for the Dynamic blockchain.

Technical Documentation

The writer assumes the reader has a basic understanding of the Dynamic blockchain, wallet addresses, and Dynodes.

The Fluid protocol gives “sovereign” wallet addresses control of the blockchain’s parameters, multi-signature addresses for the blockchain, using specific transactions. Usually, it requires a hard fork to change the consensus rules for a blockchain such as changing the rewards. With Fluid, static consensus rules change when 3 out of 5 sovereign wallet addresses sign a Fluid transaction. Fluid transactions perform the following actions in the current implementation:

  • Generate or mint new coins
  • Change Dynode rewards
  • Change miner rewards

Future upgrades will allow Fluid to:

  • Zero out a wallet address balance (by sending a negative txout).
  • Ban a wallet address or Blockchain Directory Access Protocol (BDAP) account
  • Adjust standard transaction and BDAP registration fees
  • Add, remove, and swap sovereign address

Workflow: Currently, there are only RPC commands to create and view Fluid transactions.

To run the examples on testnet, you will need to import the private keys for at least three sovereign testnet wallet address. All Fluid transaction cost 100,000 DYN to run so you will need to verify you have the balance when you send the transaction in the last step.

Fluid RPC Calls

  • burndynamic "amount" "account"
  • consenttoken "address" "tokenkey"
  • getfluidhistory
  • getfluidhistoryraw
  • getfluidsovereigns
  • gettime
  • getrawpubkey "address"
  • maketoken "amount" "time" "receive address"
  • sendfluidtransaction "hexstring"
  • signtoken "address" "tokenkey"
  • verifyquorum "tokenkey"

Fluid Protocol Code

All of the code for the fluid protocol can be found in these files:

Importing a Sovereign Wallet Address

The Dynamic testnet has 5 initial sovereign wallet addresses. This example shows how to import the sovereign private key:

  • DSCex4e189aULrig3nLd42gVf7AbjTwnP5
  • DMAh37n3RUdDxox3uiWAnc1zEPp5yFbHiL
  • DN4KvqtXyygooPV3oha72TyBB5nqBbkxwj
# Import DSCex4e189aULrig3nLd42gVf7AbjTwnP5 sovereign wallet address 
$./dynamic-cli importprivkey QVKXuZ2hSo2cT9BhkN3CApLuZYVsuzNvidJRt1ucyniHheZ2Pfq5
null
# Import DMAh37n3RUdDxox3uiWAnc1zEPp5yFbHiL sovereign wallet address 
$./dynamic-cli importprivkey QU4VGDcVoej7nDZiyaSgoL7foG8xKiaVyk5odHnJdtyv4tYkmBw1
null
# Import DN4KvqtXyygooPV3oha72TyBB5nqBbkxwj sovereign wallet address
$./dynamic-cli importprivkey QWjTe6sCFVtKBsXfrYDyrHzn7eBeJktsQnWzfiANkMd9PhVM4Qnp
null

Fluid Transaction Structure

scriptPubKey = <OP_Code> <Instructions> <pubkey1 + sig> <pubkey2 + sig> <pubkey3 + sig>

OP_MINT <amount> <time> <receive address> <pubkey1 + sig> <pubkey2 + sig> <pubkey3 + sig>

OP_REWARD_DYNODE <amount> <time> <pubkey1 + sig> <pubkey2 + sig> <pubkey3 + sig>

OP_REWARD_MINING <amount> <time> <pubkey1 + sig> <pubkey2 + sig> <pubkey3 + sig>

Where pubkey1, pubkey2, and pubkey3 are sovereign addresses.

Minting new coins on testnet

Example on how to mint 7,350 new DYN coins with fluid:

# get current Epoch time
$./dynamic-cli gettime
1531173072
# (Optional) Create a new wallet address.  You can use an existing wallet address.
$./dynamic-cli getnewaddress
D5skCLLSk38sBNGKJYpaeTFkrboSzTTFdN
# Create the fluid mint token using amount minted, the epoch time and receiving address
# maketoken <amount> <time> <receive address> 
$./dynamic-cli maketoken 7350 1531173072 D5skCLLSk38sBNGKJYpaeTFkrboSzTTFdN
373335302431353331313733303732244435736B434C4C536B333873424E474B4A5970616554466B72626F537A545446644E
# Sign the token with one of five sovereign address
$./dynamic-cli signtoken DSCex4e189aULrig3nLd42gVf7AbjTwnP5 373335302431353331313733303732244435736B434C4C536B333873424E474B4A5970616554466B72626F537A545446644E
373335302431353331313733303732244435736B434C4C536B333873424E474B4A5970616554466B72626F537A545446644E4048353259324E4953705567372F33774D704977594238664963363331576A4E6938736752332B5A5A63647A5A504167482F593475655A5442684573414D3561307970314A706E64344A35543963784A68675961434655673D

# Using the signed token above, consent the token with another sovereign address
$./dynamic-cli consenttoken DMAh37n3RUdDxox3uiWAnc1zEPp5yFbHiL 373335302431353331313733303732244435736B434C4C536B333873424E474B4A5970616554466B72626F537A545446644E4048353259324E4953705567372F33774D704977594238664963363331576A4E6938736752332B5A5A63647A5A504167482F593475655A5442684573414D3561307970314A706E64344A35543963784A68675961434655673D
373335302431353331313733303732244435736B434C4C536B333873424E474B4A5970616554466B72626F537A545446644E4048353259324E4953705567372F33774D704977594238664963363331576A4E6938736752332B5A5A63647A5A504167482F593475655A5442684573414D3561307970314A706E64344A35543963784A68675961434655673D40482B664E4E70427063616754304156763046474A5A725959686E594D58777649584242596B7A5A585450614E564578356A6C3257617844623972784D432B7168626E4C4B7748792B61374166482F61464F4433627770413D
# Using the signed token above, consent the token with a third sovereign address
$./dynamic-cli consenttoken DN4KvqtXyygooPV3oha72TyBB5nqBbkxwj 373335302431353331313733303732244435736B434C4C536B333873424E474B4A5970616554466B72626F537A545446644E4048353259324E4953705567372F33774D704977594238664963363331576A4E6938736752332B5A5A63647A5A504167482F593475655A5442684573414D3561307970314A706E64344A35543963784A68675961434655673D40482B664E4E70427063616754304156763046474A5A725959686E594D58777649584242596B7A5A585450614E564578356A6C3257617844623972784D432B7168626E4C4B7748792B61374166482F61464F4433627770413D
373335302431353331313733303732244435736B434C4C536B333873424E474B4A5970616554466B72626F537A545446644E4048353259324E4953705567372F33774D704977594238664963363331576A4E6938736752332B5A5A63647A5A504167482F593475655A5442684573414D3561307970314A706E64344A35543963784A68675961434655673D40482B664E4E70427063616754304156763046474A5A725959686E594D58777649584242596B7A5A585450614E564578356A6C3257617844623972784D432B7168626E4C4B7748792B61374166482F61464F4433627770413D40487733686154695A662F3959684A4D45336333563669594F7239477935716862787736384231384249767A544E792F41393076733637323835643736742F43423434465A556353414D58554C61513941484C484F7362673D
# Check if the consent token above if valid and has all signatures 
$./dynamic-cli verifyquorum 373335302431353331313733303732244435736B434C4C536B333873424E474B4A5970616554466B72626F537A545446644E4048353259324E4953705567372F33774D704977594238664963363331576A4E6938736752332B5A5A63647A5A504167482F593475655A5442684573414D3561307970314A706E64344A35543963784A68675961434655673D40482B664E4E70427063616754304156763046474A5A725959686E594D58777649584242596B7A5A585450614E564578356A6C3257617844623972784D432B7168626E4C4B7748792B61374166482F61464F4433627770413D40487733686154695A662F3959684A4D45336333563669594F7239477935716862787736384231384249767A544E792F4139307673363732383564373
Quorum is present!
# Using the consent token above, send the fluid transaction.  Fluid tx cost 100,000 DYN
$./dynamic-cli sendfluidtransaction OP_MINT 373335302431353331313733303732244435736B434C4C536B333873424E474B4A5970616554466B72626F537A545446644E4048353259324E4953705567372F33774D704977594238664963363331576A4E6938736752332B5A5A63647A5A504167482F593475655A5442684573414D3561307970314A706E64344A35543963784A68675961434655673D40482B664E4E70427063616754304156763046474A5A725959686E594D58777649584242596B7A5A585450614E564578356A6C3257617844623972784D432B7168626E4C4B7748792B61374166482F61464F4433627770413D40487733686154695A662F3959684A4D45336333563669594F7239477935716862787736384231384249767A544E792F41393076733637323835643736742F43423434465A556353414D58554C61513941484C484F7362673D
A56994dd9654290cda929f9c6a9ba27cadabeaff6cec45ceb6baa09533123371
# Wait for fluid transactions to confirm in 2 blocks.
# Check fluid transactions
$./dynamic-cli getfluidhistory
[
  {
    "operation": "OP_MINT",
    "amount": "7350",
    "timestamp": 1531173072,
    "payment address": "D5skCLLSk38sBNGKJYpaeTFkrboSzTTFdN",
    "sovereign address 1": "DSCex4e189aULrig3nLd42gVf7AbjTwnP5",
    "sovereign address 2": "DMAh37n3RUdDxox3uiWAnc1zEPp5yFbHiL",
    "sovereign address 3": "DN4KvqtXyygooPV3oha72TyBB5nqBbkxwj"
  }
]
# View raw fluid transactions (hex results removed for readability)
# Example fluid mint coin transaction
$./dynamic-cli getrawtransaction a56994dd9654290cda929f9c6a9ba27cadabeaff6cec45ceb6baa09533123371 1 
{
  "txid": "a56994dd9654290cda929f9c6a9ba27cadabeaff6cec45ceb6baa09533123371",
  "size": 523,
  "version": 1,
  "locktime": 7983,
  "vin": [
    {
      "txid": "f5bf2e220b67cb0a17e290be694fff2402b5538368c515602cb844f00565c7b2",
      "vout": 1,
      "scriptSig": {
        "asm": "3044022…."
    },
      "sequence": 4294967294
    }
  ],
  "vout": [
    {
      "value": 100000.00000000,
      "valueSat": 10000000000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_MINT 373335302431353331313733303732244435736b434c4c536b333873424e474b4a5970616554466b72626f537a545446644e4048353259324e4953705567372f33774d704977594238664963363331576a4e6938736752332b5a5a63647a5a504167482f593475655a5442684573414d3561307970314a706e64344a35543963784a68675961434655673d40482b664e4e70427063616754304156763046474a5a725959686e594d58777649584242596b7a5a585450614e564578356a6c3257617844623972784d432b7168626e4c4b7748792b61374166482f61464f4433627770413d40487733686154695a662f3959684a4d45336333563669594f7239477935716862787736384231384249767a544e792f41393076733637323835643736742f43423434465a556353414d58554c61513941484c484f7362673d",
        "type": "nonstandard"
      }
    },
    {
      "value": 10399775.12883341,
      "valueSat": 1039977512883341,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 402327337a35255bbc8e49eb09ce2c9153cbf586 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914402327337a35255bbc8e49eb09ce2c9153cbf58688ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "DAzDu1zDXXebz8GMj4c4ybjucVtis8U8iC"
        ]
      }
    }
  ] 
}

Changing Dynode Rewards on testnet

Example on how to update the Dynode reward per block to 7.35 DYN coins with fluid:

# get current Epoch time
$./dynamic-cli gettime
1531173965
# Create the fluid mint token using amount minted, the epoch time and receiving address
# maketoken <amount> <time>
$./dynamic-cli maketoken 7.35 1531173965
372E33352431353331313733393635
# Sign the token with one of five sovereign address  
$./dynamic-cli signtoken DSCex4e189aULrig3nLd42gVf7AbjTwnP5 372E33352431353331313733393635
372E3335243135333131373339363540494E7645704F36634E454E58372B75474978723742333566794F507A3969623969615165365052384146415A5270786D7775454E636D62715030477441364969535A357746694B6C49426D4C65355A464268477A5276733D
# Consent the token with a second sovereign address  
$./dynamic-cli consenttoken DMAh37n3RUdDxox3uiWAnc1zEPp5yFbHiL 372E3335243135333131373339363540494E7645704F36634E454E58372B75474978723742333566794F507A3969623969615165365052384146415A5270786D7775454E636D62715030477441364969535A357746694B6C49426D4C65355A464268477A5276733D 372E3335243135333131373339363540494E7645704F36634E454E58372B75474978723742333566794F507A3969623969615165365052384146415A5270786D7775454E636D62715030477441364969535A357746694B6C49426D4C65355A464268477A5276733D404943536753696C35356971456E39684B7938755236794E57527A2F59516E6B662B58626D4B50476C5937662F543337783939667A78783651616A3776372F4E6D4C683343704C78476B537846626C4353597A433835566F3D
# Consent the token with a second sovereign address  
$./dynamic-cli consenttoken DN4KvqtXyygooPV3oha72TyBB5nqBbkxwj 372E3335243135333131373339363540494E7645704F36634E454E58372B75474978723742333566794F507A3969623969615165365052384146415A5270786D7775454E636D62715030477441364969535A357746694B6C49426D4C65355A464268477A5276733D404943536753696C35356971456E39684B7938755236794E57527A2F59516E6B662B58626D4B50476C5937662F543337783939667A78783651616A3776372F4E6D4C683343704C78476B537846626C4353597A433835566F3D 372E3335243135333131373339363540494E7645704F36634E454E58372B75474978723742333566794F507A3969623969615165365052384146415A5270786D7775454E636D62715030477441364969535A357746694B6C49426D4C65355A464268477A5276733D404943536753696C35356971456E39684B7938755236794E57527A2F59516E6B662B58626D4B50476C5937662F543337783939667A78783651616A3776372F4E6D4C683343704C78476B537846626C4353597A433835566F3D4048307763576B57422F7945764537535233597A3355576E566E71544B6C4D49466E6677774F6C3933384772704C4C6C724D67334D55715047475053654D756968436E675672794177534F356F55647448347474737370413D
# Check if the consent token above if valid and has all signatures 
$./dynamic-cli verifyquorum 372E3335243135333131373339363540494E7645704F36634E454E58372B75474978723742333566794F507A3969623969615165365052384146415A5270786D7775454E636D62715030477441364969535A357746694B6C49426D4C65355A464268477A5276733D404943536753696C35356971456E39684B7938755236794E57527A2F59516E6B662B58626D4B50476C5937662F543337783939667A78783651616A3776372F4E6D4C683343704C78476B537846626C4353597A433835566F3D4048307763576B57422F7945764537535233597A3355576E566E71544B6C4D49466E6677774F6C3933384772704C4C6C724D67334D55715047475053654D756968436E675672794177534F356F55647448347474737370413D 
Quorum is present!
# Using the consent token above, send the fluid transaction.  Fluid tx cost 100,000 DYN  
$./dynamic-cli sendfluidtransaction OP_REWARD_DYNODE 372E3335243135333131373339363540494E7645704F36634E454E58372B75474978723742333566794F507A3969623969615165365052384146415A5270786D7775454E636D62715030477441364969535A357746694B6C49426D4C65355A464268477A5276733D404943536753696C35356971456E39684B7938755236794E57527A2F59516E6B662B58626D4B50476C5937662F543337783939667A78783651616A3776372F4E6D4C683343704C78476B537846626C4353597A433835566F3D4048307763576B57422F7945764537535233597A3355576E566E71544B6C4D49466E6677774F6C3933384772704C4C6C724D67334D55715047475053654D756968436E675672794177534F356F55647448347474737370413D
59a3022a62ccc9b7e29ada7a042491250ae3dd7bfcb0c023708ec8122ef89ab7
# Wait for fluid transactions to confirm in 2 blocks.
# Check fluid transactions
$./dynamic-cli getfluidhistory
[
   {
    "operation": "OP_REWARD_DYNODE",
    "amount": "7.35",
    "timestamp": 1531173965,
    "sovereign address 1": "DSCex4e189aULrig3nLd42gVf7AbjTwnP5",
    "sovereign address 2": "DMAh37n3RUdDxox3uiWAnc1zEPp5yFbHiL",
    "sovereign address 3": "DN4KvqtXyygooPV3oha72TyBB5nqBbkxwj"
  }
]
# View raw fluid transactions
# Example change Dynode reward transaction
$./dynamic-cli getrawtransaction a56994dd9654290cda929f9c6a9ba27cadabeaff6cec45ceb6baa09533123371 1 
{
  "txid": "59a3022a62ccc9b7e29ada7a042491250ae3dd7bfcb0c023708ec8122ef89ab7",
  "size": 488,
  "version": 1,
  "locktime": 7992,
  "vin": [
    {
      "txid": "a56994dd9654290cda929f9c6a9ba27cadabeaff6cec45ceb6baa09533123371",
      "vout": 1,
      "scriptSig": {
        "asm": "3044022…."
      },
      "sequence": 4294967294
    }
  ],
  "vout": [
    {
      "value": 100000.00000000,
      "valueSat": 10000000000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_REWARD_DYNODE 372e3335243135333131373339363540494e7645704f36634e454e58372b75474978723742333566794f507a3969623969615165365052384146415a5270786d7775454e636d62715030477441364969535a357746694b6c49426d4c65355a464268477a5276733d404943536753696c35356971456e39684b7938755236794e57527a2f59516e6b662b58626d4b50476c5937662f543337783939667a78783651616a3776372f4e6d4c683343704c78476b537846626c4353597a433835566f3d4048307763576b57422f7945764537535233597a3355576e566e71544b6c4d49466e6677774f6c3933384772704c4c6c724d67334d55715047475053654d756968436e675672794177534f356f55647448347474737370413d",
        "type": "nonstandard"
      }
    },
    {
      "value": 10299775.12878451,
      "valueSat": 1029977512878451,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 012b485de08215c077e63931e2cdfee9529864eb OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914012b485de08215c077e63931e2cdfee9529864eb88ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "D5FH4nQrJs4u3NEY3bCp1rjMMoftrXFb7C"
        ]
      }
    }
  ]
}

Changing Mining Rewards on testnet

Example on how to update the Dynamic mining reward per block to 1.9735 DYN coins with fluid:

# get current Epoch time
$./dynamic-cli gettime
1531174746
# Create the fluid mint token using amount minted, the epoch time and receiving address 
# maketoken <amount> <time>
$./dynamic-cli maketoken 1.9735 1531174746
312E393733352431353331313734373436
# Sign the token with one of five sovereign address  
$./dynamic-cli signtoken DSCex4e189aULrig3nLd42gVf7AbjTwnP5 312E393733352431353331313734373436
312E393733352431353331313734373436404949574C73675864484C53617978794E7130486A3031696F7838646A6A4271774835375553463949686847304752577962592F6850596A57733850337874576D6770483234775477435172625970354538395573787A773D
# Consent the token with a second sovereign address  
$./dynamic-cli consenttoken DMAh37n3RUdDxox3uiWAnc1zEPp5yFbHiL 312E393733352431353331313734373436404949574C73675864484C53617978794E7130486A3031696F7838646A6A4271774835375553463949686847304752577962592F6850596A57733850337874576D6770483234775477435172625970354538395573787A773D 312E393733352431353331313734373436404949574C73675864484C53617978794E7130486A3031696F7838646A6A4271774835375553463949686847304752577962592F6850596A57733850337874576D6770483234775477435172625970354538395573787A773D40494331775748765A5A66732F6E775956515A5237584170726B76327A7869417A386B746A31374557416C44585A76317670332B432B56635A36324B61576938426F485953747A465332332F6E67494B2F667476444370383D
# Consent the token with a second sovereign address  
$./dynamic-cli consenttoken DN4KvqtXyygooPV3oha72TyBB5nqBbkxwj 312E393733352431353331313734373436404949574C73675864484C53617978794E7130486A3031696F7838646A6A4271774835375553463949686847304752577962592F6850596A57733850337874576D6770483234775477435172625970354538395573787A773D40494331775748765A5A66732F6E775956515A5237584170726B76327A7869417A386B746A31374557416C44585A76317670332B432B56635A36324B61576938426F485953747A465332332F6E67494B2F667476444370383D 312E393733352431353331313734373436404949574C73675864484C53617978794E7130486A3031696F7838646A6A4271774835375553463949686847304752577962592F6850596A57733850337874576D6770483234775477435172625970354538395573787A773D40494331775748765A5A66732F6E775956515A5237584170726B76327A7869417A386B746A31374557416C44585A76317670332B432B56635A36324B61576938426F485953747A465332332F6E67494B2F667476444370383D40487A4267363275434439756767302B484553505A634375437A4146556478534834776148516B4D412B2B427645436868686E6738716D64732F4F54722B506630376F335A4531674446374846712B2B6B677034757463343D
# Check if the consent token above if valid and has all signatures 
$./dynamic-cli verifyquorum 312E393733352431353331313734373436404949574C73675864484C53617978794E7130486A3031696F7838646A6A4271774835375553463949686847304752577962592F6850596A57733850337874576D6770483234775477435172625970354538395573787A773D40494331775748765A5A66732F6E775956515A5237584170726B76327A7869417A386B746A31374557416C44585A76317670332B432B56635A36324B61576938426F485953747A465332332F6E67494B2F667476444370383D40487A4267363275434439756767302B484553505A634375437A4146556478534834776148516B4D412B2B427645436868686E6738716D64732F4F54722B506630376F335A4531674446374846712B2B6B677034757463343D 
Quorum is present!
# Using the consent token above, send the fluid transaction.  Fluid tx cost 100,000 DYN  
$./dynamic-cli sendfluidtransaction OP_REWARD_MINING 312E393733352431353331313734373436404949574C73675864484C53617978794E7130486A3031696F7838646A6A4271774835375553463949686847304752577962592F6850596A57733850337874576D6770483234775477435172625970354538395573787A773D40494331775748765A5A66732F6E775956515A5237584170726B76327A7869417A386B746A31374557416C44585A76317670332B432B56635A36324B61576938426F485953747A465332332F6E67494B2F667476444370383D40487A4267363275434439756767302B484553505A634375437A4146556478534834776148516B4D412B2B427645436868686E6738716D64732F4F54722B506630376F335A4531674446374846712B2B6B677034757463343D
8969e02d255698577cc3671e3e80fc461ccddedf1a375541be6fe9140b1729ce
# Wait for fluid transactions to confirm in 2 blocks.
# Check fluid transactions
$./dynamic-cli getfluidhistory
[
  {
    "operation": "OP_REWARD_MINING",
    "amount": "1.9735",
    "timestamp": 1531174746,
    "sovereign address 1": "DSCex4e189aULrig3nLd42gVf7AbjTwnP5",
    "sovereign address 2": "DMAh37n3RUdDxox3uiWAnc1zEPp5yFbHiL",
    "sovereign address 3": "DN4KvqtXyygooPV3oha72TyBB5nqBbkxwj"
  }
]
# View raw fluid transactions
# Example change mining reward transaction
$./dynamic-cli getrawtransaction 8969e02d255698577cc3671e3e80fc461ccddedf1a375541be6fe9140b1729ce 1 
{
  "txid": "8969e02d255698577cc3671e3e80fc461ccddedf1a375541be6fe9140b1729ce",
  "size": 490,
  "version": 1,
  "locktime": 8003,
  "vin": [
    {
      "txid": "59a3022a62ccc9b7e29ada7a042491250ae3dd7bfcb0c023708ec8122ef89ab7",
      "vout": 1,
      "scriptSig": {
        "asm": "304402207…."
      },
      "sequence": 4294967294
    }
  ],
  "vout": [
    {
      "value": 100000.00000000,
      "valueSat": 10000000000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_REWARD_MINING 312e393733352431353331313734373436404949574c73675864484c53617978794e7130486a3031696f7838646a6a4271774835375553463949686847304752577962592f6850596a57733850337874576d6770483234775477435172625970354538395573787a773d40494331775748765a5a66732f6e775956515a5237584170726b76327a7869417a386b746a31374557416c44585a76317670332b432b56635a36324b61576938426f485953747a465332332f6e67494b2f667476444370383d40487a4267363275434439756767302b484553505a634375437a4146556478534834776148516b4d412b2b427645436868686e6738716d64732f4f54722b506630376f335a4531674446374846712b2b6b677034757463343d",
        "type": "nonstandard"
      }
    },
    {
      "value": 10199775.12873541,
      "valueSat": 1019977512873541,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 c8befd2bfdb259a19df401d0e7967382e9bd7321 OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914c8befd2bfdb259a19df401d0e7967382e9bd732188ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "DPSYUmb8o9oPJr9j8p6HVjfMkMnaJpGCUg"
        ]
      }
    }
  ]
}