diff --git a/.changeset/twenty-bees-sink.md b/.changeset/twenty-bees-sink.md new file mode 100644 index 00000000000..c5a79975384 --- /dev/null +++ b/.changeset/twenty-bees-sink.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Update createToken to return a prepared transaction diff --git a/packages/thirdweb/src/exports/tokens.ts b/packages/thirdweb/src/exports/tokens.ts index d24b6dcc940..df7c63aeacf 100644 --- a/packages/thirdweb/src/exports/tokens.ts +++ b/packages/thirdweb/src/exports/tokens.ts @@ -6,7 +6,7 @@ export { DEFAULT_DEVELOPER_ADDRESS, DEFAULT_DEVELOPER_REWARD_BPS, } from "../tokens/constants.js"; -export { createToken } from "../tokens/create-token.js"; +export { createToken, prepareCreateToken } from "../tokens/create-token.js"; export { distributeToken } from "../tokens/distribute-token.js"; export { getDeployedContractFactory, diff --git a/packages/thirdweb/src/tokens/create-token.ts b/packages/thirdweb/src/tokens/create-token.ts index 581c3b342f0..14b00b209cf 100644 --- a/packages/thirdweb/src/tokens/create-token.ts +++ b/packages/thirdweb/src/tokens/create-token.ts @@ -62,3 +62,39 @@ export async function createToken(options: CreateTokenOptions) { return decodedEvent[0]?.args.asset; } + +export async function prepareCreateToken(options: CreateTokenOptions) { + const { client, params, account, launchConfig } = options; + + const creator = params.owner || account.address; + const encodedInitData = await encodeInitParams({ + client, + creator, + params, + }); + + const salt: Hex = generateSalt(options.salt || bytesToHex(randomBytes(31))); + + const entrypoint = await getDeployedEntrypointERC20(options); + + let hookData: Hex = "0x"; + let contractId = padHex(toHex("ERC20Asset"), { size: 32 }); + if (launchConfig?.kind === "pool") { + hookData = encodePoolConfig(launchConfig.config); + contractId = padHex(toHex("ERC20Asset_Pool"), { size: 32 }); + } + + const transaction = createById({ + contract: entrypoint, + contractId, + params: { + data: encodedInitData, + hookData, + developer: options.developerAddress || DEFAULT_DEVELOPER_ADDRESS, + salt, + }, + creator, + }); + + return transaction; +} diff --git a/packages/thirdweb/src/tokens/predict-address.ts b/packages/thirdweb/src/tokens/predict-address.ts index 21ca022b3ae..71f55b1713e 100644 --- a/packages/thirdweb/src/tokens/predict-address.ts +++ b/packages/thirdweb/src/tokens/predict-address.ts @@ -12,7 +12,7 @@ import { import type { CreateTokenOptions } from "./types.js"; export async function predictAddress(options: CreateTokenOptions) { - const { client, account, params, launchConfig } = options; + const { client, params, launchConfig, account } = options; const creator = params.owner || account.address; const encodedInitData = await encodeInitParams({