ox
Version:
Ethereum Standard Library
63 lines (53 loc) • 1.62 kB
text/typescript
import { expectTypeOf, test } from 'vp/test'
import * as KeyAuthorization from './KeyAuthorization.js'
import * as SignatureEnvelope from './SignatureEnvelope.js'
const authorization = {
address: '0x1111111111111111111111111111111111111111',
chainId: 1n,
type: 'secp256k1',
} as const satisfies KeyAuthorization.Input
const signature = {
signature: {
r: '0x01',
s: '0x02',
yParity: 0,
},
type: 'secp256k1',
} as const satisfies SignatureEnvelope.Secp256k1
const multisig = {
account: '0x2222222222222222222222222222222222222222',
signatures: [signature],
type: 'multisig',
} as const satisfies SignatureEnvelope.Multisig
test('accepts primitive signatures', () => {
const signed = KeyAuthorization.from(authorization, { signature })
expectTypeOf(signed.signature).toMatchTypeOf<
KeyAuthorization.Signed['signature']
>()
})
test('rejects multisig signatures', () => {
KeyAuthorization.from(authorization, {
// @ts-expect-error Key authorizations accept only primitive signatures.
signature: multisig,
})
const multisigRpc = {
account: multisig.account,
signatures: [
{
r: '0x01',
s: '0x02',
type: 'secp256k1',
yParity: '0x0',
},
],
} as const satisfies SignatureEnvelope.MultisigRpc
const rpc: KeyAuthorization.Rpc = {
chainId: '0x1',
expiry: null,
keyId: authorization.address,
keyType: authorization.type,
// @ts-expect-error Key authorizations accept only primitive RPC signatures.
signature: multisigRpc,
}
expectTypeOf(rpc).toEqualTypeOf<KeyAuthorization.Rpc>()
})