Skip to content

Commit 56169c4

Browse files
authored
Merge pull request #55 from consenlabs/feature/pmm_signing_url
Enable signing_url for the PMM protocol
2 parents ca2ee18 + 5631063 commit 56169c4

File tree

2 files changed

+47
-6
lines changed

2 files changed

+47
-6
lines changed

src/handler/newOrder.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,12 @@ export const newOrder = async (ctx) => {
248248
signer,
249249
order,
250250
userAddr.toLowerCase(),
251-
config.addressBookV5.PMM
251+
chainID,
252+
config.addressBookV5.PMM,
253+
{
254+
signingUrl,
255+
salt,
256+
}
252257
)
253258
break
254259
case Protocol.RFQV1:

src/signer/pmmv5.ts

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
} from '0x-v2-order-utils'
99
import * as ethUtils from 'ethereumjs-util'
1010
import { utils, Wallet } from 'ethers'
11+
import axios from 'axios'
1112
import { BigNumber, orderBNToString } from '../utils'
1213

1314
const EIP712_ORDER_SCHEMA = {
@@ -113,8 +114,29 @@ async function signByMMPSigner(
113114
return signatureUtils.convertToSignatureWithType(walletSign, SignatureType.Wallet)
114115
}
115116

117+
export const forwardUnsignedOrder = async (signingUrl: string, orderInfo: any): Promise<string> => {
118+
const resp = await axios.post(signingUrl, orderInfo)
119+
const body = resp.data
120+
if (body.signature) {
121+
return body.signature
122+
} else {
123+
throw new Error('Invalid signature')
124+
}
125+
}
126+
116127
// Move fee factor to salt field
117-
export const buildSignedOrder = async (signer: Wallet, order, userAddr, pmm): Promise<any> => {
128+
export const buildSignedOrder = async (
129+
signer: Wallet,
130+
order,
131+
userAddr,
132+
chainId,
133+
pmm,
134+
options?: {
135+
signingUrl?: string
136+
salt?: string
137+
}
138+
): Promise<any> => {
139+
const signingUrl = options ? options.signingUrl : undefined
118140
const feeFactor = order.feeFactor
119141
order.takerAddress = pmm.toLowerCase()
120142
order.senderAddress = pmm.toLowerCase()
@@ -130,10 +152,24 @@ export const buildSignedOrder = async (signer: Wallet, order, userAddr, pmm): Pr
130152
console.log(`orderHash: ${orderHash}`)
131153
const orderSignDigest = orderHashUtils.getOrderHashHex(o)
132154
console.log(`orderSignDigest: ${orderSignDigest}`)
133-
const makerWalletSignature =
134-
signer.address.toLowerCase() == o.makerAddress.toLowerCase()
135-
? await signByEOA(orderSignDigest, signer)
136-
: await signByMMPSigner(orderSignDigest, userAddr, feeFactor, signer)
155+
let makerWalletSignature
156+
if (!signingUrl) {
157+
makerWalletSignature =
158+
signer.address.toLowerCase() == o.makerAddress.toLowerCase()
159+
? await signByEOA(orderSignDigest, signer)
160+
: await signByMMPSigner(orderSignDigest, userAddr, feeFactor, signer)
161+
} else {
162+
makerWalletSignature = await forwardUnsignedOrder(signingUrl, {
163+
pmmOrder: o,
164+
feeFactor: feeFactor,
165+
orderHash: orderHash,
166+
orderSignDigest: orderSignDigest,
167+
userAddr: userAddr,
168+
signer: signer.address,
169+
chainId: chainId,
170+
pmmAddr: pmm,
171+
})
172+
}
137173

138174
const signedOrder = {
139175
...o,

0 commit comments

Comments
 (0)