1+ // SPDX-License-Identifier: MIT
2+ pragma solidity ^ 0.8.20 ;
3+
4+ import {Script, console} from "forge-std/Script.sol " ;
5+ import {AgentPayyCore} from "../src/AgentPayyCore.sol " ;
6+ import {AttributionEngine} from "../src/AttributionEngine.sol " ;
7+ import {ReceiptManager} from "../src/ReceiptManager.sol " ;
8+ import {APIRegistry} from "../src/APIRegistry.sol " ;
9+ import {GovernanceTimelock} from "../src/GovernanceTimelock.sol " ;
10+
11+ /**
12+ * @title DeploySimple
13+ * @notice Simple deployment script for Base network - no Factory
14+ * @dev Deploys core AgentPayy contracts directly
15+ */
16+ contract DeploySimple is Script {
17+ function run () public {
18+ uint256 deployerPrivateKey = vm.envUint ("PRIVATE_KEY " );
19+ address gnosisSafe = vm.envAddress ("GNOSIS_SAFE_ADDRESS " );
20+
21+ console.log ("=== AgentPayy Simple Deployment === " );
22+ console.log ("Network: Base (Chain ID: 8453) " );
23+ console.log ("Deployer: " , vm.addr (deployerPrivateKey));
24+ console.log ("Gnosis Safe: " , gnosisSafe);
25+ console.log ("Treasury: Same as Gnosis Safe " );
26+
27+ require (gnosisSafe != address (0 ), "GNOSIS_SAFE_ADDRESS must be set " );
28+ require (vm.addr (deployerPrivateKey).balance > 0.005 ether, "Need at least 0.005 ETH for deployment " );
29+
30+ vm.startBroadcast (deployerPrivateKey);
31+
32+ // 1. Deploy governance timelock first
33+ console.log ("\n=== Deploying Governance Timelock === " );
34+ address [] memory proposers = new address [](1 );
35+ address [] memory executors = new address [](1 );
36+ proposers[0 ] = gnosisSafe;
37+ executors[0 ] = gnosisSafe;
38+
39+ GovernanceTimelock timelock = new GovernanceTimelock (
40+ 24 hours, // 24h delay
41+ proposers,
42+ executors,
43+ gnosisSafe, // admin
44+ gnosisSafe // gnosis safe
45+ );
46+ console.log ("GovernanceTimelock deployed: " , address (timelock));
47+
48+ // 2. Deploy core contracts
49+ console.log ("\n=== Deploying Core Contracts === " );
50+
51+ AgentPayyCore core = new AgentPayyCore (gnosisSafe); // treasury = gnosis safe
52+ console.log ("AgentPayyCore deployed: " , address (core));
53+
54+ AttributionEngine attribution = new AttributionEngine (address (core), gnosisSafe);
55+ console.log ("AttributionEngine deployed: " , address (attribution));
56+
57+ ReceiptManager receipts = new ReceiptManager (address (timelock));
58+ console.log ("ReceiptManager deployed: " , address (receipts));
59+
60+ APIRegistry registry = new APIRegistry ();
61+ console.log ("APIRegistry deployed: " , address (registry));
62+
63+ // 3. Link contracts
64+ console.log ("\n=== Linking Contracts === " );
65+ core.setAttributionEngine (address (attribution));
66+ core.setReceiptManager (address (receipts));
67+
68+ // 4. Transfer ownership to timelock
69+ console.log ("\n=== Setting Up Governance === " );
70+ core.transferOwnership (address (timelock));
71+ attribution.transferOwnership (address (timelock));
72+ registry.transferOwnership (address (timelock));
73+
74+ vm.stopBroadcast ();
75+
76+ console.log ("\n=== DEPLOYMENT SUCCESSFUL === " );
77+ console.log ("AgentPayyCore: " , address (core));
78+ console.log ("AttributionEngine: " , address (attribution));
79+ console.log ("ReceiptManager: " , address (receipts));
80+ console.log ("APIRegistry: " , address (registry));
81+ console.log ("GovernanceTimelock: " , address (timelock));
82+ console.log ("Treasury/Gnosis Safe: " , gnosisSafe);
83+
84+ // Generate .env updates
85+ console.log ("\n=== Add to your .env file === " );
86+ console.log ("AGENTPAYY_BASE_CORE= " , vm.toString (address (core)));
87+ console.log ("AGENTPAYY_BASE_ATTRIBUTION= " , vm.toString (address (attribution)));
88+ console.log ("AGENTPAYY_BASE_RECEIPTS= " , vm.toString (address (receipts)));
89+ console.log ("AGENTPAYY_BASE_REGISTRY= " , vm.toString (address (registry)));
90+ console.log ("AGENTPAYY_BASE_TIMELOCK= " , vm.toString (address (timelock)));
91+
92+ // Generate SDK config
93+ console.log ("\n=== SDK Configuration === " );
94+ console.log ("Add this to your SDK contracts file: " );
95+ console.log ("{ " );
96+ console.log (' "base": { ' );
97+ console.log (' "agentPayyCore": " ' , vm.toString (address (core)), '", ' );
98+ console.log (' "attributionEngine": " ' , vm.toString (address (attribution)), '", ' );
99+ console.log (' "receiptManager": " ' , vm.toString (address (receipts)), '", ' );
100+ console.log (' "apiRegistry": " ' , vm.toString (address (registry)), '" ' );
101+ console.log (" } " );
102+ console.log ("} " );
103+
104+ // Verification commands
105+ console.log ("\n=== Verification Commands === " );
106+ console.log ("forge verify-contract " , vm.toString (address (core)), "src/AgentPayyCore.sol:AgentPayyCore --chain-id 8453 " );
107+ console.log ("forge verify-contract " , vm.toString (address (attribution)), "src/AttributionEngine.sol:AttributionEngine --chain-id 8453 " );
108+ console.log ("forge verify-contract " , vm.toString (address (receipts)), "src/ReceiptManager.sol:ReceiptManager --chain-id 8453 " );
109+ console.log ("forge verify-contract " , vm.toString (address (registry)), "src/APIRegistry.sol:APIRegistry --chain-id 8453 " );
110+ console.log ("forge verify-contract " , vm.toString (address (timelock)), "src/GovernanceTimelock.sol:GovernanceTimelock --chain-id 8453 " );
111+
112+ console.log ("\nAgentPayy is live on Base! " );
113+ }
114+ }
0 commit comments