|
| 1 | +// Copyright 2026 Circle Internet Group, Inc. All rights reserved. |
| 2 | +// |
| 3 | +// SPDX-License-Identifier: Apache-2.0 |
| 4 | + |
| 5 | +import { expect } from 'chai' |
| 6 | +import { schemaNativeFiatToken } from '../../scripts/genesis/NativeFiatToken' |
| 7 | + |
| 8 | +const PROXY_ADMIN = '0x1111111111111111111111111111111111111111' |
| 9 | +const OWNER = '0x2222222222222222222222222222222222222222' |
| 10 | +const PAUSER = '0x3333333333333333333333333333333333333333' |
| 11 | +const BLACKLISTER = '0x4444444444444444444444444444444444444444' |
| 12 | +const MASTER_MINTER = '0x5555555555555555555555555555555555555555' |
| 13 | +const RESCUER = '0x6666666666666666666666666666666666666666' |
| 14 | + |
| 15 | +const configWithMinters = (minters: Array<{ address: string; allowance: bigint }>) => ({ |
| 16 | + proxy: { admin: PROXY_ADMIN }, |
| 17 | + owner: OWNER, |
| 18 | + pauser: PAUSER, |
| 19 | + blacklister: BLACKLISTER, |
| 20 | + masterMinter: MASTER_MINTER, |
| 21 | + rescuer: RESCUER, |
| 22 | + minters, |
| 23 | +}) |
| 24 | + |
| 25 | +describe('NativeFiatToken genesis validation', () => { |
| 26 | + it('rejects duplicate minters when address casing differs', () => { |
| 27 | + const minter = '0xAb00000000000000000000000000000000000001' |
| 28 | + const result = schemaNativeFiatToken.safeParse( |
| 29 | + configWithMinters([ |
| 30 | + { address: minter, allowance: 100n }, |
| 31 | + { address: minter.toLowerCase(), allowance: 200n }, |
| 32 | + ]), |
| 33 | + ) |
| 34 | + |
| 35 | + expect(result.success).to.be.false |
| 36 | + }) |
| 37 | +}) |
0 commit comments