Permit.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. const { EIP712Signer } = require('@ticket721/e712')
  2. const Permit = [
  3. { name: 'owner', type: 'address' },
  4. { name: 'spender', type: 'address' },
  5. { name: 'value', type: 'uint256' },
  6. { name: 'nonce', type: 'uint256' },
  7. { name: 'deadline', type: 'uint256' },
  8. ]
  9. class PermitSigner extends EIP712Signer {
  10. constructor(_domain, _permitArgs) {
  11. super(_domain, ['Permit', Permit])
  12. this.permitArgs = _permitArgs
  13. }
  14. // Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)
  15. setPermitInfo(_permitArgs) {
  16. this.permitArgs = _permitArgs
  17. }
  18. getPayload() {
  19. return this.generatePayload(this.permitArgs, 'Permit')
  20. }
  21. async getSignature(privateKey) {
  22. const payload = this.getPayload()
  23. const { hex, v, r, s } = await this.sign(privateKey, payload)
  24. return {
  25. hex,
  26. v,
  27. r: '0x' + r,
  28. s: '0x' + s,
  29. }
  30. }
  31. getSignerAddress(permitArgs, signature) {
  32. const original_payload = this.generatePayload(permitArgs, 'Permit')
  33. return this.verify(original_payload, signature)
  34. }
  35. }
  36. module.exports = { PermitSigner }