@virtuals-protocol/acp-node-v2 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -9
- package/package.json +4 -2
- package/dist/examples/buyer-fund.d.ts +0 -2
- package/dist/examples/buyer-fund.d.ts.map +0 -1
- package/dist/examples/buyer-fund.js +0 -51
- package/dist/examples/buyer-fund.js.map +0 -1
- package/dist/examples/buyer-llm.d.ts +0 -2
- package/dist/examples/buyer-llm.d.ts.map +0 -1
- package/dist/examples/buyer-llm.js +0 -92
- package/dist/examples/buyer-llm.js.map +0 -1
- package/dist/examples/buyer.d.ts +0 -2
- package/dist/examples/buyer.d.ts.map +0 -1
- package/dist/examples/buyer.js +0 -66
- package/dist/examples/buyer.js.map +0 -1
- package/dist/examples/seller-fund.d.ts +0 -2
- package/dist/examples/seller-fund.d.ts.map +0 -1
- package/dist/examples/seller-fund.js +0 -48
- package/dist/examples/seller-fund.js.map +0 -1
- package/dist/examples/seller-llm.d.ts +0 -2
- package/dist/examples/seller-llm.d.ts.map +0 -1
- package/dist/examples/seller-llm.js +0 -85
- package/dist/examples/seller-llm.js.map +0 -1
- package/dist/examples/seller.d.ts +0 -2
- package/dist/examples/seller.d.ts.map +0 -1
- package/dist/examples/seller.js +0 -50
- package/dist/examples/seller.js.map +0 -1
- package/dist/examples-local/buyer-fund.d.ts +0 -2
- package/dist/examples-local/buyer-fund.d.ts.map +0 -1
- package/dist/examples-local/buyer-fund.js +0 -69
- package/dist/examples-local/buyer-fund.js.map +0 -1
- package/dist/examples-local/buyer-llm.d.ts +0 -2
- package/dist/examples-local/buyer-llm.d.ts.map +0 -1
- package/dist/examples-local/buyer-llm.js +0 -112
- package/dist/examples-local/buyer-llm.js.map +0 -1
- package/dist/examples-local/buyer-search.d.ts +0 -2
- package/dist/examples-local/buyer-search.d.ts.map +0 -1
- package/dist/examples-local/buyer-search.js +0 -72
- package/dist/examples-local/buyer-search.js.map +0 -1
- package/dist/examples-local/buyer.d.ts +0 -2
- package/dist/examples-local/buyer.d.ts.map +0 -1
- package/dist/examples-local/buyer.js +0 -65
- package/dist/examples-local/buyer.js.map +0 -1
- package/dist/examples-local/seller-dumb.d.ts +0 -2
- package/dist/examples-local/seller-dumb.d.ts.map +0 -1
- package/dist/examples-local/seller-dumb.js +0 -42
- package/dist/examples-local/seller-dumb.js.map +0 -1
- package/dist/examples-local/seller-fund.d.ts +0 -2
- package/dist/examples-local/seller-fund.d.ts.map +0 -1
- package/dist/examples-local/seller-fund.js +0 -46
- package/dist/examples-local/seller-fund.js.map +0 -1
- package/dist/examples-local/seller-llm.d.ts +0 -2
- package/dist/examples-local/seller-llm.d.ts.map +0 -1
- package/dist/examples-local/seller-llm.js +0 -84
- package/dist/examples-local/seller-llm.js.map +0 -1
- package/dist/examples-local/seller.d.ts +0 -2
- package/dist/examples-local/seller.d.ts.map +0 -1
- package/dist/examples-local/seller.js +0 -50
- package/dist/examples-local/seller.js.map +0 -1
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ The Agent Commerce Protocol (ACP) Node SDK v2 is a ground-up rewrite of the ACP
|
|
|
42
42
|
|
|
43
43
|
## Prerequisites
|
|
44
44
|
|
|
45
|
-
Register your agent with the [Service Registry](https://app.virtuals.io/acp/join) before interacting with other agents.
|
|
45
|
+
Register your agent with the [Service Registry](https://app.virtuals.io/acp/join) before interacting with other agents. You can find your `walletId` and add a signer under the **Signers** tab on your agent's page on [app.virtuals.io](https://app.virtuals.io). Click **+ Add Signer** to generate a signer private key, then use **Copy Key** to retrieve it.
|
|
46
46
|
|
|
47
47
|
## Installation
|
|
48
48
|
|
|
@@ -57,16 +57,16 @@ Peer dependencies: `viem`, `@account-kit/infra`, `@account-kit/smart-contracts`,
|
|
|
57
57
|
### Buyer
|
|
58
58
|
|
|
59
59
|
```typescript
|
|
60
|
-
import { AcpAgent,
|
|
60
|
+
import { AcpAgent, PrivyAlchemyEvmProviderAdapter, AssetToken, AgentSort } from "@virtuals-protocol/acp-node-v2";
|
|
61
61
|
import type { JobSession, JobRoomEntry } from "@virtuals-protocol/acp-node-v2";
|
|
62
62
|
import { baseSepolia } from "@account-kit/infra";
|
|
63
63
|
|
|
64
64
|
async function main() {
|
|
65
65
|
const buyer = await AcpAgent.create({
|
|
66
|
-
provider: await
|
|
66
|
+
provider: await PrivyAlchemyEvmProviderAdapter.create({
|
|
67
67
|
walletAddress: "0xBuyerWalletAddress",
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
walletId: "wallet-id",
|
|
69
|
+
signerPrivateKey: "signer-private-key",
|
|
70
70
|
chains: [baseSepolia],
|
|
71
71
|
}),
|
|
72
72
|
});
|
|
@@ -112,16 +112,16 @@ main().catch(console.error);
|
|
|
112
112
|
### Seller
|
|
113
113
|
|
|
114
114
|
```typescript
|
|
115
|
-
import { AcpAgent,
|
|
115
|
+
import { AcpAgent, PrivyAlchemyEvmProviderAdapter, AssetToken } from "@virtuals-protocol/acp-node-v2";
|
|
116
116
|
import type { JobSession, JobRoomEntry } from "@virtuals-protocol/acp-node-v2";
|
|
117
117
|
import { baseSepolia } from "@account-kit/infra";
|
|
118
118
|
|
|
119
119
|
async function main() {
|
|
120
120
|
const seller = await AcpAgent.create({
|
|
121
|
-
provider: await
|
|
121
|
+
provider: await PrivyAlchemyEvmProviderAdapter.create({
|
|
122
122
|
walletAddress: "0xSellerWalletAddress",
|
|
123
|
-
|
|
124
|
-
|
|
123
|
+
walletId: "wallet-id",
|
|
124
|
+
signerPrivateKey: "signer-private-key",
|
|
125
125
|
chains: [baseSepolia],
|
|
126
126
|
}),
|
|
127
127
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@virtuals-protocol/acp-node-v2",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
"dev": "tsx watch src/index.ts",
|
|
11
11
|
"start": "node dist/index.js"
|
|
12
12
|
},
|
|
13
|
-
"files": [
|
|
13
|
+
"files": [
|
|
14
|
+
"dist"
|
|
15
|
+
],
|
|
14
16
|
"author": "Zuhwa",
|
|
15
17
|
"license": "ISC",
|
|
16
18
|
"description": "",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buyer-fund.d.ts","sourceRoot":"","sources":["../../src/examples/buyer-fund.ts"],"names":[],"mappings":""}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { AcpAgent } from "../acpAgent";
|
|
2
|
-
import { ACP_CONTRACT_ADDRESSES } from "../core/constants";
|
|
3
|
-
import { baseSepolia, bscTestnet } from "@account-kit/infra";
|
|
4
|
-
import { SocketTransport, PrivyAlchemyEvmProviderAdapter, } from "../index";
|
|
5
|
-
const SELLER_ADDRESS = "0xSellerAddress";
|
|
6
|
-
async function main() {
|
|
7
|
-
const buyer = await AcpAgent.create({
|
|
8
|
-
contractAddresses: ACP_CONTRACT_ADDRESSES,
|
|
9
|
-
provider: await PrivyAlchemyEvmProviderAdapter.create({
|
|
10
|
-
walletAddress: "0xBuyerWalletAddress",
|
|
11
|
-
walletId: "your-privy-wallet-id",
|
|
12
|
-
chains: [baseSepolia, bscTestnet],
|
|
13
|
-
signerPrivateKey: "your-privy-signer-private-key",
|
|
14
|
-
}),
|
|
15
|
-
transport: new SocketTransport(),
|
|
16
|
-
});
|
|
17
|
-
const buyerAddress = await buyer.getAddress();
|
|
18
|
-
console.log(`[buyer] address: ${buyerAddress}`);
|
|
19
|
-
buyer.on("entry", async (session, entry) => {
|
|
20
|
-
console.log("entry", entry.kind);
|
|
21
|
-
if (entry.kind === "system") {
|
|
22
|
-
switch (entry.event.type) {
|
|
23
|
-
case "budget.set":
|
|
24
|
-
console.log(`[buyer] budget set on job ${session.jobId}, funding…`);
|
|
25
|
-
await session.sendMessage("Looks good, funding now.");
|
|
26
|
-
await session.fund();
|
|
27
|
-
console.log(`[buyer] funded job ${session.jobId}`);
|
|
28
|
-
break;
|
|
29
|
-
case "job.submitted":
|
|
30
|
-
console.log(`[buyer] deliverable received on job ${session.jobId}, completing…`);
|
|
31
|
-
await session.complete("Evaluated");
|
|
32
|
-
console.log(`[buyer] completed job ${session.jobId}`);
|
|
33
|
-
await buyer.stop();
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (entry.kind === "message") {
|
|
38
|
-
console.log(`[buyer] [job ${session.jobId}] ${entry.from}: ${entry.content}`);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
await buyer.start();
|
|
42
|
-
const jobId = await buyer.createFundTransferJob(baseSepolia.id, {
|
|
43
|
-
providerAddress: SELLER_ADDRESS,
|
|
44
|
-
evaluatorAddress: buyerAddress,
|
|
45
|
-
expiredAt: Math.floor(Date.now() / 1000) + 3600,
|
|
46
|
-
description: "Example job from SDK",
|
|
47
|
-
});
|
|
48
|
-
console.log(`[buyer] created job ${jobId} — waiting for seller…`);
|
|
49
|
-
}
|
|
50
|
-
main().catch(console.error);
|
|
51
|
-
//# sourceMappingURL=buyer-fund.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buyer-fund.js","sourceRoot":"","sources":["../../src/examples/buyer-fund.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAGL,eAAe,EACf,8BAA8B,GAC/B,MAAM,UAAU,CAAC;AAGlB,MAAM,cAAc,GAAY,iBAAiB,CAAC;AAElD,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAClC,iBAAiB,EAAE,sBAAsB;QACzC,QAAQ,EAAE,MAAM,8BAA8B,CAAC,MAAM,CAAC;YACpD,aAAa,EAAE,sBAAsB;YACrC,QAAQ,EAAE,sBAAsB;YAChC,MAAM,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;YACjC,gBAAgB,EAAE,+BAA+B;SAClD,CAAC;QACF,SAAS,EAAE,IAAI,eAAe,EAAE;KACjC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,oBAAoB,YAAY,EAAE,CAAC,CAAC;IAEhD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,OAAmB,EAAE,KAAmB,EAAE,EAAE;QACnE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,QAAQ,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACzB,KAAK,YAAY;oBACf,OAAO,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,KAAK,YAAY,CAAC,CAAC;oBACpE,MAAM,OAAO,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;oBACtD,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBACnD,MAAM;gBAER,KAAK,eAAe;oBAClB,OAAO,CAAC,GAAG,CACT,uCAAuC,OAAO,CAAC,KAAK,eAAe,CACpE,CAAC;oBACF,MAAM,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBACtD,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,MAAM;YACV,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CACT,gBAAgB,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CACjE,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IAEpB,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,qBAAqB,CAAC,WAAW,CAAC,EAAE,EAAE;QAC9D,eAAe,EAAE,cAAc;QAC/B,gBAAgB,EAAE,YAAY;QAC9B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI;QAC/C,WAAW,EAAE,sBAAsB;KACpC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,wBAAwB,CAAC,CAAC;AACpE,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buyer-llm.d.ts","sourceRoot":"","sources":["../../src/examples/buyer-llm.ts"],"names":[],"mappings":""}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import Anthropic from "@anthropic-ai/sdk";
|
|
2
|
-
import { AcpAgent } from "../acpAgent";
|
|
3
|
-
import { ACP_CONTRACT_ADDRESSES } from "../core/constants";
|
|
4
|
-
import { baseSepolia } from "@account-kit/infra";
|
|
5
|
-
import { SocketTransport } from "../events/socketTransport";
|
|
6
|
-
import dotenv from "dotenv";
|
|
7
|
-
import { PrivyAlchemyEvmProviderAdapter } from "../providers/evm/privyAlchemyEvmProviderAdapter";
|
|
8
|
-
dotenv.config();
|
|
9
|
-
const SELLER_ADDRESS = "0xSellerAddress";
|
|
10
|
-
const SYSTEM_PROMPT = `You are a buyer agent. You want to buy a funny cat meme.
|
|
11
|
-
Rules: When the seller asks what you want, sendMessage describing your requirement (e.g. "I want a funny cat meme") and ask for a price. Fund any budget under 0.1 USDC. Try to negotation for price below 0.07 USDC. Complete any deliverable. Keep all text under 10 words.`;
|
|
12
|
-
const anthropic = new Anthropic();
|
|
13
|
-
function toAnthropicTools(tools) {
|
|
14
|
-
return tools.map((t) => ({
|
|
15
|
-
name: t.name,
|
|
16
|
-
description: t.description,
|
|
17
|
-
input_schema: {
|
|
18
|
-
type: "object",
|
|
19
|
-
properties: Object.fromEntries(t.parameters.map((p) => [
|
|
20
|
-
p.name,
|
|
21
|
-
{ type: p.type, description: p.description },
|
|
22
|
-
])),
|
|
23
|
-
required: t.parameters
|
|
24
|
-
.filter((p) => p.required !== false)
|
|
25
|
-
.map((p) => p.name),
|
|
26
|
-
},
|
|
27
|
-
}));
|
|
28
|
-
}
|
|
29
|
-
function toAnthropicMessages(raw) {
|
|
30
|
-
const msgs = [];
|
|
31
|
-
for (const m of raw) {
|
|
32
|
-
const role = m.role === "system" ? "user" : m.role;
|
|
33
|
-
const last = msgs[msgs.length - 1];
|
|
34
|
-
if (last && last.role === role) {
|
|
35
|
-
last.content += "\n" + m.content;
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
msgs.push({ role, content: m.content });
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return msgs;
|
|
42
|
-
}
|
|
43
|
-
async function main() {
|
|
44
|
-
const buyer = await AcpAgent.create({
|
|
45
|
-
contractAddresses: ACP_CONTRACT_ADDRESSES,
|
|
46
|
-
provider: await PrivyAlchemyEvmProviderAdapter.create({
|
|
47
|
-
walletAddress: "0xBuyerWalletAddress",
|
|
48
|
-
walletId: "your-privy-wallet-id",
|
|
49
|
-
chains: [baseSepolia],
|
|
50
|
-
signerPrivateKey: "your-privy-signer-private-key",
|
|
51
|
-
}),
|
|
52
|
-
transport: new SocketTransport(),
|
|
53
|
-
});
|
|
54
|
-
const buyerAddress = await buyer.getAddress();
|
|
55
|
-
console.log(`[buyer-llm] address: ${buyerAddress}`);
|
|
56
|
-
buyer.on("entry", async (session, entry) => {
|
|
57
|
-
if (entry.kind === "system") {
|
|
58
|
-
console.log(`[JobID: ${session.jobId}][system] ${entry.event.type}`);
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
console.log(`[JobID: ${session.jobId}][seller-llm] ${entry.content}`);
|
|
62
|
-
}
|
|
63
|
-
const tools = toAnthropicTools(session.availableTools());
|
|
64
|
-
const messages = toAnthropicMessages(await session.toMessages());
|
|
65
|
-
console.log("messages", messages);
|
|
66
|
-
if (messages.length === 0)
|
|
67
|
-
return;
|
|
68
|
-
const response = await anthropic.messages.create({
|
|
69
|
-
model: "claude-sonnet-4-20250514",
|
|
70
|
-
max_tokens: 1024,
|
|
71
|
-
system: SYSTEM_PROMPT,
|
|
72
|
-
messages,
|
|
73
|
-
tools,
|
|
74
|
-
tool_choice: { type: "any" },
|
|
75
|
-
});
|
|
76
|
-
const toolBlock = response.content.find((b) => b.type === "tool_use");
|
|
77
|
-
if (toolBlock && toolBlock.type === "tool_use") {
|
|
78
|
-
console.log(`[JobID: ${session.jobId}][buyer-llm] calling ${toolBlock.name}(${JSON.stringify(toolBlock.input)})`);
|
|
79
|
-
await session.executeTool(toolBlock.name, toolBlock.input);
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
await buyer.start();
|
|
83
|
-
const jobId = await buyer.createJob(baseSepolia.id, {
|
|
84
|
-
providerAddress: SELLER_ADDRESS,
|
|
85
|
-
evaluatorAddress: buyerAddress,
|
|
86
|
-
expiredAt: Math.floor(Date.now() / 1000) + 3600,
|
|
87
|
-
description: "I want to buy a funny meme",
|
|
88
|
-
});
|
|
89
|
-
console.log(`[buyer-llm] created job ${jobId} — waiting for seller…`);
|
|
90
|
-
}
|
|
91
|
-
main().catch(console.error);
|
|
92
|
-
//# sourceMappingURL=buyer-llm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buyer-llm.js","sourceRoot":"","sources":["../../src/examples/buyer-llm.ts"],"names":[],"mappings":"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"}
|
package/dist/examples/buyer.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buyer.d.ts","sourceRoot":"","sources":["../../src/examples/buyer.ts"],"names":[],"mappings":""}
|
package/dist/examples/buyer.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { AcpAgent } from "../acpAgent";
|
|
2
|
-
import { AssetToken } from "../core/assetToken";
|
|
3
|
-
import { baseSepolia } from "@account-kit/infra";
|
|
4
|
-
import { AlchemyEvmProviderAdapter } from "../providers/evm/alchemyEvmProviderAdapter";
|
|
5
|
-
import { SocketTransport } from "../events/socketTransport";
|
|
6
|
-
import { AgentSort } from "../index";
|
|
7
|
-
const chain = baseSepolia;
|
|
8
|
-
async function main() {
|
|
9
|
-
const buyer = await AcpAgent.create({
|
|
10
|
-
provider: await AlchemyEvmProviderAdapter.create({
|
|
11
|
-
walletAddress: "0xBuyerWalletAddress",
|
|
12
|
-
privateKey: "0xBuyerPrivateKey",
|
|
13
|
-
entityId: 1,
|
|
14
|
-
chains: [chain],
|
|
15
|
-
}),
|
|
16
|
-
transport: new SocketTransport(),
|
|
17
|
-
});
|
|
18
|
-
const buyerAddress = await buyer.getAddress();
|
|
19
|
-
console.log(`[buyer] address: ${buyerAddress}`);
|
|
20
|
-
buyer.on("entry", async (session, entry) => {
|
|
21
|
-
if (entry.kind === "system") {
|
|
22
|
-
switch (entry.event.type) {
|
|
23
|
-
case "budget.set":
|
|
24
|
-
console.log(`[buyer] budget set on job ${session.jobId}, funding…`);
|
|
25
|
-
await session.sendMessage("Looks good, funding now.");
|
|
26
|
-
await session.fund(AssetToken.usdc(0.1, session.chainId));
|
|
27
|
-
console.log(`[buyer] funded job ${session.jobId}`);
|
|
28
|
-
break;
|
|
29
|
-
case "job.submitted":
|
|
30
|
-
console.log(`[buyer] deliverable received on job ${session.jobId}, completing…`);
|
|
31
|
-
await session.complete("Evaluated");
|
|
32
|
-
console.log(`[buyer] completed job ${session.jobId}`);
|
|
33
|
-
await buyer.stop();
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (entry.kind === "message") {
|
|
38
|
-
console.log(`[buyer] [job ${session.jobId}] ${entry.from}: ${entry.content}`);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
await buyer.start();
|
|
42
|
-
// 1. Browse for agents
|
|
43
|
-
const agents = await buyer.browseAgents("<search query>", {
|
|
44
|
-
sortBy: [AgentSort.SUCCESSFUL_JOB_COUNT, AgentSort.SUCCESS_RATE],
|
|
45
|
-
topK: 5,
|
|
46
|
-
showHidden: true,
|
|
47
|
-
});
|
|
48
|
-
const agent = agents[0];
|
|
49
|
-
if (!agent) {
|
|
50
|
-
console.error("No agents found matching the search query");
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
// 2. Select an offering
|
|
54
|
-
const offering = agent.offerings[0];
|
|
55
|
-
if (!offering) {
|
|
56
|
-
console.error("Agent has no offerings");
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
// 3. Create job from offering (validates requirement, creates job, sends first message)
|
|
60
|
-
// expiredAt is auto-calculated from offering.slaMinutes
|
|
61
|
-
const jobId = await buyer.createJobFromOffering(chain.id, offering, agent.walletAddress, { "<your-schema-key>": "<your-schema-value>" }, // requirement data matching offering schema
|
|
62
|
-
{ evaluatorAddress: buyerAddress });
|
|
63
|
-
console.log(`[buyer] created job ${jobId} — waiting for seller…`);
|
|
64
|
-
}
|
|
65
|
-
main().catch(console.error);
|
|
66
|
-
//# sourceMappingURL=buyer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buyer.js","sourceRoot":"","sources":["../../src/examples/buyer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seller-fund.d.ts","sourceRoot":"","sources":["../../src/examples/seller-fund.ts"],"names":[],"mappings":""}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { AcpAgent } from "../acpAgent";
|
|
2
|
-
import { AssetToken } from "../core/assetToken";
|
|
3
|
-
import { baseSepolia } from "@account-kit/infra";
|
|
4
|
-
import { AlchemyEvmProviderAdapter } from "../providers/evm/alchemyEvmProviderAdapter";
|
|
5
|
-
async function main() {
|
|
6
|
-
const seller = await AcpAgent.create({
|
|
7
|
-
provider: await AlchemyEvmProviderAdapter.create({
|
|
8
|
-
walletAddress: "0xSellerWalletAddress",
|
|
9
|
-
privateKey: "0xSellerPrivateKey",
|
|
10
|
-
entityId: 1,
|
|
11
|
-
chains: [baseSepolia],
|
|
12
|
-
}),
|
|
13
|
-
});
|
|
14
|
-
const sellerAddress = (await seller.getAddress());
|
|
15
|
-
console.log(`[seller] address: ${sellerAddress}`);
|
|
16
|
-
seller.on("entry", async (session, entry) => {
|
|
17
|
-
if (entry.kind === "system") {
|
|
18
|
-
switch (entry.event.type) {
|
|
19
|
-
case "job.created":
|
|
20
|
-
console.log(`[seller] new job ${session.jobId}`);
|
|
21
|
-
break;
|
|
22
|
-
case "job.funded":
|
|
23
|
-
console.log(`[seller] job ${session.jobId} funded, delivering…`);
|
|
24
|
-
await session.sendMessage("Got the funds. Working on it now.");
|
|
25
|
-
await session.submit("Test deliverable");
|
|
26
|
-
console.log(`[seller] submitted deliverable on job ${session.jobId}`);
|
|
27
|
-
break;
|
|
28
|
-
case "job.completed":
|
|
29
|
-
console.log(`[seller] job ${session.jobId} completed!`);
|
|
30
|
-
break;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
// Handle the buyer's first message containing the requirement
|
|
34
|
-
if (entry.kind === "message" &&
|
|
35
|
-
entry.contentType === "requirement" &&
|
|
36
|
-
session.status === "open") {
|
|
37
|
-
const requirement = JSON.parse(entry.content);
|
|
38
|
-
console.log(`[seller] received requirement for "${requirement.name}":`, requirement.requirement);
|
|
39
|
-
await session.setBudgetWithFundRequest(AssetToken.usdc(0.1, session.chainId), AssetToken.usdc(0.022, session.chainId), sellerAddress);
|
|
40
|
-
console.log(`[seller] set budget on job ${session.jobId}`);
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
await seller.start(() => {
|
|
44
|
-
console.log("[seller callback] listening for jobs…");
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
main().catch(console.error);
|
|
48
|
-
//# sourceMappingURL=seller-fund.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seller-fund.js","sourceRoot":"","sources":["../../src/examples/seller-fund.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AAGvF,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,MAAM,yBAAyB,CAAC,MAAM,CAAC;YAC/C,aAAa,EAAE,uBAAuB;YACtC,UAAU,EAAE,oBAAoB;YAChC,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC,WAAW,CAAC;SACtB,CAAC;KACH,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAkB,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,qBAAqB,aAAa,EAAE,CAAC,CAAC;IAElD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,OAAmB,EAAE,KAAmB,EAAE,EAAE;QACpE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,QAAQ,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACzB,KAAK,aAAa;oBAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBACjD,MAAM;gBAER,KAAK,YAAY;oBACf,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,KAAK,sBAAsB,CAAC,CAAC;oBACjE,MAAM,OAAO,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;oBAC/D,MAAM,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;oBACzC,OAAO,CAAC,GAAG,CAAC,yCAAyC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBACtE,MAAM;gBAER,KAAK,eAAe;oBAClB,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,KAAK,aAAa,CAAC,CAAC;oBACxD,MAAM;YACV,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,IACE,KAAK,CAAC,IAAI,KAAK,SAAS;YACxB,KAAK,CAAC,WAAW,KAAK,aAAa;YACnC,OAAO,CAAC,MAAM,KAAK,MAAM,EACzB,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CACT,sCAAsC,WAAW,CAAC,IAAI,IAAI,EAC1D,WAAW,CAAC,WAAW,CACxB,CAAC;YACF,MAAM,OAAO,CAAC,wBAAwB,CACpC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,EACrC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,EACvC,aAAa,CACd,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,8BAA8B,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seller-llm.d.ts","sourceRoot":"","sources":["../../src/examples/seller-llm.ts"],"names":[],"mappings":""}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import Anthropic from "@anthropic-ai/sdk";
|
|
2
|
-
import { AcpAgent } from "../acpAgent";
|
|
3
|
-
import { ACP_CONTRACT_ADDRESSES } from "../core/constants";
|
|
4
|
-
import { baseSepolia } from "@account-kit/infra";
|
|
5
|
-
import { AlchemyEvmProviderAdapter } from "../providers/evm/alchemyEvmProviderAdapter";
|
|
6
|
-
import { SocketTransport } from "../events/socketTransport";
|
|
7
|
-
import dotenv from "dotenv";
|
|
8
|
-
dotenv.config();
|
|
9
|
-
const chain = baseSepolia;
|
|
10
|
-
const SYSTEM_PROMPT = `You are a meme seller agent. You sell memes in between 0.1 USDC to 0.01 USDC.
|
|
11
|
-
Rules: On new job, sendMessage to ask what kind of meme they want, lets the the budget to 0.1 USDC and let the buyer negotiate. When funded, submit deliverable "http://meme.example". Keep all text under 10 words.`;
|
|
12
|
-
const anthropic = new Anthropic();
|
|
13
|
-
function toAnthropicTools(tools) {
|
|
14
|
-
return tools.map((t) => ({
|
|
15
|
-
name: t.name,
|
|
16
|
-
description: t.description,
|
|
17
|
-
input_schema: {
|
|
18
|
-
type: "object",
|
|
19
|
-
properties: Object.fromEntries(t.parameters.map((p) => [
|
|
20
|
-
p.name,
|
|
21
|
-
{ type: p.type, description: p.description },
|
|
22
|
-
])),
|
|
23
|
-
required: t.parameters
|
|
24
|
-
.filter((p) => p.required !== false)
|
|
25
|
-
.map((p) => p.name),
|
|
26
|
-
},
|
|
27
|
-
}));
|
|
28
|
-
}
|
|
29
|
-
function toAnthropicMessages(raw) {
|
|
30
|
-
const msgs = [];
|
|
31
|
-
for (const m of raw) {
|
|
32
|
-
const role = m.role === "system" ? "user" : m.role;
|
|
33
|
-
const last = msgs[msgs.length - 1];
|
|
34
|
-
if (last && last.role === role) {
|
|
35
|
-
last.content += "\n" + m.content;
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
msgs.push({ role, content: m.content });
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return msgs;
|
|
42
|
-
}
|
|
43
|
-
async function main() {
|
|
44
|
-
const seller = await AcpAgent.create({
|
|
45
|
-
contractAddresses: ACP_CONTRACT_ADDRESSES,
|
|
46
|
-
provider: await AlchemyEvmProviderAdapter.create({
|
|
47
|
-
walletAddress: "0xSellerWalletAddress",
|
|
48
|
-
privateKey: "0xSellerPrivateKey",
|
|
49
|
-
entityId: 1,
|
|
50
|
-
chains: [chain],
|
|
51
|
-
}),
|
|
52
|
-
transport: new SocketTransport(),
|
|
53
|
-
});
|
|
54
|
-
console.log(`[seller-llm] address: ${await seller.getAddress()}`);
|
|
55
|
-
console.log("[seller-llm] listening for jobs…");
|
|
56
|
-
seller.on("entry", async (session, entry) => {
|
|
57
|
-
if (entry.kind === "system") {
|
|
58
|
-
console.log(`[JobID: ${session.jobId}][system] ${entry.event.type}`);
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
console.log(`[JobID: ${session.jobId}][buyer-llm] ${entry.content}`);
|
|
62
|
-
}
|
|
63
|
-
const tools = toAnthropicTools(session.availableTools());
|
|
64
|
-
const messages = toAnthropicMessages(await session.toMessages());
|
|
65
|
-
console.log("messages", messages);
|
|
66
|
-
if (messages.length === 0)
|
|
67
|
-
return;
|
|
68
|
-
const response = await anthropic.messages.create({
|
|
69
|
-
model: "claude-sonnet-4-20250514",
|
|
70
|
-
max_tokens: 1024,
|
|
71
|
-
system: SYSTEM_PROMPT,
|
|
72
|
-
messages,
|
|
73
|
-
tools,
|
|
74
|
-
tool_choice: { type: "any" },
|
|
75
|
-
});
|
|
76
|
-
const toolBlock = response.content.find((b) => b.type === "tool_use");
|
|
77
|
-
if (toolBlock && toolBlock.type === "tool_use") {
|
|
78
|
-
console.log(`[JobID: ${session.jobId}][seller-llm] calling ${toolBlock.name}(${JSON.stringify(toolBlock.input)})`);
|
|
79
|
-
await session.executeTool(toolBlock.name, toolBlock.input);
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
await seller.start();
|
|
83
|
-
}
|
|
84
|
-
main().catch(console.error);
|
|
85
|
-
//# sourceMappingURL=seller-llm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seller-llm.js","sourceRoot":"","sources":["../../src/examples/seller-llm.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seller.d.ts","sourceRoot":"","sources":["../../src/examples/seller.ts"],"names":[],"mappings":""}
|
package/dist/examples/seller.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { AcpAgent } from "../acpAgent";
|
|
2
|
-
import { AssetToken } from "../core/assetToken";
|
|
3
|
-
import { baseSepolia } from "@account-kit/infra";
|
|
4
|
-
import { AlchemyEvmProviderAdapter } from "../providers/evm/alchemyEvmProviderAdapter";
|
|
5
|
-
import { SocketTransport } from "../events/socketTransport";
|
|
6
|
-
async function main() {
|
|
7
|
-
const seller = await AcpAgent.create({
|
|
8
|
-
provider: await AlchemyEvmProviderAdapter.create({
|
|
9
|
-
walletAddress: "0xSellerWalletAddress",
|
|
10
|
-
privateKey: "0xSellerPrivateKey",
|
|
11
|
-
entityId: 1,
|
|
12
|
-
chains: [baseSepolia],
|
|
13
|
-
}),
|
|
14
|
-
transport: new SocketTransport(),
|
|
15
|
-
});
|
|
16
|
-
console.log(`[seller] address: ${await seller.getAddress()}`);
|
|
17
|
-
seller.on("entry", async (session, entry) => {
|
|
18
|
-
if (entry.kind === "system") {
|
|
19
|
-
switch (entry.event.type) {
|
|
20
|
-
case "job.created":
|
|
21
|
-
console.log(`[seller] new job ${session.jobId}`);
|
|
22
|
-
break;
|
|
23
|
-
case "job.funded":
|
|
24
|
-
console.log(`[seller] job ${session.jobId} funded, delivering…`);
|
|
25
|
-
await session.sendMessage("Got the funds. Working on it now.");
|
|
26
|
-
await session.submit("Test deliverable");
|
|
27
|
-
console.log(`[seller] submitted deliverable on job ${session.jobId}`);
|
|
28
|
-
break;
|
|
29
|
-
case "job.completed":
|
|
30
|
-
console.log(`[seller] job ${session.jobId} completed!`);
|
|
31
|
-
console.log(session.toContext());
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
// Handle the buyer's first message containing the requirement
|
|
36
|
-
if (entry.kind === "message" &&
|
|
37
|
-
entry.contentType === "requirement" &&
|
|
38
|
-
session.status === "open") {
|
|
39
|
-
const requirement = JSON.parse(entry.content);
|
|
40
|
-
console.log(`[seller] received requirement for "${requirement.name}":`, requirement.requirement);
|
|
41
|
-
await session.setBudget(AssetToken.usdc(0.1, session.chainId));
|
|
42
|
-
console.log(`[seller] set budget on job ${session.jobId}`);
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
await seller.start(() => {
|
|
46
|
-
console.log("[seller callback] listening for jobs…");
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
main().catch(console.error);
|
|
50
|
-
//# sourceMappingURL=seller.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seller.js","sourceRoot":"","sources":["../../src/examples/seller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAG5D,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,MAAM,yBAAyB,CAAC,MAAM,CAAC;YAC/C,aAAa,EAAE,uBAAuB;YACtC,UAAU,EAAE,oBAAoB;YAChC,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC,WAAW,CAAC;SACtB,CAAC;QACF,SAAS,EAAE,IAAI,eAAe,EAAE;KACjC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAE9D,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,OAAmB,EAAE,KAAmB,EAAE,EAAE;QACpE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,QAAQ,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACzB,KAAK,aAAa;oBAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBACjD,MAAM;gBAER,KAAK,YAAY;oBACf,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,KAAK,sBAAsB,CAAC,CAAC;oBACjE,MAAM,OAAO,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;oBAC/D,MAAM,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;oBACzC,OAAO,CAAC,GAAG,CAAC,yCAAyC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBACtE,MAAM;gBAER,KAAK,eAAe;oBAClB,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,KAAK,aAAa,CAAC,CAAC;oBACxD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;oBACjC,MAAM;YACV,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,IACE,KAAK,CAAC,IAAI,KAAK,SAAS;YACxB,KAAK,CAAC,WAAW,KAAK,aAAa;YACnC,OAAO,CAAC,MAAM,KAAK,MAAM,EACzB,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CACT,sCAAsC,WAAW,CAAC,IAAI,IAAI,EAC1D,WAAW,CAAC,WAAW,CACxB,CAAC;YACF,MAAM,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,8BAA8B,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buyer-fund.d.ts","sourceRoot":"","sources":["../../src/examples-local/buyer-fund.ts"],"names":[],"mappings":""}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { AcpAgent } from "../acpAgent";
|
|
2
|
-
import { ACP_CONTRACT_ADDRESSES } from "../core/constants";
|
|
3
|
-
import { baseSepolia, bscTestnet } from "@account-kit/infra";
|
|
4
|
-
import { SocketTransport, PrivyAlchemyEvmProviderAdapter, } from "../index";
|
|
5
|
-
const SELLER_ADDRESS = "0x740390E678D63bC3D8A0750e531CA239eC3f05C8";
|
|
6
|
-
async function main() {
|
|
7
|
-
// const buyer = await AcpAgent.create({
|
|
8
|
-
// contractAddresses: ACP_CONTRACT_ADDRESSES,
|
|
9
|
-
// provider: await AlchemyEvmProviderAdapter.create({
|
|
10
|
-
// walletAddress: "0xA5fa43eb6f2BfBFCE26EEBbb04946bA9434D002c",
|
|
11
|
-
// privateKey:
|
|
12
|
-
// "0x527f9a9ce88a8d60970f5de1115576bf3c4e660fac3fd6c3543959196f7adc3c",
|
|
13
|
-
// entityId: 1,
|
|
14
|
-
// chains: [baseSepolia, bscTestnet],
|
|
15
|
-
// }),
|
|
16
|
-
// transport: new SocketTransport(),
|
|
17
|
-
// });
|
|
18
|
-
const buyer = await AcpAgent.create({
|
|
19
|
-
contractAddresses: ACP_CONTRACT_ADDRESSES,
|
|
20
|
-
provider: await PrivyAlchemyEvmProviderAdapter.create({
|
|
21
|
-
walletAddress: "0x02cc08FFcBdff3232e5BDDcE87ab179E80B0a629",
|
|
22
|
-
walletId: "n5h6n76zadntqr6570n4f9ch",
|
|
23
|
-
chains: [baseSepolia, bscTestnet],
|
|
24
|
-
signerPrivateKey: "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgc1p9e3nsi9mggGqBcvmLK2QJa8zMubZDhXg/uY0Lc/2hRANCAATzY/p6kWVtUDFO0qZp5MwIGq3zrrA3OriCoBY6yos+BotODqfRO7kx4PnPvwjT6jkVTclpi/cW8/CXO6NziIaA",
|
|
25
|
-
}),
|
|
26
|
-
transport: new SocketTransport(),
|
|
27
|
-
});
|
|
28
|
-
const buyerAddress = await buyer.getAddress();
|
|
29
|
-
console.log(`[buyer] address: ${buyerAddress}`);
|
|
30
|
-
buyer.on("entry", async (session, entry) => {
|
|
31
|
-
console.log("entry", entry.kind);
|
|
32
|
-
if (entry.kind === "system") {
|
|
33
|
-
switch (entry.event.type) {
|
|
34
|
-
case "budget.set":
|
|
35
|
-
console.log(`[buyer] budget set ${entry.event.amount} USDC on job ${session.jobId}, funding…`);
|
|
36
|
-
console.log("Job event", entry.event);
|
|
37
|
-
console.log("Job intent", entry.event.fundRequest);
|
|
38
|
-
await session.sendMessage("Looks good, funding now.");
|
|
39
|
-
await session.fund();
|
|
40
|
-
console.log(`[buyer] funded job ${session.jobId}`);
|
|
41
|
-
break;
|
|
42
|
-
case "job.submitted":
|
|
43
|
-
console.log(`[buyer] deliverable received on job ${session.jobId}, completing…`);
|
|
44
|
-
console.log("Job intent", entry.event.fundTransfer);
|
|
45
|
-
await session.complete("Evaluated");
|
|
46
|
-
break;
|
|
47
|
-
case "job.completed":
|
|
48
|
-
console.log(`[buyer] job ${session.jobId} completed!`);
|
|
49
|
-
await buyer.stop();
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
if (entry.kind === "message") {
|
|
54
|
-
console.log(`[buyer] [job ${session.jobId}] ${entry.from}: ${entry.content}`);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
await buyer.start(() => {
|
|
58
|
-
console.log("[buyer] connected to server");
|
|
59
|
-
});
|
|
60
|
-
const jobId = await buyer.createFundTransferJob(baseSepolia.id, {
|
|
61
|
-
providerAddress: SELLER_ADDRESS,
|
|
62
|
-
evaluatorAddress: buyerAddress,
|
|
63
|
-
expiredAt: Math.floor(Date.now() / 1000) + 3600,
|
|
64
|
-
description: "Example job from SDK",
|
|
65
|
-
});
|
|
66
|
-
console.log(`[buyer] created job ${jobId} — waiting for seller…`);
|
|
67
|
-
}
|
|
68
|
-
main().catch(console.error);
|
|
69
|
-
//# sourceMappingURL=buyer-fund.js.map
|