|
1 |
| -import { Wallet, providers, BigNumber } from 'ethers'; |
| 1 | +import { Wallet, providers, BigNumber, utils } from 'ethers'; |
2 | 2 | import {
|
3 | 3 | ClientTypes,
|
4 | 4 | ExtensionTypes,
|
@@ -44,15 +44,23 @@ const alphaSwapConversionSettings = {
|
44 | 44 | path: [erc20ContractAddress, alphaContractAddress],
|
45 | 45 | };
|
46 | 46 |
|
| 47 | +// Amount to be approved |
| 48 | +const arbitraryApprovalValue = BigNumber.from('100000000'); |
| 49 | +const approvalSettings = { |
| 50 | + amount: arbitraryApprovalValue, |
| 51 | +}; |
| 52 | + |
47 | 53 | const mnemonic = 'candy maple cake sugar pudding cream honey rich smooth crumble sweet treat';
|
48 | 54 | const mnemonicPath = `m/44'/60'/0'/0/19`;
|
49 | 55 | const paymentAddress = '0x821aEa9a577a9b44299B9c15c88cf3087F3b5544';
|
50 | 56 | const provider = new providers.JsonRpcProvider('http://localhost:8545');
|
51 | 57 | let wallet = Wallet.fromMnemonic(mnemonic, mnemonicPath).connect(provider);
|
52 |
| -const erc20ApprovalData = (proxy: string) => { |
53 |
| - return `0x095ea7b3000000000000000000000000${proxy |
54 |
| - .slice(2) |
55 |
| - .toLowerCase()}ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`; |
| 58 | +const erc20ApprovalData = (proxy: string, approvedHexValue?: BigNumber) => { |
| 59 | + return `0x095ea7b3000000000000000000000000${proxy.slice(2).toLowerCase()}${ |
| 60 | + approvedHexValue |
| 61 | + ? utils.hexZeroPad(arbitraryApprovalValue.toHexString(), 32).slice(2) |
| 62 | + : 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' |
| 63 | + }`; |
56 | 64 | };
|
57 | 65 |
|
58 | 66 | let proxyERC20: string;
|
@@ -271,7 +279,22 @@ describe('Approval encoder handles ERC20 Proxy', () => {
|
271 | 279 | value: 0,
|
272 | 280 | });
|
273 | 281 | });
|
| 282 | + it('Should return a valid transaction with specific approval value', async () => { |
| 283 | + const approvalTransaction = await encodeRequestErc20ApprovalIfNeeded( |
| 284 | + baseValidRequest, |
| 285 | + provider, |
| 286 | + wallet.address, |
| 287 | + { |
| 288 | + approval: approvalSettings, |
| 289 | + }, |
| 290 | + ); |
274 | 291 |
|
| 292 | + expect(approvalTransaction).toEqual({ |
| 293 | + data: erc20ApprovalData(proxyERC20, arbitraryApprovalValue), |
| 294 | + to: erc20ContractAddress, |
| 295 | + value: 0, |
| 296 | + }); |
| 297 | + }); |
275 | 298 | it('Should not return anything', async () => {
|
276 | 299 | let approvalTransaction = await encodeRequestErc20ApprovalIfNeeded(
|
277 | 300 | baseValidRequest,
|
@@ -303,6 +326,22 @@ describe('Approval encoder handles ERC20 Fee Proxy', () => {
|
303 | 326 | value: 0,
|
304 | 327 | });
|
305 | 328 | });
|
| 329 | + it('Should return a valid transaction with specific approved value', async () => { |
| 330 | + const approvalTransaction = await encodeRequestErc20ApprovalIfNeeded( |
| 331 | + validRequestERC20FeeProxy, |
| 332 | + provider, |
| 333 | + wallet.address, |
| 334 | + { |
| 335 | + approval: approvalSettings, |
| 336 | + }, |
| 337 | + ); |
| 338 | + |
| 339 | + expect(approvalTransaction).toEqual({ |
| 340 | + data: erc20ApprovalData(proxyERC20Fee, arbitraryApprovalValue), |
| 341 | + to: erc20ContractAddress, |
| 342 | + value: 0, |
| 343 | + }); |
| 344 | + }); |
306 | 345 | it('Should not return anything', async () => {
|
307 | 346 | let approvalTransaction = await encodeRequestErc20ApprovalIfNeeded(
|
308 | 347 | validRequestERC20FeeProxy,
|
@@ -337,7 +376,23 @@ describe('Approval encoder handles ERC20 Conversion Proxy', () => {
|
337 | 376 | value: 0,
|
338 | 377 | });
|
339 | 378 | });
|
| 379 | + it('Should return a valid transaction with specific approval value', async () => { |
| 380 | + let approvalTransaction = await encodeRequestErc20ApprovalIfNeeded( |
| 381 | + validRequestERC20ConversionProxy, |
| 382 | + provider, |
| 383 | + wallet.address, |
| 384 | + { |
| 385 | + conversion: alphaConversionSettings, |
| 386 | + approval: approvalSettings, |
| 387 | + }, |
| 388 | + ); |
340 | 389 |
|
| 390 | + expect(approvalTransaction).toEqual({ |
| 391 | + data: erc20ApprovalData(proxyERC20Conv, arbitraryApprovalValue), |
| 392 | + to: alphaContractAddress, |
| 393 | + value: 0, |
| 394 | + }); |
| 395 | + }); |
341 | 396 | it('Should not return anything', async () => {
|
342 | 397 | let approvalTransaction = await encodeRequestErc20ApprovalIfNeeded(
|
343 | 398 | validRequestERC20ConversionProxy,
|
@@ -388,7 +443,23 @@ describe('Approval encoder handles ERC20 Swap Proxy', () => {
|
388 | 443 | value: 0,
|
389 | 444 | });
|
390 | 445 | });
|
| 446 | + it('Should return a valid transaction with specific approval value', async () => { |
| 447 | + let approvalTransaction = await encodeRequestErc20ApprovalIfNeeded( |
| 448 | + validRequestERC20FeeProxy, |
| 449 | + provider, |
| 450 | + wallet.address, |
| 451 | + { |
| 452 | + swap: alphaSwapSettings, |
| 453 | + approval: approvalSettings, |
| 454 | + }, |
| 455 | + ); |
391 | 456 |
|
| 457 | + expect(approvalTransaction).toEqual({ |
| 458 | + data: erc20ApprovalData(proxyERC20Swap, arbitraryApprovalValue), |
| 459 | + to: alphaContractAddress, |
| 460 | + value: 0, |
| 461 | + }); |
| 462 | + }); |
392 | 463 | it('Should not return anything', async () => {
|
393 | 464 | let approvalTransaction = await encodeRequestErc20ApprovalIfNeeded(
|
394 | 465 | validRequestERC20FeeProxy,
|
@@ -430,7 +501,24 @@ describe('Approval encoder handles ERC20 Swap & Conversion Proxy', () => {
|
430 | 501 | value: 0,
|
431 | 502 | });
|
432 | 503 | });
|
| 504 | + it('Should return a valid transaction with specififc approval value', async () => { |
| 505 | + let approvalTransaction = await encodeRequestErc20ApprovalIfNeeded( |
| 506 | + validRequestERC20ConversionProxy, |
| 507 | + provider, |
| 508 | + wallet.address, |
| 509 | + { |
| 510 | + swap: alphaSwapConversionSettings, |
| 511 | + conversion: alphaConversionSettings, |
| 512 | + approval: approvalSettings, |
| 513 | + }, |
| 514 | + ); |
433 | 515 |
|
| 516 | + expect(approvalTransaction).toEqual({ |
| 517 | + data: erc20ApprovalData(proxyERC20SwapConv, arbitraryApprovalValue), |
| 518 | + to: erc20ContractAddress, |
| 519 | + value: 0, |
| 520 | + }); |
| 521 | + }); |
434 | 522 | it('Should not return anything', async () => {
|
435 | 523 | let approvalTransaction = await encodeRequestErc20ApprovalIfNeeded(
|
436 | 524 | validRequestERC20ConversionProxy,
|
|
0 commit comments