@coinbase/agentkit
Version:
Coinbase AgentKit core primitives
110 lines (109 loc) • 5.51 kB
JavaScript
;
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;