From 22bed60b47992c644657c8fd96e6916689358515 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lui=CC=81s=20Freitas?= Date: Wed, 18 Dec 2024 10:50:01 +0000 Subject: [PATCH] first commit --- .env.sample | 5 + .eslintrc.json | 25 ++ .github/workflows/ci.yml | 37 ++ .gitignore | 40 ++ README.md | 55 +++ bun.lockb | Bin 0 -> 421320 bytes jest.config.ts | 25 ++ package.json | 47 +++ public/uniswap.svg | 22 ++ src/plugin.ts | 696 +++++++++++++++++++++++++++++++++ src/routes/health.ts | 10 + src/routes/uniswap.ts | 34 ++ src/server.ts | 37 ++ src/tools/uniswap/orderFlow.ts | 96 +++++ src/tools/uniswap/parse.ts | 87 +++++ src/tools/uniswap/quote.ts | 43 ++ src/tools/util.ts | 119 ++++++ tests/uniswap/uniswap.spec.ts | 28 ++ tests/util.spec.ts | 98 +++++ tsconfig.json | 19 + vercel.json | 27 ++ 21 files changed, 1550 insertions(+) create mode 100644 .env.sample create mode 100644 .eslintrc.json create mode 100644 .github/workflows/ci.yml create mode 100644 .gitignore create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 jest.config.ts create mode 100644 package.json create mode 100644 public/uniswap.svg create mode 100644 src/plugin.ts create mode 100644 src/routes/health.ts create mode 100644 src/routes/uniswap.ts create mode 100644 src/server.ts create mode 100644 src/tools/uniswap/orderFlow.ts create mode 100644 src/tools/uniswap/parse.ts create mode 100644 src/tools/uniswap/quote.ts create mode 100644 src/tools/util.ts create mode 100644 tests/uniswap/uniswap.spec.ts create mode 100644 tests/util.spec.ts create mode 100644 tsconfig.json create mode 100644 vercel.json diff --git a/.env.sample b/.env.sample new file mode 100644 index 0000000..9b09cd1 --- /dev/null +++ b/.env.sample @@ -0,0 +1,5 @@ +ZERION_API_KEY= +ONEINCH_AUTH_KEY= + +SLIPPAGE_BPS=100 +SAFE_SALT_NONCE=130811896738364156958237239906781888512 diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..4e25e7a --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,25 @@ +{ + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "root": true, + "env": { + "node": true, + "es2021": true + }, + "parserOptions": { + "ecmaVersion": 2021, + "sourceType": "module" + // "project": "./tsconfig.json" + }, + "rules": { + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }], + "no-console": "off" + } +} \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..9d28f9f --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,37 @@ +name: CI + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install Bun + run: | + curl -fsSL https://bun.sh/install | bash + export BUN_INSTALL="$HOME/.bun" + echo "BUN_INSTALL=$HOME/.bun" >> $GITHUB_ENV + echo "$BUN_INSTALL/bin" >> $GITHUB_PATH + + - name: Install dependencies + run: | + npm install -g node-gyp + bun install + + - name: Lint, Test & Build + env: + SAFE_SALT_NONCE: "0" + run: | + bun lint + bun test + bun run build \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..65aca75 --- /dev/null +++ b/.gitignore @@ -0,0 +1,40 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. +# build +dist/ + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +.env diff --git a/README.md b/README.md new file mode 100644 index 0000000..3507ab9 --- /dev/null +++ b/README.md @@ -0,0 +1,55 @@ +# Uniswap AI Agent by [Bitte](https://www.bitte.ai/) + +This is a [Next.js](https://nextjs.org) project that implements an AI-powered agent for interacting with Uniswap V3. The agent helps users generate and execute transactions on Uniswap Fusion across supported EVM networks. + +## Features + +- Generate transaction data for Uniswap V3 +- Support for selling native assets (ETH, xDAI, POL, BNB) +- ERC20 token transfers +- WETH wrapping and unwrapping +- Price quotes and fee estimation for trades +- Support for multiple EVM networks + +## API Endpoints + +The agent exposes several endpoints: + +- `/api/tools/uniswap`: Quote prices and generate swap transactions + +## Local Development + +First, install the dependencies: + +```bash +bun install +``` + +Then, run the development server: + +```bash +bun dev +bun dev-testnet +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the Swagger UI. + +## Environment Setup + +The application requires the following environment variables: + +- `BITTE_KEY`: JSON containing the account ID + +## Learn More + +To learn more about the technologies used in this project: + +- [Uniswap Documentation](https://app.uniswap.org/) - Learn about Uniswap +- [Bitte Documentation](https://docs.bitte.ai/) - Learn about Bitte and building AI agents +- [Next.js Documentation](https://nextjs.org/docs) - Learn about Next.js features and API + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme). + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. \ No newline at end of file diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..2fecd744372714b09eaf76463933d476bac3b25b GIT binary patch literal 421320 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 r+R_;^|I`E4N38P1CsWw!;=j#c=+ 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%0AVn7}GTnmlyj@aiKOR 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

YRDK1@(H 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 E0R^-h!~g&Q literal 0 HcmV?d00001 diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 0000000..2687030 --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,25 @@ +import { pathsToModuleNameMapper } from 'ts-jest'; +import { compilerOptions } from './tsconfig.json'; + +const jestConfig = { + preset: 'ts-jest', + testEnvironment: 'node', + transform: { + '^.+\\.tsx?$': ['ts-jest', { tsconfig: 'tsconfig.json', useESM: true }], + '^.+\\.jsx?$': 'babel-jest', + }, + extensionsToTreatAsEsm: ['.ts', '.tsx'], + moduleNameMapper: { + ...pathsToModuleNameMapper(compilerOptions.paths, { + prefix: '/', + }), + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + setupFiles: ['dotenv/config'], + moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json', 'node'], + transformIgnorePatterns: [ + 'node_modules/(?!(@bitteprotocol/agent-sdk)/)', + ], +}; + +export default jestConfig; \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..925530a --- /dev/null +++ b/package.json @@ -0,0 +1,47 @@ +{ + "name": "bitte-uniswap-agent", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "concurrently \"tsx src/server.ts\" \"make-agent dev -p 3000\"", + "dev-testnet": "concurrently \"tsx src/server.ts\" \"make-agent dev -p 3000 -t\"", + "build": "tsc", + "start": "tsx src/server.ts", + "serve": "bun dist/server.js", + "lint": "eslint '{src,tests}/**/*.{js,jsx,ts,tsx}'", + "fmt": "eslint --fix '{src,tests}/**/*.{js,jsx,ts,tsx}' && prettier --write '{src,tests}/**/*.{js,jsx,ts,tsx}'", + "test": "jest --config jest.config.ts" + }, + "dependencies": { + "@bitteprotocol/agent-sdk": "^0.0.10", + "@uniswap/sdk-core": "^6.1.0", + "@uniswap/smart-order-router": "^4.8.6", + "cors": "^2.8.5", + "ethers": "^5.7.2", + "express": "^4.21.2", + "near-safe": "^0.9.4", + "swagger-ui-express": "^5.0.1", + "viem": "^2.21.54", + "zerion-sdk": "^0.0.13" + }, + "devDependencies": { + "@types/cors": "^2.8.17", + "@types/express": "^4.17.21", + "@types/jest": "^29.5.14", + "@types/node": "^22.10.1", + "@types/swagger-ui-express": "^4.1.7", + "@typescript-eslint/eslint-plugin": "^8.17.0", + "concurrently": "^9.1.0", + "dotenv": "^16.4.7", + "eslint": "^8.57.1", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", + "jest": "^29.7.0", + "make-agent": "^0.0.25", + "prettier": "^3.4.2", + "ts-jest": "^29.2.5", + "tsx": "^4.19.2", + "typescript": "^5.7.2" + } +} diff --git a/public/uniswap.svg b/public/uniswap.svg new file mode 100644 index 0000000..bac0920 --- /dev/null +++ b/public/uniswap.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/plugin.ts b/src/plugin.ts new file mode 100644 index 0000000..0fcd371 --- /dev/null +++ b/src/plugin.ts @@ -0,0 +1,696 @@ +import { config } from "dotenv"; +config(); + +const key = JSON.parse(process.env.BITTE_KEY || "{}"); +const bitteConfig = JSON.parse(process.env.BITTE_CONFIG || "{}"); +if (!key?.accountId) { + console.error("no account"); +} + +const url = bitteConfig.url || "https://near-uniswap-agent.vercel.app"; + +export const pluginData = { + openapi: "3.0.0", + info: { + title: "Bitte Uniswap Agent", + description: "API for interactions with Uniswap V3", + version: "1.0.0", + }, + servers: [{ url }], + "x-mb": { + "account-id": key.accountId, + assistant: { + name: "Uniswap Assistant", + description: + "An assistant that generates transaction data for Uniswap V3 Interactions", + instructions: + "Encodes transactions as signature requests on EVM networks. This assistant is only for EVM networks. Passes the the transaction fields of the response to generate-evm-tx tool for signing and displays the meta content of the response to the user after signing. For selling native assets, such as ETH, xDAI, POL, BNB it uses 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE as the sellToken. It does not infer the chainId. Do not infer the token decimals. Use Token Units for sellAmountBeforeFee. Uses token symbols for sellToken and buyToken unless addresses are provided. Always passes evmAddress as the safeAddress on any request requiring safeAddress.", + tools: [{ type: "generate-evm-tx" }], + image: `${url}/uniswap.svg`, + }, + }, + paths: { + "/api/health": { + get: { + tags: ["health"], + summary: "Confirms server running", + description: "Test Endpoint to confirm system is running", + operationId: "check-health", + parameters: [], + responses: { + "200": { + description: "Ok Message", + content: { + "application/json": { + schema: { + type: "object", + properties: { + message: { + type: "string", + description: "Ok Message", + }, + }, + }, + }, + }, + }, + }, + }, + }, + "/api/tools/uniswap": { + post: { + tags: ["uniswap"], + operationId: "swap", + summary: + "Quote a price and fee for the specified order parameters. Posts unsigned order to Uniswap and returns Signable payload", + description: + "Given a partial order compute the minimum fee and a price estimate for the order. Return a full order that can be used directly for signing, and with an included signature, passed directly to the order creation endpoint.", + parameters: [ + { $ref: "#/components/parameters/chainId" }, + { $ref: "#/components/parameters/safeAddress" }, + { + in: "query", + name: "sellToken", + required: true, + schema: { + type: "string", + }, + description: + "The ERC-20 token symbol or address to be sold, if provided with the symbol do not try to infer the address.", + }, + { + in: "query", + name: "buyToken", + required: true, + schema: { + type: "string", + }, + description: + "The ERC-20 token symbol or address to be bought, if provided with the symbol do not try to infer the address..", + }, + { + in: "query", + name: "receiver", + required: false, + schema: { + type: "string", + }, + description: + "The address to receive the proceeds of the trade, instead of the sender's address.", + }, + { + in: "query", + name: "sellAmountBeforeFee", + required: true, + schema: { + type: "string", + }, + description: + "The amount of tokens to sell before fees, represented as a decimal string in token units. Not Atoms.", + }, + ], + // requestBody: { + // description: "The order parameters to compute a quote for.", + // required: true, + // content: { + // "application/json": { + // schema: { + // $ref: "#/components/schemas/OrderQuoteRequest", + // }, + // }, + // }, + // }, + responses: { + "200": { $ref: "#/components/responses/SignRequestResponse200" }, + "400": { + description: "Error quoting order.", + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/PriceEstimationError", + }, + }, + }, + }, + "404": { + description: "No route was found for the specified order.", + }, + "429": { + description: "Too many order quotes.", + }, + "500": { + description: "Unexpected error quoting an order.", + }, + }, + }, + }, + }, + components: { + parameters: { + chainId: { + name: "chainId", + in: "query", + description: + "EVM Network on which to assests live and transactions are to be constructed", + required: true, + schema: { + type: "number", + }, + example: 100, + }, + amount: { + name: "amount", + in: "query", + description: "amount in Units", + required: true, + schema: { + type: "number", + }, + example: 0.123, + }, + address: { + name: "address", + in: "query", + description: + "20 byte Ethereum address encoded as a hex with `0x` prefix.", + required: true, + schema: { + type: "string", + }, + example: "0x6810e776880c02933d47db1b9fc05908e5386b96", + }, + safeAddress: { + name: "safeAddress", + in: "query", + required: true, + description: "The Safe address (i.e. the connected user address)", + schema: { + $ref: "#/components/schemas/Address", + }, + }, + recipient: { + name: "recipient", + in: "query", + required: true, + description: "Recipient address of the transferred token.", + schema: { + $ref: "#/components/schemas/Address", + }, + }, + token: { + name: "token", + in: "query", + description: "Token address to be transferred.", + schema: { + $ref: "#/components/schemas/Address", + }, + }, + }, + responses: { + SignRequest200: { + description: "Generic Structure representing an EVM Signature Request", + content: { + "application/json": { + schema: { + $ref: "#/components/schemas/SignRequest", + }, + }, + }, + }, + SignRequestResponse200: { + description: + "Uniswap Fusion order response including transaction and order URL", + content: { + "application/json": { + schema: { + type: "object", + properties: { + transaction: { + $ref: "#/components/schemas/SignRequest", + }, + meta: { + type: "object", + description: "Additional metadata related to the transaction", + additionalProperties: true, + example: { + message: "Order submitted successfully", + }, + }, + }, + required: ["transaction"], + }, + }, + }, + }, + BadRequest400: { + description: "Bad Request - Invalid or missing parameters", + content: { + "application/json": { + schema: { + type: "object", + properties: { + ok: { + type: "boolean", + example: false, + }, + message: { + type: "string", + example: "Missing required parameters: chainId or amount", + }, + }, + }, + }, + }, + }, + }, + schemas: { + Address: { + description: + "20 byte Ethereum address encoded as a hex with `0x` prefix.", + type: "string", + example: "0x6810e776880c02933d47db1b9fc05908e5386b96", + }, + SignRequest: { + type: "object", + required: ["method", "chainId", "params"], + properties: { + method: { + type: "string", + enum: [ + "eth_sign", + "personal_sign", + "eth_sendTransaction", + "eth_signTypedData", + "eth_signTypedData_v4", + ], + description: "The signing method to be used.", + example: "eth_sendTransaction", + }, + chainId: { + type: "integer", + description: + "The ID of the Ethereum chain where the transaction or signing is taking place.", + example: 100, + }, + params: { + oneOf: [ + { + type: "array", + items: { + $ref: "#/components/schemas/MetaTransaction", + }, + description: "An array of Ethereum transaction parameters.", + }, + { + type: "array", + items: { + type: "string", + }, + description: "Parameters for personal_sign request", + example: [ + "0x4578616d706c65206d657373616765", + "0x0000000000000000000000000000000000000001", + ], + }, + { + type: "array", + items: { + type: "string", + }, + description: "Parameters for eth_sign request", + example: [ + "0x0000000000000000000000000000000000000001", + "0x4578616d706c65206d657373616765", + ], + }, + { + type: "array", + items: { + type: "string", + }, + description: + "Parameters for signing structured data (TypedDataParams)", + example: [ + "0x0000000000000000000000000000000000000001", + '{"data": {"types": {"EIP712Domain": [{"name": "name","type": "string"}]}}}', + ], + }, + ], + }, + }, + }, + MetaTransaction: { + description: "Sufficient data representing an EVM transaction", + type: "object", + properties: { + to: { + $ref: "#/components/schemas/Address", + description: "Recipient address", + }, + data: { + type: "string", + description: "Transaction calldata", + example: "0xd0e30db0", + }, + value: { + type: "string", + description: "Transaction value", + example: "0x1b4fbd92b5f8000", + }, + }, + required: ["to", "data", "value"], + }, + SellTokenSource: { + description: "Where should the `sellToken` be drawn from?", + type: "string", + enum: ["erc20", "internal", "external"], + }, + BuyTokenDestination: { + description: "Where should the `buyToken` be transferred to?", + type: "string", + enum: ["erc20", "internal"], + }, + PriceQuality: { + description: + "How good should the price estimate be?\n\nFast: The price estimate is chosen among the fastest N price estimates.\nOptimal: The price estimate is chosen among all price estimates.\nVerified: The price estimate is chosen among all verified/simulated price estimates.\n\n**NOTE**: Orders are supposed to be created from `verified` or `optimal` price estimates.", + type: "string", + enum: ["fast", "optimal", "verified"], + }, + SigningScheme: { + description: "How was the order signed?", + type: "string", + enum: ["eip712", "ethsign", "presign", "eip1271"], + }, + EcdsaSigningScheme: { + description: "How was the order signed?", + type: "string", + enum: ["eip712", "ethsign"], + }, + Signature: { + description: "A signature.", + oneOf: [ + { $ref: "#/components/schemas/EcdsaSignature" }, + { $ref: "#/components/schemas/PreSignature" }, + ], + }, + EcdsaSignature: { + description: + "65 bytes encoded as hex with `0x` prefix. `r || s || v` from the spec.", + type: "string", + example: + "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + }, + PreSignature: { + description: 'Empty signature bytes. Used for "presign" signatures.', + type: "string", + example: "0x", + }, + OrderQuoteRequest: { + description: "Request fee and price quote.", + allOf: [ + { $ref: "#/components/schemas/OrderQuoteSide" }, + { $ref: "#/components/schemas/OrderQuoteValidity" }, + { + type: "object", + properties: { + sellToken: { + description: "ERC-20 token to be sold", + allOf: [{ $ref: "#/components/schemas/Address" }], + }, + buyToken: { + description: "ERC-20 token to be bought", + allOf: [{ $ref: "#/components/schemas/Address" }], + }, + receiver: { + description: + "An optional address to receive the proceeds of the trade instead of the `owner` (i.e. the order signer).", + allOf: [{ $ref: "#/components/schemas/Address" }], + nullable: true, + }, + sellTokenBalance: { + allOf: [{ $ref: "#/components/schemas/SellTokenSource" }], + default: "erc20", + }, + buyTokenBalance: { + allOf: [{ $ref: "#/components/schemas/BuyTokenDestination" }], + default: "erc20", + }, + from: { $ref: "#/components/schemas/Address" }, + priceQuality: { + allOf: [{ $ref: "#/components/schemas/PriceQuality" }], + default: "verified", + }, + signingScheme: { + allOf: [{ $ref: "#/components/schemas/SigningScheme" }], + default: "eip712", + }, + onchainOrder: { + description: + "Flag to signal whether the order is intended for on-chain order placement. Only valid for non ECDSA-signed orders.", + default: false, + }, + network: { + description: "The network on which the order is to be placed.", + type: "string", + enum: ["mainnet", "xdai", "arbitrum_one"], + }, + }, + required: ["sellToken", "buyToken", "from"], + }, + ], + }, + OrderQuoteResponse: { + description: + "An order quoted by the backend that can be directly signed and submitted to the order creation backend.", + type: "object", + properties: { + quote: { $ref: "#/components/schemas/OrderParameters" }, + from: { $ref: "#/components/schemas/Address" }, + expiration: { + description: + "Expiration date of the offered fee. Order service might not accept the fee after this expiration date. Encoded as ISO 8601 UTC.", + type: "string", + example: "1985-03-10T18:35:18.814523Z", + }, + id: { + description: + "Quote ID linked to a quote to enable providing more metadata when analysing order slippage.", + type: "integer", + }, + verified: { + description: + "Whether it was possible to verify that the quoted amounts are accurate using a simulation.", + type: "boolean", + }, + }, + required: ["quote", "expiration", "verified"], + }, + PriceEstimationError: { + type: "object", + properties: { + errorType: { + type: "string", + enum: [ + "QuoteNotVerified", + "UnsupportedToken", + "ZeroAmount", + "UnsupportedOrderType", + ], + }, + description: { type: "string" }, + }, + required: ["errorType", "description"], + }, + OrderKind: { + description: "Is this order a buy or sell?", + type: "string", + enum: ["buy", "sell"], + }, + OrderParameters: { + description: "Order parameters.", + type: "object", + properties: { + sellToken: { + description: "ERC-20 token to be sold.", + allOf: [{ $ref: "#/components/schemas/Address" }], + }, + buyToken: { + description: "ERC-20 token to be bought.", + allOf: [{ $ref: "#/components/schemas/Address" }], + }, + receiver: { + description: + "An optional Ethereum address to receive the proceeds of the trade instead of the owner (i.e. the order signer).", + allOf: [{ $ref: "#/components/schemas/Address" }], + nullable: true, + }, + sellAmount: { + description: "Amount of `sellToken` to be sold in atoms.", + allOf: [{ $ref: "#/components/schemas/TokenAmount" }], + }, + buyAmount: { + description: "Amount of `buyToken` to be bought in atoms.", + allOf: [{ $ref: "#/components/schemas/TokenAmount" }], + }, + validTo: { + description: + "Unix timestamp (`uint32`) until which the order is valid.", + type: "integer", + }, + feeAmount: { + description: "feeRatio * sellAmount + minimal_fee in atoms.", + allOf: [{ $ref: "#/components/schemas/TokenAmount" }], + }, + kind: { + description: "The kind is either a buy or sell order.", + allOf: [{ $ref: "#/components/schemas/OrderKind" }], + }, + partiallyFillable: { + description: "Is the order fill-or-kill or partially fillable?", + type: "boolean", + }, + sellTokenBalance: { + allOf: [{ $ref: "#/components/schemas/SellTokenSource" }], + default: "erc20", + }, + buyTokenBalance: { + allOf: [{ $ref: "#/components/schemas/BuyTokenDestination" }], + default: "erc20", + }, + signingScheme: { + allOf: [{ $ref: "#/components/schemas/SigningScheme" }], + default: "eip712", + }, + }, + required: [ + "sellToken", + "buyToken", + "sellAmount", + "buyAmount", + "validTo", + "appData", + "feeAmount", + "kind", + "partiallyFillable", + ], + }, + OrderQuoteSide: { + description: "The buy or sell side when quoting an order.", + oneOf: [ + { + type: "object", + description: + "Quote a sell order given the final total `sellAmount` including fees.", + properties: { + kind: { + allOf: [ + { + $ref: "#/components/schemas/OrderQuoteSideKindSell", + }, + ], + }, + sellAmountBeforeFee: { + description: + "The total amount that is available for the order. From this value, the fee is deducted and the buy amount is calculated.", + allOf: [ + { + $ref: "#/components/schemas/TokenAmount", + }, + ], + }, + }, + required: ["kind", "sellAmountBeforeFee"], + }, + { + type: "object", + description: "Quote a sell order given the `sellAmount`.", + properties: { + kind: { + allOf: [ + { + $ref: "#/components/schemas/OrderQuoteSideKindSell", + }, + ], + }, + sellAmountAfterFee: { + description: "The `sellAmount` for the order.", + allOf: [ + { + $ref: "#/components/schemas/TokenAmount", + }, + ], + }, + }, + required: ["kind", "sellAmountAfterFee"], + }, + { + type: "object", + description: "Quote a buy order given an exact `buyAmount`.", + properties: { + kind: { + allOf: [ + { + $ref: "#/components/schemas/OrderQuoteSideKindBuy", + }, + ], + }, + buyAmountAfterFee: { + description: "The `buyAmount` for the order.", + allOf: [ + { + $ref: "#/components/schemas/TokenAmount", + }, + ], + }, + }, + required: ["kind", "buyAmountAfterFee"], + }, + ], + }, + OrderQuoteSideKindSell: { + type: "string", + enum: ["sell"], + }, + OrderQuoteSideKindBuy: { + type: "string", + enum: ["buy"], + }, + TokenAmount: { + description: "Amount of a token. `uint256` encoded in decimal.", + type: "string", + example: "1234567890", + }, + OrderQuoteValidity: { + description: "The validity for the order.", + oneOf: [ + { + type: "object", + description: "Absolute validity.", + properties: { + validTo: { + description: + "Unix timestamp (`uint32`) until which the order is valid.", + type: "integer", + }, + }, + }, + { + type: "object", + description: "Relative validity", + properties: { + validFor: { + description: + "Number (`uint32`) of seconds that the order should be valid for.", + type: "integer", + }, + }, + }, + ], + }, + }, + }, + "x-readme": { + "explorer-enabled": true, + "proxy-enabled": true, + }, +}; diff --git a/src/routes/health.ts b/src/routes/health.ts new file mode 100644 index 0000000..0e5e9c0 --- /dev/null +++ b/src/routes/health.ts @@ -0,0 +1,10 @@ +import { Router } from "express"; + +const router = Router(); + +router.get("/", async (req, res) => { + console.log("health check"); + res.json({ ok: true, message: "Ok lets go!" }); +}); + +export { router as healthRouter }; diff --git a/src/routes/uniswap.ts b/src/routes/uniswap.ts new file mode 100644 index 0000000..37f6eea --- /dev/null +++ b/src/routes/uniswap.ts @@ -0,0 +1,34 @@ +import { orderRequestFlow } from "../tools/uniswap/orderFlow"; +import { + // getSafeSaltNonce, + getTokenMap, + getZerionKey, + // validateExpressRequest, +} from "../tools/util"; +import { parseQuoteRequest } from "../tools/uniswap/parse"; +import { Router, Request, Response } from "express"; + +const router = Router(); + +router.post("/", async (req: Request, res: Response) => { + // const headerError = await validateExpressRequest(req, getSafeSaltNonce()); + // if (headerError) return headerError; + + try { + const parsedRequest = await parseQuoteRequest( + req, + await getTokenMap(), + getZerionKey(), + ); + console.log("POST Request for quote:", parsedRequest); + const orderData = await orderRequestFlow(parsedRequest); + console.log("Responding with", orderData); + return res.status(200).json(orderData); + } catch (e: unknown) { + const message = JSON.stringify(e); + console.error(message); + return res.status(400).json({ error: message }); + } +}); + +export { router as uniswapRouter }; diff --git a/src/server.ts b/src/server.ts new file mode 100644 index 0000000..ca4d7f2 --- /dev/null +++ b/src/server.ts @@ -0,0 +1,37 @@ +import express from "express"; +import cors from "cors"; +import { config } from "dotenv"; +import swaggerUi from "swagger-ui-express"; +import { healthRouter } from "./routes/health"; +import { uniswapRouter } from "./routes/uniswap"; +import { pluginData } from "./plugin"; + +config(); // Load .env file + +const app = express(); +const port = process.env.PORT || 3000; + +app.use(cors()); +app.use(express.json()); + +// Routes +app.use("/api/health", healthRouter); +app.use("/api/tools/uniswap", uniswapRouter); + +// Expose plugin manifest at /.well-known/ai-plugin.json +app.get("/.well-known/ai-plugin.json", (_, res) => { + res.json(pluginData); +}); + +// Swagger documentation +app.use("/docs", swaggerUi.serve, swaggerUi.setup(pluginData)); + +// Add this AFTER all your defined routes +app.use((req, res, next) => { + console.log(`⚠️ No route found for ${req.method} ${req.path}`); + next(); +}); + +app.listen(port, () => { + console.log(`Server running at http://localhost:${port}`); +}); diff --git a/src/tools/uniswap/orderFlow.ts b/src/tools/uniswap/orderFlow.ts new file mode 100644 index 0000000..16ffe03 --- /dev/null +++ b/src/tools/uniswap/orderFlow.ts @@ -0,0 +1,96 @@ +import { getClient, MetaTransaction, SignRequestData } from "near-safe"; +import { ParsedQuoteRequest } from "./parse"; +import { Address, erc20Abi, getAddress } from "viem"; +import { signRequestFor } from "@bitteprotocol/agent-sdk"; +import { getRoute } from "./quote"; +import { Token } from "@uniswap/sdk-core"; +import { sellTokenApprovalTx } from "../util"; + +// https://docs.uniswap.org/sdk/v3/guides/swaps/routing +export async function orderRequestFlow({ + chainId, + quoteRequest, +}: ParsedQuoteRequest): Promise<{ + transaction: SignRequestData; + meta: { orderData: string }; +}> { + const [sellToken, buyToken] = await Promise.all([ + getToken(chainId, quoteRequest.sellToken), + getToken(chainId, quoteRequest.buyToken), + ]); + const route = await getRoute( + chainId, + quoteRequest.amount, + sellToken, + buyToken, + quoteRequest.walletAddress, + ); + if (!route || !route.methodParameters) { + // Handle failed request + throw new Error( + `Failed to get route on ${chainId} for ${JSON.stringify(quoteRequest)}`, + ); + } + const metaTransactions: MetaTransaction[] = []; + const approvalTx = await sellTokenApprovalTx({ + fromTokenAddress: sellToken.address, + chainId, + from: quoteRequest.walletAddress, + spender: getSwapRouterAddress(chainId), + sellAmount: quoteRequest.amount.toString(), + }); + if (approvalTx) { + console.log("prepending approval"); + // TODO: Update approval address. + metaTransactions.push(approvalTx); + } + const swapTx = { + to: getSwapRouterAddress(chainId), + data: route.methodParameters.calldata, + value: route.methodParameters.value, + }; + metaTransactions.push(swapTx); + return { + transaction: signRequestFor({ + chainId, + from: getAddress(quoteRequest.walletAddress), + metaTransactions, + }), + meta: { orderData: "Uniswap Order Data" }, + }; +} + +export async function getToken( + chainId: number, + address: Address, +): Promise { + const client = getClient(chainId); + const [decimals, symbol, name] = await Promise.all([ + client.readContract({ + abi: erc20Abi, + address, + functionName: "decimals", + }), + client.readContract({ + abi: erc20Abi, + address, + functionName: "symbol", + }), + client.readContract({ + abi: erc20Abi, + address, + functionName: "name", + }), + ]); + return new Token(chainId, address, decimals, symbol, name); +} + +function getSwapRouterAddress(chainId: number): Address { + if (chainId === 8453) { + return "0x2626664c2603336E57B271c5C0b26F421741e481"; + } + if (chainId === 42220) { + return "0x5615CDAb10dc425a742d643d949a7F474C01abc4"; + } + return "0xE592427A0AEce92De3Edee1F18E0157C05861564"; +} diff --git a/src/tools/uniswap/parse.ts b/src/tools/uniswap/parse.ts new file mode 100644 index 0000000..0a671dd --- /dev/null +++ b/src/tools/uniswap/parse.ts @@ -0,0 +1,87 @@ +import { Address, getAddress, isAddress, parseUnits } from "viem"; +import { + getTokenDetails, + TokenInfo, + getSafeBalances, + TokenBalance, + BlockchainMapping, +} from "@bitteprotocol/agent-sdk"; +import { NATIVE_ASSET } from "../util"; +import { Request } from "express"; +export type QuoteParams = { + sellToken: Address; + buyToken: Address; + amount: bigint; + walletAddress: Address; +}; + +export interface ParsedQuoteRequest { + quoteRequest: QuoteParams; + chainId: number; +} + +export async function parseQuoteRequest( + req: Request, + tokenMap: BlockchainMapping, + zerionKey?: string, +): Promise { + // TODO - Add Type Guard on Request (to determine better if it needs processing below.) + const requestBody = req.body; + console.log("Raw Request Body:", requestBody); + // TODO: Validate input with new validation tools: + const { + sellToken, + buyToken, + chainId, + sellAmountBeforeFee: sellAmount, + safeAddress: sender, + } = requestBody; + + if (sellAmount === "0") { + throw new Error("Sell amount cannot be 0"); + } + + const [balances, buyTokenData] = await Promise.all([ + getSafeBalances(chainId, sender, zerionKey), + getTokenDetails(chainId, buyToken, tokenMap), + ]); + const sellTokenData = sellTokenAvailable(balances, sellToken); + + return { + chainId, + quoteRequest: { + sellToken: sellTokenData.address, + buyToken: buyTokenData.address, + amount: parseUnits(sellAmount, sellTokenData.decimals), + walletAddress: sender, + }, + }; +} + +function sellTokenAvailable( + balances: TokenBalance[], + sellTokenSymbolOrAddress: string, +): TokenInfo { + let balance: TokenBalance | undefined; + if (isAddress(sellTokenSymbolOrAddress, { strict: false })) { + balance = balances.find( + (b) => + getAddress(b.tokenAddress || NATIVE_ASSET) === + getAddress(sellTokenSymbolOrAddress), + ); + } else { + balance = balances.find( + (b) => + b.token?.symbol.toLowerCase() === + sellTokenSymbolOrAddress.toLowerCase(), + ); + } + if (balance) { + return { + address: getAddress(balance.tokenAddress || NATIVE_ASSET), + decimals: balance.token?.decimals || 18, + symbol: balance.token?.symbol || "UNKNOWN", + }; + } + throw new Error("Sell token not found in balances"); +} diff --git a/src/tools/uniswap/quote.ts b/src/tools/uniswap/quote.ts new file mode 100644 index 0000000..4b31150 --- /dev/null +++ b/src/tools/uniswap/quote.ts @@ -0,0 +1,43 @@ +import { + AlphaRouter, + CurrencyAmount, + SwapRoute, +} from "@uniswap/smart-order-router"; +import { SwapOptionsSwapRouter02, SwapType } from "@uniswap/smart-order-router"; +import { Percent, Token, TradeType } from "@uniswap/sdk-core"; +import { ethers } from "ethers"; +import { getClient } from "near-safe"; +import { Address } from "viem"; + +export async function getRouter(chainId: number) { + const viemClient = getClient(chainId); + return new AlphaRouter({ + chainId, + provider: new ethers.providers.JsonRpcProvider(viemClient.transport.url, { + name: viemClient.chain?.name || "Unknown", + chainId, + }), + }); +} + +export async function getRoute( + chainId: number, + amountIn: bigint, + inToken: Token, + outToken: Token, + from: Address, +): Promise { + const router = await getRouter(chainId); + const options: SwapOptionsSwapRouter02 = { + recipient: from, + slippageTolerance: new Percent(100, 10_000), + deadline: Math.floor(Date.now() / 1000 + 1800), + type: SwapType.SWAP_ROUTER_02, + }; + return router.route( + CurrencyAmount.fromRawAmount(inToken, amountIn.toString()), + outToken, + TradeType.EXACT_INPUT, + options, + ); +} diff --git a/src/tools/util.ts b/src/tools/util.ts new file mode 100644 index 0000000..1bd296a --- /dev/null +++ b/src/tools/util.ts @@ -0,0 +1,119 @@ +import { + BlockchainMapping, + loadTokenMap, + checkAllowance, + erc20Approve, +} from "@bitteprotocol/agent-sdk"; +import { Address, getAddress } from "viem"; +import { MetaTransaction } from "near-safe"; + +// TODO: fix this +// export async function validateExpressRequest( +// req: Request, +// safeSaltNonce?: string, +// ): Promise { +// return validateRequest( +// req, +// safeSaltNonce || "0", +// (data: unknown, init?: { status?: number }) => +// Response.json(data, init), +// ); +// } + +// CoW (and many other Dex Protocols use this to represent native asset). +export const NATIVE_ASSET = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; + +export async function sellTokenApprovalTx(args: { + from: string; + fromTokenAddress: string; + spender: Address; + chainId: number; + sellAmount: string; +}): Promise { + const { + from, + fromTokenAddress: sellToken, + chainId, + sellAmount, + spender, + } = args; + console.log( + `Checking approval for account=${from}, token=${sellToken} on chainId=${chainId}`, + ); + const allowance = await checkAllowance( + getAddress(from), + getAddress(sellToken), + spender, + chainId, + ); + + if (allowance < BigInt(sellAmount)) { + // Insufficient allowance + return erc20Approve({ + token: getAddress(sellToken), + spender, + }); + } + return null; +} + +export function isNativeAsset(token: string): boolean { + return token.toLowerCase() === NATIVE_ASSET.toLowerCase(); +} + +export enum OrderKind { + BUY = "buy", + SELL = "sell", +} + +export function applySlippage( + order: { kind: OrderKind; buyAmount: string; sellAmount: string }, + bps: number, +): { buyAmount?: string; sellAmount?: string } { + const scaleFactor = BigInt(10000); + if (order.kind === OrderKind.SELL) { + const slippageBps = BigInt(10000 - bps); + return { + buyAmount: ( + (BigInt(order.buyAmount) * slippageBps) / + scaleFactor + ).toString(), + }; + } else if (order.kind === OrderKind.BUY) { + const slippageBps = BigInt(10000 + bps); + return { + sellAmount: ( + (BigInt(order.sellAmount) * slippageBps) / + scaleFactor + ).toString(), + }; + } + return order; +} + +function getEnvVar(key: string): string { + const value = process.env[key]; + if (!value) { + throw new Error(`${key} is not set`); + } + return value; +} +export function getZerionKey(): string { + return getEnvVar("ZERION_KEY"); +} + +export function getSafeSaltNonce(): string { + const bitteProtocolSaltNonce = "130811896738364156958237239906781888512"; + return process.env.SAFE_SALT_NONCE || bitteProtocolSaltNonce; +} + +let tokenMapInstance: BlockchainMapping | null = null; + +export async function getTokenMap(): Promise { + if (tokenMapInstance) { + return tokenMapInstance; + } + console.log("Loading TokenMap..."); + tokenMapInstance = await loadTokenMap(getEnvVar("TOKEN_MAP_URL")); + return tokenMapInstance; +} diff --git a/tests/uniswap/uniswap.spec.ts b/tests/uniswap/uniswap.spec.ts new file mode 100644 index 0000000..dff6a61 --- /dev/null +++ b/tests/uniswap/uniswap.spec.ts @@ -0,0 +1,28 @@ +import { getAddress } from "viem"; +import { orderRequestFlow } from "../../src/tools/uniswap/orderFlow"; + +// Safe Associated with max-normal.near on Bitte Wallet. +const DEPLOYED_SAFE = getAddress("0x54F08c27e75BeA0cdDdb8aA9D69FD61551B19BbA"); + +const chainId = 8453; // BASE +const quoteRequest = { + chainId, + walletAddress: DEPLOYED_SAFE, + sellToken: getAddress("0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"), // USDC + buyToken: getAddress("0x4200000000000000000000000000000000000006"), // WETH + amount: 1000000n, +}; + +describe("Uniswap Plugin", () => { + // Swaps 1 USDC to WETH on BASE Chain using Uniswap API + it.skip("orderRequestFlow", async () => { + const signRequest = await orderRequestFlow({ + chainId, + quoteRequest, + }); + console.log(JSON.stringify(signRequest, null, 2)); + console.log( + `https://wallet.bitte.ai/sign-evm?evmTx=${encodeURI(JSON.stringify(signRequest.transaction))}`, + ); + }, 10000); +}); diff --git a/tests/util.spec.ts b/tests/util.spec.ts new file mode 100644 index 0000000..98ae958 --- /dev/null +++ b/tests/util.spec.ts @@ -0,0 +1,98 @@ +import { + applySlippage, + isNativeAsset, + NATIVE_ASSET, + OrderKind, + sellTokenApprovalTx, +} from "../src/tools/util"; +import { checksumAddress, getAddress, zeroAddress } from "viem"; + +const SEPOLIA_DAI = getAddress("0xb4f1737af37711e9a5890d9510c9bb60e170cb0d"); +const SEPOLIA_COW = getAddress("0x0625afb445c3b6b7b929342a04a22599fd5dbb59"); +// Safe Associated with neareth-dev.testnet on Bitte Wallet. +const DEPLOYED_SAFE = getAddress("0x5E1E315D96BD81c8f65c576CFD6E793aa091b480"); + +const chainId = 11155111; + +const spender = getAddress("0xc92e8bdf79f0507f65a392b0ab4667716bfe0110"); + +describe("Uniswap Plugin", () => { + it("applySlippage", async () => { + const amounts = { buyAmount: "1000", sellAmount: "1000" }; + expect( + applySlippage({ kind: OrderKind.BUY, ...amounts }, 50), + ).toStrictEqual({ + sellAmount: "1005", + }); + expect( + applySlippage({ kind: OrderKind.SELL, ...amounts }, 50), + ).toStrictEqual({ + buyAmount: "995", + }); + + const smallAmounts = { buyAmount: "100", sellAmount: "100" }; + expect( + applySlippage({ kind: OrderKind.BUY, ...smallAmounts }, 100), + ).toStrictEqual({ + sellAmount: "101", + }); + expect( + applySlippage({ kind: OrderKind.SELL, ...smallAmounts }, 100), + ).toStrictEqual({ + buyAmount: "99", + }); + }); + it("isNativeAsset", () => { + expect(isNativeAsset("word")).toBe(false); + expect(isNativeAsset(NATIVE_ASSET)).toBe(true); + expect(isNativeAsset(NATIVE_ASSET.toLowerCase())).toBe(true); + expect(isNativeAsset(checksumAddress(NATIVE_ASSET))).toBe(true); + expect(isNativeAsset("0xb4f1737af37711e9a5890d9510c9bb60e170cb0d")).toBe( + false, + ); + }); + + it("sellTokenApprovalTx: null - already approved", async () => { + // already approved + expect( + await sellTokenApprovalTx({ + from: "0x7fa8e8264985C7525Fc50F98aC1A9b3765405489", + fromTokenAddress: SEPOLIA_DAI, + spender, + sellAmount: "100", + chainId, + }), + ).toStrictEqual(null); + }); + + it("sellTokenApprovalTx: not null - not approved", async () => { + // Not approved + + expect( + await sellTokenApprovalTx({ + from: zeroAddress, // Will never be approved + fromTokenAddress: SEPOLIA_COW, + spender, + sellAmount: "100", + chainId, + }), + ).toStrictEqual({ + to: SEPOLIA_COW, + value: "0x0", + data: "0x095ea7b3000000000000000000000000c92e8bdf79f0507f65a392b0ab4667716bfe0110ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + }); + }); + + it("sellTokenApprovalTx: throws - not a token", async () => { + // Not a token. + await expect( + sellTokenApprovalTx({ + from: DEPLOYED_SAFE, + fromTokenAddress: zeroAddress, // Not a token + spender, + sellAmount: "100", + chainId, + }), + ).rejects.toThrow(); + }); +}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..39018dd --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "ES2020", + "lib": ["es2020"], + "moduleResolution": "bundler", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "outDir": "dist", + "rootDir": "src", + "baseUrl": ".", + "paths": { + "@/*": ["./*"] + } + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "tests"] +} \ No newline at end of file diff --git a/vercel.json b/vercel.json new file mode 100644 index 0000000..fbe9d45 --- /dev/null +++ b/vercel.json @@ -0,0 +1,27 @@ +{ + "version": 2, + "builds": [ + { + "src": "dist/server.js", + "use": "@vercel/node" + }, + { + "src": "public/**/*", + "use": "@vercel/static" + }, + { + "src": "src/**/*.ts", + "use": "@vercel/node" + } + ], + "routes": [ + { + "src": "/(.*)", + "dest": "src/server.ts" + } + ], + "buildCommand": "bun run build", + "installCommand": "bun install", + "devCommand": "bun start", + "outputDirectory": "dist" +}