UNPKG

@coinbase/agentkit

Version:

Coinbase AgentKit core primitives

110 lines (109 loc) 5.51 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.superfluidSuperTokenCreatorActionProvider = exports.SuperfluidSuperTokenCreatorActionProvider = void 0; const zod_1 = require("zod"); const schemas_1 = require("./schemas"); const constants_1 = require("./constants"); const viem_1 = require("viem"); const actionProvider_1 = require("../actionProvider"); const wallet_providers_1 = require("../../wallet-providers"); const actionDecorator_1 = require("../actionDecorator"); const viem_2 = require("viem"); const parseLogs_1 = require("./utils/parseLogs"); /** * SuperfluidSuperTokenCreatorActionProvider is an action provider for Superfluid interactions. */ class SuperfluidSuperTokenCreatorActionProvider extends actionProvider_1.ActionProvider { /** * Constructor for the SuperfluidSuperTokenCreatorActionProvider class. */ constructor() { super("superfluid-super-token-creator", []); /** * Checks if the Superfluid action provider supports the given network. * * @param network - The network to check. * @returns True if the Superfluid action provider supports the network, false otherwise. */ this.supportsNetwork = (network) => network.networkId === "base-mainnet" || network.networkId === "base-sepolia"; } /** * Creates a new Super token * * @param walletProvider - The wallet provider to start the stream from. * @param args - The input arguments for the action. * @returns A JSON string containing the account details or error message */ async createSuperToken(walletProvider, args) { try { const decimals = await walletProvider.readContract({ address: args.erc20TokenAddress, abi: viem_2.erc20Abi, functionName: "decimals", args: [], }); const name = await walletProvider.readContract({ address: args.erc20TokenAddress, abi: viem_2.erc20Abi, functionName: "name", args: [], }); const symbol = await walletProvider.readContract({ address: args.erc20TokenAddress, abi: viem_2.erc20Abi, functionName: "symbol", args: [], }); const createSuperTokenData = (0, viem_1.encodeFunctionData)({ abi: constants_1.SuperTokenFactoryABI, functionName: "createERC20Wrapper", args: [ args.erc20TokenAddress, decimals, 2, // upgradeable `Super ${name}`, `${symbol}x`, ], }); const superTokenFactoryAddress = walletProvider.getNetwork().networkId === "base-sepolia" ? constants_1.SuperTokenFactoryAddress_Base_Sepolia : constants_1.SuperTokenFactoryAddress; const createSuperTokenHash = await walletProvider.sendTransaction({ to: superTokenFactoryAddress, data: createSuperTokenData, }); const receipt = await walletProvider.waitForTransactionReceipt(createSuperTokenHash); const superTokenAddress = (0, parseLogs_1.extractCreatedSuperTokenAddressAbi)(receipt, superTokenFactoryAddress); return `Created super token for ${args.erc20TokenAddress}. Super token address at ${superTokenAddress} Transaction hash: ${createSuperTokenHash}`; } catch (error) { return `Error creating Superfluid Super Token: ${error}`; } } } exports.SuperfluidSuperTokenCreatorActionProvider = SuperfluidSuperTokenCreatorActionProvider; __decorate([ (0, actionDecorator_1.CreateAction)({ name: "create_super_token", description: ` This action will create a Super token, essentially a wrapper token around an ERC20 that can freely stream between wallets. It will return the address of the newly created Supertoken. You should only take this action when requested. A Supertoken implementation is needed to stream tokens or to wrap an ERC20 token. `, schema: schemas_1.SuperfluidCreateSuperTokenSchema, }), __metadata("design:type", Function), __metadata("design:paramtypes", [wallet_providers_1.EvmWalletProvider, void 0]), __metadata("design:returntype", Promise) ], SuperfluidSuperTokenCreatorActionProvider.prototype, "createSuperToken", null); const superfluidSuperTokenCreatorActionProvider = () => new SuperfluidSuperTokenCreatorActionProvider(); exports.superfluidSuperTokenCreatorActionProvider = superfluidSuperTokenCreatorActionProvider;