1- import { utils } from 'ethers'
2- import * as eip712 from './eip712'
3-
4- const {
5- defaultAbiCoder : abi ,
6- arrayify,
1+ import {
2+ AbiCoder ,
3+ getBytes ,
74 concat ,
85 hexlify ,
9- splitSignature,
10- joinSignature,
11- } = utils
6+ BytesLike ,
7+ keccak256 ,
8+ SigningKey ,
9+ Signature ,
10+ recoverAddress ,
11+ } from 'ethers'
12+ import * as eip712 from './eip712'
1213
1314const SIG_SIZE_BYTES = 161
1415const RECEIPT_SIZE_BYTES = 96
1516const RECEIPT_TYPE_HASH = eip712 . typeHash (
1617 'Receipt(bytes32 requestCID,bytes32 responseCID,bytes32 subgraphDeploymentID)' ,
1718)
19+ const abi = AbiCoder . defaultAbiCoder ( )
1820
1921export interface Receipt {
2022 requestCID : string
@@ -56,7 +58,7 @@ export const getDomainSeparator = (
5658}
5759
5860export const createAttestation = async (
59- signer : utils . BytesLike ,
61+ signer : BytesLike ,
6062 chainId : number ,
6163 disputeManagerAddress : string ,
6264 receipt : Receipt ,
@@ -65,9 +67,9 @@ export const createAttestation = async (
6567 const domainSeparator = getDomainSeparator ( chainId , disputeManagerAddress , version )
6668 const encodedReceipt = encodeReceipt ( receipt )
6769 const message = eip712 . encode ( domainSeparator , encodedReceipt )
68- const messageHash = utils . keccak256 ( message )
69- const signingKey = new utils . SigningKey ( signer )
70- const { r, s, v } = signingKey . signDigest ( messageHash )
70+ const messageHash = keccak256 ( message )
71+ const signingKey = new SigningKey ( signer )
72+ const { r, s, v } = signingKey . sign ( messageHash )
7173
7274 return {
7375 requestCID : receipt . requestCID ,
@@ -80,18 +82,18 @@ export const createAttestation = async (
8082}
8183
8284export const encodeAttestation = ( attestation : Attestation ) : string => {
83- const data = arrayify (
85+ const data = getBytes (
8486 abi . encode (
8587 [ 'bytes32' , 'bytes32' , 'bytes32' ] ,
8688 [ attestation . requestCID , attestation . responseCID , attestation . subgraphDeploymentID ] ,
8789 ) ,
8890 )
89- const sig = joinSignature ( attestation )
91+ const sig = Signature . from ( attestation ) . serialized
9092 return hexlify ( concat ( [ data , sig ] ) )
9193}
9294
9395export const decodeAttestation = ( attestationData : string ) : Attestation => {
94- const attestationBytes = arrayify ( attestationData )
96+ const attestationBytes = getBytes ( attestationData )
9597 if ( attestationBytes . length !== SIG_SIZE_BYTES ) {
9698 throw new Error ( 'Invalid signature length' )
9799 }
@@ -100,8 +102,8 @@ export const decodeAttestation = (attestationData: string): Attestation => {
100102 [ 'bytes32' , 'bytes32' , 'bytes32' ] ,
101103 attestationBytes ,
102104 )
103- const sig = splitSignature (
104- attestationBytes . slice ( RECEIPT_SIZE_BYTES , RECEIPT_SIZE_BYTES + SIG_SIZE_BYTES ) ,
105+ const sig = Signature . from (
106+ hexlify ( attestationBytes . slice ( RECEIPT_SIZE_BYTES , RECEIPT_SIZE_BYTES + SIG_SIZE_BYTES ) )
105107 )
106108
107109 return {
@@ -128,9 +130,9 @@ export const recoverAttestation = (
128130 }
129131 const encodedReceipt = encodeReceipt ( receipt )
130132 const message = eip712 . encode ( domainSeparator , encodedReceipt )
131- const messageHash = utils . keccak256 ( message )
132- return utils . recoverAddress (
133+ const messageHash = keccak256 ( message )
134+ return recoverAddress (
133135 messageHash ,
134- joinSignature ( { r : attestation . r , s : attestation . s , v : attestation . v } ) ,
136+ Signature . from ( { r : attestation . r , s : attestation . s , v : attestation . v } ) . serialized ,
135137 )
136138}
0 commit comments