@@ -13,6 +13,11 @@ import {
1313 walletConnect ,
1414} from './connections' ;
1515import Constants from './constants.json' ;
16+ import {
17+ EIP712Domain ,
18+ getPermitMsgParams ,
19+ MSG_PRIMARY_TYPE ,
20+ } from './signatures/utils' ;
1621import {
1722 ERC20_SAMPLE_CONTRACTS ,
1823 ERC721_SAMPLE_CONTRACTS ,
@@ -259,6 +264,27 @@ const signPermitVerify = document.getElementById('signPermitVerify');
259264const signPermitVerifyResult = document . getElementById (
260265 'signPermitVerifyResult' ,
261266) ;
267+
268+ // Sign Typed Data Variants
269+
270+ const signBlurOrder = document . getElementById ( 'signBlurOrder' ) ;
271+ const signPermitSingle = document . getElementById ( 'signPermitSingle' ) ;
272+ const signPermitBatch = document . getElementById ( 'signPermitBatch' ) ;
273+ const signSeaportBulkOrder = document . getElementById ( 'signSeaportBulkOrder' ) ;
274+
275+ const signPermitVariantResult = document . getElementById (
276+ 'signPermitVariantResult' ,
277+ ) ;
278+ const signPermitVariantResultR = document . getElementById (
279+ 'signPermitVariantResultR' ,
280+ ) ;
281+ const signPermitVariantResultS = document . getElementById (
282+ 'signPermitVariantResultS' ,
283+ ) ;
284+ const signPermitVariantResultV = document . getElementById (
285+ 'signPermitVariantResultV' ,
286+ ) ;
287+
262288const siwe = document . getElementById ( 'siwe' ) ;
263289const siweResources = document . getElementById ( 'siweResources' ) ;
264290const siweBadDomain = document . getElementById ( 'siweBadDomain' ) ;
@@ -442,8 +468,12 @@ const allConnectedButtons = [
442468 signTypedDataV4Verify ,
443469 signTypedDataV4Batch ,
444470 signTypedDataV4Queue ,
471+ signBlurOrder ,
445472 signPermit ,
473+ signPermitSingle ,
474+ signPermitBatch ,
446475 signPermitVerify ,
476+ signSeaportBulkOrder ,
447477 siwe ,
448478 siweResources ,
449479 siweBadDomain ,
@@ -498,7 +528,11 @@ const initialConnectedButtons = [
498528 signTypedDataV4 ,
499529 signTypedDataV4Batch ,
500530 signTypedDataV4Queue ,
531+ signBlurOrder ,
501532 signPermit ,
533+ signPermitSingle ,
534+ signPermitBatch ,
535+ signSeaportBulkOrder ,
502536 siwe ,
503537 siweResources ,
504538 siweBadDomain ,
@@ -2696,49 +2730,6 @@ const initializeFormElements = () => {
26962730 /**
26972731 * Sign Permit
26982732 */
2699- const EIP712Domain = [
2700- { name : 'name' , type : 'string' } ,
2701- { name : 'version' , type : 'string' } ,
2702- { name : 'chainId' , type : 'uint256' } ,
2703- { name : 'verifyingContract' , type : 'address' } ,
2704- ] ;
2705-
2706- const Permit = [
2707- { name : 'owner' , type : 'address' } ,
2708- { name : 'spender' , type : 'address' } ,
2709- { name : 'value' , type : 'uint256' } ,
2710- { name : 'nonce' , type : 'uint256' } ,
2711- { name : 'deadline' , type : 'uint256' } ,
2712- ] ;
2713-
2714- const permitMsgParamsDomain = {
2715- name : 'MyToken' ,
2716- version : '1' ,
2717- verifyingContract : '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC' ,
2718- chainId : chainIdInt ,
2719- } ;
2720-
2721- function getPermitMsgParams ( ) {
2722- const from = accounts [ 0 ] ;
2723-
2724- const permit = {
2725- owner : from ,
2726- spender : '0x5B38Da6a701c568545dCfcB03FcB875f56beddC4' ,
2727- value : 3000 ,
2728- nonce : 0 ,
2729- deadline : 50000000000 ,
2730- } ;
2731-
2732- return {
2733- types : {
2734- EIP712Domain,
2735- Permit,
2736- } ,
2737- primaryType : 'Permit' ,
2738- domain : permitMsgParamsDomain ,
2739- message : permit ,
2740- } ;
2741- }
27422733
27432734 async function getNFTMsgParams ( ) {
27442735 return {
@@ -2780,7 +2771,13 @@ const initializeFormElements = () => {
27802771
27812772 signPermit . onclick = async ( ) => {
27822773 const from = accounts [ 0 ] ;
2783- const msgParams = getPermitMsgParams ( ) ;
2774+ const msgParams = getPermitMsgParams (
2775+ {
2776+ primaryType : MSG_PRIMARY_TYPE . PERMIT ,
2777+ chainId : chainIdInt ,
2778+ } ,
2779+ { fromAddress : from } ,
2780+ ) ;
27842781
27852782 let sign ;
27862783 let r ;
@@ -2792,6 +2789,7 @@ const initializeFormElements = () => {
27922789 method : 'eth_signTypedData_v4' ,
27932790 params : [ from , JSON . stringify ( msgParams ) ] ,
27942791 } ) ;
2792+
27952793 const { _r, _s, _v } = splitSig ( sign ) ;
27962794 r = `0x${ _r . toString ( 'hex' ) } ` ;
27972795 s = `0x${ _s . toString ( 'hex' ) } ` ;
@@ -2808,12 +2806,65 @@ const initializeFormElements = () => {
28082806 }
28092807 } ;
28102808
2809+ async function requestSignTypedDataVariant ( primaryType ) {
2810+ const from = accounts [ 0 ] ;
2811+ const msgParams = getPermitMsgParams (
2812+ {
2813+ primaryType,
2814+ chainId : chainIdInt ,
2815+ } ,
2816+ { fromAddress : from } ,
2817+ ) ;
2818+
2819+ let sign ;
2820+ let r ;
2821+ let s ;
2822+ let v ;
2823+
2824+ try {
2825+ sign = await provider . request ( {
2826+ method : 'eth_signTypedData_v4' ,
2827+ params : [ from , JSON . stringify ( msgParams ) ] ,
2828+ } ) ;
2829+
2830+ const { _r, _s, _v } = splitSig ( sign ) ;
2831+ r = `0x${ _r . toString ( 'hex' ) } ` ;
2832+ s = `0x${ _s . toString ( 'hex' ) } ` ;
2833+ v = _v . toString ( ) ;
2834+
2835+ signPermitVariantResult . innerHTML = sign ;
2836+ signPermitVariantResultR . innerHTML = `r: ${ r } ` ;
2837+ signPermitVariantResultS . innerHTML = `s: ${ s } ` ;
2838+ signPermitVariantResultV . innerHTML = `v: ${ v } ` ;
2839+ signPermitVerify . disabled = false ;
2840+ } catch ( err ) {
2841+ console . error ( err ) ;
2842+ signPermitVariantResult . innerHTML = `Error: ${ err . message } ` ;
2843+ }
2844+ }
2845+
2846+ signBlurOrder . onclick = async ( ) => {
2847+ await requestSignTypedDataVariant ( MSG_PRIMARY_TYPE . BLUR_ORDER ) ;
2848+ } ;
2849+ signPermitBatch . onclick = async ( ) => {
2850+ await requestSignTypedDataVariant ( MSG_PRIMARY_TYPE . PERMIT_BATCH ) ;
2851+ } ;
2852+ signPermitSingle . onclick = async ( ) => {
2853+ await requestSignTypedDataVariant ( MSG_PRIMARY_TYPE . PERMIT_SINGLE ) ;
2854+ } ;
2855+ signSeaportBulkOrder . onclick = async ( ) => {
2856+ await requestSignTypedDataVariant ( MSG_PRIMARY_TYPE . SEAPORT_BULK_ORDER ) ;
2857+ } ;
2858+
28112859 /**
28122860 * Sign Permit Verification
28132861 */
28142862 signPermitVerify . onclick = async ( ) => {
28152863 const from = accounts [ 0 ] ;
2816- const msgParams = getPermitMsgParams ( ) ;
2864+ const msgParams = getPermitMsgParams ( {
2865+ primaryType : MSG_PRIMARY_TYPE . PERMIT ,
2866+ chainId : chainIdInt ,
2867+ } ) ;
28172868
28182869 try {
28192870 const sign = signPermitResult . innerHTML ;
0 commit comments