Dapp State Database

The contractvm framework offer a database interface for saving internal state of a dapp. A fresh empty and private state database is created for every dapp, and it is exploitable in the Core of your dapp. The database is a simple key-value database, where we can store array or complex dict object (similar to a json object).

For instance, we can see a basic usage of database in the dapp.Core of the FirstDapp tutorial:

class BlockStoreCore (dapp.Core):
        def __init__ (self, chain, database):
                super (BlockStoreCore, self).__init__ (chain, database)

        def set (self, key, value):
                if self.database.exists (key):
                        return
                else:
                        self.database.set (key, value)

        def get (self, key):
                if not self.database.exists (key):
                        return None
                else:
                        return self.database.get (key)

The Database class is more complex than a simple get/set.

Basic usage

database.get(key)

Get the value given its key.

Parameters:key (string) – key to query
Return type:array or dict
database.set(key, value)

Set a key with a value.

Parameters:
  • key (string) – key to set
  • value (array or dict) – value to set
database.exists(key)

Check if a key exists: return true if key exist.

Parameters:key (string) – key to check
Return type:boolean
database.delete(key)

Delete a key.

Parameters:key (string) – key to delete

Integers

database.intinc(key)

If key is set and contains a number, increment the value.

Parameters:key (string) – key to increment
database.decinc(key)

If key is set and contains a number, decrement the value.

Parameters:key (string) – key to decrement

Lists

database.listappend(key, item)

If key is an array, append item as array item.

Parameters:
  • key (string) – array key
  • item (dict or array) – item to append
database.listremove(key, item)

If key is an array, remove the element item from the array

Parameters:
  • key (string) – array key
  • item (dict or array) – item to remove

Initialization

database.init(key, value)

If not exists, initialize key with value.

Parameters:
  • key (string) – array key
  • value (dict or array) – initialization value
database.getinit(key, value)

If not exists, initialize key with value. Return the previous value or the new value

Parameters:
  • key (string) – array key
  • value (dict or array) – initialization value
Return type:

dict or array