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