Skip to content

Commit

Permalink
fix spenderAddress initialization issue, throw error if spender is no…
Browse files Browse the repository at this point in the history
…t provider in case of child
  • Loading branch information
ujjwalgupta94 committed Feb 3, 2022
1 parent 198fc4e commit 0e3b5cb
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 8 deletions.
3 changes: 2 additions & 1 deletion src/enums/error_type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ export enum ERROR_TYPE {
ProofAPINotSet = "proof_api_not_set",
TransactionOptionNotObject = "transation_object_not_object",
BurnTxNotCheckPointed = "burn_tx_not_checkpointed",
EIP1559NotSupported = "eip-1559_not_supported"
EIP1559NotSupported = "eip-1559_not_supported",
NullSpenderAddress = "null_spender_address"
}
16 changes: 10 additions & 6 deletions src/pos/erc20.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { ITransactionOption } from "../interfaces";
import { Converter, Web3SideChainClient } from "../utils";
import { POSToken } from "./pos_token";
import { TYPE_AMOUNT } from "../types";
import { Log_Event_Signature } from "../enums";
import { ERROR_TYPE, Log_Event_Signature } from "../enums";
import { IAllowanceTransactionOption, IApproveTransactionOption, IPOSClientConfig, MAX_AMOUNT, promiseResolve } from "..";
import { IPOSContracts } from "../interfaces/pos_contracts";

Expand Down Expand Up @@ -42,8 +42,8 @@ export class ERC20 extends POSToken {
*/
getAllowance(userAddress: string, option: IAllowanceTransactionOption = {}) {
const spenderAddress = option.spenderAddress;
const predicatePromise = spenderAddress ?
this.getPredicateAddress() : promiseResolve(spenderAddress);

const predicatePromise = spenderAddress ? promiseResolve(spenderAddress) : this.getPredicateAddress();

return Promise.all([predicatePromise, this.getContract()]).then(result => {
const [predicateAddress, contract] = result;
Expand All @@ -56,10 +56,14 @@ export class ERC20 extends POSToken {
});
}

approve(amount: TYPE_AMOUNT, option?: IApproveTransactionOption) {
approve(amount: TYPE_AMOUNT, option: IApproveTransactionOption = {}) {
const spenderAddress = option.spenderAddress;
const predicatePromise = spenderAddress ?
this.getPredicateAddress() : promiseResolve(spenderAddress);

if (!spenderAddress && !this.contractParam.isParent) {
this.client.logger.error(ERROR_TYPE.NullSpenderAddress).throw();
}

const predicatePromise = spenderAddress ? promiseResolve(spenderAddress) : this.getPredicateAddress();

return Promise.all([predicatePromise, this.getContract()]).then(result => {
const [predicateAddress, contract] = result;
Expand Down
3 changes: 3 additions & 0 deletions src/utils/error_helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ export class ErrorHelper implements IError {
case ERROR_TYPE.EIP1559NotSupported:
errMsg = `${info ? 'Root' : 'Child'} chain doesn't support eip-1559`;
break;
case ERROR_TYPE.NullSpenderAddress:
errMsg = `Please provide spender address.`;
break;
default:
if (!this.type) {
this.type = ERROR_TYPE.Unknown;
Expand Down
28 changes: 27 additions & 1 deletion test/specs/erc20.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ describe('ERC20', () => {

});

it('approve return tx', async () => {
it('approve parent return tx', async () => {
const result = await erc20Parent.approve('10', {
returnTransaction: true
});
Expand All @@ -128,6 +128,32 @@ describe('ERC20', () => {

});

it('approve parent return tx with spender address', async () => {
const spenderAddress = await erc20Parent.getPredicateAddress();
const result = await erc20Parent.approve('10', {
spenderAddress: spenderAddress,
returnTransaction: true
});

expect(result['to'].toLowerCase()).equal(erc20.parent.toLowerCase());
expect(result).to.have.property('data')

});

it('approve child return tx without spender address', async () => {
try {
const result = await erc20Child.approve('10');
expect(result['to'].toLowerCase()).equal(erc20.child.toLowerCase());
expect(result).to.have.property('data');
} catch (error) {
// console.log('error', error);
expect(error).eql({
type: 'null_spender_address',
message: 'Please provide spender address.'
});
}
});

it('deposit return tx', async () => {
const result = await erc20Parent.deposit(10, from, {
returnTransaction: true
Expand Down

0 comments on commit 0e3b5cb

Please sign in to comment.