thirdweb 5.45.0 → 5.45.2-nightly-141fd53759f1b5515e38688fe96364edc4c76644-20240812000351
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/cli/bin.js +0 -17
- package/dist/cjs/cli/bin.js.map +1 -1
- package/dist/cjs/exports/deploys.js +3 -1
- package/dist/cjs/exports/deploys.js.map +1 -1
- package/dist/cjs/exports/extensions/split.js +7 -1
- package/dist/cjs/exports/extensions/split.js.map +1 -1
- package/dist/cjs/extensions/prebuilts/__generated__/Split/write/initialize.js +157 -0
- package/dist/cjs/extensions/prebuilts/__generated__/Split/write/initialize.js.map +1 -0
- package/dist/cjs/extensions/prebuilts/deploy-split.js +79 -0
- package/dist/cjs/extensions/prebuilts/deploy-split.js.map +1 -0
- package/dist/cjs/extensions/split/__generated__/Split/read/totalShares.js +71 -0
- package/dist/cjs/extensions/split/__generated__/Split/read/totalShares.js.map +1 -0
- package/dist/cjs/extensions/split/read/getAllRecipientsAddresses.js +24 -0
- package/dist/cjs/extensions/split/read/getAllRecipientsAddresses.js.map +1 -0
- package/dist/cjs/extensions/split/read/getAllRecipientsPercentages.js +34 -0
- package/dist/cjs/extensions/split/read/getAllRecipientsPercentages.js.map +1 -0
- package/dist/cjs/extensions/split/read/getRecipientSplitPercentage.js +21 -0
- package/dist/cjs/extensions/split/read/getRecipientSplitPercentage.js.map +1 -0
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/esm/cli/bin.js +0 -17
- package/dist/esm/cli/bin.js.map +1 -1
- package/dist/esm/exports/deploys.js +1 -0
- package/dist/esm/exports/deploys.js.map +1 -1
- package/dist/esm/exports/extensions/split.js +3 -0
- package/dist/esm/exports/extensions/split.js.map +1 -1
- package/dist/esm/extensions/prebuilts/__generated__/Split/write/initialize.js +150 -0
- package/dist/esm/extensions/prebuilts/__generated__/Split/write/initialize.js.map +1 -0
- package/dist/esm/extensions/prebuilts/deploy-split.js +76 -0
- package/dist/esm/extensions/prebuilts/deploy-split.js.map +1 -0
- package/dist/esm/extensions/split/__generated__/Split/read/totalShares.js +65 -0
- package/dist/esm/extensions/split/__generated__/Split/read/totalShares.js.map +1 -0
- package/dist/esm/extensions/split/read/getAllRecipientsAddresses.js +21 -0
- package/dist/esm/extensions/split/read/getAllRecipientsAddresses.js.map +1 -0
- package/dist/esm/extensions/split/read/getAllRecipientsPercentages.js +31 -0
- package/dist/esm/extensions/split/read/getAllRecipientsPercentages.js.map +1 -0
- package/dist/esm/extensions/split/read/getRecipientSplitPercentage.js +18 -0
- package/dist/esm/extensions/split/read/getRecipientSplitPercentage.js.map +1 -0
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/types/exports/deploys.d.ts +1 -0
- package/dist/types/exports/deploys.d.ts.map +1 -1
- package/dist/types/exports/extensions/split.d.ts +3 -0
- package/dist/types/exports/extensions/split.d.ts.map +1 -1
- package/dist/types/extensions/prebuilts/__generated__/Split/write/initialize.d.ts +108 -0
- package/dist/types/extensions/prebuilts/__generated__/Split/write/initialize.d.ts.map +1 -0
- package/dist/types/extensions/prebuilts/deploy-split.d.ts +66 -0
- package/dist/types/extensions/prebuilts/deploy-split.d.ts.map +1 -0
- package/dist/types/extensions/split/__generated__/Split/read/totalShares.d.ts +46 -0
- package/dist/types/extensions/split/__generated__/Split/read/totalShares.d.ts.map +1 -0
- package/dist/types/extensions/split/read/getAllRecipientsAddresses.d.ts +14 -0
- package/dist/types/extensions/split/read/getAllRecipientsAddresses.d.ts.map +1 -0
- package/dist/types/extensions/split/read/getAllRecipientsPercentages.d.ts +27 -0
- package/dist/types/extensions/split/read/getAllRecipientsPercentages.d.ts.map +1 -0
- package/dist/types/extensions/split/read/getRecipientSplitPercentage.d.ts +21 -0
- package/dist/types/extensions/split/read/getRecipientSplitPercentage.d.ts.map +1 -0
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/cli/bin.ts +0 -18
- package/src/exports/deploys.ts +5 -0
- package/src/exports/extensions/split.ts +8 -0
- package/src/extensions/prebuilts/__generated__/Split/write/initialize.ts +191 -0
- package/src/extensions/prebuilts/deploy-split.test.ts +31 -0
- package/src/extensions/prebuilts/deploy-split.ts +144 -0
- package/src/extensions/split/__generated__/Split/read/totalShares.ts +72 -0
- package/src/extensions/split/read/getAllRecipientsAddresses.test.ts +39 -0
- package/src/extensions/split/read/getAllRecipientsAddresses.ts +26 -0
- package/src/extensions/split/read/getAllRecipientsPercentages.test.ts +48 -0
- package/src/extensions/split/read/getAllRecipientsPercentages.ts +41 -0
- package/src/extensions/split/read/getRecipientSplitPercentage.test.ts +45 -0
- package/src/extensions/split/read/getRecipientSplitPercentage.ts +40 -0
- package/src/version.ts +1 -1
@@ -0,0 +1,26 @@
|
|
1
|
+
import type { BaseTransactionOptions } from "../../../transaction/types.js";
|
2
|
+
import { payee } from "../__generated__/Split/read/payee.js";
|
3
|
+
import { payeeCount } from "../__generated__/Split/read/payeeCount.js";
|
4
|
+
|
5
|
+
/**
|
6
|
+
* Get the addresses of all recipients of a [`thirdweb Split contract`](https://thirdweb.com/thirdweb.eth/Split)
|
7
|
+
* @extension SPLIT
|
8
|
+
* @returns an array of wallet addresses
|
9
|
+
*
|
10
|
+
* @example
|
11
|
+
* ```ts
|
12
|
+
* import { getAllRecipientsAddresses } from "thirdweb/extensions/split";
|
13
|
+
*
|
14
|
+
* const addresses = await getAllRecipientsAddresses({ contract });
|
15
|
+
*/
|
16
|
+
export async function getAllRecipientsAddresses(
|
17
|
+
options: BaseTransactionOptions,
|
18
|
+
): Promise<string[]> {
|
19
|
+
const { contract } = options;
|
20
|
+
const _totalRecipients = await payeeCount(options);
|
21
|
+
const indexes = Array.from({ length: Number(_totalRecipients) }, (_, i) => i);
|
22
|
+
const recipientAddresses = await Promise.all(
|
23
|
+
indexes.map((index) => payee({ contract, index: BigInt(index) })),
|
24
|
+
);
|
25
|
+
return recipientAddresses;
|
26
|
+
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
2
|
+
import { ANVIL_CHAIN } from "~test/chains.js";
|
3
|
+
import { TEST_CLIENT } from "~test/test-clients.js";
|
4
|
+
import { TEST_ACCOUNT_A } from "~test/test-wallets.js";
|
5
|
+
import { getContract } from "../../../contract/contract.js";
|
6
|
+
import { deploySplitContract } from "../../../extensions/prebuilts/deploy-split.js";
|
7
|
+
import { getAllRecipientsPercentages } from "./getAllRecipientsPercentages.js";
|
8
|
+
|
9
|
+
const chain = ANVIL_CHAIN;
|
10
|
+
const client = TEST_CLIENT;
|
11
|
+
|
12
|
+
describe("getAllRecipientsPercentages", () => {
|
13
|
+
it("should work", async () => {
|
14
|
+
const payees = [
|
15
|
+
"0x12345674b599ce99958242b3D3741e7b01841DF3",
|
16
|
+
"0xA6f11e47dE28B3dB934e945daeb6F538E9019694",
|
17
|
+
];
|
18
|
+
const address = await deploySplitContract({
|
19
|
+
account: TEST_ACCOUNT_A,
|
20
|
+
client: TEST_CLIENT,
|
21
|
+
chain: ANVIL_CHAIN,
|
22
|
+
params: {
|
23
|
+
name: "split-contract",
|
24
|
+
payees,
|
25
|
+
shares: [
|
26
|
+
5100n, // 51%
|
27
|
+
4900n, // 49%
|
28
|
+
],
|
29
|
+
},
|
30
|
+
});
|
31
|
+
const contract = getContract({
|
32
|
+
address,
|
33
|
+
chain,
|
34
|
+
client,
|
35
|
+
});
|
36
|
+
const result = await getAllRecipientsPercentages({ contract });
|
37
|
+
expect(result).toStrictEqual([
|
38
|
+
{
|
39
|
+
address: "0x12345674b599ce99958242b3D3741e7b01841DF3",
|
40
|
+
splitPercentage: 51,
|
41
|
+
},
|
42
|
+
{
|
43
|
+
address: "0xA6f11e47dE28B3dB934e945daeb6F538E9019694",
|
44
|
+
splitPercentage: 49,
|
45
|
+
},
|
46
|
+
]);
|
47
|
+
});
|
48
|
+
});
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import type { BaseTransactionOptions } from "../../../transaction/types.js";
|
2
|
+
import { getAllRecipientsAddresses } from "./getAllRecipientsAddresses.js";
|
3
|
+
import {
|
4
|
+
type SplitRecipient,
|
5
|
+
getRecipientSplitPercentage,
|
6
|
+
} from "./getRecipientSplitPercentage.js";
|
7
|
+
|
8
|
+
/**
|
9
|
+
* Get all the recipients of a Split contracts
|
10
|
+
* @extension SPLIT
|
11
|
+
* @returns an array of recipients' addresses and split percentage of each
|
12
|
+
*
|
13
|
+
* @example
|
14
|
+
* ```ts
|
15
|
+
* import { getAllRecipientsPercentages } from "thirdweb/extensions/split";
|
16
|
+
*
|
17
|
+
* const allRecipients = await getAllRecipientsPercentages({ contract });
|
18
|
+
* // Example result:
|
19
|
+
* [
|
20
|
+
* {
|
21
|
+
* address: "0x1...",
|
22
|
+
* splitPercentage: 25, // 25%
|
23
|
+
* },
|
24
|
+
* {
|
25
|
+
* address: "0x2...",
|
26
|
+
* splitPercentage: 75, // 75%
|
27
|
+
* },
|
28
|
+
* ];
|
29
|
+
* ```
|
30
|
+
*/
|
31
|
+
export async function getAllRecipientsPercentages(
|
32
|
+
options: BaseTransactionOptions,
|
33
|
+
): Promise<SplitRecipient[]> {
|
34
|
+
const { contract } = options;
|
35
|
+
const recipientAddresses = await getAllRecipientsAddresses({ contract });
|
36
|
+
return await Promise.all(
|
37
|
+
recipientAddresses.map((recipientAddress) =>
|
38
|
+
getRecipientSplitPercentage({ contract, recipientAddress }),
|
39
|
+
),
|
40
|
+
);
|
41
|
+
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
2
|
+
import { ANVIL_CHAIN } from "~test/chains.js";
|
3
|
+
import { TEST_CLIENT } from "~test/test-clients.js";
|
4
|
+
import { TEST_ACCOUNT_A } from "~test/test-wallets.js";
|
5
|
+
import { getContract } from "../../../contract/contract.js";
|
6
|
+
import { deploySplitContract } from "../../../extensions/prebuilts/deploy-split.js";
|
7
|
+
import { getRecipientSplitPercentage } from "./getRecipientSplitPercentage.js";
|
8
|
+
const chain = ANVIL_CHAIN;
|
9
|
+
const client = TEST_CLIENT;
|
10
|
+
|
11
|
+
describe("getRecipientSplitPercentage", () => {
|
12
|
+
it("should work", async () => {
|
13
|
+
const payees = [
|
14
|
+
"0x12345674b599ce99958242b3D3741e7b01841DF3",
|
15
|
+
"0xA6f11e47dE28B3dB934e945daeb6F538E9019694",
|
16
|
+
];
|
17
|
+
const address = await deploySplitContract({
|
18
|
+
account: TEST_ACCOUNT_A,
|
19
|
+
client: TEST_CLIENT,
|
20
|
+
chain: ANVIL_CHAIN,
|
21
|
+
params: {
|
22
|
+
name: "split-contract",
|
23
|
+
payees,
|
24
|
+
shares: [
|
25
|
+
5100n, // 51%
|
26
|
+
4900n, // 49%
|
27
|
+
],
|
28
|
+
},
|
29
|
+
});
|
30
|
+
const contract = getContract({
|
31
|
+
address,
|
32
|
+
chain,
|
33
|
+
client,
|
34
|
+
});
|
35
|
+
const result = await getRecipientSplitPercentage({
|
36
|
+
contract,
|
37
|
+
recipientAddress: "0x12345674b599ce99958242b3D3741e7b01841DF3",
|
38
|
+
});
|
39
|
+
|
40
|
+
expect(result).toStrictEqual({
|
41
|
+
address: "0x12345674b599ce99958242b3D3741e7b01841DF3",
|
42
|
+
splitPercentage: 51,
|
43
|
+
});
|
44
|
+
});
|
45
|
+
});
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import type { BaseTransactionOptions } from "../../../transaction/types.js";
|
2
|
+
import { shares } from "../__generated__/Split/read/shares.js";
|
3
|
+
import { totalShares } from "../__generated__/Split/read/totalShares.js";
|
4
|
+
|
5
|
+
/**
|
6
|
+
* @extension SPLIT
|
7
|
+
*/
|
8
|
+
export interface SplitRecipient {
|
9
|
+
/**
|
10
|
+
* The address of the recipient
|
11
|
+
*/
|
12
|
+
address: string;
|
13
|
+
|
14
|
+
/**
|
15
|
+
* The split of the recipient as a percentage of the total amount
|
16
|
+
*
|
17
|
+
* I.e. If a recipient has a split of 50%, and the asset sells for 100 ETH,
|
18
|
+
* the recipient will receive 50 ETH.
|
19
|
+
*/
|
20
|
+
splitPercentage: number;
|
21
|
+
}
|
22
|
+
|
23
|
+
export async function getRecipientSplitPercentage(
|
24
|
+
options: BaseTransactionOptions<{ recipientAddress: string }>,
|
25
|
+
): Promise<SplitRecipient> {
|
26
|
+
const { contract, recipientAddress } = options;
|
27
|
+
const [_totalShares, walletsShares] = await Promise.all([
|
28
|
+
totalShares({ contract }),
|
29
|
+
shares({ contract, account: recipientAddress }),
|
30
|
+
]);
|
31
|
+
// We convert to basis points to avoid floating point loss of precision
|
32
|
+
// 7544n -> 75.44 (75.44 %)
|
33
|
+
// also we don't have to worry about number overflow in this particular context
|
34
|
+
const splitPercentage =
|
35
|
+
(Number(walletsShares) * 1e7) / Number(_totalShares) / 1e5;
|
36
|
+
return {
|
37
|
+
address: recipientAddress,
|
38
|
+
splitPercentage,
|
39
|
+
};
|
40
|
+
}
|
package/src/version.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export const version = "5.45.
|
1
|
+
export const version = "5.45.2-nightly-141fd53759f1b5515e38688fe96364edc4c76644-20240812000351";
|