depreciate e712 w/ provider signing

This commit is contained in:
gozzy 2022-11-04 22:03:56 +00:00
parent 5da31361c6
commit 85a222d93a
4 changed files with 49 additions and 110 deletions

View file

@ -1,6 +1,6 @@
const { EIP712Signer } = require('@ticket721/e712')
import { concatSig } from 'eth-sig-util'
const Permit = [
const PermitType = [
{ name: 'owner', type: 'address' },
{ name: 'spender', type: 'address' },
{ name: 'value', type: 'uint256' },
@ -8,36 +8,53 @@ const Permit = [
{ name: 'deadline', type: 'uint256' }
]
class PermitSigner extends EIP712Signer {
const EIP712DomainType = [
{ name: 'name', type: 'string' },
{ name: 'version', type: 'string' },
{ name: 'chainId', type: 'uint256' },
{ name: 'verifyingContract', type: 'address' }
]
export default class PermitSigner {
constructor(_domain, _permitArgs) {
super(_domain, ['Permit', Permit])
this.permitArgs = _permitArgs
this.domain = _domain
}
// Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)
setPermitInfo(_permitArgs) {
this.permitArgs = _permitArgs
}
getPayload() {
return this.generatePayload(this.permitArgs, 'Permit')
}
async getSignature(privateKey) {
const payload = this.getPayload()
const { hex, v, r, s } = await this.sign(privateKey, payload)
getReqPayload() {
return {
hex,
v,
r: '0x' + r,
s: '0x' + s
domain: this.domain,
primaryType: 'Permit',
types: {
Permit: PermitType,
EIP712Domain: EIP712DomainType
},
message: this.permitArgs
}
}
getSignerAddress(permitArgs, signature) {
const originalPayload = this.generatePayload(permitArgs, 'Permit')
return this.verify(originalPayload, signature)
getSignature(response) {
response = response.substring(2)
const r = '0x' + response.substring(0, 64)
const s = '0x' + response.substring(64, 128)
let v = parseInt(response.substring(128, 130), 16)
// fix ledger sign
if (v === 0 || v === 1) {
v = v + 27
}
return {
hex: concatSig(v, r, s),
v,
r,
s
}
}
}
module.exports = { PermitSigner }