Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 74 additions & 10 deletions docs/modular-agent-addresses.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
# Modular Agent Addresses — Liquidity Vault Operator
# Modular Agent Addresses — the worked examples

A **Modular Agent Address (MAA)** is a non-custodial agent wallet: a token holder (the
*owner*) delegates a limited set of actions to an *agent* key, which can operate the wallet —
but provably **cannot move funds out**. The owner keeps full control and withdraws at any time,
paying the agent an agreed commission. This is TRUF.NETWORK's analogue of a Safe Module.

This document walks the first end-to-end example: a **Liquidity Vault Operator** — an LP funds
an agent that runs a trading bot on the order books.
This document walks the two end-to-end examples:

1. a **Liquidity Vault Operator** — an LP funds an agent that runs a trading bot on the order
books;
2. a **Data Provision Agent** — an AI agent creates indexes and provides regular data to them,
paying the network's write fees out of the wallet's escrow.

> Roles, in MAA terms:
> - **Restricted address (agent):** creates the rule; limited to the rule's allow-list; can
Expand All @@ -17,7 +21,9 @@ an agent that runs a trading bot on the order books.
> The two component keys sign their own transactions; the **MAA** is the wallet they operate.
> See the rule store (`048-maa.sql`) and the withdrawal/commission actions (`049-maa-funding.sql`).

## The canonical LP allow-list
## Example 1 — Liquidity Vault Operator

### The canonical LP allow-list

A liquidity-vault agent is allow-listed for exactly the four order-book trading actions, all in
the default (`main`) namespace:
Expand All @@ -31,16 +37,17 @@ the default (`main`) namespace:

These are the only powers the bot needs. Deliberately **excluded**:

- **`create_market`** — pays a market-creation fee via `transfer`, which the token boundary
blocks for a restricted agent; market provisioning is not a liquidity-maintenance task.
- **`create_market`** — market provisioning is not a liquidity-maintenance task; the market is
created by an ordinary account. (Its leader-paid creation fee would pass the token boundary's
write-fee carve-out, but the allow-list is the owner's choice of *job*, not of what's possible.)
- **`settle_market`** — settlement is permissionless and left to the network.
- **Any withdrawal / bridge primitive** — exits are never allow-listed; the owner withdraws
through the route-privileged `maa_withdraw` / `maa_bridge_out`, which the agent cannot reach.

Body-hash pinning (`body_hash`) is supported by the rule store but left unpinned in this
example.

## Why the agent can lock collateral but can't steal
### Why the agent can lock collateral but can't steal

Every order-book trade only ever moves the agent wallet's tokens through the erc20 **`lock`**
(escrow into the network vault) and **`unlock`** (refunds, fills, settlement) primitives. The
Expand All @@ -49,7 +56,14 @@ at any call depth, but leaves `lock` / `unlock` open — so allow-listed trading
every path that would move funds *out of the network* for the agent is closed. Placing an order
escrows collateral; it never sends tokens to an address the agent chooses.

## Lifecycle
There is exactly **one carve-out** in the boundary: a `transfer` whose recipient is the **block
leader's sender address** — the network's write-fee sink (`@leader_sender` in the fee-charging
actions). The recipient is consensus-determined, never a call parameter, so the agent still
cannot steer a single token to an address of its choosing; the worst a malicious agent can do
is spend the wallet's escrow on protocol fees, which is precisely the spending the owner funded
it for. The carve-out is what makes the Data Provision Agent below possible.

### Lifecycle

1. **Create the rule** — the agent signs `maa_create_rule(salt, 'bps', fee_bps, fee_flat,
namespaces, actions, body_hashes)` with the allow-list above, and gets a `rule_id`.
Expand All @@ -69,7 +83,7 @@ escrows collateral; it never sends tokens to an address the agent chooses.
**free** balance, so collateral in open orders must be unwound (`cancel_order`) first — after
which the LP can recover everything.

## Monitoring getter
### Monitoring getter

`get_order_events_by_wallet` (migration `050-order-book-event-queries.sql`) exposes the order
book's per-event history for any wallet address — the surface an owner uses to watch an agent
Expand All @@ -90,7 +104,7 @@ get_order_events_by_wallet(
`ask_changed`, `cancelled`, `direct_buy_fill`, `direct_sell_fill`, `mint_fill`, `burn_fill`,
`settled`.

## End-to-end test
### End-to-end test

`tests/streams/maa/lp_vault_test.go` drives the whole lifecycle against the real order book:

Expand All @@ -103,3 +117,53 @@ get_order_events_by_wallet(
- **`testLPVaultAgentCannotDrain`** — the agent can place allow-listed orders, but every attempt
to withdraw or bridge funds out is blocked at the token boundary; nothing moves and no
commission is skimmed.

## Example 2 — Data Provision Agent

An AI agent creates new indexes (streams) and provides regular data to them, running entirely
as its agent wallet. The owner fills the wallet with **TRUF** — the agent's working budget —
secure that the agent can spend it only on the network's write fees, never take it.

### The data-provision allow-list

| Namespace | Action | Purpose |
|-----------|------------------|---------------------------------------------------|
| `main` | `create_streams` | Create new indexes (owned by the agent wallet) |
| `main` | `insert_records` | Provide data to those indexes |

Both actions charge **caller-keyed** bridge fees — `create_streams` 100 TRUF per stream,
`insert_records` a flat 1 TRUF per transaction once the wallet is enrolled in
`system:fee_required` — so with `@caller` rewritten to the MAA they debit the **agent
wallet's own escrow**, with zero fee code specific to MAA. The fee `transfer` targets
`@leader_sender`, which is exactly the token boundary's write-fee carve-out; any other
`transfer` recipient remains blocked for the restricted agent.

The streams the agent creates belong to the **MAA**, not to the agent's own key: the agent
wallet is the data provider of record, so replacing the agent (a new rule + wallet) never
strands the data identity with a key the owner doesn't control.

### Lifecycle

1. **Create the rule** — the agent signs `maa_create_rule` with the two-action allow-list.
2. **Join** — the owner signs `maa_join(rule_id)` and gets the wallet address.
3. **Fill up** — the owner sends TRUF to the MAA address (a normal bridged-token transfer).
4. **Provide** — the agent submits `create_streams` / `insert_records` *as the MAA*; every fee
comes out of the wallet's TRUF escrow and lands with the block leader. An underfunded wallet
fails closed: the action reverts before any state is written.
5. **Monitor** — anyone can read the provided data back (`get_record`); the rule/audit getters
(`maa_get_instance`, `maa_get_events`, …) cover the wallet itself.
6. **Withdraw any time** — the owner signs `maa_withdraw($bridge, $amount)` against the TRUF
bridge and recovers the un-spent escrow, net of the agent's commission.

### End-to-end test

`tests/streams/maa/data_agent_test.go`:

- **`testDataAgentLifecycle`** — the agent creates an index and provides data as the MAA, the
100-TRUF and 1-TRUF fees coming out of the wallet's escrow and landing with the block leader;
the owner reads the data back and withdraws the rest, paying the commission.
- **`testDataAgentInsufficientEscrow`** — with less than the per-stream fee on the wallet, the
agent's `create_streams` reverts; no stream, no partial fee.
- **`testDataAgentCannotExfiltrate`** — the agent can do its fee-paying job, but withdrawing,
bridging out, and raw transfers to any non-leader recipient are all blocked at the token
boundary; nothing moves and no commission is skimmed.
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ require (
github.com/spf13/cobra v1.9.1
github.com/stretchr/testify v1.11.1
github.com/testcontainers/testcontainers-go v0.37.0
github.com/trufnetwork/kwil-db v0.10.3-0.20260605080707-350a1bb51469
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260605080707-350a1bb51469
github.com/trufnetwork/kwil-db v0.10.3-0.20260610105042-7d3dce4d34b4
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260610105042-7d3dce4d34b4
github.com/trufnetwork/sdk-go v0.6.4-0.20260224122406-a741343e2f37
go.uber.org/zap v1.27.0
golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa
Expand Down
78 changes: 4 additions & 74 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1240,80 +1240,10 @@ github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZ
github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY=
github.com/tklauser/numcpus v0.9.0 h1:lmyCHtANi8aRUgkckBgoDk1nHCux3n2cgkJLXdQGPDo=
github.com/tklauser/numcpus v0.9.0/go.mod h1:SN6Nq1O3VychhC1npsWostA+oW+VOQTxZrS604NSRyI=
github.com/trufnetwork/kwil-db v0.10.3-0.20260406143732-e25a390e62bb h1:VbAdBjAfxxj/yrxRaHNgzDylacoIPA7QQb/c8hHLldM=
github.com/trufnetwork/kwil-db v0.10.3-0.20260406143732-e25a390e62bb/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260413125950-e0bc3b09a211 h1:safm8TC6MOf2k6oXYboHt4axDXHStp6vs+C+eKOvnqo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260413125950-e0bc3b09a211/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260413192528-5fa840da03a8 h1:JF+y8fZkrtkGdT541pcIyvn8yYwD5tanPXEM3LpkAdM=
github.com/trufnetwork/kwil-db v0.10.3-0.20260413192528-5fa840da03a8/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260414063848-ca8fcd878e35 h1:BhcLm/iIgSyjvGGhnsccTjDqYpIV2j8QJRLRQPtM/Lk=
github.com/trufnetwork/kwil-db v0.10.3-0.20260414063848-ca8fcd878e35/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260414064815-f74d2ccc30ae h1:Vf3UnYJDgCptazYdkwbTVGZ8PM9Xtd8kXQKN8PlPREs=
github.com/trufnetwork/kwil-db v0.10.3-0.20260414064815-f74d2ccc30ae/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260414094734-bb696e25c46d h1:m5olARBYODr9yldv1wLZcKIaPcshTlKXC1td0vsz4Q0=
github.com/trufnetwork/kwil-db v0.10.3-0.20260414094734-bb696e25c46d/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260414100322-facad37b3eb2 h1:mC687oWOo0YLjYkVQsRr5W83xne2RojzaulsPjQB7uw=
github.com/trufnetwork/kwil-db v0.10.3-0.20260414100322-facad37b3eb2/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260414105203-b684b866ef30 h1:L2E1whVeekeZw92CBKlKOeqKZASUWg79XtrVtjQ/BYk=
github.com/trufnetwork/kwil-db v0.10.3-0.20260414105203-b684b866ef30/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260414113323-696cc38f53b8 h1:HuR9awZ/6r8YepSb8C5XRoSa7T++c5nr2jb9irxMTGU=
github.com/trufnetwork/kwil-db v0.10.3-0.20260414113323-696cc38f53b8/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260424141846-c520d3ebfffd h1:kkBMIocp4Ie7kHcdMArnwHRKUSIjdacRq+sV3jg6klY=
github.com/trufnetwork/kwil-db v0.10.3-0.20260424141846-c520d3ebfffd/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260424162927-ac1b5755e3b7 h1:odTjhGG7GlhyKqsSQtMdPsGqgY6YJTIwIyTu5IIxArg=
github.com/trufnetwork/kwil-db v0.10.3-0.20260424162927-ac1b5755e3b7/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260424174214-23b4652cc326 h1:B6l9wp6RDT6QQoejLN8fVXNW/lt0h0Qdbqc0KJsjOrI=
github.com/trufnetwork/kwil-db v0.10.3-0.20260424174214-23b4652cc326/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260425015148-65dd9427650c h1:m6xLA3GV7BbNRxMTVlcdSIdFnIG6Z/6pdv3VeXoGhwU=
github.com/trufnetwork/kwil-db v0.10.3-0.20260425015148-65dd9427650c/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260425032526-01958405eb8f h1:ebwnykLqpEYG6CQlnrNyMCCbYcrsV8RxW1y6nGTjWAE=
github.com/trufnetwork/kwil-db v0.10.3-0.20260425032526-01958405eb8f/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260425051255-2adc7ffbb5c8 h1:QU7TBID+UlwjOjIC0AsQmUYOE/68B83nHsW68Prz46Y=
github.com/trufnetwork/kwil-db v0.10.3-0.20260425051255-2adc7ffbb5c8/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260425175323-4e873ca0a470 h1:zk1TItTGbyC2AOE4zBn+WzHs6hPo6ORokM7dnZaxfgk=
github.com/trufnetwork/kwil-db v0.10.3-0.20260425175323-4e873ca0a470/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260427035100-12ed615d43cb h1:i+iaJUY8J+mLDr5+xkH7Ju+3d7ZADgwiK7+z7LsIC4o=
github.com/trufnetwork/kwil-db v0.10.3-0.20260427035100-12ed615d43cb/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260502065007-81722689e25b h1:fkoEUDIFm3Amq58r5rAzT2g8E5tM+qw0lC41ZGSFpoc=
github.com/trufnetwork/kwil-db v0.10.3-0.20260502065007-81722689e25b/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260504105445-236471e6a1fe h1:hEW7eFTX3gS+WzhdQrh6xR/Zzzub25Zy/kdkosAljFQ=
github.com/trufnetwork/kwil-db v0.10.3-0.20260504105445-236471e6a1fe/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db v0.10.3-0.20260605080707-350a1bb51469 h1:1yHa+gMACjnKSk1GO2Szy8kCgPkqGu4zF9ZdOK3Dbl8=
github.com/trufnetwork/kwil-db v0.10.3-0.20260605080707-350a1bb51469/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260406143732-e25a390e62bb h1:tghQHOXYDHwjBmhEVAQESPTvf3O9Oq/1qzow5aKE81c=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260406143732-e25a390e62bb/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260413125950-e0bc3b09a211 h1:h5HpwEqbPDEo4uGYz7ZUTfQ9tJBKyHaCmtwk2boB7Xs=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260413125950-e0bc3b09a211/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260413192528-5fa840da03a8 h1:InMod3EA4MBbFmgvyduItKXktoRmuSpHuHg973KnCJg=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260413192528-5fa840da03a8/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260414064815-f74d2ccc30ae h1:MQfmv8ApXqhiqwMyki+GAzraMiWqigH4nJVgoECJTeg=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260414064815-f74d2ccc30ae/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260414094734-bb696e25c46d h1:ACToMi9+ksuGBSDe2/GTT7iDhh0Cd7AANfn/lQBFJgI=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260414094734-bb696e25c46d/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260414100322-facad37b3eb2 h1:ADKw8OTz6+/1vZMujY8g8bkZ57ARkgn8wMp9mAXAFhA=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260414100322-facad37b3eb2/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260414105203-b684b866ef30 h1:9vaEXG8LRi0WVij3WvULGEsKquPZnV+XKOH3ASnjFnA=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260414105203-b684b866ef30/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260414113323-696cc38f53b8 h1:fzkcURTH5LlSQpKbm5CezXNmJg8SMltcfYhblHY+HZA=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260414113323-696cc38f53b8/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260424162927-ac1b5755e3b7 h1:uxyGGG2nkL6J0aSvY+rEEvijVQjzCU5US68h72OgTn0=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260424162927-ac1b5755e3b7/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260424174214-23b4652cc326 h1:85U4+Hen5S8jg/1n9WmPtqb5F+HVsNia3jev8TWePLE=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260424174214-23b4652cc326/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260425015148-65dd9427650c h1:JbIhZag6hhctTvcgyedf8gHXk56d6z2LSYh1/uNa5WU=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260425015148-65dd9427650c/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260425032526-01958405eb8f h1:sUXarAL3agU5APqin8hrA4uwgQxfjKP3v5pvrzBcOaU=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260425032526-01958405eb8f/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260425051255-2adc7ffbb5c8 h1:7m3S++3CqQlNBvUiRr9rHuTtUSRyjcyTFrhOhu56d/0=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260425051255-2adc7ffbb5c8/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260427035100-12ed615d43cb h1:aOXkiXQEjEFvIcYp175aOO7OFDHZBYuFtX6K/xEbeqg=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260427035100-12ed615d43cb/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260502065007-81722689e25b h1:bpX85oQ8F/chXJeXu2hCiXrO22gAN7pHjWaO+l2r9+c=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260502065007-81722689e25b/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260504105445-236471e6a1fe h1:0wvs4osJSaf+gm7yzSAzMHo+VL7KPRkyvHec8hglzkg=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260504105445-236471e6a1fe/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260605080707-350a1bb51469 h1:FXAeaGYdVrW/K6qpRDLtQaIlMkeH0ADUsMVKg5GrJ1o=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260605080707-350a1bb51469/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/kwil-db v0.10.3-0.20260610105042-7d3dce4d34b4 h1:paJ0TeAcnyaw6C2vhmNi+w/Bacx4G4j5IR8i7VbImFQ=
github.com/trufnetwork/kwil-db v0.10.3-0.20260610105042-7d3dce4d34b4/go.mod h1:LiBAC48uZl2B0IiLtD2hpOce7RNfpuDdghVAOc3u1Qo=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260610105042-7d3dce4d34b4 h1:TIQQDEBSH6g2yXRGnKTNEbmKIxfkLd7dSjNPwHQfHmU=
github.com/trufnetwork/kwil-db/core v0.4.3-0.20260610105042-7d3dce4d34b4/go.mod h1:HnOsh9+BN13LJCjiH0+XKaJzyjWKf+H9AofFFp90KwQ=
github.com/trufnetwork/openzeppelin-merkle-tree-go v0.0.2 h1:DCq8MzbWH0wZmICNmMVsSzUHUPl+2vqRhluEABjxl88=
github.com/trufnetwork/openzeppelin-merkle-tree-go v0.0.2/go.mod h1:Y0MJpPp9QXU5vC6Gpoilql2NkgmGNcbHm9HYC2v2N8s=
github.com/trufnetwork/sdk-go v0.6.4-0.20260224122406-a741343e2f37 h1:VD/GWxLTshaXpLukEc1SXbG7QA9HrFzF8JvxJAJ/x7Q=
Expand Down
Loading
Loading