@taquito/michel-codec 16.0.1 → 16.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"taquito-michel-codec.es6.js","sources":["../src/micheline.ts","../src/scan.ts","../src/michelson-types.ts","../src/macros.ts","../src/global-constants.ts","../src/micheline-parser.ts","../src/micheline-emitter.ts","../src/base58.ts","../src/error.ts","../src/utils.ts","../src/michelson-validator.ts","../src/binary.ts","../src/michelson-typecheck.ts","../src/michelson-contract.ts","../src/formatters.ts","../src/version.ts"],"sourcesContent":["// Michelson abstract syntax tree types https://tezos.gitlab.io/whitedoc/michelson.html#concrete-syntax\n\nexport type SourceReference = {\n first: number;\n last: number;\n macro?: Expr;\n globalConstant?: Expr;\n};\n\nexport const sourceReference: unique symbol = Symbol('source_reference');\n\nexport interface Node {\n [sourceReference]?: SourceReference;\n}\n\n/**\n * An AST node representing Michelson string literal.\n */\nexport interface StringLiteral extends Node {\n string: string;\n}\n\n/**\n * An AST node representing Michelson int literal.\n */\nexport interface IntLiteral<T extends string = string> extends Node {\n int: T;\n}\n\n/**\n * An AST node representing Michelson bytes literal.\n */\nexport interface BytesLiteral extends Node {\n bytes: string;\n}\n\n/**\n * An AST node representing Michelson primitive.\n */\nexport interface Prim<PT extends string = string, AT extends Expr[] = Expr[]> extends Node {\n prim: PT;\n args?: AT;\n annots?: string[];\n}\n\nexport type List<T extends Expr> = T[] & Node;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface ExprList extends List<Expr> {}\n\n/**\n * An AST node representing valid Michelson expression. Directly corresponds to JSON-encoded Michelson node\n */\n\nexport type Expr = Prim | StringLiteral | IntLiteral | BytesLiteral | ExprList;\n","/**\n * @category Error\n * @description Error that indicates a failure when performing the scan step when parsing Michelson\n */\nexport class ScanError extends Error {\n constructor(public src: string, public idx: number, message?: string) {\n super(message);\n Object.setPrototypeOf(this, ScanError.prototype);\n }\n}\n\nexport enum Literal {\n Comment,\n Number,\n String,\n Bytes,\n Ident,\n}\n\nexport type TokenType = '(' | ')' | '{' | '}' | ';' | Literal;\n\nconst isSpace = new RegExp('\\\\s');\nconst isIdentStart = new RegExp('[:@%_A-Za-z]');\nconst isIdent = new RegExp('[@%_\\\\.A-Za-z0-9]');\nconst isDigit = new RegExp('[0-9]');\nconst isHex = new RegExp('[0-9a-fA-F]');\n\nexport interface Token {\n t: TokenType;\n v: string;\n first: number;\n last: number;\n}\n\nexport function* scan(src: string, scanComments = false): Generator<Token, void> {\n let i = 0;\n while (i < src.length) {\n // Skip space\n while (i < src.length && isSpace.test(src[i])) {\n i++;\n }\n if (i === src.length) {\n return;\n }\n\n const s = src[i];\n const start = i;\n if (isIdentStart.test(s)) {\n // Identifier\n i++;\n while (i < src.length && isIdent.test(src[i])) {\n i++;\n }\n yield { t: Literal.Ident, v: src.slice(start, i), first: start, last: i };\n } else if (src.length - i > 1 && src.substr(i, 2) === '0x') {\n // Bytes\n i += 2;\n while (i < src.length && isHex.test(src[i])) {\n i++;\n }\n if (((i - start) & 1) !== 0) {\n throw new ScanError(src, i, 'Bytes literal length is expected to be power of two');\n }\n yield { t: Literal.Bytes, v: src.slice(start, i), first: start, last: i };\n } else if (isDigit.test(s) || s === '-') {\n // Number\n if (s === '-') {\n i++;\n }\n const ii = i;\n while (i < src.length && isDigit.test(src[i])) {\n i++;\n }\n if (ii === i) {\n throw new ScanError(src, i, 'Number literal is too short');\n }\n yield { t: Literal.Number, v: src.slice(start, i), first: start, last: i };\n } else if (s === '\"') {\n // String\n i++;\n let esc = false;\n for (; i < src.length && (esc || src[i] !== '\"'); i++) {\n if (!esc && src[i] === '\\\\') {\n esc = true;\n } else {\n esc = false;\n }\n }\n if (i === src.length) {\n throw new ScanError(src, i, 'Unterminated string literal');\n }\n i++;\n yield { t: Literal.String, v: src.slice(start, i), first: start, last: i };\n } else if (s === '#') {\n // Comment\n i++;\n while (i < src.length && src[i] !== '\\n') {\n i++;\n }\n if (scanComments) {\n yield { t: Literal.Comment, v: src.slice(start, i), first: start, last: i };\n }\n } else if (src.length - i > 1 && src.substr(i, 2) === '/*') {\n // C style comment\n i += 2;\n while (i < src.length && !(src.length - i > 1 && src.substr(i, 2) === '*/')) {\n i++;\n }\n if (i === src.length) {\n throw new ScanError(src, i, 'Unterminated C style comment');\n }\n i += 2;\n if (scanComments) {\n yield { t: Literal.Comment, v: src.slice(start, i), first: start, last: i };\n }\n } else if (s === '(' || s === ')' || s === '{' || s === '}' || s === ';') {\n i++;\n yield { t: s, v: s, first: start, last: i };\n } else {\n throw new ScanError(src, i, `Invalid character at offset ${i}: \\`${s}'`);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-interface */\nimport { Prim, Expr, IntLiteral, StringLiteral, BytesLiteral, List, Node } from './micheline';\n\ninterface Prim0<PT extends string = string> extends Prim<PT> {\n args?: never;\n}\ninterface PrimX<PT extends string = string, AT extends Expr[] = Expr[]> extends Prim<PT, AT> {\n args: AT;\n}\n\n// Instructions\ntype MichelsonNoArgInstructionID =\n | 'ABS'\n | 'ADD'\n | 'ADDRESS'\n | 'AMOUNT'\n | 'AND'\n | 'APPLY'\n | 'BALANCE'\n | 'BLAKE2B'\n | 'CAR'\n | 'CDR'\n | 'CHAIN_ID'\n | 'CHECK_SIGNATURE'\n | 'COMPARE'\n | 'CONCAT'\n | 'CONS'\n | 'EDIV'\n | 'EQ'\n | 'EXEC'\n | 'FAILWITH'\n | 'GE'\n | 'GET_AND_UPDATE'\n | 'GT'\n | 'HASH_KEY'\n | 'IMPLICIT_ACCOUNT'\n | 'INT'\n | 'ISNAT'\n | 'JOIN_TICKETS'\n | 'KECCAK'\n | 'LE'\n | 'LEVEL'\n | 'LSL'\n | 'LSR'\n | 'LT'\n | 'MEM'\n | 'MUL'\n | 'NEG'\n | 'NEQ'\n | 'NEVER'\n | 'NOT'\n | 'NOW'\n | 'OR'\n | 'PACK'\n | 'PAIRING_CHECK'\n | 'READ_TICKET'\n | 'SAPLING_VERIFY_UPDATE'\n | 'SELF'\n | 'SELF_ADDRESS'\n | 'SENDER'\n | 'SET_DELEGATE'\n | 'SHA256'\n | 'SHA3'\n | 'SHA512'\n | 'SIZE'\n | 'SLICE'\n | 'SOME'\n | 'SOURCE'\n | 'SPLIT_TICKET'\n | 'SUB'\n | 'SUB_MUTEZ'\n | 'SWAP'\n | 'TICKET'\n | 'TICKET_DEPRECATED'\n | 'TOTAL_VOTING_POWER'\n | 'TRANSFER_TOKENS'\n | 'UNIT'\n | 'VOTING_POWER'\n | 'XOR'\n | 'RENAME'\n | 'OPEN_CHEST'\n | 'MIN_BLOCK_TIME'\n | 'BYTES'\n | 'NAT';\n\ntype MichelsonRegularInstructionID =\n | 'CONTRACT'\n | 'CREATE_CONTRACT'\n | 'DIG'\n | 'DIP'\n | 'DROP'\n | 'DUG'\n | 'DUP'\n | 'EMPTY_BIG_MAP'\n | 'EMPTY_MAP'\n | 'EMPTY_SET'\n | 'GET'\n | 'IF'\n | 'IF_CONS'\n | 'IF_LEFT'\n | 'IF_NONE'\n | 'ITER'\n | 'LAMBDA'\n | 'LAMBDA_REC'\n | 'LEFT'\n | 'LOOP'\n | 'LOOP_LEFT'\n | 'MAP'\n | 'NIL'\n | 'NONE'\n | 'PAIR'\n | 'PUSH'\n | 'RIGHT'\n | 'SAPLING_EMPTY_STATE'\n | 'UNPACK'\n | 'UNPAIR'\n | 'UPDATE'\n | 'CAST'\n | 'VIEW'\n | 'EMIT'\n // legacy\n | 'CREATE_ACCOUNT'\n | 'STEPS_TO_QUOTA';\n\nexport type MichelsonInstructionID = MichelsonNoArgInstructionID | MichelsonRegularInstructionID;\ntype InstrPrim<PT extends MichelsonInstructionID, AT extends Expr[]> = Prim<PT, AT>;\ntype Instr0<PT extends MichelsonNoArgInstructionID> = Prim0<PT>;\ntype InstrX<PT extends MichelsonRegularInstructionID, AT extends Expr[]> = PrimX<PT, AT>;\n\nexport type MichelsonCode = InstructionList | MichelsonInstruction;\nexport interface InstructionList extends List<MichelsonCode> {}\n\nexport type MichelsonNoArgInstruction = Instr0<MichelsonNoArgInstructionID>;\nexport type MichelsonInstruction =\n | MichelsonNoArgInstruction\n | InstrX<'DIG' | 'DUG' | 'SAPLING_EMPTY_STATE', [IntLiteral]>\n | InstrX<'NONE' | 'LEFT' | 'RIGHT' | 'NIL' | 'CAST', [MichelsonType]>\n | InstrX<'IF_NONE' | 'IF_LEFT' | 'IF_CONS' | 'IF', [InstructionList, InstructionList]>\n | InstrX<'MAP' | 'ITER' | 'LOOP' | 'LOOP_LEFT' | 'DIP', [InstructionList]>\n | InstrX<'UNPACK', [MichelsonType]>\n | InstrX<'CONTRACT', [MichelsonType]>\n | InstrX<'CREATE_CONTRACT', [MichelsonContract]>\n | InstrX<'PUSH', [MichelsonType, MichelsonData]>\n | InstrX<'EMPTY_SET', [MichelsonType]>\n | InstrX<'EMPTY_MAP', [MichelsonType, MichelsonType]>\n | InstrX<'EMPTY_BIG_MAP', [MichelsonType, MichelsonType]>\n | InstrX<'LAMBDA' | 'LAMBDA_REC', [MichelsonType, MichelsonType, InstructionList]>\n | InstrX<'DIP', [IntLiteral, InstructionList] | [InstructionList]>\n | InstrX<'VIEW', [StringLiteral, MichelsonType]>\n | InstrX<'EMIT', [MichelsonType]>\n | InstrPrim<'DROP' | 'PAIR' | 'UNPAIR' | 'DUP' | 'GET' | 'UPDATE', [IntLiteral]>;\n\n// Types\n\nexport type MichelsonSimpleComparableTypeID =\n | 'string'\n | 'nat'\n | 'int'\n | 'bytes'\n | 'bool'\n | 'mutez'\n | 'key_hash'\n | 'address'\n | 'timestamp'\n | 'never'\n | 'key'\n | 'unit'\n | 'signature'\n | 'chain_id'\n | 'tx_rollup_l2_address';\n\nexport type MichelsonTypeID =\n | MichelsonSimpleComparableTypeID\n | 'option'\n | 'list'\n | 'set'\n | 'contract'\n | 'operation'\n | 'pair'\n | 'or'\n | 'lambda'\n | 'map'\n | 'big_map'\n | 'sapling_transaction'\n | 'sapling_transaction_deprecated'\n | 'sapling_state'\n | 'ticket'\n | 'bls12_381_g1'\n | 'bls12_381_g2'\n | 'bls12_381_fr'\n | 'chest_key'\n | 'chest';\n\ntype Type0<PT extends MichelsonTypeID> = Prim0<PT>;\ntype TypeX<PT extends MichelsonTypeID, AT extends Expr[]> = PrimX<PT, AT>;\n\n// Michelson types\n\nexport const refContract: unique symbol = Symbol('ref_contract');\nexport interface MichelsonTypeAddress extends Type0<'address'> {\n [refContract]?: MichelsonTypeContract<MichelsonType>;\n}\n\nexport type MichelsonTypeInt = Type0<'int'>;\nexport type MichelsonTypeNat = Type0<'nat'>;\nexport type MichelsonTypeString = Type0<'string'>;\nexport type MichelsonTypeBytes = Type0<'bytes'>;\nexport type MichelsonTypeMutez = Type0<'mutez'>;\nexport type MichelsonTypeBool = Type0<'bool'>;\nexport type MichelsonTypeKeyHash = Type0<'key_hash'>;\nexport type MichelsonTypeTimestamp = Type0<'timestamp'>;\nexport type MichelsonTypeKey = Type0<'key'>;\nexport type MichelsonTypeUnit = Type0<'unit'>;\nexport type MichelsonTypeSignature = Type0<'signature'>;\nexport type MichelsonTypeOperation = Type0<'operation'>;\nexport type MichelsonTypeChainID = Type0<'chain_id'>;\nexport type MichelsonTypeNever = Type0<'never'>;\nexport type MichelsonTypeBLS12_381_G1 = Type0<'bls12_381_g1'>;\nexport type MichelsonTypeBLS12_381_G2 = Type0<'bls12_381_g2'>;\nexport type MichelsonTypeBLS12_381_FR = Type0<'bls12_381_fr'>;\nexport type MichelsonTypeChestKey = Type0<'chest_key'>;\nexport type MichelsonTypeChest = Type0<'chest'>;\n\ntype TypeList<T extends MichelsonType[]> = T & Node;\nexport type MichelsonTypePair<T extends MichelsonType[]> = TypeX<'pair', T> | TypeList<T>;\n\nexport interface MichelsonTypeOption<T extends MichelsonType> extends TypeX<'option', [T]> {}\nexport interface MichelsonTypeList<T extends MichelsonType> extends TypeX<'list', [T]> {}\nexport interface MichelsonTypeContract<T extends MichelsonType> extends TypeX<'contract', [T]> {}\nexport interface MichelsonTypeOr<T extends [MichelsonType, MichelsonType]> extends TypeX<'or', T> {}\nexport interface MichelsonTypeLambda<Arg extends MichelsonType, Ret extends MichelsonType>\n extends TypeX<'lambda', [Arg, Ret]> {}\n\nexport interface MichelsonTypeSet<T extends MichelsonType> extends TypeX<'set', [T]> {}\nexport interface MichelsonTypeMap<K extends MichelsonType, V extends MichelsonType>\n extends TypeX<'map', [K, V]> {}\nexport interface MichelsonTypeBigMap<K extends MichelsonType, V extends MichelsonType>\n extends TypeX<'big_map', [K, V]> {}\nexport interface MichelsonTypeSaplingState<S extends string = string>\n extends TypeX<'sapling_state', [IntLiteral<S>]> {}\nexport interface MichelsonTypeSaplingTransaction<S extends string = string>\n extends TypeX<'sapling_transaction', [IntLiteral<S>]> {}\nexport interface MichelsonTypeTicket<T extends MichelsonType> extends TypeX<'ticket', [T]> {}\n\nexport type MichelsonType<T extends MichelsonTypeID = MichelsonTypeID> = T extends 'int'\n ? MichelsonTypeInt\n : T extends 'nat'\n ? MichelsonTypeNat\n : T extends 'string'\n ? MichelsonTypeString\n : T extends 'bytes'\n ? MichelsonTypeBytes\n : T extends 'mutez'\n ? MichelsonTypeMutez\n : T extends 'bool'\n ? MichelsonTypeBool\n : T extends 'key_hash'\n ? MichelsonTypeKeyHash\n : T extends 'timestamp'\n ? MichelsonTypeTimestamp\n : T extends 'address'\n ? MichelsonTypeAddress\n : T extends 'key'\n ? MichelsonTypeKey\n : T extends 'unit'\n ? MichelsonTypeUnit\n : T extends 'signature'\n ? MichelsonTypeSignature\n : T extends 'operation'\n ? MichelsonTypeOperation\n : T extends 'chain_id'\n ? MichelsonTypeChainID\n : T extends 'option'\n ? MichelsonTypeOption<MichelsonType>\n : T extends 'list'\n ? MichelsonTypeList<MichelsonType>\n : T extends 'contract'\n ? MichelsonTypeContract<MichelsonType>\n : T extends 'ticket'\n ? MichelsonTypeTicket<MichelsonType>\n : T extends 'pair'\n ? MichelsonTypePair<MichelsonType[]>\n : T extends 'or'\n ? MichelsonTypeOr<[MichelsonType, MichelsonType]>\n : T extends 'lambda'\n ? MichelsonTypeLambda<MichelsonType, MichelsonType>\n : T extends 'set'\n ? MichelsonTypeSet<MichelsonType>\n : T extends 'map'\n ? MichelsonTypeMap<MichelsonType, MichelsonType>\n : T extends 'big_map'\n ? MichelsonTypeBigMap<MichelsonType, MichelsonType>\n : T extends 'never'\n ? MichelsonTypeNever\n : T extends 'bls12_381_g1'\n ? MichelsonTypeBLS12_381_G1\n : T extends 'bls12_381_g2'\n ? MichelsonTypeBLS12_381_G2\n : T extends 'bls12_381_fr'\n ? MichelsonTypeBLS12_381_FR\n : T extends 'sapling_transaction'\n ? MichelsonTypeSaplingTransaction\n : T extends 'sapling_state'\n ? MichelsonTypeSaplingState\n : T extends 'chest_key'\n ? MichelsonTypeChestKey\n : MichelsonTypeChest;\n\n// Data\n\nexport type MichelsonDataID =\n | 'Unit'\n | 'True'\n | 'False'\n | 'None'\n | 'Pair'\n | 'Left'\n | 'Right'\n | 'Some'\n | 'Lambda_rec';\n\ntype Data0<PT extends MichelsonDataID> = Prim0<PT>;\ntype DataX<PT extends MichelsonDataID, AT extends MichelsonData[]> = PrimX<PT, AT>;\n\nexport type MichelsonDataOption = DataX<'Some', [MichelsonData]> | Data0<'None'>;\nexport type MichelsonDataOr = DataX<'Left' | 'Right', [MichelsonData]>;\ntype DataList<T extends MichelsonData[]> = T & Node;\nexport type MichelsonDataPair<T extends MichelsonData[]> = DataX<'Pair', T> | DataList<T>;\nexport type MichelsonMapElt = PrimX<'Elt', [MichelsonData, MichelsonData]>;\nexport type MichelsonMapEltList = List<MichelsonMapElt>;\nexport type MichelsonLambdaRec = DataX<'Lambda_rec', [InstructionList]>;\n\nexport type MichelsonData =\n | IntLiteral\n | StringLiteral\n | BytesLiteral\n | Data0<'Unit' | 'True' | 'False'>\n | MichelsonDataOption\n | MichelsonDataOr\n | DataList<MichelsonData[]>\n | MichelsonDataPair<MichelsonData[]>\n | InstructionList\n | MichelsonMapEltList\n | MichelsonLambdaRec;\n\n// Top level script sections\n\nexport type MichelsonSectionID = 'parameter' | 'storage' | 'code' | 'view';\ntype SectionPrim<PT extends MichelsonSectionID, AT extends Expr[]> = PrimX<PT, AT>;\n\nexport type MichelsonContractParameter = SectionPrim<'parameter', [MichelsonType]>;\nexport type MichelsonContractStorage = SectionPrim<'storage', [MichelsonType]>;\nexport type MichelsonContractCode = SectionPrim<'code', [InstructionList]>;\nexport type MichelsonContractView = SectionPrim<\n 'view',\n [StringLiteral, MichelsonType, MichelsonType, InstructionList]\n>;\n\nexport type MichelsonContract = MichelsonContractSection[];\n\nexport type MichelsonContractSection<T extends MichelsonSectionID = MichelsonSectionID> =\n T extends 'parameter'\n ? MichelsonContractParameter\n : T extends 'storage'\n ? MichelsonContractStorage\n : T extends 'view'\n ? MichelsonContractView\n : MichelsonContractCode;\n\n// Code analysis types\nexport interface MichelsonTypeFailed {\n failed: MichelsonType;\n level: number;\n}\n\nexport type MichelsonReturnType = MichelsonType[] | MichelsonTypeFailed;\n\nexport enum Protocol {\n Ps9mPmXa = 'Ps9mPmXaRzmzk35gbAYNCAw6UXdE2qoABTHbN2oEEc1qM7CwT9P',\n PtCJ7pwo = 'PtCJ7pwoxe8JasnHY8YonnLYjcVHmhiARPJvqcC6VfHT5s8k8sY',\n PsYLVpVv = 'PsYLVpVvgbLhAhoqAkMFUo6gudkJ9weNXhUYCiLDzcUpFpkk8Wt',\n PsddFKi3 = 'PsddFKi32cMJ2qPjf43Qv5GDWLDPZb3T3bF6fLKiF5HtvHNU7aP',\n Pt24m4xi = 'Pt24m4xiPbLDhVgVfABUjirbmda3yohdN82Sp9FeuAXJ4eV9otd',\n PsBABY5H = 'PsBABY5HQTSkA4297zNHfsZNKtxULfL18y95qb3m53QJiXGmrbU',\n PsBabyM1 = 'PsBabyM1eUXZseaJdmXFApDSBqj8YBfwELoxZHHW77EMcAbbwAS',\n PsCARTHA = 'PsCARTHAGazKbHtnKfLzQg3kms52kSRpgnDY982a9oYsSXRLQEb',\n PsDELPH1 = 'PsDELPH1Kxsxt8f9eWbxQeRxkjfbxoqM52jvs5Y5fBxWWh4ifpo',\n PtEdoTez = 'PtEdoTezd3RHSC31mpxxo1npxFjoWWcFgQtxapi51Z8TLu6v6Uq',\n PtEdo2Zk = 'PtEdo2ZkT9oKpimTah6x2embF25oss54njMuPzkJTEi5RqfdZFA',\n PsFLoren = 'PsFLorenaUUuikDWvMDr6fGBRG8kt3e3D3fHoXK1j1BFRxeSH4i',\n PsFLorena = 'PsFLorenaUUuikDWvMDr6fGBRG8kt3e3D3fHoXK1j1BFRxeSH4i',\n PtGRANAD = 'PtGRANADsDU8R9daYKAgWnQYAJ64omN1o3KMGVCykShA97vQbvV',\n PtGRANADs = 'PtGRANADsDU8R9daYKAgWnQYAJ64omN1o3KMGVCykShA97vQbvV',\n PtHangzH = 'PtHangzHogokSuiMHemCuowEavgYTP8J5qQ9fQS793MHYFpCY3r',\n PtHangz2 = 'PtHangz2aRngywmSRGGvrcTyMbbdpWdpFKuS4uMWxg2RaH9i1qx',\n PsiThaCa = 'PsiThaCaT47Zboaw71QWScM8sXeMM7bbQFncK9FLqYc6EKdpjVP',\n Psithaca2 = 'Psithaca2MLRFYargivpo7YvUr7wUDqyxrdhC5CQq78mRvimz6A',\n PtJakarta = 'PtJakartaiDz69SfDDLXJSiuZqTSeSKRDbKVZC8MNzJnvRjvnGw',\n PtJakart2 = 'PtJakart2xVj7pYXJBXrqHgd82rdkLey5ZeeGwDgPp9rhQUbSqY',\n PtKathman = 'PtKathmankSpLLDALzWw7CGD2j2MtyveTwboEYokqUCP4a1LxMg',\n PtLimaPtL = 'PtLimaPtLMwfNinJi9rCfDPWea8dFgTZ1MeJ9f1m2SRic6ayiwW',\n PtMumbaii = 'PtMumbaiiFFEGbew1rRjzSPyzRbA51Tm3RVZL5suHPxSZYDhCEc',\n PtMumbai2 = 'PtMumbai2TmsJHNGRkD8v8YDbtao7BLUC3wjASn1inAKLFCjaH1',\n ProtoALpha = 'ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK', // temporary protocol hash\n}\n\nexport const DefaultProtocol = Protocol.Psithaca2;\n\nexport type ProtocolID = `${Protocol}`;\n\nconst protoLevel: Record<ProtocolID, number> = {\n Ps9mPmXaRzmzk35gbAYNCAw6UXdE2qoABTHbN2oEEc1qM7CwT9P: 0,\n PtCJ7pwoxe8JasnHY8YonnLYjcVHmhiARPJvqcC6VfHT5s8k8sY: 1,\n PsYLVpVvgbLhAhoqAkMFUo6gudkJ9weNXhUYCiLDzcUpFpkk8Wt: 2,\n PsddFKi32cMJ2qPjf43Qv5GDWLDPZb3T3bF6fLKiF5HtvHNU7aP: 3,\n Pt24m4xiPbLDhVgVfABUjirbmda3yohdN82Sp9FeuAXJ4eV9otd: 4,\n PsBABY5HQTSkA4297zNHfsZNKtxULfL18y95qb3m53QJiXGmrbU: 5,\n PsBabyM1eUXZseaJdmXFApDSBqj8YBfwELoxZHHW77EMcAbbwAS: 5,\n PsCARTHAGazKbHtnKfLzQg3kms52kSRpgnDY982a9oYsSXRLQEb: 6,\n PsDELPH1Kxsxt8f9eWbxQeRxkjfbxoqM52jvs5Y5fBxWWh4ifpo: 7,\n PtEdoTezd3RHSC31mpxxo1npxFjoWWcFgQtxapi51Z8TLu6v6Uq: 8,\n PtEdo2ZkT9oKpimTah6x2embF25oss54njMuPzkJTEi5RqfdZFA: 8,\n PsFLorenaUUuikDWvMDr6fGBRG8kt3e3D3fHoXK1j1BFRxeSH4i: 9,\n PtGRANADsDU8R9daYKAgWnQYAJ64omN1o3KMGVCykShA97vQbvV: 10,\n PtHangzHogokSuiMHemCuowEavgYTP8J5qQ9fQS793MHYFpCY3r: 11,\n PtHangz2aRngywmSRGGvrcTyMbbdpWdpFKuS4uMWxg2RaH9i1qx: 11,\n PsiThaCaT47Zboaw71QWScM8sXeMM7bbQFncK9FLqYc6EKdpjVP: 12,\n Psithaca2MLRFYargivpo7YvUr7wUDqyxrdhC5CQq78mRvimz6A: 12,\n PtJakartaiDz69SfDDLXJSiuZqTSeSKRDbKVZC8MNzJnvRjvnGw: 13,\n PtJakart2xVj7pYXJBXrqHgd82rdkLey5ZeeGwDgPp9rhQUbSqY: 13,\n PtKathmankSpLLDALzWw7CGD2j2MtyveTwboEYokqUCP4a1LxMg: 14,\n PtLimaPtLMwfNinJi9rCfDPWea8dFgTZ1MeJ9f1m2SRic6ayiwW: 15,\n PtMumbaiiFFEGbew1rRjzSPyzRbA51Tm3RVZL5suHPxSZYDhCEc: 16,\n PtMumbai2TmsJHNGRkD8v8YDbtao7BLUC3wjASn1inAKLFCjaH1: 16,\n ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK: 17,\n};\n\nexport function ProtoGreaterOfEqual(a: ProtocolID, b: ProtocolID): boolean {\n return protoLevel[a] >= protoLevel[b];\n}\n\nexport function ProtoInferiorTo(a: ProtocolID, b: ProtocolID): boolean {\n return protoLevel[a] < protoLevel[b];\n}\n\nexport interface ProtocolOptions {\n protocol?: ProtocolID;\n}\n","import { Prim, Expr, IntLiteral } from './micheline';\nimport { DefaultProtocol, Protocol, ProtocolOptions, ProtoInferiorTo } from './michelson-types';\nimport { Tuple, NoArgs, ReqArgs, NoAnnots } from './utils';\n\n/**\n * @category Error\n * @description Indicates that an error has occurred preventing macros from being expanded in a plain Michelson input\n */\nexport class MacroError extends Error {\n constructor(public prim: Prim, message?: string) {\n super(message);\n Object.setPrototypeOf(this, MacroError.prototype);\n }\n}\n\nfunction assertArgs<N extends number>(\n ex: Prim,\n n: N\n): ex is N extends 0 ? NoArgs<Prim<string>> : ReqArgs<Prim<string, Tuple<N, Expr>>> {\n if ((n === 0 && ex.args === undefined) || ex.args?.length === n) {\n return true;\n }\n throw new MacroError(ex, `macro ${ex.prim} expects ${n} arguments, was given ${ex.args?.length}`);\n}\n\nfunction assertNoAnnots(ex: Prim): ex is NoAnnots<Prim> {\n if (ex.annots === undefined) {\n return true;\n }\n throw new MacroError(ex, `unexpected annotation on macro ${ex.prim}: ${ex.annots}`);\n}\n\nfunction assertIntArg(ex: Prim, arg: Expr): arg is IntLiteral {\n if ('int' in arg) {\n return true;\n }\n throw new MacroError(ex, `macro ${ex.prim} expects int argument`);\n}\n\ntype PT = [number, [string | null, string | null]];\n\nfunction parsePairUnpairExpr(\n p: Prim,\n expr: string,\n annotations: string[],\n agg: (l: PT[] | undefined, r: PT[] | undefined, top: PT) => PT[]\n): { r: PT[]; n: number; an: number } {\n let i = 0;\n let ai = 0;\n const ann: [string | null, string | null] = [null, null];\n\n // Left expression\n let lexpr: PT[] | undefined;\n if (i === expr.length) {\n throw new MacroError(p, `unexpected end: ${p.prim}`);\n }\n let c = expr[i++];\n switch (c) {\n case 'P': {\n const { r, n, an } = parsePairUnpairExpr(p, expr.slice(i), annotations.slice(ai), agg);\n lexpr = r;\n i += n;\n ai += an;\n break;\n }\n case 'A':\n if (ai !== annotations.length) {\n ann[0] = annotations[ai++];\n }\n break;\n default:\n throw new MacroError(p, `${p.prim}: unexpected character: ${c}`);\n }\n\n // Right expression\n let rexpr: PT[] | undefined;\n if (i === expr.length) {\n throw new MacroError(p, `unexpected end: ${p.prim}`);\n }\n c = expr[i++];\n switch (c) {\n case 'P': {\n const { r, n, an } = parsePairUnpairExpr(p, expr.slice(i), annotations.slice(ai), agg);\n rexpr = r.map<PT>(([v, a]) => [v + 1, a]);\n i += n;\n ai += an;\n break;\n }\n case 'I':\n if (ai !== annotations.length) {\n ann[1] = annotations[ai++];\n }\n break;\n default:\n throw new MacroError(p, `${p.prim}: unexpected character: ${c}`);\n }\n\n return { r: agg(lexpr, rexpr, [0, ann]), n: i, an: ai };\n}\n\nfunction parseSetMapCadr(p: Prim, expr: string, vann: string[], term: { a: Expr; d: Expr }): Expr {\n const c = expr[0];\n switch (c) {\n case 'A':\n return expr.length > 1\n ? [\n { prim: 'DUP' },\n {\n prim: 'DIP',\n args: [\n [{ prim: 'CAR', annots: ['@%%'] }, parseSetMapCadr(p, expr.slice(1), [], term)],\n ],\n },\n { prim: 'CDR', annots: ['@%%'] },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: ['%@', '%@', ...vann] },\n ]\n : term.a;\n\n case 'D':\n return expr.length > 1\n ? [\n { prim: 'DUP' },\n {\n prim: 'DIP',\n args: [\n [{ prim: 'CDR', annots: ['@%%'] }, parseSetMapCadr(p, expr.slice(1), [], term)],\n ],\n },\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', '%@', ...vann] },\n ]\n : term.d;\n\n default:\n throw new MacroError(p, `${p.prim}: unexpected character: ${c}`);\n }\n}\n\nfunction trimLast<T>(a: T[], v: T): T[] {\n let l = a.length;\n while (l > 0 && a[l - 1] === v) {\n l--;\n }\n return a.slice(0, l);\n}\n\nfunction filterAnnotations(a?: string[]): {\n fields: string[];\n rest: string[];\n} {\n const fields: string[] = [];\n const rest: string[] = [];\n if (a !== undefined) {\n for (const v of a) {\n (v.length !== 0 && v[0] === '%' ? fields : rest).push(v);\n }\n }\n return { fields, rest };\n}\n\nfunction mkPrim({ prim, annots, args }: Prim): Prim {\n return {\n prim,\n ...(annots && { annots }),\n ...(args && { args }),\n };\n}\n\nconst pairRe = /^P[PAI]{3,}R$/;\nconst unpairRe = /^UNP[PAI]{2,}R$/;\nconst cadrRe = /^C[AD]{2,}R$/;\nconst setCadrRe = /^SET_C[AD]+R$/;\nconst mapCadrRe = /^MAP_C[AD]+R$/;\nconst diipRe = /^DI{2,}P$/;\nconst duupRe = /^DU+P$/;\n\nexport function expandMacros(ex: Prim, opt?: ProtocolOptions): Expr {\n const proto = opt?.protocol || DefaultProtocol;\n\n function mayRename(annots?: string[]): Prim[] {\n return annots !== undefined ? [{ prim: 'RENAME', annots }] : [];\n }\n\n switch (ex.prim) {\n // Compare\n case 'CMPEQ':\n case 'CMPNEQ':\n case 'CMPLT':\n case 'CMPGT':\n case 'CMPLE':\n case 'CMPGE':\n if (assertArgs(ex, 0)) {\n return [{ prim: 'COMPARE' }, mkPrim({ prim: ex.prim.slice(3), annots: ex.annots })];\n }\n break;\n\n case 'IFEQ':\n case 'IFNEQ':\n case 'IFLT':\n case 'IFGT':\n case 'IFLE':\n case 'IFGE':\n if (assertArgs(ex, 2)) {\n return [\n { prim: ex.prim.slice(2) },\n mkPrim({ prim: 'IF', annots: ex.annots, args: ex.args }),\n ];\n }\n break;\n\n case 'IFCMPEQ':\n case 'IFCMPNEQ':\n case 'IFCMPLT':\n case 'IFCMPGT':\n case 'IFCMPLE':\n case 'IFCMPGE':\n if (assertArgs(ex, 2)) {\n return [\n { prim: 'COMPARE' },\n { prim: ex.prim.slice(5) },\n mkPrim({ prim: 'IF', annots: ex.annots, args: ex.args }),\n ];\n }\n break;\n\n // Fail\n case 'FAIL':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [{ prim: 'UNIT' }, { prim: 'FAILWITH' }];\n }\n break;\n\n // Assertion macros\n case 'ASSERT':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n {\n prim: 'IF',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_EQ':\n case 'ASSERT_NEQ':\n case 'ASSERT_LT':\n case 'ASSERT_GT':\n case 'ASSERT_LE':\n case 'ASSERT_GE':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n { prim: ex.prim.slice(7) },\n {\n prim: 'IF',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_CMPEQ':\n case 'ASSERT_CMPNEQ':\n case 'ASSERT_CMPLT':\n case 'ASSERT_CMPGT':\n case 'ASSERT_CMPLE':\n case 'ASSERT_CMPGE':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n [{ prim: 'COMPARE' }, { prim: ex.prim.slice(10) }],\n {\n prim: 'IF',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_NONE':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n {\n prim: 'IF_NONE',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_SOME':\n if (assertArgs(ex, 0)) {\n return [\n {\n prim: 'IF_NONE',\n args: [[[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]], mayRename(ex.annots)],\n },\n ];\n }\n break;\n\n case 'ASSERT_LEFT':\n if (assertArgs(ex, 0)) {\n return [\n {\n prim: 'IF_LEFT',\n args: [mayRename(ex.annots), [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_RIGHT':\n if (assertArgs(ex, 0)) {\n return [\n {\n prim: 'IF_LEFT',\n args: [[[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]], mayRename(ex.annots)],\n },\n ];\n }\n break;\n\n // Syntactic conveniences\n\n case 'IF_SOME':\n if (assertArgs(ex, 2)) {\n return [mkPrim({ prim: 'IF_NONE', annots: ex.annots, args: [ex.args[1], ex.args[0]] })];\n }\n break;\n\n case 'IF_RIGHT':\n if (assertArgs(ex, 2)) {\n return [mkPrim({ prim: 'IF_LEFT', annots: ex.annots, args: [ex.args[1], ex.args[0]] })];\n }\n break;\n\n // CAR/CDR n\n case 'CAR':\n case 'CDR':\n if (ex.args !== undefined) {\n if (assertArgs(ex, 1) && assertIntArg(ex, ex.args[0])) {\n const n = parseInt(ex.args[0].int, 10);\n return mkPrim({\n prim: 'GET',\n args: [{ int: ex.prim === 'CAR' ? String(n * 2 + 1) : String(n * 2) }],\n annots: ex.annots,\n });\n }\n } else {\n return ex;\n }\n }\n\n // More syntactic conveniences\n\n // PAPPAIIR macro\n if (pairRe.test(ex.prim)) {\n if (assertArgs(ex, 0)) {\n const { fields, rest } = filterAnnotations(ex.annots);\n const { r } = parsePairUnpairExpr(ex, ex.prim.slice(1), fields, (l, r, top) => [\n ...(l || []),\n ...(r || []),\n top,\n ]);\n\n return r.map(([v, a], i) => {\n const ann = [\n ...trimLast(a, null).map((v) => (v === null ? '%' : v)),\n ...(v === 0 && i === r.length - 1 ? rest : []),\n ];\n\n const leaf = mkPrim({ prim: 'PAIR', annots: ann.length !== 0 ? ann : undefined });\n\n return v === 0\n ? leaf\n : {\n prim: 'DIP',\n args: v === 1 ? [[leaf]] : [{ int: String(v) }, [leaf]],\n };\n });\n }\n }\n\n // UNPAPPAIIR macro\n if (unpairRe.test(ex.prim)) {\n if (ProtoInferiorTo(proto, Protocol.PtEdo2Zk) && assertArgs(ex, 0)) {\n const { r } = parsePairUnpairExpr(ex, ex.prim.slice(3), ex.annots || [], (l, r, top) => [\n top,\n ...(r || []),\n ...(l || []),\n ]);\n return r.map(([v, a]) => {\n const leaf: Prim[] = [\n { prim: 'DUP' },\n mkPrim({ prim: 'CAR', annots: a[0] !== null ? [a[0]] : undefined }),\n {\n prim: 'DIP',\n args: [[mkPrim({ prim: 'CDR', annots: a[1] !== null ? [a[1]] : undefined })]],\n },\n ];\n\n return v === 0\n ? leaf\n : {\n prim: 'DIP',\n args: v === 1 ? [[leaf]] : [{ int: String(v) }, [leaf]],\n };\n });\n } else {\n if (ex.prim === 'UNPAIR') {\n return ex;\n }\n if (assertArgs(ex, 0)) {\n // 008_edo: annotations are deprecated\n const { r } = parsePairUnpairExpr(ex, ex.prim.slice(3), [], (l, r, top) => [\n top,\n ...(r || []),\n ...(l || []),\n ]);\n return r.map(([v]) => {\n const leaf = mkPrim({\n prim: 'UNPAIR',\n });\n\n return v === 0\n ? leaf\n : {\n prim: 'DIP',\n args: v === 1 ? [[leaf]] : [{ int: String(v) }, [leaf]],\n };\n });\n }\n }\n }\n\n // C[AD]+R macro\n if (cadrRe.test(ex.prim)) {\n if (assertArgs(ex, 0)) {\n const ch = [...ex.prim.slice(1, ex.prim.length - 1)];\n\n return ch.map<Prim>((c, i) => {\n const ann = i === ch.length - 1 ? ex.annots : undefined;\n switch (c) {\n case 'A':\n return mkPrim({ prim: 'CAR', annots: ann });\n case 'D':\n return mkPrim({ prim: 'CDR', annots: ann });\n default:\n throw new MacroError(ex, `unexpected character: ${c}`);\n }\n });\n }\n }\n\n // SET_C[AD]+R macro\n if (setCadrRe.test(ex.prim)) {\n if (assertArgs(ex, 0)) {\n const { fields, rest } = filterAnnotations(ex.annots);\n if (fields.length > 1) {\n throw new MacroError(ex, `unexpected annotation on macro ${ex.prim}: ${fields}`);\n }\n\n const term =\n fields.length !== 0\n ? {\n a: [\n { prim: 'DUP' },\n { prim: 'CAR', annots: fields },\n { prim: 'DROP' },\n { prim: 'CDR', annots: ['@%%'] },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: [fields[0], '%@'] },\n ],\n d: [\n { prim: 'DUP' },\n { prim: 'CDR', annots: fields },\n { prim: 'DROP' },\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', fields[0]] },\n ],\n }\n : {\n a: [\n { prim: 'CDR', annots: ['@%%'] },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: ['%', '%@'] },\n ],\n d: [\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', '%'] },\n ],\n };\n\n return parseSetMapCadr(ex, ex.prim.slice(5, ex.prim.length - 1), rest, term);\n }\n }\n\n // MAP_C[AD]+R macro\n if (mapCadrRe.test(ex.prim)) {\n if (assertArgs(ex, 1)) {\n const { fields } = filterAnnotations(ex.annots);\n if (fields.length > 1) {\n throw new MacroError(ex, `unexpected annotation on macro ${ex.prim}: ${fields}`);\n }\n\n const term = {\n a: [\n { prim: 'DUP' },\n { prim: 'CDR', annots: ['@%%'] },\n {\n prim: 'DIP',\n args: [\n [\n mkPrim({\n prim: 'CAR',\n annots: fields.length !== 0 ? ['@' + fields[0].slice(1)] : undefined,\n }),\n ex.args[0],\n ],\n ],\n },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: [fields.length !== 0 ? fields[0] : '%', '%@'] },\n ],\n d: [\n { prim: 'DUP' },\n mkPrim({\n prim: 'CDR',\n annots: fields.length !== 0 ? ['@' + fields[0].slice(1)] : undefined,\n }),\n ex.args[0],\n { prim: 'SWAP' },\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', fields.length !== 0 ? fields[0] : '%'] },\n ],\n };\n\n return parseSetMapCadr(ex, ex.prim.slice(5, ex.prim.length - 1), [], term);\n }\n }\n\n // Expand deprecated DI...IP to [DIP n]\n if (diipRe.test(ex.prim)) {\n if (assertArgs(ex, 1)) {\n let n = 0;\n while (ex.prim[1 + n] === 'I') {\n n++;\n }\n return mkPrim({ prim: 'DIP', args: [{ int: String(n) }, ex.args[0]] });\n }\n }\n\n // Expand DU...UP and DUP n\n if (duupRe.test(ex.prim)) {\n let n = 0;\n while (ex.prim[1 + n] === 'U') {\n n++;\n }\n if (ProtoInferiorTo(proto, Protocol.PtEdo2Zk)) {\n if (n === 1) {\n if (ex.args === undefined) {\n return ex; // skip\n }\n if (assertArgs(ex, 1) && assertIntArg(ex, ex.args[0])) {\n n = parseInt(ex.args[0].int, 10);\n }\n } else {\n assertArgs(ex, 0);\n }\n\n if (n === 1) {\n return [mkPrim({ prim: 'DUP', annots: ex.annots })];\n } else if (n === 2) {\n return [\n {\n prim: 'DIP',\n args: [[mkPrim({ prim: 'DUP', annots: ex.annots })]],\n },\n { prim: 'SWAP' },\n ];\n } else {\n return [\n {\n prim: 'DIP',\n args: [{ int: String(n - 1) }, [mkPrim({ prim: 'DUP', annots: ex.annots })]],\n },\n {\n prim: 'DIG',\n args: [{ int: String(n) }],\n },\n ];\n }\n } else {\n if (n === 1) {\n return ex;\n }\n if (assertArgs(ex, 0)) {\n return mkPrim({ prim: 'DUP', args: [{ int: String(n) }], annots: ex.annots });\n }\n }\n }\n\n return ex;\n}\n","import { Prim, Expr } from './micheline';\nimport { GlobalConstantHashAndValue } from './micheline-parser';\n\nexport function expandGlobalConstants(ex: Prim, hashAndValue: GlobalConstantHashAndValue): Expr {\n if (\n ex.args !== undefined &&\n ex.args.length === 1 &&\n 'string' in ex.args[0] &&\n ex.args[0].string in hashAndValue\n ) {\n return hashAndValue[ex.args[0].string];\n }\n\n return ex;\n}\n","import { scan, Token, Literal } from './scan';\nimport {\n Expr,\n Prim,\n StringLiteral,\n IntLiteral,\n BytesLiteral,\n sourceReference,\n List,\n SourceReference,\n} from './micheline';\nimport { expandMacros } from './macros';\nimport { ProtocolOptions } from './michelson-types';\nimport { expandGlobalConstants } from './global-constants';\n\n/**\n * @category Error\n * @description Error indicating a failure when parsing Micheline expressions\n */\nexport class MichelineParseError extends Error {\n /**\n * @param token A token caused the error\n * @param message An error message\n */\n constructor(public token: Token | null, message?: string) {\n super(message);\n Object.setPrototypeOf(this, MichelineParseError.prototype);\n }\n}\n\n/**\n * @category Error\n * @description Error that inidicates a failure when parsing Micheline JSON\n */\nexport class JSONParseError extends Error {\n /**\n * @param node A node caused the error\n * @param message An error message\n */\n constructor(public node: unknown, message?: string) {\n super(message);\n Object.setPrototypeOf(this, JSONParseError.prototype);\n }\n}\n\nexport interface GlobalConstantHashAndValue {\n [globalConstantHash: string]: Expr;\n}\n\nconst errEOF = new MichelineParseError(null, 'Unexpected EOF');\n\nfunction isAnnotation(tok: Token): boolean {\n return tok.t === Literal.Ident && (tok.v[0] === '@' || tok.v[0] === '%' || tok.v[0] === ':');\n}\n\nconst intRe = new RegExp('^-?[0-9]+$');\nconst bytesRe = new RegExp('^([0-9a-fA-F]{2})*$');\n\nexport interface ParserOptions extends ProtocolOptions {\n /**\n * Expand [Michelson macros](https://tezos.gitlab.io/whitedoc/michelson.html#macros) during parsing.\n */\n expandMacros?: boolean;\n /**\n * Expand global constants during parsing.\n * `expandGlobalConstant` expects an object where the keys are global constant hashes and the values are the corresponding JSON Micheline expressions.\n * @example\n * ```\n * const parserOptions: ParserOptions = {\n * expandGlobalConstant: {\n * 'expr...': { prim: 'DROP', args: [{ int: '2' }] }\n * }\n * }\n *\n * const p = new Parser(parserOptions);\n * ```\n */\n expandGlobalConstant?: GlobalConstantHashAndValue;\n}\n\n/**\n * Converts and validates Michelson expressions between JSON-based Michelson and Micheline\n *\n * Pretty Print a Michelson Smart Contract:\n * ```\n * const contract = await Tezos.contract.at(\"KT1Vsw3kh9638gqWoHTjvHCoHLPKvCbMVbCg\");\n * const p = new Parser();\n *\n * const michelsonCode = p.parseJSON(contract.script.code);\n * const storage = p.parseJSON(contract.script.storage);\n *\n * console.log(\"Pretty print Michelson smart contract:\");\n * console.log(emitMicheline(michelsonCode, {indent:\" \", newline: \"\\n\",}));\n *\n * console.log(\"Pretty print Storage:\");\n * console.log(emitMicheline(storage, {indent:\" \", newline: \"\\n\",}));\n * ```\n *\n * Encode a Michelson expression for inital storage of a smart contract\n * ```\n * const src = `(Pair (Pair { Elt 1\n * (Pair (Pair \"tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN\" \"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx\")\n * 0x0501000000026869) }\n * 10000000)\n * (Pair 2 333))`;\n *\n * const p = new Parser();\n *\n * const exp = p.parseMichelineExpression(src);\n * console.log(JSON.stringify(exp));\n * ```\n */\nexport class Parser {\n constructor(private opt?: ParserOptions) {}\n\n private expand(ex: Prim): Expr {\n if (this.opt?.expandGlobalConstant !== undefined && ex.prim === 'constant') {\n const ret = expandGlobalConstants(ex, this.opt.expandGlobalConstant);\n if (ret !== ex) {\n ret[sourceReference] = {\n ...(ex[sourceReference] || { first: 0, last: 0 }),\n globalConstant: ex,\n };\n }\n return ret;\n }\n if (this.opt?.expandMacros !== undefined ? this.opt?.expandMacros : true) {\n const ret = expandMacros(ex, this.opt);\n if (ret !== ex) {\n ret[sourceReference] = { ...(ex[sourceReference] || { first: 0, last: 0 }), macro: ex };\n }\n return ret;\n } else {\n return ex;\n }\n }\n\n private parseListExpr(scanner: Iterator<Token>, start: Token): Expr {\n const ref: SourceReference = {\n first: start.first,\n last: start.last,\n };\n\n const expectBracket = start.t === '(';\n let tok: IteratorResult<Token>;\n if (expectBracket) {\n tok = scanner.next();\n if (tok.done) {\n throw errEOF;\n }\n ref.last = tok.value.last;\n } else {\n tok = { value: start };\n }\n\n if (tok.value.t !== Literal.Ident) {\n throw new MichelineParseError(tok.value, `not an identifier: ${tok.value.v}`);\n }\n\n const ret: Prim = {\n prim: tok.value.v,\n [sourceReference]: ref,\n };\n\n for (;;) {\n const tok = scanner.next();\n if (tok.done) {\n if (expectBracket) {\n throw errEOF;\n }\n break;\n } else if (tok.value.t === ')') {\n if (!expectBracket) {\n throw new MichelineParseError(tok.value, 'unexpected closing bracket');\n }\n ref.last = tok.value.last;\n break;\n } else if (isAnnotation(tok.value)) {\n ret.annots = ret.annots || [];\n ret.annots.push(tok.value.v);\n ref.last = tok.value.last;\n } else {\n ret.args = ret.args || [];\n const arg = this.parseExpr(scanner, tok.value);\n ref.last = arg[sourceReference]?.last || ref.last;\n ret.args.push(arg);\n }\n }\n return this.expand(ret);\n }\n\n private parseArgs(scanner: Iterator<Token>, start: Token): [Prim, IteratorResult<Token>] {\n // Identifier with arguments\n const ref: SourceReference = {\n first: start.first,\n last: start.last,\n };\n const p: Prim = {\n prim: start.v,\n [sourceReference]: ref,\n };\n\n for (;;) {\n const t = scanner.next();\n if (t.done || t.value.t === '}' || t.value.t === ';') {\n return [p, t];\n }\n\n if (isAnnotation(t.value)) {\n ref.last = t.value.last;\n p.annots = p.annots || [];\n p.annots.push(t.value.v);\n } else {\n const arg = this.parseExpr(scanner, t.value);\n ref.last = arg[sourceReference]?.last || ref.last;\n p.args = p.args || [];\n p.args.push(arg);\n }\n }\n }\n\n private parseSequenceExpr(scanner: Iterator<Token>, start: Token): List<Expr> {\n const ref: SourceReference = {\n first: start.first,\n last: start.last,\n };\n const seq: List<Expr> = [];\n seq[sourceReference] = ref;\n\n const expectBracket = start.t === '{';\n let tok: IteratorResult<Token> | null = start.t === '{' ? null : { value: start };\n\n for (;;) {\n if (tok === null) {\n tok = scanner.next();\n if (!tok.done) {\n ref.last = tok.value.last;\n }\n }\n if (tok.done) {\n if (expectBracket) {\n throw errEOF;\n } else {\n return seq;\n }\n }\n\n if (tok.value.t === '}') {\n if (!expectBracket) {\n throw new MichelineParseError(tok.value, 'unexpected closing bracket');\n } else {\n return seq;\n }\n } else if (tok.value.t === Literal.Ident) {\n // Identifier with arguments\n const [itm, n] = this.parseArgs(scanner, tok.value);\n ref.last = itm[sourceReference]?.last || ref.last;\n seq.push(this.expand(itm));\n tok = n;\n } else {\n // Other\n const ex = this.parseExpr(scanner, tok.value);\n ref.last = ex[sourceReference]?.last || ref.last;\n seq.push(ex);\n tok = null;\n }\n\n if (tok === null) {\n tok = scanner.next();\n if (!tok.done) {\n ref.last = tok.value.last;\n }\n }\n if (!tok.done && tok.value.t === ';') {\n tok = null;\n }\n }\n }\n\n private parseExpr(scanner: Iterator<Token>, tok: Token): Expr {\n switch (tok.t) {\n case Literal.Ident:\n return this.expand({\n prim: tok.v,\n [sourceReference]: { first: tok.first, last: tok.last },\n });\n\n case Literal.Number:\n return { int: tok.v, [sourceReference]: { first: tok.first, last: tok.last } };\n\n case Literal.String:\n return {\n string: JSON.parse(tok.v) as string,\n [sourceReference]: { first: tok.first, last: tok.last },\n };\n\n case Literal.Bytes:\n return { bytes: tok.v.slice(2), [sourceReference]: { first: tok.first, last: tok.last } };\n\n case '{':\n return this.parseSequenceExpr(scanner, tok);\n\n default:\n return this.parseListExpr(scanner, tok);\n }\n }\n\n /**\n * Parses a Micheline sequence expression, such as smart contract source. Enclosing curly brackets may be omitted.\n * @param src A Micheline sequence `{parameter ...; storage int; code { DUP ; ...};}` or `parameter ...; storage int; code { DUP ; ...};`\n */\n parseSequence(src: string): Expr[] | null {\n if (typeof src !== 'string') {\n throw new TypeError(`string type was expected, got ${typeof src} instead`);\n }\n\n const scanner = scan(src);\n const tok = scanner.next();\n if (tok.done) {\n return null;\n }\n return this.parseSequenceExpr(scanner, tok.value);\n }\n\n /**\n * Parse a Micheline sequence expression. Enclosing curly brackets may be omitted.\n * @param src A Michelson list expression such as `(Pair {Elt \"0\" 0} 0)` or `Pair {Elt \"0\" 0} 0`\n * @returns An AST node or null for empty document.\n */\n parseList(src: string): Expr | null {\n if (typeof src !== 'string') {\n throw new TypeError(`string type was expected, got ${typeof src} instead`);\n }\n\n const scanner = scan(src);\n const tok = scanner.next();\n if (tok.done) {\n return null;\n }\n return this.parseListExpr(scanner, tok.value);\n }\n\n /**\n * Parse any Michelson expression\n * @param src A Michelson expression such as `(Pair {Elt \"0\" 0} 0)` or `{parameter ...; storage int; code { DUP ; ...};}`\n * @returns An AST node or null for empty document.\n */\n parseMichelineExpression(src: string): Expr | null {\n if (typeof src !== 'string') {\n throw new TypeError(`string type was expected, got ${typeof src} instead`);\n }\n\n const scanner = scan(src);\n const tok = scanner.next();\n if (tok.done) {\n return null;\n }\n return this.parseExpr(scanner, tok.value);\n }\n\n /**\n * Parse a Micheline sequence expression, such as smart contract source. Enclosing curly brackets may be omitted.\n * An alias for `parseSequence`\n * @param src A Micheline sequence `{parameter ...; storage int; code { DUP ; ...};}` or `parameter ...; storage int; code { DUP ; ...};`\n */\n parseScript(src: string): Expr[] | null {\n return this.parseSequence(src);\n }\n\n /**\n * Parse a Micheline sequence expression. Enclosing curly brackets may be omitted.\n * An alias for `parseList`\n * @param src A Michelson list expression such as `(Pair {Elt \"0\" 0} 0)` or `Pair {Elt \"0\" 0} 0`\n * @returns An AST node or null for empty document.\n */\n parseData(src: string): Expr | null {\n return this.parseList(src);\n }\n\n /**\n * Takes a JSON-encoded Michelson, validates it, strips away unneeded properties and optionally expands macros (See {@link ParserOptions}).\n * @param src An object containing JSON-encoded Michelson, usually returned by `JSON.parse()`\n */\n parseJSON(src: object): Expr {\n if (typeof src !== 'object') {\n throw new TypeError(`object type was expected, got ${typeof src} instead`);\n }\n\n if (Array.isArray(src)) {\n const ret: Expr[] = [];\n for (const n of src) {\n if (n === null || typeof n !== 'object') {\n throw new JSONParseError(n, `unexpected sequence element: ${n}`);\n }\n ret.push(this.parseJSON(n));\n }\n return ret;\n } else if ('prim' in src) {\n const p = src as { prim: unknown; annots?: unknown[]; args?: unknown[] };\n if (\n typeof p.prim === 'string' &&\n (p.annots === undefined || Array.isArray(p.annots)) &&\n (p.args === undefined || Array.isArray(p.args))\n ) {\n const ret: Prim = {\n prim: p.prim,\n };\n\n if (p.annots !== undefined) {\n for (const a of p.annots) {\n if (typeof a !== 'string') {\n throw new JSONParseError(a, `string expected: ${a}`);\n }\n }\n ret.annots = p.annots;\n }\n\n if (p.args !== undefined) {\n ret.args = [];\n for (const a of p.args) {\n if (a === null || typeof a !== 'object') {\n throw new JSONParseError(a, `unexpected argument: ${a}`);\n }\n ret.args.push(this.parseJSON(a));\n }\n }\n\n return this.expand(ret);\n }\n\n throw new JSONParseError(src, `malformed prim expression: ${src}`);\n } else if ('string' in src) {\n if (typeof (src as StringLiteral).string === 'string') {\n return { string: (src as StringLiteral).string };\n }\n\n throw new JSONParseError(src, `malformed string literal: ${src}`);\n } else if ('int' in src) {\n if (typeof (src as IntLiteral).int === 'string' && intRe.test((src as IntLiteral).int)) {\n return { int: (src as IntLiteral).int };\n }\n\n throw new JSONParseError(src, `malformed int literal: ${src}`);\n } else if ('bytes' in src) {\n if (\n typeof (src as BytesLiteral).bytes === 'string' &&\n bytesRe.test((src as BytesLiteral).bytes)\n ) {\n return { bytes: (src as BytesLiteral).bytes };\n }\n\n throw new JSONParseError(src, `malformed bytes literal: ${src}`);\n } else {\n throw new JSONParseError(src, `unexpected object: ${src}`);\n }\n }\n}\n","import { Expr, Prim, sourceReference } from './micheline';\n\nexport interface FormatOptions {\n /**\n * A string used for code indentation if desired. Usually a tab character or a number of spaces.\n */\n indent?: string;\n /**\n * A string used for line separation. Usually a newline character (\"\\n\");\n */\n newline?: string;\n}\n\nclass Formatter {\n constructor(private opt?: FormatOptions, private lev: number = 0) {}\n\n indent(n = 0): string {\n let ret = '';\n if (this.opt?.indent !== undefined) {\n for (let i = this.lev + n; i > 0; i--) {\n ret += this.opt.indent;\n }\n }\n return ret;\n }\n\n get lf(): string {\n return this.opt?.newline || '';\n }\n\n get lfsp(): string {\n return this.opt?.newline || ' ';\n }\n\n down(n: number): Formatter {\n return new Formatter(this.opt, this.lev + n);\n }\n}\n\nfunction hasArgs(node: Expr): node is Prim {\n return (\n 'prim' in node &&\n ((node.annots !== undefined && node.annots.length !== 0) ||\n (node.args !== undefined && node.args.length !== 0))\n );\n}\n\nfunction isMultiline(node: Prim): boolean {\n if (node.args !== undefined) {\n for (const a of node.args) {\n if (Array.isArray(a) || hasArgs(a)) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction emitExpr(node: Expr, f: Formatter, foldMacros: boolean): string {\n const macro = node[sourceReference]?.macro;\n if (foldMacros && macro) {\n return emitExpr(macro, f, foldMacros);\n }\n\n if (Array.isArray(node)) {\n return emitSeq(node, f, foldMacros);\n } else if ('string' in node) {\n return JSON.stringify(node.string);\n } else if ('int' in node) {\n return node.int;\n } else if ('bytes' in node) {\n return '0x' + node.bytes;\n } else {\n if (\n (node.annots === undefined || node.annots.length === 0) &&\n (node.args === undefined || node.args.length === 0)\n ) {\n return node.prim;\n }\n\n let ret = '(' + node.prim;\n if (node.annots !== undefined) {\n for (const a of node.annots) {\n ret += ' ' + a;\n }\n }\n if (node.args !== undefined) {\n const multiline = isMultiline(node);\n for (const a of node.args) {\n if (multiline) {\n ret += f.lfsp + f.indent(1) + emitExpr(a, f.down(1), foldMacros);\n } else {\n ret += ' ' + emitExpr(a, f, foldMacros);\n }\n }\n }\n return ret + ')';\n }\n}\n\nfunction emitSeq(node: Expr[], f: Formatter, foldMacros: boolean): string {\n let ret = '{' + f.lf;\n let i = node.length;\n for (const el of node) {\n ret += f.indent(1);\n\n if ('prim' in el) {\n ret += el.prim;\n\n if (el.annots !== undefined) {\n for (const a of el.annots) {\n ret += ' ' + a;\n }\n }\n if (el.args !== undefined) {\n const multiline = isMultiline(el);\n for (const a of el.args) {\n if (multiline) {\n ret += f.lfsp + f.indent(2) + emitExpr(a, f.down(2), foldMacros);\n } else {\n ret += ' ' + emitExpr(a, f, foldMacros);\n }\n }\n }\n } else {\n ret += emitExpr(el, f.down(1), foldMacros);\n }\n\n ret += i > 1 ? ';' + f.lfsp : f.lf;\n i--;\n }\n return ret + f.indent() + '}';\n}\n\n/**\n * Formats Micheline expression\n * @param expr An AST node\n * @param opt Options\n */\nexport function emitMicheline(expr: Expr, opt?: FormatOptions, foldMacros = false): string {\n if (typeof expr !== 'object') {\n throw new TypeError(`object type was expected, got ${typeof expr} instead`);\n }\n\n return emitExpr(expr, new Formatter(opt), foldMacros);\n}\n","const H = [\n 0x6a09e667 | 0,\n 0xbb67ae85 | 0,\n 0x3c6ef372 | 0,\n 0xa54ff53a | 0,\n 0x510e527f | 0,\n 0x9b05688c | 0,\n 0x1f83d9ab | 0,\n 0x5be0cd19 | 0,\n];\n\nconst K = [\n 0x428a2f98 | 0,\n 0x71374491 | 0,\n 0xb5c0fbcf | 0,\n 0xe9b5dba5 | 0,\n 0x3956c25b | 0,\n 0x59f111f1 | 0,\n 0x923f82a4 | 0,\n 0xab1c5ed5 | 0,\n 0xd807aa98 | 0,\n 0x12835b01 | 0,\n 0x243185be | 0,\n 0x550c7dc3 | 0,\n 0x72be5d74 | 0,\n 0x80deb1fe | 0,\n 0x9bdc06a7 | 0,\n 0xc19bf174 | 0,\n 0xe49b69c1 | 0,\n 0xefbe4786 | 0,\n 0x0fc19dc6 | 0,\n 0x240ca1cc | 0,\n 0x2de92c6f | 0,\n 0x4a7484aa | 0,\n 0x5cb0a9dc | 0,\n 0x76f988da | 0,\n 0x983e5152 | 0,\n 0xa831c66d | 0,\n 0xb00327c8 | 0,\n 0xbf597fc7 | 0,\n 0xc6e00bf3 | 0,\n 0xd5a79147 | 0,\n 0x06ca6351 | 0,\n 0x14292967 | 0,\n 0x27b70a85 | 0,\n 0x2e1b2138 | 0,\n 0x4d2c6dfc | 0,\n 0x53380d13 | 0,\n 0x650a7354 | 0,\n 0x766a0abb | 0,\n 0x81c2c92e | 0,\n 0x92722c85 | 0,\n 0xa2bfe8a1 | 0,\n 0xa81a664b | 0,\n 0xc24b8b70 | 0,\n 0xc76c51a3 | 0,\n 0xd192e819 | 0,\n 0xd6990624 | 0,\n 0xf40e3585 | 0,\n 0x106aa070 | 0,\n 0x19a4c116 | 0,\n 0x1e376c08 | 0,\n 0x2748774c | 0,\n 0x34b0bcb5 | 0,\n 0x391c0cb3 | 0,\n 0x4ed8aa4a | 0,\n 0x5b9cca4f | 0,\n 0x682e6ff3 | 0,\n 0x748f82ee | 0,\n 0x78a5636f | 0,\n 0x84c87814 | 0,\n 0x8cc70208 | 0,\n 0x90befffa | 0,\n 0xa4506ceb | 0,\n 0xbef9a3f7 | 0,\n 0xc67178f2 | 0,\n];\n\n/**\n * @category Error\n * @description Error that indicates a failure when decoding a base58 encoding\n */\nexport class Base58DecodingError extends Error {\n public name = 'Base58DecodingError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description\n */\nexport class InvalidMessageError extends Error {\n public name = 'InvalidMessageError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n// https://tools.ietf.org/html/rfc6234\nfunction sha256(msg: number[] | Uint8Array): number[] {\n // pad the message\n const r = (msg.length + 9) % 64;\n const pad = r === 0 ? 0 : 64 - r;\n\n if (msg.length > 268435455) {\n throw new InvalidMessageError(`SHA-256 -- message length is too big: ${msg.length}`);\n }\n\n const l = msg.length << 3;\n const buffer = [\n ...msg,\n 0x80,\n ...new Array<number>(pad).fill(0),\n 0,\n 0,\n 0,\n 0,\n (l >> 24) & 0xff,\n (l >> 16) & 0xff,\n (l >> 8) & 0xff,\n l & 0xff,\n ];\n\n function ror(x: number, n: number): number {\n return (x >>> n) | (x << (32 - n));\n }\n\n const h = [...H];\n const w = new Array<number>(64);\n const v = new Array<number>(8);\n\n for (let offset = 0; offset < buffer.length; offset += 64) {\n let q = offset;\n let i = 0;\n while (i < 16) {\n w[i] = (buffer[q] << 24) | (buffer[q + 1] << 16) | (buffer[q + 2] << 8) | buffer[q + 3];\n q += 4;\n i++;\n }\n while (i < 64) {\n const s0 = ror(w[i - 15], 7) ^ ror(w[i - 15], 18) ^ (w[i - 15] >>> 3);\n const s1 = ror(w[i - 2], 17) ^ ror(w[i - 2], 19) ^ (w[i - 2] >>> 10);\n w[i] = ((s1 | 0) + w[i - 7] + s0 + w[i - 16]) | 0;\n i++;\n }\n\n for (let i = 0; i < 8; i++) {\n v[i] = h[i];\n }\n\n for (let i = 0; i < 64; i++) {\n const b0 = ror(v[0], 2) ^ ror(v[0], 13) ^ ror(v[0], 22);\n const b1 = ror(v[4], 6) ^ ror(v[4], 11) ^ ror(v[4], 25);\n const t1 = (v[7] + b1 + ((v[4] & v[5]) ^ (~v[4] & v[6])) + K[i] + w[i]) | 0;\n const t2 = (b0 + ((v[0] & v[1]) ^ (v[0] & v[2]) ^ (v[1] & v[2]))) | 0;\n\n v[7] = v[6];\n v[6] = v[5];\n v[5] = v[4];\n v[4] = (v[3] + t1) | 0;\n v[3] = v[2];\n v[2] = v[1];\n v[1] = v[0];\n v[0] = (t1 + t2) | 0;\n }\n\n for (let i = 0; i < 8; i++) {\n h[i] = (h[i] + v[i]) | 0;\n }\n }\n\n const digest: number[] = [];\n for (const v of h) {\n digest.push((v >> 24) & 0xff);\n digest.push((v >> 16) & 0xff);\n digest.push((v >> 8) & 0xff);\n digest.push(v & 0xff);\n }\n\n return digest;\n}\n\nconst base58alphabetFwd: number[] = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, -1, -1, -1, -1, -1, -1, -1, 9, 10, 11, 12, 13, 14, 15, 16, -1, 17, 18,\n 19, 20, 21, -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1, -1, 33, 34, 35,\n 36, 37, 38, 39, 40, 41, 42, 43, -1, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,\n];\n\nconst base58alphabetBwd: number[] = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35,\n 36, 37, 38, 39, 40, 41, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66,\n 67, 68, 69, 70, 71, 72, 73,\n];\n\nfunction byteAt(src: string, i: number): number {\n const c = src.charCodeAt(i) - 49;\n if (c >= base58alphabetFwd.length || base58alphabetFwd[c] === -1) {\n throw new Base58DecodingError(`Unexpected character at position ${i}: ${src[i]}`);\n }\n return base58alphabetFwd[c];\n}\n\nexport function decodeBase58(src: string): number[] {\n const acc: number[] = [];\n let i = 0;\n // count and skip leading zeros\n while (i < src.length && byteAt(src, i) === 0) {\n i++;\n }\n let zeros = i;\n while (i < src.length) {\n let carry = byteAt(src, i++);\n /*\n for every symbol x\n acc = acc * 58 + x\n where acc is a little endian arbitrary length integer\n */\n let ii = 0;\n while (carry !== 0 || ii < acc.length) {\n const m = (acc[ii] || 0) * 58 + carry;\n acc[ii++] = m % 256;\n carry = Math.floor(m / 256);\n }\n }\n while (zeros-- > 0) {\n acc.push(0);\n }\n return acc.reverse();\n}\n\nexport function encodeBase58(src: number[] | Uint8Array): string {\n const acc: number[] = [];\n let i = 0;\n // count and skip leading zeros\n while (i < src.length && src[i] === 0) {\n i++;\n }\n let zeros = i;\n while (i < src.length) {\n let carry = src[i++];\n let ii = 0;\n while (carry !== 0 || ii < acc.length) {\n const m = (acc[ii] || 0) * 256 + carry;\n acc[ii++] = m % 58;\n carry = Math.floor(m / 58);\n }\n }\n while (zeros-- > 0) {\n acc.push(0);\n }\n acc.reverse();\n return String.fromCharCode(...acc.map((v) => base58alphabetBwd[v] + 49));\n}\n\nexport function decodeBase58Check(src: string): number[] {\n const buffer = decodeBase58(src);\n if (buffer.length < 4) {\n throw new Base58DecodingError(`Data is too short ${buffer.length}`);\n }\n\n const data = buffer.slice(0, buffer.length - 4);\n const sum = buffer.slice(buffer.length - 4);\n const computed = sha256(sha256(data));\n if (\n sum[0] !== computed[0] ||\n sum[1] !== computed[1] ||\n sum[2] !== computed[2] ||\n sum[3] !== computed[3]\n ) {\n throw new Base58DecodingError('Invalid checksum');\n }\n\n return data;\n}\n\nexport function encodeBase58Check(src: number[] | Uint8Array): string {\n const sum = sha256(sha256(src));\n return encodeBase58([...src, ...sum.slice(0, 4)]);\n}\n","/**\n * @category Error\n * @description Error that indicates an invalid contract being passed or used\n */\nexport class InvalidContractError extends Error {\n public name = 'InvalidContractError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid type expression being passed or used\n */\nexport class InvalidTypeExpressionError extends Error {\n public name = 'InvalidTypeExpressionError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid data expression being passed or used\n */\nexport class InvalidDataExpressionError extends Error {\n public name = 'InvalidDataExpressionError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid contract entrypoint being referenced or passed\n */\nexport class InvalidEntrypointError extends Error {\n public name = 'InvalidEntrypointError';\n constructor(public entrypoint?: string) {\n super(`Contract has no entrypoint named: '${entrypoint}'`);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a failure happening when trying to encode Tezos ID\n */\nexport class TezosIdEncodeError extends Error {\n public name = 'TezosIdEncodeError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a general error happening when trying to create a LongInteger\n */\nexport class LongIntegerError extends Error {\n public name = 'LongIntegerError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a failure occurring when trying to parse a hex byte\n */\nexport class HexParseError extends Error {\n public name = 'HexParseError';\n constructor(public hexByte: string) {\n super(`Unable to parse hex byte: ${hexByte}`);\n }\n}\n","import { Prim, Expr, StringLiteral, IntLiteral } from './micheline';\nimport { decodeBase58Check, encodeBase58Check } from './base58';\nimport {\n MichelsonData,\n MichelsonDataPair,\n MichelsonType,\n MichelsonTypePair,\n} from './michelson-types';\nimport { HexParseError, LongIntegerError, TezosIdEncodeError } from './error';\n\nexport type Tuple<N extends number, T> = N extends 1\n ? [T]\n : N extends 2\n ? [T, T]\n : N extends 3\n ? [T, T, T]\n : N extends 4\n ? [T, T, T, T]\n : N extends 5\n ? [T, T, T, T, T]\n : N extends 6\n ? [T, T, T, T, T, T]\n : N extends 7\n ? [T, T, T, T, T, T, T]\n : N extends 8\n ? [T, T, T, T, T, T, T, T]\n : T[];\n\ntype RequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\ntype OmitProp<T, K extends keyof T> = Omit<T, K> & { [P in K]?: undefined };\n\nexport type ReqArgs<T extends Prim> = RequiredProp<T, 'args'>;\nexport type NoArgs<T extends Prim> = OmitProp<T, 'args'>;\nexport type NoAnnots<T extends Prim> = OmitProp<T, 'annots'>;\n\nexport type Nullable<T> = { [P in keyof T]: T[P] | null };\n\n/**\n * @category Error\n * @description Error that indicates a Michelson failure occurring\n */\nexport class MichelsonError<T extends Expr = Expr> extends Error {\n /**\n * @param val Value of a AST node caused the error\n * @param path Path to a node caused the error\n * @param message An error message\n */\n constructor(public val: T, message?: string) {\n super(message);\n Object.setPrototypeOf(this, MichelsonError.prototype);\n }\n}\n\nexport function isMichelsonError<T extends Expr = Expr>(err: unknown): err is MichelsonError<T> {\n return err instanceof MichelsonError;\n}\n\nexport class MichelsonTypeError extends MichelsonError<MichelsonType | MichelsonType[]> {\n public data?: Expr;\n\n /**\n * @param val Value of a type node caused the error\n * @param data Value of a data node caused the error\n * @param message An error message\n */\n constructor(val: MichelsonType | MichelsonType[], data?: Expr, message?: string) {\n super(val, message);\n if (data !== undefined) {\n this.data = data;\n }\n Object.setPrototypeOf(this, MichelsonTypeError.prototype);\n }\n}\n\n// Ad hoc big integer parser\nexport class LongInteger {\n private neg = false;\n private buf: number[] = [];\n\n private append(c: number) {\n let i = 0;\n while (c !== 0 || i < this.buf.length) {\n const m = (this.buf[i] || 0) * 10 + c;\n this.buf[i++] = m % 256;\n c = Math.floor(m / 256);\n }\n }\n\n constructor(arg?: string | number) {\n if (arg === undefined) {\n return;\n }\n if (typeof arg === 'string') {\n for (let i = 0; i < arg.length; i++) {\n const c = arg.charCodeAt(i);\n if (i === 0 && c === 0x2d) {\n this.neg = true;\n } else {\n if (c < 0x30 || c > 0x39) {\n throw new LongIntegerError(`unexpected character in integer constant: ${arg[i]}`);\n }\n this.append(c - 0x30);\n }\n }\n } else if (arg < 0) {\n this.neg = true;\n this.append(-arg);\n } else {\n this.append(arg);\n }\n }\n\n cmp(arg: LongInteger): number {\n if (this.neg !== arg.neg) {\n return (arg.neg ? 1 : 0) - (this.neg ? 1 : 0);\n } else {\n let ret = 0;\n if (this.buf.length !== arg.buf.length) {\n ret = this.buf.length < arg.buf.length ? -1 : 1;\n } else if (this.buf.length !== 0) {\n let i = arg.buf.length - 1;\n while (i >= 0 && this.buf[i] === arg.buf[i]) {\n i--;\n }\n ret = i < 0 ? 0 : this.buf[i] < arg.buf[i] ? -1 : 1;\n }\n return !this.neg ? ret : ret === 0 ? 0 : -ret;\n }\n }\n\n get sign(): number {\n return this.buf.length === 0 ? 0 : this.neg ? -1 : 1;\n }\n}\n\nexport function parseBytes(s: string): number[] | null {\n const ret: number[] = [];\n for (let i = 0; i < s.length; i += 2) {\n const x = parseInt(s.slice(i, i + 2), 16);\n if (Number.isNaN(x)) {\n return null;\n }\n ret.push(x);\n }\n return ret;\n}\n\nexport function compareBytes(a: number[] | Uint8Array, b: number[] | Uint8Array): number {\n if (a.length !== b.length) {\n return a.length < b.length ? -1 : 1;\n } else if (a.length !== 0) {\n let i = 0;\n while (i < a.length && a[i] === b[i]) {\n i++;\n }\n return i === a.length ? 0 : a[i] < b[i] ? -1 : 1;\n } else {\n return 0;\n }\n}\n\nexport function isDecimal(x: string): boolean {\n try {\n new LongInteger(x);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isNatural(x: string): boolean {\n try {\n return new LongInteger(x).sign >= 0;\n } catch {\n return false;\n }\n}\n\nexport interface UnpackedAnnotations {\n f?: string[];\n t?: string[];\n v?: string[];\n}\n\nexport interface UnpackAnnotationsOptions {\n specialVar?: boolean; // CAR, CDR\n emptyVar?: boolean;\n specialFields?: boolean; // PAIR, LEFT, RIGHT\n emptyFields?: boolean;\n}\n\nconst annRe = /^(@%|@%%|%@|[@:%]([_0-9a-zA-Z][_0-9a-zA-Z.%@]*)?)$/;\n\nexport function unpackAnnotations(\n p: Prim | Expr[],\n opt?: UnpackAnnotationsOptions\n): UnpackedAnnotations {\n if (Array.isArray(p)) {\n return {};\n }\n\n let field: string[] | undefined;\n let type: string[] | undefined;\n let vars: string[] | undefined;\n\n if (p.annots !== undefined) {\n for (const v of p.annots) {\n if (v.length !== 0) {\n if (\n !annRe.test(v) ||\n (!opt?.specialVar && (v === '@%' || v === '@%%')) ||\n (!opt?.specialFields && v === '%@')\n ) {\n throw new MichelsonError(p, `${p.prim}: unexpected annotation: ${v}`);\n }\n\n switch (v[0]) {\n case '%':\n if (opt?.emptyFields || v.length > 1) {\n field = field || [];\n field.push(v);\n }\n break;\n case ':':\n if (v.length > 1) {\n type = type || [];\n type.push(v);\n }\n break;\n case '@':\n if (opt?.emptyVar || v.length > 1) {\n vars = vars || [];\n vars.push(v);\n }\n break;\n }\n }\n }\n }\n return { f: field, t: type, v: vars };\n}\n\nexport type TezosIDType =\n | 'BlockHash'\n | 'OperationHash'\n | 'OperationListHash'\n | 'OperationListListHash'\n | 'ProtocolHash'\n | 'ContextHash'\n | 'ED25519PublicKeyHash'\n | 'SECP256K1PublicKeyHash'\n | 'P256PublicKeyHash'\n | 'ContractHash'\n | 'CryptoboxPublicKeyHash'\n | 'ED25519Seed'\n | 'ED25519PublicKey'\n | 'SECP256K1SecretKey'\n | 'P256SecretKey'\n | 'ED25519EncryptedSeed'\n | 'SECP256K1EncryptedSecretKey'\n | 'P256EncryptedSecretKey'\n | 'SECP256K1PublicKey'\n | 'P256PublicKey'\n | 'SECP256K1Scalar'\n | 'SECP256K1Element'\n | 'ED25519SecretKey'\n | 'ED25519Signature'\n | 'SECP256K1Signature'\n | 'P256Signature'\n | 'GenericSignature'\n | 'ChainID'\n | 'RollupAddress'\n | 'TxRollupL2Address';\n\nexport type TezosIDPrefix = [number, number[]]; // payload length, prefix\n\nexport const tezosPrefix: Record<TezosIDType, TezosIDPrefix> = {\n BlockHash: [32, [1, 52]], // B(51)\n OperationHash: [32, [5, 116]], // o(51)\n OperationListHash: [32, [133, 233]], // Lo(52)\n OperationListListHash: [32, [29, 159, 109]], // LLo(53)\n ProtocolHash: [32, [2, 170]], // P(51)\n ContextHash: [32, [79, 199]], // Co(52)\n ED25519PublicKeyHash: [20, [6, 161, 159]], // tz1(36)\n SECP256K1PublicKeyHash: [20, [6, 161, 161]], // tz2(36)\n P256PublicKeyHash: [20, [6, 161, 164]], // tz3(36)\n ContractHash: [20, [2, 90, 121]], // KT1(36)\n CryptoboxPublicKeyHash: [16, [153, 103]], // id(30)\n ED25519Seed: [32, [13, 15, 58, 7]], // edsk(54)\n ED25519PublicKey: [32, [13, 15, 37, 217]], // edpk(54)\n SECP256K1SecretKey: [32, [17, 162, 224, 201]], // spsk(54)\n P256SecretKey: [32, [16, 81, 238, 189]], // p2sk(54)\n ED25519EncryptedSeed: [56, [7, 90, 60, 179, 41]], // edesk(88)\n SECP256K1EncryptedSecretKey: [56, [9, 237, 241, 174, 150]], // spesk(88)\n P256EncryptedSecretKey: [56, [9, 48, 57, 115, 171]], // p2esk(88)\n SECP256K1PublicKey: [33, [3, 254, 226, 86]], // sppk(55)\n P256PublicKey: [33, [3, 178, 139, 127]], // p2pk(55)\n SECP256K1Scalar: [33, [38, 248, 136]], // SSp(53)\n SECP256K1Element: [33, [5, 92, 0]], // GSp(54)\n ED25519SecretKey: [64, [43, 246, 78, 7]], // edsk(98)\n ED25519Signature: [64, [9, 245, 205, 134, 18]], // edsig(99)\n SECP256K1Signature: [64, [13, 115, 101, 19, 63]], // spsig1(99)\n P256Signature: [64, [54, 240, 44, 52]], // p2sig(98)\n GenericSignature: [64, [4, 130, 43]], // sig(96)\n ChainID: [4, [87, 82, 0]],\n RollupAddress: [20, [1, 128, 120, 31]],\n TxRollupL2Address: [20, [6, 161, 166]],\n};\n\nexport function checkDecodeTezosID<T extends TezosIDType[]>(\n id: string,\n ...types: T\n): [T[number], number[]] | null {\n const buf = decodeBase58Check(id);\n for (const t of types) {\n const [plen, p] = tezosPrefix[t];\n if (buf.length === plen + p.length) {\n let i = 0;\n while (i < p.length && buf[i] === p[i]) {\n i++;\n }\n if (i === p.length) {\n return [t, buf.slice(p.length)];\n }\n }\n }\n return null;\n}\n\nexport function encodeTezosID(id: TezosIDType, data: number[] | Uint8Array): string {\n const [plen, p] = tezosPrefix[id];\n if (data.length !== plen) {\n throw new TezosIdEncodeError(`Incorrect data length for ${id}: ${data.length}`);\n }\n return encodeBase58Check([...p, ...data]);\n}\n\n// reassemble comb pair for transparent comparison etc. non-recursive!\ntype PairTypeOrDataPrim<I extends 'pair' | 'Pair'> = I extends 'pair'\n ? Extract<MichelsonTypePair<MichelsonType[]>, Prim>\n : Extract<MichelsonDataPair<MichelsonData[]>, Prim>;\nexport function unpackComb<I extends 'pair' | 'Pair'>(\n id: I,\n v: I extends 'pair' ? MichelsonTypePair<MichelsonType[]> : MichelsonDataPair<MichelsonData[]>\n): PairTypeOrDataPrim<I> {\n const vv: MichelsonTypePair<MichelsonType[]> | MichelsonDataPair<MichelsonData[]> = v;\n const args = Array.isArray(vv) ? vv : vv.args;\n if (args.length === 2) {\n // it's a way to make a union of two interfaces not an interface with two independent properties of union types\n const ret =\n id === 'pair'\n ? {\n prim: 'pair',\n args,\n }\n : {\n prim: 'Pair',\n args,\n };\n return ret as PairTypeOrDataPrim<I>;\n }\n\n return {\n ...(Array.isArray(vv) ? { prim: id } : vv),\n args: [\n args[0],\n {\n prim: id,\n args: args.slice(1),\n },\n ],\n } as PairTypeOrDataPrim<I>;\n}\n\nexport function isPairType(t: MichelsonType): t is MichelsonTypePair<MichelsonType[]> {\n return Array.isArray(t) || t.prim === 'pair';\n}\n\nexport function isPairData(d: Expr): d is MichelsonDataPair<MichelsonData[]> {\n return Array.isArray(d) || ('prim' in d && d.prim === 'Pair');\n}\n\nconst rfc3339Re =\n /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])[T ]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\\.[0-9]+)?(Z|[+-]([01][0-9]|2[0-3]):([0-5][0-9]))$/;\n\nexport function parseDate(a: StringLiteral | IntLiteral): Date | null {\n if ('string' in a) {\n if (isNatural(a.string)) {\n return new Date(parseInt(a.string, 10));\n } else if (rfc3339Re.test(a.string)) {\n const x = new Date(a.string);\n if (!Number.isNaN(x.valueOf)) {\n return x;\n }\n }\n } else if (isDecimal(a.int)) {\n return new Date(parseInt(a.int, 10));\n }\n return null;\n}\n\nexport function parseHex(s: string): number[] {\n const res: number[] = [];\n for (let i = 0; i < s.length; i += 2) {\n const ss = s.slice(i, i + 2);\n const x = parseInt(ss, 16);\n if (Number.isNaN(x)) {\n throw new HexParseError(ss);\n }\n res.push(x);\n }\n return res;\n}\n\nexport function hexBytes(bytes: number[]): string {\n return bytes.map((x) => ((x >> 4) & 0xf).toString(16) + (x & 0xf).toString(16)).join('');\n}\n","import { Prim, Expr, IntLiteral, StringLiteral } from './micheline';\nimport { Tuple, NoArgs, ReqArgs, MichelsonError } from './utils';\nimport {\n MichelsonCode,\n MichelsonType,\n MichelsonData,\n MichelsonContract,\n MichelsonNoArgInstruction,\n MichelsonInstruction,\n InstructionList,\n MichelsonTypeID,\n MichelsonSimpleComparableTypeID,\n} from './michelson-types';\n\n// Michelson validator\n\nconst maxViewNameLength = 31;\n\nconst noArgInstructionIDs: Record<MichelsonNoArgInstruction['prim'], true> = {\n ABS: true,\n ADD: true,\n ADDRESS: true,\n AMOUNT: true,\n AND: true,\n APPLY: true,\n BALANCE: true,\n BLAKE2B: true,\n CAR: true,\n CDR: true,\n CHAIN_ID: true,\n CHECK_SIGNATURE: true,\n COMPARE: true,\n CONCAT: true,\n CONS: true,\n EDIV: true,\n EQ: true,\n EXEC: true,\n FAILWITH: true,\n GE: true,\n GET_AND_UPDATE: true,\n GT: true,\n HASH_KEY: true,\n IMPLICIT_ACCOUNT: true,\n INT: true,\n ISNAT: true,\n JOIN_TICKETS: true,\n KECCAK: true,\n LE: true,\n LEVEL: true,\n LSL: true,\n LSR: true,\n LT: true,\n MEM: true,\n MUL: true,\n NEG: true,\n NEQ: true,\n NEVER: true,\n NOT: true,\n NOW: true,\n OR: true,\n PACK: true,\n PAIRING_CHECK: true,\n READ_TICKET: true,\n SAPLING_VERIFY_UPDATE: true,\n SELF: true,\n SELF_ADDRESS: true,\n SENDER: true,\n SET_DELEGATE: true,\n SHA256: true,\n SHA3: true,\n SHA512: true,\n SIZE: true,\n SLICE: true,\n SOME: true,\n SOURCE: true,\n SPLIT_TICKET: true,\n SUB: true,\n SWAP: true,\n TICKET: true,\n TICKET_DEPRECATED: true,\n TOTAL_VOTING_POWER: true,\n TRANSFER_TOKENS: true,\n UNIT: true,\n VOTING_POWER: true,\n XOR: true,\n RENAME: true,\n OPEN_CHEST: true,\n SUB_MUTEZ: true,\n MIN_BLOCK_TIME: true,\n BYTES: true,\n NAT: true,\n};\n\nexport const instructionIDs: Record<MichelsonInstruction['prim'], true> = Object.assign(\n {},\n noArgInstructionIDs,\n {\n CONTRACT: true,\n CREATE_CONTRACT: true,\n DIG: true,\n DIP: true,\n DROP: true,\n DUG: true,\n DUP: true,\n EMIT: true,\n EMPTY_BIG_MAP: true,\n EMPTY_MAP: true,\n EMPTY_SET: true,\n GET: true,\n IF: true,\n IF_CONS: true,\n IF_LEFT: true,\n IF_NONE: true,\n ITER: true,\n LAMBDA: true,\n LAMBDA_REC: true,\n LEFT: true,\n LOOP: true,\n LOOP_LEFT: true,\n MAP: true,\n NIL: true,\n NONE: true,\n PAIR: true,\n PUSH: true,\n RIGHT: true,\n SAPLING_EMPTY_STATE: true,\n UNPACK: true,\n UNPAIR: true,\n UPDATE: true,\n CAST: true,\n VIEW: true,\n } as const\n);\n\nconst simpleComparableTypeIDs: Record<MichelsonSimpleComparableTypeID, true> = {\n unit: true,\n never: true,\n bool: true,\n int: true,\n nat: true,\n string: true,\n chain_id: true,\n bytes: true,\n mutez: true,\n key_hash: true,\n key: true,\n signature: true,\n timestamp: true,\n address: true,\n tx_rollup_l2_address: true,\n};\n\nconst typeIDs: Record<MichelsonTypeID, true> = Object.assign({}, simpleComparableTypeIDs, {\n or: true,\n pair: true,\n set: true,\n big_map: true,\n contract: true,\n lambda: true,\n list: true,\n map: true,\n operation: true,\n option: true,\n bls12_381_g1: true,\n bls12_381_g2: true,\n bls12_381_fr: true,\n sapling_transaction: true,\n sapling_transaction_deprecated: true,\n sapling_state: true,\n ticket: true,\n chest_key: true,\n chest: true,\n} as const);\n\nexport class MichelsonValidationError extends MichelsonError {\n /**\n * @param val Value of a node caused the error\n * @param message An error message\n */\n constructor(public val: Expr, message?: string) {\n super(val, message);\n Object.setPrototypeOf(this, MichelsonValidationError.prototype);\n }\n}\n\nfunction isPrim(ex: Expr): ex is Prim {\n return 'prim' in ex;\n}\n\nfunction isPrimOrSeq(ex: Expr): ex is Prim | Expr[] {\n return Array.isArray(ex) || 'prim' in ex;\n}\n\nfunction assertPrim(ex: Expr): ex is Prim {\n if (isPrim(ex)) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'prim expression expected');\n}\n\nfunction assertSeq(ex: Expr): ex is Expr[] {\n if (Array.isArray(ex)) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'sequence expression expected');\n}\n\nfunction assertPrimOrSeq(ex: Expr): ex is Prim | Expr[] {\n if (isPrimOrSeq(ex)) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'prim or sequence expression expected');\n}\n\nfunction assertNatural(i: IntLiteral) {\n if (i.int[0] === '-') {\n throw new MichelsonValidationError(i, 'natural number expected');\n }\n}\n\nfunction assertIntLiteral(ex: Expr): ex is IntLiteral {\n if ('int' in ex) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'int literal expected');\n}\n\nfunction assertStringLiteral(ex: Expr): ex is StringLiteral {\n if ('string' in ex) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'string literal expected');\n}\n\nfunction assertArgs<N extends number>(\n ex: Prim,\n n: N\n): ex is N extends 0 ? NoArgs<Prim<string>> : ReqArgs<Prim<string, Tuple<N, Expr>>> {\n if ((n === 0 && ex.args === undefined) || ex.args?.length === n) {\n return true;\n }\n throw new MichelsonValidationError(ex, `${n} arguments expected`);\n}\n\n/**\n * Checks if the node is a valid Michelson code (sequence of instructions).\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonInstruction(ex: Expr): ex is MichelsonCode {\n if (Array.isArray(ex)) {\n for (const n of ex) {\n if (!Array.isArray(n) && !isPrim(n)) {\n throw new MichelsonValidationError(ex, 'sequence or prim expected');\n }\n assertMichelsonInstruction(n);\n }\n return true;\n }\n\n if (assertPrim(ex)) {\n if (Object.prototype.hasOwnProperty.call(noArgInstructionIDs, ex.prim)) {\n assertArgs(ex, 0);\n return true;\n }\n\n switch (ex.prim) {\n case 'DROP':\n case 'PAIR':\n case 'UNPAIR':\n case 'DUP':\n case 'UPDATE':\n case 'GET':\n if (ex.args !== undefined && assertArgs(ex, 1)) {\n /* istanbul ignore else */\n if (assertIntLiteral(ex.args[0])) {\n assertNatural(ex.args[0]);\n }\n }\n break;\n\n case 'DIG':\n case 'DUG':\n case 'SAPLING_EMPTY_STATE':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n /* istanbul ignore else */\n if (assertIntLiteral(ex.args[0])) {\n assertNatural(ex.args[0]);\n }\n }\n break;\n\n case 'NONE':\n case 'LEFT':\n case 'RIGHT':\n case 'NIL':\n case 'CAST':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonType(ex.args[0]);\n }\n break;\n\n case 'UNPACK':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonPackableType(ex.args[0]);\n }\n break;\n\n case 'CONTRACT':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonPassableType(ex.args[0]);\n }\n break;\n\n case 'IF_NONE':\n case 'IF_LEFT':\n case 'IF_CONS':\n case 'IF':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n /* istanbul ignore else */\n if (assertSeq(ex.args[0])) {\n assertMichelsonInstruction(ex.args[0]);\n }\n /* istanbul ignore else */\n if (assertSeq(ex.args[1])) {\n assertMichelsonInstruction(ex.args[1]);\n }\n }\n break;\n\n case 'MAP':\n case 'ITER':\n case 'LOOP':\n case 'LOOP_LEFT':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonInstruction(ex.args[0]);\n }\n break;\n\n case 'CREATE_CONTRACT':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonContract(ex.args[0]);\n }\n break;\n\n case 'DIP':\n if (ex.args?.length === 2) {\n /* istanbul ignore else */\n if (assertIntLiteral(ex.args[0])) {\n assertNatural(ex.args[0]);\n }\n /* istanbul ignore else */\n if (assertSeq(ex.args[1])) {\n assertMichelsonInstruction(ex.args[1]);\n }\n } else if (ex.args?.length === 1) {\n /* istanbul ignore else */\n if (assertSeq(ex.args[0])) {\n assertMichelsonInstruction(ex.args[0]);\n }\n } else {\n throw new MichelsonValidationError(ex, '1 or 2 arguments expected');\n }\n break;\n\n case 'PUSH':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonPushableType(ex.args[0]);\n assertMichelsonData(ex.args[1]);\n }\n break;\n\n case 'EMPTY_SET':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonComparableType(ex.args[0]);\n }\n break;\n\n case 'EMPTY_MAP':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonComparableType(ex.args[0]);\n assertMichelsonType(ex.args[1]);\n }\n break;\n\n case 'EMPTY_BIG_MAP':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonComparableType(ex.args[0]);\n assertMichelsonBigMapStorableType(ex.args[1]);\n }\n break;\n\n case 'LAMBDA_REC':\n case 'LAMBDA':\n /* istanbul ignore else */\n if (assertArgs(ex, 3)) {\n assertMichelsonType(ex.args[0]);\n assertMichelsonType(ex.args[1]);\n /* istanbul ignore else */\n if (assertSeq(ex.args[2])) {\n assertMichelsonInstruction(ex.args[2]);\n }\n }\n break;\n\n case 'VIEW':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n if (assertStringLiteral(ex.args[0])) {\n assertViewNameValid(ex.args[0]);\n }\n if (assertMichelsonType(ex.args[1])) {\n assertMichelsonPushableType(ex.args[1]);\n }\n }\n break;\n\n case 'EMIT':\n if (ex.args && ex.args.length > 0) {\n assertArgs(ex, 1);\n } else {\n assertArgs(ex, 0);\n }\n break;\n\n default:\n throw new MichelsonValidationError(ex, 'instruction expected');\n }\n }\n return true;\n}\n\nexport function assertMichelsonComparableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (Array.isArray(ex) || ex.prim === 'pair' || ex.prim === 'or' || ex.prim === 'option') {\n traverseType(ex, (ex) => assertMichelsonComparableType(ex));\n } else if (!Object.prototype.hasOwnProperty.call(simpleComparableTypeIDs, ex.prim)) {\n throw new MichelsonValidationError(ex, `${ex.prim}: type is not comparable`);\n }\n }\n return true;\n}\n\nexport function assertMichelsonPackableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'big_map' ||\n ex.prim === 'operation' ||\n ex.prim === 'sapling_state' ||\n ex.prim === 'ticket'\n ) {\n throw new MichelsonValidationError(\n ex,\n `${ex.prim}: type can't be used inside PACK/UNPACK instructions`\n );\n }\n traverseType(ex, (ex) => assertMichelsonPackableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonPushableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'big_map' ||\n ex.prim === 'operation' ||\n ex.prim === 'sapling_state' ||\n ex.prim === 'ticket' ||\n ex.prim === 'contract'\n ) {\n throw new MichelsonValidationError(ex, `${ex.prim}: type can't be pushed`);\n }\n traverseType(ex, (ex) => assertMichelsonPushableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonStorableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'operation' ||\n ex.prim === 'contract'\n ) {\n throw new MichelsonValidationError(\n ex,\n `${ex.prim}: type can't be used as part of a storage`\n );\n }\n traverseType(ex, (ex) => assertMichelsonStorableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonPassableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (!Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) || ex.prim === 'operation') {\n throw new MichelsonValidationError(\n ex,\n `${ex.prim}: type can't be used as part of a parameter`\n );\n }\n traverseType(ex, (ex) => assertMichelsonPassableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonBigMapStorableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'big_map' ||\n ex.prim === 'operation' ||\n ex.prim === 'sapling_state'\n ) {\n throw new MichelsonValidationError(ex, `${ex.prim}: type can't be used inside a big_map`);\n }\n traverseType(ex, (ex) => assertMichelsonBigMapStorableType(ex));\n }\n }\n return true;\n}\n\nconst viewRe = new RegExp('^[a-zA-Z0-9_.%@]*$');\n\nexport function assertViewNameValid(name: StringLiteral): void {\n if (name.string.length > maxViewNameLength) {\n throw new MichelsonValidationError(name, `view name too long: ${name.string}`);\n }\n if (!viewRe.test(name.string)) {\n throw new MichelsonValidationError(name, `invalid character(s) in view name: ${name.string}`);\n }\n}\n\n/**\n * Checks if the node is a valid Michelson type expression.\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (!Object.prototype.hasOwnProperty.call(typeIDs, ex.prim)) {\n throw new MichelsonValidationError(ex, 'type expected');\n }\n traverseType(ex, (ex) => assertMichelsonType(ex));\n }\n }\n return true;\n}\n\nfunction traverseType(ex: Prim | Expr[], cb: (ex: Prim | Expr[]) => void): ex is MichelsonType {\n if (Array.isArray(ex) || ex.prim === 'pair') {\n const args = Array.isArray(ex) ? ex : ex.args;\n if (args === undefined || args.length < 2) {\n throw new MichelsonValidationError(ex, 'at least 2 arguments expected');\n }\n args.forEach((a) => {\n if (assertPrimOrSeq(a)) {\n cb(a);\n }\n });\n return true;\n }\n\n switch (ex.prim) {\n case 'option':\n case 'list':\n /* istanbul ignore else */\n if (assertArgs(ex, 1) && assertPrimOrSeq(ex.args[0])) {\n cb(ex.args[0]);\n }\n break;\n\n case 'contract':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonPassableType(ex.args[0]);\n }\n break;\n\n case 'or':\n /* istanbul ignore else */\n if (assertArgs(ex, 2) && assertPrimOrSeq(ex.args[0]) && assertPrimOrSeq(ex.args[1])) {\n cb(ex.args[0]);\n cb(ex.args[1]);\n }\n break;\n\n case 'lambda':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonType(ex.args[0]);\n assertMichelsonType(ex.args[1]);\n }\n break;\n\n case 'set':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonComparableType(ex.args[0]);\n }\n break;\n\n case 'map':\n /* istanbul ignore else */\n if (assertArgs(ex, 2) && assertPrimOrSeq(ex.args[0]) && assertPrimOrSeq(ex.args[1])) {\n assertMichelsonComparableType(ex.args[0]);\n cb(ex.args[1]);\n }\n break;\n\n case 'big_map':\n /* istanbul ignore else */\n if (assertArgs(ex, 2) && assertPrimOrSeq(ex.args[0]) && assertPrimOrSeq(ex.args[1])) {\n assertMichelsonComparableType(ex.args[0]);\n assertMichelsonBigMapStorableType(ex.args[1]);\n cb(ex.args[1]);\n }\n break;\n\n case 'ticket':\n /* istanbul ignore else */\n if (assertArgs(ex, 1) && assertPrimOrSeq(ex.args[0])) {\n assertMichelsonComparableType(ex.args[0]);\n }\n break;\n\n case 'sapling_state':\n case 'sapling_transaction':\n if (assertArgs(ex, 1)) {\n assertIntLiteral(ex.args[0]);\n }\n break;\n\n default:\n assertArgs(ex, 0);\n }\n\n return true;\n}\n/**\n * Checks if the node is a valid Michelson data literal such as `(Pair {Elt \"0\" 0} 0)`.\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonData(ex: Expr): ex is MichelsonData {\n if ('int' in ex || 'string' in ex || 'bytes' in ex) {\n return true;\n }\n\n if (Array.isArray(ex)) {\n let mapElts = 0;\n for (const n of ex) {\n if (isPrim(n) && n.prim === 'Elt') {\n /* istanbul ignore else */\n if (assertArgs(n, 2)) {\n assertMichelsonData(n.args[0]);\n assertMichelsonData(n.args[1]);\n }\n mapElts++;\n } else {\n assertMichelsonData(n);\n }\n }\n\n if (mapElts !== 0 && mapElts !== ex.length) {\n throw new MichelsonValidationError(ex, \"data entries and map elements can't be intermixed\");\n }\n return true;\n }\n\n if (isPrim(ex)) {\n switch (ex.prim) {\n case 'Unit':\n case 'True':\n case 'False':\n case 'None':\n assertArgs(ex, 0);\n break;\n\n case 'Pair':\n /* istanbul ignore else */\n if (ex.args === undefined || ex.args.length < 2) {\n throw new MichelsonValidationError(ex, 'at least 2 arguments expected');\n }\n for (const a of ex.args) {\n assertMichelsonData(a);\n }\n break;\n\n case 'Left':\n case 'Right':\n case 'Some':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonData(ex.args[0]);\n }\n break;\n\n case 'Lambda_rec':\n if (ex.args) {\n assertMichelsonInstruction(ex.args);\n }\n break;\n\n default:\n if (Object.prototype.hasOwnProperty.call(instructionIDs, ex.prim)) {\n assertMichelsonInstruction(ex);\n } else {\n throw new MichelsonValidationError(ex, 'data entry or instruction expected');\n }\n }\n } else {\n throw new MichelsonValidationError(ex, 'data entry expected');\n }\n\n return true;\n}\n\n/**\n * Checks if the node is a valid Michelson smart contract source containing all required and valid properties such as `parameter`, `storage` and `code`.\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonContract(ex: Expr): ex is MichelsonContract {\n /* istanbul ignore else */\n if (assertSeq(ex)) {\n const toplevelSec: { [sec: string]: boolean } = {};\n const views: { [name: string]: boolean } = {};\n for (const sec of ex) {\n if (assertPrim(sec)) {\n if (sec.prim !== 'view') {\n if (sec.prim in toplevelSec) {\n throw new MichelsonValidationError(ex, `duplicate contract section: ${sec.prim}`);\n }\n toplevelSec[sec.prim] = true;\n }\n\n /* istanbul ignore else */\n switch (sec.prim) {\n case 'code':\n if (assertArgs(sec, 1)) {\n /* istanbul ignore else */\n if (assertSeq(sec.args[0])) {\n assertMichelsonInstruction(sec.args[0]);\n }\n }\n break;\n\n case 'parameter':\n if (assertArgs(sec, 1)) {\n assertMichelsonPassableType(sec.args[0]);\n }\n if (sec.annots) {\n throw new MichelsonValidationError(\n sec,\n 'Annotation must be part of the parameter type'\n );\n }\n break;\n\n case 'storage':\n if (assertArgs(sec, 1)) {\n assertMichelsonStorableType(sec.args[0]);\n }\n break;\n\n case 'view':\n if (assertArgs(sec, 4)) {\n if (assertStringLiteral(sec.args[0])) {\n const name = sec.args[0];\n if (name.string in views) {\n throw new MichelsonValidationError(ex, `duplicate view name: ${name.string}`);\n }\n views[name.string] = true;\n assertViewNameValid(name);\n }\n\n assertMichelsonPushableType(sec.args[1]);\n assertMichelsonPushableType(sec.args[2]);\n if (assertSeq(sec.args[3])) {\n assertMichelsonInstruction(sec.args[3]);\n }\n }\n break;\n\n default:\n throw new MichelsonValidationError(ex, `unexpected contract section: ${sec.prim}`);\n }\n }\n }\n }\n return true;\n}\n\n/**\n * Checks if the node is a valid Michelson smart contract source containing all required and valid properties such as `parameter`, `storage` and `code`.\n * @param ex An AST node\n */\nexport function isMichelsonScript(ex: Expr): ex is MichelsonContract {\n try {\n assertMichelsonContract(ex);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the node is a valid Michelson data literal such as `(Pair {Elt \"0\" 0} 0)`.\n * @param ex An AST node\n */\nexport function isMichelsonData(ex: Expr): ex is MichelsonData {\n try {\n assertMichelsonData(ex);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the node is a valid Michelson code (sequence of instructions).\n * @param ex An AST node\n */\nexport function isMichelsonCode(ex: Expr): ex is InstructionList {\n try {\n assertMichelsonInstruction(ex);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the node is a valid Michelson type expression.\n * @param ex An AST node\n */\nexport function isMichelsonType(ex: Expr): ex is MichelsonType {\n try {\n assertMichelsonType(ex);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isInstruction(p: Prim): p is MichelsonInstruction {\n return Object.prototype.hasOwnProperty.call(instructionIDs, p.prim);\n}\n\nexport function assertDataListIfAny(d: MichelsonData): d is MichelsonData[] {\n if (!Array.isArray(d)) {\n return false;\n }\n for (const v of d) {\n if ('prim' in v) {\n if (isInstruction(v)) {\n throw new MichelsonError(d, `Instruction outside of a lambda: ${JSON.stringify(d)}`);\n } else if (v.prim === 'Elt') {\n throw new MichelsonError(d, `Elt item outside of a map literal: ${JSON.stringify(d)}`);\n }\n }\n }\n return true;\n}\n","import { BytesLiteral, Expr, IntLiteral, Prim } from './micheline';\nimport {\n MichelsonTypeID,\n MichelsonDataID,\n MichelsonSectionID,\n MichelsonInstructionID,\n MichelsonData,\n MichelsonType,\n MichelsonDataOr,\n MichelsonDataOption,\n MichelsonInstruction,\n} from './michelson-types';\nimport {\n assertDataListIfAny,\n assertMichelsonData,\n assertMichelsonInstruction,\n} from './michelson-validator';\nimport {\n checkDecodeTezosID,\n encodeTezosID,\n hexBytes,\n isPairData,\n isPairType,\n MichelsonTypeError,\n parseBytes,\n parseDate,\n parseHex,\n unpackComb,\n} from './utils';\n\ntype PrimID =\n | MichelsonTypeID\n | MichelsonDataID\n | MichelsonSectionID\n | MichelsonInstructionID\n | 'Elt'\n | 'constant';\n\n// The order is important!\n// The position represent the encoding value.\nconst primitives: PrimID[] = [\n 'parameter',\n 'storage',\n 'code',\n 'False',\n 'Elt',\n 'Left',\n 'None',\n 'Pair',\n 'Right',\n 'Some',\n 'True',\n 'Unit',\n 'PACK',\n 'UNPACK',\n 'BLAKE2B',\n 'SHA256',\n 'SHA512',\n 'ABS',\n 'ADD',\n 'AMOUNT',\n 'AND',\n 'BALANCE',\n 'CAR',\n 'CDR',\n 'CHECK_SIGNATURE',\n 'COMPARE',\n 'CONCAT',\n 'CONS',\n 'CREATE_ACCOUNT',\n 'CREATE_CONTRACT',\n 'IMPLICIT_ACCOUNT',\n 'DIP',\n 'DROP',\n 'DUP',\n 'EDIV',\n 'EMPTY_MAP',\n 'EMPTY_SET',\n 'EQ',\n 'EXEC',\n 'FAILWITH',\n 'GE',\n 'GET',\n 'GT',\n 'HASH_KEY',\n 'IF',\n 'IF_CONS',\n 'IF_LEFT',\n 'IF_NONE',\n 'INT',\n 'LAMBDA',\n 'LE',\n 'LEFT',\n 'LOOP',\n 'LSL',\n 'LSR',\n 'LT',\n 'MAP',\n 'MEM',\n 'MUL',\n 'NEG',\n 'NEQ',\n 'NIL',\n 'NONE',\n 'NOT',\n 'NOW',\n 'OR',\n 'PAIR',\n 'PUSH',\n 'RIGHT',\n 'SIZE',\n 'SOME',\n 'SOURCE',\n 'SENDER',\n 'SELF',\n 'STEPS_TO_QUOTA',\n 'SUB',\n 'SWAP',\n 'TRANSFER_TOKENS',\n 'SET_DELEGATE',\n 'UNIT',\n 'UPDATE',\n 'XOR',\n 'ITER',\n 'LOOP_LEFT',\n 'ADDRESS',\n 'CONTRACT',\n 'ISNAT',\n 'CAST',\n 'RENAME',\n 'bool',\n 'contract',\n 'int',\n 'key',\n 'key_hash',\n 'lambda',\n 'list',\n 'map',\n 'big_map',\n 'nat',\n 'option',\n 'or',\n 'pair',\n 'set',\n 'signature',\n 'string',\n 'bytes',\n 'mutez',\n 'timestamp',\n 'unit',\n 'operation',\n 'address',\n 'SLICE',\n 'DIG',\n 'DUG',\n 'EMPTY_BIG_MAP',\n 'APPLY',\n 'chain_id',\n 'CHAIN_ID',\n 'LEVEL',\n 'SELF_ADDRESS',\n 'never',\n 'NEVER',\n 'UNPAIR',\n 'VOTING_POWER',\n 'TOTAL_VOTING_POWER',\n 'KECCAK',\n 'SHA3',\n 'PAIRING_CHECK',\n 'bls12_381_g1',\n 'bls12_381_g2',\n 'bls12_381_fr',\n 'sapling_state',\n 'sapling_transaction_deprecated',\n 'SAPLING_EMPTY_STATE',\n 'SAPLING_VERIFY_UPDATE',\n 'ticket',\n 'TICKET_DEPRECATED',\n 'READ_TICKET',\n 'SPLIT_TICKET',\n 'JOIN_TICKETS',\n 'GET_AND_UPDATE',\n 'chest',\n 'chest_key',\n 'OPEN_CHEST',\n 'VIEW',\n 'view',\n 'constant',\n 'SUB_MUTEZ',\n 'tx_rollup_l2_address',\n 'MIN_BLOCK_TIME',\n 'sapling_transaction',\n 'EMIT',\n 'Lambda_rec',\n 'LAMBDA_REC',\n 'TICKET',\n 'BYTES',\n 'NAT',\n];\n\nconst primTags: { [key in PrimID]?: number } & { [key: string]: number | undefined } =\n Object.assign({}, ...primitives.map((v, i) => ({ [v]: i })));\n\nenum Tag {\n Int = 0,\n String = 1,\n Sequence = 2,\n Prim0 = 3,\n Prim0Annot = 4,\n Prim1 = 5,\n Prim1Annot = 6,\n Prim2 = 7,\n Prim2Annot = 8,\n Prim = 9,\n Bytes = 10,\n}\nclass Writer {\n public buffer: number[] = [];\n\n get length(): number {\n return this.buffer.length;\n }\n\n writeBytes(val: number[]) {\n this.buffer.push(...val.map((v) => v & 0xff));\n }\n\n writeUint8(val: number) {\n const v = val | 0;\n this.buffer.push(v & 0xff);\n }\n\n writeUint16(val: number) {\n const v = val | 0;\n this.buffer.push((v >> 8) & 0xff);\n this.buffer.push(v & 0xff);\n }\n\n writeUint32(val: number) {\n const v = val | 0;\n this.buffer.push((v >> 24) & 0xff);\n this.buffer.push((v >> 16) & 0xff);\n this.buffer.push((v >> 8) & 0xff);\n this.buffer.push(v & 0xff);\n }\n\n writeInt8(val: number) {\n this.writeUint8(val);\n }\n\n writeInt16(val: number) {\n this.writeUint16(val);\n }\n\n writeInt32(val: number) {\n this.writeUint32(val);\n }\n}\n\nconst boundsErr = new Error('bounds out of range');\nclass Reader {\n constructor(\n private buffer: number[] | Uint8Array,\n private idx: number = 0,\n private cap: number = buffer.length\n ) {}\n\n /** Remaining length */\n get length(): number {\n return this.cap - this.idx;\n }\n\n readBytes(len: number): number[] | Uint8Array {\n if (this.cap - this.idx < len) {\n throw boundsErr;\n }\n const ret = this.buffer.slice(this.idx, this.idx + len);\n this.idx += len;\n return ret;\n }\n\n reader(len: number): Reader {\n if (this.cap - this.idx < len) {\n throw boundsErr;\n }\n const ret = new Reader(this.buffer, this.idx, this.idx + len);\n this.idx += len;\n return ret;\n }\n\n copy(): Reader {\n return new Reader(this.buffer, this.idx, this.cap);\n }\n\n readUint8(): number {\n if (this.cap - this.idx < 1) {\n throw boundsErr;\n }\n return this.buffer[this.idx++] >>> 0;\n }\n\n readUint16(): number {\n if (this.cap - this.idx < 2) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n return ((x0 << 8) | x1) >>> 0;\n }\n\n readUint32(): number {\n if (this.cap - this.idx < 4) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n const x2 = this.buffer[this.idx++];\n const x3 = this.buffer[this.idx++];\n return ((x0 << 24) | (x1 << 16) | (x2 << 8) | x3) >>> 0;\n }\n\n readInt8(): number {\n if (this.cap - this.idx < 1) {\n throw boundsErr;\n }\n const x = this.buffer[this.idx++];\n return (x << 24) >> 24;\n }\n\n readInt16(): number {\n if (this.cap - this.idx < 2) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n return (((x0 << 8) | x1) << 16) >> 16;\n }\n\n readInt32(): number {\n if (this.cap - this.idx < 4) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n const x2 = this.buffer[this.idx++];\n const x3 = this.buffer[this.idx++];\n return (x0 << 24) | (x1 << 16) | (x2 << 8) | x3;\n }\n}\n\nenum ContractID {\n Implicit = 0,\n Originated = 1,\n}\n\nenum PublicKeyHashID {\n ED25519 = 0,\n SECP256K1 = 1,\n P256 = 2,\n}\n\ntype AddressType =\n | 'ED25519PublicKeyHash'\n | 'SECP256K1PublicKeyHash'\n | 'P256PublicKeyHash'\n | 'ContractHash';\n\nexport interface Address {\n type: AddressType;\n hash: number[] | Uint8Array;\n entryPoint?: string;\n}\n\nfunction readPublicKeyHash(rd: Reader): Address {\n let type: AddressType;\n const tag = rd.readUint8();\n switch (tag) {\n case PublicKeyHashID.ED25519:\n type = 'ED25519PublicKeyHash';\n break;\n case PublicKeyHashID.SECP256K1:\n type = 'SECP256K1PublicKeyHash';\n break;\n case PublicKeyHashID.P256:\n type = 'P256PublicKeyHash';\n break;\n default:\n throw new Error(`unknown public key hash tag: ${tag}`);\n }\n return { type, hash: rd.readBytes(20) };\n}\n\nfunction readAddress(rd: Reader): Address {\n let address: Address;\n const tag = rd.readUint8();\n switch (tag) {\n case ContractID.Implicit:\n address = readPublicKeyHash(rd);\n break;\n\n case ContractID.Originated:\n address = {\n type: 'ContractHash',\n hash: rd.readBytes(20),\n };\n rd.readBytes(1);\n break;\n\n default:\n throw new Error(`unknown address tag: ${tag}`);\n }\n\n if (rd.length !== 0) {\n // entry point\n const dec = new TextDecoder();\n address.entryPoint = dec.decode(new Uint8Array(rd.readBytes(rd.length)));\n }\n return address;\n}\n\nfunction writePublicKeyHash(a: Address, w: Writer): void {\n let tag: PublicKeyHashID;\n switch (a.type) {\n case 'ED25519PublicKeyHash':\n tag = PublicKeyHashID.ED25519;\n break;\n case 'SECP256K1PublicKeyHash':\n tag = PublicKeyHashID.SECP256K1;\n break;\n case 'P256PublicKeyHash':\n tag = PublicKeyHashID.P256;\n break;\n default:\n throw new Error(`unexpected address type: ${a.type}`);\n }\n w.writeUint8(tag);\n w.writeBytes(Array.from(a.hash));\n}\n\nfunction writeAddress(a: Address, w: Writer): void {\n if (a.type === 'ContractHash') {\n w.writeUint8(ContractID.Originated);\n w.writeBytes(Array.from(a.hash));\n w.writeUint8(0);\n } else {\n w.writeUint8(ContractID.Implicit);\n writePublicKeyHash(a, w);\n }\n\n if (a.entryPoint !== undefined && a.entryPoint !== '' && a.entryPoint !== 'default') {\n const enc = new TextEncoder();\n const bytes = enc.encode(a.entryPoint);\n w.writeBytes(Array.from(bytes));\n }\n}\n\nenum PublicKeyID {\n ED25519 = 0,\n SECP256K1 = 1,\n P256 = 2,\n}\n\nexport type PublicKeyType = 'ED25519PublicKey' | 'SECP256K1PublicKey' | 'P256PublicKey';\nexport interface PublicKey {\n type: PublicKeyType;\n publicKey: number[] | Uint8Array;\n}\n\nfunction readPublicKey(rd: Reader): PublicKey {\n let ln: number;\n let type: PublicKeyType;\n const tag = rd.readUint8();\n switch (tag) {\n case PublicKeyID.ED25519:\n type = 'ED25519PublicKey';\n ln = 32;\n break;\n case PublicKeyID.SECP256K1:\n type = 'SECP256K1PublicKey';\n ln = 33;\n break;\n case PublicKeyID.P256:\n type = 'P256PublicKey';\n ln = 33;\n break;\n default:\n throw new Error(`unknown public key tag: ${tag}`);\n }\n return { type, publicKey: rd.readBytes(ln) };\n}\n\nfunction writePublicKey(pk: PublicKey, w: Writer): void {\n let tag: PublicKeyID;\n switch (pk.type) {\n case 'ED25519PublicKey':\n tag = PublicKeyID.ED25519;\n break;\n case 'SECP256K1PublicKey':\n tag = PublicKeyID.SECP256K1;\n break;\n case 'P256PublicKey':\n tag = PublicKeyID.P256;\n break;\n default:\n throw new Error(`unexpected public key type: ${pk.type}`);\n }\n w.writeUint8(tag);\n w.writeBytes(Array.from(pk.publicKey));\n}\n\ntype WriteTransformFunc = (e: Expr) => [Expr, IterableIterator<WriteTransformFunc>];\n\nfunction writeExpr(expr: Expr, wr: Writer, tf: WriteTransformFunc): void {\n const [e, args] = tf(expr);\n\n if (Array.isArray(e)) {\n const w = new Writer();\n for (const v of e) {\n const a = args.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n writeExpr(v, w, a.value);\n }\n wr.writeUint8(Tag.Sequence);\n wr.writeUint32(w.length);\n wr.writeBytes(w.buffer);\n return;\n }\n\n if ('string' in e) {\n const enc = new TextEncoder();\n const bytes = enc.encode(e.string);\n wr.writeUint8(Tag.String);\n wr.writeUint32(bytes.length);\n wr.writeBytes(Array.from(bytes));\n return;\n }\n\n if ('int' in e) {\n wr.writeUint8(Tag.Int);\n let val = BigInt(e.int);\n const sign = val < 0;\n if (sign) {\n val = -val;\n }\n let i = 0;\n do {\n const bits = i === 0 ? BigInt(6) : BigInt(7);\n let byte = val & ((BigInt(1) << bits) - BigInt(1));\n val >>= bits;\n if (val) {\n byte |= BigInt(0x80);\n }\n if (i === 0 && sign) {\n byte |= BigInt(0x40);\n }\n wr.writeUint8(Number(byte));\n i++;\n } while (val);\n return;\n }\n\n if ('bytes' in e) {\n const bytes = parseHex(e.bytes);\n wr.writeUint8(Tag.Bytes);\n wr.writeUint32(bytes.length);\n wr.writeBytes(bytes);\n return;\n }\n\n const prim = primTags[e.prim];\n if (prim === undefined) {\n throw new TypeError(`Can't encode primary: ${e.prim}`);\n }\n\n const tag =\n (e.args?.length || 0) < 3\n ? Tag.Prim0 +\n (e.args?.length || 0) * 2 +\n (e.annots === undefined || e.annots.length === 0 ? 0 : 1)\n : Tag.Prim;\n\n wr.writeUint8(tag);\n wr.writeUint8(prim);\n\n if (e.args !== undefined) {\n if (e.args.length < 3) {\n for (const v of e.args) {\n const a = args.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n writeExpr(v, wr, a.value);\n }\n } else {\n const w = new Writer();\n for (const v of e.args) {\n const a = args.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n writeExpr(v, w, a.value);\n }\n wr.writeUint32(w.length);\n wr.writeBytes(w.buffer);\n }\n }\n\n if (e.annots !== undefined && e.annots.length !== 0) {\n const enc = new TextEncoder();\n const bytes = enc.encode(e.annots.join(' '));\n wr.writeUint32(bytes.length);\n wr.writeBytes(Array.from(bytes));\n } else if (e.args !== undefined && e.args.length >= 3) {\n wr.writeUint32(0);\n }\n}\n\ntype ReadTransformFuncs = [(e: Expr) => IterableIterator<ReadTransformFuncs>, (e: Expr) => Expr];\n\nfunction readExpr(rd: Reader, tf: ReadTransformFuncs): Expr {\n function* passThrough() {\n while (true) {\n yield readPassThrough;\n }\n }\n const [args, tr] = tf;\n const tag = rd.readUint8();\n switch (tag) {\n case Tag.Int: {\n const buf: number[] = [];\n let byte: number;\n do {\n byte = rd.readInt8();\n buf.push(byte);\n } while ((byte & 0x80) !== 0);\n let val = BigInt(0);\n let sign = false;\n for (let i = buf.length - 1; i >= 0; i--) {\n const bits = i === 0 ? BigInt(6) : BigInt(7);\n const byte = BigInt(buf[i]);\n val <<= bits;\n val |= byte & ((BigInt(1) << bits) - BigInt(1));\n if (i === 0) {\n sign = !!(byte & BigInt(0x40));\n }\n }\n if (sign) {\n val = -val;\n }\n return tr({ int: String(val) });\n }\n\n case Tag.String: {\n const length = rd.readUint32();\n const bytes = rd.readBytes(length);\n const dec = new TextDecoder();\n return tr({ string: dec.decode(new Uint8Array(bytes)) });\n }\n\n case Tag.Bytes: {\n const length = rd.readUint32();\n const bytes = rd.readBytes(length);\n const hex = hexBytes(Array.from(bytes));\n return tr({ bytes: hex });\n }\n\n case Tag.Sequence: {\n const length = rd.readUint32();\n let res: Expr[] = [];\n let savedrd = rd.copy();\n // make two passes\n let it: IterableIterator<ReadTransformFuncs> = passThrough();\n for (let n = 0; n < 2; n++) {\n const r = savedrd.reader(length);\n res = [];\n while (r.length > 0) {\n const a = it.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n res.push(readExpr(r, a.value));\n }\n // make a second pass with injected side effects\n it = args(res);\n savedrd = rd;\n }\n return tr(res);\n }\n\n default: {\n if (tag > 9) {\n throw new Error(`Unknown tag: ${tag}`);\n }\n const p = rd.readUint8();\n if (p >= primitives.length) {\n throw new Error(`Unknown primitive tag: ${p}`);\n }\n const prim = primitives[p];\n const argn = (tag - 3) >> 1;\n let res: Prim = { prim };\n // make two passes\n let it: IterableIterator<ReadTransformFuncs> = passThrough();\n let savedrd = rd.copy();\n for (let n = 0; n < 2; n++) {\n res = { prim };\n if (argn < 3) {\n for (let i = 0; i < argn; i++) {\n const a = it.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n res.args = res.args || [];\n res.args.push(readExpr(savedrd, a.value));\n }\n } else {\n res.args = res.args || [];\n const length = savedrd.readUint32();\n const r = savedrd.reader(length);\n while (r.length > 0) {\n const a = it.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n res.args.push(readExpr(r, a.value));\n }\n }\n // make a second pass with injected side effects\n it = args(res);\n savedrd = rd;\n }\n\n if (((tag - 3) & 1) === 1 || argn === 3) {\n // read annotations\n const length = rd.readUint32();\n if (length !== 0) {\n const bytes = rd.readBytes(length);\n const dec = new TextDecoder();\n res.annots = dec.decode(new Uint8Array(bytes)).split(' ');\n }\n }\n return tr(res);\n }\n }\n}\n\nconst isOrData = (e: Expr): e is MichelsonDataOr =>\n 'prim' in e && (e.prim === 'Left' || e.prim === 'Right');\nconst isOptionData = (e: Expr): e is MichelsonDataOption =>\n 'prim' in e && (e.prim === 'Some' || e.prim === 'None');\n\nconst getWriteTransformFunc = (t: MichelsonType): WriteTransformFunc => {\n if (isPairType(t)) {\n return (d: Expr) => {\n if (!isPairData(d)) {\n throw new MichelsonTypeError(t, d, `pair expected: ${JSON.stringify(d)}`);\n }\n assertDataListIfAny(d);\n // combs aren't used in pack format\n const tc = unpackComb('pair', t);\n const dc = unpackComb('Pair', d);\n return [\n dc,\n (function* () {\n for (const a of tc.args) {\n yield getWriteTransformFunc(a);\n }\n })(),\n ];\n };\n }\n\n switch (t.prim) {\n case 'or':\n return (d: Expr) => {\n if (!isOrData(d)) {\n throw new MichelsonTypeError(t, d, `or expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* () {\n yield getWriteTransformFunc(t.args[d.prim === 'Left' ? 0 : 1]);\n })(),\n ];\n };\n\n case 'option':\n return (d: Expr) => {\n if (!isOptionData(d)) {\n throw new MichelsonTypeError(t, d, `option expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* () {\n const dd = d;\n if (dd.prim === 'Some') {\n yield getWriteTransformFunc(t.args[0]);\n }\n })(),\n ];\n };\n\n case 'list':\n case 'set':\n return (d: Expr) => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* () {\n for (const _v of d) {\n yield getWriteTransformFunc(t.args[0]);\n }\n })(),\n ];\n };\n\n case 'map':\n return (d: Expr) => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `map expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* (): Generator<WriteTransformFunc> {\n for (const _elt of d) {\n yield (elt: Expr) => {\n if (!('prim' in elt) || elt.prim !== 'Elt') {\n throw new MichelsonTypeError(\n t,\n elt,\n `map element expected: ${JSON.stringify(elt)}`\n );\n }\n return [\n elt,\n (function* () {\n for (const a of t.args) {\n yield getWriteTransformFunc(a);\n }\n })(),\n ];\n };\n }\n })(),\n ];\n };\n\n case 'chain_id':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `chain id expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const id = checkDecodeTezosID(d.string, 'ChainID');\n if (id === null) {\n throw new MichelsonTypeError(t, d, `chain id base58 expected: ${d.string}`);\n }\n bytes = { bytes: hexBytes(id[1]) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'signature':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `signature expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const sig = checkDecodeTezosID(\n d.string,\n 'ED25519Signature',\n 'SECP256K1Signature',\n 'P256Signature',\n 'GenericSignature'\n );\n if (sig === null) {\n throw new MichelsonTypeError(t, d, `signature base58 expected: ${d.string}`);\n }\n bytes = { bytes: hexBytes(sig[1]) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'key_hash':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `key hash expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const pkh = checkDecodeTezosID(\n d.string,\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash'\n );\n if (pkh === null) {\n throw new MichelsonTypeError(t, d, `key hash base58 expected: ${d.string}`);\n }\n const w = new Writer();\n writePublicKeyHash({ type: pkh[0], hash: pkh[1] }, w);\n bytes = { bytes: hexBytes(w.buffer) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'key':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `public key expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const key = checkDecodeTezosID(\n d.string,\n 'ED25519PublicKey',\n 'SECP256K1PublicKey',\n 'P256PublicKey'\n );\n if (key === null) {\n throw new MichelsonTypeError(t, d, `public key base58 expected: ${d.string}`);\n }\n const w = new Writer();\n writePublicKey({ type: key[0], publicKey: key[1] }, w);\n bytes = { bytes: hexBytes(w.buffer) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'address':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const s = d.string.split('%');\n const address = checkDecodeTezosID(\n s[0],\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash',\n 'ContractHash'\n );\n if (address === null) {\n throw new MichelsonTypeError(t, d, `address base58 expected: ${d.string}`);\n }\n const w = new Writer();\n writeAddress(\n { type: address[0], hash: address[1], entryPoint: s.length > 1 ? s[1] : undefined },\n w\n );\n bytes = { bytes: hexBytes(w.buffer) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'timestamp':\n return (d: Expr) => {\n if (!('string' in d) && !('int' in d)) {\n throw new MichelsonTypeError(t, d, `timestamp expected: ${JSON.stringify(d)}`);\n }\n let int: IntLiteral;\n if ('string' in d) {\n const p = parseDate(d);\n if (p === null) {\n throw new MichelsonTypeError(t, d, `can't parse date: ${d.string}`);\n }\n int = { int: String(Math.floor(p.getTime() / 1000)) };\n } else {\n int = d;\n }\n return [int, [][Symbol.iterator]()];\n };\n\n default:\n return writePassThrough;\n }\n};\n\ntype PushInstruction = MichelsonInstruction & Prim<'PUSH'>;\nconst isPushInstruction = (e: Expr): e is PushInstruction => 'prim' in e && e.prim === 'PUSH';\n\nconst writePassThrough: WriteTransformFunc = (e: Expr) => {\n if (isPushInstruction(e)) {\n assertMichelsonInstruction(e);\n // capture inlined type definition\n return [\n e,\n (function* () {\n yield writePassThrough;\n yield getWriteTransformFunc(e.args[0]);\n })(),\n ];\n }\n\n return [\n e,\n (function* () {\n while (true) {\n yield writePassThrough;\n }\n })(),\n ];\n};\n\n/**\n * Serializes any value of packable type to its optimized binary representation\n * identical to the one used by PACK and UNPACK Michelson instructions.\n * Without a type definition (not recommended) the data will be encoded as a binary form of a generic Michelson expression.\n * Type definition allows some types like `timestamp` and `address` and other base58 representable types to be encoded to\n * corresponding optimized binary forms borrowed from the Tezos protocol\n *\n * ```typescript\n * const data: MichelsonData = {\n * string: \"KT1RvkwF4F7pz1gCoxkyZrG1RkrxQy3gmFTv%foo\"\n * };\n *\n * const typ: MichelsonType = {\n * prim: \"address\"\n * };\n *\n * const packed = packData(data, typ);\n *\n * // 050a0000001901be41ee922ddd2cf33201e49d32da0afec571dce300666f6f\n * ```\n *\n * Without a type definition the base58 encoded address will be treated as a string\n * ```typescript\n * const data: MichelsonData = {\n * string: \"KT1RvkwF4F7pz1gCoxkyZrG1RkrxQy3gmFTv%foo\"\n * };\n *\n * const packed = packData(data);\n *\n * // 0501000000284b543152766b7746344637707a3167436f786b795a724731526b7278517933676d46547625666f6f\n * ```\n * @param d Data object\n * @param t Optional type definition\n * @returns Binary representation as numeric array\n */\nexport function packData(d: MichelsonData, t?: MichelsonType): number[] {\n const w = new Writer();\n w.writeUint8(5);\n writeExpr(d, w, t !== undefined ? getWriteTransformFunc(t) : writePassThrough);\n return w.buffer;\n}\n\n/**\n * Serializes any value of packable type to its optimized binary representation\n * identical to the one used by PACK and UNPACK Michelson instructions.\n * Same as {@link packData} but returns a `bytes` Michelson data literal instead of an array\n *\n * ```typescript\n * const data: MichelsonData = {\n * string: \"2019-09-26T10:59:51Z\"\n * };\n *\n * const typ: MichelsonType = {\n * prim: \"timestamp\"\n * };\n *\n * const packed = packDataBytes(data, typ);\n *\n * // { bytes: \"0500a7e8e4d80b\" }\n * ```\n * @param d Data object\n * @param t Optional type definition\n * @returns Binary representation as a bytes literal\n */\nexport function packDataBytes(d: MichelsonData, t?: MichelsonType): BytesLiteral {\n return { bytes: hexBytes(packData(d, t)) };\n}\n\nconst getReadTransformFuncs = (t: MichelsonType): ReadTransformFuncs => {\n if (isPairType(t)) {\n return [\n (d: Expr) => {\n if (!isPairData(d)) {\n throw new MichelsonTypeError(t, d, `pair expected: ${JSON.stringify(d)}`);\n }\n const tc = unpackComb('pair', t);\n return (function* () {\n for (const a of tc.args) {\n yield getReadTransformFuncs(a);\n }\n })();\n },\n (d: Expr) => d,\n ];\n }\n\n switch (t.prim) {\n case 'or':\n return [\n (d: Expr) => {\n if (!isOrData(d)) {\n throw new MichelsonTypeError(t, d, `or expected: ${JSON.stringify(d)}`);\n }\n return (function* () {\n yield getReadTransformFuncs(t.args[d.prim === 'Left' ? 0 : 1]);\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'option':\n return [\n (d: Expr) => {\n if (!isOptionData(d)) {\n throw new MichelsonTypeError(t, d, `option expected: ${JSON.stringify(d)}`);\n }\n return (function* () {\n if (d.prim === 'Some') {\n yield getReadTransformFuncs(t.args[0]);\n }\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'list':\n case 'set':\n return [\n (d: Expr) => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n }\n return (function* () {\n while (true) {\n yield getReadTransformFuncs(t.args[0]);\n }\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'map':\n return [\n (d: Expr): IterableIterator<ReadTransformFuncs> => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `map expected: ${JSON.stringify(d)}`);\n }\n return (function* (): Generator<ReadTransformFuncs> {\n while (true) {\n yield [\n (elt: Expr) => {\n if (!('prim' in elt) || elt.prim !== 'Elt') {\n throw new MichelsonTypeError(\n t,\n elt,\n `map element expected: ${JSON.stringify(elt)}`\n );\n }\n return (function* () {\n for (const a of t.args) {\n yield getReadTransformFuncs(a);\n }\n })();\n },\n (elt: Expr) => elt,\n ];\n }\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'chain_id':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `chain id expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n return { string: encodeTezosID('ChainID', bytes) };\n },\n ];\n\n case 'signature':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `signature expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n return { string: encodeTezosID('GenericSignature', bytes) };\n },\n ];\n\n case 'key_hash':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `key hash expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n const addr = readPublicKeyHash(rd);\n return {\n string:\n encodeTezosID(addr.type, addr.hash) + (addr.entryPoint ? '%' + addr.entryPoint : ''),\n };\n },\n ];\n\n case 'key':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `public key expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n const pk = readPublicKey(rd);\n return { string: encodeTezosID(pk.type, pk.publicKey) };\n },\n ];\n\n case 'address':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n const addr = readAddress(rd);\n return {\n string:\n encodeTezosID(addr.type, addr.hash) + (addr.entryPoint ? '%' + addr.entryPoint : ''),\n };\n },\n ];\n\n case 'timestamp':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('int' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const date = new Date(parseInt(d.int, 10) * 1000);\n return { string: date.toISOString().slice(0, 19) + 'Z' };\n },\n ];\n\n default:\n return readPassThrough;\n }\n};\n\nconst readPassThrough: ReadTransformFuncs = [\n (e: Expr) => {\n if (isPushInstruction(e)) {\n assertMichelsonInstruction(e);\n // capture inlined type definition\n return (function* () {\n yield readPassThrough;\n yield getReadTransformFuncs(e.args[0]);\n })();\n }\n\n return (function* () {\n while (true) {\n yield readPassThrough;\n }\n })();\n },\n (e: Expr) => e,\n];\n\n/**\n * Deserialize a byte array into the corresponding Michelson value.\n * Without a type definition (not recommended) the binary data will be treated as a binary form of a generic Michelson expression and returned as is.\n * Type definition allows some types like `timestamp` and `address` and other types usually encoded in optimized binary forms to be transformed\n * back to their string representations like base58 and ISO timestamps.\n *\n * ```typescript\n * const src = [0x05, 0x00, 0xa7, 0xe8, 0xe4, 0xd8, 0x0b];\n *\n * const typ: MichelsonType = {\n * prim: \"timestamp\"\n * };\n *\n * const data = unpackData(src, typ);\n *\n * // { string: \"2019-09-26T10:59:51Z\" }\n * ```\n *\n * Same binary data without a type definition\n * ```typescript\n * const src = [0x05, 0x00, 0xa7, 0xe8, 0xe4, 0xd8, 0x0b];\n *\n * const data = unpackData(src);\n *\n * // { int: \"1569495591\" }\n * ```\n * @param src Byte array\n * @param t Optional type definition\n * @returns Deserialized data\n */\nexport function unpackData(src: number[] | Uint8Array, t?: MichelsonType): MichelsonData {\n const r = new Reader(src);\n if (r.readUint8() !== 5) {\n throw new Error('incorrect packed data magic number');\n }\n const ex = readExpr(r, t !== undefined ? getReadTransformFuncs(t) : readPassThrough);\n if (assertMichelsonData(ex)) {\n return ex;\n }\n throw new Error(); // never\n}\n\n/**\n * Deserialize a byte array into the corresponding Michelson value.\n * Same as {@link unpackData} but takes a `bytes` Michelson data literal instead of an array\n *\n * ```typescript\n * const src = { bytes: \"0500a7e8e4d80b\" };\n *\n * const typ: MichelsonType = {\n * prim: \"timestamp\"\n * };\n *\n * const data = unpackDataBytes(src, typ);\n *\n * // { string: \"2019-09-26T10:59:51Z\" }\n * ```\n * @param src Bytes object\n * @param t Optional type definition\n * @returns Deserialized data\n */\nexport function unpackDataBytes(src: BytesLiteral, t?: MichelsonType): MichelsonData {\n const bytes = parseBytes(src.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${src.bytes}\"`);\n }\n return unpackData(bytes, t);\n}\n\n// helper functions also used by validator\n\nexport function decodeAddressBytes(b: BytesLiteral): Address {\n const bytes = parseBytes(b.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${b.bytes}\"`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n return readAddress(rd);\n}\n\nexport function decodePublicKeyHashBytes(b: BytesLiteral): Address {\n const bytes = parseBytes(b.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${b.bytes}\"`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n return readPublicKeyHash(rd);\n}\n\nexport function decodePublicKeyBytes(b: BytesLiteral): PublicKey {\n const bytes = parseBytes(b.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${b.bytes}\"`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n return readPublicKey(rd);\n}\n","import { Prim, Expr } from './micheline';\nimport {\n MichelsonType,\n MichelsonData,\n MichelsonCode,\n MichelsonTypeOption,\n MichelsonContract,\n MichelsonContractSection,\n MichelsonReturnType,\n MichelsonTypePair,\n MichelsonInstruction,\n InstructionList,\n MichelsonTypeID,\n MichelsonTypeOr,\n DefaultProtocol,\n Protocol,\n refContract,\n MichelsonTypeAddress,\n MichelsonContractView,\n ProtoInferiorTo,\n} from './michelson-types';\nimport {\n unpackAnnotations,\n MichelsonError,\n isNatural,\n LongInteger,\n parseBytes,\n compareBytes,\n isDecimal,\n checkDecodeTezosID,\n UnpackedAnnotations,\n Nullable,\n UnpackAnnotationsOptions,\n unpackComb,\n MichelsonTypeError,\n isPairType,\n isPairData,\n parseDate,\n} from './utils';\nimport { decodeBase58Check } from './base58';\nimport { decodeAddressBytes, decodePublicKeyBytes, decodePublicKeyHashBytes } from './binary';\nimport {\n assertMichelsonComparableType,\n assertMichelsonPackableType,\n assertMichelsonStorableType,\n assertMichelsonBigMapStorableType,\n assertMichelsonPushableType,\n isInstruction,\n assertDataListIfAny,\n} from './michelson-validator';\nimport { ParserOptions } from './micheline-parser';\n\nexport interface Context extends ParserOptions {\n contract?: MichelsonContract;\n traceCallback?: (t: InstructionTrace) => void;\n}\n\nexport class MichelsonInstructionError extends MichelsonError<MichelsonCode> {\n /**\n * @param val Value of a type node caused the error\n * @param stackState Current stack state\n * @param message An error message\n */\n constructor(val: MichelsonCode, public stackState: MichelsonReturnType, message?: string) {\n super(val, message);\n Object.setPrototypeOf(this, MichelsonInstructionError.prototype);\n }\n}\n\n// 'sequence as a pair' edo syntax helpers\nfunction typeID(t: MichelsonType): MichelsonTypeID {\n return Array.isArray(t) ? 'pair' : t.prim;\n}\n\ntype TypeArgs<T extends MichelsonType> = T extends Prim ? T['args'] : T;\nfunction typeArgs<T extends MichelsonType>(t: T): TypeArgs<T> {\n return ('prim' in t ? (t as Extract<MichelsonType, Prim>).args : t) as TypeArgs<T>;\n}\n\nfunction assertScalarTypesEqual(a: MichelsonType, b: MichelsonType, field = false): void {\n if (typeID(a) !== typeID(b)) {\n throw new MichelsonTypeError(a, undefined, `types mismatch: ${typeID(a)} != ${typeID(b)}`);\n }\n\n const ann = [unpackAnnotations(a), unpackAnnotations(b)];\n if (ann[0].t && ann[1].t && ann[0].t[0] !== ann[1].t[0]) {\n throw new MichelsonTypeError(\n a,\n undefined,\n `${typeID(a)}: type names mismatch: ${ann[0].t[0]} != ${ann[1].t[0]}`\n );\n }\n if (field && ann[0].f && ann[1].f && ann[0].f[0] !== ann[1].f[0]) {\n throw new MichelsonTypeError(\n a,\n undefined,\n `${typeID(a)}: field names mismatch: ${ann[0].f[0]} != ${ann[1].f}`\n );\n }\n\n if (isPairType(a)) {\n const aArgs = unpackComb('pair', a);\n const bArgs = unpackComb('pair', b as typeof a);\n assertScalarTypesEqual(aArgs.args[0], bArgs.args[0], true);\n assertScalarTypesEqual(aArgs.args[1], bArgs.args[1], true);\n return;\n }\n\n switch (a.prim) {\n case 'option':\n case 'list':\n case 'contract':\n case 'set':\n case 'ticket':\n assertScalarTypesEqual(a.args[0], (b as typeof a).args[0]);\n break;\n\n case 'or':\n assertScalarTypesEqual(a.args[0], (b as typeof a).args[0], true);\n assertScalarTypesEqual(a.args[1], (b as typeof a).args[1], true);\n break;\n\n case 'lambda':\n case 'map':\n case 'big_map':\n assertScalarTypesEqual(a.args[0], (b as typeof a).args[0]);\n assertScalarTypesEqual(a.args[1], (b as typeof a).args[1]);\n break;\n\n case 'sapling_state':\n case 'sapling_transaction':\n if (parseInt(a.args[0].int, 10) !== parseInt((b as typeof a).args[0].int, 10)) {\n throw new MichelsonTypeError(\n a,\n undefined,\n `${typeID(a)}: type argument mismatch: ${a.args[0].int} != ${(b as typeof a).args[0].int}`\n );\n }\n }\n}\n\nfunction assertStacksEqual<T1 extends MichelsonType[], T2 extends T1>(a: T1, b: T2): void {\n if (a.length !== b.length) {\n throw new MichelsonTypeError(a, undefined, `stack length mismatch: ${a.length} != ${b.length}`);\n }\n for (let i = 0; i < a.length; i++) {\n assertScalarTypesEqual(a[i], b[i]);\n }\n}\n\nexport function assertTypeAnnotationsValid(t: MichelsonType, field = false): void {\n if (!Array.isArray(t)) {\n const ann = unpackAnnotations(t);\n if ((ann.t?.length || 0) > 1) {\n throw new MichelsonTypeError(\n t,\n undefined,\n `${t.prim}: at most one type annotation allowed: ${t.annots}`\n );\n }\n\n if (field) {\n if ((ann.f?.length || 0) > 1) {\n throw new MichelsonTypeError(\n t,\n undefined,\n `${t.prim}: at most one field annotation allowed: ${t.annots}`\n );\n }\n } else {\n if ((ann.f?.length || 0) > 0) {\n throw new MichelsonTypeError(\n t,\n undefined,\n `${t.prim}: field annotations aren't allowed: ${t.annots}`\n );\n }\n }\n }\n\n if (isPairType(t)) {\n const args = typeArgs(t);\n for (const a of args) {\n assertTypeAnnotationsValid(a, true);\n }\n return;\n }\n\n switch (t.prim) {\n case 'option':\n case 'list':\n case 'contract':\n case 'set':\n assertTypeAnnotationsValid(t.args[0]);\n break;\n\n case 'or':\n for (const a of t.args) {\n assertTypeAnnotationsValid(a, true);\n }\n break;\n\n case 'lambda':\n case 'map':\n case 'big_map':\n assertTypeAnnotationsValid(t.args[0]);\n assertTypeAnnotationsValid(t.args[1]);\n }\n}\n\n// Data integrity check\n\nfunction _compareMichelsonData(t: MichelsonType, a: MichelsonData, b: MichelsonData): number {\n if (isPairType(t)) {\n if (isPairData(a) && isPairData(b)) {\n assertDataListIfAny(a);\n assertDataListIfAny(b);\n const tComb = unpackComb('pair', t);\n const aComb = unpackComb('Pair', a);\n const bComb = unpackComb('Pair', b);\n const x = _compareMichelsonData(tComb.args[0], aComb.args[0], bComb.args[0]);\n if (x !== 0) {\n return x;\n }\n return _compareMichelsonData(tComb.args[0], aComb.args[1], bComb.args[1]);\n }\n } else {\n switch (t.prim) {\n case 'int':\n case 'nat':\n case 'mutez':\n if ('int' in a && 'int' in b) {\n return new LongInteger(a.int).cmp(new LongInteger(b.int));\n }\n break;\n\n case 'string':\n if ('string' in a && 'string' in b) {\n const x = a.string.localeCompare(b.string);\n return x < 0 ? -1 : x > 0 ? 1 : 0;\n }\n break;\n\n case 'bytes':\n if ('bytes' in a && 'bytes' in b) {\n const aa = parseBytes(a.bytes);\n const bb = parseBytes(b.bytes);\n if (aa !== null && bb !== null) {\n return compareBytes(aa, bb);\n }\n }\n break;\n\n case 'bool':\n if (\n 'prim' in a &&\n 'prim' in b &&\n (a.prim === 'True' || a.prim === 'False') &&\n (b.prim === 'True' || b.prim === 'False')\n ) {\n return a.prim === b.prim ? 0 : a.prim === 'False' ? -1 : 1;\n }\n break;\n\n case 'key':\n case 'key_hash':\n case 'address':\n case 'signature':\n case 'chain_id':\n if (('string' in a || 'bytes' in a) && ('string' in b || 'bytes' in b)) {\n return compareBytes(\n 'string' in a ? decodeBase58Check(a.string) : parseBytes(a.bytes) || [],\n 'string' in b ? decodeBase58Check(b.string) : parseBytes(b.bytes) || []\n );\n }\n break;\n\n case 'timestamp':\n if (('string' in a || 'int' in a) && ('string' in b || 'int' in b)) {\n const aa = parseDate(a);\n const bb = parseDate(b);\n if (aa !== null && bb !== null) {\n const x = aa.valueOf() - bb.valueOf();\n return x < 0 ? -1 : x > 0 ? 1 : 0;\n }\n }\n break;\n\n case 'unit':\n if ('prim' in a && 'prim' in b && a.prim === 'Unit' && b.prim === 'Unit') {\n return 0;\n }\n }\n }\n\n // Unlikely, types are expected to be verified before the function call\n throw new MichelsonTypeError(\n t,\n undefined,\n `${typeID(t)}: not comparable values: ${JSON.stringify(a)}, ${JSON.stringify(b)}`\n );\n}\n\n// Simplified version of assertMichelsonInstruction() for previously validated data\nfunction isFunction(d: MichelsonData): d is InstructionList {\n if (!Array.isArray(d)) {\n return false;\n }\n for (const v of d) {\n if (!((Array.isArray(v) && isFunction(v)) || ('prim' in v && isInstruction(v)))) {\n return false;\n }\n }\n return true;\n}\n\nfunction assertDataValidInternal(d: MichelsonData, t: MichelsonType, ctx: Context | null): void {\n if (isPairType(t)) {\n if (isPairData(d)) {\n assertDataListIfAny(d);\n const dc = unpackComb('Pair', d);\n const tc = unpackComb('pair', t);\n assertDataValidInternal(dc.args[0], tc.args[0], ctx);\n assertDataValidInternal(dc.args[1], tc.args[1], ctx);\n return;\n }\n throw new MichelsonTypeError(t, d, `pair expected: ${JSON.stringify(d)}`);\n }\n\n switch (t.prim) {\n // Atomic literals\n case 'int':\n if ('int' in d && isDecimal(d.int)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `integer value expected: ${JSON.stringify(d)}`);\n\n case 'nat':\n case 'mutez':\n if ('int' in d && isNatural(d.int)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `natural value expected: ${JSON.stringify(d)}`);\n\n case 'string':\n if ('string' in d) {\n return;\n }\n throw new MichelsonTypeError(t, d, `string value expected: ${JSON.stringify(d)}`);\n\n case 'bytes':\n case 'bls12_381_g1':\n case 'bls12_381_g2':\n if ('bytes' in d && parseBytes(d.bytes) !== null) {\n return;\n }\n throw new MichelsonTypeError(t, d, `bytes value expected: ${JSON.stringify(d)}`);\n\n case 'bool':\n if ('prim' in d && (d.prim === 'True' || d.prim === 'False')) {\n return;\n }\n throw new MichelsonTypeError(t, d, `boolean value expected: ${JSON.stringify(d)}`);\n\n case 'key_hash':\n if (\n 'string' in d &&\n checkDecodeTezosID(\n d.string,\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash'\n ) !== null\n ) {\n return;\n } else if ('bytes' in d) {\n try {\n decodePublicKeyHashBytes(d);\n return;\n } catch (err) {\n // ignore message\n }\n }\n throw new MichelsonTypeError(t, d, `key hash expected: ${JSON.stringify(d)}`);\n\n case 'timestamp':\n if (('string' in d || 'int' in d) && parseDate(d) !== null) {\n return;\n }\n throw new MichelsonTypeError(t, d, `timestamp expected: ${JSON.stringify(d)}`);\n\n case 'address':\n if ('string' in d) {\n let address = d.string;\n const ep = d.string.indexOf('%');\n if (ep >= 0) {\n // trim entry point\n address = d.string.slice(0, ep);\n }\n if (\n checkDecodeTezosID(\n address,\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash',\n 'ContractHash',\n 'TxRollupL2Address',\n 'RollupAddress'\n ) !== null\n ) {\n return;\n }\n } else if ('bytes' in d) {\n try {\n decodeAddressBytes(d);\n return;\n } catch (err) {\n // ignore message\n }\n }\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n\n case 'key':\n if (\n 'string' in d &&\n checkDecodeTezosID(d.string, 'ED25519PublicKey', 'SECP256K1PublicKey', 'P256PublicKey') !==\n null\n ) {\n return;\n } else if ('bytes' in d) {\n try {\n decodePublicKeyBytes(d);\n return;\n } catch (err) {\n // ignore message\n }\n }\n throw new MichelsonTypeError(t, d, `public key expected: ${JSON.stringify(d)}`);\n\n case 'unit':\n if ('prim' in d && d.prim === 'Unit') {\n return;\n }\n throw new MichelsonTypeError(t, d, `unit value expected: ${JSON.stringify(d)}`);\n\n case 'signature':\n if (\n 'bytes' in d ||\n ('string' in d &&\n checkDecodeTezosID(\n d.string,\n 'ED25519Signature',\n 'SECP256K1Signature',\n 'P256Signature',\n 'GenericSignature'\n ) !== null)\n ) {\n return;\n }\n throw new MichelsonTypeError(t, d, `signature expected: ${JSON.stringify(d)}`);\n\n case 'chain_id':\n if ('bytes' in d || 'string' in d) {\n const x = 'string' in d ? decodeBase58Check(d.string) : parseBytes(d.bytes);\n if (x !== null) {\n return;\n }\n }\n throw new MichelsonTypeError(t, d, `chain id expected: ${JSON.stringify(d)}`);\n\n // Complex types\n case 'option':\n if ('prim' in d) {\n if (d.prim === 'None') {\n return;\n } else if (d.prim === 'Some') {\n assertDataValidInternal(d.args[0], t.args[0], ctx);\n return;\n }\n }\n throw new MichelsonTypeError(t, d, `option expected: ${JSON.stringify(d)}`);\n\n case 'list':\n case 'set':\n if (assertDataListIfAny(d)) {\n //let prev: MichelsonData | undefined;\n for (const v of d) {\n assertDataValidInternal(v, t.args[0], ctx);\n }\n return;\n }\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n\n case 'or':\n if ('prim' in d) {\n if (d.prim === 'Left') {\n assertDataValidInternal(d.args[0], t.args[0], ctx);\n return;\n } else if (d.prim === 'Right') {\n assertDataValidInternal(d.args[0], t.args[1], ctx);\n return;\n }\n }\n throw new MichelsonTypeError(t, d, `union (or) expected: ${JSON.stringify(d)}`);\n case 'lambda':\n if (isFunction(d)) {\n const ret = functionTypeInternal(d, [t.args[0]], ctx);\n if ('failed' in ret) {\n throw new MichelsonTypeError(t, d, `function is failed with error type: ${ret.failed}`);\n }\n if (ret.length !== 1) {\n throw new MichelsonTypeError(t, d, 'function must return a value');\n }\n assertScalarTypesEqual(t.args[1], ret[0]);\n return;\n }\n throw new MichelsonTypeError(t, d, `function expected: ${JSON.stringify(d)}`);\n\n case 'map':\n case 'big_map':\n if (Array.isArray(d)) {\n //let prev: MichelsonMapElt | undefined;\n for (const v of d) {\n if (!('prim' in v) || v.prim !== 'Elt') {\n throw new MichelsonTypeError(t, d, `map elements expected: ${JSON.stringify(d)}`);\n }\n assertDataValidInternal(v.args[0], t.args[0], ctx);\n assertDataValidInternal(v.args[1], t.args[1], ctx);\n }\n return;\n }\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n\n case 'bls12_381_fr':\n if (('int' in d && isDecimal(d.int)) || ('bytes' in d && parseBytes(d.bytes) !== null)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `BLS12-381 element expected: ${JSON.stringify(d)}`);\n\n case 'sapling_state':\n if (Array.isArray(d)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `sapling state expected: ${JSON.stringify(d)}`);\n\n case 'ticket':\n assertDataValidInternal(\n d,\n {\n prim: 'pair',\n args: [{ prim: 'address' }, t.args[0], { prim: 'nat' }],\n },\n ctx\n );\n return;\n\n default:\n throw new MichelsonTypeError(\n t,\n d,\n `type ${typeID(t)} don't have Michelson literal representation`\n );\n }\n}\n\n// Code validation\n\ntype StackType<T extends (MichelsonTypeID[] | null)[]> = {\n [N in keyof T]: T[N] extends MichelsonTypeID[] ? MichelsonType<T[N][number]> : MichelsonType;\n};\n\nexport interface InstructionTrace {\n op: MichelsonCode;\n in: MichelsonType[];\n out: MichelsonReturnType;\n}\n\nfunction instructionListType(\n inst: InstructionList,\n stack: MichelsonType[],\n ctx: Context | null\n): MichelsonReturnType {\n let ret: MichelsonReturnType = stack;\n let s = stack;\n let i = 0;\n for (const op of inst) {\n const ft = functionTypeInternal(op, s, ctx);\n ret = ft;\n if ('failed' in ft) {\n break;\n }\n s = ft;\n i++;\n }\n\n if (\n 'failed' in ret &&\n ret.level == 0 &&\n (!('prim' in ret.failed) || ret.failed.prim !== 'never') &&\n i !== inst.length - 1\n ) {\n throw new MichelsonInstructionError(inst, ret, 'FAIL must appear in a tail position');\n }\n\n if (ctx?.traceCallback !== undefined) {\n const trace: InstructionTrace = {\n op: inst,\n in: stack,\n out: ret,\n };\n ctx.traceCallback(trace);\n }\n return 'failed' in ret ? { failed: ret.failed, level: ret.level + 1 } : ret;\n}\n\nfunction functionTypeInternal(\n inst: MichelsonCode,\n stack: MichelsonType[],\n ctx: Context | null\n): MichelsonReturnType {\n const proto = ctx?.protocol || DefaultProtocol;\n\n if (Array.isArray(inst)) {\n return instructionListType(inst, stack, ctx);\n }\n const instruction = inst; // Make it const for type guarding\n\n // make sure the stack has enough number of arguments of specific types\n function args<T extends (MichelsonTypeID[] | null)[]>(n: number, ...typeIds: T): StackType<T> {\n if (stack.length < typeIds.length + n) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: stack must have at least ${typeIds.length} element(s)`\n );\n }\n\n let i = n;\n for (const ids of typeIds) {\n if (ids !== null && ids.length !== 0) {\n let ii = 0;\n while (ii < ids.length && ids[ii] !== typeID(stack[i])) {\n ii++;\n }\n if (ii === ids.length) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: stack type mismatch: [${i}] expected to be ${ids}, got ${typeID(\n stack[i]\n )} instead`\n );\n }\n }\n i++;\n }\n return stack.slice(n, typeIds.length + n) as StackType<T>;\n }\n\n function rethrow<T extends unknown[], U>(fn: (...args: T) => U) {\n return (...args: T): U => {\n try {\n return fn(...args);\n } catch (err) {\n if (err instanceof MichelsonError) {\n throw new MichelsonInstructionError(instruction, stack, err.message);\n } else {\n throw err;\n }\n }\n };\n }\n\n function rethrowTypeGuard<T extends Expr, U extends MichelsonType & T>(fn: (arg: T) => arg is U) {\n return (arg: T): arg is U => {\n try {\n return fn(arg);\n } catch (err) {\n if (err instanceof MichelsonError) {\n throw new MichelsonInstructionError(instruction, stack, err.message);\n } else {\n throw err;\n }\n }\n };\n }\n\n const argAnn = rethrow(unpackAnnotations);\n const ensureStacksEqual = rethrow(assertStacksEqual);\n const ensureTypesEqual = rethrow(assertScalarTypesEqual);\n const ensureComparableType = rethrowTypeGuard(assertMichelsonComparableType);\n const ensurePackableType = rethrowTypeGuard(assertMichelsonPackableType);\n const ensureStorableType = rethrowTypeGuard(assertMichelsonStorableType);\n const ensurePushableType = rethrowTypeGuard(assertMichelsonPushableType);\n const ensureBigMapStorableType = rethrowTypeGuard(assertMichelsonBigMapStorableType);\n\n // unpack instruction annotations and assert their maximum number\n function instructionAnn(\n num: { f?: number; t?: number; v?: number },\n opt?: UnpackAnnotationsOptions\n ) {\n const a = argAnn(instruction, {\n ...opt,\n emptyFields: num.f !== undefined && num.f > 1,\n emptyVar: num.v !== undefined && num.v > 1,\n });\n const assertNum = (a: string[] | undefined, n: number | undefined, type: string) => {\n if (a && a.length > (n || 0)) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at most ${n || 0} ${type} annotations allowed`\n );\n }\n };\n assertNum(a.f, num.f, 'field');\n assertNum(a.t, num.t, 'type');\n assertNum(a.v, num.v, 'variable');\n return a;\n }\n\n // also keeps annotation class if null is provided\n function annotate<T extends MichelsonType>(tt: T, a: Nullable<UnpackedAnnotations>): T {\n const tx: MichelsonType = tt;\n const t: Extract<MichelsonType, Prim> = Array.isArray(tx) ? { prim: 'pair', args: tx } : tx;\n const src = argAnn(t);\n const ann =\n a.v !== undefined || a.t !== undefined || a.f !== undefined\n ? [\n ...((a.v === null ? src.v : a.v) || []),\n ...((a.t === null ? src.t : a.t) || []),\n ...((a.f === null ? src.f : a.f) || []),\n ]\n : undefined;\n\n const { annots: _annots, ...rest } = t;\n return { ...(rest as T), ...(ann && ann.length !== 0 && { annots: ann }) };\n }\n\n // shortcut to copy at most one variable annotation from the instruction to the type\n function annotateVar<T extends MichelsonType>(t: T, def?: string) {\n const ia = instructionAnn({ v: 1 });\n return annotate(t, {\n v: ia.v !== undefined ? ia.v : def !== undefined ? [def] : null,\n t: null,\n });\n }\n\n // annotate CAR/CDR/UNPAIR/GET\n function annotateField(\n arg: MichelsonTypePair<MichelsonType[]>,\n field: MichelsonType,\n insAnn: UnpackedAnnotations,\n n: number,\n defField: string\n ): MichelsonType {\n const fieldAnn = argAnn(field).f?.[0]; // field's field annotation\n const insFieldAnn = insAnn.f?.[n];\n if (\n insFieldAnn !== undefined &&\n insFieldAnn !== '%' &&\n fieldAnn !== undefined &&\n insFieldAnn !== fieldAnn\n ) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: field names doesn't match: ${insFieldAnn} !== ${fieldAnn}`\n );\n }\n const insVarAnn = insAnn.v?.[n]; // nth instruction's variable annotation\n const varAnn = argAnn(arg).v?.[0]; // instruction argument's variable annotation\n return annotate(field, {\n t: null,\n v: insVarAnn\n ? insVarAnn === '@%'\n ? fieldAnn\n ? ['@' + fieldAnn.slice(1)]\n : undefined\n : insVarAnn === '@%%'\n ? varAnn\n ? ['@' + varAnn.slice(1) + '.' + (fieldAnn ? fieldAnn.slice(1) : defField)]\n : fieldAnn\n ? ['@' + fieldAnn.slice(1)]\n : undefined\n : [insVarAnn]\n : null,\n });\n }\n\n // comb helper functions\n function getN(\n src: MichelsonTypePair<MichelsonType[]>,\n n: number,\n i: number = n\n ): MichelsonType[] {\n const p = unpackComb('pair', src);\n if (i === 1) {\n return [p.args[0]];\n } else if (i === 2) {\n return p.args;\n }\n const right = p.args[1];\n if (isPairType(right)) {\n return [p.args[0], ...getN(right, n, i - 1)];\n } else {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at least ${n} fields are expected`\n );\n }\n }\n\n function getNth(\n src: MichelsonTypePair<MichelsonType[]>,\n n: number,\n i: number = n\n ): MichelsonType {\n if (i === 0) {\n return src;\n }\n const p = unpackComb('pair', src);\n if (i === 1) {\n return p.args[0];\n }\n const right = p.args[1];\n if (isPairType(right)) {\n return getNth(right, n, i - 2);\n } else if (i === 2) {\n return right;\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at least ${n + 1} fields are expected`\n );\n }\n\n function updateNth(\n src: MichelsonTypePair<MichelsonType[]>,\n x: MichelsonType,\n n: number,\n i: number = n\n ): MichelsonType {\n if (i === 0) {\n return x;\n }\n const p = unpackComb('pair', src);\n if (i === 1) {\n return {\n ...p,\n args: [x, p.args[1]],\n };\n }\n const right = p.args[1];\n if (isPairType(right)) {\n return {\n ...p,\n args: [p.args[0], updateNth(right, x, n, i - 2)],\n };\n } else if (i === 2) {\n return {\n ...p,\n args: [p.args[0], x],\n };\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at least ${n + 1} fields are expected`\n );\n }\n\n const varSuffix = (a: UnpackedAnnotations, suffix: string) => [\n '@' + (a.v ? a.v[0].slice(1) + '.' : '') + suffix,\n ];\n\n function branchType(br0: MichelsonReturnType, br1: MichelsonReturnType): MichelsonReturnType {\n if ('failed' in br0 || 'failed' in br1) {\n return 'failed' in br0 ? br1 : br0;\n } else {\n ensureStacksEqual(br0, br1);\n return br0;\n }\n }\n\n const retStack = ((instruction: MichelsonInstruction): MichelsonReturnType => {\n switch (instruction.prim) {\n case 'DUP': {\n const n = instruction.args ? parseInt(instruction.args[0].int, 10) : 1;\n if (n === 0) {\n throw new MichelsonInstructionError(instruction, stack, 'DUP 0 is forbidden');\n }\n const s = args(n - 1, null)[0];\n if (typeID(s) === 'ticket') {\n throw new MichelsonInstructionError(instruction, stack, \"ticket can't be DUPed\");\n }\n return [s, ...stack];\n }\n\n case 'SWAP': {\n const s = args(0, null, null);\n instructionAnn({});\n return [s[1], s[0], ...stack.slice(2)];\n }\n\n case 'SOME':\n return [\n annotate({ prim: 'option', args: [args(0, null)[0]] }, instructionAnn({ t: 1, v: 1 })),\n ...stack.slice(1),\n ];\n\n case 'UNIT':\n return [annotate({ prim: 'unit' }, instructionAnn({ v: 1, t: 1 })), ...stack];\n\n case 'PAIR': {\n const n = instruction.args ? parseInt(instruction.args[0].int, 10) : 2;\n if (n < 2) {\n throw new MichelsonInstructionError(instruction, stack, `PAIR ${n} is forbidden`);\n }\n const s = args(0, ...new Array<null>(n).fill(null));\n const ia = instructionAnn({ f: n, t: 1, v: 1 }, { specialFields: true });\n const trim = (s: string) => {\n const i = s.lastIndexOf('.');\n return s.slice(i > 0 ? i + 1 : 1);\n };\n const retArgs = s.map((v, i) => {\n const va = argAnn(v);\n const f =\n ia.f && ia.f.length > i && ia.f[i] !== '%'\n ? ia.f[i] === '%@'\n ? va.v\n ? ['%' + trim(va.v?.[0] || '')]\n : undefined\n : [ia.f[i]]\n : undefined;\n return annotate(v, { v: null, t: null, f });\n });\n return [\n annotate(\n {\n prim: 'pair',\n args: retArgs,\n },\n { t: ia.t, v: ia.v }\n ),\n ...stack.slice(n),\n ];\n }\n\n case 'UNPAIR': {\n const n = instruction.args ? parseInt(instruction.args[0].int, 10) : 2;\n if (n < 2) {\n throw new MichelsonInstructionError(instruction, stack, `UNPAIR ${n} is forbidden`);\n }\n const s = args(0, ['pair'])[0];\n const ia = instructionAnn({ f: 2, v: 2 }, { specialVar: true });\n const fields = getN(s, n);\n return [\n ...fields.map((field, i) => annotateField(s, field, ia, i, i === 0 ? 'car' : 'cdr')),\n ...stack.slice(1),\n ];\n }\n\n case 'CAR':\n case 'CDR': {\n const s = unpackComb('pair', args(0, ['pair'])[0]);\n const field = s.args[instruction.prim === 'CAR' ? 0 : 1];\n const ia = instructionAnn({ f: 1, v: 1 }, { specialVar: true });\n return [\n annotateField(s, field, ia, 0, instruction.prim.toLocaleLowerCase()),\n ...stack.slice(1),\n ];\n }\n\n case 'CONS': {\n const s = args(0, null, ['list']);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar({ prim: 'list', args: [s[1].args[0]] }), ...stack.slice(2)];\n }\n\n case 'SIZE':\n args(0, ['string', 'list', 'set', 'map', 'bytes']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(1)];\n\n case 'MEM': {\n const s = args(0, null, ['set', 'map', 'big_map']);\n ensureComparableType(s[0]);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar({ prim: 'bool' }), ...stack.slice(2)];\n }\n\n case 'GET':\n if (instruction.args) {\n // comb operation\n const n = parseInt(instruction.args[0].int, 10);\n const s = args(0, ['pair'])[0];\n return [annotateVar(getNth(s, n)), ...stack.slice(1)];\n } else {\n // map operation\n const s = args(0, null, ['map', 'big_map']);\n ensureComparableType(s[0]);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar({ prim: 'option', args: [s[1].args[1]] }), ...stack.slice(2)];\n }\n\n case 'UPDATE':\n if (instruction.args) {\n // comb operation\n const n = parseInt(instruction.args[0].int, 10);\n const s = args(0, null, ['pair']);\n return [annotateVar(updateNth(s[1], s[0], n)), ...stack.slice(2)];\n } else {\n // map operation\n const s0 = args(0, null, ['bool', 'option']);\n ensureComparableType(s0[0]);\n if (s0[1].prim === 'bool') {\n const s1 = args(2, ['set']);\n ensureTypesEqual(s0[0], s1[0].args[0]);\n return [\n annotateVar({\n prim: 'set',\n args: [annotate(s0[0], { t: null })],\n }),\n ...stack.slice(3),\n ];\n }\n\n const s1 = args(2, ['map', 'big_map']);\n ensureTypesEqual(s0[0], s1[0].args[0]);\n if (s1[0].prim === 'map') {\n return [\n annotateVar({\n prim: 'map',\n args: [annotate(s0[0], { t: null }), annotate(s0[1].args[0], { t: null })],\n }),\n ...stack.slice(3),\n ];\n }\n ensureBigMapStorableType(s0[1].args[0]);\n return [\n annotateVar({\n prim: 'big_map',\n args: [annotate(s0[0], { t: null }), annotate(s0[1].args[0], { t: null })],\n }),\n ...stack.slice(3),\n ];\n }\n\n case 'GET_AND_UPDATE': {\n const ia = instructionAnn({ v: 2 });\n const s = args(0, null, ['option'], ['map', 'big_map']);\n ensureComparableType(s[0]);\n ensureTypesEqual(s[0], s[2].args[0]);\n ensureTypesEqual(s[1].args[0], s[2].args[1]);\n const va = ia.v?.map((v) => (v !== '@' ? [v] : undefined));\n if (s[2].prim === 'map') {\n return [\n annotate({ prim: 'option', args: [s[2].args[1]] }, { v: va?.[0] }),\n annotate(\n {\n prim: 'map',\n args: [annotate(s[0], { t: null }), annotate(s[1].args[0], { t: null })],\n },\n { v: va?.[1] }\n ),\n ...stack.slice(3),\n ];\n }\n ensureBigMapStorableType(s[1].args[0]);\n return [\n annotate({ prim: 'option', args: [s[2].args[1]] }, { v: va?.[0] }),\n annotate(\n {\n prim: 'big_map',\n args: [annotate(s[0], { t: null }), annotate(s[1].args[0], { t: null })],\n },\n { v: va?.[1] }\n ),\n ...stack.slice(3),\n ];\n }\n\n case 'EXEC': {\n const s = args(0, null, ['lambda']);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar(s[1].args[1]), ...stack.slice(2)];\n }\n\n case 'APPLY': {\n const s = args(0, null, ['lambda']);\n ensureStorableType(s[0]);\n ensurePushableType(s[0]);\n if (!isPairType(s[1].args[0])) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: function's argument must be a pair: ${typeID(s[1].args[0])}`\n );\n }\n const pt = s[1].args[0];\n ensureTypesEqual(s[0], typeArgs(pt)[0]);\n return [\n annotateVar({ prim: 'lambda', args: [typeArgs(pt)[1], s[1].args[1]] }),\n ...stack.slice(2),\n ];\n }\n\n case 'FAILWITH': {\n const s = args(0, null)[0];\n if (!ProtoInferiorTo(proto, Protocol.PtEdo2Zk)) {\n ensurePackableType(s);\n }\n return { failed: s, level: 0 };\n }\n\n case 'NEVER':\n args(0, ['never']);\n return { failed: { prim: 'never' }, level: 0 };\n\n case 'RENAME':\n return [annotateVar(args(0, null)[0]), ...stack.slice(1)];\n\n case 'CONCAT': {\n const s0 = args(0, ['string', 'list', 'bytes']);\n if (s0[0].prim === 'list') {\n if (typeID(s0[0].args[0]) !== 'string' && typeID(s0[0].args[0]) !== 'bytes') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't concatenate list of ${typeID(s0[0].args[0])}'s`\n );\n }\n return [annotateVar(s0[0].args[0]), ...stack.slice(1)];\n }\n const s1 = args(1, ['string', 'bytes']);\n if (s0[0].prim !== s1[0].prim) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't concatenate ${s0[0].prim} with ${s1[0].prim}`\n );\n }\n return [annotateVar(s1[0]), ...stack.slice(2)];\n }\n\n case 'SLICE':\n return [\n annotateVar(\n { prim: 'option', args: [args(0, ['nat'], ['nat'], ['string', 'bytes'])[2]] },\n '@slice'\n ),\n ...stack.slice(3),\n ];\n\n case 'PACK': {\n const s = args(0, null)[0];\n ensurePackableType(s);\n return [annotateVar({ prim: 'bytes' }, '@packed'), ...stack.slice(1)];\n }\n\n case 'ADD': {\n const s = args(\n 0,\n ['nat', 'int', 'timestamp', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr'],\n ['nat', 'int', 'timestamp', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr']\n );\n if (\n (s[0].prim === 'nat' && s[1].prim === 'int') ||\n (s[0].prim === 'int' && s[1].prim === 'nat')\n ) {\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'int' && s[1].prim === 'timestamp') ||\n (s[0].prim === 'timestamp' && s[1].prim === 'int')\n ) {\n return [annotateVar({ prim: 'timestamp' }), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'int' ||\n s[0].prim === 'nat' ||\n s[0].prim === 'mutez' ||\n s[0].prim === 'bls12_381_g1' ||\n s[0].prim === 'bls12_381_g2' ||\n s[0].prim === 'bls12_381_fr') &&\n s[0].prim === s[1].prim\n ) {\n return [annotateVar(s[0]), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't add ${s[0].prim} to ${s[1].prim}`\n );\n }\n\n case 'SUB': {\n const s = ProtoInferiorTo(proto, Protocol.PsiThaCa)\n ? args(0, ['nat', 'int', 'timestamp', 'mutez'], ['nat', 'int', 'timestamp', 'mutez'])\n : args(0, ['nat', 'int', 'timestamp'], ['nat', 'int', 'timestamp']);\n\n if (\n ((s[0].prim === 'nat' || s[0].prim === 'int') &&\n (s[1].prim === 'nat' || s[1].prim === 'int')) ||\n (s[0].prim === 'timestamp' && s[1].prim === 'timestamp')\n ) {\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n } else if (s[0].prim === 'timestamp' && s[1].prim === 'int') {\n return [annotateVar({ prim: 'timestamp' }), ...stack.slice(2)];\n } else if (s[0].prim === 'mutez' && s[1].prim === 'mutez') {\n return [annotateVar({ prim: 'mutez' }), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't subtract ${s[0].prim} from ${s[1].prim}`\n );\n }\n\n case 'SUB_MUTEZ': {\n const _s = args(0, ['mutez'], ['mutez']);\n return [annotateVar({ prim: 'option', args: [{ prim: 'mutez' }] }), ...stack.slice(2)];\n }\n\n case 'MUL': {\n const s = args(\n 0,\n ['nat', 'int', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr'],\n ['nat', 'int', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr']\n );\n if (\n (s[0].prim === 'nat' && s[1].prim === 'int') ||\n (s[0].prim === 'int' && s[1].prim === 'nat')\n ) {\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'nat' && s[1].prim === 'mutez') ||\n (s[0].prim === 'mutez' && s[1].prim === 'nat')\n ) {\n return [annotateVar({ prim: 'mutez' }), ...stack.slice(2)];\n } else if (\n ((s[0].prim === 'bls12_381_g1' ||\n s[0].prim === 'bls12_381_g2' ||\n s[0].prim === 'bls12_381_fr') &&\n s[1].prim === 'bls12_381_fr') ||\n ((s[0].prim === 'nat' || s[0].prim === 'int') && s[0].prim === s[1].prim)\n ) {\n return [annotateVar(s[0]), ...stack.slice(2)];\n } else if (\n ((s[0].prim === 'nat' || s[0].prim === 'int') && s[1].prim === 'bls12_381_fr') ||\n ((s[1].prim === 'nat' || s[1].prim === 'int') && s[0].prim === 'bls12_381_fr')\n ) {\n return [annotateVar({ prim: 'bls12_381_fr' }), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't multiply ${s[0].prim} by ${s[1].prim}`\n );\n }\n\n case 'EDIV': {\n const res = (\n a: 'nat' | 'int' | 'mutez',\n b: 'nat' | 'int' | 'mutez'\n ): MichelsonTypeOption<MichelsonType> => ({\n prim: 'option',\n args: [{ prim: 'pair', args: [{ prim: a }, { prim: b }] }],\n });\n const s = args(0, ['nat', 'int', 'mutez'], ['nat', 'int', 'mutez']);\n if (s[0].prim === 'nat' && s[1].prim === 'nat') {\n return [annotateVar(res('nat', 'nat')), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'nat' || s[0].prim === 'int') &&\n (s[1].prim === 'nat' || s[1].prim === 'int')\n ) {\n return [annotateVar(res('int', 'nat')), ...stack.slice(2)];\n } else if (s[0].prim === 'mutez' && s[1].prim === 'nat') {\n return [annotateVar(res('mutez', 'mutez')), ...stack.slice(2)];\n } else if (s[0].prim === 'mutez' && s[1].prim === 'mutez') {\n return [annotateVar(res('nat', 'mutez')), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't euclideally divide ${s[0].prim} by ${s[1].prim}`\n );\n }\n\n case 'ABS':\n args(0, ['int']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(1)];\n\n case 'ISNAT':\n args(0, ['int']);\n return [annotateVar({ prim: 'option', args: [{ prim: 'nat' }] }), ...stack.slice(1)];\n\n case 'INT':\n args(0, ['nat', 'bls12_381_fr', 'bytes']);\n return [annotateVar({ prim: 'int' }), ...stack.slice(1)];\n\n case 'BYTES':\n args(0, ['nat', 'int']);\n return [annotateVar({ prim: 'bytes' }), ...stack.slice(1)];\n\n case 'NAT':\n args(0, ['bytes']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(1)];\n\n case 'NEG': {\n const s = args(0, ['nat', 'int', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr'])[0];\n if (s.prim === 'nat' || s.prim === 'int') {\n return [annotateVar({ prim: 'int' }), ...stack.slice(1)];\n }\n return [annotateVar(s), ...stack.slice(1)];\n }\n\n case 'LSL':\n case 'LSR':\n args(0, ['nat', 'bytes'], ['nat', 'bytes']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(2)];\n\n case 'OR':\n case 'XOR': {\n const s = args(0, ['nat', 'bytes', 'bool'], ['nat', 'bytes', 'bool']);\n if (s[0].prim !== s[1].prim) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: both arguments must be of the same type: ${s[0].prim}, ${s[1].prim}`\n );\n }\n return [annotateVar(s[1]), ...stack.slice(2)];\n }\n\n case 'AND': {\n const s = args(0, ['nat', 'bytes', 'bool', 'int'], ['nat', 'bytes', 'bool']);\n if ((s[0].prim !== 'int' || s[1].prim !== 'nat') && s[0].prim !== s[1].prim) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: both arguments must be of the same type: ${s[0].prim}, ${s[1].prim}`\n );\n }\n return [annotateVar(s[1]), ...stack.slice(2)];\n }\n\n case 'NOT': {\n const s = args(0, ['nat', 'bytes', 'bool', 'int'])[0];\n if (s.prim === 'bool') {\n return [annotateVar({ prim: 'bool' }), ...stack.slice(1)];\n }\n return [annotateVar({ prim: 'int' }), ...stack.slice(1)];\n }\n\n case 'COMPARE': {\n const s = args(0, null, null);\n ensureComparableType(s[0]);\n ensureComparableType(s[1]);\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n }\n\n case 'EQ':\n case 'NEQ':\n case 'LT':\n case 'GT':\n case 'LE':\n case 'GE':\n args(0, ['int']);\n return [annotateVar({ prim: 'bool' }), ...stack.slice(1)];\n\n case 'SELF': {\n if (ctx?.contract === undefined) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: contract required`\n );\n }\n const ia = instructionAnn({ f: 1, v: 1 });\n const ep = contractEntryPoint(ctx.contract, ia.f?.[0]);\n if (ep === null) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: contract has no entrypoint ${ep}`\n );\n }\n return [\n annotate({ prim: 'contract', args: [ep] }, { v: ia.v ? ia.v : ['@self'] }),\n ...stack,\n ];\n }\n\n case 'TRANSFER_TOKENS': {\n const s = args(0, null, ['mutez'], ['contract']);\n ensureTypesEqual(s[0], s[2].args[0]);\n return [annotateVar({ prim: 'operation' }), ...stack.slice(3)];\n }\n\n case 'SET_DELEGATE': {\n const s = args(0, ['option'])[0];\n if (typeID(s.args[0]) !== 'key_hash') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: key hash expected: ${typeID(s.args[0])}`\n );\n }\n return [annotateVar({ prim: 'operation' }), ...stack.slice(1)];\n }\n\n case 'IMPLICIT_ACCOUNT':\n args(0, ['key_hash']);\n return [annotateVar({ prim: 'contract', args: [{ prim: 'unit' }] }), ...stack.slice(1)];\n\n case 'NOW':\n return [annotateVar({ prim: 'timestamp' }, '@now'), ...stack];\n\n case 'AMOUNT':\n return [annotateVar({ prim: 'mutez' }, '@amount'), ...stack];\n\n case 'BALANCE':\n return [annotateVar({ prim: 'mutez' }, '@balance'), ...stack];\n\n case 'CHECK_SIGNATURE':\n args(0, ['key'], ['signature'], ['bytes']);\n return [annotateVar({ prim: 'bool' }), ...stack.slice(3)];\n\n case 'BLAKE2B':\n case 'SHA256':\n case 'SHA512':\n case 'KECCAK':\n case 'SHA3':\n args(0, ['bytes']);\n return [annotateVar({ prim: 'bytes' }), ...stack.slice(1)];\n\n case 'HASH_KEY':\n args(0, ['key']);\n return [annotateVar({ prim: 'key_hash' }), ...stack.slice(1)];\n\n case 'SOURCE':\n return [annotateVar({ prim: 'address' }, '@source'), ...stack];\n\n case 'SENDER':\n return [annotateVar({ prim: 'address' }, '@sender'), ...stack];\n\n case 'ADDRESS': {\n const s = args(0, ['contract'])[0];\n const ia = instructionAnn({ v: 1 });\n return [\n annotate(\n { prim: 'address', [refContract]: s },\n { v: ia.v ? ia.v : varSuffix(argAnn(s), 'address') }\n ),\n ...stack.slice(1),\n ];\n }\n\n case 'SELF_ADDRESS': {\n const addr: MichelsonTypeAddress = { prim: 'address' };\n if (ctx?.contract !== undefined) {\n addr[refContract] = {\n prim: 'contract',\n args: [contractSection(ctx.contract, 'parameter').args[0]],\n };\n }\n return [annotateVar(addr, '@address'), ...stack];\n }\n\n case 'CHAIN_ID':\n return [annotateVar({ prim: 'chain_id' }), ...stack];\n\n case 'DROP': {\n instructionAnn({});\n const n = instruction.args !== undefined ? parseInt(instruction.args[0].int, 10) : 1;\n args(n - 1, null);\n return stack.slice(n);\n }\n\n case 'DIG': {\n instructionAnn({});\n const n = parseInt(instruction.args[0].int, 10);\n return [args(n, null)[0], ...stack.slice(0, n), ...stack.slice(n + 1)];\n }\n\n case 'DUG': {\n instructionAnn({});\n const n = parseInt(instruction.args[0].int, 10);\n return [...stack.slice(1, n + 1), args(0, null)[0], ...stack.slice(n + 1)];\n }\n\n case 'NONE':\n assertTypeAnnotationsValid(instruction.args[0]);\n return [\n annotate({ prim: 'option', args: [instruction.args[0]] }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'LEFT':\n case 'RIGHT': {\n const s = args(0, null)[0];\n const ia = instructionAnn({ f: 2, t: 1, v: 1 }, { specialFields: true });\n const va = argAnn(s);\n\n const children: [MichelsonType, MichelsonType] = [\n annotate(s, {\n t: null,\n v: null,\n f:\n ia.f && ia.f.length > 0 && ia.f[0] !== '%'\n ? ia.f[0] === '%@'\n ? va.v\n ? ['%' + va.v[0].slice(1)]\n : undefined\n : ia.f\n : undefined,\n }),\n annotate(instruction.args[0], {\n t: null,\n f: ia.f && ia.f.length > 1 && ia.f[1] !== '%' ? ia.f : undefined,\n }),\n ];\n\n return [\n annotate(\n {\n prim: 'or',\n args: instruction.prim === 'LEFT' ? children : [children[1], children[0]],\n },\n { t: ia.t, v: ia.v }\n ),\n ...stack.slice(1),\n ];\n }\n\n case 'NIL':\n assertTypeAnnotationsValid(instruction.args[0]);\n return [\n annotate({ prim: 'list', args: [instruction.args[0]] }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'UNPACK':\n args(0, ['bytes']);\n assertTypeAnnotationsValid(instruction.args[0]);\n return [\n annotateVar({ prim: 'option', args: [instruction.args[0]] }, '@unpacked'),\n ...stack.slice(1),\n ];\n\n case 'CONTRACT': {\n const s = args(0, ['address'])[0];\n assertTypeAnnotationsValid(instruction.args[0]);\n const ia = instructionAnn({ v: 1, f: 1 });\n const contract = s[refContract];\n if (contract !== undefined) {\n const ep = contractEntryPoint(contract, ia.f?.[0]);\n if (ep === null) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: contract has no entrypoint ${ep}`\n );\n }\n ensureTypesEqual(ep, instruction.args[0]);\n }\n return [\n annotate(\n { prim: 'option', args: [{ prim: 'contract', args: [instruction.args[0]] }] },\n { v: ia.v ? ia.v : varSuffix(argAnn(s), 'contract') }\n ),\n ...stack.slice(1),\n ];\n }\n\n case 'CAST': {\n instructionAnn({});\n const s = args(0, null)[0];\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureTypesEqual(instruction.args[0], s);\n return [instruction.args[0], ...stack.slice(1)];\n }\n\n case 'IF_NONE': {\n instructionAnn({});\n const s = args(0, ['option'])[0];\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(instruction.args[0], tail, ctx);\n const br1 = functionTypeInternal(\n instruction.args[1],\n [annotate(s.args[0], { t: null, v: varSuffix(argAnn(s), 'some') }), ...tail],\n ctx\n );\n return branchType(br0, br1);\n }\n\n case 'IF_LEFT': {\n instructionAnn({});\n const s = args(0, ['or'])[0];\n const va = argAnn(s);\n const lefta = argAnn(s.args[0]);\n const righta = argAnn(s.args[1]);\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(\n instruction.args[0],\n [\n annotate(s.args[0], {\n t: null,\n v: varSuffix(va, lefta.f ? lefta.f[0].slice(1) : 'left'),\n }),\n ...tail,\n ],\n ctx\n );\n const br1 = functionTypeInternal(\n instruction.args[1],\n [\n annotate(s.args[1], {\n t: null,\n v: varSuffix(va, righta.f ? righta.f[0].slice(1) : 'right'),\n }),\n ...tail,\n ],\n ctx\n );\n return branchType(br0, br1);\n }\n\n case 'IF_CONS': {\n instructionAnn({});\n const s = args(0, ['list'])[0];\n const va = argAnn(s);\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(\n instruction.args[0],\n [\n annotate(s.args[0], { t: null, v: varSuffix(va, 'hd') }),\n annotate(s, { t: null, v: varSuffix(va, 'tl') }),\n ...tail,\n ],\n ctx\n );\n const br1 = functionTypeInternal(instruction.args[1], tail, ctx);\n return branchType(br0, br1);\n }\n\n case 'IF': {\n instructionAnn({});\n args(0, ['bool']);\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(instruction.args[0], tail, ctx);\n const br1 = functionTypeInternal(instruction.args[1], tail, ctx);\n return branchType(br0, br1);\n }\n\n case 'MAP': {\n const s = args(0, ['list', 'map', 'option'])[0];\n const tail = stack.slice(1);\n const elt = s.prim === 'map' ? { prim: 'pair' as const, args: s.args } : s.args[0];\n const body = functionTypeInternal(\n instruction.args[0],\n [annotate(elt, { t: null, v: varSuffix(argAnn(s), 'elt') }), ...tail],\n ctx\n );\n if ('failed' in body) {\n if (!('prim' in body.failed) || body.failed.prim !== 'never') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: FAIL is not allowed in MAP`\n );\n }\n return { failed: body.failed, level: body.level + 1 };\n }\n if (body.length < 1) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: function must return a value`\n );\n }\n ensureStacksEqual(body.slice(1), tail);\n return s.prim === 'list'\n ? [annotateVar({ prim: 'list', args: [body[0]] }), ...tail]\n : s.prim === 'map'\n ? [annotateVar({ prim: 'map', args: [s.args[0], body[0]] }), ...tail]\n : [annotateVar({ prim: 'option', args: [body[0]] }), ...tail];\n }\n\n case 'ITER': {\n instructionAnn({});\n const s = args(0, ['set', 'list', 'map'])[0];\n const tail = stack.slice(1);\n const elt = s.prim === 'map' ? { prim: 'pair' as const, args: s.args } : s.args[0];\n const body = functionTypeInternal(\n instruction.args[0],\n [annotate(elt, { t: null, v: varSuffix(argAnn(s), 'elt') }), ...tail],\n ctx\n );\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n ensureStacksEqual(body, tail);\n return tail;\n }\n\n case 'LOOP': {\n instructionAnn({});\n args(0, ['bool']);\n const tail = stack.slice(1);\n const body = functionTypeInternal(instruction.args[0], tail, ctx);\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n ensureStacksEqual(body, [{ prim: 'bool' }, ...tail]);\n return tail;\n }\n\n case 'LOOP_LEFT': {\n instructionAnn({});\n const s = args(0, ['or'])[0];\n const tail = stack.slice(1);\n const body = functionTypeInternal(\n instruction.args[0],\n [annotate(s.args[0], { t: null, v: varSuffix(argAnn(s), 'left') }), ...tail],\n ctx\n );\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n ensureStacksEqual(body, [s, ...tail]);\n return [annotate(s.args[1], { t: null, v: instructionAnn({ v: 1 }).v }), ...tail];\n }\n\n case 'DIP': {\n instructionAnn({});\n const n = instruction.args.length === 2 ? parseInt(instruction.args[0].int, 10) : 1;\n args(n - 1, null);\n const head = stack.slice(0, n);\n const tail = stack.slice(n);\n // ternary operator is a type guard so use it instead of just `instruction.args.length - 1`\n const body =\n instruction.args.length === 2\n ? functionTypeInternal(instruction.args[1], tail, ctx)\n : functionTypeInternal(instruction.args[0], tail, ctx);\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n return [...head, ...body];\n }\n\n case 'CREATE_CONTRACT': {\n const ia = instructionAnn({ v: 2 });\n const s = args(0, ['option'], ['mutez'], null);\n if (typeID(s[0].args[0]) !== 'key_hash') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: key hash expected: ${typeID(s[0].args[0])}`\n );\n }\n if (ensureStorableType(s[2])) {\n assertContractValid(instruction.args[0]);\n assertScalarTypesEqual(contractSection(instruction.args[0], 'storage').args[0], s[2]);\n }\n\n const va = ia.v?.map((v) => (v !== '@' ? [v] : undefined));\n return [\n annotate({ prim: 'operation' }, { v: va?.[0] }),\n annotate(\n {\n prim: 'address',\n [refContract]: {\n prim: 'contract',\n args: [contractSection(instruction.args[0], 'parameter').args[0]],\n },\n },\n { v: va?.[1] }\n ),\n ...stack.slice(3),\n ];\n }\n\n case 'PUSH':\n assertTypeAnnotationsValid(instruction.args[0]);\n assertDataValidInternal(instruction.args[1], instruction.args[0], {\n ...ctx,\n contract: undefined,\n });\n return [annotateVar(instruction.args[0]), ...stack];\n\n case 'EMPTY_SET':\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureComparableType(instruction.args[0]);\n return [\n annotate({ prim: 'set', args: instruction.args }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'EMPTY_MAP':\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureComparableType(instruction.args[0]);\n assertTypeAnnotationsValid(instruction.args[1]);\n return [\n annotate({ prim: 'map', args: instruction.args }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'EMPTY_BIG_MAP':\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureComparableType(instruction.args[0]);\n assertTypeAnnotationsValid(instruction.args[1]);\n ensureBigMapStorableType(instruction.args[0]);\n return [\n annotate({ prim: 'big_map', args: instruction.args }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'LAMBDA_REC':\n case 'LAMBDA': {\n assertTypeAnnotationsValid(instruction.args[0]);\n assertTypeAnnotationsValid(instruction.args[1]);\n const s = [instruction.args[0]];\n if (instruction.prim === 'LAMBDA_REC') {\n s.push({ prim: 'lambda', args: [instruction.args[0], instruction.args[1]] });\n }\n const body = functionTypeInternal(instruction.args[2], s, {\n ...ctx,\n contract: undefined,\n });\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n if (body.length !== 1) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: function must return a value`\n );\n }\n ensureTypesEqual(instruction.args[1], body[0]);\n return [\n annotateVar({ prim: 'lambda', args: [instruction.args[0], instruction.args[1]] }),\n ...stack,\n ];\n }\n\n case 'LEVEL':\n return [annotateVar({ prim: 'nat' }, '@level'), ...stack];\n\n case 'TOTAL_VOTING_POWER':\n return [annotateVar({ prim: 'nat' }), ...stack];\n\n case 'VOTING_POWER':\n args(0, ['key_hash']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(1)];\n\n case 'TICKET': {\n const s = args(0, null, ['nat'])[0];\n ensureComparableType(s);\n if (ProtoInferiorTo(proto, Protocol.PtLimaPtL)) {\n return [\n annotate({ prim: 'ticket', args: [s] }, instructionAnn({ t: 1, v: 1 })),\n ...stack.slice(2),\n ];\n } else {\n return [\n annotateVar({\n prim: 'option',\n args: [annotate({ prim: 'ticket', args: [s] }, instructionAnn({ t: 1, v: 1 }))],\n }),\n ...stack.slice(2),\n ];\n }\n }\n\n case 'JOIN_TICKETS': {\n const s = unpackComb('pair', args(0, ['pair'])[0]);\n if (typeID(s.args[0]) !== 'ticket') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: ticket expected: ${typeID(s.args[0])}`\n );\n }\n ensureTypesEqual(s.args[0], s.args[1]);\n return [\n annotateVar({\n prim: 'option',\n args: [annotate(s.args[0], { t: null })],\n }),\n ...stack.slice(1),\n ];\n }\n\n case 'SPLIT_TICKET': {\n const s = args(0, ['ticket'], ['pair']);\n const p = unpackComb('pair', s[1]);\n if (typeID(p.args[0]) !== 'nat') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: nat expected: ${typeID(p.args[0])}`\n );\n }\n ensureTypesEqual(p.args[0], p.args[1]);\n return [\n annotateVar({\n prim: 'option',\n args: [\n {\n prim: 'pair',\n args: [annotate(s[0], { t: null }), annotate(s[0], { t: null })],\n },\n ],\n }),\n ...stack.slice(2),\n ];\n }\n\n case 'READ_TICKET': {\n const ia = instructionAnn({ v: 2 });\n const s = args(0, ['ticket'])[0];\n const va = ia.v?.map((v) => (v !== '@' ? [v] : undefined));\n return [\n annotate(\n {\n prim: 'pair',\n args: [{ prim: 'address' }, annotate(s.args[0], { t: null }), { prim: 'nat' }],\n },\n { v: va?.[0] }\n ),\n annotate(s, { v: va?.[1], t: null }),\n ...stack.slice(1),\n ];\n }\n\n case 'PAIRING_CHECK': {\n const p = args(0, ['list'])[0].args[0];\n if (!isPairType(p)) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: pair expected: ${typeID(p)}`\n );\n }\n const c = unpackComb('pair', p);\n if (typeID(c.args[0]) !== 'bls12_381_g1') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: bls12_381_g1 expected: ${typeID(c.args[0])}`\n );\n }\n if (typeID(c.args[1]) !== 'bls12_381_g2') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: bls12_381_g2 expected: ${typeID(c.args[1])}`\n );\n }\n return [annotateVar({ prim: 'bool' }), ...stack.slice(1)];\n }\n\n case 'SAPLING_EMPTY_STATE':\n return [\n annotate(\n { prim: 'sapling_state', args: [instruction.args[0]] },\n instructionAnn({ v: 1, t: 1 })\n ),\n ...stack,\n ];\n\n case 'SAPLING_VERIFY_UPDATE': {\n const s = args(0, ['sapling_transaction'], ['sapling_state']);\n if (parseInt(s[0].args[0].int, 10) !== parseInt(s[1].args[0].int, 10)) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: sapling memo size mismatch: ${s[0].args[0].int} != ${s[1].args[0].int}`\n );\n }\n return ProtoInferiorTo(proto, Protocol.PtJakarta)\n ? [\n annotateVar({\n prim: 'option',\n args: [\n {\n prim: 'pair',\n args: [{ prim: 'int' }, annotate(s[1], { t: null })],\n },\n ],\n }),\n ...stack.slice(2),\n ]\n : [\n annotateVar({\n prim: 'option',\n args: [\n {\n prim: 'pair',\n args: [\n { prim: 'bytes' },\n {\n prim: 'pair',\n args: [{ prim: 'int' }, annotate(s[1], { t: null })],\n },\n ],\n },\n ],\n }),\n ...stack.slice(2),\n ];\n }\n\n case 'OPEN_CHEST':\n args(0, ['chest_key'], ['chest'], ['nat']);\n return [\n annotateVar({ prim: 'or', args: [{ prim: 'bytes' }, { prim: 'bool' }] }),\n ...stack.slice(3),\n ];\n\n case 'VIEW': {\n const s = args(0, null, ['address']);\n ensurePushableType(s[0]);\n return [annotateVar({ prim: 'option', args: [instruction.args[1]] }), ...stack.slice(2)];\n }\n\n case 'MIN_BLOCK_TIME':\n return [annotateVar({ prim: 'nat' }), ...stack];\n\n case 'EMIT': {\n const ia = instructionAnn({ f: 1, t: 1 });\n if (instruction.args) {\n const s = args(0, null);\n ensureTypesEqual(s[0], instruction.args[0]);\n return [annotate({ prim: 'operation' }, ia), ...stack.slice(1)];\n }\n return [annotate({ prim: 'operation' }, ia), ...stack.slice(1)];\n }\n\n default:\n throw new MichelsonError(\n instruction as MichelsonCode,\n `unexpected instruction: ${(instruction as Prim).prim}`\n );\n }\n })(instruction);\n\n if (ctx?.traceCallback !== undefined) {\n const trace: InstructionTrace = {\n op: instruction,\n in: stack,\n out: retStack,\n };\n ctx.traceCallback(trace);\n }\n\n return retStack;\n}\n\nexport function contractSection<T extends 'parameter' | 'storage' | 'code'>(\n contract: MichelsonContract,\n section: T\n): MichelsonContractSection<T> {\n for (const s of contract) {\n if (s.prim === section) {\n return s as MichelsonContractSection<T>;\n }\n }\n throw new MichelsonError(contract, `missing contract section: ${section}`);\n}\n\nexport function contractViews(contract: MichelsonContract): {\n [name: string]: MichelsonContractView;\n} {\n const views: { [name: string]: MichelsonContractView } = {};\n for (const s of contract) {\n if (s.prim === 'view') {\n views[s.args[0].string] = s;\n }\n }\n return views;\n}\n\nfunction isContract(v: Expr): v is MichelsonContract {\n if (Array.isArray(v)) {\n for (const s of v) {\n if ('prim' in s && (s.prim === 'parameter' || s.prim === 'storage' || s.prim === 'code')) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function contractEntryPoint(\n src: MichelsonContract | MichelsonType,\n ep?: string\n): MichelsonType | null {\n ep = ep || '%default';\n const entryPoint = contractEntryPoints(src).find((x) => x[0] === ep);\n\n if (entryPoint !== undefined) {\n return entryPoint[1];\n } else if (ep === '%default') {\n return isContract(src) ? contractSection(src, 'parameter').args[0] : src;\n }\n return null;\n}\n\nfunction isOrType(t: MichelsonType): t is MichelsonTypeOr<[MichelsonType, MichelsonType]> {\n return Array.isArray(t) || t.prim === 'or';\n}\n\nexport function contractEntryPoints(\n src: MichelsonContract | MichelsonType\n): [string, MichelsonType][] {\n if (isContract(src)) {\n const param = contractSection(src, 'parameter');\n const ch = contractEntryPoints(param.args[0]);\n const a = unpackAnnotations(param);\n return a.f ? [[a.f[0], param.args[0]], ...ch] : ch;\n }\n\n if (isOrType(src)) {\n const args = typeArgs(src);\n const getArg = (n: 0 | 1): [string, MichelsonType][] => {\n const a = unpackAnnotations(args[n]);\n if (typeID(args[n]) === 'or') {\n const ch = contractEntryPoints(args[n]);\n return a.f ? [[a.f[0], args[n]], ...ch] : ch;\n }\n return a.f ? [[a.f[0], args[n]]] : [];\n };\n return [...getArg(0), ...getArg(1)];\n }\n return [];\n}\n\n// Contract validation\n\nexport function assertContractValid(\n contract: MichelsonContract,\n ctx?: Context\n): MichelsonReturnType {\n const assertSection = (\n parameter: MichelsonType,\n storage: MichelsonType,\n ret: MichelsonType,\n code: InstructionList\n ): MichelsonReturnType => {\n assertTypeAnnotationsValid(parameter, true);\n assertTypeAnnotationsValid(storage);\n const arg: MichelsonType = {\n prim: 'pair',\n args: [\n { ...parameter, ...{ annots: ['@parameter'] } },\n { ...storage, ...{ annots: ['@storage'] } },\n ],\n };\n const out = functionTypeInternal(code, [arg], { ...ctx, ...{ contract } });\n if ('failed' in out) {\n return out;\n }\n\n try {\n assertStacksEqual(out, [ret]);\n } catch (err) {\n if (err instanceof MichelsonError) {\n throw new MichelsonInstructionError(code, out, err.message);\n } else {\n throw err;\n }\n }\n return out;\n };\n\n const parameter = contractSection(contract, 'parameter').args[0];\n const storage = contractSection(contract, 'storage').args[0];\n const code = contractSection(contract, 'code').args[0];\n const expected: MichelsonType = {\n prim: 'pair',\n args: [{ prim: 'list', args: [{ prim: 'operation' }] }, storage],\n };\n const ret = assertSection(parameter, storage, expected, code);\n\n for (const view of Object.values(contractViews(contract))) {\n assertSection(view.args[1], storage, view.args[2], view.args[3]);\n }\n\n return ret;\n}\n\n// Exported wrapper functions\n\nexport function assertDataValid(d: MichelsonData, t: MichelsonType, ctx?: Context): void {\n assertTypeAnnotationsValid(t);\n assertDataValidInternal(d, t, ctx || null);\n}\n\nexport function functionType(\n inst: MichelsonCode,\n stack: MichelsonType[],\n ctx?: Context\n): MichelsonReturnType {\n for (const t of stack) {\n assertTypeAnnotationsValid(t);\n }\n\n if (ctx?.contract !== undefined) {\n for (const typesec of ['parameter', 'storage'] as const) {\n const sec = contractSection(ctx.contract, typesec).args[0];\n assertTypeAnnotationsValid(sec);\n }\n }\n\n return functionTypeInternal(inst, stack, ctx || null);\n}\n\nexport function assertTypesEqual<T1 extends MichelsonType | MichelsonType[], T2 extends T1>(\n a: T1,\n b: T2,\n field = false\n): void {\n if (Array.isArray(a)) {\n // type guards don't work for parametrized generic types\n for (const v of a as MichelsonType[]) {\n assertTypeAnnotationsValid(v);\n }\n for (const v of b as MichelsonType[]) {\n assertTypeAnnotationsValid(v);\n }\n } else {\n assertTypeAnnotationsValid(a as MichelsonType);\n assertTypeAnnotationsValid(b as MichelsonType);\n }\n assertScalarTypesEqual(a, b, field);\n}\n\nexport function isTypeAnnotationsValid(t: MichelsonType, field = false): boolean {\n try {\n assertTypeAnnotationsValid(t, field);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isContractValid(\n contract: MichelsonContract,\n ctx?: Context\n): MichelsonReturnType | null {\n try {\n return assertContractValid(contract, ctx);\n } catch {\n return null;\n }\n}\n\nexport function isDataValid(d: MichelsonData, t: MichelsonType, ctx?: Context): boolean {\n try {\n assertDataValid(d, t, ctx);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isTypeEqual<T1 extends MichelsonType | MichelsonType[], T2 extends T1>(\n a: T1,\n b: T2,\n field = false\n): boolean {\n try {\n assertTypesEqual(a, b, field);\n return true;\n } catch {\n return false;\n }\n}\n","import {\n MichelsonContract,\n MichelsonContractSection,\n MichelsonType,\n MichelsonData,\n MichelsonCode,\n MichelsonReturnType,\n} from './michelson-types';\nimport {\n assertContractValid,\n contractSection,\n contractEntryPoint,\n assertDataValid,\n assertTypeAnnotationsValid,\n InstructionTrace,\n Context,\n functionType,\n isDataValid,\n contractEntryPoints,\n} from './michelson-typecheck';\nimport { Parser, ParserOptions } from './micheline-parser';\nimport {\n assertMichelsonContract,\n assertMichelsonType,\n assertMichelsonData,\n} from './michelson-validator';\nimport {\n InvalidDataExpressionError,\n InvalidEntrypointError,\n InvalidContractError,\n InvalidTypeExpressionError,\n} from './error';\n\nexport interface ContractOptions extends ParserOptions {\n traceCallback?: (t: InstructionTrace) => void;\n}\n\nexport class Contract {\n private ctx: Context;\n public readonly output: MichelsonReturnType;\n\n constructor(public readonly contract: MichelsonContract, opt?: ContractOptions) {\n this.ctx = { contract, ...opt };\n this.output = assertContractValid(contract, this.ctx);\n }\n\n static parse(src: string | object, opt?: ContractOptions): Contract {\n const p = new Parser(opt);\n const expr = typeof src === 'string' ? p.parseScript(src) : p.parseJSON(src);\n if (expr === null) {\n throw new InvalidContractError('empty contract');\n }\n if (assertMichelsonContract(expr)) {\n return new Contract(expr, opt);\n }\n throw undefined;\n }\n\n static parseTypeExpression(src: string | object, opt?: ParserOptions): MichelsonType {\n const p = new Parser(opt);\n const expr = typeof src === 'string' ? p.parseScript(src) : p.parseJSON(src);\n if (expr === null) {\n throw new InvalidTypeExpressionError('empty type expression');\n }\n // remove assertTypeAnnotationsValid from if block because: () => void || throw error\n if (assertMichelsonType(expr)) {\n assertTypeAnnotationsValid(expr);\n return expr;\n }\n throw undefined;\n }\n\n static parseDataExpression(src: string | object, opt?: ParserOptions): MichelsonData {\n const p = new Parser(opt);\n const expr = typeof src === 'string' ? p.parseScript(src) : p.parseJSON(src);\n if (expr === null) {\n throw new InvalidDataExpressionError('empty data expression');\n }\n if (assertMichelsonData(expr)) {\n return expr;\n }\n throw undefined;\n }\n\n section<T extends 'parameter' | 'storage' | 'code'>(section: T): MichelsonContractSection<T> {\n return contractSection(this.contract, section);\n }\n\n entryPoints(): [string, MichelsonType][] {\n return contractEntryPoints(this.contract);\n }\n\n entryPoint(ep?: string): MichelsonType | null {\n return contractEntryPoint(this.contract, ep);\n }\n\n assertDataValid(d: MichelsonData, t: MichelsonType): void {\n assertDataValid(d, t, this.ctx);\n }\n\n isDataValid(d: MichelsonData, t: MichelsonType): boolean {\n return isDataValid(d, t, this.ctx);\n }\n\n assertParameterValid(ep: string | null, d: MichelsonData): void {\n const t = this.entryPoint(ep || undefined);\n if (t === null) {\n throw new InvalidEntrypointError(ep?.toString());\n }\n this.assertDataValid(d, t);\n }\n\n isParameterValid(ep: string | null, d: MichelsonData): boolean {\n try {\n this.assertParameterValid(ep, d);\n return true;\n } catch {\n return false;\n }\n }\n\n functionType(inst: MichelsonCode, stack: MichelsonType[]): MichelsonReturnType {\n return functionType(inst, stack, this.ctx);\n }\n}\n\nexport const dummyContract = new Contract([\n { prim: 'parameter', args: [{ prim: 'unit' }] },\n { prim: 'storage', args: [{ prim: 'unit' }] },\n {\n prim: 'code',\n args: [[{ prim: 'CAR' }, { prim: 'NIL', args: [{ prim: 'operation' }] }, { prim: 'PAIR' }]],\n },\n]);\n","import { sourceReference, Expr } from './micheline';\nimport { InstructionTrace, MichelsonInstructionError } from './michelson-typecheck';\nimport { emitMicheline } from './micheline-emitter';\nimport { unpackAnnotations, MichelsonError, MichelsonTypeError } from './utils';\nimport { MichelsonReturnType } from './michelson-types';\n\nexport function formatStack(s: MichelsonReturnType): string {\n if ('failed' in s) {\n return `[FAILED: ${emitMicheline(s.failed)}]`;\n }\n\n return s\n .map((v, i) => {\n const ann = unpackAnnotations(v);\n return `[${i}${ann.v ? '/' + ann.v[0] : ''}]: ${emitMicheline(v)}`;\n })\n .join('\\n');\n}\n\nexport function traceDumpFunc(\n blocks: boolean,\n cb: (s: string) => void\n): (v: InstructionTrace) => void {\n return (v: InstructionTrace) => {\n if (Array.isArray(v) && !blocks) {\n return;\n }\n const macro = v.op[sourceReference]?.macro;\n\n const msg = `${macro ? 'Macro' : 'Op'}: ${\n macro ? emitMicheline(macro, undefined, true) + ' / ' : ''\n }${emitMicheline(v.op)}\nInput:\n${formatStack(v.in)}\nOutput:\n${formatStack(v.out)}\n`;\n cb(msg);\n };\n}\n\nexport function formatError(err: MichelsonError): string {\n if (err instanceof MichelsonInstructionError) {\n const macro = err.val[sourceReference]?.macro;\n return `${macro ? 'Macro' : 'Op'}: ${\n macro ? emitMicheline(macro, undefined, true) + ' / ' : ''\n }${emitMicheline(err.val)}\nStack:\n${formatStack(err.stackState)}\n`;\n } else if (err instanceof MichelsonTypeError) {\n const type = Array.isArray(err.val)\n ? '[' + (err.val as Expr[]).map((v, i) => `[${i}]: ${emitMicheline(v)}`).join('; ') + ']'\n : emitMicheline(err.val);\n\n return `Type: ${type}\n${\n err.data\n ? `Data: ${emitMicheline(err.data)}\n`\n : ''\n}\n`;\n } else {\n return `Value: ${emitMicheline(err.val)}`;\n }\n}\n","\n// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!\nexport const VERSION = {\n \"commitHash\": \"c050a62135022aa2e61ba6ef72a98f9c89f1682c\",\n \"version\": \"16.0.1\"\n};\n"],"names":["assertArgs"],"mappings":"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"}
1
+ {"version":3,"file":"taquito-michel-codec.es6.js","sources":["../src/micheline.ts","../src/scan.ts","../src/michelson-types.ts","../src/macros.ts","../src/global-constants.ts","../src/micheline-parser.ts","../src/micheline-emitter.ts","../src/base58.ts","../src/error.ts","../src/utils.ts","../src/michelson-validator.ts","../src/binary.ts","../src/michelson-typecheck.ts","../src/michelson-contract.ts","../src/formatters.ts","../src/version.ts"],"sourcesContent":["// Michelson abstract syntax tree types https://tezos.gitlab.io/whitedoc/michelson.html#concrete-syntax\n\nexport type SourceReference = {\n first: number;\n last: number;\n macro?: Expr;\n globalConstant?: Expr;\n};\n\nexport const sourceReference: unique symbol = Symbol('source_reference');\n\nexport interface Node {\n [sourceReference]?: SourceReference;\n}\n\n/**\n * An AST node representing Michelson string literal.\n */\nexport interface StringLiteral extends Node {\n string: string;\n}\n\n/**\n * An AST node representing Michelson int literal.\n */\nexport interface IntLiteral<T extends string = string> extends Node {\n int: T;\n}\n\n/**\n * An AST node representing Michelson bytes literal.\n */\nexport interface BytesLiteral extends Node {\n bytes: string;\n}\n\n/**\n * An AST node representing Michelson primitive.\n */\nexport interface Prim<PT extends string = string, AT extends Expr[] = Expr[]> extends Node {\n prim: PT;\n args?: AT;\n annots?: string[];\n}\n\nexport type List<T extends Expr> = T[] & Node;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface ExprList extends List<Expr> {}\n\n/**\n * An AST node representing valid Michelson expression. Directly corresponds to JSON-encoded Michelson node\n */\n\nexport type Expr = Prim | StringLiteral | IntLiteral | BytesLiteral | ExprList;\n","/**\n * @category Error\n * @description Error that indicates a failure when performing the scan step when parsing Michelson\n */\nexport class ScanError extends Error {\n constructor(public src: string, public idx: number, message?: string) {\n super(message);\n Object.setPrototypeOf(this, ScanError.prototype);\n }\n}\n\nexport enum Literal {\n Comment,\n Number,\n String,\n Bytes,\n Ident,\n}\n\nexport type TokenType = '(' | ')' | '{' | '}' | ';' | Literal;\n\nconst isSpace = new RegExp('\\\\s');\nconst isIdentStart = new RegExp('[:@%_A-Za-z]');\nconst isIdent = new RegExp('[@%_\\\\.A-Za-z0-9]');\nconst isDigit = new RegExp('[0-9]');\nconst isHex = new RegExp('[0-9a-fA-F]');\n\nexport interface Token {\n t: TokenType;\n v: string;\n first: number;\n last: number;\n}\n\nexport function* scan(src: string, scanComments = false): Generator<Token, void> {\n let i = 0;\n while (i < src.length) {\n // Skip space\n while (i < src.length && isSpace.test(src[i])) {\n i++;\n }\n if (i === src.length) {\n return;\n }\n\n const s = src[i];\n const start = i;\n if (isIdentStart.test(s)) {\n // Identifier\n i++;\n while (i < src.length && isIdent.test(src[i])) {\n i++;\n }\n yield { t: Literal.Ident, v: src.slice(start, i), first: start, last: i };\n } else if (src.length - i > 1 && src.substr(i, 2) === '0x') {\n // Bytes\n i += 2;\n while (i < src.length && isHex.test(src[i])) {\n i++;\n }\n if (((i - start) & 1) !== 0) {\n throw new ScanError(src, i, 'Bytes literal length is expected to be power of two');\n }\n yield { t: Literal.Bytes, v: src.slice(start, i), first: start, last: i };\n } else if (isDigit.test(s) || s === '-') {\n // Number\n if (s === '-') {\n i++;\n }\n const ii = i;\n while (i < src.length && isDigit.test(src[i])) {\n i++;\n }\n if (ii === i) {\n throw new ScanError(src, i, 'Number literal is too short');\n }\n yield { t: Literal.Number, v: src.slice(start, i), first: start, last: i };\n } else if (s === '\"') {\n // String\n i++;\n let esc = false;\n for (; i < src.length && (esc || src[i] !== '\"'); i++) {\n if (!esc && src[i] === '\\\\') {\n esc = true;\n } else {\n esc = false;\n }\n }\n if (i === src.length) {\n throw new ScanError(src, i, 'Unterminated string literal');\n }\n i++;\n yield { t: Literal.String, v: src.slice(start, i), first: start, last: i };\n } else if (s === '#') {\n // Comment\n i++;\n while (i < src.length && src[i] !== '\\n') {\n i++;\n }\n if (scanComments) {\n yield { t: Literal.Comment, v: src.slice(start, i), first: start, last: i };\n }\n } else if (src.length - i > 1 && src.substr(i, 2) === '/*') {\n // C style comment\n i += 2;\n while (i < src.length && !(src.length - i > 1 && src.substr(i, 2) === '*/')) {\n i++;\n }\n if (i === src.length) {\n throw new ScanError(src, i, 'Unterminated C style comment');\n }\n i += 2;\n if (scanComments) {\n yield { t: Literal.Comment, v: src.slice(start, i), first: start, last: i };\n }\n } else if (s === '(' || s === ')' || s === '{' || s === '}' || s === ';') {\n i++;\n yield { t: s, v: s, first: start, last: i };\n } else {\n throw new ScanError(src, i, `Invalid character at offset ${i}: \\`${s}'`);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-interface */\nimport { Prim, Expr, IntLiteral, StringLiteral, BytesLiteral, List, Node } from './micheline';\n\ninterface Prim0<PT extends string = string> extends Prim<PT> {\n args?: never;\n}\ninterface PrimX<PT extends string = string, AT extends Expr[] = Expr[]> extends Prim<PT, AT> {\n args: AT;\n}\n\n// Instructions\ntype MichelsonNoArgInstructionID =\n | 'ABS'\n | 'ADD'\n | 'ADDRESS'\n | 'AMOUNT'\n | 'AND'\n | 'APPLY'\n | 'BALANCE'\n | 'BLAKE2B'\n | 'CAR'\n | 'CDR'\n | 'CHAIN_ID'\n | 'CHECK_SIGNATURE'\n | 'COMPARE'\n | 'CONCAT'\n | 'CONS'\n | 'EDIV'\n | 'EQ'\n | 'EXEC'\n | 'FAILWITH'\n | 'GE'\n | 'GET_AND_UPDATE'\n | 'GT'\n | 'HASH_KEY'\n | 'IMPLICIT_ACCOUNT'\n | 'INT'\n | 'ISNAT'\n | 'JOIN_TICKETS'\n | 'KECCAK'\n | 'LE'\n | 'LEVEL'\n | 'LSL'\n | 'LSR'\n | 'LT'\n | 'MEM'\n | 'MUL'\n | 'NEG'\n | 'NEQ'\n | 'NEVER'\n | 'NOT'\n | 'NOW'\n | 'OR'\n | 'PACK'\n | 'PAIRING_CHECK'\n | 'READ_TICKET'\n | 'SAPLING_VERIFY_UPDATE'\n | 'SELF'\n | 'SELF_ADDRESS'\n | 'SENDER'\n | 'SET_DELEGATE'\n | 'SHA256'\n | 'SHA3'\n | 'SHA512'\n | 'SIZE'\n | 'SLICE'\n | 'SOME'\n | 'SOURCE'\n | 'SPLIT_TICKET'\n | 'SUB'\n | 'SUB_MUTEZ'\n | 'SWAP'\n | 'TICKET'\n | 'TICKET_DEPRECATED'\n | 'TOTAL_VOTING_POWER'\n | 'TRANSFER_TOKENS'\n | 'UNIT'\n | 'VOTING_POWER'\n | 'XOR'\n | 'RENAME'\n | 'OPEN_CHEST'\n | 'MIN_BLOCK_TIME'\n | 'BYTES'\n | 'NAT';\n\ntype MichelsonRegularInstructionID =\n | 'CONTRACT'\n | 'CREATE_CONTRACT'\n | 'DIG'\n | 'DIP'\n | 'DROP'\n | 'DUG'\n | 'DUP'\n | 'EMPTY_BIG_MAP'\n | 'EMPTY_MAP'\n | 'EMPTY_SET'\n | 'GET'\n | 'IF'\n | 'IF_CONS'\n | 'IF_LEFT'\n | 'IF_NONE'\n | 'ITER'\n | 'LAMBDA'\n | 'LAMBDA_REC'\n | 'LEFT'\n | 'LOOP'\n | 'LOOP_LEFT'\n | 'MAP'\n | 'NIL'\n | 'NONE'\n | 'PAIR'\n | 'PUSH'\n | 'RIGHT'\n | 'SAPLING_EMPTY_STATE'\n | 'UNPACK'\n | 'UNPAIR'\n | 'UPDATE'\n | 'CAST'\n | 'VIEW'\n | 'EMIT'\n // legacy\n | 'CREATE_ACCOUNT'\n | 'STEPS_TO_QUOTA';\n\nexport type MichelsonInstructionID = MichelsonNoArgInstructionID | MichelsonRegularInstructionID;\ntype InstrPrim<PT extends MichelsonInstructionID, AT extends Expr[]> = Prim<PT, AT>;\ntype Instr0<PT extends MichelsonNoArgInstructionID> = Prim0<PT>;\ntype InstrX<PT extends MichelsonRegularInstructionID, AT extends Expr[]> = PrimX<PT, AT>;\n\nexport type MichelsonCode = InstructionList | MichelsonInstruction;\nexport interface InstructionList extends List<MichelsonCode> {}\n\nexport type MichelsonNoArgInstruction = Instr0<MichelsonNoArgInstructionID>;\nexport type MichelsonInstruction =\n | MichelsonNoArgInstruction\n | InstrX<'DIG' | 'DUG' | 'SAPLING_EMPTY_STATE', [IntLiteral]>\n | InstrX<'NONE' | 'LEFT' | 'RIGHT' | 'NIL' | 'CAST', [MichelsonType]>\n | InstrX<'IF_NONE' | 'IF_LEFT' | 'IF_CONS' | 'IF', [InstructionList, InstructionList]>\n | InstrX<'MAP' | 'ITER' | 'LOOP' | 'LOOP_LEFT' | 'DIP', [InstructionList]>\n | InstrX<'UNPACK', [MichelsonType]>\n | InstrX<'CONTRACT', [MichelsonType]>\n | InstrX<'CREATE_CONTRACT', [MichelsonContract]>\n | InstrX<'PUSH', [MichelsonType, MichelsonData]>\n | InstrX<'EMPTY_SET', [MichelsonType]>\n | InstrX<'EMPTY_MAP', [MichelsonType, MichelsonType]>\n | InstrX<'EMPTY_BIG_MAP', [MichelsonType, MichelsonType]>\n | InstrX<'LAMBDA' | 'LAMBDA_REC', [MichelsonType, MichelsonType, InstructionList]>\n | InstrX<'DIP', [IntLiteral, InstructionList] | [InstructionList]>\n | InstrX<'VIEW', [StringLiteral, MichelsonType]>\n | InstrX<'EMIT', [MichelsonType]>\n | InstrPrim<'DROP' | 'PAIR' | 'UNPAIR' | 'DUP' | 'GET' | 'UPDATE', [IntLiteral]>;\n\n// Types\n\nexport type MichelsonSimpleComparableTypeID =\n | 'string'\n | 'nat'\n | 'int'\n | 'bytes'\n | 'bool'\n | 'mutez'\n | 'key_hash'\n | 'address'\n | 'timestamp'\n | 'never'\n | 'key'\n | 'unit'\n | 'signature'\n | 'chain_id'\n | 'tx_rollup_l2_address';\n\nexport type MichelsonTypeID =\n | MichelsonSimpleComparableTypeID\n | 'option'\n | 'list'\n | 'set'\n | 'contract'\n | 'operation'\n | 'pair'\n | 'or'\n | 'lambda'\n | 'map'\n | 'big_map'\n | 'sapling_transaction'\n | 'sapling_transaction_deprecated'\n | 'sapling_state'\n | 'ticket'\n | 'bls12_381_g1'\n | 'bls12_381_g2'\n | 'bls12_381_fr'\n | 'chest_key'\n | 'chest';\n\ntype Type0<PT extends MichelsonTypeID> = Prim0<PT>;\ntype TypeX<PT extends MichelsonTypeID, AT extends Expr[]> = PrimX<PT, AT>;\n\n// Michelson types\n\nexport const refContract: unique symbol = Symbol('ref_contract');\nexport interface MichelsonTypeAddress extends Type0<'address'> {\n [refContract]?: MichelsonTypeContract<MichelsonType>;\n}\n\nexport type MichelsonTypeInt = Type0<'int'>;\nexport type MichelsonTypeNat = Type0<'nat'>;\nexport type MichelsonTypeString = Type0<'string'>;\nexport type MichelsonTypeBytes = Type0<'bytes'>;\nexport type MichelsonTypeMutez = Type0<'mutez'>;\nexport type MichelsonTypeBool = Type0<'bool'>;\nexport type MichelsonTypeKeyHash = Type0<'key_hash'>;\nexport type MichelsonTypeTimestamp = Type0<'timestamp'>;\nexport type MichelsonTypeKey = Type0<'key'>;\nexport type MichelsonTypeUnit = Type0<'unit'>;\nexport type MichelsonTypeSignature = Type0<'signature'>;\nexport type MichelsonTypeOperation = Type0<'operation'>;\nexport type MichelsonTypeChainID = Type0<'chain_id'>;\nexport type MichelsonTypeNever = Type0<'never'>;\nexport type MichelsonTypeBLS12_381_G1 = Type0<'bls12_381_g1'>;\nexport type MichelsonTypeBLS12_381_G2 = Type0<'bls12_381_g2'>;\nexport type MichelsonTypeBLS12_381_FR = Type0<'bls12_381_fr'>;\nexport type MichelsonTypeChestKey = Type0<'chest_key'>;\nexport type MichelsonTypeChest = Type0<'chest'>;\n\ntype TypeList<T extends MichelsonType[]> = T & Node;\nexport type MichelsonTypePair<T extends MichelsonType[]> = TypeX<'pair', T> | TypeList<T>;\n\nexport interface MichelsonTypeOption<T extends MichelsonType> extends TypeX<'option', [T]> {}\nexport interface MichelsonTypeList<T extends MichelsonType> extends TypeX<'list', [T]> {}\nexport interface MichelsonTypeContract<T extends MichelsonType> extends TypeX<'contract', [T]> {}\nexport interface MichelsonTypeOr<T extends [MichelsonType, MichelsonType]> extends TypeX<'or', T> {}\nexport interface MichelsonTypeLambda<Arg extends MichelsonType, Ret extends MichelsonType>\n extends TypeX<'lambda', [Arg, Ret]> {}\n\nexport interface MichelsonTypeSet<T extends MichelsonType> extends TypeX<'set', [T]> {}\nexport interface MichelsonTypeMap<K extends MichelsonType, V extends MichelsonType>\n extends TypeX<'map', [K, V]> {}\nexport interface MichelsonTypeBigMap<K extends MichelsonType, V extends MichelsonType>\n extends TypeX<'big_map', [K, V]> {}\nexport interface MichelsonTypeSaplingState<S extends string = string>\n extends TypeX<'sapling_state', [IntLiteral<S>]> {}\nexport interface MichelsonTypeSaplingTransaction<S extends string = string>\n extends TypeX<'sapling_transaction', [IntLiteral<S>]> {}\nexport interface MichelsonTypeTicket<T extends MichelsonType> extends TypeX<'ticket', [T]> {}\n\nexport type MichelsonType<T extends MichelsonTypeID = MichelsonTypeID> = T extends 'int'\n ? MichelsonTypeInt\n : T extends 'nat'\n ? MichelsonTypeNat\n : T extends 'string'\n ? MichelsonTypeString\n : T extends 'bytes'\n ? MichelsonTypeBytes\n : T extends 'mutez'\n ? MichelsonTypeMutez\n : T extends 'bool'\n ? MichelsonTypeBool\n : T extends 'key_hash'\n ? MichelsonTypeKeyHash\n : T extends 'timestamp'\n ? MichelsonTypeTimestamp\n : T extends 'address'\n ? MichelsonTypeAddress\n : T extends 'key'\n ? MichelsonTypeKey\n : T extends 'unit'\n ? MichelsonTypeUnit\n : T extends 'signature'\n ? MichelsonTypeSignature\n : T extends 'operation'\n ? MichelsonTypeOperation\n : T extends 'chain_id'\n ? MichelsonTypeChainID\n : T extends 'option'\n ? MichelsonTypeOption<MichelsonType>\n : T extends 'list'\n ? MichelsonTypeList<MichelsonType>\n : T extends 'contract'\n ? MichelsonTypeContract<MichelsonType>\n : T extends 'ticket'\n ? MichelsonTypeTicket<MichelsonType>\n : T extends 'pair'\n ? MichelsonTypePair<MichelsonType[]>\n : T extends 'or'\n ? MichelsonTypeOr<[MichelsonType, MichelsonType]>\n : T extends 'lambda'\n ? MichelsonTypeLambda<MichelsonType, MichelsonType>\n : T extends 'set'\n ? MichelsonTypeSet<MichelsonType>\n : T extends 'map'\n ? MichelsonTypeMap<MichelsonType, MichelsonType>\n : T extends 'big_map'\n ? MichelsonTypeBigMap<MichelsonType, MichelsonType>\n : T extends 'never'\n ? MichelsonTypeNever\n : T extends 'bls12_381_g1'\n ? MichelsonTypeBLS12_381_G1\n : T extends 'bls12_381_g2'\n ? MichelsonTypeBLS12_381_G2\n : T extends 'bls12_381_fr'\n ? MichelsonTypeBLS12_381_FR\n : T extends 'sapling_transaction'\n ? MichelsonTypeSaplingTransaction\n : T extends 'sapling_state'\n ? MichelsonTypeSaplingState\n : T extends 'chest_key'\n ? MichelsonTypeChestKey\n : MichelsonTypeChest;\n\n// Data\n\nexport type MichelsonDataID =\n | 'Unit'\n | 'True'\n | 'False'\n | 'None'\n | 'Pair'\n | 'Left'\n | 'Right'\n | 'Some'\n | 'Lambda_rec';\n\ntype Data0<PT extends MichelsonDataID> = Prim0<PT>;\ntype DataX<PT extends MichelsonDataID, AT extends MichelsonData[]> = PrimX<PT, AT>;\n\nexport type MichelsonDataOption = DataX<'Some', [MichelsonData]> | Data0<'None'>;\nexport type MichelsonDataOr = DataX<'Left' | 'Right', [MichelsonData]>;\ntype DataList<T extends MichelsonData[]> = T & Node;\nexport type MichelsonDataPair<T extends MichelsonData[]> = DataX<'Pair', T> | DataList<T>;\nexport type MichelsonMapElt = PrimX<'Elt', [MichelsonData, MichelsonData]>;\nexport type MichelsonMapEltList = List<MichelsonMapElt>;\nexport type MichelsonLambdaRec = DataX<'Lambda_rec', [InstructionList]>;\n\nexport type MichelsonData =\n | IntLiteral\n | StringLiteral\n | BytesLiteral\n | Data0<'Unit' | 'True' | 'False'>\n | MichelsonDataOption\n | MichelsonDataOr\n | DataList<MichelsonData[]>\n | MichelsonDataPair<MichelsonData[]>\n | InstructionList\n | MichelsonMapEltList\n | MichelsonLambdaRec;\n\n// Top level script sections\n\nexport type MichelsonSectionID = 'parameter' | 'storage' | 'code' | 'view';\ntype SectionPrim<PT extends MichelsonSectionID, AT extends Expr[]> = PrimX<PT, AT>;\n\nexport type MichelsonContractParameter = SectionPrim<'parameter', [MichelsonType]>;\nexport type MichelsonContractStorage = SectionPrim<'storage', [MichelsonType]>;\nexport type MichelsonContractCode = SectionPrim<'code', [InstructionList]>;\nexport type MichelsonContractView = SectionPrim<\n 'view',\n [StringLiteral, MichelsonType, MichelsonType, InstructionList]\n>;\n\nexport type MichelsonContract = MichelsonContractSection[];\n\nexport type MichelsonContractSection<T extends MichelsonSectionID = MichelsonSectionID> =\n T extends 'parameter'\n ? MichelsonContractParameter\n : T extends 'storage'\n ? MichelsonContractStorage\n : T extends 'view'\n ? MichelsonContractView\n : MichelsonContractCode;\n\n// Code analysis types\nexport interface MichelsonTypeFailed {\n failed: MichelsonType;\n level: number;\n}\n\nexport type MichelsonReturnType = MichelsonType[] | MichelsonTypeFailed;\n\nexport enum Protocol {\n Ps9mPmXa = 'Ps9mPmXaRzmzk35gbAYNCAw6UXdE2qoABTHbN2oEEc1qM7CwT9P',\n PtCJ7pwo = 'PtCJ7pwoxe8JasnHY8YonnLYjcVHmhiARPJvqcC6VfHT5s8k8sY',\n PsYLVpVv = 'PsYLVpVvgbLhAhoqAkMFUo6gudkJ9weNXhUYCiLDzcUpFpkk8Wt',\n PsddFKi3 = 'PsddFKi32cMJ2qPjf43Qv5GDWLDPZb3T3bF6fLKiF5HtvHNU7aP',\n Pt24m4xi = 'Pt24m4xiPbLDhVgVfABUjirbmda3yohdN82Sp9FeuAXJ4eV9otd',\n PsBABY5H = 'PsBABY5HQTSkA4297zNHfsZNKtxULfL18y95qb3m53QJiXGmrbU',\n PsBabyM1 = 'PsBabyM1eUXZseaJdmXFApDSBqj8YBfwELoxZHHW77EMcAbbwAS',\n PsCARTHA = 'PsCARTHAGazKbHtnKfLzQg3kms52kSRpgnDY982a9oYsSXRLQEb',\n PsDELPH1 = 'PsDELPH1Kxsxt8f9eWbxQeRxkjfbxoqM52jvs5Y5fBxWWh4ifpo',\n PtEdoTez = 'PtEdoTezd3RHSC31mpxxo1npxFjoWWcFgQtxapi51Z8TLu6v6Uq',\n PtEdo2Zk = 'PtEdo2ZkT9oKpimTah6x2embF25oss54njMuPzkJTEi5RqfdZFA',\n PsFLoren = 'PsFLorenaUUuikDWvMDr6fGBRG8kt3e3D3fHoXK1j1BFRxeSH4i',\n PsFLorena = 'PsFLorenaUUuikDWvMDr6fGBRG8kt3e3D3fHoXK1j1BFRxeSH4i',\n PtGRANAD = 'PtGRANADsDU8R9daYKAgWnQYAJ64omN1o3KMGVCykShA97vQbvV',\n PtGRANADs = 'PtGRANADsDU8R9daYKAgWnQYAJ64omN1o3KMGVCykShA97vQbvV',\n PtHangzH = 'PtHangzHogokSuiMHemCuowEavgYTP8J5qQ9fQS793MHYFpCY3r',\n PtHangz2 = 'PtHangz2aRngywmSRGGvrcTyMbbdpWdpFKuS4uMWxg2RaH9i1qx',\n PsiThaCa = 'PsiThaCaT47Zboaw71QWScM8sXeMM7bbQFncK9FLqYc6EKdpjVP',\n Psithaca2 = 'Psithaca2MLRFYargivpo7YvUr7wUDqyxrdhC5CQq78mRvimz6A',\n PtJakarta = 'PtJakartaiDz69SfDDLXJSiuZqTSeSKRDbKVZC8MNzJnvRjvnGw',\n PtJakart2 = 'PtJakart2xVj7pYXJBXrqHgd82rdkLey5ZeeGwDgPp9rhQUbSqY',\n PtKathman = 'PtKathmankSpLLDALzWw7CGD2j2MtyveTwboEYokqUCP4a1LxMg',\n PtLimaPtL = 'PtLimaPtLMwfNinJi9rCfDPWea8dFgTZ1MeJ9f1m2SRic6ayiwW',\n PtMumbaii = 'PtMumbaiiFFEGbew1rRjzSPyzRbA51Tm3RVZL5suHPxSZYDhCEc',\n PtMumbai2 = 'PtMumbai2TmsJHNGRkD8v8YDbtao7BLUC3wjASn1inAKLFCjaH1',\n ProtoALpha = 'ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK', // temporary protocol hash\n}\n\nexport const DefaultProtocol = Protocol.Psithaca2;\n\nexport type ProtocolID = `${Protocol}`;\n\nconst protoLevel: Record<ProtocolID, number> = {\n Ps9mPmXaRzmzk35gbAYNCAw6UXdE2qoABTHbN2oEEc1qM7CwT9P: 0,\n PtCJ7pwoxe8JasnHY8YonnLYjcVHmhiARPJvqcC6VfHT5s8k8sY: 1,\n PsYLVpVvgbLhAhoqAkMFUo6gudkJ9weNXhUYCiLDzcUpFpkk8Wt: 2,\n PsddFKi32cMJ2qPjf43Qv5GDWLDPZb3T3bF6fLKiF5HtvHNU7aP: 3,\n Pt24m4xiPbLDhVgVfABUjirbmda3yohdN82Sp9FeuAXJ4eV9otd: 4,\n PsBABY5HQTSkA4297zNHfsZNKtxULfL18y95qb3m53QJiXGmrbU: 5,\n PsBabyM1eUXZseaJdmXFApDSBqj8YBfwELoxZHHW77EMcAbbwAS: 5,\n PsCARTHAGazKbHtnKfLzQg3kms52kSRpgnDY982a9oYsSXRLQEb: 6,\n PsDELPH1Kxsxt8f9eWbxQeRxkjfbxoqM52jvs5Y5fBxWWh4ifpo: 7,\n PtEdoTezd3RHSC31mpxxo1npxFjoWWcFgQtxapi51Z8TLu6v6Uq: 8,\n PtEdo2ZkT9oKpimTah6x2embF25oss54njMuPzkJTEi5RqfdZFA: 8,\n PsFLorenaUUuikDWvMDr6fGBRG8kt3e3D3fHoXK1j1BFRxeSH4i: 9,\n PtGRANADsDU8R9daYKAgWnQYAJ64omN1o3KMGVCykShA97vQbvV: 10,\n PtHangzHogokSuiMHemCuowEavgYTP8J5qQ9fQS793MHYFpCY3r: 11,\n PtHangz2aRngywmSRGGvrcTyMbbdpWdpFKuS4uMWxg2RaH9i1qx: 11,\n PsiThaCaT47Zboaw71QWScM8sXeMM7bbQFncK9FLqYc6EKdpjVP: 12,\n Psithaca2MLRFYargivpo7YvUr7wUDqyxrdhC5CQq78mRvimz6A: 12,\n PtJakartaiDz69SfDDLXJSiuZqTSeSKRDbKVZC8MNzJnvRjvnGw: 13,\n PtJakart2xVj7pYXJBXrqHgd82rdkLey5ZeeGwDgPp9rhQUbSqY: 13,\n PtKathmankSpLLDALzWw7CGD2j2MtyveTwboEYokqUCP4a1LxMg: 14,\n PtLimaPtLMwfNinJi9rCfDPWea8dFgTZ1MeJ9f1m2SRic6ayiwW: 15,\n PtMumbaiiFFEGbew1rRjzSPyzRbA51Tm3RVZL5suHPxSZYDhCEc: 16,\n PtMumbai2TmsJHNGRkD8v8YDbtao7BLUC3wjASn1inAKLFCjaH1: 16,\n ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK: 17,\n};\n\nexport function ProtoGreaterOfEqual(a: ProtocolID, b: ProtocolID): boolean {\n return protoLevel[a] >= protoLevel[b];\n}\n\nexport function ProtoInferiorTo(a: ProtocolID, b: ProtocolID): boolean {\n return protoLevel[a] < protoLevel[b];\n}\n\nexport interface ProtocolOptions {\n protocol?: ProtocolID;\n}\n","import { Prim, Expr, IntLiteral } from './micheline';\nimport { DefaultProtocol, Protocol, ProtocolOptions, ProtoInferiorTo } from './michelson-types';\nimport { Tuple, NoArgs, ReqArgs, NoAnnots } from './utils';\n\n/**\n * @category Error\n * @description Indicates that an error has occurred preventing macros from being expanded in a plain Michelson input\n */\nexport class MacroError extends Error {\n constructor(public prim: Prim, message?: string) {\n super(message);\n Object.setPrototypeOf(this, MacroError.prototype);\n }\n}\n\nfunction assertArgs<N extends number>(\n ex: Prim,\n n: N\n): ex is N extends 0 ? NoArgs<Prim<string>> : ReqArgs<Prim<string, Tuple<N, Expr>>> {\n if ((n === 0 && ex.args === undefined) || ex.args?.length === n) {\n return true;\n }\n throw new MacroError(ex, `macro ${ex.prim} expects ${n} arguments, was given ${ex.args?.length}`);\n}\n\nfunction assertNoAnnots(ex: Prim): ex is NoAnnots<Prim> {\n if (ex.annots === undefined) {\n return true;\n }\n throw new MacroError(ex, `unexpected annotation on macro ${ex.prim}: ${ex.annots}`);\n}\n\nfunction assertIntArg(ex: Prim, arg: Expr): arg is IntLiteral {\n if ('int' in arg) {\n return true;\n }\n throw new MacroError(ex, `macro ${ex.prim} expects int argument`);\n}\n\ntype PT = [number, [string | null, string | null]];\n\nfunction parsePairUnpairExpr(\n p: Prim,\n expr: string,\n annotations: string[],\n agg: (l: PT[] | undefined, r: PT[] | undefined, top: PT) => PT[]\n): { r: PT[]; n: number; an: number } {\n let i = 0;\n let ai = 0;\n const ann: [string | null, string | null] = [null, null];\n\n // Left expression\n let lexpr: PT[] | undefined;\n if (i === expr.length) {\n throw new MacroError(p, `unexpected end: ${p.prim}`);\n }\n let c = expr[i++];\n switch (c) {\n case 'P': {\n const { r, n, an } = parsePairUnpairExpr(p, expr.slice(i), annotations.slice(ai), agg);\n lexpr = r;\n i += n;\n ai += an;\n break;\n }\n case 'A':\n if (ai !== annotations.length) {\n ann[0] = annotations[ai++];\n }\n break;\n default:\n throw new MacroError(p, `${p.prim}: unexpected character: ${c}`);\n }\n\n // Right expression\n let rexpr: PT[] | undefined;\n if (i === expr.length) {\n throw new MacroError(p, `unexpected end: ${p.prim}`);\n }\n c = expr[i++];\n switch (c) {\n case 'P': {\n const { r, n, an } = parsePairUnpairExpr(p, expr.slice(i), annotations.slice(ai), agg);\n rexpr = r.map<PT>(([v, a]) => [v + 1, a]);\n i += n;\n ai += an;\n break;\n }\n case 'I':\n if (ai !== annotations.length) {\n ann[1] = annotations[ai++];\n }\n break;\n default:\n throw new MacroError(p, `${p.prim}: unexpected character: ${c}`);\n }\n\n return { r: agg(lexpr, rexpr, [0, ann]), n: i, an: ai };\n}\n\nfunction parseSetMapCadr(p: Prim, expr: string, vann: string[], term: { a: Expr; d: Expr }): Expr {\n const c = expr[0];\n switch (c) {\n case 'A':\n return expr.length > 1\n ? [\n { prim: 'DUP' },\n {\n prim: 'DIP',\n args: [\n [{ prim: 'CAR', annots: ['@%%'] }, parseSetMapCadr(p, expr.slice(1), [], term)],\n ],\n },\n { prim: 'CDR', annots: ['@%%'] },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: ['%@', '%@', ...vann] },\n ]\n : term.a;\n\n case 'D':\n return expr.length > 1\n ? [\n { prim: 'DUP' },\n {\n prim: 'DIP',\n args: [\n [{ prim: 'CDR', annots: ['@%%'] }, parseSetMapCadr(p, expr.slice(1), [], term)],\n ],\n },\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', '%@', ...vann] },\n ]\n : term.d;\n\n default:\n throw new MacroError(p, `${p.prim}: unexpected character: ${c}`);\n }\n}\n\nfunction trimLast<T>(a: T[], v: T): T[] {\n let l = a.length;\n while (l > 0 && a[l - 1] === v) {\n l--;\n }\n return a.slice(0, l);\n}\n\nfunction filterAnnotations(a?: string[]): {\n fields: string[];\n rest: string[];\n} {\n const fields: string[] = [];\n const rest: string[] = [];\n if (a !== undefined) {\n for (const v of a) {\n (v.length !== 0 && v[0] === '%' ? fields : rest).push(v);\n }\n }\n return { fields, rest };\n}\n\nfunction mkPrim({ prim, annots, args }: Prim): Prim {\n return {\n prim,\n ...(annots && { annots }),\n ...(args && { args }),\n };\n}\n\nconst pairRe = /^P[PAI]{3,}R$/;\nconst unpairRe = /^UNP[PAI]{2,}R$/;\nconst cadrRe = /^C[AD]{2,}R$/;\nconst setCadrRe = /^SET_C[AD]+R$/;\nconst mapCadrRe = /^MAP_C[AD]+R$/;\nconst diipRe = /^DI{2,}P$/;\nconst duupRe = /^DU+P$/;\n\nexport function expandMacros(ex: Prim, opt?: ProtocolOptions): Expr {\n const proto = opt?.protocol || DefaultProtocol;\n\n function mayRename(annots?: string[]): Prim[] {\n return annots !== undefined ? [{ prim: 'RENAME', annots }] : [];\n }\n\n switch (ex.prim) {\n // Compare\n case 'CMPEQ':\n case 'CMPNEQ':\n case 'CMPLT':\n case 'CMPGT':\n case 'CMPLE':\n case 'CMPGE':\n if (assertArgs(ex, 0)) {\n return [{ prim: 'COMPARE' }, mkPrim({ prim: ex.prim.slice(3), annots: ex.annots })];\n }\n break;\n\n case 'IFEQ':\n case 'IFNEQ':\n case 'IFLT':\n case 'IFGT':\n case 'IFLE':\n case 'IFGE':\n if (assertArgs(ex, 2)) {\n return [\n { prim: ex.prim.slice(2) },\n mkPrim({ prim: 'IF', annots: ex.annots, args: ex.args }),\n ];\n }\n break;\n\n case 'IFCMPEQ':\n case 'IFCMPNEQ':\n case 'IFCMPLT':\n case 'IFCMPGT':\n case 'IFCMPLE':\n case 'IFCMPGE':\n if (assertArgs(ex, 2)) {\n return [\n { prim: 'COMPARE' },\n { prim: ex.prim.slice(5) },\n mkPrim({ prim: 'IF', annots: ex.annots, args: ex.args }),\n ];\n }\n break;\n\n // Fail\n case 'FAIL':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [{ prim: 'UNIT' }, { prim: 'FAILWITH' }];\n }\n break;\n\n // Assertion macros\n case 'ASSERT':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n {\n prim: 'IF',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_EQ':\n case 'ASSERT_NEQ':\n case 'ASSERT_LT':\n case 'ASSERT_GT':\n case 'ASSERT_LE':\n case 'ASSERT_GE':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n { prim: ex.prim.slice(7) },\n {\n prim: 'IF',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_CMPEQ':\n case 'ASSERT_CMPNEQ':\n case 'ASSERT_CMPLT':\n case 'ASSERT_CMPGT':\n case 'ASSERT_CMPLE':\n case 'ASSERT_CMPGE':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n [{ prim: 'COMPARE' }, { prim: ex.prim.slice(10) }],\n {\n prim: 'IF',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_NONE':\n if (assertArgs(ex, 0) && assertNoAnnots(ex)) {\n return [\n {\n prim: 'IF_NONE',\n args: [[], [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_SOME':\n if (assertArgs(ex, 0)) {\n return [\n {\n prim: 'IF_NONE',\n args: [[[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]], mayRename(ex.annots)],\n },\n ];\n }\n break;\n\n case 'ASSERT_LEFT':\n if (assertArgs(ex, 0)) {\n return [\n {\n prim: 'IF_LEFT',\n args: [mayRename(ex.annots), [[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]]],\n },\n ];\n }\n break;\n\n case 'ASSERT_RIGHT':\n if (assertArgs(ex, 0)) {\n return [\n {\n prim: 'IF_LEFT',\n args: [[[{ prim: 'UNIT' }, { prim: 'FAILWITH' }]], mayRename(ex.annots)],\n },\n ];\n }\n break;\n\n // Syntactic conveniences\n\n case 'IF_SOME':\n if (assertArgs(ex, 2)) {\n return [mkPrim({ prim: 'IF_NONE', annots: ex.annots, args: [ex.args[1], ex.args[0]] })];\n }\n break;\n\n case 'IF_RIGHT':\n if (assertArgs(ex, 2)) {\n return [mkPrim({ prim: 'IF_LEFT', annots: ex.annots, args: [ex.args[1], ex.args[0]] })];\n }\n break;\n\n // CAR/CDR n\n case 'CAR':\n case 'CDR':\n if (ex.args !== undefined) {\n if (assertArgs(ex, 1) && assertIntArg(ex, ex.args[0])) {\n const n = parseInt(ex.args[0].int, 10);\n return mkPrim({\n prim: 'GET',\n args: [{ int: ex.prim === 'CAR' ? String(n * 2 + 1) : String(n * 2) }],\n annots: ex.annots,\n });\n }\n } else {\n return ex;\n }\n }\n\n // More syntactic conveniences\n\n // PAPPAIIR macro\n if (pairRe.test(ex.prim)) {\n if (assertArgs(ex, 0)) {\n const { fields, rest } = filterAnnotations(ex.annots);\n const { r } = parsePairUnpairExpr(ex, ex.prim.slice(1), fields, (l, r, top) => [\n ...(l || []),\n ...(r || []),\n top,\n ]);\n\n return r.map(([v, a], i) => {\n const ann = [\n ...trimLast(a, null).map((v) => (v === null ? '%' : v)),\n ...(v === 0 && i === r.length - 1 ? rest : []),\n ];\n\n const leaf = mkPrim({ prim: 'PAIR', annots: ann.length !== 0 ? ann : undefined });\n\n return v === 0\n ? leaf\n : {\n prim: 'DIP',\n args: v === 1 ? [[leaf]] : [{ int: String(v) }, [leaf]],\n };\n });\n }\n }\n\n // UNPAPPAIIR macro\n if (unpairRe.test(ex.prim)) {\n if (ProtoInferiorTo(proto, Protocol.PtEdo2Zk) && assertArgs(ex, 0)) {\n const { r } = parsePairUnpairExpr(ex, ex.prim.slice(3), ex.annots || [], (l, r, top) => [\n top,\n ...(r || []),\n ...(l || []),\n ]);\n return r.map(([v, a]) => {\n const leaf: Prim[] = [\n { prim: 'DUP' },\n mkPrim({ prim: 'CAR', annots: a[0] !== null ? [a[0]] : undefined }),\n {\n prim: 'DIP',\n args: [[mkPrim({ prim: 'CDR', annots: a[1] !== null ? [a[1]] : undefined })]],\n },\n ];\n\n return v === 0\n ? leaf\n : {\n prim: 'DIP',\n args: v === 1 ? [[leaf]] : [{ int: String(v) }, [leaf]],\n };\n });\n } else {\n if (ex.prim === 'UNPAIR') {\n return ex;\n }\n if (assertArgs(ex, 0)) {\n // 008_edo: annotations are deprecated\n const { r } = parsePairUnpairExpr(ex, ex.prim.slice(3), [], (l, r, top) => [\n top,\n ...(r || []),\n ...(l || []),\n ]);\n return r.map(([v]) => {\n const leaf = mkPrim({\n prim: 'UNPAIR',\n });\n\n return v === 0\n ? leaf\n : {\n prim: 'DIP',\n args: v === 1 ? [[leaf]] : [{ int: String(v) }, [leaf]],\n };\n });\n }\n }\n }\n\n // C[AD]+R macro\n if (cadrRe.test(ex.prim)) {\n if (assertArgs(ex, 0)) {\n const ch = [...ex.prim.slice(1, ex.prim.length - 1)];\n\n return ch.map<Prim>((c, i) => {\n const ann = i === ch.length - 1 ? ex.annots : undefined;\n switch (c) {\n case 'A':\n return mkPrim({ prim: 'CAR', annots: ann });\n case 'D':\n return mkPrim({ prim: 'CDR', annots: ann });\n default:\n throw new MacroError(ex, `unexpected character: ${c}`);\n }\n });\n }\n }\n\n // SET_C[AD]+R macro\n if (setCadrRe.test(ex.prim)) {\n if (assertArgs(ex, 0)) {\n const { fields, rest } = filterAnnotations(ex.annots);\n if (fields.length > 1) {\n throw new MacroError(ex, `unexpected annotation on macro ${ex.prim}: ${fields}`);\n }\n\n const term =\n fields.length !== 0\n ? {\n a: [\n { prim: 'DUP' },\n { prim: 'CAR', annots: fields },\n { prim: 'DROP' },\n { prim: 'CDR', annots: ['@%%'] },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: [fields[0], '%@'] },\n ],\n d: [\n { prim: 'DUP' },\n { prim: 'CDR', annots: fields },\n { prim: 'DROP' },\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', fields[0]] },\n ],\n }\n : {\n a: [\n { prim: 'CDR', annots: ['@%%'] },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: ['%', '%@'] },\n ],\n d: [\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', '%'] },\n ],\n };\n\n return parseSetMapCadr(ex, ex.prim.slice(5, ex.prim.length - 1), rest, term);\n }\n }\n\n // MAP_C[AD]+R macro\n if (mapCadrRe.test(ex.prim)) {\n if (assertArgs(ex, 1)) {\n const { fields } = filterAnnotations(ex.annots);\n if (fields.length > 1) {\n throw new MacroError(ex, `unexpected annotation on macro ${ex.prim}: ${fields}`);\n }\n\n const term = {\n a: [\n { prim: 'DUP' },\n { prim: 'CDR', annots: ['@%%'] },\n {\n prim: 'DIP',\n args: [\n [\n mkPrim({\n prim: 'CAR',\n annots: fields.length !== 0 ? ['@' + fields[0].slice(1)] : undefined,\n }),\n ex.args[0],\n ],\n ],\n },\n { prim: 'SWAP' },\n { prim: 'PAIR', annots: [fields.length !== 0 ? fields[0] : '%', '%@'] },\n ],\n d: [\n { prim: 'DUP' },\n mkPrim({\n prim: 'CDR',\n annots: fields.length !== 0 ? ['@' + fields[0].slice(1)] : undefined,\n }),\n ex.args[0],\n { prim: 'SWAP' },\n { prim: 'CAR', annots: ['@%%'] },\n { prim: 'PAIR', annots: ['%@', fields.length !== 0 ? fields[0] : '%'] },\n ],\n };\n\n return parseSetMapCadr(ex, ex.prim.slice(5, ex.prim.length - 1), [], term);\n }\n }\n\n // Expand deprecated DI...IP to [DIP n]\n if (diipRe.test(ex.prim)) {\n if (assertArgs(ex, 1)) {\n let n = 0;\n while (ex.prim[1 + n] === 'I') {\n n++;\n }\n return mkPrim({ prim: 'DIP', args: [{ int: String(n) }, ex.args[0]] });\n }\n }\n\n // Expand DU...UP and DUP n\n if (duupRe.test(ex.prim)) {\n let n = 0;\n while (ex.prim[1 + n] === 'U') {\n n++;\n }\n if (ProtoInferiorTo(proto, Protocol.PtEdo2Zk)) {\n if (n === 1) {\n if (ex.args === undefined) {\n return ex; // skip\n }\n if (assertArgs(ex, 1) && assertIntArg(ex, ex.args[0])) {\n n = parseInt(ex.args[0].int, 10);\n }\n } else {\n assertArgs(ex, 0);\n }\n\n if (n === 1) {\n return [mkPrim({ prim: 'DUP', annots: ex.annots })];\n } else if (n === 2) {\n return [\n {\n prim: 'DIP',\n args: [[mkPrim({ prim: 'DUP', annots: ex.annots })]],\n },\n { prim: 'SWAP' },\n ];\n } else {\n return [\n {\n prim: 'DIP',\n args: [{ int: String(n - 1) }, [mkPrim({ prim: 'DUP', annots: ex.annots })]],\n },\n {\n prim: 'DIG',\n args: [{ int: String(n) }],\n },\n ];\n }\n } else {\n if (n === 1) {\n return ex;\n }\n if (assertArgs(ex, 0)) {\n return mkPrim({ prim: 'DUP', args: [{ int: String(n) }], annots: ex.annots });\n }\n }\n }\n\n return ex;\n}\n","import { Prim, Expr } from './micheline';\nimport { GlobalConstantHashAndValue } from './micheline-parser';\n\nexport function expandGlobalConstants(ex: Prim, hashAndValue: GlobalConstantHashAndValue): Expr {\n if (\n ex.args !== undefined &&\n ex.args.length === 1 &&\n 'string' in ex.args[0] &&\n ex.args[0].string in hashAndValue\n ) {\n return hashAndValue[ex.args[0].string];\n }\n\n return ex;\n}\n","import { scan, Token, Literal } from './scan';\nimport {\n Expr,\n Prim,\n StringLiteral,\n IntLiteral,\n BytesLiteral,\n sourceReference,\n List,\n SourceReference,\n} from './micheline';\nimport { expandMacros } from './macros';\nimport { ProtocolOptions } from './michelson-types';\nimport { expandGlobalConstants } from './global-constants';\n\n/**\n * @category Error\n * @description Error indicating a failure when parsing Micheline expressions\n */\nexport class MichelineParseError extends Error {\n /**\n * @param token A token caused the error\n * @param message An error message\n */\n constructor(public token: Token | null, message?: string) {\n super(message);\n Object.setPrototypeOf(this, MichelineParseError.prototype);\n }\n}\n\n/**\n * @category Error\n * @description Error that inidicates a failure when parsing Micheline JSON\n */\nexport class JSONParseError extends Error {\n /**\n * @param node A node caused the error\n * @param message An error message\n */\n constructor(public node: unknown, message?: string) {\n super(message);\n Object.setPrototypeOf(this, JSONParseError.prototype);\n }\n}\n\nexport interface GlobalConstantHashAndValue {\n [globalConstantHash: string]: Expr;\n}\n\nconst errEOF = new MichelineParseError(null, 'Unexpected EOF');\n\nfunction isAnnotation(tok: Token): boolean {\n return tok.t === Literal.Ident && (tok.v[0] === '@' || tok.v[0] === '%' || tok.v[0] === ':');\n}\n\nconst intRe = new RegExp('^-?[0-9]+$');\nconst bytesRe = new RegExp('^([0-9a-fA-F]{2})*$');\n\nexport interface ParserOptions extends ProtocolOptions {\n /**\n * Expand [Michelson macros](https://tezos.gitlab.io/whitedoc/michelson.html#macros) during parsing.\n */\n expandMacros?: boolean;\n /**\n * Expand global constants during parsing.\n * `expandGlobalConstant` expects an object where the keys are global constant hashes and the values are the corresponding JSON Micheline expressions.\n * @example\n * ```\n * const parserOptions: ParserOptions = {\n * expandGlobalConstant: {\n * 'expr...': { prim: 'DROP', args: [{ int: '2' }] }\n * }\n * }\n *\n * const p = new Parser(parserOptions);\n * ```\n */\n expandGlobalConstant?: GlobalConstantHashAndValue;\n}\n\n/**\n * Converts and validates Michelson expressions between JSON-based Michelson and Micheline\n *\n * Pretty Print a Michelson Smart Contract:\n * ```\n * const contract = await Tezos.contract.at(\"KT1Vsw3kh9638gqWoHTjvHCoHLPKvCbMVbCg\");\n * const p = new Parser();\n *\n * const michelsonCode = p.parseJSON(contract.script.code);\n * const storage = p.parseJSON(contract.script.storage);\n *\n * console.log(\"Pretty print Michelson smart contract:\");\n * console.log(emitMicheline(michelsonCode, {indent:\" \", newline: \"\\n\",}));\n *\n * console.log(\"Pretty print Storage:\");\n * console.log(emitMicheline(storage, {indent:\" \", newline: \"\\n\",}));\n * ```\n *\n * Encode a Michelson expression for inital storage of a smart contract\n * ```\n * const src = `(Pair (Pair { Elt 1\n * (Pair (Pair \"tz1gjaF81ZRRvdzjobyfVNsAeSC6PScjfQwN\" \"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx\")\n * 0x0501000000026869) }\n * 10000000)\n * (Pair 2 333))`;\n *\n * const p = new Parser();\n *\n * const exp = p.parseMichelineExpression(src);\n * console.log(JSON.stringify(exp));\n * ```\n */\nexport class Parser {\n constructor(private opt?: ParserOptions) {}\n\n private expand(ex: Prim): Expr {\n if (this.opt?.expandGlobalConstant !== undefined && ex.prim === 'constant') {\n const ret = expandGlobalConstants(ex, this.opt.expandGlobalConstant);\n if (ret !== ex) {\n ret[sourceReference] = {\n ...(ex[sourceReference] || { first: 0, last: 0 }),\n globalConstant: ex,\n };\n }\n return ret;\n }\n if (this.opt?.expandMacros !== undefined ? this.opt?.expandMacros : true) {\n const ret = expandMacros(ex, this.opt);\n if (ret !== ex) {\n ret[sourceReference] = { ...(ex[sourceReference] || { first: 0, last: 0 }), macro: ex };\n }\n return ret;\n } else {\n return ex;\n }\n }\n\n private parseListExpr(scanner: Iterator<Token>, start: Token): Expr {\n const ref: SourceReference = {\n first: start.first,\n last: start.last,\n };\n\n const expectBracket = start.t === '(';\n let tok: IteratorResult<Token>;\n if (expectBracket) {\n tok = scanner.next();\n if (tok.done) {\n throw errEOF;\n }\n ref.last = tok.value.last;\n } else {\n tok = { value: start };\n }\n\n if (tok.value.t !== Literal.Ident) {\n throw new MichelineParseError(tok.value, `not an identifier: ${tok.value.v}`);\n }\n\n const ret: Prim = {\n prim: tok.value.v,\n [sourceReference]: ref,\n };\n\n for (;;) {\n const tok = scanner.next();\n if (tok.done) {\n if (expectBracket) {\n throw errEOF;\n }\n break;\n } else if (tok.value.t === ')') {\n if (!expectBracket) {\n throw new MichelineParseError(tok.value, 'unexpected closing bracket');\n }\n ref.last = tok.value.last;\n break;\n } else if (isAnnotation(tok.value)) {\n ret.annots = ret.annots || [];\n ret.annots.push(tok.value.v);\n ref.last = tok.value.last;\n } else {\n ret.args = ret.args || [];\n const arg = this.parseExpr(scanner, tok.value);\n ref.last = arg[sourceReference]?.last || ref.last;\n ret.args.push(arg);\n }\n }\n return this.expand(ret);\n }\n\n private parseArgs(scanner: Iterator<Token>, start: Token): [Prim, IteratorResult<Token>] {\n // Identifier with arguments\n const ref: SourceReference = {\n first: start.first,\n last: start.last,\n };\n const p: Prim = {\n prim: start.v,\n [sourceReference]: ref,\n };\n\n for (;;) {\n const t = scanner.next();\n if (t.done || t.value.t === '}' || t.value.t === ';') {\n return [p, t];\n }\n\n if (isAnnotation(t.value)) {\n ref.last = t.value.last;\n p.annots = p.annots || [];\n p.annots.push(t.value.v);\n } else {\n const arg = this.parseExpr(scanner, t.value);\n ref.last = arg[sourceReference]?.last || ref.last;\n p.args = p.args || [];\n p.args.push(arg);\n }\n }\n }\n\n private parseSequenceExpr(scanner: Iterator<Token>, start: Token): List<Expr> {\n const ref: SourceReference = {\n first: start.first,\n last: start.last,\n };\n const seq: List<Expr> = [];\n seq[sourceReference] = ref;\n\n const expectBracket = start.t === '{';\n let tok: IteratorResult<Token> | null = start.t === '{' ? null : { value: start };\n\n for (;;) {\n if (tok === null) {\n tok = scanner.next();\n if (!tok.done) {\n ref.last = tok.value.last;\n }\n }\n if (tok.done) {\n if (expectBracket) {\n throw errEOF;\n } else {\n return seq;\n }\n }\n\n if (tok.value.t === '}') {\n if (!expectBracket) {\n throw new MichelineParseError(tok.value, 'unexpected closing bracket');\n } else {\n return seq;\n }\n } else if (tok.value.t === Literal.Ident) {\n // Identifier with arguments\n const [itm, n] = this.parseArgs(scanner, tok.value);\n ref.last = itm[sourceReference]?.last || ref.last;\n seq.push(this.expand(itm));\n tok = n;\n } else {\n // Other\n const ex = this.parseExpr(scanner, tok.value);\n ref.last = ex[sourceReference]?.last || ref.last;\n seq.push(ex);\n tok = null;\n }\n\n if (tok === null) {\n tok = scanner.next();\n if (!tok.done) {\n ref.last = tok.value.last;\n }\n }\n if (!tok.done && tok.value.t === ';') {\n tok = null;\n }\n }\n }\n\n private parseExpr(scanner: Iterator<Token>, tok: Token): Expr {\n switch (tok.t) {\n case Literal.Ident:\n return this.expand({\n prim: tok.v,\n [sourceReference]: { first: tok.first, last: tok.last },\n });\n\n case Literal.Number:\n return { int: tok.v, [sourceReference]: { first: tok.first, last: tok.last } };\n\n case Literal.String:\n return {\n string: JSON.parse(tok.v) as string,\n [sourceReference]: { first: tok.first, last: tok.last },\n };\n\n case Literal.Bytes:\n return { bytes: tok.v.slice(2), [sourceReference]: { first: tok.first, last: tok.last } };\n\n case '{':\n return this.parseSequenceExpr(scanner, tok);\n\n default:\n return this.parseListExpr(scanner, tok);\n }\n }\n\n /**\n * Parses a Micheline sequence expression, such as smart contract source. Enclosing curly brackets may be omitted.\n * @param src A Micheline sequence `{parameter ...; storage int; code { DUP ; ...};}` or `parameter ...; storage int; code { DUP ; ...};`\n */\n parseSequence(src: string): Expr[] | null {\n if (typeof src !== 'string') {\n throw new TypeError(`string type was expected, got ${typeof src} instead`);\n }\n\n const scanner = scan(src);\n const tok = scanner.next();\n if (tok.done) {\n return null;\n }\n return this.parseSequenceExpr(scanner, tok.value);\n }\n\n /**\n * Parse a Micheline sequence expression. Enclosing curly brackets may be omitted.\n * @param src A Michelson list expression such as `(Pair {Elt \"0\" 0} 0)` or `Pair {Elt \"0\" 0} 0`\n * @returns An AST node or null for empty document.\n */\n parseList(src: string): Expr | null {\n if (typeof src !== 'string') {\n throw new TypeError(`string type was expected, got ${typeof src} instead`);\n }\n\n const scanner = scan(src);\n const tok = scanner.next();\n if (tok.done) {\n return null;\n }\n return this.parseListExpr(scanner, tok.value);\n }\n\n /**\n * Parse any Michelson expression\n * @param src A Michelson expression such as `(Pair {Elt \"0\" 0} 0)` or `{parameter ...; storage int; code { DUP ; ...};}`\n * @returns An AST node or null for empty document.\n */\n parseMichelineExpression(src: string): Expr | null {\n if (typeof src !== 'string') {\n throw new TypeError(`string type was expected, got ${typeof src} instead`);\n }\n\n const scanner = scan(src);\n const tok = scanner.next();\n if (tok.done) {\n return null;\n }\n return this.parseExpr(scanner, tok.value);\n }\n\n /**\n * Parse a Micheline sequence expression, such as smart contract source. Enclosing curly brackets may be omitted.\n * An alias for `parseSequence`\n * @param src A Micheline sequence `{parameter ...; storage int; code { DUP ; ...};}` or `parameter ...; storage int; code { DUP ; ...};`\n */\n parseScript(src: string): Expr[] | null {\n return this.parseSequence(src);\n }\n\n /**\n * Parse a Micheline sequence expression. Enclosing curly brackets may be omitted.\n * An alias for `parseList`\n * @param src A Michelson list expression such as `(Pair {Elt \"0\" 0} 0)` or `Pair {Elt \"0\" 0} 0`\n * @returns An AST node or null for empty document.\n */\n parseData(src: string): Expr | null {\n return this.parseList(src);\n }\n\n /**\n * Takes a JSON-encoded Michelson, validates it, strips away unneeded properties and optionally expands macros (See {@link ParserOptions}).\n * @param src An object containing JSON-encoded Michelson, usually returned by `JSON.parse()`\n */\n parseJSON(src: object): Expr {\n if (typeof src !== 'object') {\n throw new TypeError(`object type was expected, got ${typeof src} instead`);\n }\n\n if (Array.isArray(src)) {\n const ret: Expr[] = [];\n for (const n of src) {\n if (n === null || typeof n !== 'object') {\n throw new JSONParseError(n, `unexpected sequence element: ${n}`);\n }\n ret.push(this.parseJSON(n));\n }\n return ret;\n } else if ('prim' in src) {\n const p = src as { prim: unknown; annots?: unknown[]; args?: unknown[] };\n if (\n typeof p.prim === 'string' &&\n (p.annots === undefined || Array.isArray(p.annots)) &&\n (p.args === undefined || Array.isArray(p.args))\n ) {\n const ret: Prim = {\n prim: p.prim,\n };\n\n if (p.annots !== undefined) {\n for (const a of p.annots) {\n if (typeof a !== 'string') {\n throw new JSONParseError(a, `string expected: ${a}`);\n }\n }\n ret.annots = p.annots;\n }\n\n if (p.args !== undefined) {\n ret.args = [];\n for (const a of p.args) {\n if (a === null || typeof a !== 'object') {\n throw new JSONParseError(a, `unexpected argument: ${a}`);\n }\n ret.args.push(this.parseJSON(a));\n }\n }\n\n return this.expand(ret);\n }\n\n throw new JSONParseError(src, `malformed prim expression: ${src}`);\n } else if ('string' in src) {\n if (typeof (src as StringLiteral).string === 'string') {\n return { string: (src as StringLiteral).string };\n }\n\n throw new JSONParseError(src, `malformed string literal: ${src}`);\n } else if ('int' in src) {\n if (typeof (src as IntLiteral).int === 'string' && intRe.test((src as IntLiteral).int)) {\n return { int: (src as IntLiteral).int };\n }\n\n throw new JSONParseError(src, `malformed int literal: ${src}`);\n } else if ('bytes' in src) {\n if (\n typeof (src as BytesLiteral).bytes === 'string' &&\n bytesRe.test((src as BytesLiteral).bytes)\n ) {\n return { bytes: (src as BytesLiteral).bytes };\n }\n\n throw new JSONParseError(src, `malformed bytes literal: ${src}`);\n } else {\n throw new JSONParseError(src, `unexpected object: ${src}`);\n }\n }\n}\n","import { Expr, Prim, sourceReference } from './micheline';\n\nexport interface FormatOptions {\n /**\n * A string used for code indentation if desired. Usually a tab character or a number of spaces.\n */\n indent?: string;\n /**\n * A string used for line separation. Usually a newline character (\"\\n\");\n */\n newline?: string;\n}\n\nclass Formatter {\n constructor(private opt?: FormatOptions, private lev: number = 0) {}\n\n indent(n = 0): string {\n let ret = '';\n if (this.opt?.indent !== undefined) {\n for (let i = this.lev + n; i > 0; i--) {\n ret += this.opt.indent;\n }\n }\n return ret;\n }\n\n get lf(): string {\n return this.opt?.newline || '';\n }\n\n get lfsp(): string {\n return this.opt?.newline || ' ';\n }\n\n down(n: number): Formatter {\n return new Formatter(this.opt, this.lev + n);\n }\n}\n\nfunction hasArgs(node: Expr): node is Prim {\n return (\n 'prim' in node &&\n ((node.annots !== undefined && node.annots.length !== 0) ||\n (node.args !== undefined && node.args.length !== 0))\n );\n}\n\nfunction isMultiline(node: Prim): boolean {\n if (node.args !== undefined) {\n for (const a of node.args) {\n if (Array.isArray(a) || hasArgs(a)) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction emitExpr(node: Expr, f: Formatter, foldMacros: boolean): string {\n const macro = node[sourceReference]?.macro;\n if (foldMacros && macro) {\n return emitExpr(macro, f, foldMacros);\n }\n\n if (Array.isArray(node)) {\n return emitSeq(node, f, foldMacros);\n } else if ('string' in node) {\n return JSON.stringify(node.string);\n } else if ('int' in node) {\n return node.int;\n } else if ('bytes' in node) {\n return '0x' + node.bytes;\n } else {\n if (\n (node.annots === undefined || node.annots.length === 0) &&\n (node.args === undefined || node.args.length === 0)\n ) {\n return node.prim;\n }\n\n let ret = '(' + node.prim;\n if (node.annots !== undefined) {\n for (const a of node.annots) {\n ret += ' ' + a;\n }\n }\n if (node.args !== undefined) {\n const multiline = isMultiline(node);\n for (const a of node.args) {\n if (multiline) {\n ret += f.lfsp + f.indent(1) + emitExpr(a, f.down(1), foldMacros);\n } else {\n ret += ' ' + emitExpr(a, f, foldMacros);\n }\n }\n }\n return ret + ')';\n }\n}\n\nfunction emitSeq(node: Expr[], f: Formatter, foldMacros: boolean): string {\n let ret = '{' + f.lf;\n let i = node.length;\n for (const el of node) {\n ret += f.indent(1);\n\n if ('prim' in el) {\n ret += el.prim;\n\n if (el.annots !== undefined) {\n for (const a of el.annots) {\n ret += ' ' + a;\n }\n }\n if (el.args !== undefined) {\n const multiline = isMultiline(el);\n for (const a of el.args) {\n if (multiline) {\n ret += f.lfsp + f.indent(2) + emitExpr(a, f.down(2), foldMacros);\n } else {\n ret += ' ' + emitExpr(a, f, foldMacros);\n }\n }\n }\n } else {\n ret += emitExpr(el, f.down(1), foldMacros);\n }\n\n ret += i > 1 ? ';' + f.lfsp : f.lf;\n i--;\n }\n return ret + f.indent() + '}';\n}\n\n/**\n * Formats Micheline expression\n * @param expr An AST node\n * @param opt Options\n */\nexport function emitMicheline(expr: Expr, opt?: FormatOptions, foldMacros = false): string {\n if (typeof expr !== 'object') {\n throw new TypeError(`object type was expected, got ${typeof expr} instead`);\n }\n\n return emitExpr(expr, new Formatter(opt), foldMacros);\n}\n","const H = [\n 0x6a09e667 | 0,\n 0xbb67ae85 | 0,\n 0x3c6ef372 | 0,\n 0xa54ff53a | 0,\n 0x510e527f | 0,\n 0x9b05688c | 0,\n 0x1f83d9ab | 0,\n 0x5be0cd19 | 0,\n];\n\nconst K = [\n 0x428a2f98 | 0,\n 0x71374491 | 0,\n 0xb5c0fbcf | 0,\n 0xe9b5dba5 | 0,\n 0x3956c25b | 0,\n 0x59f111f1 | 0,\n 0x923f82a4 | 0,\n 0xab1c5ed5 | 0,\n 0xd807aa98 | 0,\n 0x12835b01 | 0,\n 0x243185be | 0,\n 0x550c7dc3 | 0,\n 0x72be5d74 | 0,\n 0x80deb1fe | 0,\n 0x9bdc06a7 | 0,\n 0xc19bf174 | 0,\n 0xe49b69c1 | 0,\n 0xefbe4786 | 0,\n 0x0fc19dc6 | 0,\n 0x240ca1cc | 0,\n 0x2de92c6f | 0,\n 0x4a7484aa | 0,\n 0x5cb0a9dc | 0,\n 0x76f988da | 0,\n 0x983e5152 | 0,\n 0xa831c66d | 0,\n 0xb00327c8 | 0,\n 0xbf597fc7 | 0,\n 0xc6e00bf3 | 0,\n 0xd5a79147 | 0,\n 0x06ca6351 | 0,\n 0x14292967 | 0,\n 0x27b70a85 | 0,\n 0x2e1b2138 | 0,\n 0x4d2c6dfc | 0,\n 0x53380d13 | 0,\n 0x650a7354 | 0,\n 0x766a0abb | 0,\n 0x81c2c92e | 0,\n 0x92722c85 | 0,\n 0xa2bfe8a1 | 0,\n 0xa81a664b | 0,\n 0xc24b8b70 | 0,\n 0xc76c51a3 | 0,\n 0xd192e819 | 0,\n 0xd6990624 | 0,\n 0xf40e3585 | 0,\n 0x106aa070 | 0,\n 0x19a4c116 | 0,\n 0x1e376c08 | 0,\n 0x2748774c | 0,\n 0x34b0bcb5 | 0,\n 0x391c0cb3 | 0,\n 0x4ed8aa4a | 0,\n 0x5b9cca4f | 0,\n 0x682e6ff3 | 0,\n 0x748f82ee | 0,\n 0x78a5636f | 0,\n 0x84c87814 | 0,\n 0x8cc70208 | 0,\n 0x90befffa | 0,\n 0xa4506ceb | 0,\n 0xbef9a3f7 | 0,\n 0xc67178f2 | 0,\n];\n\n/**\n * @category Error\n * @description Error that indicates a failure when decoding a base58 encoding\n */\nexport class Base58DecodingError extends Error {\n public name = 'Base58DecodingError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description\n */\nexport class InvalidMessageError extends Error {\n public name = 'InvalidMessageError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n// https://tools.ietf.org/html/rfc6234\nfunction sha256(msg: number[] | Uint8Array): number[] {\n // pad the message\n const r = (msg.length + 9) % 64;\n const pad = r === 0 ? 0 : 64 - r;\n\n if (msg.length > 268435455) {\n throw new InvalidMessageError(`SHA-256 -- message length is too big: ${msg.length}`);\n }\n\n const l = msg.length << 3;\n const buffer = [\n ...msg,\n 0x80,\n ...new Array<number>(pad).fill(0),\n 0,\n 0,\n 0,\n 0,\n (l >> 24) & 0xff,\n (l >> 16) & 0xff,\n (l >> 8) & 0xff,\n l & 0xff,\n ];\n\n function ror(x: number, n: number): number {\n return (x >>> n) | (x << (32 - n));\n }\n\n const h = [...H];\n const w = new Array<number>(64);\n const v = new Array<number>(8);\n\n for (let offset = 0; offset < buffer.length; offset += 64) {\n let q = offset;\n let i = 0;\n while (i < 16) {\n w[i] = (buffer[q] << 24) | (buffer[q + 1] << 16) | (buffer[q + 2] << 8) | buffer[q + 3];\n q += 4;\n i++;\n }\n while (i < 64) {\n const s0 = ror(w[i - 15], 7) ^ ror(w[i - 15], 18) ^ (w[i - 15] >>> 3);\n const s1 = ror(w[i - 2], 17) ^ ror(w[i - 2], 19) ^ (w[i - 2] >>> 10);\n w[i] = ((s1 | 0) + w[i - 7] + s0 + w[i - 16]) | 0;\n i++;\n }\n\n for (let i = 0; i < 8; i++) {\n v[i] = h[i];\n }\n\n for (let i = 0; i < 64; i++) {\n const b0 = ror(v[0], 2) ^ ror(v[0], 13) ^ ror(v[0], 22);\n const b1 = ror(v[4], 6) ^ ror(v[4], 11) ^ ror(v[4], 25);\n const t1 = (v[7] + b1 + ((v[4] & v[5]) ^ (~v[4] & v[6])) + K[i] + w[i]) | 0;\n const t2 = (b0 + ((v[0] & v[1]) ^ (v[0] & v[2]) ^ (v[1] & v[2]))) | 0;\n\n v[7] = v[6];\n v[6] = v[5];\n v[5] = v[4];\n v[4] = (v[3] + t1) | 0;\n v[3] = v[2];\n v[2] = v[1];\n v[1] = v[0];\n v[0] = (t1 + t2) | 0;\n }\n\n for (let i = 0; i < 8; i++) {\n h[i] = (h[i] + v[i]) | 0;\n }\n }\n\n const digest: number[] = [];\n for (const v of h) {\n digest.push((v >> 24) & 0xff);\n digest.push((v >> 16) & 0xff);\n digest.push((v >> 8) & 0xff);\n digest.push(v & 0xff);\n }\n\n return digest;\n}\n\nconst base58alphabetFwd: number[] = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, -1, -1, -1, -1, -1, -1, -1, 9, 10, 11, 12, 13, 14, 15, 16, -1, 17, 18,\n 19, 20, 21, -1, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1, -1, 33, 34, 35,\n 36, 37, 38, 39, 40, 41, 42, 43, -1, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,\n];\n\nconst base58alphabetBwd: number[] = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35,\n 36, 37, 38, 39, 40, 41, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66,\n 67, 68, 69, 70, 71, 72, 73,\n];\n\nfunction byteAt(src: string, i: number): number {\n const c = src.charCodeAt(i) - 49;\n if (c >= base58alphabetFwd.length || base58alphabetFwd[c] === -1) {\n throw new Base58DecodingError(`Unexpected character at position ${i}: ${src[i]}`);\n }\n return base58alphabetFwd[c];\n}\n\nexport function decodeBase58(src: string): number[] {\n const acc: number[] = [];\n let i = 0;\n // count and skip leading zeros\n while (i < src.length && byteAt(src, i) === 0) {\n i++;\n }\n let zeros = i;\n while (i < src.length) {\n let carry = byteAt(src, i++);\n /*\n for every symbol x\n acc = acc * 58 + x\n where acc is a little endian arbitrary length integer\n */\n let ii = 0;\n while (carry !== 0 || ii < acc.length) {\n const m = (acc[ii] || 0) * 58 + carry;\n acc[ii++] = m % 256;\n carry = Math.floor(m / 256);\n }\n }\n while (zeros-- > 0) {\n acc.push(0);\n }\n return acc.reverse();\n}\n\nexport function encodeBase58(src: number[] | Uint8Array): string {\n const acc: number[] = [];\n let i = 0;\n // count and skip leading zeros\n while (i < src.length && src[i] === 0) {\n i++;\n }\n let zeros = i;\n while (i < src.length) {\n let carry = src[i++];\n let ii = 0;\n while (carry !== 0 || ii < acc.length) {\n const m = (acc[ii] || 0) * 256 + carry;\n acc[ii++] = m % 58;\n carry = Math.floor(m / 58);\n }\n }\n while (zeros-- > 0) {\n acc.push(0);\n }\n acc.reverse();\n return String.fromCharCode(...acc.map((v) => base58alphabetBwd[v] + 49));\n}\n\nexport function decodeBase58Check(src: string): number[] {\n const buffer = decodeBase58(src);\n if (buffer.length < 4) {\n throw new Base58DecodingError(`Data is too short ${buffer.length}`);\n }\n\n const data = buffer.slice(0, buffer.length - 4);\n const sum = buffer.slice(buffer.length - 4);\n const computed = sha256(sha256(data));\n if (\n sum[0] !== computed[0] ||\n sum[1] !== computed[1] ||\n sum[2] !== computed[2] ||\n sum[3] !== computed[3]\n ) {\n throw new Base58DecodingError('Invalid checksum');\n }\n\n return data;\n}\n\nexport function encodeBase58Check(src: number[] | Uint8Array): string {\n const sum = sha256(sha256(src));\n return encodeBase58([...src, ...sum.slice(0, 4)]);\n}\n","/**\n * @category Error\n * @description Error that indicates an invalid contract being passed or used\n */\nexport class InvalidContractError extends Error {\n public name = 'InvalidContractError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid type expression being passed or used\n */\nexport class InvalidTypeExpressionError extends Error {\n public name = 'InvalidTypeExpressionError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid data expression being passed or used\n */\nexport class InvalidDataExpressionError extends Error {\n public name = 'InvalidDataExpressionError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates an invalid contract entrypoint being referenced or passed\n */\nexport class InvalidEntrypointError extends Error {\n public name = 'InvalidEntrypointError';\n constructor(public entrypoint?: string) {\n super(`Contract has no entrypoint named: '${entrypoint}'`);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a failure happening when trying to encode Tezos ID\n */\nexport class TezosIdEncodeError extends Error {\n public name = 'TezosIdEncodeError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a general error happening when trying to create a LongInteger\n */\nexport class LongIntegerError extends Error {\n public name = 'LongIntegerError';\n constructor(public message: string) {\n super(message);\n }\n}\n\n/**\n * @category Error\n * @description Error that indicates a failure occurring when trying to parse a hex byte\n */\nexport class HexParseError extends Error {\n public name = 'HexParseError';\n constructor(public hexByte: string) {\n super(`Unable to parse hex byte: ${hexByte}`);\n }\n}\n","import { Prim, Expr, StringLiteral, IntLiteral } from './micheline';\nimport { decodeBase58Check, encodeBase58Check } from './base58';\nimport {\n MichelsonData,\n MichelsonDataPair,\n MichelsonType,\n MichelsonTypePair,\n} from './michelson-types';\nimport { HexParseError, LongIntegerError, TezosIdEncodeError } from './error';\n\nexport type Tuple<N extends number, T> = N extends 1\n ? [T]\n : N extends 2\n ? [T, T]\n : N extends 3\n ? [T, T, T]\n : N extends 4\n ? [T, T, T, T]\n : N extends 5\n ? [T, T, T, T, T]\n : N extends 6\n ? [T, T, T, T, T, T]\n : N extends 7\n ? [T, T, T, T, T, T, T]\n : N extends 8\n ? [T, T, T, T, T, T, T, T]\n : T[];\n\ntype RequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\ntype OmitProp<T, K extends keyof T> = Omit<T, K> & { [P in K]?: undefined };\n\nexport type ReqArgs<T extends Prim> = RequiredProp<T, 'args'>;\nexport type NoArgs<T extends Prim> = OmitProp<T, 'args'>;\nexport type NoAnnots<T extends Prim> = OmitProp<T, 'annots'>;\n\nexport type Nullable<T> = { [P in keyof T]: T[P] | null };\n\n/**\n * @category Error\n * @description Error that indicates a Michelson failure occurring\n */\nexport class MichelsonError<T extends Expr = Expr> extends Error {\n /**\n * @param val Value of a AST node caused the error\n * @param path Path to a node caused the error\n * @param message An error message\n */\n constructor(public val: T, message?: string) {\n super(message);\n Object.setPrototypeOf(this, MichelsonError.prototype);\n }\n}\n\nexport function isMichelsonError<T extends Expr = Expr>(err: unknown): err is MichelsonError<T> {\n return err instanceof MichelsonError;\n}\n\nexport class MichelsonTypeError extends MichelsonError<MichelsonType | MichelsonType[]> {\n public data?: Expr;\n\n /**\n * @param val Value of a type node caused the error\n * @param data Value of a data node caused the error\n * @param message An error message\n */\n constructor(val: MichelsonType | MichelsonType[], data?: Expr, message?: string) {\n super(val, message);\n if (data !== undefined) {\n this.data = data;\n }\n Object.setPrototypeOf(this, MichelsonTypeError.prototype);\n }\n}\n\n// Ad hoc big integer parser\nexport class LongInteger {\n private neg = false;\n private buf: number[] = [];\n\n private append(c: number) {\n let i = 0;\n while (c !== 0 || i < this.buf.length) {\n const m = (this.buf[i] || 0) * 10 + c;\n this.buf[i++] = m % 256;\n c = Math.floor(m / 256);\n }\n }\n\n constructor(arg?: string | number) {\n if (arg === undefined) {\n return;\n }\n if (typeof arg === 'string') {\n for (let i = 0; i < arg.length; i++) {\n const c = arg.charCodeAt(i);\n if (i === 0 && c === 0x2d) {\n this.neg = true;\n } else {\n if (c < 0x30 || c > 0x39) {\n throw new LongIntegerError(`unexpected character in integer constant: ${arg[i]}`);\n }\n this.append(c - 0x30);\n }\n }\n } else if (arg < 0) {\n this.neg = true;\n this.append(-arg);\n } else {\n this.append(arg);\n }\n }\n\n cmp(arg: LongInteger): number {\n if (this.neg !== arg.neg) {\n return (arg.neg ? 1 : 0) - (this.neg ? 1 : 0);\n } else {\n let ret = 0;\n if (this.buf.length !== arg.buf.length) {\n ret = this.buf.length < arg.buf.length ? -1 : 1;\n } else if (this.buf.length !== 0) {\n let i = arg.buf.length - 1;\n while (i >= 0 && this.buf[i] === arg.buf[i]) {\n i--;\n }\n ret = i < 0 ? 0 : this.buf[i] < arg.buf[i] ? -1 : 1;\n }\n return !this.neg ? ret : ret === 0 ? 0 : -ret;\n }\n }\n\n get sign(): number {\n return this.buf.length === 0 ? 0 : this.neg ? -1 : 1;\n }\n}\n\nexport function parseBytes(s: string): number[] | null {\n const ret: number[] = [];\n for (let i = 0; i < s.length; i += 2) {\n const x = parseInt(s.slice(i, i + 2), 16);\n if (Number.isNaN(x)) {\n return null;\n }\n ret.push(x);\n }\n return ret;\n}\n\nexport function compareBytes(a: number[] | Uint8Array, b: number[] | Uint8Array): number {\n if (a.length !== b.length) {\n return a.length < b.length ? -1 : 1;\n } else if (a.length !== 0) {\n let i = 0;\n while (i < a.length && a[i] === b[i]) {\n i++;\n }\n return i === a.length ? 0 : a[i] < b[i] ? -1 : 1;\n } else {\n return 0;\n }\n}\n\nexport function isDecimal(x: string): boolean {\n try {\n new LongInteger(x);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isNatural(x: string): boolean {\n try {\n return new LongInteger(x).sign >= 0;\n } catch {\n return false;\n }\n}\n\nexport interface UnpackedAnnotations {\n f?: string[];\n t?: string[];\n v?: string[];\n}\n\nexport interface UnpackAnnotationsOptions {\n specialVar?: boolean; // CAR, CDR\n emptyVar?: boolean;\n specialFields?: boolean; // PAIR, LEFT, RIGHT\n emptyFields?: boolean;\n}\n\nconst annRe = /^(@%|@%%|%@|[@:%]([_0-9a-zA-Z][_0-9a-zA-Z.%@]*)?)$/;\n\nexport function unpackAnnotations(\n p: Prim | Expr[],\n opt?: UnpackAnnotationsOptions\n): UnpackedAnnotations {\n if (Array.isArray(p)) {\n return {};\n }\n\n let field: string[] | undefined;\n let type: string[] | undefined;\n let vars: string[] | undefined;\n\n if (p.annots !== undefined) {\n for (const v of p.annots) {\n if (v.length !== 0) {\n if (\n !annRe.test(v) ||\n (!opt?.specialVar && (v === '@%' || v === '@%%')) ||\n (!opt?.specialFields && v === '%@')\n ) {\n throw new MichelsonError(p, `${p.prim}: unexpected annotation: ${v}`);\n }\n\n switch (v[0]) {\n case '%':\n if (opt?.emptyFields || v.length > 1) {\n field = field || [];\n field.push(v);\n }\n break;\n case ':':\n if (v.length > 1) {\n type = type || [];\n type.push(v);\n }\n break;\n case '@':\n if (opt?.emptyVar || v.length > 1) {\n vars = vars || [];\n vars.push(v);\n }\n break;\n }\n }\n }\n }\n return { f: field, t: type, v: vars };\n}\n\nexport type TezosIDType =\n | 'BlockHash'\n | 'OperationHash'\n | 'OperationListHash'\n | 'OperationListListHash'\n | 'ProtocolHash'\n | 'ContextHash'\n | 'ED25519PublicKeyHash'\n | 'SECP256K1PublicKeyHash'\n | 'P256PublicKeyHash'\n | 'ContractHash'\n | 'CryptoboxPublicKeyHash'\n | 'ED25519Seed'\n | 'ED25519PublicKey'\n | 'SECP256K1SecretKey'\n | 'P256SecretKey'\n | 'ED25519EncryptedSeed'\n | 'SECP256K1EncryptedSecretKey'\n | 'P256EncryptedSecretKey'\n | 'SECP256K1PublicKey'\n | 'P256PublicKey'\n | 'SECP256K1Scalar'\n | 'SECP256K1Element'\n | 'ED25519SecretKey'\n | 'ED25519Signature'\n | 'SECP256K1Signature'\n | 'P256Signature'\n | 'GenericSignature'\n | 'ChainID'\n | 'RollupAddress'\n | 'TxRollupL2Address';\n\nexport type TezosIDPrefix = [number, number[]]; // payload length, prefix\n\nexport const tezosPrefix: Record<TezosIDType, TezosIDPrefix> = {\n BlockHash: [32, [1, 52]], // B(51)\n OperationHash: [32, [5, 116]], // o(51)\n OperationListHash: [32, [133, 233]], // Lo(52)\n OperationListListHash: [32, [29, 159, 109]], // LLo(53)\n ProtocolHash: [32, [2, 170]], // P(51)\n ContextHash: [32, [79, 199]], // Co(52)\n ED25519PublicKeyHash: [20, [6, 161, 159]], // tz1(36)\n SECP256K1PublicKeyHash: [20, [6, 161, 161]], // tz2(36)\n P256PublicKeyHash: [20, [6, 161, 164]], // tz3(36)\n ContractHash: [20, [2, 90, 121]], // KT1(36)\n CryptoboxPublicKeyHash: [16, [153, 103]], // id(30)\n ED25519Seed: [32, [13, 15, 58, 7]], // edsk(54)\n ED25519PublicKey: [32, [13, 15, 37, 217]], // edpk(54)\n SECP256K1SecretKey: [32, [17, 162, 224, 201]], // spsk(54)\n P256SecretKey: [32, [16, 81, 238, 189]], // p2sk(54)\n ED25519EncryptedSeed: [56, [7, 90, 60, 179, 41]], // edesk(88)\n SECP256K1EncryptedSecretKey: [56, [9, 237, 241, 174, 150]], // spesk(88)\n P256EncryptedSecretKey: [56, [9, 48, 57, 115, 171]], // p2esk(88)\n SECP256K1PublicKey: [33, [3, 254, 226, 86]], // sppk(55)\n P256PublicKey: [33, [3, 178, 139, 127]], // p2pk(55)\n SECP256K1Scalar: [33, [38, 248, 136]], // SSp(53)\n SECP256K1Element: [33, [5, 92, 0]], // GSp(54)\n ED25519SecretKey: [64, [43, 246, 78, 7]], // edsk(98)\n ED25519Signature: [64, [9, 245, 205, 134, 18]], // edsig(99)\n SECP256K1Signature: [64, [13, 115, 101, 19, 63]], // spsig1(99)\n P256Signature: [64, [54, 240, 44, 52]], // p2sig(98)\n GenericSignature: [64, [4, 130, 43]], // sig(96)\n ChainID: [4, [87, 82, 0]],\n RollupAddress: [20, [1, 128, 120, 31]],\n TxRollupL2Address: [20, [6, 161, 166]],\n};\n\nexport function checkDecodeTezosID<T extends TezosIDType[]>(\n id: string,\n ...types: T\n): [T[number], number[]] | null {\n const buf = decodeBase58Check(id);\n for (const t of types) {\n const [plen, p] = tezosPrefix[t];\n if (buf.length === plen + p.length) {\n let i = 0;\n while (i < p.length && buf[i] === p[i]) {\n i++;\n }\n if (i === p.length) {\n return [t, buf.slice(p.length)];\n }\n }\n }\n return null;\n}\n\nexport function encodeTezosID(id: TezosIDType, data: number[] | Uint8Array): string {\n const [plen, p] = tezosPrefix[id];\n if (data.length !== plen) {\n throw new TezosIdEncodeError(`Incorrect data length for ${id}: ${data.length}`);\n }\n return encodeBase58Check([...p, ...data]);\n}\n\n// reassemble comb pair for transparent comparison etc. non-recursive!\ntype PairTypeOrDataPrim<I extends 'pair' | 'Pair'> = I extends 'pair'\n ? Extract<MichelsonTypePair<MichelsonType[]>, Prim>\n : Extract<MichelsonDataPair<MichelsonData[]>, Prim>;\nexport function unpackComb<I extends 'pair' | 'Pair'>(\n id: I,\n v: I extends 'pair' ? MichelsonTypePair<MichelsonType[]> : MichelsonDataPair<MichelsonData[]>\n): PairTypeOrDataPrim<I> {\n const vv: MichelsonTypePair<MichelsonType[]> | MichelsonDataPair<MichelsonData[]> = v;\n const args = Array.isArray(vv) ? vv : vv.args;\n if (args.length === 2) {\n // it's a way to make a union of two interfaces not an interface with two independent properties of union types\n const ret =\n id === 'pair'\n ? {\n prim: 'pair',\n args,\n }\n : {\n prim: 'Pair',\n args,\n };\n return ret as PairTypeOrDataPrim<I>;\n }\n\n return {\n ...(Array.isArray(vv) ? { prim: id } : vv),\n args: [\n args[0],\n {\n prim: id,\n args: args.slice(1),\n },\n ],\n } as PairTypeOrDataPrim<I>;\n}\n\nexport function isPairType(t: MichelsonType): t is MichelsonTypePair<MichelsonType[]> {\n return Array.isArray(t) || t.prim === 'pair';\n}\n\nexport function isPairData(d: Expr): d is MichelsonDataPair<MichelsonData[]> {\n return Array.isArray(d) || ('prim' in d && d.prim === 'Pair');\n}\n\nconst rfc3339Re =\n /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])[T ]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\\.[0-9]+)?(Z|[+-]([01][0-9]|2[0-3]):([0-5][0-9]))$/;\n\nexport function parseDate(a: StringLiteral | IntLiteral): Date | null {\n if ('string' in a) {\n if (isNatural(a.string)) {\n return new Date(parseInt(a.string, 10));\n } else if (rfc3339Re.test(a.string)) {\n const x = new Date(a.string);\n if (!Number.isNaN(x.valueOf)) {\n return x;\n }\n }\n } else if (isDecimal(a.int)) {\n return new Date(parseInt(a.int, 10));\n }\n return null;\n}\n\nexport function parseHex(s: string): number[] {\n const res: number[] = [];\n for (let i = 0; i < s.length; i += 2) {\n const ss = s.slice(i, i + 2);\n const x = parseInt(ss, 16);\n if (Number.isNaN(x)) {\n throw new HexParseError(ss);\n }\n res.push(x);\n }\n return res;\n}\n\nexport function hexBytes(bytes: number[]): string {\n return bytes.map((x) => ((x >> 4) & 0xf).toString(16) + (x & 0xf).toString(16)).join('');\n}\n","import { Prim, Expr, IntLiteral, StringLiteral } from './micheline';\nimport { Tuple, NoArgs, ReqArgs, MichelsonError } from './utils';\nimport {\n MichelsonCode,\n MichelsonType,\n MichelsonData,\n MichelsonContract,\n MichelsonNoArgInstruction,\n MichelsonInstruction,\n InstructionList,\n MichelsonTypeID,\n MichelsonSimpleComparableTypeID,\n} from './michelson-types';\n\n// Michelson validator\n\nconst maxViewNameLength = 31;\n\nconst noArgInstructionIDs: Record<MichelsonNoArgInstruction['prim'], true> = {\n ABS: true,\n ADD: true,\n ADDRESS: true,\n AMOUNT: true,\n AND: true,\n APPLY: true,\n BALANCE: true,\n BLAKE2B: true,\n CAR: true,\n CDR: true,\n CHAIN_ID: true,\n CHECK_SIGNATURE: true,\n COMPARE: true,\n CONCAT: true,\n CONS: true,\n EDIV: true,\n EQ: true,\n EXEC: true,\n FAILWITH: true,\n GE: true,\n GET_AND_UPDATE: true,\n GT: true,\n HASH_KEY: true,\n IMPLICIT_ACCOUNT: true,\n INT: true,\n ISNAT: true,\n JOIN_TICKETS: true,\n KECCAK: true,\n LE: true,\n LEVEL: true,\n LSL: true,\n LSR: true,\n LT: true,\n MEM: true,\n MUL: true,\n NEG: true,\n NEQ: true,\n NEVER: true,\n NOT: true,\n NOW: true,\n OR: true,\n PACK: true,\n PAIRING_CHECK: true,\n READ_TICKET: true,\n SAPLING_VERIFY_UPDATE: true,\n SELF: true,\n SELF_ADDRESS: true,\n SENDER: true,\n SET_DELEGATE: true,\n SHA256: true,\n SHA3: true,\n SHA512: true,\n SIZE: true,\n SLICE: true,\n SOME: true,\n SOURCE: true,\n SPLIT_TICKET: true,\n SUB: true,\n SWAP: true,\n TICKET: true,\n TICKET_DEPRECATED: true,\n TOTAL_VOTING_POWER: true,\n TRANSFER_TOKENS: true,\n UNIT: true,\n VOTING_POWER: true,\n XOR: true,\n RENAME: true,\n OPEN_CHEST: true,\n SUB_MUTEZ: true,\n MIN_BLOCK_TIME: true,\n BYTES: true,\n NAT: true,\n};\n\nexport const instructionIDs: Record<MichelsonInstruction['prim'], true> = Object.assign(\n {},\n noArgInstructionIDs,\n {\n CONTRACT: true,\n CREATE_CONTRACT: true,\n DIG: true,\n DIP: true,\n DROP: true,\n DUG: true,\n DUP: true,\n EMIT: true,\n EMPTY_BIG_MAP: true,\n EMPTY_MAP: true,\n EMPTY_SET: true,\n GET: true,\n IF: true,\n IF_CONS: true,\n IF_LEFT: true,\n IF_NONE: true,\n ITER: true,\n LAMBDA: true,\n LAMBDA_REC: true,\n LEFT: true,\n LOOP: true,\n LOOP_LEFT: true,\n MAP: true,\n NIL: true,\n NONE: true,\n PAIR: true,\n PUSH: true,\n RIGHT: true,\n SAPLING_EMPTY_STATE: true,\n UNPACK: true,\n UNPAIR: true,\n UPDATE: true,\n CAST: true,\n VIEW: true,\n } as const\n);\n\nconst simpleComparableTypeIDs: Record<MichelsonSimpleComparableTypeID, true> = {\n unit: true,\n never: true,\n bool: true,\n int: true,\n nat: true,\n string: true,\n chain_id: true,\n bytes: true,\n mutez: true,\n key_hash: true,\n key: true,\n signature: true,\n timestamp: true,\n address: true,\n tx_rollup_l2_address: true,\n};\n\nconst typeIDs: Record<MichelsonTypeID, true> = Object.assign({}, simpleComparableTypeIDs, {\n or: true,\n pair: true,\n set: true,\n big_map: true,\n contract: true,\n lambda: true,\n list: true,\n map: true,\n operation: true,\n option: true,\n bls12_381_g1: true,\n bls12_381_g2: true,\n bls12_381_fr: true,\n sapling_transaction: true,\n sapling_transaction_deprecated: true,\n sapling_state: true,\n ticket: true,\n chest_key: true,\n chest: true,\n} as const);\n\nexport class MichelsonValidationError extends MichelsonError {\n /**\n * @param val Value of a node caused the error\n * @param message An error message\n */\n constructor(public val: Expr, message?: string) {\n super(val, message);\n Object.setPrototypeOf(this, MichelsonValidationError.prototype);\n }\n}\n\nfunction isPrim(ex: Expr): ex is Prim {\n return 'prim' in ex;\n}\n\nfunction isPrimOrSeq(ex: Expr): ex is Prim | Expr[] {\n return Array.isArray(ex) || 'prim' in ex;\n}\n\nfunction assertPrim(ex: Expr): ex is Prim {\n if (isPrim(ex)) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'prim expression expected');\n}\n\nfunction assertSeq(ex: Expr): ex is Expr[] {\n if (Array.isArray(ex)) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'sequence expression expected');\n}\n\nfunction assertPrimOrSeq(ex: Expr): ex is Prim | Expr[] {\n if (isPrimOrSeq(ex)) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'prim or sequence expression expected');\n}\n\nfunction assertNatural(i: IntLiteral) {\n if (i.int[0] === '-') {\n throw new MichelsonValidationError(i, 'natural number expected');\n }\n}\n\nfunction assertIntLiteral(ex: Expr): ex is IntLiteral {\n if ('int' in ex) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'int literal expected');\n}\n\nfunction assertStringLiteral(ex: Expr): ex is StringLiteral {\n if ('string' in ex) {\n return true;\n }\n throw new MichelsonValidationError(ex, 'string literal expected');\n}\n\nfunction assertArgs<N extends number>(\n ex: Prim,\n n: N\n): ex is N extends 0 ? NoArgs<Prim<string>> : ReqArgs<Prim<string, Tuple<N, Expr>>> {\n if ((n === 0 && ex.args === undefined) || ex.args?.length === n) {\n return true;\n }\n throw new MichelsonValidationError(ex, `${n} arguments expected`);\n}\n\n/**\n * Checks if the node is a valid Michelson code (sequence of instructions).\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonInstruction(ex: Expr): ex is MichelsonCode {\n if (Array.isArray(ex)) {\n for (const n of ex) {\n if (!Array.isArray(n) && !isPrim(n)) {\n throw new MichelsonValidationError(ex, 'sequence or prim expected');\n }\n assertMichelsonInstruction(n);\n }\n return true;\n }\n\n if (assertPrim(ex)) {\n if (Object.prototype.hasOwnProperty.call(noArgInstructionIDs, ex.prim)) {\n assertArgs(ex, 0);\n return true;\n }\n\n switch (ex.prim) {\n case 'DROP':\n case 'PAIR':\n case 'UNPAIR':\n case 'DUP':\n case 'UPDATE':\n case 'GET':\n if (ex.args !== undefined && assertArgs(ex, 1)) {\n /* istanbul ignore else */\n if (assertIntLiteral(ex.args[0])) {\n assertNatural(ex.args[0]);\n }\n }\n break;\n\n case 'DIG':\n case 'DUG':\n case 'SAPLING_EMPTY_STATE':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n /* istanbul ignore else */\n if (assertIntLiteral(ex.args[0])) {\n assertNatural(ex.args[0]);\n }\n }\n break;\n\n case 'NONE':\n case 'LEFT':\n case 'RIGHT':\n case 'NIL':\n case 'CAST':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonType(ex.args[0]);\n }\n break;\n\n case 'UNPACK':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonPackableType(ex.args[0]);\n }\n break;\n\n case 'CONTRACT':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonPassableType(ex.args[0]);\n }\n break;\n\n case 'IF_NONE':\n case 'IF_LEFT':\n case 'IF_CONS':\n case 'IF':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n /* istanbul ignore else */\n if (assertSeq(ex.args[0])) {\n assertMichelsonInstruction(ex.args[0]);\n }\n /* istanbul ignore else */\n if (assertSeq(ex.args[1])) {\n assertMichelsonInstruction(ex.args[1]);\n }\n }\n break;\n\n case 'MAP':\n case 'ITER':\n case 'LOOP':\n case 'LOOP_LEFT':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonInstruction(ex.args[0]);\n }\n break;\n\n case 'CREATE_CONTRACT':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonContract(ex.args[0]);\n }\n break;\n\n case 'DIP':\n if (ex.args?.length === 2) {\n /* istanbul ignore else */\n if (assertIntLiteral(ex.args[0])) {\n assertNatural(ex.args[0]);\n }\n /* istanbul ignore else */\n if (assertSeq(ex.args[1])) {\n assertMichelsonInstruction(ex.args[1]);\n }\n } else if (ex.args?.length === 1) {\n /* istanbul ignore else */\n if (assertSeq(ex.args[0])) {\n assertMichelsonInstruction(ex.args[0]);\n }\n } else {\n throw new MichelsonValidationError(ex, '1 or 2 arguments expected');\n }\n break;\n\n case 'PUSH':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonPushableType(ex.args[0]);\n assertMichelsonData(ex.args[1]);\n }\n break;\n\n case 'EMPTY_SET':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonComparableType(ex.args[0]);\n }\n break;\n\n case 'EMPTY_MAP':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonComparableType(ex.args[0]);\n assertMichelsonType(ex.args[1]);\n }\n break;\n\n case 'EMPTY_BIG_MAP':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonComparableType(ex.args[0]);\n assertMichelsonBigMapStorableType(ex.args[1]);\n }\n break;\n\n case 'LAMBDA_REC':\n case 'LAMBDA':\n /* istanbul ignore else */\n if (assertArgs(ex, 3)) {\n assertMichelsonType(ex.args[0]);\n assertMichelsonType(ex.args[1]);\n /* istanbul ignore else */\n if (assertSeq(ex.args[2])) {\n assertMichelsonInstruction(ex.args[2]);\n }\n }\n break;\n\n case 'VIEW':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n if (assertStringLiteral(ex.args[0])) {\n assertViewNameValid(ex.args[0]);\n }\n if (assertMichelsonType(ex.args[1])) {\n assertMichelsonPushableType(ex.args[1]);\n }\n }\n break;\n\n case 'EMIT':\n if (ex.args && ex.args.length > 0) {\n assertArgs(ex, 1);\n } else {\n assertArgs(ex, 0);\n }\n break;\n\n default:\n throw new MichelsonValidationError(ex, 'instruction expected');\n }\n }\n return true;\n}\n\nexport function assertMichelsonComparableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (Array.isArray(ex) || ex.prim === 'pair' || ex.prim === 'or' || ex.prim === 'option') {\n traverseType(ex, (ex) => assertMichelsonComparableType(ex));\n } else if (!Object.prototype.hasOwnProperty.call(simpleComparableTypeIDs, ex.prim)) {\n throw new MichelsonValidationError(ex, `${ex.prim}: type is not comparable`);\n }\n }\n return true;\n}\n\nexport function assertMichelsonPackableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'big_map' ||\n ex.prim === 'operation' ||\n ex.prim === 'sapling_state' ||\n ex.prim === 'ticket'\n ) {\n throw new MichelsonValidationError(\n ex,\n `${ex.prim}: type can't be used inside PACK/UNPACK instructions`\n );\n }\n traverseType(ex, (ex) => assertMichelsonPackableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonPushableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'big_map' ||\n ex.prim === 'operation' ||\n ex.prim === 'sapling_state' ||\n ex.prim === 'ticket' ||\n ex.prim === 'contract'\n ) {\n throw new MichelsonValidationError(ex, `${ex.prim}: type can't be pushed`);\n }\n traverseType(ex, (ex) => assertMichelsonPushableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonStorableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'operation' ||\n ex.prim === 'contract'\n ) {\n throw new MichelsonValidationError(\n ex,\n `${ex.prim}: type can't be used as part of a storage`\n );\n }\n traverseType(ex, (ex) => assertMichelsonStorableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonPassableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (!Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) || ex.prim === 'operation') {\n throw new MichelsonValidationError(\n ex,\n `${ex.prim}: type can't be used as part of a parameter`\n );\n }\n traverseType(ex, (ex) => assertMichelsonPassableType(ex));\n }\n }\n return true;\n}\n\nexport function assertMichelsonBigMapStorableType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (\n !Object.prototype.hasOwnProperty.call(typeIDs, ex.prim) ||\n ex.prim === 'big_map' ||\n ex.prim === 'operation' ||\n ex.prim === 'sapling_state'\n ) {\n throw new MichelsonValidationError(ex, `${ex.prim}: type can't be used inside a big_map`);\n }\n traverseType(ex, (ex) => assertMichelsonBigMapStorableType(ex));\n }\n }\n return true;\n}\n\nconst viewRe = new RegExp('^[a-zA-Z0-9_.%@]*$');\n\nexport function assertViewNameValid(name: StringLiteral): void {\n if (name.string.length > maxViewNameLength) {\n throw new MichelsonValidationError(name, `view name too long: ${name.string}`);\n }\n if (!viewRe.test(name.string)) {\n throw new MichelsonValidationError(name, `invalid character(s) in view name: ${name.string}`);\n }\n}\n\n/**\n * Checks if the node is a valid Michelson type expression.\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonType(ex: Expr): ex is MichelsonType {\n /* istanbul ignore else */\n if (assertPrimOrSeq(ex)) {\n if (isPrim(ex)) {\n if (!Object.prototype.hasOwnProperty.call(typeIDs, ex.prim)) {\n throw new MichelsonValidationError(ex, 'type expected');\n }\n traverseType(ex, (ex) => assertMichelsonType(ex));\n }\n }\n return true;\n}\n\nfunction traverseType(ex: Prim | Expr[], cb: (ex: Prim | Expr[]) => void): ex is MichelsonType {\n if (Array.isArray(ex) || ex.prim === 'pair') {\n const args = Array.isArray(ex) ? ex : ex.args;\n if (args === undefined || args.length < 2) {\n throw new MichelsonValidationError(ex, 'at least 2 arguments expected');\n }\n args.forEach((a) => {\n if (assertPrimOrSeq(a)) {\n cb(a);\n }\n });\n return true;\n }\n\n switch (ex.prim) {\n case 'option':\n case 'list':\n /* istanbul ignore else */\n if (assertArgs(ex, 1) && assertPrimOrSeq(ex.args[0])) {\n cb(ex.args[0]);\n }\n break;\n\n case 'contract':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonPassableType(ex.args[0]);\n }\n break;\n\n case 'or':\n /* istanbul ignore else */\n if (assertArgs(ex, 2) && assertPrimOrSeq(ex.args[0]) && assertPrimOrSeq(ex.args[1])) {\n cb(ex.args[0]);\n cb(ex.args[1]);\n }\n break;\n\n case 'lambda':\n /* istanbul ignore else */\n if (assertArgs(ex, 2)) {\n assertMichelsonType(ex.args[0]);\n assertMichelsonType(ex.args[1]);\n }\n break;\n\n case 'set':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonComparableType(ex.args[0]);\n }\n break;\n\n case 'map':\n /* istanbul ignore else */\n if (assertArgs(ex, 2) && assertPrimOrSeq(ex.args[0]) && assertPrimOrSeq(ex.args[1])) {\n assertMichelsonComparableType(ex.args[0]);\n cb(ex.args[1]);\n }\n break;\n\n case 'big_map':\n /* istanbul ignore else */\n if (assertArgs(ex, 2) && assertPrimOrSeq(ex.args[0]) && assertPrimOrSeq(ex.args[1])) {\n assertMichelsonComparableType(ex.args[0]);\n assertMichelsonBigMapStorableType(ex.args[1]);\n cb(ex.args[1]);\n }\n break;\n\n case 'ticket':\n /* istanbul ignore else */\n if (assertArgs(ex, 1) && assertPrimOrSeq(ex.args[0])) {\n assertMichelsonComparableType(ex.args[0]);\n }\n break;\n\n case 'sapling_state':\n case 'sapling_transaction':\n if (assertArgs(ex, 1)) {\n assertIntLiteral(ex.args[0]);\n }\n break;\n\n default:\n assertArgs(ex, 0);\n }\n\n return true;\n}\n/**\n * Checks if the node is a valid Michelson data literal such as `(Pair {Elt \"0\" 0} 0)`.\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonData(ex: Expr): ex is MichelsonData {\n if ('int' in ex || 'string' in ex || 'bytes' in ex) {\n return true;\n }\n\n if (Array.isArray(ex)) {\n let mapElts = 0;\n for (const n of ex) {\n if (isPrim(n) && n.prim === 'Elt') {\n /* istanbul ignore else */\n if (assertArgs(n, 2)) {\n assertMichelsonData(n.args[0]);\n assertMichelsonData(n.args[1]);\n }\n mapElts++;\n } else {\n assertMichelsonData(n);\n }\n }\n\n if (mapElts !== 0 && mapElts !== ex.length) {\n throw new MichelsonValidationError(ex, \"data entries and map elements can't be intermixed\");\n }\n return true;\n }\n\n if (isPrim(ex)) {\n switch (ex.prim) {\n case 'Unit':\n case 'True':\n case 'False':\n case 'None':\n assertArgs(ex, 0);\n break;\n\n case 'Pair':\n /* istanbul ignore else */\n if (ex.args === undefined || ex.args.length < 2) {\n throw new MichelsonValidationError(ex, 'at least 2 arguments expected');\n }\n for (const a of ex.args) {\n assertMichelsonData(a);\n }\n break;\n\n case 'Left':\n case 'Right':\n case 'Some':\n /* istanbul ignore else */\n if (assertArgs(ex, 1)) {\n assertMichelsonData(ex.args[0]);\n }\n break;\n\n case 'Lambda_rec':\n if (ex.args) {\n assertMichelsonInstruction(ex.args);\n }\n break;\n\n default:\n if (Object.prototype.hasOwnProperty.call(instructionIDs, ex.prim)) {\n assertMichelsonInstruction(ex);\n } else {\n throw new MichelsonValidationError(ex, 'data entry or instruction expected');\n }\n }\n } else {\n throw new MichelsonValidationError(ex, 'data entry expected');\n }\n\n return true;\n}\n\n/**\n * Checks if the node is a valid Michelson smart contract source containing all required and valid properties such as `parameter`, `storage` and `code`.\n * This is a type guard function which either returns true of throws an exception.\n * @param ex An AST node\n */\nexport function assertMichelsonContract(ex: Expr): ex is MichelsonContract {\n /* istanbul ignore else */\n if (assertSeq(ex)) {\n const toplevelSec: { [sec: string]: boolean } = {};\n const views: { [name: string]: boolean } = {};\n for (const sec of ex) {\n if (assertPrim(sec)) {\n if (sec.prim !== 'view') {\n if (sec.prim in toplevelSec) {\n throw new MichelsonValidationError(ex, `duplicate contract section: ${sec.prim}`);\n }\n toplevelSec[sec.prim] = true;\n }\n\n /* istanbul ignore else */\n switch (sec.prim) {\n case 'code':\n if (assertArgs(sec, 1)) {\n /* istanbul ignore else */\n if (assertSeq(sec.args[0])) {\n assertMichelsonInstruction(sec.args[0]);\n }\n }\n break;\n\n case 'parameter':\n if (assertArgs(sec, 1)) {\n assertMichelsonPassableType(sec.args[0]);\n }\n if (sec.annots) {\n throw new MichelsonValidationError(\n sec,\n 'Annotation must be part of the parameter type'\n );\n }\n break;\n\n case 'storage':\n if (assertArgs(sec, 1)) {\n assertMichelsonStorableType(sec.args[0]);\n }\n break;\n\n case 'view':\n if (assertArgs(sec, 4)) {\n if (assertStringLiteral(sec.args[0])) {\n const name = sec.args[0];\n if (name.string in views) {\n throw new MichelsonValidationError(ex, `duplicate view name: ${name.string}`);\n }\n views[name.string] = true;\n assertViewNameValid(name);\n }\n\n assertMichelsonPushableType(sec.args[1]);\n assertMichelsonPushableType(sec.args[2]);\n if (assertSeq(sec.args[3])) {\n assertMichelsonInstruction(sec.args[3]);\n }\n }\n break;\n\n default:\n throw new MichelsonValidationError(ex, `unexpected contract section: ${sec.prim}`);\n }\n }\n }\n }\n return true;\n}\n\n/**\n * Checks if the node is a valid Michelson smart contract source containing all required and valid properties such as `parameter`, `storage` and `code`.\n * @param ex An AST node\n */\nexport function isMichelsonScript(ex: Expr): ex is MichelsonContract {\n try {\n assertMichelsonContract(ex);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the node is a valid Michelson data literal such as `(Pair {Elt \"0\" 0} 0)`.\n * @param ex An AST node\n */\nexport function isMichelsonData(ex: Expr): ex is MichelsonData {\n try {\n assertMichelsonData(ex);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the node is a valid Michelson code (sequence of instructions).\n * @param ex An AST node\n */\nexport function isMichelsonCode(ex: Expr): ex is InstructionList {\n try {\n assertMichelsonInstruction(ex);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the node is a valid Michelson type expression.\n * @param ex An AST node\n */\nexport function isMichelsonType(ex: Expr): ex is MichelsonType {\n try {\n assertMichelsonType(ex);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isInstruction(p: Prim): p is MichelsonInstruction {\n return Object.prototype.hasOwnProperty.call(instructionIDs, p.prim);\n}\n\nexport function assertDataListIfAny(d: MichelsonData): d is MichelsonData[] {\n if (!Array.isArray(d)) {\n return false;\n }\n for (const v of d) {\n if ('prim' in v) {\n if (isInstruction(v)) {\n throw new MichelsonError(d, `Instruction outside of a lambda: ${JSON.stringify(d)}`);\n } else if (v.prim === 'Elt') {\n throw new MichelsonError(d, `Elt item outside of a map literal: ${JSON.stringify(d)}`);\n }\n }\n }\n return true;\n}\n","import { BytesLiteral, Expr, IntLiteral, Prim } from './micheline';\nimport {\n MichelsonTypeID,\n MichelsonDataID,\n MichelsonSectionID,\n MichelsonInstructionID,\n MichelsonData,\n MichelsonType,\n MichelsonDataOr,\n MichelsonDataOption,\n MichelsonInstruction,\n} from './michelson-types';\nimport {\n assertDataListIfAny,\n assertMichelsonData,\n assertMichelsonInstruction,\n} from './michelson-validator';\nimport {\n checkDecodeTezosID,\n encodeTezosID,\n hexBytes,\n isPairData,\n isPairType,\n MichelsonTypeError,\n parseBytes,\n parseDate,\n parseHex,\n unpackComb,\n} from './utils';\n\ntype PrimID =\n | MichelsonTypeID\n | MichelsonDataID\n | MichelsonSectionID\n | MichelsonInstructionID\n | 'Elt'\n | 'constant';\n\n// The order is important!\n// The position represent the encoding value.\nconst primitives: PrimID[] = [\n 'parameter',\n 'storage',\n 'code',\n 'False',\n 'Elt',\n 'Left',\n 'None',\n 'Pair',\n 'Right',\n 'Some',\n 'True',\n 'Unit',\n 'PACK',\n 'UNPACK',\n 'BLAKE2B',\n 'SHA256',\n 'SHA512',\n 'ABS',\n 'ADD',\n 'AMOUNT',\n 'AND',\n 'BALANCE',\n 'CAR',\n 'CDR',\n 'CHECK_SIGNATURE',\n 'COMPARE',\n 'CONCAT',\n 'CONS',\n 'CREATE_ACCOUNT',\n 'CREATE_CONTRACT',\n 'IMPLICIT_ACCOUNT',\n 'DIP',\n 'DROP',\n 'DUP',\n 'EDIV',\n 'EMPTY_MAP',\n 'EMPTY_SET',\n 'EQ',\n 'EXEC',\n 'FAILWITH',\n 'GE',\n 'GET',\n 'GT',\n 'HASH_KEY',\n 'IF',\n 'IF_CONS',\n 'IF_LEFT',\n 'IF_NONE',\n 'INT',\n 'LAMBDA',\n 'LE',\n 'LEFT',\n 'LOOP',\n 'LSL',\n 'LSR',\n 'LT',\n 'MAP',\n 'MEM',\n 'MUL',\n 'NEG',\n 'NEQ',\n 'NIL',\n 'NONE',\n 'NOT',\n 'NOW',\n 'OR',\n 'PAIR',\n 'PUSH',\n 'RIGHT',\n 'SIZE',\n 'SOME',\n 'SOURCE',\n 'SENDER',\n 'SELF',\n 'STEPS_TO_QUOTA',\n 'SUB',\n 'SWAP',\n 'TRANSFER_TOKENS',\n 'SET_DELEGATE',\n 'UNIT',\n 'UPDATE',\n 'XOR',\n 'ITER',\n 'LOOP_LEFT',\n 'ADDRESS',\n 'CONTRACT',\n 'ISNAT',\n 'CAST',\n 'RENAME',\n 'bool',\n 'contract',\n 'int',\n 'key',\n 'key_hash',\n 'lambda',\n 'list',\n 'map',\n 'big_map',\n 'nat',\n 'option',\n 'or',\n 'pair',\n 'set',\n 'signature',\n 'string',\n 'bytes',\n 'mutez',\n 'timestamp',\n 'unit',\n 'operation',\n 'address',\n 'SLICE',\n 'DIG',\n 'DUG',\n 'EMPTY_BIG_MAP',\n 'APPLY',\n 'chain_id',\n 'CHAIN_ID',\n 'LEVEL',\n 'SELF_ADDRESS',\n 'never',\n 'NEVER',\n 'UNPAIR',\n 'VOTING_POWER',\n 'TOTAL_VOTING_POWER',\n 'KECCAK',\n 'SHA3',\n 'PAIRING_CHECK',\n 'bls12_381_g1',\n 'bls12_381_g2',\n 'bls12_381_fr',\n 'sapling_state',\n 'sapling_transaction_deprecated',\n 'SAPLING_EMPTY_STATE',\n 'SAPLING_VERIFY_UPDATE',\n 'ticket',\n 'TICKET_DEPRECATED',\n 'READ_TICKET',\n 'SPLIT_TICKET',\n 'JOIN_TICKETS',\n 'GET_AND_UPDATE',\n 'chest',\n 'chest_key',\n 'OPEN_CHEST',\n 'VIEW',\n 'view',\n 'constant',\n 'SUB_MUTEZ',\n 'tx_rollup_l2_address',\n 'MIN_BLOCK_TIME',\n 'sapling_transaction',\n 'EMIT',\n 'Lambda_rec',\n 'LAMBDA_REC',\n 'TICKET',\n 'BYTES',\n 'NAT',\n];\n\nconst primTags: { [key in PrimID]?: number } & { [key: string]: number | undefined } =\n Object.assign({}, ...primitives.map((v, i) => ({ [v]: i })));\n\nenum Tag {\n Int = 0,\n String = 1,\n Sequence = 2,\n Prim0 = 3,\n Prim0Annot = 4,\n Prim1 = 5,\n Prim1Annot = 6,\n Prim2 = 7,\n Prim2Annot = 8,\n Prim = 9,\n Bytes = 10,\n}\nclass Writer {\n public buffer: number[] = [];\n\n get length(): number {\n return this.buffer.length;\n }\n\n writeBytes(val: number[]) {\n this.buffer.push(...val.map((v) => v & 0xff));\n }\n\n writeUint8(val: number) {\n const v = val | 0;\n this.buffer.push(v & 0xff);\n }\n\n writeUint16(val: number) {\n const v = val | 0;\n this.buffer.push((v >> 8) & 0xff);\n this.buffer.push(v & 0xff);\n }\n\n writeUint32(val: number) {\n const v = val | 0;\n this.buffer.push((v >> 24) & 0xff);\n this.buffer.push((v >> 16) & 0xff);\n this.buffer.push((v >> 8) & 0xff);\n this.buffer.push(v & 0xff);\n }\n\n writeInt8(val: number) {\n this.writeUint8(val);\n }\n\n writeInt16(val: number) {\n this.writeUint16(val);\n }\n\n writeInt32(val: number) {\n this.writeUint32(val);\n }\n}\n\nconst boundsErr = new Error('bounds out of range');\nclass Reader {\n constructor(\n private buffer: number[] | Uint8Array,\n private idx: number = 0,\n private cap: number = buffer.length\n ) {}\n\n /** Remaining length */\n get length(): number {\n return this.cap - this.idx;\n }\n\n readBytes(len: number): number[] | Uint8Array {\n if (this.cap - this.idx < len) {\n throw boundsErr;\n }\n const ret = this.buffer.slice(this.idx, this.idx + len);\n this.idx += len;\n return ret;\n }\n\n reader(len: number): Reader {\n if (this.cap - this.idx < len) {\n throw boundsErr;\n }\n const ret = new Reader(this.buffer, this.idx, this.idx + len);\n this.idx += len;\n return ret;\n }\n\n copy(): Reader {\n return new Reader(this.buffer, this.idx, this.cap);\n }\n\n readUint8(): number {\n if (this.cap - this.idx < 1) {\n throw boundsErr;\n }\n return this.buffer[this.idx++] >>> 0;\n }\n\n readUint16(): number {\n if (this.cap - this.idx < 2) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n return ((x0 << 8) | x1) >>> 0;\n }\n\n readUint32(): number {\n if (this.cap - this.idx < 4) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n const x2 = this.buffer[this.idx++];\n const x3 = this.buffer[this.idx++];\n return ((x0 << 24) | (x1 << 16) | (x2 << 8) | x3) >>> 0;\n }\n\n readInt8(): number {\n if (this.cap - this.idx < 1) {\n throw boundsErr;\n }\n const x = this.buffer[this.idx++];\n return (x << 24) >> 24;\n }\n\n readInt16(): number {\n if (this.cap - this.idx < 2) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n return (((x0 << 8) | x1) << 16) >> 16;\n }\n\n readInt32(): number {\n if (this.cap - this.idx < 4) {\n throw boundsErr;\n }\n const x0 = this.buffer[this.idx++];\n const x1 = this.buffer[this.idx++];\n const x2 = this.buffer[this.idx++];\n const x3 = this.buffer[this.idx++];\n return (x0 << 24) | (x1 << 16) | (x2 << 8) | x3;\n }\n}\n\nenum ContractID {\n Implicit = 0,\n Originated = 1,\n}\n\nenum PublicKeyHashID {\n ED25519 = 0,\n SECP256K1 = 1,\n P256 = 2,\n}\n\ntype AddressType =\n | 'ED25519PublicKeyHash'\n | 'SECP256K1PublicKeyHash'\n | 'P256PublicKeyHash'\n | 'ContractHash';\n\nexport interface Address {\n type: AddressType;\n hash: number[] | Uint8Array;\n entryPoint?: string;\n}\n\nfunction readPublicKeyHash(rd: Reader): Address {\n let type: AddressType;\n const tag = rd.readUint8();\n switch (tag) {\n case PublicKeyHashID.ED25519:\n type = 'ED25519PublicKeyHash';\n break;\n case PublicKeyHashID.SECP256K1:\n type = 'SECP256K1PublicKeyHash';\n break;\n case PublicKeyHashID.P256:\n type = 'P256PublicKeyHash';\n break;\n default:\n throw new Error(`unknown public key hash tag: ${tag}`);\n }\n return { type, hash: rd.readBytes(20) };\n}\n\nfunction readAddress(rd: Reader): Address {\n let address: Address;\n const tag = rd.readUint8();\n switch (tag) {\n case ContractID.Implicit:\n address = readPublicKeyHash(rd);\n break;\n\n case ContractID.Originated:\n address = {\n type: 'ContractHash',\n hash: rd.readBytes(20),\n };\n rd.readBytes(1);\n break;\n\n default:\n throw new Error(`unknown address tag: ${tag}`);\n }\n\n if (rd.length !== 0) {\n // entry point\n const dec = new TextDecoder();\n address.entryPoint = dec.decode(new Uint8Array(rd.readBytes(rd.length)));\n }\n return address;\n}\n\nfunction writePublicKeyHash(a: Address, w: Writer): void {\n let tag: PublicKeyHashID;\n switch (a.type) {\n case 'ED25519PublicKeyHash':\n tag = PublicKeyHashID.ED25519;\n break;\n case 'SECP256K1PublicKeyHash':\n tag = PublicKeyHashID.SECP256K1;\n break;\n case 'P256PublicKeyHash':\n tag = PublicKeyHashID.P256;\n break;\n default:\n throw new Error(`unexpected address type: ${a.type}`);\n }\n w.writeUint8(tag);\n w.writeBytes(Array.from(a.hash));\n}\n\nfunction writeAddress(a: Address, w: Writer): void {\n if (a.type === 'ContractHash') {\n w.writeUint8(ContractID.Originated);\n w.writeBytes(Array.from(a.hash));\n w.writeUint8(0);\n } else {\n w.writeUint8(ContractID.Implicit);\n writePublicKeyHash(a, w);\n }\n\n if (a.entryPoint !== undefined && a.entryPoint !== '' && a.entryPoint !== 'default') {\n const enc = new TextEncoder();\n const bytes = enc.encode(a.entryPoint);\n w.writeBytes(Array.from(bytes));\n }\n}\n\nenum PublicKeyID {\n ED25519 = 0,\n SECP256K1 = 1,\n P256 = 2,\n}\n\nexport type PublicKeyType = 'ED25519PublicKey' | 'SECP256K1PublicKey' | 'P256PublicKey';\nexport interface PublicKey {\n type: PublicKeyType;\n publicKey: number[] | Uint8Array;\n}\n\nfunction readPublicKey(rd: Reader): PublicKey {\n let ln: number;\n let type: PublicKeyType;\n const tag = rd.readUint8();\n switch (tag) {\n case PublicKeyID.ED25519:\n type = 'ED25519PublicKey';\n ln = 32;\n break;\n case PublicKeyID.SECP256K1:\n type = 'SECP256K1PublicKey';\n ln = 33;\n break;\n case PublicKeyID.P256:\n type = 'P256PublicKey';\n ln = 33;\n break;\n default:\n throw new Error(`unknown public key tag: ${tag}`);\n }\n return { type, publicKey: rd.readBytes(ln) };\n}\n\nfunction writePublicKey(pk: PublicKey, w: Writer): void {\n let tag: PublicKeyID;\n switch (pk.type) {\n case 'ED25519PublicKey':\n tag = PublicKeyID.ED25519;\n break;\n case 'SECP256K1PublicKey':\n tag = PublicKeyID.SECP256K1;\n break;\n case 'P256PublicKey':\n tag = PublicKeyID.P256;\n break;\n default:\n throw new Error(`unexpected public key type: ${pk.type}`);\n }\n w.writeUint8(tag);\n w.writeBytes(Array.from(pk.publicKey));\n}\n\ntype WriteTransformFunc = (e: Expr) => [Expr, IterableIterator<WriteTransformFunc>];\n\nfunction writeExpr(expr: Expr, wr: Writer, tf: WriteTransformFunc): void {\n const [e, args] = tf(expr);\n\n if (Array.isArray(e)) {\n const w = new Writer();\n for (const v of e) {\n const a = args.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n writeExpr(v, w, a.value);\n }\n wr.writeUint8(Tag.Sequence);\n wr.writeUint32(w.length);\n wr.writeBytes(w.buffer);\n return;\n }\n\n if ('string' in e) {\n const enc = new TextEncoder();\n const bytes = enc.encode(e.string);\n wr.writeUint8(Tag.String);\n wr.writeUint32(bytes.length);\n wr.writeBytes(Array.from(bytes));\n return;\n }\n\n if ('int' in e) {\n wr.writeUint8(Tag.Int);\n let val = BigInt(e.int);\n const sign = val < 0;\n if (sign) {\n val = -val;\n }\n let i = 0;\n do {\n const bits = i === 0 ? BigInt(6) : BigInt(7);\n let byte = val & ((BigInt(1) << bits) - BigInt(1));\n val >>= bits;\n if (val) {\n byte |= BigInt(0x80);\n }\n if (i === 0 && sign) {\n byte |= BigInt(0x40);\n }\n wr.writeUint8(Number(byte));\n i++;\n } while (val);\n return;\n }\n\n if ('bytes' in e) {\n const bytes = parseHex(e.bytes);\n wr.writeUint8(Tag.Bytes);\n wr.writeUint32(bytes.length);\n wr.writeBytes(bytes);\n return;\n }\n\n const prim = primTags[e.prim];\n if (prim === undefined) {\n throw new TypeError(`Can't encode primary: ${e.prim}`);\n }\n\n const tag =\n (e.args?.length || 0) < 3\n ? Tag.Prim0 +\n (e.args?.length || 0) * 2 +\n (e.annots === undefined || e.annots.length === 0 ? 0 : 1)\n : Tag.Prim;\n\n wr.writeUint8(tag);\n wr.writeUint8(prim);\n\n if (e.args !== undefined) {\n if (e.args.length < 3) {\n for (const v of e.args) {\n const a = args.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n writeExpr(v, wr, a.value);\n }\n } else {\n const w = new Writer();\n for (const v of e.args) {\n const a = args.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n writeExpr(v, w, a.value);\n }\n wr.writeUint32(w.length);\n wr.writeBytes(w.buffer);\n }\n }\n\n if (e.annots !== undefined && e.annots.length !== 0) {\n const enc = new TextEncoder();\n const bytes = enc.encode(e.annots.join(' '));\n wr.writeUint32(bytes.length);\n wr.writeBytes(Array.from(bytes));\n } else if (e.args !== undefined && e.args.length >= 3) {\n wr.writeUint32(0);\n }\n}\n\ntype ReadTransformFuncs = [(e: Expr) => IterableIterator<ReadTransformFuncs>, (e: Expr) => Expr];\n\nfunction readExpr(rd: Reader, tf: ReadTransformFuncs): Expr {\n function* passThrough() {\n while (true) {\n yield readPassThrough;\n }\n }\n const [args, tr] = tf;\n const tag = rd.readUint8();\n switch (tag) {\n case Tag.Int: {\n const buf: number[] = [];\n let byte: number;\n do {\n byte = rd.readInt8();\n buf.push(byte);\n } while ((byte & 0x80) !== 0);\n let val = BigInt(0);\n let sign = false;\n for (let i = buf.length - 1; i >= 0; i--) {\n const bits = i === 0 ? BigInt(6) : BigInt(7);\n const byte = BigInt(buf[i]);\n val <<= bits;\n val |= byte & ((BigInt(1) << bits) - BigInt(1));\n if (i === 0) {\n sign = !!(byte & BigInt(0x40));\n }\n }\n if (sign) {\n val = -val;\n }\n return tr({ int: String(val) });\n }\n\n case Tag.String: {\n const length = rd.readUint32();\n const bytes = rd.readBytes(length);\n const dec = new TextDecoder();\n return tr({ string: dec.decode(new Uint8Array(bytes)) });\n }\n\n case Tag.Bytes: {\n const length = rd.readUint32();\n const bytes = rd.readBytes(length);\n const hex = hexBytes(Array.from(bytes));\n return tr({ bytes: hex });\n }\n\n case Tag.Sequence: {\n const length = rd.readUint32();\n let res: Expr[] = [];\n let savedrd = rd.copy();\n // make two passes\n let it: IterableIterator<ReadTransformFuncs> = passThrough();\n for (let n = 0; n < 2; n++) {\n const r = savedrd.reader(length);\n res = [];\n while (r.length > 0) {\n const a = it.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n res.push(readExpr(r, a.value));\n }\n // make a second pass with injected side effects\n it = args(res);\n savedrd = rd;\n }\n return tr(res);\n }\n\n default: {\n if (tag > 9) {\n throw new Error(`Unknown tag: ${tag}`);\n }\n const p = rd.readUint8();\n if (p >= primitives.length) {\n throw new Error(`Unknown primitive tag: ${p}`);\n }\n const prim = primitives[p];\n const argn = (tag - 3) >> 1;\n let res: Prim = { prim };\n // make two passes\n let it: IterableIterator<ReadTransformFuncs> = passThrough();\n let savedrd = rd.copy();\n for (let n = 0; n < 2; n++) {\n res = { prim };\n if (argn < 3) {\n for (let i = 0; i < argn; i++) {\n const a = it.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n res.args = res.args || [];\n res.args.push(readExpr(savedrd, a.value));\n }\n } else {\n res.args = res.args || [];\n const length = savedrd.readUint32();\n const r = savedrd.reader(length);\n while (r.length > 0) {\n const a = it.next();\n if (a.done) {\n throw new Error('REPORT ME: iterator is done');\n }\n res.args.push(readExpr(r, a.value));\n }\n }\n // make a second pass with injected side effects\n it = args(res);\n savedrd = rd;\n }\n\n if (((tag - 3) & 1) === 1 || argn === 3) {\n // read annotations\n const length = rd.readUint32();\n if (length !== 0) {\n const bytes = rd.readBytes(length);\n const dec = new TextDecoder();\n res.annots = dec.decode(new Uint8Array(bytes)).split(' ');\n }\n }\n return tr(res);\n }\n }\n}\n\nconst isOrData = (e: Expr): e is MichelsonDataOr =>\n 'prim' in e && (e.prim === 'Left' || e.prim === 'Right');\nconst isOptionData = (e: Expr): e is MichelsonDataOption =>\n 'prim' in e && (e.prim === 'Some' || e.prim === 'None');\n\nconst getWriteTransformFunc = (t: MichelsonType): WriteTransformFunc => {\n if (isPairType(t)) {\n return (d: Expr) => {\n if (!isPairData(d)) {\n throw new MichelsonTypeError(t, d, `pair expected: ${JSON.stringify(d)}`);\n }\n assertDataListIfAny(d);\n // combs aren't used in pack format\n const tc = unpackComb('pair', t);\n const dc = unpackComb('Pair', d);\n return [\n dc,\n (function* () {\n for (const a of tc.args) {\n yield getWriteTransformFunc(a);\n }\n })(),\n ];\n };\n }\n\n switch (t.prim) {\n case 'or':\n return (d: Expr) => {\n if (!isOrData(d)) {\n throw new MichelsonTypeError(t, d, `or expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* () {\n yield getWriteTransformFunc(t.args[d.prim === 'Left' ? 0 : 1]);\n })(),\n ];\n };\n\n case 'option':\n return (d: Expr) => {\n if (!isOptionData(d)) {\n throw new MichelsonTypeError(t, d, `option expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* () {\n const dd = d;\n if (dd.prim === 'Some') {\n yield getWriteTransformFunc(t.args[0]);\n }\n })(),\n ];\n };\n\n case 'list':\n case 'set':\n return (d: Expr) => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* () {\n for (const _v of d) {\n yield getWriteTransformFunc(t.args[0]);\n }\n })(),\n ];\n };\n\n case 'map':\n return (d: Expr) => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `map expected: ${JSON.stringify(d)}`);\n }\n return [\n d,\n (function* (): Generator<WriteTransformFunc> {\n for (const _elt of d) {\n yield (elt: Expr) => {\n if (!('prim' in elt) || elt.prim !== 'Elt') {\n throw new MichelsonTypeError(\n t,\n elt,\n `map element expected: ${JSON.stringify(elt)}`\n );\n }\n return [\n elt,\n (function* () {\n for (const a of t.args) {\n yield getWriteTransformFunc(a);\n }\n })(),\n ];\n };\n }\n })(),\n ];\n };\n\n case 'chain_id':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `chain id expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const id = checkDecodeTezosID(d.string, 'ChainID');\n if (id === null) {\n throw new MichelsonTypeError(t, d, `chain id base58 expected: ${d.string}`);\n }\n bytes = { bytes: hexBytes(id[1]) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'signature':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `signature expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const sig = checkDecodeTezosID(\n d.string,\n 'ED25519Signature',\n 'SECP256K1Signature',\n 'P256Signature',\n 'GenericSignature'\n );\n if (sig === null) {\n throw new MichelsonTypeError(t, d, `signature base58 expected: ${d.string}`);\n }\n bytes = { bytes: hexBytes(sig[1]) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'key_hash':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `key hash expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const pkh = checkDecodeTezosID(\n d.string,\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash'\n );\n if (pkh === null) {\n throw new MichelsonTypeError(t, d, `key hash base58 expected: ${d.string}`);\n }\n const w = new Writer();\n writePublicKeyHash({ type: pkh[0], hash: pkh[1] }, w);\n bytes = { bytes: hexBytes(w.buffer) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'key':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `public key expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const key = checkDecodeTezosID(\n d.string,\n 'ED25519PublicKey',\n 'SECP256K1PublicKey',\n 'P256PublicKey'\n );\n if (key === null) {\n throw new MichelsonTypeError(t, d, `public key base58 expected: ${d.string}`);\n }\n const w = new Writer();\n writePublicKey({ type: key[0], publicKey: key[1] }, w);\n bytes = { bytes: hexBytes(w.buffer) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'address':\n return (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n }\n let bytes: BytesLiteral;\n if ('string' in d) {\n const s = d.string.split('%');\n const address = checkDecodeTezosID(\n s[0],\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash',\n 'ContractHash'\n );\n if (address === null) {\n throw new MichelsonTypeError(t, d, `address base58 expected: ${d.string}`);\n }\n const w = new Writer();\n writeAddress(\n { type: address[0], hash: address[1], entryPoint: s.length > 1 ? s[1] : undefined },\n w\n );\n bytes = { bytes: hexBytes(w.buffer) };\n } else {\n bytes = d;\n }\n return [bytes, [][Symbol.iterator]()];\n };\n\n case 'timestamp':\n return (d: Expr) => {\n if (!('string' in d) && !('int' in d)) {\n throw new MichelsonTypeError(t, d, `timestamp expected: ${JSON.stringify(d)}`);\n }\n let int: IntLiteral;\n if ('string' in d) {\n const p = parseDate(d);\n if (p === null) {\n throw new MichelsonTypeError(t, d, `can't parse date: ${d.string}`);\n }\n int = { int: String(Math.floor(p.getTime() / 1000)) };\n } else {\n int = d;\n }\n return [int, [][Symbol.iterator]()];\n };\n\n default:\n return writePassThrough;\n }\n};\n\ntype PushInstruction = MichelsonInstruction & Prim<'PUSH'>;\nconst isPushInstruction = (e: Expr): e is PushInstruction => 'prim' in e && e.prim === 'PUSH';\n\nconst writePassThrough: WriteTransformFunc = (e: Expr) => {\n if (isPushInstruction(e)) {\n assertMichelsonInstruction(e);\n // capture inlined type definition\n return [\n e,\n (function* () {\n yield writePassThrough;\n yield getWriteTransformFunc(e.args[0]);\n })(),\n ];\n }\n\n return [\n e,\n (function* () {\n while (true) {\n yield writePassThrough;\n }\n })(),\n ];\n};\n\n/**\n * Serializes any value of packable type to its optimized binary representation\n * identical to the one used by PACK and UNPACK Michelson instructions.\n * Without a type definition (not recommended) the data will be encoded as a binary form of a generic Michelson expression.\n * Type definition allows some types like `timestamp` and `address` and other base58 representable types to be encoded to\n * corresponding optimized binary forms borrowed from the Tezos protocol\n *\n * ```typescript\n * const data: MichelsonData = {\n * string: \"KT1RvkwF4F7pz1gCoxkyZrG1RkrxQy3gmFTv%foo\"\n * };\n *\n * const typ: MichelsonType = {\n * prim: \"address\"\n * };\n *\n * const packed = packData(data, typ);\n *\n * // 050a0000001901be41ee922ddd2cf33201e49d32da0afec571dce300666f6f\n * ```\n *\n * Without a type definition the base58 encoded address will be treated as a string\n * ```typescript\n * const data: MichelsonData = {\n * string: \"KT1RvkwF4F7pz1gCoxkyZrG1RkrxQy3gmFTv%foo\"\n * };\n *\n * const packed = packData(data);\n *\n * // 0501000000284b543152766b7746344637707a3167436f786b795a724731526b7278517933676d46547625666f6f\n * ```\n * @param d Data object\n * @param t Optional type definition\n * @returns Binary representation as numeric array\n */\nexport function packData(d: MichelsonData, t?: MichelsonType): number[] {\n const w = new Writer();\n w.writeUint8(5);\n writeExpr(d, w, t !== undefined ? getWriteTransformFunc(t) : writePassThrough);\n return w.buffer;\n}\n\n/**\n * Serializes any value of packable type to its optimized binary representation\n * identical to the one used by PACK and UNPACK Michelson instructions.\n * Same as {@link packData} but returns a `bytes` Michelson data literal instead of an array\n *\n * ```typescript\n * const data: MichelsonData = {\n * string: \"2019-09-26T10:59:51Z\"\n * };\n *\n * const typ: MichelsonType = {\n * prim: \"timestamp\"\n * };\n *\n * const packed = packDataBytes(data, typ);\n *\n * // { bytes: \"0500a7e8e4d80b\" }\n * ```\n * @param d Data object\n * @param t Optional type definition\n * @returns Binary representation as a bytes literal\n */\nexport function packDataBytes(d: MichelsonData, t?: MichelsonType): BytesLiteral {\n return { bytes: hexBytes(packData(d, t)) };\n}\n\nconst getReadTransformFuncs = (t: MichelsonType): ReadTransformFuncs => {\n if (isPairType(t)) {\n return [\n (d: Expr) => {\n if (!isPairData(d)) {\n throw new MichelsonTypeError(t, d, `pair expected: ${JSON.stringify(d)}`);\n }\n const tc = unpackComb('pair', t);\n return (function* () {\n for (const a of tc.args) {\n yield getReadTransformFuncs(a);\n }\n })();\n },\n (d: Expr) => d,\n ];\n }\n\n switch (t.prim) {\n case 'or':\n return [\n (d: Expr) => {\n if (!isOrData(d)) {\n throw new MichelsonTypeError(t, d, `or expected: ${JSON.stringify(d)}`);\n }\n return (function* () {\n yield getReadTransformFuncs(t.args[d.prim === 'Left' ? 0 : 1]);\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'option':\n return [\n (d: Expr) => {\n if (!isOptionData(d)) {\n throw new MichelsonTypeError(t, d, `option expected: ${JSON.stringify(d)}`);\n }\n return (function* () {\n if (d.prim === 'Some') {\n yield getReadTransformFuncs(t.args[0]);\n }\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'list':\n case 'set':\n return [\n (d: Expr) => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n }\n return (function* () {\n while (true) {\n yield getReadTransformFuncs(t.args[0]);\n }\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'map':\n return [\n (d: Expr): IterableIterator<ReadTransformFuncs> => {\n if (!Array.isArray(d)) {\n throw new MichelsonTypeError(t, d, `map expected: ${JSON.stringify(d)}`);\n }\n return (function* (): Generator<ReadTransformFuncs> {\n while (true) {\n yield [\n (elt: Expr) => {\n if (!('prim' in elt) || elt.prim !== 'Elt') {\n throw new MichelsonTypeError(\n t,\n elt,\n `map element expected: ${JSON.stringify(elt)}`\n );\n }\n return (function* () {\n for (const a of t.args) {\n yield getReadTransformFuncs(a);\n }\n })();\n },\n (elt: Expr) => elt,\n ];\n }\n })();\n },\n (d: Expr) => d,\n ];\n\n case 'chain_id':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `chain id expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n return { string: encodeTezosID('ChainID', bytes) };\n },\n ];\n\n case 'signature':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `signature expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n return { string: encodeTezosID('GenericSignature', bytes) };\n },\n ];\n\n case 'key_hash':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `key hash expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n const addr = readPublicKeyHash(rd);\n return {\n string:\n encodeTezosID(addr.type, addr.hash) + (addr.entryPoint ? '%' + addr.entryPoint : ''),\n };\n },\n ];\n\n case 'key':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `public key expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n const pk = readPublicKey(rd);\n return { string: encodeTezosID(pk.type, pk.publicKey) };\n },\n ];\n\n case 'address':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('bytes' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const bytes = parseBytes(d.bytes);\n if (bytes === null) {\n throw new MichelsonTypeError(t, d, `can't parse bytes: ${d.bytes}`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n const addr = readAddress(rd);\n return {\n string:\n encodeTezosID(addr.type, addr.hash) + (addr.entryPoint ? '%' + addr.entryPoint : ''),\n };\n },\n ];\n\n case 'timestamp':\n return [\n () => [][Symbol.iterator](),\n (d: Expr) => {\n if (!('int' in d) && !('string' in d)) {\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n }\n if ('string' in d) {\n return d;\n }\n const date = new Date(parseInt(d.int, 10) * 1000);\n return { string: date.toISOString().slice(0, 19) + 'Z' };\n },\n ];\n\n default:\n return readPassThrough;\n }\n};\n\nconst readPassThrough: ReadTransformFuncs = [\n (e: Expr) => {\n if (isPushInstruction(e)) {\n assertMichelsonInstruction(e);\n // capture inlined type definition\n return (function* () {\n yield readPassThrough;\n yield getReadTransformFuncs(e.args[0]);\n })();\n }\n\n return (function* () {\n while (true) {\n yield readPassThrough;\n }\n })();\n },\n (e: Expr) => e,\n];\n\n/**\n * Deserialize a byte array into the corresponding Michelson value.\n * Without a type definition (not recommended) the binary data will be treated as a binary form of a generic Michelson expression and returned as is.\n * Type definition allows some types like `timestamp` and `address` and other types usually encoded in optimized binary forms to be transformed\n * back to their string representations like base58 and ISO timestamps.\n *\n * ```typescript\n * const src = [0x05, 0x00, 0xa7, 0xe8, 0xe4, 0xd8, 0x0b];\n *\n * const typ: MichelsonType = {\n * prim: \"timestamp\"\n * };\n *\n * const data = unpackData(src, typ);\n *\n * // { string: \"2019-09-26T10:59:51Z\" }\n * ```\n *\n * Same binary data without a type definition\n * ```typescript\n * const src = [0x05, 0x00, 0xa7, 0xe8, 0xe4, 0xd8, 0x0b];\n *\n * const data = unpackData(src);\n *\n * // { int: \"1569495591\" }\n * ```\n * @param src Byte array\n * @param t Optional type definition\n * @returns Deserialized data\n */\nexport function unpackData(src: number[] | Uint8Array, t?: MichelsonType): MichelsonData {\n const r = new Reader(src);\n if (r.readUint8() !== 5) {\n throw new Error('incorrect packed data magic number');\n }\n const ex = readExpr(r, t !== undefined ? getReadTransformFuncs(t) : readPassThrough);\n if (assertMichelsonData(ex)) {\n return ex;\n }\n throw new Error(); // never\n}\n\n/**\n * Deserialize a byte array into the corresponding Michelson value.\n * Same as {@link unpackData} but takes a `bytes` Michelson data literal instead of an array\n *\n * ```typescript\n * const src = { bytes: \"0500a7e8e4d80b\" };\n *\n * const typ: MichelsonType = {\n * prim: \"timestamp\"\n * };\n *\n * const data = unpackDataBytes(src, typ);\n *\n * // { string: \"2019-09-26T10:59:51Z\" }\n * ```\n * @param src Bytes object\n * @param t Optional type definition\n * @returns Deserialized data\n */\nexport function unpackDataBytes(src: BytesLiteral, t?: MichelsonType): MichelsonData {\n const bytes = parseBytes(src.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${src.bytes}\"`);\n }\n return unpackData(bytes, t);\n}\n\n// helper functions also used by validator\n\nexport function decodeAddressBytes(b: BytesLiteral): Address {\n const bytes = parseBytes(b.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${b.bytes}\"`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n return readAddress(rd);\n}\n\nexport function decodePublicKeyHashBytes(b: BytesLiteral): Address {\n const bytes = parseBytes(b.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${b.bytes}\"`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n return readPublicKeyHash(rd);\n}\n\nexport function decodePublicKeyBytes(b: BytesLiteral): PublicKey {\n const bytes = parseBytes(b.bytes);\n if (bytes === null) {\n throw new Error(`can't parse bytes: \"${b.bytes}\"`);\n }\n const rd = new Reader(new Uint8Array(bytes));\n return readPublicKey(rd);\n}\n","import { Prim, Expr } from './micheline';\nimport {\n MichelsonType,\n MichelsonData,\n MichelsonCode,\n MichelsonTypeOption,\n MichelsonContract,\n MichelsonContractSection,\n MichelsonReturnType,\n MichelsonTypePair,\n MichelsonInstruction,\n InstructionList,\n MichelsonTypeID,\n MichelsonTypeOr,\n DefaultProtocol,\n Protocol,\n refContract,\n MichelsonTypeAddress,\n MichelsonContractView,\n ProtoInferiorTo,\n} from './michelson-types';\nimport {\n unpackAnnotations,\n MichelsonError,\n isNatural,\n LongInteger,\n parseBytes,\n compareBytes,\n isDecimal,\n checkDecodeTezosID,\n UnpackedAnnotations,\n Nullable,\n UnpackAnnotationsOptions,\n unpackComb,\n MichelsonTypeError,\n isPairType,\n isPairData,\n parseDate,\n} from './utils';\nimport { decodeBase58Check } from './base58';\nimport { decodeAddressBytes, decodePublicKeyBytes, decodePublicKeyHashBytes } from './binary';\nimport {\n assertMichelsonComparableType,\n assertMichelsonPackableType,\n assertMichelsonStorableType,\n assertMichelsonBigMapStorableType,\n assertMichelsonPushableType,\n isInstruction,\n assertDataListIfAny,\n} from './michelson-validator';\nimport { ParserOptions } from './micheline-parser';\n\nexport interface Context extends ParserOptions {\n contract?: MichelsonContract;\n traceCallback?: (t: InstructionTrace) => void;\n}\n\nexport class MichelsonInstructionError extends MichelsonError<MichelsonCode> {\n /**\n * @param val Value of a type node caused the error\n * @param stackState Current stack state\n * @param message An error message\n */\n constructor(val: MichelsonCode, public stackState: MichelsonReturnType, message?: string) {\n super(val, message);\n Object.setPrototypeOf(this, MichelsonInstructionError.prototype);\n }\n}\n\n// 'sequence as a pair' edo syntax helpers\nfunction typeID(t: MichelsonType): MichelsonTypeID {\n return Array.isArray(t) ? 'pair' : t.prim;\n}\n\ntype TypeArgs<T extends MichelsonType> = T extends Prim ? T['args'] : T;\nfunction typeArgs<T extends MichelsonType>(t: T): TypeArgs<T> {\n return ('prim' in t ? (t as Extract<MichelsonType, Prim>).args : t) as TypeArgs<T>;\n}\n\nfunction assertScalarTypesEqual(a: MichelsonType, b: MichelsonType, field = false): void {\n if (typeID(a) !== typeID(b)) {\n throw new MichelsonTypeError(a, undefined, `types mismatch: ${typeID(a)} != ${typeID(b)}`);\n }\n\n const ann = [unpackAnnotations(a), unpackAnnotations(b)];\n if (ann[0].t && ann[1].t && ann[0].t[0] !== ann[1].t[0]) {\n throw new MichelsonTypeError(\n a,\n undefined,\n `${typeID(a)}: type names mismatch: ${ann[0].t[0]} != ${ann[1].t[0]}`\n );\n }\n if (field && ann[0].f && ann[1].f && ann[0].f[0] !== ann[1].f[0]) {\n throw new MichelsonTypeError(\n a,\n undefined,\n `${typeID(a)}: field names mismatch: ${ann[0].f[0]} != ${ann[1].f}`\n );\n }\n\n if (isPairType(a)) {\n const aArgs = unpackComb('pair', a);\n const bArgs = unpackComb('pair', b as typeof a);\n assertScalarTypesEqual(aArgs.args[0], bArgs.args[0], true);\n assertScalarTypesEqual(aArgs.args[1], bArgs.args[1], true);\n return;\n }\n\n switch (a.prim) {\n case 'option':\n case 'list':\n case 'contract':\n case 'set':\n case 'ticket':\n assertScalarTypesEqual(a.args[0], (b as typeof a).args[0]);\n break;\n\n case 'or':\n assertScalarTypesEqual(a.args[0], (b as typeof a).args[0], true);\n assertScalarTypesEqual(a.args[1], (b as typeof a).args[1], true);\n break;\n\n case 'lambda':\n case 'map':\n case 'big_map':\n assertScalarTypesEqual(a.args[0], (b as typeof a).args[0]);\n assertScalarTypesEqual(a.args[1], (b as typeof a).args[1]);\n break;\n\n case 'sapling_state':\n case 'sapling_transaction':\n if (parseInt(a.args[0].int, 10) !== parseInt((b as typeof a).args[0].int, 10)) {\n throw new MichelsonTypeError(\n a,\n undefined,\n `${typeID(a)}: type argument mismatch: ${a.args[0].int} != ${(b as typeof a).args[0].int}`\n );\n }\n }\n}\n\nfunction assertStacksEqual<T1 extends MichelsonType[], T2 extends T1>(a: T1, b: T2): void {\n if (a.length !== b.length) {\n throw new MichelsonTypeError(a, undefined, `stack length mismatch: ${a.length} != ${b.length}`);\n }\n for (let i = 0; i < a.length; i++) {\n assertScalarTypesEqual(a[i], b[i]);\n }\n}\n\nexport function assertTypeAnnotationsValid(t: MichelsonType, field = false): void {\n if (!Array.isArray(t)) {\n const ann = unpackAnnotations(t);\n if ((ann.t?.length || 0) > 1) {\n throw new MichelsonTypeError(\n t,\n undefined,\n `${t.prim}: at most one type annotation allowed: ${t.annots}`\n );\n }\n\n if (field) {\n if ((ann.f?.length || 0) > 1) {\n throw new MichelsonTypeError(\n t,\n undefined,\n `${t.prim}: at most one field annotation allowed: ${t.annots}`\n );\n }\n } else {\n if ((ann.f?.length || 0) > 0) {\n throw new MichelsonTypeError(\n t,\n undefined,\n `${t.prim}: field annotations aren't allowed: ${t.annots}`\n );\n }\n }\n }\n\n if (isPairType(t)) {\n const args = typeArgs(t);\n for (const a of args) {\n assertTypeAnnotationsValid(a, true);\n }\n return;\n }\n\n switch (t.prim) {\n case 'option':\n case 'list':\n case 'contract':\n case 'set':\n assertTypeAnnotationsValid(t.args[0]);\n break;\n\n case 'or':\n for (const a of t.args) {\n assertTypeAnnotationsValid(a, true);\n }\n break;\n\n case 'lambda':\n case 'map':\n case 'big_map':\n assertTypeAnnotationsValid(t.args[0]);\n assertTypeAnnotationsValid(t.args[1]);\n }\n}\n\n// Data integrity check\n\nfunction _compareMichelsonData(t: MichelsonType, a: MichelsonData, b: MichelsonData): number {\n if (isPairType(t)) {\n if (isPairData(a) && isPairData(b)) {\n assertDataListIfAny(a);\n assertDataListIfAny(b);\n const tComb = unpackComb('pair', t);\n const aComb = unpackComb('Pair', a);\n const bComb = unpackComb('Pair', b);\n const x = _compareMichelsonData(tComb.args[0], aComb.args[0], bComb.args[0]);\n if (x !== 0) {\n return x;\n }\n return _compareMichelsonData(tComb.args[0], aComb.args[1], bComb.args[1]);\n }\n } else {\n switch (t.prim) {\n case 'int':\n case 'nat':\n case 'mutez':\n if ('int' in a && 'int' in b) {\n return new LongInteger(a.int).cmp(new LongInteger(b.int));\n }\n break;\n\n case 'string':\n if ('string' in a && 'string' in b) {\n const x = a.string.localeCompare(b.string);\n return x < 0 ? -1 : x > 0 ? 1 : 0;\n }\n break;\n\n case 'bytes':\n if ('bytes' in a && 'bytes' in b) {\n const aa = parseBytes(a.bytes);\n const bb = parseBytes(b.bytes);\n if (aa !== null && bb !== null) {\n return compareBytes(aa, bb);\n }\n }\n break;\n\n case 'bool':\n if (\n 'prim' in a &&\n 'prim' in b &&\n (a.prim === 'True' || a.prim === 'False') &&\n (b.prim === 'True' || b.prim === 'False')\n ) {\n return a.prim === b.prim ? 0 : a.prim === 'False' ? -1 : 1;\n }\n break;\n\n case 'key':\n case 'key_hash':\n case 'address':\n case 'signature':\n case 'chain_id':\n if (('string' in a || 'bytes' in a) && ('string' in b || 'bytes' in b)) {\n return compareBytes(\n 'string' in a ? decodeBase58Check(a.string) : parseBytes(a.bytes) || [],\n 'string' in b ? decodeBase58Check(b.string) : parseBytes(b.bytes) || []\n );\n }\n break;\n\n case 'timestamp':\n if (('string' in a || 'int' in a) && ('string' in b || 'int' in b)) {\n const aa = parseDate(a);\n const bb = parseDate(b);\n if (aa !== null && bb !== null) {\n const x = aa.valueOf() - bb.valueOf();\n return x < 0 ? -1 : x > 0 ? 1 : 0;\n }\n }\n break;\n\n case 'unit':\n if ('prim' in a && 'prim' in b && a.prim === 'Unit' && b.prim === 'Unit') {\n return 0;\n }\n }\n }\n\n // Unlikely, types are expected to be verified before the function call\n throw new MichelsonTypeError(\n t,\n undefined,\n `${typeID(t)}: not comparable values: ${JSON.stringify(a)}, ${JSON.stringify(b)}`\n );\n}\n\n// Simplified version of assertMichelsonInstruction() for previously validated data\nfunction isFunction(d: MichelsonData): d is InstructionList {\n if (!Array.isArray(d)) {\n return false;\n }\n for (const v of d) {\n if (!((Array.isArray(v) && isFunction(v)) || ('prim' in v && isInstruction(v)))) {\n return false;\n }\n }\n return true;\n}\n\nfunction assertDataValidInternal(d: MichelsonData, t: MichelsonType, ctx: Context | null): void {\n if (isPairType(t)) {\n if (isPairData(d)) {\n assertDataListIfAny(d);\n const dc = unpackComb('Pair', d);\n const tc = unpackComb('pair', t);\n assertDataValidInternal(dc.args[0], tc.args[0], ctx);\n assertDataValidInternal(dc.args[1], tc.args[1], ctx);\n return;\n }\n throw new MichelsonTypeError(t, d, `pair expected: ${JSON.stringify(d)}`);\n }\n\n switch (t.prim) {\n // Atomic literals\n case 'int':\n if ('int' in d && isDecimal(d.int)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `integer value expected: ${JSON.stringify(d)}`);\n\n case 'nat':\n case 'mutez':\n if ('int' in d && isNatural(d.int)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `natural value expected: ${JSON.stringify(d)}`);\n\n case 'string':\n if ('string' in d) {\n return;\n }\n throw new MichelsonTypeError(t, d, `string value expected: ${JSON.stringify(d)}`);\n\n case 'bytes':\n case 'bls12_381_g1':\n case 'bls12_381_g2':\n if ('bytes' in d && parseBytes(d.bytes) !== null) {\n return;\n }\n throw new MichelsonTypeError(t, d, `bytes value expected: ${JSON.stringify(d)}`);\n\n case 'bool':\n if ('prim' in d && (d.prim === 'True' || d.prim === 'False')) {\n return;\n }\n throw new MichelsonTypeError(t, d, `boolean value expected: ${JSON.stringify(d)}`);\n\n case 'key_hash':\n if (\n 'string' in d &&\n checkDecodeTezosID(\n d.string,\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash'\n ) !== null\n ) {\n return;\n } else if ('bytes' in d) {\n try {\n decodePublicKeyHashBytes(d);\n return;\n } catch (err) {\n // ignore message\n }\n }\n throw new MichelsonTypeError(t, d, `key hash expected: ${JSON.stringify(d)}`);\n\n case 'timestamp':\n if (('string' in d || 'int' in d) && parseDate(d) !== null) {\n return;\n }\n throw new MichelsonTypeError(t, d, `timestamp expected: ${JSON.stringify(d)}`);\n\n case 'address':\n if ('string' in d) {\n let address = d.string;\n const ep = d.string.indexOf('%');\n if (ep >= 0) {\n // trim entry point\n address = d.string.slice(0, ep);\n }\n if (\n checkDecodeTezosID(\n address,\n 'ED25519PublicKeyHash',\n 'SECP256K1PublicKeyHash',\n 'P256PublicKeyHash',\n 'ContractHash',\n 'TxRollupL2Address',\n 'RollupAddress'\n ) !== null\n ) {\n return;\n }\n } else if ('bytes' in d) {\n try {\n decodeAddressBytes(d);\n return;\n } catch (err) {\n // ignore message\n }\n }\n throw new MichelsonTypeError(t, d, `address expected: ${JSON.stringify(d)}`);\n\n case 'key':\n if (\n 'string' in d &&\n checkDecodeTezosID(d.string, 'ED25519PublicKey', 'SECP256K1PublicKey', 'P256PublicKey') !==\n null\n ) {\n return;\n } else if ('bytes' in d) {\n try {\n decodePublicKeyBytes(d);\n return;\n } catch (err) {\n // ignore message\n }\n }\n throw new MichelsonTypeError(t, d, `public key expected: ${JSON.stringify(d)}`);\n\n case 'unit':\n if ('prim' in d && d.prim === 'Unit') {\n return;\n }\n throw new MichelsonTypeError(t, d, `unit value expected: ${JSON.stringify(d)}`);\n\n case 'signature':\n if (\n 'bytes' in d ||\n ('string' in d &&\n checkDecodeTezosID(\n d.string,\n 'ED25519Signature',\n 'SECP256K1Signature',\n 'P256Signature',\n 'GenericSignature'\n ) !== null)\n ) {\n return;\n }\n throw new MichelsonTypeError(t, d, `signature expected: ${JSON.stringify(d)}`);\n\n case 'chain_id':\n if ('bytes' in d || 'string' in d) {\n const x = 'string' in d ? decodeBase58Check(d.string) : parseBytes(d.bytes);\n if (x !== null) {\n return;\n }\n }\n throw new MichelsonTypeError(t, d, `chain id expected: ${JSON.stringify(d)}`);\n\n // Complex types\n case 'option':\n if ('prim' in d) {\n if (d.prim === 'None') {\n return;\n } else if (d.prim === 'Some') {\n assertDataValidInternal(d.args[0], t.args[0], ctx);\n return;\n }\n }\n throw new MichelsonTypeError(t, d, `option expected: ${JSON.stringify(d)}`);\n\n case 'list':\n case 'set':\n if (assertDataListIfAny(d)) {\n //let prev: MichelsonData | undefined;\n for (const v of d) {\n assertDataValidInternal(v, t.args[0], ctx);\n }\n return;\n }\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n\n case 'or':\n if ('prim' in d) {\n if (d.prim === 'Left') {\n assertDataValidInternal(d.args[0], t.args[0], ctx);\n return;\n } else if (d.prim === 'Right') {\n assertDataValidInternal(d.args[0], t.args[1], ctx);\n return;\n }\n }\n throw new MichelsonTypeError(t, d, `union (or) expected: ${JSON.stringify(d)}`);\n case 'lambda':\n if (isFunction(d)) {\n const ret = functionTypeInternal(d, [t.args[0]], ctx);\n if ('failed' in ret) {\n throw new MichelsonTypeError(t, d, `function is failed with error type: ${ret.failed}`);\n }\n if (ret.length !== 1) {\n throw new MichelsonTypeError(t, d, 'function must return a value');\n }\n assertScalarTypesEqual(t.args[1], ret[0]);\n return;\n }\n throw new MichelsonTypeError(t, d, `function expected: ${JSON.stringify(d)}`);\n\n case 'map':\n case 'big_map':\n if (Array.isArray(d)) {\n //let prev: MichelsonMapElt | undefined;\n for (const v of d) {\n if (!('prim' in v) || v.prim !== 'Elt') {\n throw new MichelsonTypeError(t, d, `map elements expected: ${JSON.stringify(d)}`);\n }\n assertDataValidInternal(v.args[0], t.args[0], ctx);\n assertDataValidInternal(v.args[1], t.args[1], ctx);\n }\n return;\n }\n throw new MichelsonTypeError(t, d, `${t.prim} expected: ${JSON.stringify(d)}`);\n\n case 'bls12_381_fr':\n if (('int' in d && isDecimal(d.int)) || ('bytes' in d && parseBytes(d.bytes) !== null)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `BLS12-381 element expected: ${JSON.stringify(d)}`);\n\n case 'sapling_state':\n if (Array.isArray(d)) {\n return;\n }\n throw new MichelsonTypeError(t, d, `sapling state expected: ${JSON.stringify(d)}`);\n\n case 'ticket':\n assertDataValidInternal(\n d,\n {\n prim: 'pair',\n args: [{ prim: 'address' }, t.args[0], { prim: 'nat' }],\n },\n ctx\n );\n return;\n\n default:\n throw new MichelsonTypeError(\n t,\n d,\n `type ${typeID(t)} don't have Michelson literal representation`\n );\n }\n}\n\n// Code validation\n\ntype StackType<T extends (MichelsonTypeID[] | null)[]> = {\n [N in keyof T]: T[N] extends MichelsonTypeID[] ? MichelsonType<T[N][number]> : MichelsonType;\n};\n\nexport interface InstructionTrace {\n op: MichelsonCode;\n in: MichelsonType[];\n out: MichelsonReturnType;\n}\n\nfunction instructionListType(\n inst: InstructionList,\n stack: MichelsonType[],\n ctx: Context | null\n): MichelsonReturnType {\n let ret: MichelsonReturnType = stack;\n let s = stack;\n let i = 0;\n for (const op of inst) {\n const ft = functionTypeInternal(op, s, ctx);\n ret = ft;\n if ('failed' in ft) {\n break;\n }\n s = ft;\n i++;\n }\n\n if (\n 'failed' in ret &&\n ret.level == 0 &&\n (!('prim' in ret.failed) || ret.failed.prim !== 'never') &&\n i !== inst.length - 1\n ) {\n throw new MichelsonInstructionError(inst, ret, 'FAIL must appear in a tail position');\n }\n\n if (ctx?.traceCallback !== undefined) {\n const trace: InstructionTrace = {\n op: inst,\n in: stack,\n out: ret,\n };\n ctx.traceCallback(trace);\n }\n return 'failed' in ret ? { failed: ret.failed, level: ret.level + 1 } : ret;\n}\n\nfunction functionTypeInternal(\n inst: MichelsonCode,\n stack: MichelsonType[],\n ctx: Context | null\n): MichelsonReturnType {\n const proto = ctx?.protocol || DefaultProtocol;\n\n if (Array.isArray(inst)) {\n return instructionListType(inst, stack, ctx);\n }\n const instruction = inst; // Make it const for type guarding\n\n // make sure the stack has enough number of arguments of specific types\n function args<T extends (MichelsonTypeID[] | null)[]>(n: number, ...typeIds: T): StackType<T> {\n if (stack.length < typeIds.length + n) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: stack must have at least ${typeIds.length} element(s)`\n );\n }\n\n let i = n;\n for (const ids of typeIds) {\n if (ids !== null && ids.length !== 0) {\n let ii = 0;\n while (ii < ids.length && ids[ii] !== typeID(stack[i])) {\n ii++;\n }\n if (ii === ids.length) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: stack type mismatch: [${i}] expected to be ${ids}, got ${typeID(\n stack[i]\n )} instead`\n );\n }\n }\n i++;\n }\n return stack.slice(n, typeIds.length + n) as StackType<T>;\n }\n\n function rethrow<T extends unknown[], U>(fn: (...args: T) => U) {\n return (...args: T): U => {\n try {\n return fn(...args);\n } catch (err) {\n if (err instanceof MichelsonError) {\n throw new MichelsonInstructionError(instruction, stack, err.message);\n } else {\n throw err;\n }\n }\n };\n }\n\n function rethrowTypeGuard<T extends Expr, U extends MichelsonType & T>(fn: (arg: T) => arg is U) {\n return (arg: T): arg is U => {\n try {\n return fn(arg);\n } catch (err) {\n if (err instanceof MichelsonError) {\n throw new MichelsonInstructionError(instruction, stack, err.message);\n } else {\n throw err;\n }\n }\n };\n }\n\n const argAnn = rethrow(unpackAnnotations);\n const ensureStacksEqual = rethrow(assertStacksEqual);\n const ensureTypesEqual = rethrow(assertScalarTypesEqual);\n const ensureComparableType = rethrowTypeGuard(assertMichelsonComparableType);\n const ensurePackableType = rethrowTypeGuard(assertMichelsonPackableType);\n const ensureStorableType = rethrowTypeGuard(assertMichelsonStorableType);\n const ensurePushableType = rethrowTypeGuard(assertMichelsonPushableType);\n const ensureBigMapStorableType = rethrowTypeGuard(assertMichelsonBigMapStorableType);\n\n // unpack instruction annotations and assert their maximum number\n function instructionAnn(\n num: { f?: number; t?: number; v?: number },\n opt?: UnpackAnnotationsOptions\n ) {\n const a = argAnn(instruction, {\n ...opt,\n emptyFields: num.f !== undefined && num.f > 1,\n emptyVar: num.v !== undefined && num.v > 1,\n });\n const assertNum = (a: string[] | undefined, n: number | undefined, type: string) => {\n if (a && a.length > (n || 0)) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at most ${n || 0} ${type} annotations allowed`\n );\n }\n };\n assertNum(a.f, num.f, 'field');\n assertNum(a.t, num.t, 'type');\n assertNum(a.v, num.v, 'variable');\n return a;\n }\n\n // also keeps annotation class if null is provided\n function annotate<T extends MichelsonType>(tt: T, a: Nullable<UnpackedAnnotations>): T {\n const tx: MichelsonType = tt;\n const t: Extract<MichelsonType, Prim> = Array.isArray(tx) ? { prim: 'pair', args: tx } : tx;\n const src = argAnn(t);\n const ann =\n a.v !== undefined || a.t !== undefined || a.f !== undefined\n ? [\n ...((a.v === null ? src.v : a.v) || []),\n ...((a.t === null ? src.t : a.t) || []),\n ...((a.f === null ? src.f : a.f) || []),\n ]\n : undefined;\n\n const { annots: _annots, ...rest } = t;\n return { ...(rest as T), ...(ann && ann.length !== 0 && { annots: ann }) };\n }\n\n // shortcut to copy at most one variable annotation from the instruction to the type\n function annotateVar<T extends MichelsonType>(t: T, def?: string) {\n const ia = instructionAnn({ v: 1 });\n return annotate(t, {\n v: ia.v !== undefined ? ia.v : def !== undefined ? [def] : null,\n t: null,\n });\n }\n\n // annotate CAR/CDR/UNPAIR/GET\n function annotateField(\n arg: MichelsonTypePair<MichelsonType[]>,\n field: MichelsonType,\n insAnn: UnpackedAnnotations,\n n: number,\n defField: string\n ): MichelsonType {\n const fieldAnn = argAnn(field).f?.[0]; // field's field annotation\n const insFieldAnn = insAnn.f?.[n];\n if (\n insFieldAnn !== undefined &&\n insFieldAnn !== '%' &&\n fieldAnn !== undefined &&\n insFieldAnn !== fieldAnn\n ) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: field names doesn't match: ${insFieldAnn} !== ${fieldAnn}`\n );\n }\n const insVarAnn = insAnn.v?.[n]; // nth instruction's variable annotation\n const varAnn = argAnn(arg).v?.[0]; // instruction argument's variable annotation\n return annotate(field, {\n t: null,\n v: insVarAnn\n ? insVarAnn === '@%'\n ? fieldAnn\n ? ['@' + fieldAnn.slice(1)]\n : undefined\n : insVarAnn === '@%%'\n ? varAnn\n ? ['@' + varAnn.slice(1) + '.' + (fieldAnn ? fieldAnn.slice(1) : defField)]\n : fieldAnn\n ? ['@' + fieldAnn.slice(1)]\n : undefined\n : [insVarAnn]\n : null,\n });\n }\n\n // comb helper functions\n function getN(\n src: MichelsonTypePair<MichelsonType[]>,\n n: number,\n i: number = n\n ): MichelsonType[] {\n const p = unpackComb('pair', src);\n if (i === 1) {\n return [p.args[0]];\n } else if (i === 2) {\n return p.args;\n }\n const right = p.args[1];\n if (isPairType(right)) {\n return [p.args[0], ...getN(right, n, i - 1)];\n } else {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at least ${n} fields are expected`\n );\n }\n }\n\n function getNth(\n src: MichelsonTypePair<MichelsonType[]>,\n n: number,\n i: number = n\n ): MichelsonType {\n if (i === 0) {\n return src;\n }\n const p = unpackComb('pair', src);\n if (i === 1) {\n return p.args[0];\n }\n const right = p.args[1];\n if (isPairType(right)) {\n return getNth(right, n, i - 2);\n } else if (i === 2) {\n return right;\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at least ${n + 1} fields are expected`\n );\n }\n\n function updateNth(\n src: MichelsonTypePair<MichelsonType[]>,\n x: MichelsonType,\n n: number,\n i: number = n\n ): MichelsonType {\n if (i === 0) {\n return x;\n }\n const p = unpackComb('pair', src);\n if (i === 1) {\n return {\n ...p,\n args: [x, p.args[1]],\n };\n }\n const right = p.args[1];\n if (isPairType(right)) {\n return {\n ...p,\n args: [p.args[0], updateNth(right, x, n, i - 2)],\n };\n } else if (i === 2) {\n return {\n ...p,\n args: [p.args[0], x],\n };\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: at least ${n + 1} fields are expected`\n );\n }\n\n const varSuffix = (a: UnpackedAnnotations, suffix: string) => [\n '@' + (a.v ? a.v[0].slice(1) + '.' : '') + suffix,\n ];\n\n function branchType(br0: MichelsonReturnType, br1: MichelsonReturnType): MichelsonReturnType {\n if ('failed' in br0 || 'failed' in br1) {\n return 'failed' in br0 ? br1 : br0;\n } else {\n ensureStacksEqual(br0, br1);\n return br0;\n }\n }\n\n const retStack = ((instruction: MichelsonInstruction): MichelsonReturnType => {\n switch (instruction.prim) {\n case 'DUP': {\n const n = instruction.args ? parseInt(instruction.args[0].int, 10) : 1;\n if (n === 0) {\n throw new MichelsonInstructionError(instruction, stack, 'DUP 0 is forbidden');\n }\n const s = args(n - 1, null)[0];\n if (typeID(s) === 'ticket') {\n throw new MichelsonInstructionError(instruction, stack, \"ticket can't be DUPed\");\n }\n return [s, ...stack];\n }\n\n case 'SWAP': {\n const s = args(0, null, null);\n instructionAnn({});\n return [s[1], s[0], ...stack.slice(2)];\n }\n\n case 'SOME':\n return [\n annotate({ prim: 'option', args: [args(0, null)[0]] }, instructionAnn({ t: 1, v: 1 })),\n ...stack.slice(1),\n ];\n\n case 'UNIT':\n return [annotate({ prim: 'unit' }, instructionAnn({ v: 1, t: 1 })), ...stack];\n\n case 'PAIR': {\n const n = instruction.args ? parseInt(instruction.args[0].int, 10) : 2;\n if (n < 2) {\n throw new MichelsonInstructionError(instruction, stack, `PAIR ${n} is forbidden`);\n }\n const s = args(0, ...new Array<null>(n).fill(null));\n const ia = instructionAnn({ f: n, t: 1, v: 1 }, { specialFields: true });\n const trim = (s: string) => {\n const i = s.lastIndexOf('.');\n return s.slice(i > 0 ? i + 1 : 1);\n };\n const retArgs = s.map((v, i) => {\n const va = argAnn(v);\n const f =\n ia.f && ia.f.length > i && ia.f[i] !== '%'\n ? ia.f[i] === '%@'\n ? va.v\n ? ['%' + trim(va.v?.[0] || '')]\n : undefined\n : [ia.f[i]]\n : undefined;\n return annotate(v, { v: null, t: null, f });\n });\n return [\n annotate(\n {\n prim: 'pair',\n args: retArgs,\n },\n { t: ia.t, v: ia.v }\n ),\n ...stack.slice(n),\n ];\n }\n\n case 'UNPAIR': {\n const n = instruction.args ? parseInt(instruction.args[0].int, 10) : 2;\n if (n < 2) {\n throw new MichelsonInstructionError(instruction, stack, `UNPAIR ${n} is forbidden`);\n }\n const s = args(0, ['pair'])[0];\n const ia = instructionAnn({ f: 2, v: 2 }, { specialVar: true });\n const fields = getN(s, n);\n return [\n ...fields.map((field, i) => annotateField(s, field, ia, i, i === 0 ? 'car' : 'cdr')),\n ...stack.slice(1),\n ];\n }\n\n case 'CAR':\n case 'CDR': {\n const s = unpackComb('pair', args(0, ['pair'])[0]);\n const field = s.args[instruction.prim === 'CAR' ? 0 : 1];\n const ia = instructionAnn({ f: 1, v: 1 }, { specialVar: true });\n return [\n annotateField(s, field, ia, 0, instruction.prim.toLocaleLowerCase()),\n ...stack.slice(1),\n ];\n }\n\n case 'CONS': {\n const s = args(0, null, ['list']);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar({ prim: 'list', args: [s[1].args[0]] }), ...stack.slice(2)];\n }\n\n case 'SIZE':\n args(0, ['string', 'list', 'set', 'map', 'bytes']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(1)];\n\n case 'MEM': {\n const s = args(0, null, ['set', 'map', 'big_map']);\n ensureComparableType(s[0]);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar({ prim: 'bool' }), ...stack.slice(2)];\n }\n\n case 'GET':\n if (instruction.args) {\n // comb operation\n const n = parseInt(instruction.args[0].int, 10);\n const s = args(0, ['pair'])[0];\n return [annotateVar(getNth(s, n)), ...stack.slice(1)];\n } else {\n // map operation\n const s = args(0, null, ['map', 'big_map']);\n ensureComparableType(s[0]);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar({ prim: 'option', args: [s[1].args[1]] }), ...stack.slice(2)];\n }\n\n case 'UPDATE':\n if (instruction.args) {\n // comb operation\n const n = parseInt(instruction.args[0].int, 10);\n const s = args(0, null, ['pair']);\n return [annotateVar(updateNth(s[1], s[0], n)), ...stack.slice(2)];\n } else {\n // map operation\n const s0 = args(0, null, ['bool', 'option']);\n ensureComparableType(s0[0]);\n if (s0[1].prim === 'bool') {\n const s1 = args(2, ['set']);\n ensureTypesEqual(s0[0], s1[0].args[0]);\n return [\n annotateVar({\n prim: 'set',\n args: [annotate(s0[0], { t: null })],\n }),\n ...stack.slice(3),\n ];\n }\n\n const s1 = args(2, ['map', 'big_map']);\n ensureTypesEqual(s0[0], s1[0].args[0]);\n if (s1[0].prim === 'map') {\n return [\n annotateVar({\n prim: 'map',\n args: [annotate(s0[0], { t: null }), annotate(s0[1].args[0], { t: null })],\n }),\n ...stack.slice(3),\n ];\n }\n ensureBigMapStorableType(s0[1].args[0]);\n return [\n annotateVar({\n prim: 'big_map',\n args: [annotate(s0[0], { t: null }), annotate(s0[1].args[0], { t: null })],\n }),\n ...stack.slice(3),\n ];\n }\n\n case 'GET_AND_UPDATE': {\n const ia = instructionAnn({ v: 2 });\n const s = args(0, null, ['option'], ['map', 'big_map']);\n ensureComparableType(s[0]);\n ensureTypesEqual(s[0], s[2].args[0]);\n ensureTypesEqual(s[1].args[0], s[2].args[1]);\n const va = ia.v?.map((v) => (v !== '@' ? [v] : undefined));\n if (s[2].prim === 'map') {\n return [\n annotate({ prim: 'option', args: [s[2].args[1]] }, { v: va?.[0] }),\n annotate(\n {\n prim: 'map',\n args: [annotate(s[0], { t: null }), annotate(s[1].args[0], { t: null })],\n },\n { v: va?.[1] }\n ),\n ...stack.slice(3),\n ];\n }\n ensureBigMapStorableType(s[1].args[0]);\n return [\n annotate({ prim: 'option', args: [s[2].args[1]] }, { v: va?.[0] }),\n annotate(\n {\n prim: 'big_map',\n args: [annotate(s[0], { t: null }), annotate(s[1].args[0], { t: null })],\n },\n { v: va?.[1] }\n ),\n ...stack.slice(3),\n ];\n }\n\n case 'EXEC': {\n const s = args(0, null, ['lambda']);\n ensureTypesEqual(s[0], s[1].args[0]);\n return [annotateVar(s[1].args[1]), ...stack.slice(2)];\n }\n\n case 'APPLY': {\n const s = args(0, null, ['lambda']);\n ensureStorableType(s[0]);\n ensurePushableType(s[0]);\n if (!isPairType(s[1].args[0])) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: function's argument must be a pair: ${typeID(s[1].args[0])}`\n );\n }\n const pt = s[1].args[0];\n ensureTypesEqual(s[0], typeArgs(pt)[0]);\n return [\n annotateVar({ prim: 'lambda', args: [typeArgs(pt)[1], s[1].args[1]] }),\n ...stack.slice(2),\n ];\n }\n\n case 'FAILWITH': {\n const s = args(0, null)[0];\n if (!ProtoInferiorTo(proto, Protocol.PtEdo2Zk)) {\n ensurePackableType(s);\n }\n return { failed: s, level: 0 };\n }\n\n case 'NEVER':\n args(0, ['never']);\n return { failed: { prim: 'never' }, level: 0 };\n\n case 'RENAME':\n return [annotateVar(args(0, null)[0]), ...stack.slice(1)];\n\n case 'CONCAT': {\n const s0 = args(0, ['string', 'list', 'bytes']);\n if (s0[0].prim === 'list') {\n if (typeID(s0[0].args[0]) !== 'string' && typeID(s0[0].args[0]) !== 'bytes') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't concatenate list of ${typeID(s0[0].args[0])}'s`\n );\n }\n return [annotateVar(s0[0].args[0]), ...stack.slice(1)];\n }\n const s1 = args(1, ['string', 'bytes']);\n if (s0[0].prim !== s1[0].prim) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't concatenate ${s0[0].prim} with ${s1[0].prim}`\n );\n }\n return [annotateVar(s1[0]), ...stack.slice(2)];\n }\n\n case 'SLICE':\n return [\n annotateVar(\n { prim: 'option', args: [args(0, ['nat'], ['nat'], ['string', 'bytes'])[2]] },\n '@slice'\n ),\n ...stack.slice(3),\n ];\n\n case 'PACK': {\n const s = args(0, null)[0];\n ensurePackableType(s);\n return [annotateVar({ prim: 'bytes' }, '@packed'), ...stack.slice(1)];\n }\n\n case 'ADD': {\n const s = args(\n 0,\n ['nat', 'int', 'timestamp', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr'],\n ['nat', 'int', 'timestamp', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr']\n );\n if (\n (s[0].prim === 'nat' && s[1].prim === 'int') ||\n (s[0].prim === 'int' && s[1].prim === 'nat')\n ) {\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'int' && s[1].prim === 'timestamp') ||\n (s[0].prim === 'timestamp' && s[1].prim === 'int')\n ) {\n return [annotateVar({ prim: 'timestamp' }), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'int' ||\n s[0].prim === 'nat' ||\n s[0].prim === 'mutez' ||\n s[0].prim === 'bls12_381_g1' ||\n s[0].prim === 'bls12_381_g2' ||\n s[0].prim === 'bls12_381_fr') &&\n s[0].prim === s[1].prim\n ) {\n return [annotateVar(s[0]), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't add ${s[0].prim} to ${s[1].prim}`\n );\n }\n\n case 'SUB': {\n const s = ProtoInferiorTo(proto, Protocol.PsiThaCa)\n ? args(0, ['nat', 'int', 'timestamp', 'mutez'], ['nat', 'int', 'timestamp', 'mutez'])\n : args(0, ['nat', 'int', 'timestamp'], ['nat', 'int', 'timestamp']);\n\n if (\n ((s[0].prim === 'nat' || s[0].prim === 'int') &&\n (s[1].prim === 'nat' || s[1].prim === 'int')) ||\n (s[0].prim === 'timestamp' && s[1].prim === 'timestamp')\n ) {\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n } else if (s[0].prim === 'timestamp' && s[1].prim === 'int') {\n return [annotateVar({ prim: 'timestamp' }), ...stack.slice(2)];\n } else if (s[0].prim === 'mutez' && s[1].prim === 'mutez') {\n return [annotateVar({ prim: 'mutez' }), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't subtract ${s[0].prim} from ${s[1].prim}`\n );\n }\n\n case 'SUB_MUTEZ': {\n const _s = args(0, ['mutez'], ['mutez']);\n return [annotateVar({ prim: 'option', args: [{ prim: 'mutez' }] }), ...stack.slice(2)];\n }\n\n case 'MUL': {\n const s = args(\n 0,\n ['nat', 'int', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr'],\n ['nat', 'int', 'mutez', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr']\n );\n if (\n (s[0].prim === 'nat' && s[1].prim === 'int') ||\n (s[0].prim === 'int' && s[1].prim === 'nat')\n ) {\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'nat' && s[1].prim === 'mutez') ||\n (s[0].prim === 'mutez' && s[1].prim === 'nat')\n ) {\n return [annotateVar({ prim: 'mutez' }), ...stack.slice(2)];\n } else if (\n ((s[0].prim === 'bls12_381_g1' ||\n s[0].prim === 'bls12_381_g2' ||\n s[0].prim === 'bls12_381_fr') &&\n s[1].prim === 'bls12_381_fr') ||\n ((s[0].prim === 'nat' || s[0].prim === 'int') && s[0].prim === s[1].prim)\n ) {\n return [annotateVar(s[0]), ...stack.slice(2)];\n } else if (\n ((s[0].prim === 'nat' || s[0].prim === 'int') && s[1].prim === 'bls12_381_fr') ||\n ((s[1].prim === 'nat' || s[1].prim === 'int') && s[0].prim === 'bls12_381_fr')\n ) {\n return [annotateVar({ prim: 'bls12_381_fr' }), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't multiply ${s[0].prim} by ${s[1].prim}`\n );\n }\n\n case 'EDIV': {\n const res = (\n a: 'nat' | 'int' | 'mutez',\n b: 'nat' | 'int' | 'mutez'\n ): MichelsonTypeOption<MichelsonType> => ({\n prim: 'option',\n args: [{ prim: 'pair', args: [{ prim: a }, { prim: b }] }],\n });\n const s = args(0, ['nat', 'int', 'mutez'], ['nat', 'int', 'mutez']);\n if (s[0].prim === 'nat' && s[1].prim === 'nat') {\n return [annotateVar(res('nat', 'nat')), ...stack.slice(2)];\n } else if (\n (s[0].prim === 'nat' || s[0].prim === 'int') &&\n (s[1].prim === 'nat' || s[1].prim === 'int')\n ) {\n return [annotateVar(res('int', 'nat')), ...stack.slice(2)];\n } else if (s[0].prim === 'mutez' && s[1].prim === 'nat') {\n return [annotateVar(res('mutez', 'mutez')), ...stack.slice(2)];\n } else if (s[0].prim === 'mutez' && s[1].prim === 'mutez') {\n return [annotateVar(res('nat', 'mutez')), ...stack.slice(2)];\n }\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: can't euclideally divide ${s[0].prim} by ${s[1].prim}`\n );\n }\n\n case 'ABS':\n args(0, ['int']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(1)];\n\n case 'ISNAT':\n args(0, ['int']);\n return [annotateVar({ prim: 'option', args: [{ prim: 'nat' }] }), ...stack.slice(1)];\n\n case 'INT':\n args(0, ['nat', 'bls12_381_fr', 'bytes']);\n return [annotateVar({ prim: 'int' }), ...stack.slice(1)];\n\n case 'BYTES':\n args(0, ['nat', 'int']);\n return [annotateVar({ prim: 'bytes' }), ...stack.slice(1)];\n\n case 'NAT':\n args(0, ['bytes']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(1)];\n\n case 'NEG': {\n const s = args(0, ['nat', 'int', 'bls12_381_g1', 'bls12_381_g2', 'bls12_381_fr'])[0];\n if (s.prim === 'nat' || s.prim === 'int') {\n return [annotateVar({ prim: 'int' }), ...stack.slice(1)];\n }\n return [annotateVar(s), ...stack.slice(1)];\n }\n\n case 'LSL':\n case 'LSR':\n args(0, ['nat', 'bytes'], ['nat', 'bytes']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(2)];\n\n case 'OR':\n case 'XOR': {\n const s = args(0, ['nat', 'bytes', 'bool'], ['nat', 'bytes', 'bool']);\n if (s[0].prim !== s[1].prim) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: both arguments must be of the same type: ${s[0].prim}, ${s[1].prim}`\n );\n }\n return [annotateVar(s[1]), ...stack.slice(2)];\n }\n\n case 'AND': {\n const s = args(0, ['nat', 'bytes', 'bool', 'int'], ['nat', 'bytes', 'bool']);\n if ((s[0].prim !== 'int' || s[1].prim !== 'nat') && s[0].prim !== s[1].prim) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: both arguments must be of the same type: ${s[0].prim}, ${s[1].prim}`\n );\n }\n return [annotateVar(s[1]), ...stack.slice(2)];\n }\n\n case 'NOT': {\n const s = args(0, ['nat', 'bytes', 'bool', 'int'])[0];\n if (s.prim === 'bool') {\n return [annotateVar({ prim: 'bool' }), ...stack.slice(1)];\n }\n return [annotateVar({ prim: 'int' }), ...stack.slice(1)];\n }\n\n case 'COMPARE': {\n const s = args(0, null, null);\n ensureComparableType(s[0]);\n ensureComparableType(s[1]);\n return [annotateVar({ prim: 'int' }), ...stack.slice(2)];\n }\n\n case 'EQ':\n case 'NEQ':\n case 'LT':\n case 'GT':\n case 'LE':\n case 'GE':\n args(0, ['int']);\n return [annotateVar({ prim: 'bool' }), ...stack.slice(1)];\n\n case 'SELF': {\n if (ctx?.contract === undefined) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: contract required`\n );\n }\n const ia = instructionAnn({ f: 1, v: 1 });\n const ep = contractEntryPoint(ctx.contract, ia.f?.[0]);\n if (ep === null) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: contract has no entrypoint ${ep}`\n );\n }\n return [\n annotate({ prim: 'contract', args: [ep] }, { v: ia.v ? ia.v : ['@self'] }),\n ...stack,\n ];\n }\n\n case 'TRANSFER_TOKENS': {\n const s = args(0, null, ['mutez'], ['contract']);\n ensureTypesEqual(s[0], s[2].args[0]);\n return [annotateVar({ prim: 'operation' }), ...stack.slice(3)];\n }\n\n case 'SET_DELEGATE': {\n const s = args(0, ['option'])[0];\n if (typeID(s.args[0]) !== 'key_hash') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: key hash expected: ${typeID(s.args[0])}`\n );\n }\n return [annotateVar({ prim: 'operation' }), ...stack.slice(1)];\n }\n\n case 'IMPLICIT_ACCOUNT':\n args(0, ['key_hash']);\n return [annotateVar({ prim: 'contract', args: [{ prim: 'unit' }] }), ...stack.slice(1)];\n\n case 'NOW':\n return [annotateVar({ prim: 'timestamp' }, '@now'), ...stack];\n\n case 'AMOUNT':\n return [annotateVar({ prim: 'mutez' }, '@amount'), ...stack];\n\n case 'BALANCE':\n return [annotateVar({ prim: 'mutez' }, '@balance'), ...stack];\n\n case 'CHECK_SIGNATURE':\n args(0, ['key'], ['signature'], ['bytes']);\n return [annotateVar({ prim: 'bool' }), ...stack.slice(3)];\n\n case 'BLAKE2B':\n case 'SHA256':\n case 'SHA512':\n case 'KECCAK':\n case 'SHA3':\n args(0, ['bytes']);\n return [annotateVar({ prim: 'bytes' }), ...stack.slice(1)];\n\n case 'HASH_KEY':\n args(0, ['key']);\n return [annotateVar({ prim: 'key_hash' }), ...stack.slice(1)];\n\n case 'SOURCE':\n return [annotateVar({ prim: 'address' }, '@source'), ...stack];\n\n case 'SENDER':\n return [annotateVar({ prim: 'address' }, '@sender'), ...stack];\n\n case 'ADDRESS': {\n const s = args(0, ['contract'])[0];\n const ia = instructionAnn({ v: 1 });\n return [\n annotate(\n { prim: 'address', [refContract]: s },\n { v: ia.v ? ia.v : varSuffix(argAnn(s), 'address') }\n ),\n ...stack.slice(1),\n ];\n }\n\n case 'SELF_ADDRESS': {\n const addr: MichelsonTypeAddress = { prim: 'address' };\n if (ctx?.contract !== undefined) {\n addr[refContract] = {\n prim: 'contract',\n args: [contractSection(ctx.contract, 'parameter').args[0]],\n };\n }\n return [annotateVar(addr, '@address'), ...stack];\n }\n\n case 'CHAIN_ID':\n return [annotateVar({ prim: 'chain_id' }), ...stack];\n\n case 'DROP': {\n instructionAnn({});\n const n = instruction.args !== undefined ? parseInt(instruction.args[0].int, 10) : 1;\n args(n - 1, null);\n return stack.slice(n);\n }\n\n case 'DIG': {\n instructionAnn({});\n const n = parseInt(instruction.args[0].int, 10);\n return [args(n, null)[0], ...stack.slice(0, n), ...stack.slice(n + 1)];\n }\n\n case 'DUG': {\n instructionAnn({});\n const n = parseInt(instruction.args[0].int, 10);\n return [...stack.slice(1, n + 1), args(0, null)[0], ...stack.slice(n + 1)];\n }\n\n case 'NONE':\n assertTypeAnnotationsValid(instruction.args[0]);\n return [\n annotate({ prim: 'option', args: [instruction.args[0]] }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'LEFT':\n case 'RIGHT': {\n const s = args(0, null)[0];\n const ia = instructionAnn({ f: 2, t: 1, v: 1 }, { specialFields: true });\n const va = argAnn(s);\n\n const children: [MichelsonType, MichelsonType] = [\n annotate(s, {\n t: null,\n v: null,\n f:\n ia.f && ia.f.length > 0 && ia.f[0] !== '%'\n ? ia.f[0] === '%@'\n ? va.v\n ? ['%' + va.v[0].slice(1)]\n : undefined\n : ia.f\n : undefined,\n }),\n annotate(instruction.args[0], {\n t: null,\n f: ia.f && ia.f.length > 1 && ia.f[1] !== '%' ? ia.f : undefined,\n }),\n ];\n\n return [\n annotate(\n {\n prim: 'or',\n args: instruction.prim === 'LEFT' ? children : [children[1], children[0]],\n },\n { t: ia.t, v: ia.v }\n ),\n ...stack.slice(1),\n ];\n }\n\n case 'NIL':\n assertTypeAnnotationsValid(instruction.args[0]);\n return [\n annotate({ prim: 'list', args: [instruction.args[0]] }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'UNPACK':\n args(0, ['bytes']);\n assertTypeAnnotationsValid(instruction.args[0]);\n return [\n annotateVar({ prim: 'option', args: [instruction.args[0]] }, '@unpacked'),\n ...stack.slice(1),\n ];\n\n case 'CONTRACT': {\n const s = args(0, ['address'])[0];\n assertTypeAnnotationsValid(instruction.args[0]);\n const ia = instructionAnn({ v: 1, f: 1 });\n const contract = s[refContract];\n if (contract !== undefined) {\n const ep = contractEntryPoint(contract, ia.f?.[0]);\n if (ep === null) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: contract has no entrypoint ${ep}`\n );\n }\n ensureTypesEqual(ep, instruction.args[0]);\n }\n return [\n annotate(\n { prim: 'option', args: [{ prim: 'contract', args: [instruction.args[0]] }] },\n { v: ia.v ? ia.v : varSuffix(argAnn(s), 'contract') }\n ),\n ...stack.slice(1),\n ];\n }\n\n case 'CAST': {\n instructionAnn({});\n const s = args(0, null)[0];\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureTypesEqual(instruction.args[0], s);\n return [instruction.args[0], ...stack.slice(1)];\n }\n\n case 'IF_NONE': {\n instructionAnn({});\n const s = args(0, ['option'])[0];\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(instruction.args[0], tail, ctx);\n const br1 = functionTypeInternal(\n instruction.args[1],\n [annotate(s.args[0], { t: null, v: varSuffix(argAnn(s), 'some') }), ...tail],\n ctx\n );\n return branchType(br0, br1);\n }\n\n case 'IF_LEFT': {\n instructionAnn({});\n const s = args(0, ['or'])[0];\n const va = argAnn(s);\n const lefta = argAnn(s.args[0]);\n const righta = argAnn(s.args[1]);\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(\n instruction.args[0],\n [\n annotate(s.args[0], {\n t: null,\n v: varSuffix(va, lefta.f ? lefta.f[0].slice(1) : 'left'),\n }),\n ...tail,\n ],\n ctx\n );\n const br1 = functionTypeInternal(\n instruction.args[1],\n [\n annotate(s.args[1], {\n t: null,\n v: varSuffix(va, righta.f ? righta.f[0].slice(1) : 'right'),\n }),\n ...tail,\n ],\n ctx\n );\n return branchType(br0, br1);\n }\n\n case 'IF_CONS': {\n instructionAnn({});\n const s = args(0, ['list'])[0];\n const va = argAnn(s);\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(\n instruction.args[0],\n [\n annotate(s.args[0], { t: null, v: varSuffix(va, 'hd') }),\n annotate(s, { t: null, v: varSuffix(va, 'tl') }),\n ...tail,\n ],\n ctx\n );\n const br1 = functionTypeInternal(instruction.args[1], tail, ctx);\n return branchType(br0, br1);\n }\n\n case 'IF': {\n instructionAnn({});\n args(0, ['bool']);\n const tail = stack.slice(1);\n const br0 = functionTypeInternal(instruction.args[0], tail, ctx);\n const br1 = functionTypeInternal(instruction.args[1], tail, ctx);\n return branchType(br0, br1);\n }\n\n case 'MAP': {\n const s = args(0, ['list', 'map', 'option'])[0];\n const tail = stack.slice(1);\n const elt = s.prim === 'map' ? { prim: 'pair' as const, args: s.args } : s.args[0];\n const body = functionTypeInternal(\n instruction.args[0],\n [annotate(elt, { t: null, v: varSuffix(argAnn(s), 'elt') }), ...tail],\n ctx\n );\n if ('failed' in body) {\n if (!('prim' in body.failed) || body.failed.prim !== 'never') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: FAIL is not allowed in MAP`\n );\n }\n return { failed: body.failed, level: body.level + 1 };\n }\n if (body.length < 1) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: function must return a value`\n );\n }\n ensureStacksEqual(body.slice(1), tail);\n return s.prim === 'list'\n ? [annotateVar({ prim: 'list', args: [body[0]] }), ...tail]\n : s.prim === 'map'\n ? [annotateVar({ prim: 'map', args: [s.args[0], body[0]] }), ...tail]\n : [annotateVar({ prim: 'option', args: [body[0]] }), ...tail];\n }\n\n case 'ITER': {\n instructionAnn({});\n const s = args(0, ['set', 'list', 'map'])[0];\n const tail = stack.slice(1);\n const elt = s.prim === 'map' ? { prim: 'pair' as const, args: s.args } : s.args[0];\n const body = functionTypeInternal(\n instruction.args[0],\n [annotate(elt, { t: null, v: varSuffix(argAnn(s), 'elt') }), ...tail],\n ctx\n );\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n ensureStacksEqual(body, tail);\n return tail;\n }\n\n case 'LOOP': {\n instructionAnn({});\n args(0, ['bool']);\n const tail = stack.slice(1);\n const body = functionTypeInternal(instruction.args[0], tail, ctx);\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n ensureStacksEqual(body, [{ prim: 'bool' }, ...tail]);\n return tail;\n }\n\n case 'LOOP_LEFT': {\n instructionAnn({});\n const s = args(0, ['or'])[0];\n const tail = stack.slice(1);\n const body = functionTypeInternal(\n instruction.args[0],\n [annotate(s.args[0], { t: null, v: varSuffix(argAnn(s), 'left') }), ...tail],\n ctx\n );\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n ensureStacksEqual(body, [s, ...tail]);\n return [annotate(s.args[1], { t: null, v: instructionAnn({ v: 1 }).v }), ...tail];\n }\n\n case 'DIP': {\n instructionAnn({});\n const n = instruction.args.length === 2 ? parseInt(instruction.args[0].int, 10) : 1;\n args(n - 1, null);\n const head = stack.slice(0, n);\n const tail = stack.slice(n);\n // ternary operator is a type guard so use it instead of just `instruction.args.length - 1`\n const body =\n instruction.args.length === 2\n ? functionTypeInternal(instruction.args[1], tail, ctx)\n : functionTypeInternal(instruction.args[0], tail, ctx);\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n return [...head, ...body];\n }\n\n case 'CREATE_CONTRACT': {\n const ia = instructionAnn({ v: 2 });\n const s = args(0, ['option'], ['mutez'], null);\n if (typeID(s[0].args[0]) !== 'key_hash') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: key hash expected: ${typeID(s[0].args[0])}`\n );\n }\n if (ensureStorableType(s[2])) {\n assertContractValid(instruction.args[0]);\n assertScalarTypesEqual(contractSection(instruction.args[0], 'storage').args[0], s[2]);\n }\n\n const va = ia.v?.map((v) => (v !== '@' ? [v] : undefined));\n return [\n annotate({ prim: 'operation' }, { v: va?.[0] }),\n annotate(\n {\n prim: 'address',\n [refContract]: {\n prim: 'contract',\n args: [contractSection(instruction.args[0], 'parameter').args[0]],\n },\n },\n { v: va?.[1] }\n ),\n ...stack.slice(3),\n ];\n }\n\n case 'PUSH':\n assertTypeAnnotationsValid(instruction.args[0]);\n assertDataValidInternal(instruction.args[1], instruction.args[0], {\n ...ctx,\n contract: undefined,\n });\n return [annotateVar(instruction.args[0]), ...stack];\n\n case 'EMPTY_SET':\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureComparableType(instruction.args[0]);\n return [\n annotate({ prim: 'set', args: instruction.args }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'EMPTY_MAP':\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureComparableType(instruction.args[0]);\n assertTypeAnnotationsValid(instruction.args[1]);\n return [\n annotate({ prim: 'map', args: instruction.args }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'EMPTY_BIG_MAP':\n assertTypeAnnotationsValid(instruction.args[0]);\n ensureComparableType(instruction.args[0]);\n assertTypeAnnotationsValid(instruction.args[1]);\n ensureBigMapStorableType(instruction.args[0]);\n return [\n annotate({ prim: 'big_map', args: instruction.args }, instructionAnn({ t: 1, v: 1 })),\n ...stack,\n ];\n\n case 'LAMBDA_REC':\n case 'LAMBDA': {\n assertTypeAnnotationsValid(instruction.args[0]);\n assertTypeAnnotationsValid(instruction.args[1]);\n const s = [instruction.args[0]];\n if (instruction.prim === 'LAMBDA_REC') {\n s.push({ prim: 'lambda', args: [instruction.args[0], instruction.args[1]] });\n }\n const body = functionTypeInternal(instruction.args[2], s, {\n ...ctx,\n contract: undefined,\n });\n if ('failed' in body) {\n return { failed: body.failed, level: body.level + 1 };\n }\n if (body.length !== 1) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: function must return a value`\n );\n }\n ensureTypesEqual(instruction.args[1], body[0]);\n return [\n annotateVar({ prim: 'lambda', args: [instruction.args[0], instruction.args[1]] }),\n ...stack,\n ];\n }\n\n case 'LEVEL':\n return [annotateVar({ prim: 'nat' }, '@level'), ...stack];\n\n case 'TOTAL_VOTING_POWER':\n return [annotateVar({ prim: 'nat' }), ...stack];\n\n case 'VOTING_POWER':\n args(0, ['key_hash']);\n return [annotateVar({ prim: 'nat' }), ...stack.slice(1)];\n\n case 'TICKET': {\n const s = args(0, null, ['nat'])[0];\n ensureComparableType(s);\n if (ProtoInferiorTo(proto, Protocol.PtLimaPtL)) {\n return [\n annotate({ prim: 'ticket', args: [s] }, instructionAnn({ t: 1, v: 1 })),\n ...stack.slice(2),\n ];\n } else {\n return [\n annotateVar({\n prim: 'option',\n args: [annotate({ prim: 'ticket', args: [s] }, instructionAnn({ t: 1, v: 1 }))],\n }),\n ...stack.slice(2),\n ];\n }\n }\n\n case 'JOIN_TICKETS': {\n const s = unpackComb('pair', args(0, ['pair'])[0]);\n if (typeID(s.args[0]) !== 'ticket') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: ticket expected: ${typeID(s.args[0])}`\n );\n }\n ensureTypesEqual(s.args[0], s.args[1]);\n return [\n annotateVar({\n prim: 'option',\n args: [annotate(s.args[0], { t: null })],\n }),\n ...stack.slice(1),\n ];\n }\n\n case 'SPLIT_TICKET': {\n const s = args(0, ['ticket'], ['pair']);\n const p = unpackComb('pair', s[1]);\n if (typeID(p.args[0]) !== 'nat') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: nat expected: ${typeID(p.args[0])}`\n );\n }\n ensureTypesEqual(p.args[0], p.args[1]);\n return [\n annotateVar({\n prim: 'option',\n args: [\n {\n prim: 'pair',\n args: [annotate(s[0], { t: null }), annotate(s[0], { t: null })],\n },\n ],\n }),\n ...stack.slice(2),\n ];\n }\n\n case 'READ_TICKET': {\n const ia = instructionAnn({ v: 2 });\n const s = args(0, ['ticket'])[0];\n const va = ia.v?.map((v) => (v !== '@' ? [v] : undefined));\n return [\n annotate(\n {\n prim: 'pair',\n args: [{ prim: 'address' }, annotate(s.args[0], { t: null }), { prim: 'nat' }],\n },\n { v: va?.[0] }\n ),\n annotate(s, { v: va?.[1], t: null }),\n ...stack.slice(1),\n ];\n }\n\n case 'PAIRING_CHECK': {\n const p = args(0, ['list'])[0].args[0];\n if (!isPairType(p)) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: pair expected: ${typeID(p)}`\n );\n }\n const c = unpackComb('pair', p);\n if (typeID(c.args[0]) !== 'bls12_381_g1') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: bls12_381_g1 expected: ${typeID(c.args[0])}`\n );\n }\n if (typeID(c.args[1]) !== 'bls12_381_g2') {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: bls12_381_g2 expected: ${typeID(c.args[1])}`\n );\n }\n return [annotateVar({ prim: 'bool' }), ...stack.slice(1)];\n }\n\n case 'SAPLING_EMPTY_STATE':\n return [\n annotate(\n { prim: 'sapling_state', args: [instruction.args[0]] },\n instructionAnn({ v: 1, t: 1 })\n ),\n ...stack,\n ];\n\n case 'SAPLING_VERIFY_UPDATE': {\n const s = args(0, ['sapling_transaction'], ['sapling_state']);\n if (parseInt(s[0].args[0].int, 10) !== parseInt(s[1].args[0].int, 10)) {\n throw new MichelsonInstructionError(\n instruction,\n stack,\n `${instruction.prim}: sapling memo size mismatch: ${s[0].args[0].int} != ${s[1].args[0].int}`\n );\n }\n return ProtoInferiorTo(proto, Protocol.PtJakarta)\n ? [\n annotateVar({\n prim: 'option',\n args: [\n {\n prim: 'pair',\n args: [{ prim: 'int' }, annotate(s[1], { t: null })],\n },\n ],\n }),\n ...stack.slice(2),\n ]\n : [\n annotateVar({\n prim: 'option',\n args: [\n {\n prim: 'pair',\n args: [\n { prim: 'bytes' },\n {\n prim: 'pair',\n args: [{ prim: 'int' }, annotate(s[1], { t: null })],\n },\n ],\n },\n ],\n }),\n ...stack.slice(2),\n ];\n }\n\n case 'OPEN_CHEST':\n args(0, ['chest_key'], ['chest'], ['nat']);\n return [\n annotateVar({ prim: 'or', args: [{ prim: 'bytes' }, { prim: 'bool' }] }),\n ...stack.slice(3),\n ];\n\n case 'VIEW': {\n const s = args(0, null, ['address']);\n ensurePushableType(s[0]);\n return [annotateVar({ prim: 'option', args: [instruction.args[1]] }), ...stack.slice(2)];\n }\n\n case 'MIN_BLOCK_TIME':\n return [annotateVar({ prim: 'nat' }), ...stack];\n\n case 'EMIT': {\n const ia = instructionAnn({ f: 1, t: 1 });\n if (instruction.args) {\n const s = args(0, null);\n ensureTypesEqual(s[0], instruction.args[0]);\n return [annotate({ prim: 'operation' }, ia), ...stack.slice(1)];\n }\n return [annotate({ prim: 'operation' }, ia), ...stack.slice(1)];\n }\n\n default:\n throw new MichelsonError(\n instruction as MichelsonCode,\n `unexpected instruction: ${(instruction as Prim).prim}`\n );\n }\n })(instruction);\n\n if (ctx?.traceCallback !== undefined) {\n const trace: InstructionTrace = {\n op: instruction,\n in: stack,\n out: retStack,\n };\n ctx.traceCallback(trace);\n }\n\n return retStack;\n}\n\nexport function contractSection<T extends 'parameter' | 'storage' | 'code'>(\n contract: MichelsonContract,\n section: T\n): MichelsonContractSection<T> {\n for (const s of contract) {\n if (s.prim === section) {\n return s as MichelsonContractSection<T>;\n }\n }\n throw new MichelsonError(contract, `missing contract section: ${section}`);\n}\n\nexport function contractViews(contract: MichelsonContract): {\n [name: string]: MichelsonContractView;\n} {\n const views: { [name: string]: MichelsonContractView } = {};\n for (const s of contract) {\n if (s.prim === 'view') {\n views[s.args[0].string] = s;\n }\n }\n return views;\n}\n\nfunction isContract(v: Expr): v is MichelsonContract {\n if (Array.isArray(v)) {\n for (const s of v) {\n if ('prim' in s && (s.prim === 'parameter' || s.prim === 'storage' || s.prim === 'code')) {\n return true;\n }\n }\n }\n return false;\n}\n\nexport function contractEntryPoint(\n src: MichelsonContract | MichelsonType,\n ep?: string\n): MichelsonType | null {\n ep = ep || '%default';\n const entryPoint = contractEntryPoints(src).find((x) => x[0] === ep);\n\n if (entryPoint !== undefined) {\n return entryPoint[1];\n } else if (ep === '%default') {\n return isContract(src) ? contractSection(src, 'parameter').args[0] : src;\n }\n return null;\n}\n\nfunction isOrType(t: MichelsonType): t is MichelsonTypeOr<[MichelsonType, MichelsonType]> {\n return Array.isArray(t) || t.prim === 'or';\n}\n\nexport function contractEntryPoints(\n src: MichelsonContract | MichelsonType\n): [string, MichelsonType][] {\n if (isContract(src)) {\n const param = contractSection(src, 'parameter');\n const ch = contractEntryPoints(param.args[0]);\n const a = unpackAnnotations(param);\n return a.f ? [[a.f[0], param.args[0]], ...ch] : ch;\n }\n\n if (isOrType(src)) {\n const args = typeArgs(src);\n const getArg = (n: 0 | 1): [string, MichelsonType][] => {\n const a = unpackAnnotations(args[n]);\n if (typeID(args[n]) === 'or') {\n const ch = contractEntryPoints(args[n]);\n return a.f ? [[a.f[0], args[n]], ...ch] : ch;\n }\n return a.f ? [[a.f[0], args[n]]] : [];\n };\n return [...getArg(0), ...getArg(1)];\n }\n return [];\n}\n\n// Contract validation\n\nexport function assertContractValid(\n contract: MichelsonContract,\n ctx?: Context\n): MichelsonReturnType {\n const assertSection = (\n parameter: MichelsonType,\n storage: MichelsonType,\n ret: MichelsonType,\n code: InstructionList\n ): MichelsonReturnType => {\n assertTypeAnnotationsValid(parameter, true);\n assertTypeAnnotationsValid(storage);\n const arg: MichelsonType = {\n prim: 'pair',\n args: [\n { ...parameter, ...{ annots: ['@parameter'] } },\n { ...storage, ...{ annots: ['@storage'] } },\n ],\n };\n const out = functionTypeInternal(code, [arg], { ...ctx, ...{ contract } });\n if ('failed' in out) {\n return out;\n }\n\n try {\n assertStacksEqual(out, [ret]);\n } catch (err) {\n if (err instanceof MichelsonError) {\n throw new MichelsonInstructionError(code, out, err.message);\n } else {\n throw err;\n }\n }\n return out;\n };\n\n const parameter = contractSection(contract, 'parameter').args[0];\n const storage = contractSection(contract, 'storage').args[0];\n const code = contractSection(contract, 'code').args[0];\n const expected: MichelsonType = {\n prim: 'pair',\n args: [{ prim: 'list', args: [{ prim: 'operation' }] }, storage],\n };\n const ret = assertSection(parameter, storage, expected, code);\n\n for (const view of Object.values(contractViews(contract))) {\n assertSection(view.args[1], storage, view.args[2], view.args[3]);\n }\n\n return ret;\n}\n\n// Exported wrapper functions\n\nexport function assertDataValid(d: MichelsonData, t: MichelsonType, ctx?: Context): void {\n assertTypeAnnotationsValid(t);\n assertDataValidInternal(d, t, ctx || null);\n}\n\nexport function functionType(\n inst: MichelsonCode,\n stack: MichelsonType[],\n ctx?: Context\n): MichelsonReturnType {\n for (const t of stack) {\n assertTypeAnnotationsValid(t);\n }\n\n if (ctx?.contract !== undefined) {\n for (const typesec of ['parameter', 'storage'] as const) {\n const sec = contractSection(ctx.contract, typesec).args[0];\n assertTypeAnnotationsValid(sec);\n }\n }\n\n return functionTypeInternal(inst, stack, ctx || null);\n}\n\nexport function assertTypesEqual<T1 extends MichelsonType | MichelsonType[], T2 extends T1>(\n a: T1,\n b: T2,\n field = false\n): void {\n if (Array.isArray(a)) {\n // type guards don't work for parametrized generic types\n for (const v of a as MichelsonType[]) {\n assertTypeAnnotationsValid(v);\n }\n for (const v of b as MichelsonType[]) {\n assertTypeAnnotationsValid(v);\n }\n } else {\n assertTypeAnnotationsValid(a as MichelsonType);\n assertTypeAnnotationsValid(b as MichelsonType);\n }\n assertScalarTypesEqual(a, b, field);\n}\n\nexport function isTypeAnnotationsValid(t: MichelsonType, field = false): boolean {\n try {\n assertTypeAnnotationsValid(t, field);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isContractValid(\n contract: MichelsonContract,\n ctx?: Context\n): MichelsonReturnType | null {\n try {\n return assertContractValid(contract, ctx);\n } catch {\n return null;\n }\n}\n\nexport function isDataValid(d: MichelsonData, t: MichelsonType, ctx?: Context): boolean {\n try {\n assertDataValid(d, t, ctx);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function isTypeEqual<T1 extends MichelsonType | MichelsonType[], T2 extends T1>(\n a: T1,\n b: T2,\n field = false\n): boolean {\n try {\n assertTypesEqual(a, b, field);\n return true;\n } catch {\n return false;\n }\n}\n","import {\n MichelsonContract,\n MichelsonContractSection,\n MichelsonType,\n MichelsonData,\n MichelsonCode,\n MichelsonReturnType,\n} from './michelson-types';\nimport {\n assertContractValid,\n contractSection,\n contractEntryPoint,\n assertDataValid,\n assertTypeAnnotationsValid,\n InstructionTrace,\n Context,\n functionType,\n isDataValid,\n contractEntryPoints,\n} from './michelson-typecheck';\nimport { Parser, ParserOptions } from './micheline-parser';\nimport {\n assertMichelsonContract,\n assertMichelsonType,\n assertMichelsonData,\n} from './michelson-validator';\nimport {\n InvalidDataExpressionError,\n InvalidEntrypointError,\n InvalidContractError,\n InvalidTypeExpressionError,\n} from './error';\n\nexport interface ContractOptions extends ParserOptions {\n traceCallback?: (t: InstructionTrace) => void;\n}\n\nexport class Contract {\n private ctx: Context;\n public readonly output: MichelsonReturnType;\n\n constructor(public readonly contract: MichelsonContract, opt?: ContractOptions) {\n this.ctx = { contract, ...opt };\n this.output = assertContractValid(contract, this.ctx);\n }\n\n static parse(src: string | object, opt?: ContractOptions): Contract {\n const p = new Parser(opt);\n const expr = typeof src === 'string' ? p.parseScript(src) : p.parseJSON(src);\n if (expr === null) {\n throw new InvalidContractError('empty contract');\n }\n if (assertMichelsonContract(expr)) {\n return new Contract(expr, opt);\n }\n throw undefined;\n }\n\n static parseTypeExpression(src: string | object, opt?: ParserOptions): MichelsonType {\n const p = new Parser(opt);\n const expr = typeof src === 'string' ? p.parseScript(src) : p.parseJSON(src);\n if (expr === null) {\n throw new InvalidTypeExpressionError('empty type expression');\n }\n // remove assertTypeAnnotationsValid from if block because: () => void || throw error\n if (assertMichelsonType(expr)) {\n assertTypeAnnotationsValid(expr);\n return expr;\n }\n throw undefined;\n }\n\n static parseDataExpression(src: string | object, opt?: ParserOptions): MichelsonData {\n const p = new Parser(opt);\n const expr = typeof src === 'string' ? p.parseScript(src) : p.parseJSON(src);\n if (expr === null) {\n throw new InvalidDataExpressionError('empty data expression');\n }\n if (assertMichelsonData(expr)) {\n return expr;\n }\n throw undefined;\n }\n\n section<T extends 'parameter' | 'storage' | 'code'>(section: T): MichelsonContractSection<T> {\n return contractSection(this.contract, section);\n }\n\n entryPoints(): [string, MichelsonType][] {\n return contractEntryPoints(this.contract);\n }\n\n entryPoint(ep?: string): MichelsonType | null {\n return contractEntryPoint(this.contract, ep);\n }\n\n assertDataValid(d: MichelsonData, t: MichelsonType): void {\n assertDataValid(d, t, this.ctx);\n }\n\n isDataValid(d: MichelsonData, t: MichelsonType): boolean {\n return isDataValid(d, t, this.ctx);\n }\n\n assertParameterValid(ep: string | null, d: MichelsonData): void {\n const t = this.entryPoint(ep || undefined);\n if (t === null) {\n throw new InvalidEntrypointError(ep?.toString());\n }\n this.assertDataValid(d, t);\n }\n\n isParameterValid(ep: string | null, d: MichelsonData): boolean {\n try {\n this.assertParameterValid(ep, d);\n return true;\n } catch {\n return false;\n }\n }\n\n functionType(inst: MichelsonCode, stack: MichelsonType[]): MichelsonReturnType {\n return functionType(inst, stack, this.ctx);\n }\n}\n\nexport const dummyContract = new Contract([\n { prim: 'parameter', args: [{ prim: 'unit' }] },\n { prim: 'storage', args: [{ prim: 'unit' }] },\n {\n prim: 'code',\n args: [[{ prim: 'CAR' }, { prim: 'NIL', args: [{ prim: 'operation' }] }, { prim: 'PAIR' }]],\n },\n]);\n","import { sourceReference, Expr } from './micheline';\nimport { InstructionTrace, MichelsonInstructionError } from './michelson-typecheck';\nimport { emitMicheline } from './micheline-emitter';\nimport { unpackAnnotations, MichelsonError, MichelsonTypeError } from './utils';\nimport { MichelsonReturnType } from './michelson-types';\n\nexport function formatStack(s: MichelsonReturnType): string {\n if ('failed' in s) {\n return `[FAILED: ${emitMicheline(s.failed)}]`;\n }\n\n return s\n .map((v, i) => {\n const ann = unpackAnnotations(v);\n return `[${i}${ann.v ? '/' + ann.v[0] : ''}]: ${emitMicheline(v)}`;\n })\n .join('\\n');\n}\n\nexport function traceDumpFunc(\n blocks: boolean,\n cb: (s: string) => void\n): (v: InstructionTrace) => void {\n return (v: InstructionTrace) => {\n if (Array.isArray(v) && !blocks) {\n return;\n }\n const macro = v.op[sourceReference]?.macro;\n\n const msg = `${macro ? 'Macro' : 'Op'}: ${\n macro ? emitMicheline(macro, undefined, true) + ' / ' : ''\n }${emitMicheline(v.op)}\nInput:\n${formatStack(v.in)}\nOutput:\n${formatStack(v.out)}\n`;\n cb(msg);\n };\n}\n\nexport function formatError(err: MichelsonError): string {\n if (err instanceof MichelsonInstructionError) {\n const macro = err.val[sourceReference]?.macro;\n return `${macro ? 'Macro' : 'Op'}: ${\n macro ? emitMicheline(macro, undefined, true) + ' / ' : ''\n }${emitMicheline(err.val)}\nStack:\n${formatStack(err.stackState)}\n`;\n } else if (err instanceof MichelsonTypeError) {\n const type = Array.isArray(err.val)\n ? '[' + (err.val as Expr[]).map((v, i) => `[${i}]: ${emitMicheline(v)}`).join('; ') + ']'\n : emitMicheline(err.val);\n\n return `Type: ${type}\n${\n err.data\n ? `Data: ${emitMicheline(err.data)}\n`\n : ''\n}\n`;\n } else {\n return `Value: ${emitMicheline(err.val)}`;\n }\n}\n","\n// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!\nexport const VERSION = {\n \"commitHash\": \"c2f07ba0135cffe7f59befd3d51f550f39383974\",\n \"version\": \"16.1.1\"\n};\n"],"names":["assertArgs"],"mappings":"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"}