From 73caec55dfa6d4cc4c00be2ba2545dee0e2195b9 Mon Sep 17 00:00:00 2001 From: JA VI <127710324+JaDi03@users.noreply.github.com> Date: Wed, 14 Oct 2026 02:05:55 -0600 Subject: [PATCH] feat: the agent moves the owner's USDC on Base and Ethereum Sepolia into Gateway within the owner's limits --- agent/prompt.py | 4 +- agent/tools/definitions.py | 12 +- agent/tools/toolbox.py | 35 ++++ agent/wiring.py | 6 +- contracts/script/DeployFunding.s.sol | 31 ++++ contracts/src/ShopFunding.sol | 140 ++++++++++++++ contracts/src/ShopFundingFactory.sol | 54 ++++++ contracts/test/GatewayFork.t.sol | 47 +++++ contracts/test/ShopFunding.t.sol | 175 ++++++++++++++++++ dashboard/abi.js | 12 ++ dashboard/app.js | 34 ++++ dashboard/config.js | 7 + dashboard/index.html | 7 + dashboard/test/unified.test.mjs | 35 ++++ dashboard/unified.js | 87 ++++++++- docs/architecture.md | 4 +- docs/assets/connect_erpnext/api_access.png | Bin 0 -> 38657 bytes .../connect_erpnext/create_contract.png | Bin 0 -> 39001 bytes docs/assets/connect_erpnext/own_user.png | Bin 0 -> 53897 bytes docs/assets/connect_erpnext/roles.png | Bin 0 -> 54453 bytes docs/connect.md | 15 +- docs/contracts.md | 22 +++ services/circle/client.py | 10 + services/shops/activity.py | 6 +- services/shops/agent.py | 8 +- services/unified_balance/client.py | 14 ++ services/unified_balance/funding.py | 118 ++++++++++++ services/unified_balance/kit/unified.mjs | 10 +- services/unified_balance/owner.py | 16 ++ tests/test_unified_balance.py | 77 +++++++- 30 files changed, 970 insertions(+), 16 deletions(-) create mode 100644 contracts/script/DeployFunding.s.sol create mode 100644 contracts/src/ShopFunding.sol create mode 100644 contracts/src/ShopFundingFactory.sol create mode 100644 contracts/test/GatewayFork.t.sol create mode 100644 contracts/test/ShopFunding.t.sol create mode 100644 docs/assets/connect_erpnext/api_access.png create mode 100644 docs/assets/connect_erpnext/create_contract.png create mode 100644 docs/assets/connect_erpnext/own_user.png create mode 100644 docs/assets/connect_erpnext/roles.png create mode 100644 services/unified_balance/funding.py diff --git a/agent/prompt.py b/agent/prompt.py index 2787347..b5a323c 100644 --- a/agent/prompt.py +++ b/agent/prompt.py @@ -49,7 +49,9 @@ options and your recommendation. When the owner's wallet on Arc holds less than what you would pay, cash_position shows the USDC they keep on other chains: you may bring what is needed to their wallet with bring_funds, choosing which chains it comes from (estimate_bring_funds shows -the fees), and then pay. +the fees), and then pay. USDC still in their own wallets there goes into their Unified Balance +first with deposit_to_gateway; it can be spent only once that chain is final, so move it ahead +of the due date and set an alarm to bring it. Talking to the owner. One message, one topic: only what it is about, in one or two short sentences, plain words. After a payment say what you paid (amount, supplier, invoice) and diff --git a/agent/tools/definitions.py b/agent/tools/definitions.py index fbca993..0a91c33 100644 --- a/agent/tools/definitions.py +++ b/agent/tools/definitions.py @@ -57,7 +57,8 @@ def _text(description: str) -> dict[str, Any]: _tool("cash_position", "The shop contract's limits, how much it still lets the shop pay this week, what you " "chose to pay now in this session, the payments scheduled or due soon, and the USDC " - "the owner keeps on other chains (their Unified Balance) with where you may spend it."), + "the owner keeps on other chains: in their Unified Balance (with where you may spend " + "it) and in their own wallets (with how much you may deposit into it)."), _tool("pay_now", "Pay this invoice now, for real: the payment goes out right away from the owner's " "wallet through the shop contract (simulated first, then sent with your Circle " @@ -74,6 +75,15 @@ def _text(description: str) -> dict[str, Any]: _tool("agent_wallet", "Your own wallet: its address, its balance for Arc network fees (paid in USDC), " "whether the shop contract has it as its agent, and whether the contract is paused."), + _tool("deposit_to_gateway", + "Move the owner's USDC from their own wallet on another chain into their Unified " + "Balance (Circle Gateway), for real, through the owner's funding contract there: it " + "only ever deposits for the owner, within the limits the owner set. cash_position " + "says how much you may move on each chain. On Base Sepolia and Ethereum Sepolia the " + "deposit is spendable only once the chain is final (15 minutes or more): set an " + "alarm, then bring_funds. Returns the transaction, or the real error.", + chain=_text("The chain as cash_position lists it, e.g. Base_Sepolia."), + amount=_text("USDC to move, e.g. 120 or 30.5."), reason=REASON), _tool("estimate_bring_funds", "What it would cost to bring USDC from the owner's Unified Balance on other chains to " "the owner's wallet on Arc, with the split you give: the fees and what would arrive. " diff --git a/agent/tools/toolbox.py b/agent/tools/toolbox.py index 67f3c76..8c6f3f0 100644 --- a/agent/tools/toolbox.py +++ b/agent/tools/toolbox.py @@ -221,8 +221,23 @@ def _cash_position(self) -> dict[str, Any]: "today": self.today.isoformat(), **(self._funds_once() or UNKNOWN_FUNDS), "usdc_on_other_chains": self._other_chains(), + "usdc_in_owner_wallets_on_other_chains": self._owner_wallets(), } + def _owner_wallets(self) -> list[dict[str, str]] | str: + """The owner's own wallets on other chains, and how much the agent may deposit.""" + if self.owner_funds is None: + return "not connected for this shop" + try: + wallets = self.owner_funds.in_wallets() + except (ChainError, CircleError, PaymentSetupError, UnifiedBalanceError) as error: + return f"unknown: {error}" + rows = [{"chain": w.chain, "in_wallet": fmt(w.in_wallet), + "you_may_deposit_now": fmt(w.can_move) if w.funding + else "no: the owner sets up this chain in the dashboard"} + for w in wallets] + return rows or "no other chain is set up" + def _other_chains(self) -> list[dict[str, str]] | str: """The owner's Unified Balance, chain by chain, and where the agent may spend it.""" if self.owner_funds is None: @@ -291,6 +306,26 @@ def _agent_wallet(self) -> dict[str, Any]: except (ChainError, CircleError) as error: raise ToolError(f"could not read the agent's wallet: {error}") from None + def _deposit_to_gateway(self, chain: str, amount: str, reason: str) -> dict[str, Any]: + if self.owner_funds is None: + raise ToolError("the owner's wallets on other chains are not connected") + value = _decimal(amount) + if value is None or value <= 0: + raise ToolError("amount is USDC above 0, e.g. 120 or 30.5") + if not self.can_pay: + raise ToolError("payments are paused by the owner; nothing was moved") + if len(self.funds_moved) >= MAX_FUND_MOVES: + raise ToolError(f"at most {MAX_FUND_MOVES} fund moves per session; look again later") + try: + done = self.owner_funds.deposit(chain.strip(), value) + except (ChainError, CircleError, PaymentSetupError, UnifiedBalanceError, + ValueError) as error: + raise ToolError(f"nothing was deposited: {error}") from None + moved = {"kind": "deposit", "chain": chain.strip(), "amount": fmt(value), + "state": done["state"], "tx": done["tx"], "reason": reason.strip()} + self.funds_moved.append(moved) + return moved + def _estimate_bring_funds(self, allocations: str) -> dict[str, Any]: split = self._allocations(allocations) try: diff --git a/agent/wiring.py b/agent/wiring.py index 6daacec..a18e88f 100644 --- a/agent/wiring.py +++ b/agent/wiring.py @@ -3,6 +3,7 @@ from collections.abc import Callable from datetime import timezone from decimal import Decimal +from functools import cache from agent.agent import CHAT_EFFORT, ClaudeBrain from agent.guardrails.controls.base import fmt @@ -11,6 +12,7 @@ from services.payments.encoding import USDC_DECIMALS from services.settings import Settings from services.unified_balance import OwnerFunds, UnifiedBalance +from services.unified_balance.funding import OwnerWallets def room_of(payer: Payer | None) -> Callable[[], Decimal | None] | None: @@ -56,7 +58,9 @@ def owner_funds_of(settings: Settings, payer: Payer | None) -> OwnerFunds | None """The owner's Unified Balance on other chains, when the agent pays with its Circle wallet.""" if payer is None or not (settings.circle_api_key and settings.circle_entity_secret): return None - return OwnerFunds(UnifiedBalance(settings.circle_api_key, settings.circle_entity_secret), payer) + kit = UnifiedBalance(settings.circle_api_key, settings.circle_entity_secret) + facts = cache(kit.chains) # one Node run for the chains' facts, then reused + return OwnerFunds(kit, payer, OwnerWallets(payer.circle, facts)) def brain_setup( diff --git a/contracts/script/DeployFunding.s.sol b/contracts/script/DeployFunding.s.sol new file mode 100644 index 0000000..81bcf23 --- /dev/null +++ b/contracts/script/DeployFunding.s.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {Script, console} from "forge-std/Script.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {IGatewayDeposits} from "../src/ShopFunding.sol"; +import {ShopFundingFactory} from "../src/ShopFundingFactory.sol"; + +/// @notice Deploys the funding factory on a source chain of the owner's Unified Balance. Owners +/// then create their own ShopFunding from their wallets; the deployer controls nothing. +/// USDC and Circle's GatewayWallet addresses come from Circle's Unified Balance Kit. +/// +/// forge script script/DeployFunding.s.sol --rpc-url https://sepolia.base.org \ +/// --broadcast --account +contract DeployFunding is Script { + address constant GATEWAY_WALLET_TESTNET = 0x0077777d7EBA4688BDeF3E311b846F25870A19B9; + + function usdcFor(uint256 chainId) internal pure returns (address) { + if (chainId == 84532) return 0x036CbD53842c5426634e7929541eC2318f3dCF7e; // Base Sepolia + if (chainId == 11155111) return 0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238; // Ethereum Sepolia + revert("no USDC known for this chain"); + } + + function run() external returns (ShopFundingFactory factory) { + address usdc = usdcFor(block.chainid); + vm.startBroadcast(); + factory = new ShopFundingFactory(IERC20(usdc), IGatewayDeposits(GATEWAY_WALLET_TESTNET)); + vm.stopBroadcast(); + console.log("ShopFundingFactory:", address(factory)); + } +} diff --git a/contracts/src/ShopFunding.sol b/contracts/src/ShopFunding.sol new file mode 100644 index 0000000..9ad90cc --- /dev/null +++ b/contracts/src/ShopFunding.sol @@ -0,0 +1,140 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol"; +import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; + +/// @dev The deposit entry of Circle Gateway's GatewayWallet (circlefin/evm-gateway-contracts, +/// src/modules/wallet/Deposits.sol): takes `value` of `token` from the caller and credits it +/// to `depositor`'s Gateway balance. +interface IGatewayDeposits { + function depositFor(address token, address depositor, uint256 value) external; +} + +/// @title ShopFunding +/// @notice Lets a payables agent move the shop owner's USDC on this chain into the owner's own +/// Circle Gateway balance, within limits only the owner can change. From there the agent, +/// as the owner's delegate, brings it to the owner's wallet on Arc to pay invoices. +/// @dev The money never stays here: one call takes it from the owner's wallet (the owner +/// approves this contract, and revoking that approval stops it) and deposits it for the +/// owner in the same transaction. There is no other destination. The agent is held to a +/// per-move and a weekly cap; the owner is not. Ownership is fixed. +contract ShopFunding is Ownable, Pausable, ReentrancyGuard { + using SafeERC20 for IERC20; + + IERC20 public immutable usdc; + IGatewayDeposits public immutable gateway; + uint256 public immutable startedAt; + + address public agent; + uint256 public maxPerMove; + uint256 public weeklyCap; + + mapping(uint256 week => uint256 amount) public agentMovedInWeek; + + event Funded(uint256 amount, address indexed by); + event LimitsChanged(uint256 maxPerMove, uint256 weeklyCap); + event AgentChanged(address indexed agent); + + error NotAuthorized(); + error OverMoveLimit(uint256 amount, uint256 maxPerMove); + error OverWeeklyCap(uint256 amount, uint256 remaining); + error InvalidLimits(); + error InvalidAddress(); + error InvalidAmount(); + error OwnershipFixed(); + + constructor( + IERC20 usdc_, + IGatewayDeposits gateway_, + address owner_, + address agent_, + uint256 maxPerMove_, + uint256 weeklyCap_ + ) Ownable(owner_) { + if (address(usdc_) == address(0) || address(gateway_) == address(0)) { + revert InvalidAddress(); + } + usdc = usdc_; + gateway = gateway_; + startedAt = block.timestamp; + _setAgent(agent_); + _setLimits(maxPerMove_, weeklyCap_); + } + + /// @notice Move `amount` of the owner's USDC into the owner's Gateway balance. + function fund(uint256 amount) external nonReentrant { + if (amount == 0) revert InvalidAmount(); + if (msg.sender == agent) { + _checkAgentMove(amount); + } else if (msg.sender != owner()) { + revert NotAuthorized(); + } + address owner_ = owner(); + emit Funded(amount, msg.sender); + usdc.safeTransferFrom(owner_, address(this), amount); + usdc.forceApprove(address(gateway), amount); + gateway.depositFor(address(usdc), owner_, amount); + } + + /// @notice Stop the agent. The owner or the agent itself can pull this brake. + function pause() external { + if (msg.sender != owner() && msg.sender != agent) revert NotAuthorized(); + if (!paused()) _pause(); + } + + /// @notice Only the owner can let the agent move funds again. + function unpause() external onlyOwner { + _unpause(); + } + + function setLimits(uint256 maxPerMove_, uint256 weeklyCap_) external onlyOwner { + _setLimits(maxPerMove_, weeklyCap_); + } + + function setAgent(address agent_) external onlyOwner { + _setAgent(agent_); + } + + function currentWeek() public view returns (uint256) { + return (block.timestamp - startedAt) / 1 weeks; + } + + /// @notice How much the agent may still move this week. + function remainingThisWeek() public view returns (uint256) { + uint256 moved = agentMovedInWeek[currentWeek()]; + return moved >= weeklyCap ? 0 : weeklyCap - moved; + } + + function transferOwnership(address) public view override onlyOwner { + revert OwnershipFixed(); + } + + function renounceOwnership() public view override onlyOwner { + revert OwnershipFixed(); + } + + function _checkAgentMove(uint256 amount) private { + _requireNotPaused(); + if (amount > maxPerMove) revert OverMoveLimit(amount, maxPerMove); + uint256 remaining = remainingThisWeek(); + if (amount > remaining) revert OverWeeklyCap(amount, remaining); + agentMovedInWeek[currentWeek()] += amount; + } + + function _setLimits(uint256 maxPerMove_, uint256 weeklyCap_) private { + if (maxPerMove_ == 0 || maxPerMove_ > weeklyCap_) revert InvalidLimits(); + maxPerMove = maxPerMove_; + weeklyCap = weeklyCap_; + emit LimitsChanged(maxPerMove_, weeklyCap_); + } + + function _setAgent(address agent_) private { + if (agent_ == owner()) revert InvalidAddress(); + agent = agent_; + emit AgentChanged(agent_); + } +} diff --git a/contracts/src/ShopFundingFactory.sol b/contracts/src/ShopFundingFactory.sol new file mode 100644 index 0000000..ff4f43f --- /dev/null +++ b/contracts/src/ShopFundingFactory.sol @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {Create2} from "@openzeppelin/contracts/utils/Create2.sol"; +import {IGatewayDeposits, ShopFunding} from "./ShopFunding.sol"; + +/// @title ShopFundingFactory +/// @notice Each shop owner creates their own ShopFunding on this chain, with their own wallet. +/// The caller becomes the owner; the factory keeps no control over what it creates and +/// only lists them so the agent and the dashboard can find them. Each one is created +/// with CREATE2 under the owner's address, so its address is known before it exists: +/// the dashboard can create it and approve it in one batch the owner confirms once. +contract ShopFundingFactory { + IERC20 public immutable usdc; + IGatewayDeposits public immutable gateway; + + mapping(address owner => address[] fundings) private _fundingsOf; + + event FundingCreated( + address indexed owner, address indexed funding, address agent, uint256 maxPerMove, uint256 weeklyCap + ); + + constructor(IERC20 usdc_, IGatewayDeposits gateway_) { + usdc = usdc_; + gateway = gateway_; + } + + function create(address agent, uint256 maxPerMove, uint256 weeklyCap) external returns (ShopFunding funding) { + funding = new ShopFunding{salt: _salt(msg.sender)}(usdc, gateway, msg.sender, agent, maxPerMove, weeklyCap); + _fundingsOf[msg.sender].push(address(funding)); + emit FundingCreated(msg.sender, address(funding), agent, maxPerMove, weeklyCap); + } + + function fundingsOf(address owner) external view returns (address[] memory) { + return _fundingsOf[owner]; + } + + /// @notice The address `create` gives the owner's ShopFunding with these settings. + function predict(address owner, address agent, uint256 maxPerMove, uint256 weeklyCap) + external + view + returns (address) + { + bytes memory init = abi.encodePacked( + type(ShopFunding).creationCode, abi.encode(usdc, gateway, owner, agent, maxPerMove, weeklyCap) + ); + return Create2.computeAddress(_salt(owner), keccak256(init)); + } + + function _salt(address owner) private pure returns (bytes32) { + return bytes32(uint256(uint160(owner))); + } +} diff --git a/contracts/test/GatewayFork.t.sol b/contracts/test/GatewayFork.t.sol new file mode 100644 index 0000000..385058f --- /dev/null +++ b/contracts/test/GatewayFork.t.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {Test} from "forge-std/Test.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {IGatewayDeposits, ShopFunding} from "../src/ShopFunding.sol"; +import {ShopFundingFactory} from "../src/ShopFundingFactory.sol"; + +/// @dev The balance view of Circle's GatewayWallet (src/modules/wallet/Balances.sol). +interface IGatewayBalances { + function availableBalance(address token, address depositor) external view returns (uint256); +} + +/// @notice Runs against a fork of Base Sepolia with Circle's real GatewayWallet and USDC (addresses +/// from Circle's Unified Balance Kit). Skipped unless BASE_SEPOLIA_RPC_URL is set. +contract GatewayForkTest is Test { + IERC20 constant USDC = IERC20(0x036CbD53842c5426634e7929541eC2318f3dCF7e); + address constant GATEWAY_WALLET = 0x0077777d7EBA4688BDeF3E311b846F25870A19B9; + + address owner = makeAddr("fork-owner"); + address agent = makeAddr("fork-agent"); + + function test_the_agent_deposits_the_owner_usdc_into_the_owner_gateway_balance() public { + string memory rpc = vm.envOr("BASE_SEPOLIA_RPC_URL", string("")); + if (bytes(rpc).length == 0) { + vm.skip(true); + } + vm.createSelectFork(rpc); + vm.prank(GATEWAY_WALLET); // it holds every deposit: a source of test USDC for the owner + assertTrue(USDC.transfer(owner, 100e6)); + + ShopFundingFactory factory = new ShopFundingFactory(USDC, IGatewayDeposits(GATEWAY_WALLET)); + vm.startPrank(owner); + ShopFunding funding = factory.create(agent, 50e6, 80e6); + USDC.approve(address(funding), 100e6); + vm.stopPrank(); + + uint256 before = IGatewayBalances(GATEWAY_WALLET).availableBalance(address(USDC), owner); + vm.prank(agent); + funding.fund(40_250_000); + + assertEq(IGatewayBalances(GATEWAY_WALLET).availableBalance(address(USDC), owner), before + 40_250_000); + assertEq(IGatewayBalances(GATEWAY_WALLET).availableBalance(address(USDC), agent), 0); + assertEq(USDC.balanceOf(owner), 100e6 - 40_250_000); + assertEq(USDC.balanceOf(address(funding)), 0); + } +} diff --git a/contracts/test/ShopFunding.t.sol b/contracts/test/ShopFunding.t.sol new file mode 100644 index 0000000..41cc2e8 --- /dev/null +++ b/contracts/test/ShopFunding.t.sol @@ -0,0 +1,175 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {Test} from "forge-std/Test.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol"; +import {IGatewayDeposits, ShopFunding} from "../src/ShopFunding.sol"; +import {ShopFundingFactory} from "../src/ShopFundingFactory.sol"; +import {MockUSDC} from "./MockUSDC.sol"; + +/// @dev Stands in for Circle's GatewayWallet: takes the tokens from the caller and credits the +/// depositor, as depositFor does. +contract MockGateway is IGatewayDeposits { + mapping(address depositor => uint256 amount) public credited; + + function depositFor(address token, address depositor, uint256 value) external { + MockUSDC(token).transferFrom(msg.sender, address(this), value); + credited[depositor] += value; + } +} + +contract ShopFundingTest is Test { + uint256 constant USDC = 1e6; + uint256 constant MAX_PER_MOVE = 200 * USDC; + uint256 constant WEEKLY_CAP = 500 * USDC; + + MockUSDC usdc; + MockGateway gateway; + ShopFundingFactory factory; + ShopFunding funding; + + address owner = makeAddr("owner"); + address agent = makeAddr("agent"); + address stranger = makeAddr("stranger"); + + function setUp() public { + usdc = new MockUSDC(); + gateway = new MockGateway(); + factory = new ShopFundingFactory(IERC20(address(usdc)), gateway); + vm.prank(owner); + funding = factory.create(agent, MAX_PER_MOVE, WEEKLY_CAP); + usdc.mint(owner, 10_000 * USDC); + vm.prank(owner); + usdc.approve(address(funding), 5_000 * USDC); + } + + function agentFunds(uint256 amount) internal { + vm.prank(agent); + funding.fund(amount); + } + + function test_the_caller_of_the_factory_owns_its_funding() public view { + assertEq(funding.owner(), owner); + assertEq(funding.agent(), agent); + assertEq(factory.fundingsOf(owner)[0], address(funding)); + } + + function test_its_address_is_known_before_it_is_created() public { + address next = factory.predict(stranger, agent, MAX_PER_MOVE, WEEKLY_CAP); + assertEq(next.code.length, 0); + vm.prank(stranger); + ShopFunding created = factory.create(agent, MAX_PER_MOVE, WEEKLY_CAP); + assertEq(address(created), next); + assertEq(created.owner(), stranger); + assertEq(factory.predict(owner, agent, MAX_PER_MOVE, WEEKLY_CAP), address(funding)); + } + + function test_the_same_owner_and_settings_cannot_create_twice() public { + vm.prank(owner); + vm.expectRevert(); + factory.create(agent, MAX_PER_MOVE, WEEKLY_CAP); + } + + function test_the_agent_moves_the_owner_usdc_into_the_owner_gateway_balance() public { + vm.expectEmit(address(funding)); + emit ShopFunding.Funded(150 * USDC, agent); + agentFunds(150 * USDC); + assertEq(gateway.credited(owner), 150 * USDC); + assertEq(gateway.credited(agent), 0); + assertEq(usdc.balanceOf(owner), 9_850 * USDC); + assertEq(usdc.balanceOf(address(funding)), 0); + assertEq(funding.remainingThisWeek(), 350 * USDC); + } + + function test_the_agent_is_held_to_the_per_move_limit() public { + vm.prank(agent); + vm.expectRevert(abi.encodeWithSelector(ShopFunding.OverMoveLimit.selector, 201 * USDC, MAX_PER_MOVE)); + funding.fund(201 * USDC); + } + + function test_the_agent_is_held_to_the_weekly_cap_until_the_week_renews() public { + agentFunds(200 * USDC); + agentFunds(200 * USDC); + vm.prank(agent); + vm.expectRevert(abi.encodeWithSelector(ShopFunding.OverWeeklyCap.selector, 150 * USDC, 100 * USDC)); + funding.fund(150 * USDC); + vm.warp(block.timestamp + 1 weeks); + agentFunds(150 * USDC); + assertEq(gateway.credited(owner), 550 * USDC); + } + + function test_the_owner_is_not_held_to_the_limits() public { + vm.prank(owner); + funding.fund(900 * USDC); + assertEq(gateway.credited(owner), 900 * USDC); + assertEq(funding.remainingThisWeek(), WEEKLY_CAP); + } + + function test_nobody_else_can_move_the_owner_funds() public { + vm.prank(stranger); + vm.expectRevert(ShopFunding.NotAuthorized.selector); + funding.fund(1 * USDC); + } + + function test_revoking_the_approval_stops_the_agent() public { + vm.prank(owner); + usdc.approve(address(funding), 0); + vm.prank(agent); + vm.expectRevert(); + funding.fund(1 * USDC); + } + + function test_a_pause_stops_the_agent_and_only_the_owner_resumes() public { + vm.prank(agent); + funding.pause(); + vm.prank(agent); + vm.expectRevert(Pausable.EnforcedPause.selector); + funding.fund(1 * USDC); + vm.prank(agent); + vm.expectRevert(abi.encodeWithSelector(Ownable.OwnableUnauthorizedAccount.selector, agent)); + funding.unpause(); + vm.prank(owner); + funding.unpause(); + agentFunds(1 * USDC); + } + + function test_only_the_owner_changes_limits_and_agent() public { + vm.prank(agent); + vm.expectRevert(abi.encodeWithSelector(Ownable.OwnableUnauthorizedAccount.selector, agent)); + funding.setLimits(1_000 * USDC, 2_000 * USDC); + vm.startPrank(owner); + funding.setLimits(50 * USDC, 100 * USDC); + funding.setAgent(stranger); + vm.stopPrank(); + vm.prank(agent); + vm.expectRevert(ShopFunding.NotAuthorized.selector); + funding.fund(1 * USDC); + } + + function test_ownership_is_fixed() public { + vm.prank(owner); + vm.expectRevert(ShopFunding.OwnershipFixed.selector); + funding.transferOwnership(stranger); + } + + function test_zero_and_bad_limits_are_refused() public { + vm.prank(agent); + vm.expectRevert(ShopFunding.InvalidAmount.selector); + funding.fund(0); + vm.prank(owner); + vm.expectRevert(ShopFunding.InvalidLimits.selector); + funding.setLimits(600 * USDC, 500 * USDC); + } + + function testFuzz_the_agent_never_moves_more_than_the_week_allows(uint256 a, uint256 b) public { + a = bound(a, 1, MAX_PER_MOVE); + b = bound(b, 1, MAX_PER_MOVE); + agentFunds(a); + vm.prank(agent); + if (a + b > WEEKLY_CAP) vm.expectRevert(); + funding.fund(b); + assertLe(gateway.credited(owner), WEEKLY_CAP); + } +} diff --git a/dashboard/abi.js b/dashboard/abi.js index 38231ca..fcc5786 100644 --- a/dashboard/abi.js +++ b/dashboard/abi.js @@ -41,6 +41,18 @@ export const SHOP_ABI = [ "error ReentrancyGuardReentrantCall()", ]; +// contracts/src/ShopFundingFactory.sol: one ShopFunding per owner on each source chain. +export const FUNDING_FACTORY_ABI = [ + "function create(address agent, uint256 maxPerMove, uint256 weeklyCap) returns (address)", + "function fundingsOf(address owner) view returns (address[])", + "function predict(address owner, address agent, uint256 maxPerMove, uint256 weeklyCap) view returns (address)", + "error InvalidLimits()", + "error InvalidAddress()", +]; + +// Circle Gateway's GatewayWallet (circlefin/evm-gateway-contracts, modules/wallet/Delegation.sol). +export const GATEWAY_WALLET_ABI = ["function addDelegate(address token, address delegate)"]; + export const USDC_ABI = [ "function balanceOf(address) view returns (uint256)", "function allowance(address owner, address spender) view returns (uint256)", diff --git a/dashboard/app.js b/dashboard/app.js index 495beba..4fe4222 100644 --- a/dashboard/app.js +++ b/dashboard/app.js @@ -206,6 +206,19 @@ function renderUnified(isOwner, service) { select.replaceChildren(...view.rows.map((r) => new Option(r.name, r.chain))); if (view.rows.some((r) => r.chain === picked)) select.value = picked; $("unified-form").hidden = !isOwner || view.rows.length === 0; + const wallets = unified.walletsView(service?.last_run); + $("funding-wallets").replaceChildren( + ...wallets.map((w) => { + const item = document.createElement("li"); + item.textContent = w.setUp + ? `${w.name}: ${formatUsdc(w.inWallet)} USDC in your wallet · the agent may move ${formatUsdc(w.agentMayMove)} now` + : `${w.name}: ${formatUsdc(w.inWallet)} USDC in your wallet · not set up for the agent`; + return item; + }), + ); + const chains = unified.fundingChains(); + $("funding-chain").replaceChildren(...chains.map((c) => new Option(c.replaceAll("_", " "), c))); + $("funding-form").hidden = !isOwner || chains.length === 0; } async function unifiedAct(button, label, run) { @@ -1066,6 +1079,27 @@ function wireActions() { unifiedAct(button, "Deposit", (provider) => unified.deposit(provider, chain, amount)).then(() => form.reset()); }); + onSubmit("funding-form", (data, button, form) => { + if (!session.agent) { + notify("Set the agent wallet in Settings first.", "error"); + return; + } + let maxPerMove; + let weeklyCap; + try { + maxPerMove = parseUsdc(data.get("maxPerMove")); + weeklyCap = parseUsdc(data.get("weeklyCap")); + if (maxPerMove > weeklyCap) throw new Error("The per-move limit cannot be above the weekly limit."); + } catch (error) { + notify(describeError(error), "error"); + return; + } + const chain = data.get("chain"); + unifiedAct(button, "Let the agent move USDC (one confirmation if your wallet batches, else three)", (provider) => + unified.setUpChain(provider, chain, { agent: session.agent, maxPerMove, weeklyCap }), + ).then(() => form.reset()); + }); + $("unified-authorize").addEventListener("click", (event) => { if (!session.agent) { notify("Set the agent wallet in Settings first.", "error"); diff --git a/dashboard/config.js b/dashboard/config.js index 780858d..d0e3496 100644 --- a/dashboard/config.js +++ b/dashboard/config.js @@ -40,6 +40,13 @@ export function rpcUrl(origin = window.location.origin) { export const FAUCET_URL = "https://faucet.circle.com"; +// ShopFundingFactory on each source chain of the owner's Unified Balance (contracts/script/ +// DeployFunding.s.sol). A chain without one is not offered for the agent to move funds from. +export const FUNDING_FACTORIES = { Base_Sepolia: "0x69e31Af302Ee222204AA78099D39a2956F5C95d6", Ethereum_Sepolia: "0x69e31Af302Ee222204AA78099D39a2956F5C95d6" }; + +// Circle Gateway's GatewayWallet, the same address on every EVM testnet (Circle's Gateway docs). +export const GATEWAY_WALLET_TESTNET = "0x0077777d7EBA4688BDeF3E311b846F25870A19B9"; + // Wallets the agent is waiting to pay, written by the agent on this site. export const APPROVALS_PATH = "/pending.json"; diff --git a/dashboard/index.html b/dashboard/index.html index ab7939e..15884e0 100644 --- a/dashboard/index.html +++ b/dashboard/index.html @@ -303,6 +303,13 @@

USDC on other chains

+ +
diff --git a/dashboard/test/unified.test.mjs b/dashboard/test/unified.test.mjs index d5db69d..3a013cd 100644 --- a/dashboard/test/unified.test.mjs +++ b/dashboard/test/unified.test.mjs @@ -31,3 +31,38 @@ test("not connected or unreadable is said plainly, with no rows", () => { assert.equal(failed.state, "error"); assert.equal(failed.text, "Could not read it: the Unified Balance Kit did not run"); }); + +test("only chains with a funding factory are offered", async () => { + const { fundingChains } = await import("../unified.js"); + assert.deepEqual(fundingChains({ Base_Sepolia: "0xabc", Ethereum_Sepolia: "" }), ["Base_Sepolia"]); +}); + +test("the owner's wallets say whether each chain is set up and what the agent may move", async () => { + const { walletsView } = await import("../unified.js"); + const rows = walletsView({ unified_balance: { wallets: [ + { chain: "Base_Sepolia", in_wallet: "400", funding: "0xf1", approved: "1000", agent_may_move: "150" }, + { chain: "Ethereum_Sepolia", in_wallet: "80", funding: null, approved: "0", agent_may_move: "0" }, + ] } }); + assert.deepEqual(rows.map((r) => [r.name, r.inWallet, r.setUp, r.agentMayMove]), [ + ["Base Sepolia", 400000000n, true, 150000000n], + ["Ethereum Sepolia", 80000000n, false, 0n], + ]); + assert.deepEqual(walletsView({ unified_balance: { wallets: { error: "down" } } }), []); +}); + +test("setting up a chain is create, approve and authorize, skipping what is done", async () => { + const { setupCalls } = await import("../unified.js"); + const base = { + factory: "0x" + "fa".repeat(20), funding: "0x" + "f1".repeat(20), usdc: "0x036CbD53842c5426634e7929541eC2318f3dCF7e", + gateway: "0x0077777d7EBA4688BDeF3E311b846F25870A19B9", agent: "0x" + "a9".repeat(20), + maxPerMove: 200000000n, weeklyCap: 500000000n, + }; + const all = setupCalls({ ...base, create: true, delegate: true }); + assert.deepEqual(all.map((c) => [c.to, c.data.slice(0, 10)]), [ + [base.factory, "0x5165da30"], // create(address,uint256,uint256) + [base.usdc, "0x095ea7b3"], // approve(address,uint256) + [base.gateway, "0xe909ebfa"], // addDelegate(address,address) + ]); + assert.ok(all[1].data.includes(base.funding.slice(2))); // approves the owner's own funding contract + assert.deepEqual(setupCalls({ ...base, create: false, delegate: false }).map((c) => c.to), [base.usdc]); +}); diff --git a/dashboard/unified.js b/dashboard/unified.js index 7408014..ad2e7ba 100644 --- a/dashboard/unified.js +++ b/dashboard/unified.js @@ -3,7 +3,10 @@ // authorizes the agent on a chain, with their own browser wallet, through Circle's Unified // Balance Kit. The kit is loaded only when the owner does one of these. -import { formatUsdc, parseUsdc } from "./units.js"; +import { ethers } from "./vendor/ethers-6.17.0.min.js"; +import { FUNDING_FACTORY_ABI, GATEWAY_WALLET_ABI, USDC_ABI } from "./abi.js"; +import { FUNDING_FACTORIES, GATEWAY_WALLET_TESTNET } from "./config.js"; +import { AUTHORIZE_ALL, formatUsdc, parseUsdc } from "./units.js"; const KIT = "./vendor/unified-balance-kit-1.8.0/index.js"; let loaded = null; @@ -59,6 +62,88 @@ export async function deposit(provider, chain, amount) { return new UnifiedBalanceKit().deposit({ from: { adapter, chain }, amount, token: "USDC" }); } +/** The chains where the owner can let the agent move funds: those with a funding factory. */ +export function fundingChains(factories = FUNDING_FACTORIES) { + return Object.entries(factories).filter(([, address]) => address).map(([chain]) => chain); +} + +/** The owner's wallets on other chains, from the agent's last check. */ +export function walletsView(lastRun) { + const wallets = lastRun?.unified_balance?.wallets; + if (!Array.isArray(wallets)) return []; + return wallets.map((w) => ({ + chain: w.chain, + name: w.chain.replaceAll("_", " "), + inWallet: units(w.in_wallet), + setUp: Boolean(w.funding), + agentMayMove: units(w.agent_may_move), + })); +} + +const BATCH_POLL_MS = 2000; +const BATCH_WAIT_MS = 180000; + +/** The calls that let the agent move funds on a chain, in order: create the owner's ShopFunding + * (skipped when it exists), approve it, and authorize the agent in Gateway (skipped when it is). */ +export function setupCalls({ factory, funding, create, usdc, gateway, agent, maxPerMove, weeklyCap, delegate }) { + const calls = []; + if (create) { + const data = new ethers.Interface(FUNDING_FACTORY_ABI).encodeFunctionData("create", [agent, maxPerMove, weeklyCap]); + calls.push({ to: factory, data, value: "0x0" }); + } + calls.push({ to: usdc, data: new ethers.Interface(USDC_ABI).encodeFunctionData("approve", [funding, AUTHORIZE_ALL]), value: "0x0" }); + if (delegate) { + calls.push({ to: gateway, data: new ethers.Interface(GATEWAY_WALLET_ABI).encodeFunctionData("addDelegate", [usdc, agent]), value: "0x0" }); + } + return calls; +} + +/** Wait for a batch sent with wallet_sendCalls (EIP-5792): 200 is confirmed, 400 and up failed. */ +async function waitForCalls(provider, id) { + for (let waited = 0; waited < BATCH_WAIT_MS; waited += BATCH_POLL_MS) { + const status = await provider.request({ method: "wallet_getCallsStatus", params: [id] }); + if (status.status === 200) return status; + if (status.status >= 400) throw new Error(`The wallet could not complete it (status ${status.status}).`); + await new Promise((resolve) => setTimeout(resolve, BATCH_POLL_MS)); + } + throw new Error("Still waiting for the chain; check your wallet's activity, then look again."); +} + +/** Let the agent move the owner's USDC on this chain into the owner's Unified Balance, within + * limits: create the owner's ShopFunding there, approve it, and authorize the agent in Gateway. + * One confirmation when the wallet batches calls (EIP-5792, MetaMask's smart account through + * EIP-7702); otherwise one per step. */ +export async function setUpChain(provider, chain, { agent, maxPerMove, weeklyCap }, factories = FUNDING_FACTORIES) { + const { UnifiedBalanceKit, resolveChainIdentifier } = await kit(); + const definition = resolveChainIdentifier(chain); + const adapter = await adapterOn(provider, chain); // the wallet is now on that chain + const browser = new ethers.BrowserProvider(provider); + const signer = await browser.getSigner(); + const owner = await signer.getAddress(); + const factory = new ethers.Contract(factories[chain], FUNDING_FACTORY_ABI, browser); + const existing = (await factory.fundingsOf(owner)).at(-1); + const funding = existing ?? (await factory.predict(owner, agent, maxPerMove, weeklyCap)); + const delegate = await new UnifiedBalanceKit().getDelegateStatus({ from: { adapter, chain }, delegateAddress: agent }); + const calls = setupCalls({ + factory: factories[chain], funding, create: !existing, usdc: definition.usdcAddress, + gateway: GATEWAY_WALLET_TESTNET, agent, maxPerMove, weeklyCap, delegate: delegate === "none", + }); + const chainId = ethers.toQuantity(definition.chainId); + const capabilities = await provider.request({ method: "wallet_getCapabilities", params: [owner, [chainId]] }) + .catch(() => ({})); + const atomic = capabilities?.[chainId]?.atomic?.status; + if (atomic === "supported" || atomic === "ready") { + const sent = await provider.request({ + method: "wallet_sendCalls", + params: [{ version: "2.0.0", from: owner, chainId, atomicRequired: true, calls }], + }); + await waitForCalls(provider, sent.id ?? sent.batchId); + } else { + for (const call of calls) await (await signer.sendTransaction({ to: call.to, data: call.data })).wait(); + } + return funding; +} + /** Let the agent's wallet spend the owner's Unified Balance on this chain (only to the owner). */ export async function authorizeAgent(provider, chain, agent) { const { UnifiedBalanceKit } = await kit(); diff --git a/docs/architecture.md b/docs/architecture.md index 2b153fd..aa653fb 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -37,7 +37,7 @@ The contracts live in `contracts/`. |---|---| | `agent/agent.py`, `prompt.py`, `think.py`, `plan.py` | The brain. When a reflex wakes it, the model (today Claude Haiku 5.5, at high effort for its rounds and medium when it answers the owner) reads a short briefing and calls tools until every open invoice has its decision: pay now, pay on a date, hold, or ask the owner, each with a reason, plus alarms and notes for later and a summary for the owner. It pays during the session and reads what happened (paid with its transaction, refused by the contract, or Circle's own error), then acts on it: looks up why, holds, or tells the owner what only they can fix. Capped per session (turns, tokens, 10 payments) and per day (USD 1 of model use by default, estimated from the tokens and the public prices; past it the agent is not woken until the next day, and the owner is told once). A payment it sent stands even if the session is cut off; its other choices count once the session finishes. The rules still decide what may be paid; the agent decides what is paid and when, and pays it. On by default, and nothing is paid without it; `EMBCO_AUTONOMY=observe` decides and explains without paying | | `services/telegram` | The agent on Telegram, a process of its own (`embco telegram`). A chat is linked with a one-time code from the dashboard (hashed, 10 minutes, once); any other chat can do nothing. `/stop` turns the whole agent off and pauses the contract from the agent's wallet, `/pause` pauses payments while the agent keeps watching and answering, `/status` tells its state: none of them go through the model, and only the dashboard turns it on again. Any other text is a message to the agent, whose answers come back to the chat. The agent's questions about invoices arrive once: with two buttons (yes, pay it / no, hold it) when only the owner's yes is missing, where a press from the linked chat, while the question is still open, is only a message to the agent; as a reminder to use the dashboard, followed by the agent's question, when the owner's wallet is needed (approve a wallet, raise a limit, add money, authorize or resume payments). What the agent writes to the owner is one topic, short and without full hashes: a longer text goes back to the model to be rewritten. The bot token never reaches a log or an error | -| `agent/tools` | What the agent can call. To read: the open invoices (with the last state of each payment), a search over them (supplier, due date, what the checks say), one invoice in full, a supplier's profile, an item's price history, the cash position (with the owner's USDC on other chains), the state of a payment, and its own wallet (balance for network fees, whether the contract has it as its agent, whether the contract is paused). To act: pay now (sent at once, with the result back to the agent), estimate and bring funds from the owner's Unified Balance to their wallet on Arc (the split by chain is the agent's choice), schedule (on that day the agent is woken to pay), hold, ask the owner, set an alarm, keep a note, finish. To talk: reply to the owner's message, notify the owner of something to act on (at most 3 per session), and email a supplier from the shop's ERPNext, only after the owner agreed | +| `agent/tools` | What the agent can call. To read: the open invoices (with the last state of each payment), a search over them (supplier, due date, what the checks say), one invoice in full, a supplier's profile, an item's price history, the cash position (with the owner's USDC on other chains), the state of a payment, and its own wallet (balance for network fees, whether the contract has it as its agent, whether the contract is paused). To act: pay now (sent at once, with the result back to the agent), deposit the owner's USDC on another chain into their Unified Balance through their ShopFunding there, estimate and bring funds from the Unified Balance to their wallet on Arc (which chains and how much are the agent's choice), schedule (on that day the agent is woken to pay), hold, ask the owner, set an alarm, keep a note, finish. To talk: reply to the owner's message, notify the owner of something to act on (at most 3 per session), and email a supplier from the shop's ERPNext, only after the owner agreed | | `agent/guardrails/gate.py` | Refuses a payment the rules do not allow (HOLD, ASK, already paid, over this week's room in the contract) before anything is sent, and the refusal goes back to the agent | | `agent/reflexes/wake.py` | When to wake the agent: an invoice new, changed or without its decision, a payment failed or blocked (not again for a result it already saw), the day it planned to pay something, a due date close with nothing planned, an owner answer or supplier signature, a limit change, an alarm it set, the daily round. What the agent did itself is not a reason: an invoice it paid does not wake it when it changes, an alarm about it does not ring, its own payments are not a change of money, and a hold it chose that only lost reasons since still holds. No reason, no model call | | `services/erp` | Domain models, `LedgerAdapter` protocol, `erpnext/` adapter (client, mappers, adapter). Reads, plus one write through `PaymentWriter`: a payment final on chain becomes a submitted Payment Entry (on testnet, a draft marked TESTNET, so test USDC never closes a real invoice), drafted by ERPNext from the invoice and checked against what was paid (party, amount, invoice) before it is written, with the transaction hash and payee wallet in its custom fields. The same transaction is never written twice | @@ -52,7 +52,7 @@ The contracts live in `contracts/`. | `services/payments` | Pays one invoice when the agent calls pay now, and gives back what happened, refusals and Circle errors word for word: re-reads the invoice and supplier from the ERP (same amount, USD, valid wallet), skips what the contract already marks paid or what does not fit under its weekly cap, lists for the dashboard any wallet the owner has not approved in the contract yet, including invoices asked about only because their wallet is new (approving the wallet there then counts as the owner's answer, saved in the journal like any other; a wallet approved before the question answers nothing) (`EMBCO_APPROVALS_FILE`: wallet, invoice and amount only, no supplier names), simulates the exact `Memo.memo` -> `ShopPayables.pay` call through the Arc node and names the contract's error if it would fail, sends the same bytes through Circle with an idempotency key per invoice and attempt, follows it to a final state, records every step, then writes it into the ERP. At most 3 failed transactions per invoice. Amounts become exact 6-decimal integers or are refused | | `services/unified_balance` | The owner's Unified Balance (Circle Gateway) through Circle's Unified Balance Kit 1.8.0 and its Circle Wallets adapter, in a small Node script (`kit/`, pnpm, Node 22) the agent runs once per call, with Circle's credentials only in its environment. At start it gives the agent's Circle wallet the same address on each source chain (`deriveWalletByAddress`); then it reads the owner's balance per chain and whether the agent is a delegate there, estimates fees, and spends with the split the model chose, always minted to the contract owner's wallet on Arc through Circle's Forwarding Service. The dashboard gets the same per-chain view after each check | | `dashboard/` | Static owner page (ethers 6.17.0 vendored, no build). Connects MetaMask, adds Arc Testnet, creates the shop from the factory, and lets the owner set the allowance and limits, approve suppliers (with one click for the wallets the agent is waiting to pay, from the agent's file), deposit USDC on another chain into their Unified Balance and authorize the agent there (Circle's Unified Balance Kit 1.8.0 with its viem adapter, bundled once into `vendor/`), pause or resume the agent, and read suppliers and payments from the contract's events. Money is parsed and shown as exact 6-decimal integers. Chain reads go through the site's own `/rpc` proxy, which adds the node credential on the server, so the page never holds one. Served with a strict Content Security Policy | -| `contracts/` (Solidity) | `ShopPayables`, one per shop, created by its owner from `ShopPayablesFactory`. The money stays in the owner's wallet; the agent can only pay approved suppliers, once per invoice, within a per-payment and a weekly cap; owner or agent can pause, only the owner resumes or changes limits. Unit and fuzz tests, plus a fork test against Arc Testnet's real USDC | +| `contracts/` (Solidity) | `ShopFunding`, one per owner on each source chain (Base Sepolia, Ethereum Sepolia), created from `ShopFundingFactory`: the agent may only move the owner's USDC there into the owner's own Gateway balance, within a per-move and a weekly cap. `ShopPayables`, one per shop, created by its owner from `ShopPayablesFactory`. The money stays in the owner's wallet; the agent can only pay approved suppliers, once per invoice, within a per-payment and a weekly cap; owner or agent can pause, only the owner resumes or changes limits. Unit and fuzz tests, plus a fork test against Arc Testnet's real USDC | ## ERP independence diff --git a/docs/assets/connect_erpnext/api_access.png b/docs/assets/connect_erpnext/api_access.png new file mode 100644 index 0000000000000000000000000000000000000000..58cc55bd43d2e2eec026dac5933a55dc6a9365c0 GIT binary patch literal 38657 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

D%*ldO1}l57o%;SGLKR2!h1F0~_vYP()` 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 A+5i9m literal 0 HcmV?d00001 diff --git a/docs/assets/connect_erpnext/own_user.png b/docs/assets/connect_erpnext/own_user.png new file mode 100644 index 0000000000000000000000000000000000000000..83fe06ff43d494e9544c14c6507b474d328afdf3 GIT binary patch literal 53897 zcmZsC2{e>_8+WCsq|zoNm5>S{WUmymmL-Bv@ZJvVy2Y2n-#dA;Rj`6Nt zT!FiG?H=0C3H(OQkmLe<+wEZw@jbg&9MWXo0?@Zd2n4IIt;^vslmz1ox`b_XE84G-2qc> z83~Qg6p389M|7DwV5HA9%8JK5@%4p)W2Q&H-fO6eXt=cd{Fy2anPVY)@1E;9dVTjH z`wQWJ<%*r#eW2;Dy{ha?wl&h%*vzuPRMae~momOuQ;fkA!Sq)|GnLg6Bz~K+xxOqr z;Nj_sN)~y%)K5JEocPbjSTlx$JghCoP@3G1q zlIr;a3OVaQ>YMKZVc)wZsZhI-T#zlpVSOpY&Fc{jj1LN{*o*zwvvw7TAnMJvSM63j zD6tCNc5`QP5CxPR_<=wfI}MO!52S^Zn{qg%E6e5*MT6Z(WZqAx=lk>j{$I^Oa3^&K zRp0sd@0Gkcxym-6pSP1YplO$mEpDFHr62>Cp6iXmTjz4LqT+)$n}ZXps;=vQ+)%-j zS6?1ccMW0|h)vZiKAElCgauKaC|CxOl<)zmHs5*{)|X&M6wg`skr! zNc{LA(SO~>IlGn0yVgg;ILO?5QeU>))WrF_VjBGIAP|VGL(`#kd^OgIM@(jYmL4?q zBXwz=l2yBXxmA3sp6OB)uNdWRJ}U#E^knSCo{j{mX1efr1{4{tswQf)j;-zaN6MSU z(-BRTE?rhHrO&7aF$P`K1TblH6m6p}y>2)JE_R#7qL$)(Vos>QU@))ABy%fG9eoVJ z#ye_V@!md}ec1G9n=;Odf+r-_q7hAhH1dJkVtL>yE1={NKdGlezc()ldaj(tu_JW$K--- zv4Yc+f+nK@gUcZ6#sQt}Da*K`?Gx!KCk9v%rZEteeAi=ZkIjRW*fIDW70EciSXJe$ z{Ffaa<=*i7C^_-9p=c|;S@&|5@XKFyX9E{*fkz|YrCX$n>F@TCp{o5#5lE$=ND}yv zDzbe<`;!~@3qB*&V{0EfxJ%6}GzT47>&wzsT`pz1quhT^Ump8I{(gC||NM{=6NC#e zUf(=@h$8Pbp#vU>fYW&theo%qh{n9z1F}8}mg5hhZ!=@|V&Cn8xle9?!3(sAk-E0$ zH70J4%dq@-ZvXp^PkHR-JM7t&sYczR`o=)EU9roZDixl?%9gc0C3Az7+Uo3;-ZC_t z#Rx?nkx!-c3yv$5>Pgjn6Hs_e4j6PwsoBuyJP~loK7_ zII)smV+*7uB9SmbYZU+Voyf_;aA#JBm6u;6gmX2 zI8Y#7XDy#o?((bn6xXdq*YfCa+G;WNijs8smq>7Ts>-`wrhxP}!)H);~|j z@Yz0#vk6@Mjz?!I-PUq()}5N>O;%2CVB}~I%)U5WyQt7wN7LeWE{H^LM|8)hDp_gW zNzVW2nDDb+k)Po|%q2tnl!8->B6g9dbzs7iIad-D7!VRzFLo*7%mOl;zhK^DGFHWTj~w#u49sInRVBn zxsyXnhi5i5?IhO2C1LN5btOS7!peq~H&ZUGhtB8rgdib@GE)~}a^MOGn#qio&oz;DlBr&Q>5l_q}B+hmJ!n&52X5sj-zBoeO-+uB@rUMVfqXk40X zFQKXaa16`JG6A7$?F_4`T3&Aq8!O8=TFw42 z>r|p8o0%MR)PqM>$$P}T&Sv>Ms+g&i4}`EtbG5wK($Y~p=hzfH5c2*#gi z?R$`-L+tnS8r8p9NI22*uDxf1cn|y@?SA0dtR9cyu&TS|hn(VG(=Og-RWm6E>3a!! zS_VlU<-woqdyrFSnxMV@zI_YtynI0}EU}IgQV9ii_JQY&!t!}i>Nw_o&PdtS4Ok&& zty-1e;2-jJ05(7^03UF1a3WUKyS288N7)dq_QDN?IMi|D+FVoJ>OMU^>vaD5$$hBCyt!*xB=G6F>}N0MJfF-W zZkd1pXd^%{hca4}p~h67k4m#-k|a|6JyD@R^7N@<-!45aLdIwE zd259eI(feDFNvkU;>3Qm|i5B}4`6zd@ zt$=0lRNK;aOWu%0)+?`ehE61QmUChs?WP~F44{1PR8l>vP;t7J`8AGN@(X<3ck4U3 zePx?rFg^>lxhPL~>y?GP<-z(kJ4hgxWxB{#g<>1SkI+q%U0GKbhL!BFGalQH_Y$nn zdAVkWRpS!*hCgcdZneIuIYK-1`mZc@hzY}hAE)+3=ujZ;Jb49kN!aJ?*+c)ReAj`U z^bxq+p_p4(*ruuun@#+Ysa9)^VGIj`Mgz`4zkK2${6#3yK$;ga&w6W5ak6IpbtxZ6 zO`wZzgi}>qU-RF1##L3x7>|tPr8_7;G{W5O(UO#dzrT#W*CUla8$I0*hsMh|NV#vP z?rGNw?PFrfACm~)%Tpb)E}dt<869Y}@?bSI3)w06(1R7WvC?bQ-V!I0o0pe|@#y>f zKnrS3MbyqKTb9}13a~V9(sisq-4Q8;ZrNLx{qW(#wrC+0<)mO1iHu@&BO5QiVd*s);tzO<#XTg!mm)6(6DIBO4;a2pEzpoOIyVS$iOu;eA_}_VJ~)=c!39s6YHW3N#M|`YcXDac(B*k z0~-BA z=~`Ur7aIrZf(|c*_HmG*ZEG3M$Ny+C{*~lVMZx(#YbeI)Z1Cn{vn&{2?72$xg&JwC zDbt{7m-kKfdyQH&o3;U_=fW^dy3&J4dhwShm-e*X^&oGZ^q&r#j)R}C*LdiM6kFzq zgxiYSUZI_TYM=UcNozrw;@iETI#>kWlYaBYjWK3LLH~I+vt&n+%Nf2SGUpK`om1m6 z8dBCMk8-@So4<0$FI>Qkzpm@lCEuW+?x_5nc|Qq)l|>?VVCNEH_gWS=#zYJtWFd3aLExh=d!Ly1om!I zbU!jga}|H!aM)L6gJ-LK?Js^Idg%tvC8J*aMeOvMta0C8UqkU;NHiMVmG>;#oDCOJ z4;-+f@Lxf}MfxT3A(PonJz7yoKcAF~&$`<2Jcqy*Prv^j(X&7!J3;A+xMTB)Vd$Ib^Ph5W%~Gi%L+9jRTpab58^wKi9dhKasBu&Tzc%>x$ZN6Z5K;!= z0o~x_u+u0t42f)aw6LgA5%r#q7~>Uje8qfj;ryg&CzytQ^aN~z;BDz*z@z}xo~ojT~KMSGHBzkIyWLl;>Zn%6uWo z?8+q5UkYa>!85Y{NdK(=m>YOOAm;U$iPa^i{f|!Dni~15mD}(#2){ z)0@W^ljk5RRkm%qx{fZ*$FLWivUC1QpZE?^X4!1SzUsgaftZ`{Lp_}^S}D+ zfhwa^aLsU7Eac|79}Z#zJUk$y)->y$i?msrL24Mb8UHpevPY{`R!*&wWIk_a!qtcO}HEf4fyU6CGXC+JZ|RjlimCn`QCfR zg4;sV-nIx?TlPi8yu?bhnj93s@_~M}lLs=5KLTj>=4&WtEz!>k_~Gln!iB9!1-?U1 z!`GQr{h8%3k6Syw_dIeX)~dsvs^>Jc-zDJN zoxz_+&m>Mp%?i0p*?Pta`6;%QRXvKgEF-N9!$#A^atw$=V&Xnm<-kjaYoETKfVf@D zd2a2ae*l$U5CTc>OL6AZ9OjjCsy^_BTc2H4H@fi^S=6*o^O3iwAzZUyD37!kt5#{0 z|IE|kiY3A34C9E`qP%5=!m~S2&GMlc1Pxrbrrhecd`CwE79X5JYR)K4tvC*yYJu6Y zs;C!(OAHBTlya9Fmo^(4ByyrU8G?2ZZ)L1;b9euvW~NcPgIZUE;{^_o+u%ihzTn1J zsK&rv$9tBkiIRRgK_9`3?t@jnLt%$in%ln{rdl?dYtIFJvCU*pemATQj&}=xVL()f z;z6xXULSnc;^ys|pf3lJ@&r|;{1-VpCqM92GX3t|yGuQK(y70D)nAR_Ku3=aczGVe za#=jj$w7!%SRHUqJ%QhnaI^apfvKvhD~_`xE$GgiHyq%m zwgrZR^5LwD=`o@6$KQ)7UmYsRbng_c%F0Chueu*!VJOU*0o_7rJ}36d!{TeyqR#h9 zCRWzgD#-QeoR}Y`odWx{@q=%H#;^7IL*>i_H96i8=(SHJNlrBISeWaJzUU9n1`;L5 zoa@4ltLS#@AC7i=uiaijjBT)otX8;d!utRiaoO-{iEs2V-Sq1ose>{f32t)Vc|u4^ z<<~Gmuekx4<+WZTjU-F}(+7Z2+%lEL zLh8#$BS?vUy3xoORYQz7rIY3(G-R=JBbj!iMKM<{U!I85J{za8`Rho0N{UOK?^%tY zI@OKo9GTLDqMbzV2zW}Y%vl_p25tYH-l_4FYc-1~eg2Z1z>?Ky5iPwbh;kdjn2_5L zltWkCK~UNtidOi|r~-BM1OsCZvg@WB4ilrpx;vWwxN#3?E=gQKU}71{25u>;{|+Zs z;3lcl`&#NkJt3z=)T3k=;g)c!QmV9i03BsP{3jvox+$v^z$lg<{SO{jMbWmk&FI79 zQBdlBG5~0`qG41=_QqT5|!bWU)a2VGJ5C=)6_j;kXz3 z8)NkTz=egX2G-bYrBew3P2a2d zb_#g?8a3PQa1c!bkl818Gcz;zGG3M)8^F8(Y}EWj5QN9U2Hh_ z!yE~KmvKt_P{{0I^1X9MpKK?^YwL&5u`yB>z{8)fIk0|XubL1yx46Qr_2Tm$SH&(Y zsHx878-qYlHCzMm;y*h1rh8di?=gAfHv~Ofp6~`Zw{mHIRuFLqgSEVWe{_p_F$KUe zVRPUD;mM-rsti3}0CxS9Zg+Kd@eLna1e#!c zJvUd(26V_I9>7UGD65kxpf;nRrQ_g*hyvel5xi47@bQ_oOm%NNY~>9YczsKwvwY

ROgbuuuGN+}br38ixgLY3NJ!#qo6+i>{)Q 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

~ZDRk(Co`Pl8}ZB1D!eLCb{ng&NaapM-# z)AewGygb@ApZjn~<{9&04R$}!;sPM==i=OEjzld77l_u8-_!eUjdZzSRyCD(j6m4Z-ir$Vz+q$WJb_gBtZ=)iN;vBO$id~Y{5MdnCB2UJdM65&@* z051_tt^1jNli>2rTb+Z>v-w?CIml?MA9{1(gaIymaAw#L_WdK@cLr2^ui(>g8d01l zNf`8vT3UU%YWO2ao~z~=wTvzo+VQ)^E1HF65Wlk;_OiOwLObKDvc>SGH9Z%g_h|wy zc9Ds!Ts{5l`EvFjRH-P$D91ONWNT$U2BLw*Wj`OAE{WK6j{1=YSh4}e>P@09mG^Zz zj3p4|6JU?g$9nWIV@D{)1>|C7vK)$9xJd7D^)DWYNG0JB(m^Ec7E&=I3{;#Isa#n4 z2XE+aywn?!bDCz;n&wTgCnlQ~OVl8QsmRzaWS~EV`N~NN->JE}WTb>0& zR20pB9N~{+`X8Lu|K9@X{%0E{rJf;&hZ2=Wg1D6k2EI$LzmbyJ(QH@9$ePJBD9KuM z^Q6hl)vdXyWHTXKt8og&Od^(Po$c!9;4sG?bG35QD?>!-BP0jNWjYnywXxu)D#beC z&{q5%L`k+!$}{oOI0ig&F1WGjK@^q!y1jZYhFV_8Rp3Ef*j@8-eB-4nD4xnSOK7V1 z@ZN3EOB4%AL$X5j@kxa%cw>D$y7)H$Iyc>V8g=#)PstW$s&lu${n{ z7ul5Wx#-L!oR)20c^O$3#;o6sq#}DNP~;fvd2QQpldKx;TwqZcx7(PV{pDhFfnOr&~JTx`$A#(6+xM-#e^5e-bjII$pgCei#;3c_k@ z0m>O;I6I>foxKT9!GAQ=6D_BrX=lq|R~&4`vU_-b1TI*{orv=f1^4(IJKhv=T$4C? z{?I$FWB-kQYp^Y$a_Me0DS>ODBS-FTLMlb<*SJLw z1eGWoaYp%mcP50mhH?K%)TR%WNd{ei9{x8YTtNRfQ!LBfZR7n2qdF8eHpMby4Pj14 z_me=X>YUTGL!3jxWq3YL{P$}K?U++frHd1!KwUgZuIwRdzAnVbzuj-!iMY* z+oz2CWZ)tD&JP98eSVVS_&`nMW0UrR_+mLq%sTG{J+qyP~!IbtL%gu!k{=8g+|I;m-exc zkL9}9r*zx(=tF31K&^4&uN9Xafg=IdzEM^v!ElksQ5rnaMjNX z+^V3ycIiE;pq#=0=bpu@zS%lcEK#fyr2kE^57JlS0xIJAfb8PP9@R}4fShdXPr~|w zpLMUt_bcAFVV7xvd`m6^&;FTzmD0>#vb-IKeB@&9+$6?bq?x$;smkW?;m^lg3VbOE zddS^p8wqv5jN!TNCQdS`*{b`18dzG767|P^nrj}4TPn6n4UKTY7rT;%;p;-V&Htt6;MJa=5-zxBA451~i&iBd3!v7iI=8paB_9 zvF8f2--S9?Ht@RmA1!lCX>xT&N@qW7dtT^jTjW^2H;Swxc2v>qK&G8%?*@f z?)3i$dv6&QW#6`YQ-TFtC@PIeDE1{6@oS~gw zdX1{e^&@vZeW)HAQCfIr%E0boPEEm<3i;pZ5+vzsqA_X>(ZK}{!u|S zUM+0l6H5xZDucSVw(iQev?__z}hBrqILVhkp_M;0Vf7CsE_*?o<3c7bg zqxK&M=cAs+{(uY&Mm9mK$sde&z`*rsRUT|32ls3~u$*PR2fFo47kv`MiqHZb#^}Un z;lI}Cwnr%l+T3H;&CMllOG=;*y)BJ($i@Rz^mArCJ>?k3Dk%h~(4)y-dy(=CWonfD z&ek@~WMiMUwkQ)O8Zn%%iSpIT{Oyv!1D53bEG!YxbDZYAdm&*^t~PaQCIou;)X=9Y zr1)@AkXr>FeTDo<1nEHu@-MX-#$GMgs=-1%qMdGL)=#p@$0=_j3?<^ed9P1|*8Fi~ z*P!E?UV72&vNR7x3oJ>KsPuq+Gpy$A(|buHzNiX0&WcK@xo+1Z3k>4>JVdy2abs8} zO%h}V->w5bTq$qhUq_=(W#e5hRkT;xkk9+?v4eKdFJW$~-k&;;5wZIvhlP_+39a(G zS_!S|CUQ>;X^Dkwbv-*PR^plz%qBl3Cl&0DzgB(nit-82^RSb*R+TRk(omwE)~V}z z8$v`6&ZI)-+~@C3-cM?zaE&aQuPpn*F>R{Zhg^Jk~;~c<8 z%`gFvi6fWDNa)XGH_!7Wgat4NfvoDzMDbZ@VQY>z-ZV?e;s!)^yt_J$gc5YOn99e& z5|bxDB@_rd*q*H$hKhxAUq3myV<2!jv?+n~&X8;U0K7r-wAK|Xd<`~tlNo=E--%k> zbTcvAk%b6vj}~RO<(JF(MLU%2D8)@77R(JaRbEclZr_Z|jPI)HHtzEHG*b#2A%|{@ zz>}P>gin$ibhUe?jL>xSNO*1oIEL0&E&LuY{#go6R8_pGwjEwj7wvSfK(6qD-hg-X z4@jxI{o(g36v@S0%xgc$D5&Ws@4FL+jFun1_^j0>Mk-+szIfCVld!GKM6mee<=Ic0 z79kDdySuG{ktq##3KsYTO5KI8noD=YK7CZNWH)eWaCfsMGT(4$oLAAvp(fZVSIUto z_W)!8Zg;c%x^H5jBjqBdUa{7E*+0@DyVDy@4qZjO%&fl%@|D^<^2sQevb2(n`TcN) zEu&m&%d{8nBtqv$4g?rT^eEygxi3QP1}?PI-mYHU?K(p4Z9U&sMqz)9hwRCjXSlC? z05el{lYmmoQ=JU#IWsG@j5ZZLR8{w*BD4jc9ehNV@-7VCMf!yuZq`0>sJ6>>VQ8!q z57S63L5AwDLw4)D?!cBOc~8iE9+80f6Yv{76pKbqW)o}n7aJr6#rsd)XB{%XdW*Fa99f}Jb%1A(A|Bs71COX_^ zki4WGMBx5`g$zL(@oJ?NMLoaH>Fr5fseyHPvKpxkN7=<+fwJxXB+0~sa^8atj&hfw zB9>BFemwlpJ&JtoFyJSX2$;~OMHcDm>FUPE zclnNryrB({sodc^fuCgy5fl&(5MrsuYy`9IQbf9JwWeHKNOj--zhO@YP=BiROE>%} zr84hdy&eM?Q70Y(f>}~43W7x`zdtLvFq-dBP)@|t%S59lx3@>T5Ae>-Gkrv%I(^8x z6T#UL-I{kT5E0T$ zy4YRpSKDMVR=S&{!q=x2#3#@i$u+rJY?}<(BDQHRu?*vvL@A^R9YDrgP=Y1E>mim& z%{HS+Kg_0v<0K31YIb)V+jx581f1m_foo1qra-7@-HrRf?)l))?_qgc-L`y^$NF_b z6J5>wFtn?$L%)lNRka|7?30xM)38Y+2ovG2GMugdDD!+y^UT&;$Bf{!Op=dk6O9#f z7b^QQQ)wq)LpkNW);VLI9XxCU+G14YZ%WVWdK(LlY{v z7i?)92slq@Rts<8YcozsYmwyDvbQ&5WHXYXg|e>JUD+8z*LiPE{upMoN;zK($mYtm zRwLt|G^*QsR>mH}BM}XoOkaCKKh5QBGxB1yF92*iNly_J``m(oLgCR}7P+PO0om+n z*HA3W9VOif=kuYsPjTVT$BIjjUhlkQ4DL8YA0g0vLD@lR5qxzA!TAplUg+6fL=tDq z+rMNJ2DhqrF-#Q?uE!g8bv+k<{we4w!;9NO8N%B=oS4>tc#n zweK;T6p61U-ft*NY>AiEG@f20hfVs%#<;8pHFGh4mbnl=d#IR;vp$9Tp@1d{Lx~#h z1;)6_P@k~~xtCY2Jds1H62A@p;ZoF`c^%&@EV3By$UxLL5|>cctrRwzVeU->RXHc6 zm(jE?deR7D`kFZUunCMIZWd^qF-JJZoxV9?e?;Kx1V|@M&i4LchfJ19=1(hG5C=p; zF~@c&?x`t4y|F~0vxn;{R8U{QwWg1RzUc1ePB`6&0N0L0rexA7ja`DB-m}VnXl|ox zZpr94Uqclq|4sg9v@BA9W-GV?+9sHQnXqDJcYn@0wX$alr@S9E8Ebi8OQcTvAM}5k z#bIL-I%3Qj_~T31qy_zgR`cj8`v6cv*6CM}5ORK$n%~f`XVx5@kdyfM7 z0VgZ))ZX!$@B<@_VOu9GU!yjsnmGFzaZ0F;d9@N2Tk}F(tf5-hQ}A$ejf-3>e`#~= zenIR+dw0D9^|2eOD)sJkH|%C1XPE}-dtrcIsc>Eak!_8E%8o6gxl!dl-@oGxh*mF~5N({*Xxud$=f-RfdWFX4 zU!9@w=5G#*(TEw3&iplb4s8GQv{_vo{Zd8W(sc$B0_jb>oPJMr;bS}nsA0V@b!L!t zSnb{%x8y?yv2c>xpm)V``l#*wazl!#g7}aLl<*u)nlME~*`*$6Mx6eE3={vyV znb<7G=J?{kCk9ukq>bbu#oRYndVc$)P^Oc6bQPy1VVcl)$G0uN5r3C{2vVt(|7urz z`VA@&U=bfQO@Wd$(qe!Yi0u?<^p>u?osWv5m@gw#0sm@p++?TX&A@4nwLrvQVy51I zS;Kmlm0LeG0own*2{M2@=AemUUmevzlIH#q$hgcdeP%oAX_{s;!w_-bzYaC9b`HK- zsYxF|SN3|gi`B?Ln5w1MM4@9u^p4@?`As`Gy%=+$yt0jK@kX$N>%zXUbJ*n9Hn9lHNH!5F?*M>FnmJf3(9R_|59X8#x03K}uPqJlC? zUZ6cAgFt^-9k`@9=RPyqsxhXBj@3I3{`<0I7!6zjovyvM3=q3FU7@RHi2Cq(edK=R zy#@PQ(-q^>@A@9hB~0)+n#(J#$S{zrR^NWxhj?FUbFAn`e!JXjE0Ld3asO24_Vl&D znHnWXQqs$l@{-DYq`!Fr^2L6m*2-6bAA)dRT5@?4;@wX`jv+D+LYorJ{)=@c`K(By zgQ4nP?XupGWJH0~)F{U^{V1R!c7+L$C z0b7K-5`oFmEW ze^ON^F;_~>Vh9Q9UjVx{w%oNpbO$-X+ofU=2MKRYk7AXol46D$MQQlC1ka2({)Rp5 zUT(4K_jzZOUoRJ;xVP0ZG)1|@=c|+peHyr23Vfxn*ZqW>>W8C^^=HGH*_JfX3lDg- z<@C8RhNF@_58Qh2)8)U5SA##6eg@M4BYQd~ccub~--ZWP74;z-9NAasfBS-M2&7#A zuLUBkd2at_rq6GoD4X|G#O4Y;vRoO^m~asZZ#reWVhz_Umumx_UKhG!Ulvyo8@6$t zn3T2V9DG|!7sn6uwssTnXa#}$YU%d>jO_QD>bR#zGPSN*&zkPgl=dG{O=?jTc2@IK z%#iTH-l=5R4puT~8lvq&cIEE2EB*J72L-*eadUs`2wBSykMreP+vUe|(k}O)0HNVW z4w58OADD_htSHh-Bc>S|A|>o8QK*r?R&vZKnV7vVK}8h=mbpk&6dhcYx>y1&b@fxi zixlbNc6{TF3Ijbr4h&r&>f?_UA7|8kta|;El9c0Ng~kk4L+9@8?J&ngSkxX8*f7hp8kK<)%b{_g>fuv1x)FhBR(t4G}SD-*gH~2%K z^nE&$WYh|VIJqE)X8p|y?FplR`QRQ2b*B>JFu{$e7J0D4;Fit zeyyKk_LwNG%w6YL1h03$iC6Mb);{3RR*@MRb9b5C-kfgWfA4ANVgsbh*u{=SDSuu) zzv$ogI|G`)OW0SWj9dP4pddxl;N_k4Q2zFzwWB27s#gk1G_X3M%T{;0xqZ{F&bwRC z3|iyfOrn&@$N&cDL|`}}r_h#TgA~q`0|-YY|4a@KBZ*DM3e1UV$2;!HHcMvzO{36- z2CWNMT)qbCYCQ-O2C1nzU!Wn-)n{ck6p_4}9nt4}-{xoglWLplav5*XGTWzL?GR#- zcFix0iTr66_VOCk#eq+gjU3VVIM?0{>lri7?DqEHs+-kmzW2a1&n}PRs0c5Rszgf?m zfuWhLcz$g$=gi%g!!&uJ&1-b~%u#8?qc2ar7TiV#)W&nwBn6tfsB;FWiZF&44OXA0n6r&xZg zuAdOb;d>sSnDDAF{o>+@{66xi+5>!Bxst^N?a>AHc z-w0YODzjfSjdwjZ4Yf2U>0moj_)#{D}N@bz~6#RDNNDsctO zTL*cDfTp2q)-Hy2Cd&ngrS=J_4ogxZN>+P|*GyGV4Em_4$ zEmd7_1W)9S2~#QYT}w^*u;`c0yCvn?CFUPgT)m1kLI;KeBAL^K*c`j{s-Aq|0}or& zQ8qGJ^p9IeylI{_)0N&2Sf)#-;}-jVg@uNeKr}~~lXWF=%R=4IIQ|3L8{G!6h*!xq zW49wSUR>Rkxa~dD_^2UDY2|srt*rQ*?pqHX`AKwJgR7NDeYd0InTJ1H|(zrauuPgWoy1^eB8W;Bi{D7EP^YE~KxqpfqP%)Y+{)s$S4eqPEiN@ia32q-P>eQ;41Cq(HND2QT&jgWSoM~pO> z`3IKVQ)piFBqZaIqcAmTb$IXR1U_bKXds`q5hM`ZL7&xu6rxOZGwp6XYe;qq+zb}Qu(imr3l8P)(1Z4=F?Y@XAg&cFE zR1#J>sRz!sn(vRl6p_TvxurKA`UC2(x5Y^XFtSNcSeqWx5RL{0-A50x; z*zu{J)v3>OD^Ek|^uq1IOJb||6Een9jcf_MUo+-*TIMP4k9`CpgSRXI*} z=@Ro0-NsQY$wW@%D5eZtRC3qmUT)CLB015-HGACP6;Q*9ZJKXq(y7zTtG&n!RcmT1 z!)&m(w^!ND6@5JM~Hf zqQN`-pYi+YM~K0^_r2_mKOb)wsbx6V@$q}Dnp6ItM$3Z~fwe>(l1{ERd9GjwQSy`p zwly7p@7Y0Kg<;A)#5tXa)zWzkeNtOMgzE(p&{W!(1m+x3RmwoSD8}njb9*8dyV}#G zqs;WrRl`sDd3URVO-Bq%r&8|=`x7;QnsOLS-5if}OS~n8B(^pl{?&0)8 z`8jHkieAc{dz6j;5E)>X#C#QM*IBv?t}EXF_1wznzv$x`fr}kW`M-qoC+D1p%eH)R zd|G&QDr(Vhg5PX&#`M-!vD-$Q8HhgY;uruz>|k8SB*ui&Nj~j zLrzoSE5YYU)t=9Y^$=t8E~#x68WscYPlWEA9)7?RHpDSl^GwJ%<_c0d^9eqC_0`wH z`B}b^g`u?u&_E%jASGC=m4-7(T!XDk9hU2_y7M;DDGUA{p6_7KpD=$uSKGB?r!|!k zb1_Iz5B>aE9JlF9dTK0OF7+drBZsd>vUUiOaNcl{c)gzg|I_3D;1SNH==Fn!n0RUq zj)O`3H*WQ;?%P|V`>I2(Qd_49EOpNJJniqkg&x&EuWmdzyVBN?#WOI17^+2HEgG)U z(GNM=>ST<8uCG#(3e)gUe>Rr-O!637_7U* zgl&^yPB=iNlo&LVl_{1lH8HD&Ly2rA^sD*Lq|~PtuGiJuQFoA}|VOb#Rp^ z#RIT>5$B=h(Ziu>5fWII3c`rEDq#hTB<2p;W24CmuB5}zfw`C**!z;(7ZI#h&ESco zhIfBW`vwAmG}c-)1Oqg62o3OS2It3)bqEK9Nse>55>naxcJxAZ3n@{G5>W4>*VFaj zD~Ls7r}+b+F9t8&1O!qcX28Tv@RU^7lC2)b$F@j5=&@MlvG5 zmAy}|d~2uVDXo9qrFq7Oep5VdM;u{;c~qc=i5@FdPBLq3=S`uUS#K(d81oHCSJ>sQ zOQo6q+P8gZIhfFVDew8bXncC%!7%H})!4QM;30wPEr*Pg-MIag2I%p;KKd@Smt@&8 zcr=y9Wzat}<$kFMs<>u7V_W3YY;}?%74JfCG z_7=q!MnKZ@HbpNb%E-{1BocQW9=#`z2ssO1>CoKM3+?FbzI5MeTH<_=QpIhC)kAho6eHlE|G|B?Zm#@d`0> zxM;;Es|SSYx>LMUqib-(%@nrYZ(YHURjr!Q!^w;_qzhW~{F~CzX<6h6a~0jeS1AwU ztQ=QxM+wy$$Hu)*s8TC=twvM7XkX3WQqisC^*@E{f_9_#h!-9;)BE}Zwk5HR<8^S^ zcwwCgPo7Z6+7p}=K>IFcNn_!i?(F!cj&|N+;6lOu-G!zfxP)jS_g|gNhwi9~iv{k8 z0iM?zw*SiDtKM6(tSn6Q*GKzua1WuukT~KRAsgFrLqmN(`5*JjNvw@jrvr0G-+!Rm zLmXZL!Q~mR1i^xFKY&U2{Xi*1*#&{+ zCTeC^*^0ZRTk&$5DI)~;_&P#;A$;@N_V3HTQ#IQ+pw59?VkDzIn?RsSu1VM$pdX(%dE>uQ??kgr3zWR!*)?Z=wn3OFxISc5l4gS@UJw9!Fttn6H* zuTrQ-)TJ1a|Al?S%X8h0}OrCUx~tgnQ?W z^V=s^eJ`dXYgf2&Q6vf_GM?}0SZdrwf~?5`4$lHi?LS96?O}d2Og)9w+#ahl^B_8F zRm1b>Vg=8L=wUC2&2D;lXb#+Rut{8_ul4We^S2QntDO1k4VhesAN_Q_AK}XO7>vFk z=ic=?ucquay_PlZ%3cZb-G-1dk)-46<;K%Y_6(1c6g78*zU0hQ!CLkCAXkuYS{pn@&<{3$|lrjMyNcl;fPyt9yJu0dL?4!Zng(mZs~0RTH_nm8X?WN3R4; z;C7R=tl-cY6>4k^Ie6&<2KlwWVXg})!_?F;V*09Gb#p$9VeDsCw9APyAU+v+8*VJF zt#fN4C302TAI;R|nG;56Vzkq)v|b^=0?SS6$mbAJjx?4Yw4Zx=mmV2gP1dvDUs=ZZ zE$4U87PbfLX>@v}Sy1D0>XFOD2|wA(*M9k{!mEWXXyQ9%>1~&LxABHKPdN%%{=n5I zaV$zZ$*08C`m?9#0RfiWSJCu3*1HD!QVqr=AoxlxZ9DkUM}5SoPUqW%js~9(HsyK& zRf2tWqax*>cP~_BHM}_orn>`dbQ8Q5(Aab}Ub2|Yx7Ykhyf4QXs3ma|bZe8?pOA}Xzb84cLKpMwafwbd(*ECdL{0khuUW3b!WU-<}&QeKXah) z`qIXewQ!Hf0%kPu#`ACT1biC*nCZ%@4%c1$ho@}D{n(lv$D2c5iX}W;ld=D41xYuC zy@0m$R=%jWw?k$n2BtB4>E%zP(Ur5NKa>@dtXP5<9nLnTl~`}L_?vCnrKqWKj-;NF z(@snT6fiP@O>g127i3la1#JqXkS#xR+d4yYyIm}&_EHXL+c$72UtJ;&&%pADf>Wgq z7)yX-`1sqY#2DV&$*+mlV&~1L1|SUV1gg2fOFTum<_PTk zNM06Gg>gUPe2PEYH++dB;x zjK3TFos6teIq(Ux@_TaT?S3@p>XF9``Tao0wx<7O80bu)_ia%1k?_EMv-zh27iBdn zQ{iT{D*-=8JSTH3p!4I8kYk9XOFI)}7xSZ0{4E%%BgWr?r+{JL#t8+@n0yU_+Nh(R z_V}F0N{E8)dMb0$SmyKOppPEWMn7>EP+4OT5H!2WdT@vQ)jWn&`&rYB&kmP?DC@Ij zG!PW@^QvF07`u})>Ij@$xo-NP8;Fi&J}x*9JpYSZg{LRTI{o9-nVq#RI7NE?o6RRf@cI zSxmWyckj!Wq1uy9>HV1dCSNwV9!%P4Yu?VolE-G22rmmeLUaOh>KE~51E$}GD zn6Ks#y&IA2v?G4!W)3IBA1#7ijS;s{#-id^Tu-_U;lCs(kmWpk3*Qe@cv%kKI|sj+ zg82{=)IPa7;3&2*XjseNpWaCYhVWJ^sj5EkMjwYqt(lfs7_2K0(f2u)isd$Johpr~ zI~2`^tQT4y_xtPzH3RXNszuP;d8+5n9c@4XB@F(T>$^oNllWl~vfIf+SmA^6@#-V# zaz?^T>P&G;<{BQk_;{7|5^|yaa=O7PL4wa$gt2QxlI~)7HU6JyjG-5fQGkOvE-zej zA8(`^W<%=y1qoszdjIzOzU-FDq%LsWjY(V>l-8%eQ~`ce(&-=pSl5!T*(~ zb^f2N>im~Sfc}Rc+K||`etMd$Q+&t!dpj95iOhdPI}rR?c>eF89~K3i0B*P#IT9Tz zb@|K8d^r38Ojr}FCeiG+@_a^DZ%^N%BSC=$9W(gBu3>32v41EXWb zliXAeOrHC<`^vYcPRa$iDwv;Vvu=ZRc8mi^uGHfP1W{BPj!dd+<13;vA>Xo8)3KY{ zQ>G(7bU&uSs6wO?Hu=XFdYZb{%B}R@GdtV`2#qg)C9eiTjC-R4)+G#p9uH7nip>+x z!{mQ%l@oo~l3q0?ln-OLJzD=Nr_;)!cJD7MY64n`v~Z90Aw|t~>g8{~Pq_bO1bgea zU%>2Dv?$y5RKgW^+B3^hGC6>IQi)UelL)KuN_tse*jmw7?k@okmb zJ_T(_*_MFt-aUTRqM>#%(T=x)81U-R>s!f(xy=`;L4SL|oLsyIj4N{aZ!5e61e8pV zGWO2$ohy<ve8IaOwg*HCycAis z?kx@AxjMLEDVW1VZ)l(22mF%_mJy#4lsyoA4!S`(mE-hEQvU@&SI54(LNS@pE+N_n z5GBkWpv%S_#D^rvl?;!q8nS@?jqi8wx0bTJ(i$#5L=eD^jrICH*_KN>7Y>fE655jz z++j>A4JFO0uG+rH1#RV!{BNG<;+p)@0;>(R)=+6m|89zx#RoC=Va^(C#r zFHXQEq04`vYq?5qlR@x^fdM~Kj2&GpL*3y`%Xu=%>92#KBcGzgY-EwocR_R(&ebe_ z>K#I zBq4_PbvdR5yy5fd7(G-sW*|;4u=OzH!Q_>)E_!u3+f_043Jqj^4JZs?8D1lMX*lVh zo&*cdcYbB7ZckU`jl59vWFXL+8==!FcCivO*6NZDhV`TiE&JiQ)0HaTooOh8}N#FZ_}c z`m##J;J2HUPPn`$D#!>kM#wvM1c7M*iMY|cN6KQLsW0!CYYrJK7swo~`i(0?zc|qr z&(#fcNe0DD(732U=Q!ttfJau+t|D5k^$gXj1f0q8(Ia8+A9h3Z-z)^UqtlrEgEx$`;@H0}EsT@;rVyx_k+GDKU+78_6+xqNLn z)fQBhE@KMW`uWNmh-jsr?&qrdJI~%y?;#_v_QSPtahlp(>p>(18bzDVERS3Cyg5j+ z;7-!wkNML=S%5PWaHZ@Mr#L}{Y_$eLk?)lIs+$`Q?~s7Xh?mn_3wg^*vEm0(g?Su* z)>BHFP}Ge<@6Ymg4hgqdA43+bk8jdlv5PqKy7*sE7gF#>NB-pYGga46m9Vikh2gFs zJ!=$gN)?Lh3<=x5%aho-miY0jg{>a9V155y0dc><%)CH?Bs1cgd@cc3J3D zKX#38oVD{7cVhJ3IQZd3j@g`ffb9uy`RZ{x9sjh)dRlAJ2s`g`{O1z&U66oW?NiX+ zS(kL0;Ni6hE82|ERYPjyc+W!O!K={l8IN$}uKzXY_IJl81ugxJ07-AVA#go?8(^_d zOZv`2umvifM z+Mhv=BFv@lf2y9VSjg(MEHzAgN5_g*E_$>UM%8$94;dzGL%y|V5YgGlDpWDh9y_^D zVMsmdb>Cw+)6YFYWm7ihf~Y2`BBKq1Xk+dj07dW8oeX+AyPzWRYi z6ZI4wzD>K@_iQ(syBu|~Jh;>*zik|^CπZ+bxl^{{ho#`z68*?aSygd5SeoMrjV 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 m@a0NXYx2Ke%wBtYEhfHLMj-cQH0HMUEhDM;w)l USDC on other chains**, deposit USDC you - hold on another chain (Base Sepolia, Arbitrum Sepolia and the other testnets listed there) into - your Unified Balance (Circle Gateway), then **Authorize the agent on this chain**. When an - invoice needs more than your wallet on Arc holds, the agent can bring it to your wallet on Arc, - choosing which chains it comes from. It never sends it anywhere else, and your contract's limits - still apply. Each chain asks for its own gas token (for example test ETH on Base Sepolia). +- **USDC on other chains (optional):** in **Settings > USDC on other chains**, pick a chain (Base + Sepolia or Ethereum Sepolia), set how much the agent may move at once and per week, and confirm + in your wallet: your funding contract on that chain, its approval, and the agent's authorization + in your Unified Balance (Circle Gateway). A wallet that batches calls (MetaMask with its smart + account, EIP-5792) asks once; otherwise once per step. Your USDC stays in your wallet there. + When an invoice needs more than your wallet on Arc holds, the agent can move it into your + Unified Balance and bring it to your wallet on Arc, choosing which chains it comes from. It + never sends it anywhere else, and your limits still apply. Each chain asks for its own gas token + (test ETH on Base Sepolia and Ethereum Sepolia), for you once and for the agent's wallet. - **Telegram (optional):** in the dashboard, **Connect Telegram** gives a code to send to the embco bot. Then `/status` says how the agent is, `/pause` pauses payments while the agent keeps watching, and `/stop` turns the agent off and pauses the shop contract. Only the dashboard diff --git a/docs/contracts.md b/docs/contracts.md index 7d07393..be7e04c 100644 --- a/docs/contracts.md +++ b/docs/contracts.md @@ -50,3 +50,25 @@ succeeds, and revoking the USDC allowance stops every payment. | `Paused` / `Unpaused` | The agent or owner pauses; only the owner resumes | The dashboard reads these events from the chain to show suppliers and payments. + +## ShopFunding: the owner's USDC on other chains + +| Chain | `ShopFundingFactory` | +|---|---| +| Base Sepolia | [`0x69e31Af302Ee222204AA78099D39a2956F5C95d6`](https://sepolia.basescan.org/address/0x69e31Af302Ee222204AA78099D39a2956F5C95d6) | +| Ethereum Sepolia | [`0x69e31Af302Ee222204AA78099D39a2956F5C95d6`](https://sepolia.etherscan.io/address/0x69e31Af302Ee222204AA78099D39a2956F5C95d6) | + +`ShopFunding` is the same idea on a source chain of the owner's Unified Balance (Circle +Gateway). Each owner creates one from `ShopFundingFactory` on that chain and approves it, the way +they approve the shop contract on Arc. + +| Who | Can do | Cannot do | +|---|---|---| +| Agent | `fund(amount)`: take that much of the owner's USDC and deposit it into the owner's own Gateway balance, within a per-move and a weekly cap; pause | Send it anywhere else, change a limit, resume after a pause | +| Owner | Everything the agent can, with no limit; set the limits and the agent; resume | Transfer ownership | + +The money never stays in the contract: `fund` takes it from the owner's wallet and calls +Gateway's `depositFor(usdc, owner, amount)` in the same transaction, so the deposit always belongs +to the owner. From there the agent, which the owner authorizes as a delegate in Gateway, brings it +to the owner's wallet on Arc. Unit and fuzz tests, plus a fork test against Base Sepolia's real +GatewayWallet and USDC. diff --git a/services/circle/client.py b/services/circle/client.py index 620ecaf..5eafa4d 100644 --- a/services/circle/client.py +++ b/services/circle/client.py @@ -146,6 +146,16 @@ def get_wallet(self, wallet_id: str) -> CircleWallet: return CircleWallet(id=w["id"], address=w["address"], blockchain=w["blockchain"], wallet_set_id=w["walletSetId"]) + def wallet_on(self, address: str, blockchain: str) -> CircleWallet: + """The wallet with this address on this chain (one address, one wallet per chain).""" + wallets = self._request( + "GET", f"/v1/w3s/wallets?address={address}&blockchain={blockchain}")["wallets"] + if not wallets: + raise CircleError(f"no Circle wallet {address} on {blockchain}") + w = wallets[0] + return CircleWallet(id=w["id"], address=w["address"], blockchain=w["blockchain"], + wallet_set_id=w["walletSetId"]) + def execute_contract( self, wallet_id: str, diff --git a/services/shops/activity.py b/services/shops/activity.py index 5f9842e..545977e 100644 --- a/services/shops/activity.py +++ b/services/shops/activity.py @@ -163,7 +163,11 @@ def session_events(session) -> list[dict[str, Any]]: def _brought(moved: Mapping[str, Any]) -> str: - """A move from the owner's Unified Balance, in the owner's words.""" + """A move of the owner's funds, in the owner's words: a deposit into their Unified Balance, + or a spend from it to their wallet on Arc.""" + if moved.get("kind") == "deposit": + return (f"Moved {moved['amount']} USDC from your wallet on " + f"{moved['chain'].replace('_', ' ')} into your Unified Balance.") sources = ", ".join(f"{s['chain'].replace('_', ' ')} {s['amount']}" for s in moved["from"]) return (f"Brought {moved['arrives_on_arc']} USDC to your wallet on Arc from your Unified " f"Balance ({sources}).") diff --git a/services/shops/agent.py b/services/shops/agent.py index afc0c19..88ff6dc 100644 --- a/services/shops/agent.py +++ b/services/shops/agent.py @@ -225,9 +225,15 @@ def unified_view(owner_funds: OwnerFunds | None) -> dict[str, Any] | None: chains = owner_funds.chains() except (UnifiedBalanceError, ChainError, CircleError, PaymentSetupError) as error: return {"error": str(error)} + try: + wallets = [{"chain": w.chain, "in_wallet": str(w.in_wallet), "funding": w.funding, + "approved": str(w.approved), "agent_may_move": str(w.can_move)} + for w in owner_funds.in_wallets()] + except (ChainError, CircleError, PaymentSetupError) as error: + wallets = {"error": str(error)} return {"chains": [{"chain": c.chain, "available": str(c.confirmed), "arriving": str(c.pending), "agent_authorized": c.agent_can_spend} - for c in chains]} + for c in chains], "wallets": wallets} def run_shop( diff --git a/services/unified_balance/client.py b/services/unified_balance/client.py index bedafb1..81af31d 100644 --- a/services/unified_balance/client.py +++ b/services/unified_balance/client.py @@ -37,6 +37,16 @@ def agent_can_spend(self) -> bool: return self.delegate == "ready" +@dataclass(frozen=True) +class ChainFacts: + """A source chain as Circle's kit defines it.""" + + chain: str # the kit's name, e.g. Base_Sepolia + rpc: str # its public node + usdc: str # USDC's address there + circle: str # Circle wallets' name for it, e.g. BASE-SEPOLIA + + @dataclass(frozen=True) class Allocation: chain: str @@ -90,6 +100,10 @@ def balances(self, owner: str, agent: str) -> list[ChainFunds]: raise UnifiedBalanceError( "the Unified Balance Kit answered in an unknown form") from None + def chains(self) -> list[ChainFacts]: + return [ChainFacts(c["chain"], c["rpc"], c["usdc"], c["circle"]) + for c in self._call("chains", {})["chains"]] + def prepare(self, agent: str) -> list[str]: """Give the agent's Circle wallet the same address on every source chain.""" return self._call("prepare", {"agent": agent})["chains"] diff --git a/services/unified_balance/funding.py b/services/unified_balance/funding.py new file mode 100644 index 0000000..1c34d9b --- /dev/null +++ b/services/unified_balance/funding.py @@ -0,0 +1,118 @@ +"""The owner's USDC in their own wallets on other chains, and the ShopFunding contract there that +lets the agent move it into the owner's Gateway balance, within limits only the owner sets. + +Reads go to each chain's public node, as Circle's kit defines it. A move is the agent's Circle +wallet calling ShopFunding.fund on that chain, simulated first and sent with an idempotency key. +The contract only ever deposits for the owner, so the money stays the owner's. +""" + +import time +import uuid +from collections.abc import Callable, Mapping +from dataclasses import dataclass +from decimal import Decimal +from typing import Any + +from eth_abi import decode, encode +from eth_utils import keccak, to_checksum_address + +from services.circle import CircleClient, CircleError +from services.payments import ArcRpc, ChainError +from services.payments.encoding import USDC_DECIMALS, usdc_units +from services.unified_balance.client import ChainFacts + +# ShopFundingFactory on each source chain (contracts/src/ShopFundingFactory.sol); a chain without +# one is not offered. +FACTORIES: dict[str, str] = {"Base_Sepolia": "0x69e31Af302Ee222204AA78099D39a2956F5C95d6", + "Ethereum_Sepolia": "0x69e31Af302Ee222204AA78099D39a2956F5C95d6"} +FOLLOW_SECONDS = 90 # how long a move is followed before it is reported as sent +POLL_SECONDS = 3 + + +def _usdc(units: int) -> Decimal: + return Decimal(units).scaleb(-USDC_DECIMALS) + + +@dataclass(frozen=True) +class WalletFunds: + """The owner's USDC on one chain and how much of it the agent may move into Gateway now.""" + + chain: str + in_wallet: Decimal + funding: str | None # the owner's ShopFunding there; None until the owner creates it + approved: Decimal = Decimal(0) # what the owner lets it take + max_per_move: Decimal = Decimal(0) + left_this_week: Decimal = Decimal(0) + paused: bool = False + agent_is_set: bool = False + + @property + def can_move(self) -> Decimal: + if not self.funding or self.paused or not self.agent_is_set: + return Decimal(0) + return min(self.in_wallet, self.approved, self.max_per_move, self.left_this_week) + + +class OwnerWallets: + def __init__(self, circle: CircleClient, facts: Callable[[], list[ChainFacts]], *, + factories: Mapping[str, str] = FACTORIES, + node: Callable[[str], ArcRpc] = ArcRpc, + sleep: Callable[[float], None] = time.sleep) -> None: + self._circle = circle + self._facts = facts + self._factories = {chain: f for chain, f in factories.items() if f} + self._node = node + self._sleep = sleep + + def _chains(self) -> list[ChainFacts]: + return [c for c in self._facts() if c.chain in self._factories] + + def read(self, owner: str, agent: str) -> list[WalletFunds]: + return [self._read(c, owner, agent) for c in self._chains()] + + def _read(self, chain: ChainFacts, owner: str, agent: str) -> WalletFunds: + rpc = self._node(chain.rpc) + view = lambda to, sig, types=(), args=(): rpc.call( # noqa: E731 + to, keccak(text=sig)[:4] + encode(list(types), list(args))) + (in_wallet,) = decode(["uint256"], view(chain.usdc, "balanceOf(address)", + ["address"], [owner])) + (fundings,) = decode(["address[]"], view(self._factories[chain.chain], + "fundingsOf(address)", ["address"], [owner])) + if not fundings: + return WalletFunds(chain.chain, _usdc(in_wallet), None) + funding = to_checksum_address(fundings[-1]) + (approved,) = decode(["uint256"], view(chain.usdc, "allowance(address,address)", + ["address", "address"], [owner, funding])) + (per_move,) = decode(["uint256"], view(funding, "maxPerMove()")) + (left,) = decode(["uint256"], view(funding, "remainingThisWeek()")) + (paused,) = decode(["bool"], view(funding, "paused()")) + (its_agent,) = decode(["address"], view(funding, "agent()")) + return WalletFunds(chain.chain, _usdc(in_wallet), funding, _usdc(approved), + _usdc(per_move), _usdc(left), paused, + to_checksum_address(its_agent) == to_checksum_address(agent)) + + def deposit(self, owner: str, agent: str, chain: str, amount: Decimal) -> dict[str, Any]: + """Move `amount` of the owner's USDC on `chain` into the owner's Gateway balance.""" + facts = next((c for c in self._chains() if c.chain == chain), None) + if facts is None: + raise ChainError(f"no ShopFunding factory on {chain}; chains offered: " + f"{', '.join(self._factories) or 'none yet'}") + funds = self._read(facts, owner, agent) + if funds.funding is None: + raise ChainError(f"the owner has not set up {chain} yet (dashboard: USDC on other " + "chains)") + call = keccak(text="fund(uint256)")[:4] + encode(["uint256"], [usdc_units(amount)]) + self._node(facts.rpc).call(funds.funding, call, sender=agent) # reverts say why + wallet = self._circle.wallet_on(agent, facts.circle) + sent = self._circle.execute_contract(wallet.id, funds.funding, call, + idempotency_key=str(uuid.uuid4())) + waited = 0 + while not sent.finished and waited < FOLLOW_SECONDS: + self._sleep(POLL_SECONDS) + waited += POLL_SECONDS + sent = self._circle.get_transaction(sent.id) + if sent.finished and sent.state != "COMPLETE": + raise CircleError(f"the move on {chain} {sent.state.lower()}: " + f"{sent.error_reason or 'no reason given'}") + return {"chain": chain, "amount": str(amount), "state": sent.state.lower(), + "tx": sent.tx_hash or "", "circle_tx": sent.id} diff --git a/services/unified_balance/kit/unified.mjs b/services/unified_balance/kit/unified.mjs index 02f1973..bab11f7 100644 --- a/services/unified_balance/kit/unified.mjs +++ b/services/unified_balance/kit/unified.mjs @@ -103,7 +103,15 @@ async function spend(input, env) { return kit.spend(spendParams({ adapter, ...input })); } -export const COMMANDS = { balances, prepare, estimate, spend, chains: async () => ({ chains: sourceChains() }) }; +/** Each source chain as the kit defines it: its public node, its USDC and its Circle name. */ +export function chainFacts() { + return sourceChains().map((name) => { + const chain = resolveChainIdentifier(name); + return { chain: name, rpc: chain.rpcEndpoints[0], usdc: chain.usdcAddress, circle: toCircleBlockchain(name) }; + }); +} + +export const COMMANDS = { balances, prepare, estimate, spend, chains: async () => ({ chains: chainFacts() }) }; /** Run one command; the answer is plain data, or the kit's own error message. */ export async function run(command, input, env) { diff --git a/services/unified_balance/owner.py b/services/unified_balance/owner.py index 275c7a2..9c05586 100644 --- a/services/unified_balance/owner.py +++ b/services/unified_balance/owner.py @@ -4,16 +4,19 @@ from collections.abc import Sequence from dataclasses import dataclass +from decimal import Decimal from typing import Any from services.payments import Payer from services.unified_balance.client import Allocation, ChainFunds, UnifiedBalance +from services.unified_balance.funding import OwnerWallets, WalletFunds @dataclass class OwnerFunds: kit: UnifiedBalance payer: Payer # knows the shop contract (whose owner receives) and the agent's wallet + wallets: OwnerWallets | None = None # the owner's own wallets on other chains def _owner(self) -> str: return self.payer.chain.owner_of(self.payer.shop) @@ -30,3 +33,16 @@ def estimate(self, allocations: Sequence[Allocation]) -> Any: def bring(self, allocations: Sequence[Allocation]) -> Any: return self.kit.spend(self._owner(), self.payer.agent_address(), allocations) + + def in_wallets(self) -> list[WalletFunds]: + """The owner's USDC in their own wallets on other chains, and what the agent may move.""" + if self.wallets is None: + return [] + return self.wallets.read(self._owner(), self.payer.agent_address()) + + def deposit(self, chain: str, amount: Decimal) -> dict[str, Any]: + """Move the owner's USDC on `chain` into the owner's Gateway balance, through the + owner's ShopFunding there.""" + if self.wallets is None: + raise ValueError("the owner's wallets on other chains are not connected") + return self.wallets.deposit(self._owner(), self.payer.agent_address(), chain, amount) diff --git a/tests/test_unified_balance.py b/tests/test_unified_balance.py index 29f5c93..71c83ed 100644 --- a/tests/test_unified_balance.py +++ b/tests/test_unified_balance.py @@ -24,12 +24,15 @@ UnifiedBalance, UnifiedBalanceError, ) +from services.unified_balance.client import ChainFacts +from services.unified_balance.funding import OwnerWallets, WalletFunds NOW = datetime(2026, 10, 14, 9, 0, tzinfo=UTC) OWNER = "0x2471658CD7A7B10d4C92113B0777dA59317e839a" AGENT = "0xeAc91C9491F0D391c80f17C4267A3329Ad7Ba862" KEY, SECRET = "fake-circle-key", "fake-entity-secret" INVOICE = "ACC-PINV-2026-00017" +FUNDING = "0x" + "f1" * 20 FEES = [{"type": "provider", "token": "USDC", "amount": "0.0155"}, {"type": "gasFee", "token": "USDC", "amount": "0.048274"}, {"type": "forwarder", "token": "USDC", "amount": "0.014162"}] @@ -114,7 +117,7 @@ class Funds: authorized), 50 on Arbitrum Sepolia (not yet).""" def __init__(self): - self.brought = [] + self.brought, self.deposited = [], [] def chains(self): return [ChainFunds("Base_Sepolia", Decimal(320), Decimal(0), "ready"), @@ -128,6 +131,16 @@ def bring(self, allocations): self.brought.append(allocations) return {"txHash": "0x" + "2" * 64, "fees": FEES} + def in_wallets(self): + return [WalletFunds("Base_Sepolia", Decimal(400), FUNDING, Decimal(1000), Decimal(200), + Decimal(150), False, True), + WalletFunds("Ethereum_Sepolia", Decimal(80), None)] + + def deposit(self, chain, amount): + self.deposited.append((chain, amount)) + return {"chain": chain, "amount": str(amount), "state": "complete", + "tx": "0x" + "3" * 64, "circle_tx": "c1"} + def box(journal, owner_funds, *, can_pay=True, money=None): d = Decision(invoice=INVOICE, supplier="Adeyemi Foods Distribution Ltd", @@ -248,3 +261,65 @@ def chains(self): raise UnifiedBalanceError("the Unified Balance Kit did not run") assert unified_view(Down()) == {"error": "the Unified Balance Kit did not run"} + + +# ---- the owner's own wallets on other chains + + +def test_cash_position_shows_what_the_agent_may_deposit_on_each_chain(tmp_path): + with SqliteJournal(tmp_path / "j.sqlite3") as journal: + seen = json.loads(box(journal, Funds()).call("cash_position", {})) + assert seen["usdc_in_owner_wallets_on_other_chains"] == [ + {"chain": "Base_Sepolia", "in_wallet": "400", "you_may_deposit_now": "150"}, + {"chain": "Ethereum_Sepolia", "in_wallet": "80", + "you_may_deposit_now": "no: the owner sets up this chain in the dashboard"}] + + +def test_the_agent_deposits_what_it_chose_and_it_is_told(tmp_path): + funds = Funds() + with SqliteJournal(tmp_path / "j.sqlite3") as journal: + tools = box(journal, funds) + moved = json.loads(tools.call("deposit_to_gateway", { + "chain": "Base_Sepolia", "amount": "120.5", "reason": "00017 is due in 10 days."})) + assert funds.deposited == [("Base_Sepolia", Decimal("120.5"))] + assert moved["state"] == "complete" and moved["kind"] == "deposit" + session = Session(at=NOW, wakes=(Wake("round", "r"),), finished=True, funds_moved=(moved,)) + [line] = [e for e in activity.session_events(session) if e.get("tx")] + assert line["text"] == ("Moved 120.5 USDC from your wallet on Base Sepolia into your " + "Unified Balance.") + + +@pytest.mark.parametrize("amount", ["0", "-1", "ten", ""]) +def test_a_deposit_needs_an_amount_above_zero(tmp_path, amount): + with SqliteJournal(tmp_path / "j.sqlite3") as journal: + with pytest.raises(ToolError, match="above 0"): + box(journal, Funds()).call("deposit_to_gateway", + {"chain": "Base_Sepolia", "amount": amount, "reason": "r"}) + + +def test_no_deposit_while_payments_are_paused(tmp_path): + funds = Funds() + with SqliteJournal(tmp_path / "j.sqlite3") as journal: + with pytest.raises(ToolError, match="paused"): + box(journal, funds, can_pay=False).call( + "deposit_to_gateway", {"chain": "Base_Sepolia", "amount": "10", "reason": "r"}) + assert funds.deposited == [] + + +def test_what_the_agent_may_move_is_the_smallest_of_balance_approval_and_limits(): + w = WalletFunds("Base_Sepolia", Decimal(400), FUNDING, Decimal(1000), Decimal(200), + Decimal(150), False, True) + assert w.can_move == Decimal(150) + assert WalletFunds("Base_Sepolia", Decimal(400), FUNDING, Decimal(1000), Decimal(200), + Decimal(150), True, True).can_move == 0 # paused + assert WalletFunds("Base_Sepolia", Decimal(400), FUNDING, Decimal(1000), Decimal(200), + Decimal(150), False, False).can_move == 0 # another agent + assert WalletFunds("Base_Sepolia", Decimal(400), None).can_move == 0 + + +def test_a_chain_without_its_factory_is_not_offered(): + facts = lambda: [ChainFacts("Base_Sepolia", "https://node", "0x" + "11" * 20, "BASE-SEPOLIA")] # noqa: E731 + wallets = OwnerWallets(circle=None, facts=facts, factories={"Base_Sepolia": ""}) + assert wallets.read(OWNER, AGENT) == [] + with pytest.raises(Exception, match="no ShopFunding factory on Base_Sepolia"): + wallets.deposit(OWNER, AGENT, "Base_Sepolia", Decimal(1))