| 
 | 1 | +import { MultiTokenNtt } from "@wormhole-foundation/sdk-definitions-ntt";  | 
 | 2 | +import { EvmMultiTokenNtt } from "../src/multiTokenNtt.js";  | 
 | 3 | +import { toUniversal } from "@wormhole-foundation/sdk-definitions";  | 
 | 4 | + | 
 | 5 | +describe("calculateLocalTokenAddress", () => {  | 
 | 6 | +  it("should calculate the correct local token address", async () => {  | 
 | 7 | +    const tokenImplementation = "0xbd7312fA1d9433ab2616FBE7aC615A58D81D2c8E";  | 
 | 8 | +    const creationCode =  | 
 | 9 | +      "0x604060808152610416908138038061001681610218565b93843982019181818403126102135780516001600160a01b038116808203610213576020838101516001600160401b0394919391858211610213570186601f820112156102135780519061007161006c83610253565b610218565b918083528583019886828401011161021357888661008f930161026e565b813b156101b9577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916841790556000927fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a28051158015906101b2575b61010b575b855160d190816103458239f35b855194606086019081118682101761019e578697849283926101889952602788527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c87890152660819985a5b195960ca1b8a8901525190845af4913d15610194573d9061017a61006c83610253565b91825281943d92013e610291565b508038808080806100fe565b5060609250610291565b634e487b7160e01b84526041600452602484fd5b50826100f9565b855162461bcd60e51b815260048101859052602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b600080fd5b6040519190601f01601f191682016001600160401b0381118382101761023d57604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b03811161023d57601f01601f191660200190565b60005b8381106102815750506000910152565b8181015183820152602001610271565b919290156102f357508151156102a5575090565b3b156102ae5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b8251909150156103065750805190602001fd5b6044604051809262461bcd60e51b825260206004830152610336815180928160248601526020868601910161026e565b601f01601f19168101030190fdfe608060405236156054577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54600090819081906001600160a01b0316368280378136915af43d82803e156050573d90f35b3d90fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54600090819081906001600160a01b0316368280378136915af43d82803e156050573d90f3fea26469706673582212206554f4df1904914343564cd467a416ab7dfbd4626b3eb40104613d037cd433f264736f6c63430008130033";  | 
 | 10 | +    const expectedAddress = "0xCaf00B2fB2fa0EAE51ecAfef7e45f13fF1BB448a";  | 
 | 11 | + | 
 | 12 | +    const originalToken: MultiTokenNtt.OriginalTokenId = {  | 
 | 13 | +      chain: "Sepolia",  | 
 | 14 | +      // @ts-ignore  | 
 | 15 | +      address: toUniversal(  | 
 | 16 | +        "Sepolia",  | 
 | 17 | +        "0x738141EFf659625F2eAD4feECDfCD94155C67f18"  | 
 | 18 | +      ),  | 
 | 19 | +    };  | 
 | 20 | + | 
 | 21 | +    const tokenMeta = {  | 
 | 22 | +      name: "W Token",  | 
 | 23 | +      symbol: "Ws",  | 
 | 24 | +      decimals: 18,  | 
 | 25 | +    };  | 
 | 26 | + | 
 | 27 | +    const mockMultiTokenNtt = {  | 
 | 28 | +      tokenImplementation: jest.fn().mockResolvedValue(tokenImplementation),  | 
 | 29 | +      tokenProxyCreationCode: jest.fn().mockResolvedValue(creationCode),  | 
 | 30 | +    };  | 
 | 31 | + | 
 | 32 | +    // Minimal implementation of MultiTokenNtt for testing  | 
 | 33 | +    const multiTokenNtt = {  | 
 | 34 | +      multiTokenNtt: mockMultiTokenNtt,  | 
 | 35 | +      managerAddress: "0x600D3C45Cd002E7359D12597Bb8058a0C32A20Df",  | 
 | 36 | +      chain: "Monad",  | 
 | 37 | +      calculateLocalTokenAddress:  | 
 | 38 | +        EvmMultiTokenNtt.prototype.calculateLocalTokenAddress,  | 
 | 39 | +    };  | 
 | 40 | + | 
 | 41 | +    const result = await multiTokenNtt.calculateLocalTokenAddress(  | 
 | 42 | +      originalToken,  | 
 | 43 | +      tokenMeta  | 
 | 44 | +    );  | 
 | 45 | + | 
 | 46 | +    expect(result.toString()).toBe(expectedAddress);  | 
 | 47 | +  });  | 
 | 48 | +});  | 
0 commit comments