Skip to content

Commit 5298dab

Browse files
committed
pool hook data
1 parent 3c8a5e3 commit 5298dab

File tree

2 files changed

+50
-5
lines changed

2 files changed

+50
-5
lines changed

packages/thirdweb/src/assets/constants.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
export const DEFAULT_MAX_SUPPLY_ERC20 = 10_000_000n;
1+
export const DEFAULT_MAX_SUPPLY_ERC20 = 10_000_000_000n;
2+
export const DEFAULT_POOL_FEE = 10000;
3+
export const DEFAULT_POOL_INITIAL_TICK = 230200;
24

35
export const IMPLEMENTATIONS: Record<number, Record<string, string>> = {
46
[84532]: {

packages/thirdweb/src/assets/create-token.ts

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { Hex } from "viem";
22
import type { ThirdwebClient } from "../client/client.js";
3-
import { ZERO_ADDRESS } from "../constants/addresses.js";
3+
import { NATIVE_TOKEN_ADDRESS, ZERO_ADDRESS } from "../constants/addresses.js";
44
import { getContract } from "../contract/contract.js";
55
import { createAsset } from "../extensions/assets/__generated__/AssetEntrypointERC20/write/createAsset.js";
66
import { encodeInitialize } from "../extensions/assets/__generated__/ERC20Asset/write/initialize.js";
@@ -9,10 +9,15 @@ import { getRpcClient } from "../rpc/rpc.js";
99
import { upload } from "../storage/upload.js";
1010
import type { FileOrBufferOrString } from "../storage/upload/types.js";
1111
import { sendTransaction } from "../transaction/actions/send-transaction.js";
12+
import { encodeAbiParameters } from "../utils/abi/encodeAbiParameters.js";
1213
import { keccakId } from "../utils/any-evm/keccak-id.js";
1314
import { toHex } from "../utils/encoding/hex.js";
1415
import type { ClientAndChainAndAccount } from "../utils/types.js";
15-
import { DEFAULT_MAX_SUPPLY_ERC20 } from "./constants.js";
16+
import {
17+
DEFAULT_MAX_SUPPLY_ERC20,
18+
DEFAULT_POOL_FEE,
19+
DEFAULT_POOL_INITIAL_TICK,
20+
} from "./constants.js";
1621
import { getEntrypointERC20 } from "./get-entrypoint-erc20.js";
1722

1823
export type TokenParams = {
@@ -27,13 +32,21 @@ export type TokenParams = {
2732
owner?: string;
2833
};
2934

35+
export type PoolConfig = {
36+
amount: bigint;
37+
currency?: string;
38+
fee?: number;
39+
initialTick?: number;
40+
};
41+
3042
export type CreateTokenOptions = ClientAndChainAndAccount & {
3143
salt?: string;
3244
params: TokenParams;
45+
poolConfig?: PoolConfig;
3346
};
3447

3548
export async function createToken(options: CreateTokenOptions) {
36-
const { chain, client, account, params } = options;
49+
const { chain, client, account, params, poolConfig } = options;
3750

3851
const creator = params.owner || account.address;
3952

@@ -62,6 +75,8 @@ export async function createToken(options: CreateTokenOptions) {
6275
chain,
6376
});
6477

78+
const hookData = poolConfig ? encodePoolConfig(poolConfig) : "0x";
79+
6580
const transaction = createAsset({
6681
contract: entrypoint,
6782
creator,
@@ -70,7 +85,7 @@ export async function createToken(options: CreateTokenOptions) {
7085
referrer: ZERO_ADDRESS,
7186
salt,
7287
data: encodedInitData,
73-
hookData: "0x",
88+
hookData,
7489
},
7590
});
7691

@@ -109,3 +124,31 @@ async function encodeInitParams(options: {
109124
owner: creator,
110125
});
111126
}
127+
128+
function encodePoolConfig(poolConfig: PoolConfig): Hex {
129+
const POOL_PARAMS = [
130+
{
131+
type: "address",
132+
name: "currency",
133+
},
134+
{
135+
type: "uint256",
136+
name: "amount",
137+
},
138+
{
139+
type: "uint24",
140+
name: "fee",
141+
},
142+
{
143+
type: "uint24",
144+
name: "initialTick",
145+
},
146+
] as const;
147+
148+
return encodeAbiParameters(POOL_PARAMS, [
149+
poolConfig.currency || NATIVE_TOKEN_ADDRESS,
150+
poolConfig.amount,
151+
poolConfig.fee || DEFAULT_POOL_FEE,
152+
poolConfig.initialTick || DEFAULT_POOL_INITIAL_TICK,
153+
]);
154+
}

0 commit comments

Comments
 (0)