Aggregates¶
Aggregates are a key-value store specific to an account. Each time a new aggregate message is received for a specific account, the nodes add a new layer on top and mutate the global storage for this account.
Query aggregate of an account¶
To query keys from an account aggregate, you need to call the fetch aggregate function.
Synchronous version:
>>> from aleph_client.synchronous import fetch_aggregate
>>> fetch_aggregate("0x06DE0C46884EbFF46558Cd1a9e7DA6B1c3E9D0a8",
... "profile")
{"bio": "tester", "name": "Moshe on Ethereum"}
Mutate aggregate¶
To mutate an aggregate you need to call the create_aggregate function (it will create an AGGREGATE type message for you and submit it). You need a valid account to do so.
asynchronous version (assumes you already have an account instanciated):
>>> from aleph_client.synchronous import create_aggregate, fetch_aggregate
>>> create_aggregate(
... account, 'testkey', {'a': 1, 'b': 2}, channel='MY_CHANNEL')
>>> fetch_aggregate(account.get_address(), 'testkey')
{'a': 1, 'b': 2}
>>> create_aggregate(
... account, 'testkey', {'a': 2, 'c': 4}, channel='MY_CHANNEL')
>>> fetch_aggregate(account.get_address(), 'testkey')
{'a': 2, 'b': 2, 'c': 4}
Asynchronous version is very similar:
from aleph_client.asynchronous import create_aggregate
await create_aggregate(...)
If you want to set an aggregate on another address than the one of your account, this address should have something similar to this in its “security” key:
>>> fetch_aggregate('TARGET_ADDRESS', 'security')
{'authorizations': [
{
'address': 'YOUR_ADDRESS',
'types': ['AGGREGATE]
'aggregate_keys': ['testkey']
}
]}
To write to this address ‘testkey’ aggregate key:
>>> create_aggregate(
... account, 'testkey', {'a': 1, 'b': 2}, channel='MY_CHANNEL',
... address='TARGET_ADDRESS')
Note
For more information on the authorizations model, see this pyaleph doc.