@hyperlane-xyz/tron-sdk 21.0.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 (83) hide show
  1. package/LICENSE.md +195 -0
  2. package/README.md +47 -0
  3. package/dist/abi/DomainRoutingIsm.json +240 -0
  4. package/dist/abi/ERC20.json +293 -0
  5. package/dist/abi/ERC20Test.json +365 -0
  6. package/dist/abi/HypERC20.json +920 -0
  7. package/dist/abi/HypERC20Collateral.json +1556 -0
  8. package/dist/abi/HypNative.json +1561 -0
  9. package/dist/abi/IERC20.json +190 -0
  10. package/dist/abi/IInterchainSecurityModule.json +44 -0
  11. package/dist/abi/IPostDispatchHook.json +81 -0
  12. package/dist/abi/InterchainGasPaymaster.json +518 -0
  13. package/dist/abi/Mailbox.json +686 -0
  14. package/dist/abi/MerkleTreeHook.json +375 -0
  15. package/dist/abi/NoopIsm.json +57 -0
  16. package/dist/abi/PausableHook.json +199 -0
  17. package/dist/abi/ProxyAdmin.json +156 -0
  18. package/dist/abi/StaticMerkleRootMultisigIsm.json +100 -0
  19. package/dist/abi/StaticMessageIdMultisigIsm.json +100 -0
  20. package/dist/abi/StorageGasOracle.json +205 -0
  21. package/dist/abi/TransparentUpgradeableProxy.json +81 -0
  22. package/dist/abi/ValidatorAnnounce.json +299 -0
  23. package/dist/clients/protocol.d.ts +17 -0
  24. package/dist/clients/protocol.d.ts.map +1 -0
  25. package/dist/clients/protocol.js +40 -0
  26. package/dist/clients/protocol.js.map +1 -0
  27. package/dist/clients/provider.d.ts +67 -0
  28. package/dist/clients/provider.d.ts.map +1 -0
  29. package/dist/clients/provider.js +558 -0
  30. package/dist/clients/provider.js.map +1 -0
  31. package/dist/clients/signer.d.ts +46 -0
  32. package/dist/clients/signer.d.ts.map +1 -0
  33. package/dist/clients/signer.js +561 -0
  34. package/dist/clients/signer.js.map +1 -0
  35. package/dist/hook/hook-query.d.ts +41 -0
  36. package/dist/hook/hook-query.d.ts.map +1 -0
  37. package/dist/hook/hook-query.js +79 -0
  38. package/dist/hook/hook-query.js.map +1 -0
  39. package/dist/hook/hook-tx.d.ts +39 -0
  40. package/dist/hook/hook-tx.d.ts.map +1 -0
  41. package/dist/hook/hook-tx.js +95 -0
  42. package/dist/hook/hook-tx.js.map +1 -0
  43. package/dist/index.d.ts +5 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +4 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/ism/ism-query.d.ts +70 -0
  48. package/dist/ism/ism-query.d.ts.map +1 -0
  49. package/dist/ism/ism-query.js +137 -0
  50. package/dist/ism/ism-query.js.map +1 -0
  51. package/dist/ism/ism-tx.d.ts +67 -0
  52. package/dist/ism/ism-tx.d.ts.map +1 -0
  53. package/dist/ism/ism-tx.js +110 -0
  54. package/dist/ism/ism-tx.js.map +1 -0
  55. package/dist/tests/1_interchain_security.e2e-test.d.ts +2 -0
  56. package/dist/tests/1_interchain_security.e2e-test.d.ts.map +1 -0
  57. package/dist/tests/1_interchain_security.e2e-test.js +172 -0
  58. package/dist/tests/1_interchain_security.e2e-test.js.map +1 -0
  59. package/dist/tests/2_core.e2e-test.d.ts +2 -0
  60. package/dist/tests/2_core.e2e-test.d.ts.map +1 -0
  61. package/dist/tests/2_core.e2e-test.js +117 -0
  62. package/dist/tests/2_core.e2e-test.js.map +1 -0
  63. package/dist/tests/3_post_dispatch.e2e-test.d.ts +2 -0
  64. package/dist/tests/3_post_dispatch.e2e-test.d.ts.map +1 -0
  65. package/dist/tests/3_post_dispatch.e2e-test.js +116 -0
  66. package/dist/tests/3_post_dispatch.e2e-test.js.map +1 -0
  67. package/dist/tests/4_warp.e2e-test.d.ts +2 -0
  68. package/dist/tests/4_warp.e2e-test.d.ts.map +1 -0
  69. package/dist/tests/4_warp.e2e-test.js +304 -0
  70. package/dist/tests/4_warp.e2e-test.js.map +1 -0
  71. package/dist/tests/index.e2e-test.d.ts +5 -0
  72. package/dist/tests/index.e2e-test.d.ts.map +1 -0
  73. package/dist/tests/index.e2e-test.js +6 -0
  74. package/dist/tests/index.e2e-test.js.map +1 -0
  75. package/dist/utils/index.d.ts +24 -0
  76. package/dist/utils/index.d.ts.map +1 -0
  77. package/dist/utils/index.js +71 -0
  78. package/dist/utils/index.js.map +1 -0
  79. package/dist/utils/types.d.ts +94 -0
  80. package/dist/utils/types.d.ts.map +1 -0
  81. package/dist/utils/types.js +13 -0
  82. package/dist/utils/types.js.map +1 -0
  83. package/package.json +63 -0
@@ -0,0 +1,304 @@
1
+ import { expect } from 'chai';
2
+ import { step } from 'mocha-steps';
3
+ import { TronWeb } from 'tronweb';
4
+ import { AltVM } from '@hyperlane-xyz/provider-sdk';
5
+ import ERC20TestAbi from '../abi/ERC20Test.json' with { type: 'json' };
6
+ import { TronSigner } from '../clients/signer.js';
7
+ describe('4. tron sdk warp e2e tests', async function () {
8
+ this.timeout(100_000);
9
+ const localnetRpc = 'http://127.0.0.1:9090';
10
+ let signer;
11
+ let proxyAdminAddress;
12
+ let mailboxAddress;
13
+ let collateralDenom;
14
+ let nativeTokenAddress;
15
+ const domainId = 1234;
16
+ before(async () => {
17
+ // test private key with funds
18
+ const privateKey = '0000000000000000000000000000000000000000000000000000000000000001';
19
+ signer = await TronSigner.connectWithSigner([localnetRpc], privateKey, {
20
+ metadata: {
21
+ chainId: '9',
22
+ },
23
+ });
24
+ const proxyAdmin = await signer.createProxyAdmin({
25
+ owner: signer.getSignerAddress(),
26
+ });
27
+ proxyAdminAddress = proxyAdmin.proxyAdminAddress;
28
+ const mailbox = await signer.createMailbox({
29
+ domainId: domainId,
30
+ proxyAdminAddress,
31
+ });
32
+ mailboxAddress = mailbox.mailboxAddress;
33
+ const tronweb = new TronWeb({
34
+ fullHost: localnetRpc,
35
+ privateKey: privateKey,
36
+ });
37
+ const options = {
38
+ feeLimit: 1_000_000_000,
39
+ userFeePercentage: 100,
40
+ originEnergyLimit: 10_000_000,
41
+ abi: ERC20TestAbi.abi,
42
+ bytecode: ERC20TestAbi.bytecode,
43
+ parameters: ['test', 'test', 100_000_000, 6],
44
+ name: ERC20TestAbi.contractName,
45
+ };
46
+ const tx = await tronweb.transactionBuilder.createSmartContract(options, signer.getSignerAddress());
47
+ const receipt = await signer.sendAndConfirmTransaction(tx);
48
+ collateralDenom = tronweb.address.fromHex(receipt.contract_address);
49
+ });
50
+ step('create new native token', async () => {
51
+ // ARRANGE
52
+ // ACT
53
+ const txResponse = await signer.createNativeToken({
54
+ mailboxAddress,
55
+ proxyAdminAddress,
56
+ });
57
+ // ASSERT
58
+ expect(txResponse.tokenAddress).to.be.not.empty;
59
+ let token = await signer.getToken({
60
+ tokenAddress: txResponse.tokenAddress,
61
+ });
62
+ expect(token).not.to.be.undefined;
63
+ expect(token.owner).to.equal(signer.getSignerAddress());
64
+ expect(token.mailboxAddress).to.equal(mailboxAddress);
65
+ expect(token.denom).to.be.empty;
66
+ expect(token.name).to.be.empty;
67
+ expect(token.symbol).to.be.empty;
68
+ expect(token.decimals).to.equal(0);
69
+ expect(token.ismAddress).to.be.empty;
70
+ expect(token.tokenType).to.equal(AltVM.TokenType.native);
71
+ nativeTokenAddress = txResponse.tokenAddress;
72
+ });
73
+ step('create new collateral token', async () => {
74
+ // ARRANGE
75
+ // ACT
76
+ const txResponse = await signer.createCollateralToken({
77
+ mailboxAddress,
78
+ collateralDenom,
79
+ proxyAdminAddress,
80
+ });
81
+ // ASSERT
82
+ expect(txResponse.tokenAddress).to.be.not.empty;
83
+ let token = await signer.getToken({
84
+ tokenAddress: txResponse.tokenAddress,
85
+ });
86
+ expect(token).not.to.be.undefined;
87
+ expect(token.owner).to.equal(signer.getSignerAddress());
88
+ expect(token.mailboxAddress).to.equal(mailboxAddress);
89
+ expect(token.denom).to.equal(collateralDenom);
90
+ expect(token.name).to.be.equal('test');
91
+ expect(token.symbol).to.be.equal('test');
92
+ expect(token.decimals).to.equal(6);
93
+ expect(token.ismAddress).to.be.empty;
94
+ expect(token.tokenType).to.equal(AltVM.TokenType.collateral);
95
+ });
96
+ step('create new synthetic token', async () => {
97
+ // ARRANGE
98
+ // ACT
99
+ const txResponse = await signer.createSyntheticToken({
100
+ mailboxAddress,
101
+ name: 'test',
102
+ denom: 'test',
103
+ decimals: 6,
104
+ proxyAdminAddress,
105
+ });
106
+ // ASSERT
107
+ expect(txResponse.tokenAddress).to.be.not.empty;
108
+ let token = await signer.getToken({
109
+ tokenAddress: txResponse.tokenAddress,
110
+ });
111
+ expect(token).not.to.be.undefined;
112
+ expect(token.owner).to.equal(signer.getSignerAddress());
113
+ expect(token.mailboxAddress).to.equal(mailboxAddress);
114
+ expect(token.denom).to.equal(txResponse.tokenAddress);
115
+ expect(token.name).to.be.equal('test');
116
+ expect(token.symbol).to.be.equal('test');
117
+ expect(token.decimals).to.equal(6);
118
+ expect(token.ismAddress).to.be.empty;
119
+ expect(token.tokenType).to.equal(AltVM.TokenType.synthetic);
120
+ });
121
+ step('set token ISM', async () => {
122
+ // ARRANGE
123
+ let token = await signer.getToken({
124
+ tokenAddress: nativeTokenAddress,
125
+ });
126
+ expect(token.ismAddress).to.be.empty;
127
+ const { ismAddress } = await signer.createNoopIsm({});
128
+ // ACT
129
+ await signer.setTokenIsm({
130
+ tokenAddress: nativeTokenAddress,
131
+ ismAddress,
132
+ });
133
+ // ASSERT
134
+ token = await signer.getToken({
135
+ tokenAddress: nativeTokenAddress,
136
+ });
137
+ expect(token.ismAddress).to.equal(ismAddress);
138
+ });
139
+ step('set token Hook', async () => {
140
+ // ARRANGE
141
+ let token = await signer.getToken({
142
+ tokenAddress: nativeTokenAddress,
143
+ });
144
+ expect(token.hookAddress).to.be.empty;
145
+ const { hookAddress } = await signer.createMerkleTreeHook({
146
+ mailboxAddress,
147
+ });
148
+ // ACT
149
+ await signer.setTokenHook({
150
+ tokenAddress: nativeTokenAddress,
151
+ hookAddress,
152
+ });
153
+ // ASSERT
154
+ token = await signer.getToken({
155
+ tokenAddress: nativeTokenAddress,
156
+ });
157
+ expect(token.hookAddress).to.equal(hookAddress);
158
+ });
159
+ step('set token owner', async () => {
160
+ // ARRANGE
161
+ const { tokenAddress: newTokenAddress } = await signer.createNativeToken({
162
+ mailboxAddress,
163
+ proxyAdminAddress,
164
+ });
165
+ let token = await signer.getToken({
166
+ tokenAddress: newTokenAddress,
167
+ });
168
+ expect(token.owner).to.equal(signer.getSignerAddress());
169
+ const newOwner = new TronWeb({
170
+ fullHost: localnetRpc,
171
+ }).createRandom().address;
172
+ // ACT
173
+ await signer.setTokenOwner({
174
+ tokenAddress: newTokenAddress,
175
+ newOwner,
176
+ });
177
+ // ASSERT
178
+ token = await signer.getToken({
179
+ tokenAddress: newTokenAddress,
180
+ });
181
+ expect(token.owner).to.equal(newOwner);
182
+ });
183
+ step('enroll remote router', async () => {
184
+ // ARRANGE
185
+ let remoteRouters = await signer.getRemoteRouters({
186
+ tokenAddress: nativeTokenAddress,
187
+ });
188
+ expect(remoteRouters.remoteRouters).to.have.lengthOf(0);
189
+ const receiverAddress = '0xe98b09dff7176053c651a4dc025af3e4f6a442415e9b85dd076ac0ff66b4b1ed';
190
+ const gas = '200000';
191
+ // ACT
192
+ await signer.enrollRemoteRouter({
193
+ tokenAddress: nativeTokenAddress,
194
+ remoteRouter: {
195
+ receiverDomainId: domainId,
196
+ receiverAddress,
197
+ gas,
198
+ },
199
+ });
200
+ // ASSERT
201
+ remoteRouters = await signer.getRemoteRouters({
202
+ tokenAddress: nativeTokenAddress,
203
+ });
204
+ expect(remoteRouters.remoteRouters).to.have.lengthOf(1);
205
+ const remoteRouter = remoteRouters.remoteRouters[0];
206
+ expect(remoteRouter.receiverDomainId).to.equal(domainId);
207
+ expect(remoteRouter.receiverAddress).to.equal(receiverAddress);
208
+ expect(remoteRouter.gas).to.equal(gas);
209
+ });
210
+ step('quote remote transfer', async () => {
211
+ // ARRANGE
212
+ const { hookAddress } = await signer.createInterchainGasPaymasterHook({
213
+ mailboxAddress,
214
+ });
215
+ await signer.setDestinationGasConfig({
216
+ hookAddress,
217
+ destinationGasConfig: {
218
+ remoteDomainId: domainId,
219
+ gasOracle: {
220
+ tokenExchangeRate: '1000',
221
+ gasPrice: '1000',
222
+ },
223
+ gasOverhead: '50000',
224
+ },
225
+ });
226
+ await signer.setRequiredHook({
227
+ mailboxAddress,
228
+ hookAddress,
229
+ });
230
+ const recipient = '0xe98b09dff7176053c651a4dc025af3e4f6a442415e9b85dd076ac0ff66b4b1ed';
231
+ // ACT
232
+ const quote = await signer.quoteRemoteTransfer({
233
+ tokenAddress: nativeTokenAddress,
234
+ destinationDomainId: domainId,
235
+ recipient,
236
+ amount: '1000000',
237
+ });
238
+ // ASSERT
239
+ expect(quote.denom).to.equal('');
240
+ expect(quote.amount).to.equal(25n);
241
+ });
242
+ step('remote transfer', async () => {
243
+ // ARRANGE
244
+ const { ismAddress } = await signer.createNoopIsm({});
245
+ const { hookAddress } = await signer.createMerkleTreeHook({
246
+ mailboxAddress,
247
+ });
248
+ const { hookAddress: noopHook } = await signer.createNoopHook({
249
+ mailboxAddress,
250
+ });
251
+ await signer.setDefaultIsm({
252
+ mailboxAddress,
253
+ ismAddress,
254
+ });
255
+ await signer.setDefaultHook({
256
+ mailboxAddress,
257
+ hookAddress,
258
+ });
259
+ await signer.setRequiredHook({
260
+ mailboxAddress,
261
+ hookAddress: noopHook,
262
+ });
263
+ let mailbox = await signer.getMailbox({
264
+ mailboxAddress,
265
+ });
266
+ expect(mailbox.nonce).to.equal(0);
267
+ const recipient = '0xe98b09dff7176053c651a4dc025af3e4f6a442415e9b85dd076ac0ff66b4b1ed';
268
+ // ACT
269
+ await signer.remoteTransfer({
270
+ tokenAddress: nativeTokenAddress,
271
+ destinationDomainId: domainId,
272
+ recipient,
273
+ amount: '1000000',
274
+ gasLimit: '200000',
275
+ maxFee: {
276
+ denom: '',
277
+ amount: '100',
278
+ },
279
+ });
280
+ // ASSERT
281
+ mailbox = await signer.getMailbox({
282
+ mailboxAddress,
283
+ });
284
+ expect(mailbox.nonce).to.equal(1);
285
+ });
286
+ step('unenroll remote router', async () => {
287
+ // ARRANGE
288
+ let remoteRouters = await signer.getRemoteRouters({
289
+ tokenAddress: nativeTokenAddress,
290
+ });
291
+ expect(remoteRouters.remoteRouters).to.have.lengthOf(1);
292
+ // ACT
293
+ await signer.unenrollRemoteRouter({
294
+ tokenAddress: nativeTokenAddress,
295
+ receiverDomainId: domainId,
296
+ });
297
+ // ASSERT
298
+ remoteRouters = await signer.getRemoteRouters({
299
+ tokenAddress: nativeTokenAddress,
300
+ });
301
+ expect(remoteRouters.remoteRouters).to.have.lengthOf(0);
302
+ });
303
+ });
304
+ //# sourceMappingURL=4_warp.e2e-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"4_warp.e2e-test.js","sourceRoot":"","sources":["../../src/tests/4_warp.e2e-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import './1_interchain_security.e2e-test.js';
2
+ import './2_core.e2e-test.js';
3
+ import './3_post_dispatch.e2e-test';
4
+ import './4_warp.e2e-test';
5
+ //# sourceMappingURL=index.e2e-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.e2e-test.d.ts","sourceRoot":"","sources":["../../src/tests/index.e2e-test.ts"],"names":[],"mappings":"AACA,OAAO,qCAAqC,CAAC;AAC7C,OAAO,sBAAsB,CAAC;AAC9B,OAAO,4BAA4B,CAAC;AACpC,OAAO,mBAAmB,CAAC"}
@@ -0,0 +1,6 @@
1
+ // enforce order of test suites
2
+ import './1_interchain_security.e2e-test.js';
3
+ import './2_core.e2e-test.js';
4
+ import './3_post_dispatch.e2e-test';
5
+ import './4_warp.e2e-test';
6
+ //# sourceMappingURL=index.e2e-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.e2e-test.js","sourceRoot":"","sources":["../../src/tests/index.e2e-test.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,qCAAqC,CAAC;AAC7C,OAAO,sBAAsB,CAAC;AAC9B,OAAO,4BAA4B,CAAC;AACpC,OAAO,mBAAmB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { TronWeb } from 'tronweb';
2
+ import { IABI } from './types.js';
3
+ export declare const TRON_EMPTY_ADDRESS = "T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb";
4
+ export declare const TRON_EMPTY_MESSAGE = "0x0000000000000000000000000000000000000000000000000000000000000000";
5
+ export declare const EIP1967_ADMIN_SLOT = "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103";
6
+ export declare function decodeRevertReason(hex: string, tronweb: any): string;
7
+ export declare function createDeploymentTransaction(tronweb: Readonly<TronWeb>, abi: IABI, signer: string, parameters: unknown[]): Promise<any>;
8
+ /**
9
+ * Constructs MetaProxy bytecode that embeds metadata in the contract
10
+ * @param implementationAddress - Address of implementation contract
11
+ * @param metadata - ABI-encoded metadata to embed
12
+ * @returns Complete MetaProxy bytecode
13
+ */
14
+ export declare function buildMetaProxyBytecode(implementationAddress: string, metadata: string): string;
15
+ /**
16
+ * Deploys a contract using raw bytecode (for MetaProxy deployments)
17
+ * @param tronweb - TronWeb instance
18
+ * @param bytecode - Complete bytecode to deploy
19
+ * @param signer - Deployer address
20
+ * @param contractName - Optional name for the contract
21
+ * @returns Transaction object
22
+ */
23
+ export declare function createRawBytecodeDeploymentTransaction(tronweb: Readonly<TronWeb>, bytecode: string, signer: string, contractName?: string): Promise<any>;
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,eAAO,MAAM,kBAAkB,uCAAuC,CAAC;AACvE,eAAO,MAAM,kBAAkB,uEACuC,CAAC;AACvE,eAAO,MAAM,kBAAkB,uEACuC,CAAC;AAEvE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM,CAYpE;AAED,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC1B,GAAG,EAAE,IAAI,EACT,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,EAAE,GACpB,OAAO,CAAC,GAAG,CAAC,CAWd;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,qBAAqB,EAAE,MAAM,EAC7B,QAAQ,EAAE,MAAM,GACf,MAAM,CA2BR;AAED;;;;;;;GAOG;AACH,wBAAsB,sCAAsC,CAC1D,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC1B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,SAAc,GACzB,OAAO,CAAC,GAAG,CAAC,CAWd"}
@@ -0,0 +1,71 @@
1
+ import { strip0x } from '@hyperlane-xyz/utils';
2
+ export const TRON_EMPTY_ADDRESS = 'T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb';
3
+ export const TRON_EMPTY_MESSAGE = '0x0000000000000000000000000000000000000000000000000000000000000000';
4
+ export const EIP1967_ADMIN_SLOT = '0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103';
5
+ export function decodeRevertReason(hex, tronweb) {
6
+ try {
7
+ if (hex.startsWith('08c379a0')) {
8
+ // Standard Error(string) selector
9
+ const data = '0x' + hex.substring(8);
10
+ // Decode using TronWeb's internal ethers.js util
11
+ return tronweb.utils.abi.decodeParams(['string'], data)[0];
12
+ }
13
+ return `Hex Error: ${hex}`;
14
+ }
15
+ catch {
16
+ return `Could not decode hex: ${hex}`;
17
+ }
18
+ }
19
+ export async function createDeploymentTransaction(tronweb, abi, signer, parameters) {
20
+ return tronweb.transactionBuilder.createSmartContract({
21
+ feeLimit: 1_000_000_000,
22
+ abi: abi.abi,
23
+ bytecode: abi.bytecode,
24
+ parameters,
25
+ name: abi.contractName,
26
+ }, signer);
27
+ }
28
+ /**
29
+ * Constructs MetaProxy bytecode that embeds metadata in the contract
30
+ * @param implementationAddress - Address of implementation contract
31
+ * @param metadata - ABI-encoded metadata to embed
32
+ * @returns Complete MetaProxy bytecode
33
+ */
34
+ export function buildMetaProxyBytecode(implementationAddress, metadata) {
35
+ const PREFIX = '600b380380600b3d393df3363d3d373d3d3d3d60368038038091363936013d73';
36
+ const SUFFIX = '5af43d3d93803e603457fd5bf3';
37
+ // Remove 0x prefix if present
38
+ const cleanMetadata = strip0x(metadata);
39
+ let cleanImpl = strip0x(implementationAddress);
40
+ // Tron addresses have 41 prefix byte - strip it to get 20 bytes
41
+ if (cleanImpl.startsWith('41')) {
42
+ cleanImpl = cleanImpl.slice(2);
43
+ }
44
+ // Validate address is exactly 20 bytes (40 hex chars)
45
+ if (cleanImpl.length !== 40) {
46
+ throw new Error(`Implementation address must be 20 bytes (40 hex chars), got ${cleanImpl.length}`);
47
+ }
48
+ // Convert metadata length to 32-byte hex (uint256)
49
+ const metadataLength = (cleanMetadata.length / 2)
50
+ .toString(16)
51
+ .padStart(64, '0');
52
+ return `0x${PREFIX}${cleanImpl}${SUFFIX}${cleanMetadata}${metadataLength}`;
53
+ }
54
+ /**
55
+ * Deploys a contract using raw bytecode (for MetaProxy deployments)
56
+ * @param tronweb - TronWeb instance
57
+ * @param bytecode - Complete bytecode to deploy
58
+ * @param signer - Deployer address
59
+ * @param contractName - Optional name for the contract
60
+ * @returns Transaction object
61
+ */
62
+ export async function createRawBytecodeDeploymentTransaction(tronweb, bytecode, signer, contractName = 'MetaProxy') {
63
+ return tronweb.transactionBuilder.createSmartContract({
64
+ feeLimit: 1_000_000_000,
65
+ abi: [],
66
+ bytecode,
67
+ parameters: [],
68
+ name: contractName,
69
+ }, signer);
70
+ }
71
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAI/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,oCAAoC,CAAC;AACvE,MAAM,CAAC,MAAM,kBAAkB,GAC7B,oEAAoE,CAAC;AACvE,MAAM,CAAC,MAAM,kBAAkB,GAC7B,oEAAoE,CAAC;AAEvE,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,OAAY;IAC1D,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,kCAAkC;YAClC,MAAM,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACrC,iDAAiD;YACjD,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,cAAc,GAAG,EAAE,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,yBAAyB,GAAG,EAAE,CAAC;IACxC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,OAA0B,EAC1B,GAAS,EACT,MAAc,EACd,UAAqB;IAErB,OAAO,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,CACnD;QACE,QAAQ,EAAE,aAAa;QACvB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,UAAU;QACV,IAAI,EAAE,GAAG,CAAC,YAAY;KACvB,EACD,MAAM,CACP,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,qBAA6B,EAC7B,QAAgB;IAEhB,MAAM,MAAM,GACV,kEAAkE,CAAC;IACrE,MAAM,MAAM,GAAG,4BAA4B,CAAC;IAE5C,8BAA8B;IAC9B,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAE/C,gEAAgE;IAChE,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,sDAAsD;IACtD,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,+DAA+D,SAAS,CAAC,MAAM,EAAE,CAClF,CAAC;IACJ,CAAC;IAED,mDAAmD;IACnD,MAAM,cAAc,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;SAC9C,QAAQ,CAAC,EAAE,CAAC;SACZ,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAErB,OAAO,KAAK,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,aAAa,GAAG,cAAc,EAAE,CAAC;AAC7E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,sCAAsC,CAC1D,OAA0B,EAC1B,QAAgB,EAChB,MAAc,EACd,YAAY,GAAG,WAAW;IAE1B,OAAO,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,CACnD;QACE,QAAQ,EAAE,aAAa;QACvB,GAAG,EAAE,EAAE;QACP,QAAQ;QACR,UAAU,EAAE,EAAE;QACd,IAAI,EAAE,YAAY;KACnB,EACD,MAAM,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,94 @@
1
+ import { Address } from '@hyperlane-xyz/utils';
2
+ export type TronTransaction = {
3
+ visible: boolean;
4
+ txID: string;
5
+ raw_data_hex: string;
6
+ raw_data: {
7
+ contract: {
8
+ parameter: {
9
+ value: any;
10
+ type_url: string;
11
+ };
12
+ type: any;
13
+ }[];
14
+ ref_block_bytes: string;
15
+ ref_block_hash: string;
16
+ expiration: number;
17
+ timestamp: number;
18
+ fee_limit?: unknown;
19
+ };
20
+ };
21
+ type HTTPMap<T extends string | number | symbol, U> = Record<T, U>[];
22
+ export type TronReceipt = {
23
+ id: string;
24
+ fee: number;
25
+ blockNumber: number;
26
+ blockTimeStamp: number;
27
+ contractResult: string[];
28
+ contract_address: string;
29
+ receipt: {
30
+ energy_usage: number;
31
+ energy_fee: number;
32
+ origin_energy_usage: number;
33
+ energy_usage_total: number;
34
+ net_usage: number;
35
+ net_fee: number;
36
+ result: string;
37
+ energy_penalty_total: number;
38
+ };
39
+ log: {
40
+ address: Address;
41
+ topics: string[];
42
+ data: string;
43
+ }[];
44
+ result?: 'SUCCESS' | 'PENDING' | 'FAILED';
45
+ resMessage: string;
46
+ assetIssueID: string;
47
+ withdraw_amount: number;
48
+ unfreeze_amount: number;
49
+ internal_transactions: {
50
+ hash: string;
51
+ caller_address: string;
52
+ transferTo_address: string;
53
+ callValueInfo: {
54
+ callValue: number;
55
+ tokenId: string;
56
+ }[];
57
+ note: string;
58
+ rejected: boolean;
59
+ extra: string;
60
+ }[];
61
+ exchange_received_amount: number;
62
+ exchange_inject_another_amount: number;
63
+ exchange_withdraw_another_amount: number;
64
+ shielded_transaction_fee: number;
65
+ withdraw_expire_amount: number;
66
+ cancel_unfreezeV2_amount: HTTPMap<string, number>;
67
+ exchange_id: string;
68
+ orderId: string;
69
+ orderDetails: {
70
+ makerOrderId: string;
71
+ takerOrderId: string;
72
+ fillSellQuantity: number;
73
+ fillBuyQuantity: number;
74
+ }[];
75
+ packingFee: number;
76
+ };
77
+ export interface IABI {
78
+ contractName: string;
79
+ abi: any[];
80
+ bytecode: string;
81
+ deployedBytecode: string;
82
+ }
83
+ export declare enum TronIsmTypes {
84
+ MERKLE_ROOT_MULTISIG = "MerkleRootMultisigIsm",
85
+ MESSAGE_ID_MULTISIG = "MessageIdMultisigIsm",
86
+ ROUTING_ISM = "RoutingIsm",
87
+ NOOP_ISM = "NoopIsm"
88
+ }
89
+ export declare enum TronHookTypes {
90
+ MERKLE_TREE = "merkleTreeHook",
91
+ INTERCHAIN_GAS_PAYMASTER = "interchainGasPaymaster"
92
+ }
93
+ export {};
94
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export var TronIsmTypes;
2
+ (function (TronIsmTypes) {
3
+ TronIsmTypes["MERKLE_ROOT_MULTISIG"] = "MerkleRootMultisigIsm";
4
+ TronIsmTypes["MESSAGE_ID_MULTISIG"] = "MessageIdMultisigIsm";
5
+ TronIsmTypes["ROUTING_ISM"] = "RoutingIsm";
6
+ TronIsmTypes["NOOP_ISM"] = "NoopIsm";
7
+ })(TronIsmTypes || (TronIsmTypes = {}));
8
+ export var TronHookTypes;
9
+ (function (TronHookTypes) {
10
+ TronHookTypes["MERKLE_TREE"] = "merkleTreeHook";
11
+ TronHookTypes["INTERCHAIN_GAS_PAYMASTER"] = "interchainGasPaymaster";
12
+ })(TronHookTypes || (TronHookTypes = {}));
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAuFA,MAAM,CAAN,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,8DAA8C,CAAA;IAC9C,4DAA4C,CAAA;IAC5C,0CAA0B,CAAA;IAC1B,oCAAoB,CAAA;AACtB,CAAC,EALW,YAAY,KAAZ,YAAY,QAKvB;AAED,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,+CAA8B,CAAA;IAC9B,oEAAmD,CAAA;AACrD,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@hyperlane-xyz/tron-sdk",
3
+ "version": "21.0.0",
4
+ "description": "Hyperlane TypeScript SDK for the TRON Hyperlane SDK module",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": "./dist/index.js"
8
+ },
9
+ "types": "dist/index.d.ts",
10
+ "files": [
11
+ "/dist"
12
+ ],
13
+ "homepage": "https://www.hyperlane.xyz",
14
+ "repository": "https://github.com/hyperlane-xyz/hyperlane-monorepo",
15
+ "keywords": [
16
+ "hyperlane",
17
+ "tron",
18
+ "blockchain",
19
+ "sdk"
20
+ ],
21
+ "license": "Apache-2.0",
22
+ "devDependencies": {
23
+ "@eslint/js": "^9.31.0",
24
+ "@types/chai": "^4.3.11",
25
+ "@types/chai-as-promised": "^8",
26
+ "@types/mocha": "^10.0.1",
27
+ "@types/unzipper": "^0",
28
+ "@typescript-eslint/eslint-plugin": "^8.1.6",
29
+ "@typescript-eslint/parser": "^8.1.6",
30
+ "chai": "^4.5.0",
31
+ "chai-as-promised": "^8.0.1",
32
+ "eslint": "^9.31.0",
33
+ "eslint-config-prettier": "^10.1.8",
34
+ "eslint-import-resolver-typescript": "^4.4.4",
35
+ "eslint-plugin-import": "^2.32.0",
36
+ "mocha": "^11.5.0",
37
+ "mocha-steps": "^1.3.0",
38
+ "node-fetch": "^3.3.2",
39
+ "prettier": "^3.5.3",
40
+ "ts-node": "^10.9.2",
41
+ "typescript": "5.8.3",
42
+ "typescript-eslint": "^8.37.0",
43
+ "@hyperlane-xyz/tsconfig": "^25.0.0"
44
+ },
45
+ "dependencies": {
46
+ "@hyperlane-xyz/registry": "23.12.0",
47
+ "bignumber.js": "^9.1.1",
48
+ "tronweb": "^6.1.1",
49
+ "@hyperlane-xyz/provider-sdk": "1.3.1",
50
+ "@hyperlane-xyz/utils": "25.0.0",
51
+ "@hyperlane-xyz/eslint-config": "25.0.0"
52
+ },
53
+ "scripts": {
54
+ "build": "rm -rf ./dist && tsc",
55
+ "format": "prettier --write .",
56
+ "lint": "eslint -c ./eslint.config.mjs",
57
+ "prettier": "prettier --write ./src",
58
+ "clean": "rm -rf ./dist ./cache",
59
+ "test": "echo \"no tests in tron-sdk\"",
60
+ "test:ci": "echo \"no tests in tron-sdk\"",
61
+ "test:e2e": "./scripts/run-e2e-test.sh"
62
+ }
63
+ }