@bosonprotocol/core-sdk 1.20.1 → 1.21.0-alpha.0

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.
Files changed (89) hide show
  1. package/dist/cjs/core-sdk.d.ts +60 -102
  2. package/dist/cjs/core-sdk.d.ts.map +1 -1
  3. package/dist/cjs/core-sdk.js +93 -19
  4. package/dist/cjs/core-sdk.js.map +1 -1
  5. package/dist/cjs/erc20/handler.d.ts +7 -0
  6. package/dist/cjs/erc20/handler.d.ts.map +1 -1
  7. package/dist/cjs/erc20/handler.js +12 -1
  8. package/dist/cjs/erc20/handler.js.map +1 -1
  9. package/dist/cjs/exchanges/handler.d.ts.map +1 -1
  10. package/dist/cjs/exchanges/handler.js +12 -0
  11. package/dist/cjs/exchanges/handler.js.map +1 -1
  12. package/dist/cjs/index.d.ts +1 -0
  13. package/dist/cjs/index.d.ts.map +1 -1
  14. package/dist/cjs/index.js +2 -1
  15. package/dist/cjs/index.js.map +1 -1
  16. package/dist/cjs/meta-tx/biconomy.d.ts +0 -1
  17. package/dist/cjs/meta-tx/biconomy.d.ts.map +1 -1
  18. package/dist/cjs/meta-tx/biconomy.js +14 -2
  19. package/dist/cjs/meta-tx/biconomy.js.map +1 -1
  20. package/dist/cjs/meta-tx/handler.d.ts +31 -108
  21. package/dist/cjs/meta-tx/handler.d.ts.map +1 -1
  22. package/dist/cjs/meta-tx/handler.js +28 -28
  23. package/dist/cjs/meta-tx/handler.js.map +1 -1
  24. package/dist/cjs/native-meta-tx/handler.d.ts +43 -0
  25. package/dist/cjs/native-meta-tx/handler.d.ts.map +1 -0
  26. package/dist/cjs/native-meta-tx/handler.js +121 -0
  27. package/dist/cjs/native-meta-tx/handler.js.map +1 -0
  28. package/dist/cjs/native-meta-tx/index.d.ts +3 -0
  29. package/dist/cjs/native-meta-tx/index.d.ts.map +1 -0
  30. package/dist/cjs/native-meta-tx/index.js +29 -0
  31. package/dist/cjs/native-meta-tx/index.js.map +1 -0
  32. package/dist/cjs/native-meta-tx/interface.d.ts +3 -0
  33. package/dist/cjs/native-meta-tx/interface.d.ts.map +1 -0
  34. package/dist/cjs/native-meta-tx/interface.js +7 -0
  35. package/dist/cjs/native-meta-tx/interface.js.map +1 -0
  36. package/dist/cjs/utils/signature.d.ts +1 -0
  37. package/dist/cjs/utils/signature.d.ts.map +1 -1
  38. package/dist/cjs/utils/signature.js +1 -6
  39. package/dist/cjs/utils/signature.js.map +1 -1
  40. package/dist/esm/core-sdk.d.ts +60 -102
  41. package/dist/esm/core-sdk.d.ts.map +1 -1
  42. package/dist/esm/core-sdk.js +86 -12
  43. package/dist/esm/core-sdk.js.map +1 -1
  44. package/dist/esm/erc20/handler.d.ts +7 -0
  45. package/dist/esm/erc20/handler.d.ts.map +1 -1
  46. package/dist/esm/erc20/handler.js +8 -0
  47. package/dist/esm/erc20/handler.js.map +1 -1
  48. package/dist/esm/exchanges/handler.d.ts.map +1 -1
  49. package/dist/esm/exchanges/handler.js +12 -0
  50. package/dist/esm/exchanges/handler.js.map +1 -1
  51. package/dist/esm/index.d.ts +1 -0
  52. package/dist/esm/index.d.ts.map +1 -1
  53. package/dist/esm/index.js +1 -0
  54. package/dist/esm/index.js.map +1 -1
  55. package/dist/esm/meta-tx/biconomy.d.ts +0 -1
  56. package/dist/esm/meta-tx/biconomy.d.ts.map +1 -1
  57. package/dist/esm/meta-tx/biconomy.js +14 -2
  58. package/dist/esm/meta-tx/biconomy.js.map +1 -1
  59. package/dist/esm/meta-tx/handler.d.ts +31 -108
  60. package/dist/esm/meta-tx/handler.d.ts.map +1 -1
  61. package/dist/esm/meta-tx/handler.js +28 -27
  62. package/dist/esm/meta-tx/handler.js.map +1 -1
  63. package/dist/esm/native-meta-tx/handler.d.ts +43 -0
  64. package/dist/esm/native-meta-tx/handler.d.ts.map +1 -0
  65. package/dist/esm/native-meta-tx/handler.js +108 -0
  66. package/dist/esm/native-meta-tx/handler.js.map +1 -0
  67. package/dist/esm/native-meta-tx/index.d.ts +3 -0
  68. package/dist/esm/native-meta-tx/index.d.ts.map +1 -0
  69. package/dist/esm/native-meta-tx/index.js +3 -0
  70. package/dist/esm/native-meta-tx/index.js.map +1 -0
  71. package/dist/esm/native-meta-tx/interface.d.ts +3 -0
  72. package/dist/esm/native-meta-tx/interface.d.ts.map +1 -0
  73. package/dist/esm/native-meta-tx/interface.js +4 -0
  74. package/dist/esm/native-meta-tx/interface.js.map +1 -0
  75. package/dist/esm/utils/signature.d.ts +1 -0
  76. package/dist/esm/utils/signature.d.ts.map +1 -1
  77. package/dist/esm/utils/signature.js +2 -1
  78. package/dist/esm/utils/signature.js.map +1 -1
  79. package/package.json +3 -3
  80. package/src/core-sdk.ts +142 -25
  81. package/src/erc20/handler.ts +15 -1
  82. package/src/exchanges/handler.ts +13 -0
  83. package/src/index.ts +1 -0
  84. package/src/meta-tx/biconomy.ts +13 -6
  85. package/src/meta-tx/handler.ts +59 -37
  86. package/src/native-meta-tx/handler.ts +170 -0
  87. package/src/native-meta-tx/index.ts +2 -0
  88. package/src/native-meta-tx/interface.ts +6 -0
  89. package/src/utils/signature.ts +3 -1
@@ -0,0 +1,170 @@
1
+ import {
2
+ MetaTxConfig,
3
+ Web3LibAdapter,
4
+ TransactionResponse
5
+ } from "@bosonprotocol/common";
6
+ import { BigNumberish, BigNumber } from "@ethersproject/bignumber";
7
+ import { BytesLike } from "@ethersproject/bytes";
8
+ import { Biconomy } from "../meta-tx/biconomy";
9
+ import { BaseMetaTxArgs, SignedMetaTx } from "../meta-tx/handler";
10
+ import { prepareDataSignatureParameters } from "../utils/signature";
11
+ import { nativeMetaTransactionsIface } from "./interface";
12
+ import { getName as getERC20Name } from "../erc20/handler";
13
+ import { erc20Iface } from "../erc20/interface";
14
+
15
+ const ERC712_VERSION = "1"; // Is consistent with all implementations of child tokens on Polygon
16
+
17
+ export async function getNonce(args: {
18
+ contractAddress: string;
19
+ user: string;
20
+ web3Lib: Web3LibAdapter;
21
+ }): Promise<string> {
22
+ const result = await args.web3Lib.call({
23
+ to: args.contractAddress,
24
+ data: nativeMetaTransactionsIface.encodeFunctionData("getNonce", [
25
+ args.user
26
+ ])
27
+ });
28
+
29
+ const [nonce] = nativeMetaTransactionsIface.decodeFunctionResult(
30
+ "getNonce",
31
+ result
32
+ );
33
+ return String(nonce);
34
+ }
35
+
36
+ export async function signNativeMetaTx(
37
+ args: BaseMetaTxArgs & {
38
+ functionName: string;
39
+ functionSignature: string;
40
+ domain: {
41
+ name: string;
42
+ version: string;
43
+ };
44
+ }
45
+ ): Promise<SignedMetaTx> {
46
+ const metaTransactionType = [
47
+ { name: "nonce", type: "uint256" },
48
+ { name: "from", type: "address" },
49
+ { name: "functionSignature", type: "bytes" }
50
+ ];
51
+
52
+ const customSignatureType = {
53
+ MetaTransaction: metaTransactionType
54
+ };
55
+
56
+ const signerAddress = await args.web3Lib.getSignerAddress();
57
+
58
+ const message = {
59
+ nonce: args.nonce,
60
+ from: signerAddress,
61
+ functionSignature: args.functionSignature
62
+ };
63
+
64
+ const signature = await prepareDataSignatureParameters({
65
+ ...args,
66
+ verifyingContractAddress: args.metaTxHandlerAddress,
67
+ customSignatureType,
68
+ customDomainData: args.domain,
69
+ primaryType: "MetaTransaction",
70
+ message
71
+ });
72
+
73
+ return {
74
+ functionName: args.functionName,
75
+ functionSignature: args.functionSignature,
76
+ ...signature
77
+ };
78
+ }
79
+
80
+ export async function signNativeMetaTxApproveExchangeToken(args: {
81
+ web3Lib: Web3LibAdapter;
82
+ chainId: number;
83
+ user: string;
84
+ exchangeToken: string;
85
+ spender: string;
86
+ value: BigNumberish;
87
+ }) {
88
+ const domain = {
89
+ name: await getERC20Name({
90
+ contractAddress: args.exchangeToken,
91
+ web3Lib: args.web3Lib
92
+ }),
93
+ version: ERC712_VERSION
94
+ };
95
+ const nonce = await getNonce({
96
+ contractAddress: args.exchangeToken,
97
+ user: args.user,
98
+ web3Lib: args.web3Lib
99
+ });
100
+ const functionName = "approve(address,uint256)";
101
+ const functionSignature = erc20Iface.encodeFunctionData("approve", [
102
+ args.spender,
103
+ args.value
104
+ ]);
105
+ return signNativeMetaTx({
106
+ web3Lib: args.web3Lib,
107
+ metaTxHandlerAddress: args.exchangeToken,
108
+ chainId: args.chainId,
109
+ nonce: nonce,
110
+ functionName,
111
+ functionSignature,
112
+ domain
113
+ });
114
+ }
115
+
116
+ export async function relayNativeMetaTransaction(args: {
117
+ web3LibAdapter: Web3LibAdapter;
118
+ chainId: number;
119
+ contractAddress: string;
120
+ metaTx: {
121
+ config: Omit<MetaTxConfig, "apiIds"> & { apiId: string };
122
+ params: {
123
+ userAddress: string;
124
+ functionSignature: BytesLike;
125
+ sigR: BytesLike;
126
+ sigS: BytesLike;
127
+ sigV: BigNumberish;
128
+ };
129
+ };
130
+ }): Promise<TransactionResponse> {
131
+ const { chainId, contractAddress, metaTx } = args;
132
+
133
+ const biconomy = new Biconomy(
134
+ metaTx.config.relayerUrl,
135
+ metaTx.config.apiKey,
136
+ metaTx.config.apiId
137
+ );
138
+
139
+ const relayTxResponse = await biconomy.relayTransaction({
140
+ to: contractAddress,
141
+ params: [
142
+ metaTx.params.userAddress,
143
+ metaTx.params.functionSignature,
144
+ metaTx.params.sigR,
145
+ metaTx.params.sigS,
146
+ metaTx.params.sigV
147
+ ],
148
+ from: metaTx.params.userAddress
149
+ });
150
+
151
+ return {
152
+ wait: async () => {
153
+ const waitResponse = await biconomy.wait({
154
+ networkId: chainId,
155
+ transactionHash: relayTxResponse.txHash
156
+ });
157
+
158
+ const txHash = waitResponse.data.newHash;
159
+ const txReceipt = await args.web3LibAdapter.getTransactionReceipt(txHash);
160
+ return {
161
+ to: txReceipt?.to || contractAddress,
162
+ from: txReceipt?.from || metaTx.params.userAddress,
163
+ transactionHash: txHash,
164
+ logs: txReceipt?.logs || [],
165
+ effectiveGasPrice: BigNumber.from(waitResponse.data.newGasPrice)
166
+ };
167
+ },
168
+ hash: relayTxResponse.txHash
169
+ };
170
+ }
@@ -0,0 +1,2 @@
1
+ export * as iface from "./interface";
2
+ export * as handler from "./handler";
@@ -0,0 +1,6 @@
1
+ import { abis } from "@bosonprotocol/common";
2
+ import { Interface } from "@ethersproject/abi";
3
+
4
+ export const nativeMetaTransactionsIface = new Interface(
5
+ abis.NativeMetaTransactionABI
6
+ );
@@ -7,6 +7,7 @@ type SignatureArgs = {
7
7
  verifyingContractAddress: string;
8
8
  chainId: number;
9
9
  customSignatureType?: Record<string, unknown>;
10
+ customDomainData?: Record<string, unknown>;
10
11
  primaryType: string;
11
12
  message: Record<string, unknown>;
12
13
  };
@@ -23,7 +24,8 @@ export async function prepareDataSignatureParameters(args: SignatureArgs) {
23
24
  name: "Boson Protocol",
24
25
  version: "V2",
25
26
  verifyingContract: args.verifyingContractAddress,
26
- salt: hexZeroPad(BigNumber.from(args.chainId).toHexString(), 32)
27
+ salt: hexZeroPad(BigNumber.from(args.chainId).toHexString(), 32),
28
+ ...args.customDomainData
27
29
  };
28
30
 
29
31
  const signatureTypes = {