MCPcopy Index your code
hub / github.com/codeaashu/claude-code / computeStructHash

Function computeStructHash

src/services/x402/client.ts:186–235  ·  view source on GitHub ↗

* Compute the EIP-712 struct hash for TransferWithAuthorization.

(authorization: {
  from: string
  to: string
  value: string
  validAfter: string
  validBefore: string
  nonce: string
})

Source from the content-addressed store, hash-verified

184 * Compute the EIP-712 struct hash for TransferWithAuthorization.
185 */
186function computeStructHash(authorization: {
187 from: string
188 to: string
189 value: string
190 validAfter: string
191 validBefore: string
192 nonce: string
193}): Buffer {
194 // ABI encode all fields as 32-byte words
195 const encoded = Buffer.alloc(7 * 32)
196
197 TRANSFER_WITH_AUTHORIZATION_TYPEHASH.copy(encoded, 0)
198
199 // from address
200 const fromBuf = Buffer.alloc(32)
201 Buffer.from(authorization.from.replace('0x', ''), 'hex').copy(fromBuf, 12)
202 fromBuf.copy(encoded, 32)
203
204 // to address
205 const toBuf = Buffer.alloc(32)
206 Buffer.from(authorization.to.replace('0x', ''), 'hex').copy(toBuf, 12)
207 toBuf.copy(encoded, 64)
208
209 // value as uint256
210 const valueBuf = Buffer.alloc(32)
211 const value = BigInt(authorization.value)
212 valueBuf.writeBigUInt64BE(value >> 192n, 0)
213 valueBuf.writeBigUInt64BE((value >> 128n) & 0xffffffffffffffffn, 8)
214 valueBuf.writeBigUInt64BE((value >> 64n) & 0xffffffffffffffffn, 16)
215 valueBuf.writeBigUInt64BE(value & 0xffffffffffffffffn, 24)
216 valueBuf.copy(encoded, 96)
217
218 // validAfter as uint256
219 const validAfterBuf = Buffer.alloc(32)
220 validAfterBuf.writeBigUInt64BE(BigInt(authorization.validAfter), 24)
221 validAfterBuf.copy(encoded, 128)
222
223 // validBefore as uint256
224 const validBeforeBuf = Buffer.alloc(32)
225 validBeforeBuf.writeBigUInt64BE(BigInt(authorization.validBefore), 24)
226 validBeforeBuf.copy(encoded, 160)
227
228 // nonce as bytes32
229 const nonceBuf = Buffer.from(authorization.nonce.replace('0x', ''), 'hex')
230 const noncePadded = Buffer.alloc(32)
231 nonceBuf.copy(noncePadded, 32 - nonceBuf.length)
232 noncePadded.copy(encoded, 192)
233
234 return createHash('sha3-256').update(encoded).digest()
235}
236
237/**
238 * Sign an EIP-712 typed data hash with a secp256k1 private key.

Callers 1

createPaymentFunction · 0.85

Calls 1

updateMethod · 0.65

Tested by

no test coverage detected