Client
Clients can interact with the abstractaccount module through:
CLI
The command-line interface provides both query and transaction commands for the abstractaccount module.
Query Commands
Query Params
Get the current abstractaccount module parameters:
d q abstractaccount params
Example Output:
params:
  # module parameters
Query Actor Address
Get the contract address associated with a specific actor role:
d q abstractaccount actor <actor-name>
Example:
d q abstractaccount actor validator
Example Output:
address: dchain1...
Query Authenticator Address
Get the contract address associated with a specific authenticator role:
d q abstractaccount authenticator <authenticator-name>
Example:
d q abstractaccount authenticator default
Example Output:
address: dchain1...
Query Supported Proxies
Get the list of supported proxy code IDs:
d q abstractaccount supported-proxies
Example Output:
proxies:
  - 1
  - 2
  - 3
Transaction Commands
Register Account
Register a new abstract account:
d tx abstractaccount register-account <code-id> <instantiate-msg-json> \
  --from=<key> \
  --salt=<salt> \
  --amount=<funds>
Example:
d tx abstractaccount register-account 1 '{"owner":"dchain1..."}' \
  --from=alice \
  --salt="mysalt" \
  --amount=1000udt
Parameters:
code-id: The CosmWasm code ID of the proxy contractinstantiate-msg-json: JSON-encoded instantiation message--from: The sender's key name--salt: (Optional) Salt for predictable address derivation--amount: (Optional) Funds to send to the contract on instantiation
Update Params (via Governance)
Update module parameters through a governance proposal:
d tx gov submit-proposal /path/to/proposal.json --from=<key>
Where proposal.json contains:
{
  "messages": [
    {
      "@type": "/d.abstractaccount.v1.MsgUpdateParams",
      "sender": "dchain10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn",
      "params": {
        // updated params
      }
    }
  ],
  "metadata": "ipfs://CID",
  "deposit": "10000000udt",
  "title": "Update AbstractAccount Params",
  "summary": "Update abstractaccount module parameters"
}
Update Actor (via Governance)
Update an actor address through a governance proposal:
d tx gov submit-proposal /path/to/proposal.json --from=<key>
Where proposal.json contains:
{
  "messages": [
    {
      "@type": "/d.abstractaccount.v1.MsgUpdateActor",
      "sender": "dchain10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn",
      "actor": "validator",
      "address": "dchain1..."
    }
  ],
  "metadata": "ipfs://CID",
  "deposit": "10000000udt",
  "title": "Update Validator Actor",
  "summary": "Update the validator actor address"
}
Update Authenticator (via Governance)
Update an authenticator address through a governance proposal:
d tx gov submit-proposal /path/to/proposal.json --from=<key>
Where proposal.json contains:
{
  "messages": [
    {
      "@type": "/d.abstractaccount.v1.MsgUpdateAuthenticator",
      "sender": "dchain10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn",
      "authenticator": "default",
      "address": "dchain1..."
    }
  ],
  "metadata": "ipfs://CID",
  "deposit": "10000000udt",
  "title": "Update Default Authenticator",
  "summary": "Update the default authenticator address"
}
Update Supported Proxies (via Governance)
Update the set of supported proxies through a governance proposal:
d tx gov submit-proposal /path/to/proposal.json --from=<key>
Where proposal.json contains:
{
  "messages": [
    {
      "@type": "/d.abstractaccount.v1.MsgUpdateSupportedProxies",
      "sender": "dchain10d07y265gmmuvt4z0w9aw880jnsr700j6zn9kn",
      "proxies": {
        "1": true,
        "2": true,
        "3": false
      }
    }
  ],
  "metadata": "ipfs://CID",
  "deposit": "10000000udt",
  "title": "Update Supported Proxies",
  "summary": "Add proxies 1 and 2, remove proxy 3"
}
gRPC
Query Service
The abstractaccount module provides a gRPC query service defined in d/abstractaccount/v1/query.proto.
Params
Get module parameters:
grpcurl -plaintext localhost:9090 d.abstractaccount.v1.Query/Params
Request:
message QueryParamsRequest {}
Response:
message QueryParamsResponse {
  Params params = 1;
}
ActorAddress
Get the address associated with an actor role:
grpcurl -plaintext -d '{"actor": "validator"}' \
  localhost:9090 d.abstractaccount.v1.Query/ActorAddress
Request:
message QueryActorAddressRequest {
  string actor = 1;
}
Response:
message QueryActorAddressResponse {
  string address = 1;
}
AuthenticatorAddress
Get the address associated with an authenticator role:
grpcurl -plaintext -d '{"authenticator": "default"}' \
  localhost:9090 d.abstractaccount.v1.Query/AuthenticatorAddress
Request:
message QueryAuthenticatorAddressRequest {
  string authenticator = 1;
}
Response:
message QueryAuthenticatorAddressResponse {
  string address = 1;
}
SupportedProxies
Get the list of supported proxy code IDs:
grpcurl -plaintext localhost:9090 d.abstractaccount.v1.Query/SupportedProxies
Request:
message QuerySupportedProxiesRequest {}
Response:
message QuerySupportedProxiesResponse {
  repeated uint64 proxies = 1;
}
REST
Query Endpoints
REST endpoints are available via the gRPC-gateway.
GET /d/abstractaccount/v1/params
Get the current abstractaccount module parameters.
Example:
curl http://localhost:1317/d/abstractaccount/v1/params
Response:
{
  "params": {
    // module parameters
  }
}
GET /d/abstractaccount/v1/actor/(actor)
Get the address associated with a specific actor role.
Example:
curl http://localhost:1317/d/abstractaccount/v1/actor/plugin
Response:
{
  "address": "dchain1..."
}
GET /d/abstractaccount/v1/authenticator/(authenticator)
Get the address associated with a specific authenticator role.
Example:
curl http://localhost:1317/d/abstractaccount/v1/authenticator/webauthn
Response:
{
  "address": "dchain1..."
}
GET /d/abstractaccount/v1/supported_proxies
Get the list of supported proxy code IDs.
Example:
curl http://localhost:1317/d/abstractaccount/v1/supported_proxies
Response:
{
  "proxies": [1, 2, 3]
}
Common Use Cases
1. Register a New Abstract Account
# First, check supported proxy code IDs
d q abstractaccount supported-proxies
# Register account with a supported proxy
d tx abstractaccount register-account 1 '{"owner":"dchain1..."}' \
  --from=alice \
  --salt="unique-salt-value"
2. Check Actor Configuration
# Query all actor addresses
d q abstractaccount actor validator
d q abstractaccount actor operator
3. Monitor Account Registrations
# Query recent account registration events
d q txs --events 'd.abstractaccount.v1.EventAccountRegistered.code_id=1'
4. Propose Adding New Proxy Support
# Create governance proposal to add new proxy code ID
d tx gov submit-proposal add-proxy-proposal.json --from=proposer