diff --git a/Circles.Index.CirclesV1/DatabaseSchema.cs b/Circles.Index.CirclesV1/DatabaseSchema.cs
index bc0c5f3..7dbc5f5 100644
--- a/Circles.Index.CirclesV1/DatabaseSchema.cs
+++ b/Circles.Index.CirclesV1/DatabaseSchema.cs
@@ -35,6 +35,80 @@ public class DatabaseSchema : IDatabaseSchema
new("amount", ValueTypes.BigInt, false)
]);
+ public static readonly EventSchema TrustRelations = new("V_CrcV1", "TrustRelations", new byte[32], [
+ new("blockNumber", ValueTypes.Int, true),
+ new("timestamp", ValueTypes.Int, true),
+ new("transactionIndex", ValueTypes.Int, true),
+ new("logIndex", ValueTypes.Int, true),
+ new("batchIndex", ValueTypes.Int, true, true),
+ new("transactionHash", ValueTypes.String, true),
+ new("user", ValueTypes.Address, true),
+ new("canSendTo", ValueTypes.Address, true),
+ new("limit", ValueTypes.Int, false),
+ ])
+ {
+ SqlMigrationItem = new SqlMigrationItem(@"
+ create or replace view ""V_CrcV1_TrustRelations"" as
+ select ""blockNumber"",
+ ""timestamp"",
+ ""transactionIndex"",
+ ""logIndex"",
+ ""transactionHash"",
+ ""user"",
+ ""canSendTo"",
+ ""limit""
+ from (
+ select ""blockNumber"",
+ ""timestamp"",
+ ""transactionIndex"",
+ ""logIndex"",
+ ""transactionHash"",
+ ""user"",
+ ""canSendTo"",
+ ""limit"",
+ row_number() over (partition by ""user"", ""canSendTo"" order by ""blockNumber"" desc, ""transactionIndex"" desc, ""logIndex"" desc) as ""rn""
+ from ""CrcV1_Trust""
+ ) t
+ where ""rn"" = 1
+ and ""limit"" > 0
+ order by ""blockNumber"" desc, ""transactionIndex"" desc, ""logIndex"" desc;
+ ")
+ };
+
+ public static readonly EventSchema Avatars = new("V_CrcV1", "Avatars", new byte[32], [
+ new("blockNumber", ValueTypes.Int, true),
+ new("timestamp", ValueTypes.Int, true),
+ new("transactionIndex", ValueTypes.Int, true),
+ new("logIndex", ValueTypes.Int, true),
+ new("transactionHash", ValueTypes.String, true),
+ new("user", ValueTypes.Address, true),
+ new("token", ValueTypes.Address, true),
+ ])
+ {
+ SqlMigrationItem = new SqlMigrationItem(@"
+ create or replace view ""V_CrcV1_Avatars"" as
+ select ""blockNumber"",
+ ""timestamp"",
+ ""transactionIndex"",
+ ""logIndex"",
+ ""transactionHash"",
+ 'human' as ""type"",
+ ""user"",
+ ""token""
+ from ""CrcV1_Signup""
+ union all
+ select ""blockNumber"",
+ ""timestamp"",
+ ""transactionIndex"",
+ ""logIndex"",
+ ""transactionHash"",
+ 'organization' as ""type"",
+ ""organization"",
+ null as ""token""
+ from ""CrcV1_OrganizationSignup"";
+ ")
+ };
+
public IDictionary<(string Namespace, string Table), EventSchema> Tables { get; } =
new Dictionary<(string Namespace, string Table), EventSchema>
{
@@ -57,6 +131,14 @@ public class DatabaseSchema : IDatabaseSchema
{
("CrcV1", "Transfer"),
Transfer
+ },
+ {
+ ("V_CrcV1", "TrustRelations"),
+ TrustRelations
+ },
+ {
+ ("V_CrcV1", "Avatars"),
+ Avatars
}
};
diff --git a/Circles.Index.CirclesV2/DatabaseSchema.cs b/Circles.Index.CirclesV2/DatabaseSchema.cs
index b172e25..67a76e5 100644
--- a/Circles.Index.CirclesV2/DatabaseSchema.cs
+++ b/Circles.Index.CirclesV2/DatabaseSchema.cs
@@ -5,7 +5,7 @@
namespace Circles.Index.CirclesV2;
/*
-
+ TODO: It looks like the new Hub doesn't have an equivalent to the 'HubTransfer' event
hub/
Hub.sol:
event PersonalMint(address indexed human, uint256 amount, uint256 startPeriod, uint256 endPeriod);
@@ -22,7 +22,7 @@ namespace Circles.Index.CirclesV2;
Manual events:
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
- TODO:
+ TODO: Add the 'Lift' contract events
lift/
DemurrageCircles.sol:
event DepositDemurraged(address indexed account, uint256 amount, uint256 inflationaryAmount);
diff --git a/Circles.Index.CirclesViews/Circles.Index.CirclesViews.csproj b/Circles.Index.CirclesViews/Circles.Index.CirclesViews.csproj
new file mode 100644
index 0000000..69158cf
--- /dev/null
+++ b/Circles.Index.CirclesViews/Circles.Index.CirclesViews.csproj
@@ -0,0 +1,13 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
diff --git a/Circles.Index.CirclesViews/DatabaseSchema.cs b/Circles.Index.CirclesViews/DatabaseSchema.cs
new file mode 100644
index 0000000..5e250ce
--- /dev/null
+++ b/Circles.Index.CirclesViews/DatabaseSchema.cs
@@ -0,0 +1,111 @@
+using Circles.Index.Common;
+
+namespace Circles.Index.CirclesViews;
+
+public class DatabaseSchema : IDatabaseSchema
+{
+ public ISchemaPropertyMap SchemaPropertyMap { get; } = new SchemaPropertyMap();
+
+ public IEventDtoTableMap EventDtoTableMap { get; } = new EventDtoTableMap();
+
+ public static readonly EventSchema TrustRelations = new("V_Crc", "TrustRelations", new byte[32], [
+ new("blockNumber", ValueTypes.Int, true),
+ new("timestamp", ValueTypes.Int, true),
+ new("transactionIndex", ValueTypes.Int, true),
+ new("logIndex", ValueTypes.Int, true),
+ new("transactionHash", ValueTypes.String, true),
+ new("version", ValueTypes.Int, false),
+ new("trustee", ValueTypes.String, false),
+ new("truster", ValueTypes.String, false),
+ new("expiryTime", ValueTypes.Int, false),
+ new("limit", ValueTypes.Int, false)
+ ])
+ {
+ SqlMigrationItem = new SqlMigrationItem(@"
+ create or replace view ""V_Crc_TrustRelations"" as
+ select ""blockNumber"",
+ ""timestamp"",
+ ""transactionIndex"",
+ ""logIndex"",
+ ""transactionHash"",
+ 2 as ""version"",
+ ""trustee"",
+ ""truster"",
+ ""expiryTime"",
+ null as ""limit""
+ from ""V_CrcV2_TrustRelations""
+ union all
+ select ""blockNumber"",
+ ""timestamp"",
+ ""transactionIndex"",
+ ""logIndex"",
+ ""transactionHash"",
+ 1 as ""version"",
+ ""user"",
+ ""canSendTo"",
+ null as ""expiryTime"",
+ ""limit""
+ from ""V_CrcV1_TrustRelations"";
+ ")
+ };
+
+ public static readonly EventSchema Avatars = new("V_Crc", "Avatars", new byte[32], [
+ new("blockNumber", ValueTypes.Int, true),
+ new("timestamp", ValueTypes.Int, true),
+ new("transactionIndex", ValueTypes.Int, true),
+ new("logIndex", ValueTypes.Int, true),
+ new("transactionHash", ValueTypes.String, true),
+ new("version", ValueTypes.Int, false),
+ new("type", ValueTypes.String, false),
+ new("invitedBy", ValueTypes.String, false),
+ new("avatar", ValueTypes.String, false),
+ new("tokenId", ValueTypes.String, false),
+ new("name", ValueTypes.String, false),
+ new("cidV0Digest", ValueTypes.Bytes, false),
+ ])
+ {
+ SqlMigrationItem = new SqlMigrationItem(@"
+ create or replace view ""V_Crc_Avatars"" as
+ select ""blockNumber"",
+ ""timestamp"",
+ ""transactionIndex"",
+ ""logIndex"",
+ ""transactionHash"",
+ 2 as ""version"",
+ ""type"",
+ ""invitedBy"",
+ ""avatar"",
+ ""tokenId"",
+ ""name"",
+ ""cidV0Digest""
+ from ""V_CrcV2_Avatars""
+ union all
+ select ""blockNumber"",
+ ""timestamp"",
+ ""transactionIndex"",
+ ""logIndex"",
+ ""transactionHash"",
+ 1 as ""version"",
+ ""type"",
+ null as ""invitedBy"",
+ ""user"" as ""avatar"",
+ ""token"" as ""tokenId"",
+ null as ""name"",
+ null as ""cidV0Digest""
+ from ""V_CrcV1_Avatars"";
+ ")
+ };
+
+ public IDictionary<(string Namespace, string Table), EventSchema> Tables { get; } =
+ new Dictionary<(string Namespace, string Table), EventSchema>
+ {
+ {
+ ("V_Crc", "Avatars"),
+ Avatars
+ },
+ {
+ ("V_Crc", "TrustRelations"),
+ TrustRelations
+ }
+ };
+}
\ No newline at end of file
diff --git a/Circles.Index.Postgres/PostgresDb.cs b/Circles.Index.Postgres/PostgresDb.cs
index fd4cb76..87b5778 100644
--- a/Circles.Index.Postgres/PostgresDb.cs
+++ b/Circles.Index.Postgres/PostgresDb.cs
@@ -305,15 +305,16 @@ public DatabaseQueryResult Select(ParameterizedSql select)
{
if (resultSchema[i].NpgsqlDbType == NpgsqlDbType.Numeric)
{
- row[i] = reader.GetFieldValue(i);
+ row[i] = reader.GetFieldValue(i);
}
else
{
row[i] = reader.GetValue(i);
- if (row[i] is DBNull)
- {
- row[i] = null;
- }
+ }
+
+ if (row[i] is DBNull)
+ {
+ row[i] = null;
}
}
diff --git a/Circles.Index/Circles.Index.csproj b/Circles.Index/Circles.Index.csproj
index 81359a5..6791ea8 100644
--- a/Circles.Index/Circles.Index.csproj
+++ b/Circles.Index/Circles.Index.csproj
@@ -28,6 +28,7 @@
+
diff --git a/Circles.Index/Plugin.cs b/Circles.Index/Plugin.cs
index 61e43d2..0cdfc1d 100644
--- a/Circles.Index/Plugin.cs
+++ b/Circles.Index/Plugin.cs
@@ -32,7 +32,8 @@ public async Task Init(INethermindApi nethermindApi)
IDatabaseSchema v1 = new CirclesV1.DatabaseSchema();
IDatabaseSchema v2 = new CirclesV2.DatabaseSchema();
IDatabaseSchema v2NameRegistry = new CirclesV2.NameRegistry.DatabaseSchema();
- IDatabaseSchema databaseSchema = new CompositeDatabaseSchema([common, v1, v2, v2NameRegistry]);
+ IDatabaseSchema circlesViews = new CirclesViews.DatabaseSchema();
+ IDatabaseSchema databaseSchema = new CompositeDatabaseSchema([common, v1, v2, v2NameRegistry, circlesViews]);
ILogger baseLogger = nethermindApi.LogManager.GetClassLogger();
ILogger pluginLogger = new LoggerWithPrefix($"{Name}: ", baseLogger);
diff --git a/Circles.sln b/Circles.sln
index c142d84..923e5b6 100644
--- a/Circles.sln
+++ b/Circles.sln
@@ -39,6 +39,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{B30CB7
add-deploy-script-tp-v2-repo.sh = add-deploy-script-tp-v2-repo.sh
v2-example-requests.md = v2-example-requests.md
v1-example-requests.md = v1-example-requests.md
+ general-example-requests.md = general-example-requests.md
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Circles.Index.Postgres", "Circles.Index.Postgres\Circles.Index.Postgres.csproj", "{8ED5FCD0-0995-44E7-9A11-E0EB03BB0832}"
@@ -51,6 +52,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Circles.Index.Query", "Circ
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Circles.Index.Query.Tests", "Circles.Index.Query.Tests\Circles.Index.Query.Tests.csproj", "{A4BFF176-178E-4C8B-A7C1-DC7240F91E0D}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Schemas", "Schemas", "{64189094-62E5-48CA-BD66-1A7B82263BA8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Circles.Index.CirclesViews", "Circles.Index.CirclesViews\Circles.Index.CirclesViews.csproj", "{265A4516-DC59-4D8B-B097-36902108B143}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -93,5 +98,15 @@ Global
{A4BFF176-178E-4C8B-A7C1-DC7240F91E0D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A4BFF176-178E-4C8B-A7C1-DC7240F91E0D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A4BFF176-178E-4C8B-A7C1-DC7240F91E0D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {265A4516-DC59-4D8B-B097-36902108B143}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {265A4516-DC59-4D8B-B097-36902108B143}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {265A4516-DC59-4D8B-B097-36902108B143}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {265A4516-DC59-4D8B-B097-36902108B143}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {2B7D2126-6D6F-4A5B-81A1-3E5F1A9645F6} = {64189094-62E5-48CA-BD66-1A7B82263BA8}
+ {FF8E96F7-2903-4C0B-A443-19EA8D7FBB67} = {64189094-62E5-48CA-BD66-1A7B82263BA8}
+ {33D651AB-1C61-4A06-9C02-A144E7342317} = {64189094-62E5-48CA-BD66-1A7B82263BA8}
+ {265A4516-DC59-4D8B-B097-36902108B143} = {64189094-62E5-48CA-BD66-1A7B82263BA8}
EndGlobalSection
EndGlobal
diff --git a/Readme.md b/Readme.md
index 35d9216..9f30ebe 100644
--- a/Readme.md
+++ b/Readme.md
@@ -7,8 +7,11 @@ query [Circles](https://www.aboutcircles.com/) protocol events.
**Query a node**
-If you're just looking for a way to query Circles events, you can check out the query examples in
-the [v1-example-requests.md](v1-example-requests.md) and [v2-example-requests.md](v2-example-requests.md) files.
+If you're just looking for a way to query Circles events, you can check out the query examples:
+
+* [General examples](general-example-requests.md)
+* [Circles v1 examples](v1-example-requests.md)
+* [Circles v2 examples](v2-example-requests.md)
For a detailed description of the available RPC methods, see the [Circles RPC methods](#circles-rpc-methods) section.
@@ -216,7 +219,7 @@ docker compose -f docker-compose.spaceneth.yml up
## Circles RPC methods
-The plugin extends the Nethermind JSON-RPC API with additional methods to query Circles events and aggregate values.
+The plugin extends the Nethermind JSON-RPC API with additional methods to query Circles events and aggregate values.
You can find concrete examples for all rpc-methods in the [v1-example-requests.md](v1-example-requests.md)
and [v2-example-requests.md](v2-example-requests.md) files.
@@ -282,10 +285,16 @@ Namespaces and tables:
* `UpdateMetadataDigest`
* `URI`
* `CidV0` (predecessor of `URI` and `UpdateMetadataDigest`)
+* `V_CrcV1`
+ * `Avatars` (view combining `Signup` and `OrganizationSignup`)
+ * `TrustRelations` (view filtered to represent all current `Trust` relations)
* `V_CrcV2`
- * `Transfers` (view combining `TransferBatch` and `TransferSingle`)
* `Avatars` (view combining `RegisterHuman`, `InviteHuman`, `RegisterGroup` and `RegisterOrganization`)
* `TrustRelations` (view filtered to represent all current `Trust` relations)
+ * `Transfers` (view combining `TransferBatch` and `TransferSingle`)
+* `V_Crc`
+ * `Avatars` (view combining `V_CrcV1_Avatars` and `V_CrcV2_Avatars`)
+ * `TrustRelations` (view combining `V_CrcV1_TrustRelations` and `V_CrcV2_TrustRelations`)
#### Available filter types
diff --git a/arm64.Dockerfile b/arm64.Dockerfile
index 11c95aa..3cfed88 100644
--- a/arm64.Dockerfile
+++ b/arm64.Dockerfile
@@ -15,6 +15,7 @@ COPY --from=build /circles-nethermind-plugin/Circles.Index.Common.dll /nethermin
COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesV1.dll /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesV2.dll /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesV2.NameRegistry.dll /nethermind/plugins
+COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesViews.dll /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.Rpc.dll /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.Query.dll /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Nethermind.Int256.dll /nethermind/plugins
diff --git a/general-example-requests.md b/general-example-requests.md
new file mode 100644
index 0000000..9d3599f
--- /dev/null
+++ b/general-example-requests.md
@@ -0,0 +1,226 @@
+## General circles RPC examples
+
+The examples in this file are general Circles RPC methods that can be used to query Circles V1 and V2 data.
+
+1. [circles_query](#circles_query)
+1.1. [Get a list of Circles avatars](#get-a-list-of-circles-users)
+1.2. [Get the trust relations between avatars](#get-the-trust-relations-between-avatars)
+
+### circles_query
+
+##### Get a list of Circles avatars
+
+This query returns v1 as well as v2 Circles users. The version of the user can be determined by the `version` column.
+
+The following columns are only valid for v2 users:
+* `invitedBy` - The address of the user who invited the user.
+* `name` - The name of the group or organization.
+* `cidV0Digest` - The token metadata CID of the avatar.
+
+```shell
+curl -X POST --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "circles_query",
+ "params": [
+ {
+ "Namespace": "V_Crc",
+ "Table": "Avatars",
+ "Limit": 10,
+ "Columns": [],
+ "Filter": [],
+ "Order": [
+ {
+ "Column": "blockNumber",
+ "SortOrder": "DESC"
+ },
+ {
+ "Column": "transactionIndex",
+ "SortOrder": "DESC"
+ },
+ {
+ "Column": "logIndex",
+ "SortOrder": "DESC"
+ }
+ ]
+ }
+ ]
+}' -H "Content-Type: application/json" http://localhost:8545/
+```
+
+##### Response:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "Columns": [
+ "blockNumber",
+ "timestamp",
+ "transactionIndex",
+ "logIndex",
+ "transactionHash",
+ "version",
+ "type",
+ "invitedBy",
+ "avatar",
+ "tokenId",
+ "name",
+ "cidV0Digest"
+ ],
+ "Rows": [
+ [
+ 9833016,
+ 1715978910,
+ 0,
+ 2,
+ "0x9d5e2ac311eed1c258f9f0885b464baa72e2a36936314723060a03ea59790d72",
+ 2,
+ "human",
+ "0xc661fe4ce147c209ea6ca66a2a2323b69791a463",
+ "0x52098d2cae70c5f1cda44305c10bf39b98dde4cc",
+ "0x52098d2cae70c5f1cda44305c10bf39b98dde4cc",
+ null,
+ null
+ ],
+ [
+ 9819862,
+ 1715910125,
+ 0,
+ 2,
+ "0xbd4c3cdf7f0e075f14099e7e5263cce6d0617bc3fc18c92635654b8496d51a77",
+ 1,
+ "human",
+ null,
+ "0xa315ae910694d7d94406c07962ed56400491cfd4",
+ "0x31807cb064a3688bd1cdac56a4a55ee5d78665cd",
+ null,
+ null
+ ],
+ [
+ 9819751,
+ 1715909570,
+ 0,
+ 1,
+ "0x408796aed78e7743b0c4851a003dfb343987a206ddb9bab9ee8d87f6f34c4224",
+ 2,
+ "group",
+ null,
+ "0xabab7fccac344519639449f843d966b24730836d",
+ "0xabab7fccac344519639449f843d966b24730836d",
+ "Hans Peter Meier Wurstwaren GmbH",
+ "0x0e7071c59df3b9454d1d18a15270aa36d54f89606a576dc621757afd44ad1d2e"
+ ]
+ ]
+ },
+ "id": 1
+}
+```
+
+##### Get the trust relations between avatars
+
+This query returns the trust relations between avatars.
+
+The following columns are only valid for v1 trust relations:
+* `limit` - The trust limit (0 is no trust, 100 full trust).
+
+The following columns are only valid for v2 trust relations:
+* `expiryTime` - The expiry time of the trust relation.
+
+```shell
+curl -X POST --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "circles_query",
+ "params": [
+ {
+ "Namespace": "V_Crc",
+ "Table": "TrustRelations",
+ "Columns": [],
+ "Filter": [
+ {
+ "Type": "Conjunction",
+ "ConjunctionType": "Or",
+ "Predicates": [
+ {
+ "Type": "FilterPredicate",
+ "FilterType": "Equals",
+ "Column": "truster",
+ "Value": "0xae3a29a9ff24d0e936a5579bae5c4179c4dff565"
+ },
+ {
+ "Type": "FilterPredicate",
+ "FilterType": "Equals",
+ "Column": "trustee",
+ "Value": "0xae3a29a9ff24d0e936a5579bae5c4179c4dff565"
+ }
+ ]
+ }
+ ],
+ "Order": [
+ {
+ "Column": "blockNumber",
+ "SortOrder": "DESC"
+ },
+ {
+ "Column": "transactionIndex",
+ "SortOrder": "DESC"
+ },
+ {
+ "Column": "logIndex",
+ "SortOrder": "DESC"
+ }
+ ]
+ }
+ ]
+}' -H "Content-Type: application/json" http://localhost:8545/
+```
+
+##### Response:
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "Columns": [
+ "blockNumber",
+ "timestamp",
+ "transactionIndex",
+ "logIndex",
+ "transactionHash",
+ "version",
+ "trustee",
+ "truster",
+ "expiryTime",
+ "limit"
+ ],
+ "Rows": [
+ [
+ 9819804,
+ 1715909835,
+ 0,
+ 0,
+ "0x41670ceb0bd544f69a6c41ab5390df4ea3ae782cf89b693ac0d7908999bd2f47",
+ 2,
+ "0xae3a29a9ff24d0e936a5579bae5c4179c4dff565",
+ "0x25548e3e36c2d1862e4f7aa99a490bf71ed087ca",
+ "79228162514264337593543950335",
+ null
+ ],
+ [
+ 9814663,
+ 1715883990,
+ 0,
+ 1,
+ "0xb60737ba5a6f5da7dcde863a36008e9199ddd0b85a76e51b17293c8cc50d7379",
+ 1,
+ "0xae3a29a9ff24d0e936a5579bae5c4179c4dff565",
+ "0xae3a29a9ff24d0e936a5579bae5c4179c4dff565",
+ null,
+ "100"
+ ]
+ ]
+ },
+ "id": 1
+}
+```
\ No newline at end of file
diff --git a/v1-example-requests.md b/v1-example-requests.md
index 4e474b1..b73ff38 100644
--- a/v1-example-requests.md
+++ b/v1-example-requests.md
@@ -1,4 +1,4 @@
-## Circles V1 RPC methods
+## Circles V1 RPC examples
1. [circles_getTotalBalance](#circles_getTotalBalance)
2. [circles_getTokenBalances](#circles_getTokenBalances)
diff --git a/v2-example-requests.md b/v2-example-requests.md
index c14e7b7..fa6fb7a 100644
--- a/v2-example-requests.md
+++ b/v2-example-requests.md
@@ -1,10 +1,10 @@
-## Circles V2 RPC methods
+## Circles V2 RPC examples
1. [circlesV2_getTotalBalance](#circlesV2_getTotalBalance)
2. [circlesV2_getTokenBalances](#circlesV2_getTokenBalances)
3. [circles_query](#circles_query)
3.1. [Get the transaction history of a wallet](#get-the-transaction-history-of-a-wallet)
-3.2. [Get a list of Circles users](#get-a-list-of-circles-users)
+3.2. [Get a list of Circles avatars](#get-a-list-of-circles-users)
3.3. [Get the trust relations between avatars](#get-the-trust-relations-between-avatars)
### circlesV2_getTotalBalance
@@ -178,7 +178,7 @@ curl -X POST --data '{
}
```
-##### Get a list of Circles users
+##### Get a list of Circles avatars
Query latest 10 Circles V2 registrations:
diff --git a/x64.Dockerfile b/x64.Dockerfile
index 58d90be..a2b0a53 100644
--- a/x64.Dockerfile
+++ b/x64.Dockerfile
@@ -15,6 +15,7 @@ COPY --from=build /circles-nethermind-plugin/Circles.Index.Common.dll /nethermin
COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesV1.dll /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesV2.dll /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesV2.NameRegistry.dll /nethermind/plugins
+COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesViews.dll /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.Postgres.dll /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.Rpc.dll /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.Query.dll /nethermind/plugins
diff --git a/x64.debug.Dockerfile b/x64.debug.Dockerfile
index 653b53e..8cd62e6 100644
--- a/x64.debug.Dockerfile
+++ b/x64.debug.Dockerfile
@@ -20,6 +20,8 @@ COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesV2.dll /nether
COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesV2.pdb /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesV2.NameRegistry.dll /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesV2.NameRegistry.pdb /nethermind/plugins
+COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesViews.dll /nethermind/plugins
+COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesViews.pdb /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.Postgres.dll /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.Postgres.pdb /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.Rpc.dll /nethermind/plugins
diff --git a/x64.debug.spaceneth.Dockerfile b/x64.debug.spaceneth.Dockerfile
index ee2609c..a3ee178 100644
--- a/x64.debug.spaceneth.Dockerfile
+++ b/x64.debug.spaceneth.Dockerfile
@@ -20,6 +20,8 @@ COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesV2.dll /nether
COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesV2.pdb /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesV2.NameRegistry.dll /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesV2.NameRegistry.pdb /nethermind/plugins
+COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesViews.dll /nethermind/plugins
+COPY --from=build /circles-nethermind-plugin/Circles.Index.CirclesViews.pdb /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.Postgres.dll /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.Postgres.pdb /nethermind/plugins
COPY --from=build /circles-nethermind-plugin/Circles.Index.Rpc.dll /nethermind/plugins