Skip to content

Commit 1083316

Browse files
authored
[SDK] Feature: prepareCreateToken returns prepared transaction (#7872)
1 parent 2c1ec47 commit 1083316

File tree

4 files changed

+43
-2
lines changed

4 files changed

+43
-2
lines changed

.changeset/twenty-bees-sink.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"thirdweb": patch
3+
---
4+
5+
Update createToken to return a prepared transaction

packages/thirdweb/src/exports/tokens.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export {
66
DEFAULT_DEVELOPER_ADDRESS,
77
DEFAULT_DEVELOPER_REWARD_BPS,
88
} from "../tokens/constants.js";
9-
export { createToken } from "../tokens/create-token.js";
9+
export { createToken, prepareCreateToken } from "../tokens/create-token.js";
1010
export { distributeToken } from "../tokens/distribute-token.js";
1111
export {
1212
getDeployedContractFactory,

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,39 @@ export async function createToken(options: CreateTokenOptions) {
6262

6363
return decodedEvent[0]?.args.asset;
6464
}
65+
66+
export async function prepareCreateToken(options: CreateTokenOptions) {
67+
const { client, params, account, launchConfig } = options;
68+
69+
const creator = params.owner || account.address;
70+
const encodedInitData = await encodeInitParams({
71+
client,
72+
creator,
73+
params,
74+
});
75+
76+
const salt: Hex = generateSalt(options.salt || bytesToHex(randomBytes(31)));
77+
78+
const entrypoint = await getDeployedEntrypointERC20(options);
79+
80+
let hookData: Hex = "0x";
81+
let contractId = padHex(toHex("ERC20Asset"), { size: 32 });
82+
if (launchConfig?.kind === "pool") {
83+
hookData = encodePoolConfig(launchConfig.config);
84+
contractId = padHex(toHex("ERC20Asset_Pool"), { size: 32 });
85+
}
86+
87+
const transaction = createById({
88+
contract: entrypoint,
89+
contractId,
90+
params: {
91+
data: encodedInitData,
92+
hookData,
93+
developer: options.developerAddress || DEFAULT_DEVELOPER_ADDRESS,
94+
salt,
95+
},
96+
creator,
97+
});
98+
99+
return transaction;
100+
}

packages/thirdweb/src/tokens/predict-address.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
import type { CreateTokenOptions } from "./types.js";
1313

1414
export async function predictAddress(options: CreateTokenOptions) {
15-
const { client, account, params, launchConfig } = options;
15+
const { client, params, launchConfig, account } = options;
1616

1717
const creator = params.owner || account.address;
1818
const encodedInitData = await encodeInitParams({

0 commit comments

Comments
 (0)