Skip to content
Prev Previous commit
Next Next commit
Revert test
  • Loading branch information
kien-ngo committed Oct 20, 2023
commit 5ec92660b40074704650d0543588ff451610182c
90 changes: 41 additions & 49 deletions packages/sdk/src/evm/core/classes/erc-20-signature-mintable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,8 @@ export class Erc20SignatureMintable implements DetectableFeature {
async (signedPayload: SignedPayload20) => {
const mintRequest = signedPayload.payload;
const signature = signedPayload.signature;
const [message, overrides] = await Promise.all([
this.mapPayloadToContractStruct(mintRequest),
this.contractWrapper.getCallOverrides(),
]);
const message = await this.mapPayloadToContractStruct(mintRequest);
const overrides = await this.contractWrapper.getCallOverrides();
// TODO: Transaction Sequence Pattern
await setErc20Allowance(
this.contractWrapper,
Expand All @@ -91,24 +89,23 @@ export class Erc20SignatureMintable implements DetectableFeature {
*/
mintBatch = /* @__PURE__ */ buildTransactionFunction(
async (signedPayloads: SignedPayload20[]) => {
const contractPayloads = (
await Promise.all(
signedPayloads.map((s) => this.mapPayloadToContractStruct(s.payload)),
)
).map((message, index) => {
const s = signedPayloads[index];
const signature = s.signature;
const price = s.payload.price;
if (BigNumber.from(price).gt(0)) {
throw new Error(
"Can only batch free mints. For mints with a price, use regular mint()",
);
}
return {
message,
signature,
};
});
const contractPayloads = await Promise.all(
signedPayloads.map(async (s) => {
const message = await this.mapPayloadToContractStruct(s.payload);
const signature = s.signature;
const price = s.payload.price;
if (BigNumber.from(price).gt(0)) {
throw new Error(
"Can only batch free mints. For mints with a price, use regular mint()",
);
}
return {
message,
signature,
};
}),
);

const contractEncoder = new ContractEncoder(this.contractWrapper);
const encoded = contractPayloads.map((p) => {
return contractEncoder.encode("mintWithSignature", [
Expand Down Expand Up @@ -211,19 +208,17 @@ export class Erc20SignatureMintable implements DetectableFeature {
payloadsToSign.map((m) => Signature20PayloadInput.parseAsync(m)),
);

const [chainId, name] = await Promise.all([
this.contractWrapper.getChainID(),
// ERC20Permit (EIP-712) spec differs from signature mint 721, 1155.
this.contractWrapper.read("name", []),
]);
const chainId = await this.contractWrapper.getChainID();
const signer = this.contractWrapper.getSigner();
invariant(signer, "No signer available");
const _finalPayloads: PayloadWithUri20[] = await Promise.all(
parsedRequests.map((m) => Signature20PayloadOutput.parseAsync(m)),
);
const _signatures = await Promise.all(
_finalPayloads.map((payload) =>
this.contractWrapper.signTypedData(

// ERC20Permit (EIP-712) spec differs from signature mint 721, 1155.
const name = await this.contractWrapper.read("name", []);

return await Promise.all(
parsedRequests.map(async (m) => {
const finalPayload = await Signature20PayloadOutput.parseAsync(m);
const signature = await this.contractWrapper.signTypedData(
signer,
{
name,
Expand All @@ -232,14 +227,14 @@ export class Erc20SignatureMintable implements DetectableFeature {
verifyingContract: this.contractWrapper.address,
},
{ MintRequest: MintRequest20 },
payload,
),
),
await this.mapPayloadToContractStruct(finalPayload),
);
return {
payload: finalPayload,
signature: signature.toString(),
};
}),
);
return parsedRequests.map((_, index) => ({
payload: _finalPayloads[index],
signature: _signatures[index] as string,
}));
}

/** ******************************
Expand All @@ -256,17 +251,14 @@ export class Erc20SignatureMintable implements DetectableFeature {
private async mapPayloadToContractStruct(
mintRequest: PayloadWithUri20,
): Promise<ITokenERC20.MintRequestStructOutput> {
const [normalizedPrice, _decimals] = await Promise.all([
normalizePriceValue(
this.contractWrapper.getProvider(),
mintRequest.price,
mintRequest.currencyAddress,
),
this.contractWrapper.read("decimals", []),
]);
const normalizedPrice = await normalizePriceValue(
this.contractWrapper.getProvider(),
mintRequest.price,
mintRequest.currencyAddress,
);
const amountWithDecimals = utils.parseUnits(
mintRequest.quantity,
_decimals,
await this.contractWrapper.read("decimals", []),
);
return {
to: mintRequest.to,
Expand Down