diff --git a/test/chain/tezos/lexer/samples/p008-bls12-381/bls12-381.hex b/test/chain/tezos/lexer/samples/p008-bls12-381/bls12-381.hex new file mode 100644 index 00000000..511bdb6f --- /dev/null +++ b/test/chain/tezos/lexer/samples/p008-bls12-381/bls12-381.hex @@ -0,0 +1 @@ +0000025a0200000255050107650765066303590000000c25636865636b526573756c7404820000000325667207650480000000032567310765048100000003256732066303820000000a256d756c526573756c7405000764076408650482000000032566720765048000000003256731048100000003256732000000042561646408650382038200000004256d756c0764046c00000007256e65676174650764065f0765038003810000000e2570616972696e675f636865636b046c0000000625746f496e740502020000019103210317034c0316072e02000000b4072e0200000078034c03210316034c031703210317034c0316057000030321057100040317031603120342034c034203210316034c031703210316034c031703210317034c0316057000040321057100050317031703120342034c0342034c034203210317034c031603210316034c03170570000303160312034c034203420200000030034c03210316034c031703210316034c031703160570000303210317034c0316033a0346034c0342034c0342034c034202000000c3072e020000001e0320032103210316034c031703170570000203170316033b0342034c03420200000099072e0200000018034c03210317034c0316031705700002037f0346034203420200000075032003210316031703300743035b008080808080808080808080808080808080808080808080808080808080aebfbbd5fc95da0903190325072c020000000002000000310743036801000000264661696c656420746f2063617374206669656c6420656c656d656e7420467220746f20496e740327053d036d0342 diff --git a/test/chain/tezos/lexer/samples/p008-bls12-381/bls12-381.micheline b/test/chain/tezos/lexer/samples/p008-bls12-381/bls12-381.micheline new file mode 100644 index 00000000..ec5060e8 --- /dev/null +++ b/test/chain/tezos/lexer/samples/p008-bls12-381/bls12-381.micheline @@ -0,0 +1,227 @@ +[ + { + "prim": "storage", + "args": [ + { + "prim": "pair", + "args": [ + { "prim": "pair", "args": [ { "prim": "option", "args": [ { "prim": "bool" } ], "annots": [ "%checkResult" ] }, { "prim": "bls12_381_fr", "annots": [ "%fr" ] } ] }, + { + "prim": "pair", + "args": [ + { "prim": "bls12_381_g1", "annots": [ "%g1" ] }, + { + "prim": "pair", + "args": [ { "prim": "bls12_381_g2", "annots": [ "%g2" ] }, { "prim": "option", "args": [ { "prim": "bls12_381_fr" } ], "annots": [ "%mulResult" ] } ] + } + ] + } + ] + } + ] + }, + { + "prim": "parameter", + "args": [ + { + "prim": "or", + "args": [ + { + "prim": "or", + "args": [ + { + "prim": "pair", + "args": [ + { "prim": "bls12_381_fr", "annots": [ "%fr" ] }, + { "prim": "pair", "args": [ { "prim": "bls12_381_g1", "annots": [ "%g1" ] }, { "prim": "bls12_381_g2", "annots": [ "%g2" ] } ] } + ], + "annots": [ "%add" ] + }, + { "prim": "pair", "args": [ { "prim": "bls12_381_fr" }, { "prim": "bls12_381_fr" } ], "annots": [ "%mul" ] } + ] + }, + { + "prim": "or", + "args": [ + { "prim": "unit", "annots": [ "%negate" ] }, + { + "prim": "or", + "args": [ + { "prim": "list", "args": [ { "prim": "pair", "args": [ { "prim": "bls12_381_g1" }, { "prim": "bls12_381_g2" } ] } ], "annots": [ "%pairing_check" ] }, + { "prim": "unit", "annots": [ "%toInt" ] } + ] + } + ] + } + ] + } + ] + }, + { + "prim": "code", + "args": [ + [ + { "prim": "DUP" }, + { "prim": "CDR" }, + { "prim": "SWAP" }, + { "prim": "CAR" }, + { + "prim": "IF_LEFT", + "args": [ + [ + { + "prim": "IF_LEFT", + "args": [ + [ + { "prim": "SWAP" }, + { "prim": "DUP" }, + { "prim": "CAR" }, + { "prim": "SWAP" }, + { "prim": "CDR" }, + { "prim": "DUP" }, + { "prim": "CDR" }, + { "prim": "SWAP" }, + { "prim": "CAR" }, + { "prim": "DIG", "args": [ { "int": "3" } ] }, + { "prim": "DUP" }, + { "prim": "DUG", "args": [ { "int": "4" } ] }, + { "prim": "CDR" }, + { "prim": "CAR" }, + { "prim": "ADD" }, + { "prim": "PAIR" }, + { "prim": "SWAP" }, + { "prim": "PAIR" }, + { "prim": "DUP" }, + { "prim": "CAR" }, + { "prim": "SWAP" }, + { "prim": "CDR" }, + { "prim": "DUP" }, + { "prim": "CAR" }, + { "prim": "SWAP" }, + { "prim": "CDR" }, + { "prim": "DUP" }, + { "prim": "CDR" }, + { "prim": "SWAP" }, + { "prim": "CAR" }, + { "prim": "DIG", "args": [ { "int": "4" } ] }, + { "prim": "DUP" }, + { "prim": "DUG", "args": [ { "int": "5" } ] }, + { "prim": "CDR" }, + { "prim": "CDR" }, + { "prim": "ADD" }, + { "prim": "PAIR" }, + { "prim": "SWAP" }, + { "prim": "PAIR" }, + { "prim": "SWAP" }, + { "prim": "PAIR" }, + { "prim": "DUP" }, + { "prim": "CDR" }, + { "prim": "SWAP" }, + { "prim": "CAR" }, + { "prim": "DUP" }, + { "prim": "CAR" }, + { "prim": "SWAP" }, + { "prim": "CDR" }, + { "prim": "DIG", "args": [ { "int": "3" } ] }, + { "prim": "CAR" }, + { "prim": "ADD" }, + { "prim": "SWAP" }, + { "prim": "PAIR" }, + { "prim": "PAIR" } + ], + [ + { "prim": "SWAP" }, + { "prim": "DUP" }, + { "prim": "CAR" }, + { "prim": "SWAP" }, + { "prim": "CDR" }, + { "prim": "DUP" }, + { "prim": "CAR" }, + { "prim": "SWAP" }, + { "prim": "CDR" }, + { "prim": "CAR" }, + { "prim": "DIG", "args": [ { "int": "3" } ] }, + { "prim": "DUP" }, + { "prim": "CDR" }, + { "prim": "SWAP" }, + { "prim": "CAR" }, + { "prim": "MUL" }, + { "prim": "SOME" }, + { "prim": "SWAP" }, + { "prim": "PAIR" }, + { "prim": "SWAP" }, + { "prim": "PAIR" }, + { "prim": "SWAP" }, + { "prim": "PAIR" } + ] + ] + } + ], + [ + { + "prim": "IF_LEFT", + "args": [ + [ + { "prim": "DROP" }, + { "prim": "DUP" }, + { "prim": "DUP" }, + { "prim": "CAR" }, + { "prim": "SWAP" }, + { "prim": "CDR" }, + { "prim": "CDR" }, + { "prim": "DIG", "args": [ { "int": "2" } ] }, + { "prim": "CDR" }, + { "prim": "CAR" }, + { "prim": "NEG" }, + { "prim": "PAIR" }, + { "prim": "SWAP" }, + { "prim": "PAIR" } + ], + [ + { + "prim": "IF_LEFT", + "args": [ + [ + { "prim": "SWAP" }, + { "prim": "DUP" }, + { "prim": "CDR" }, + { "prim": "SWAP" }, + { "prim": "CAR" }, + { "prim": "CDR" }, + { "prim": "DIG", "args": [ { "int": "2" } ] }, + { "prim": "PAIRING_CHECK" }, + { "prim": "SOME" }, + { "prim": "PAIR" }, + { "prim": "PAIR" } + ], + [ + { "prim": "DROP" }, + { "prim": "DUP" }, + { "prim": "CAR" }, + { "prim": "CDR" }, + { "prim": "INT" }, + { "prim": "PUSH", "args": [ { "prim": "int" }, { "int": "35115637951021136697019058358166656987035571271296265805438287419849817743725" } ] }, + { "prim": "COMPARE" }, + { "prim": "EQ" }, + { + "prim": "IF", + "args": [ + [], + [ { "prim": "PUSH", "args": [ { "prim": "string" }, { "string": "Failed to cast field element Fr to Int" } ] }, { "prim": "FAILWITH" } ] + ] + } + ] + ] + } + ] + ] + } + ] + ] + }, + { "prim": "NIL", "args": [ { "prim": "operation" } ] }, + { "prim": "PAIR" } + ] + ] + } +] \ No newline at end of file diff --git a/test/chain/tezos/lexer/samples/p008-bls12-381/bls12-381.michelson b/test/chain/tezos/lexer/samples/p008-bls12-381/bls12-381.michelson new file mode 100644 index 00000000..a5b0b24b --- /dev/null +++ b/test/chain/tezos/lexer/samples/p008-bls12-381/bls12-381.michelson @@ -0,0 +1,160 @@ +parameter (or (or (pair %add (bls12_381_fr %fr) (pair (bls12_381_g1 %g1) (bls12_381_g2 %g2))) (pair %mul bls12_381_fr bls12_381_fr)) (or (unit %negate) (or (list %pairing_check (pair bls12_381_g1 bls12_381_g2)) (unit %toInt)))); +storage (pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)))); +code + { + DUP; # pair @parameter @storage : pair @parameter @storage + CDR; # @storage : pair @parameter @storage + SWAP; # pair @parameter @storage : @storage + CAR; # @parameter : @storage + IF_LEFT + { + IF_LEFT + { + SWAP; # @storage : @parameter%add + # == add == + # self.data.g1 += params.g1 # @storage : @parameter%add + DUP; # @storage : @storage : @parameter%add + CAR; # pair (option %checkResult bool) (bls12_381_fr %fr) : @storage : @parameter%add + SWAP; # @storage : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + CDR; # pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + DUP; # pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + CDR; # pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + SWAP; # pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + CAR; # bls12_381_g1 : pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + DIG 3; # @parameter%add : bls12_381_g1 : pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : pair (option %checkResult bool) (bls12_381_fr %fr) + DUP; # @parameter%add : @parameter%add : bls12_381_g1 : pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : pair (option %checkResult bool) (bls12_381_fr %fr) + DUG 4; # @parameter%add : bls12_381_g1 : pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + CDR; # pair (bls12_381_g1 %g1) (bls12_381_g2 %g2) : bls12_381_g1 : pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + CAR; # bls12_381_g1 : bls12_381_g1 : pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + ADD; # bls12_381_g1 : pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + PAIR; # pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + SWAP; # pair (option %checkResult bool) (bls12_381_fr %fr) : pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : @parameter%add + PAIR; # pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr))) : @parameter%add + # self.data.g2 += params.g2 # pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr))) : @parameter%add + DUP; # pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr))) : pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr))) : @parameter%add + CAR; # pair (option %checkResult bool) (bls12_381_fr %fr) : pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr))) : @parameter%add + SWAP; # pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr))) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + CDR; # pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + DUP; # pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + CAR; # bls12_381_g1 : pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + SWAP; # pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + CDR; # pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + DUP; # pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + CDR; # option bls12_381_fr : pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + SWAP; # pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : option bls12_381_fr : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + CAR; # bls12_381_g2 : option bls12_381_fr : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + DIG 4; # @parameter%add : bls12_381_g2 : option bls12_381_fr : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) + DUP; # @parameter%add : @parameter%add : bls12_381_g2 : option bls12_381_fr : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) + DUG 5; # @parameter%add : bls12_381_g2 : option bls12_381_fr : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + CDR; # pair (bls12_381_g1 %g1) (bls12_381_g2 %g2) : bls12_381_g2 : option bls12_381_fr : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + CDR; # bls12_381_g2 : bls12_381_g2 : option bls12_381_fr : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + ADD; # bls12_381_g2 : option bls12_381_fr : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + PAIR; # pair bls12_381_g2 (option bls12_381_fr) : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + SWAP; # bls12_381_g1 : pair bls12_381_g2 (option bls12_381_fr) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + PAIR; # pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%add + SWAP; # pair (option %checkResult bool) (bls12_381_fr %fr) : pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) : @parameter%add + PAIR; # pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr))) : @parameter%add + # self.data.fr += params.fr # pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr))) : @parameter%add + DUP; # pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr))) : pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr))) : @parameter%add + CDR; # pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) : pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr))) : @parameter%add + SWAP; # pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr))) : pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) : @parameter%add + CAR; # pair (option %checkResult bool) (bls12_381_fr %fr) : pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) : @parameter%add + DUP; # pair (option %checkResult bool) (bls12_381_fr %fr) : pair (option %checkResult bool) (bls12_381_fr %fr) : pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) : @parameter%add + CAR; # option bool : pair (option %checkResult bool) (bls12_381_fr %fr) : pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) : @parameter%add + SWAP; # pair (option %checkResult bool) (bls12_381_fr %fr) : option bool : pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) : @parameter%add + CDR; # bls12_381_fr : option bool : pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) : @parameter%add + DIG 3; # @parameter%add : bls12_381_fr : option bool : pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) + CAR; # bls12_381_fr : bls12_381_fr : option bool : pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) + ADD; # bls12_381_fr : option bool : pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) + SWAP; # option bool : bls12_381_fr : pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) + PAIR; # pair (option bool) bls12_381_fr : pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) + PAIR; # pair (pair (option bool) bls12_381_fr) (pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr))) + } + { + SWAP; # @storage : @parameter%mul + # == mul == + # self.data.mulResult = sp.some(sp.fst(params) * sp.snd(params)) # @storage : @parameter%mul + DUP; # @storage : @storage : @parameter%mul + CAR; # pair (option %checkResult bool) (bls12_381_fr %fr) : @storage : @parameter%mul + SWAP; # @storage : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%mul + CDR; # pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%mul + DUP; # pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%mul + CAR; # bls12_381_g1 : pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%mul + SWAP; # pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%mul + CDR; # pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%mul + CAR; # bls12_381_g2 : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) : @parameter%mul + DIG 3; # @parameter%mul : bls12_381_g2 : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) + DUP; # @parameter%mul : @parameter%mul : bls12_381_g2 : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) + CDR; # bls12_381_fr : @parameter%mul : bls12_381_g2 : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) + SWAP; # @parameter%mul : bls12_381_fr : bls12_381_g2 : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) + CAR; # bls12_381_fr : bls12_381_fr : bls12_381_g2 : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) + MUL; # bls12_381_fr : bls12_381_g2 : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) + SOME; # option bls12_381_fr : bls12_381_g2 : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) + SWAP; # bls12_381_g2 : option bls12_381_fr : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) + PAIR; # pair bls12_381_g2 (option bls12_381_fr) : bls12_381_g1 : pair (option %checkResult bool) (bls12_381_fr %fr) + SWAP; # bls12_381_g1 : pair bls12_381_g2 (option bls12_381_fr) : pair (option %checkResult bool) (bls12_381_fr %fr) + PAIR; # pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) : pair (option %checkResult bool) (bls12_381_fr %fr) + SWAP; # pair (option %checkResult bool) (bls12_381_fr %fr) : pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)) + PAIR; # pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr))) + }; # pair (pair (option bool) bls12_381_fr) (pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr))) + } + { + IF_LEFT + { + DROP; # @storage + # == negate == + # self.data.g1 = - self.data.g1 # @storage + DUP; # @storage : @storage + DUP; # @storage : @storage : @storage + CAR; # pair (option %checkResult bool) (bls12_381_fr %fr) : @storage : @storage + SWAP; # @storage : pair (option %checkResult bool) (bls12_381_fr %fr) : @storage + CDR; # pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (option %checkResult bool) (bls12_381_fr %fr) : @storage + CDR; # pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : pair (option %checkResult bool) (bls12_381_fr %fr) : @storage + DIG 2; # @storage : pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : pair (option %checkResult bool) (bls12_381_fr %fr) + CDR; # pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : pair (option %checkResult bool) (bls12_381_fr %fr) + CAR; # bls12_381_g1 : pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : pair (option %checkResult bool) (bls12_381_fr %fr) + NEG; # bls12_381_g1 : pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr) : pair (option %checkResult bool) (bls12_381_fr %fr) + PAIR; # pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : pair (option %checkResult bool) (bls12_381_fr %fr) + SWAP; # pair (option %checkResult bool) (bls12_381_fr %fr) : pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) + PAIR; # pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr))) + } + { + IF_LEFT + { + SWAP; # @storage : @parameter%pairing_check + # == pairing_check == + # self.data.checkResult = sp.some(sp.pairing_check(params)) # @storage : @parameter%pairing_check + DUP; # @storage : @storage : @parameter%pairing_check + CDR; # pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : @storage : @parameter%pairing_check + SWAP; # @storage : pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : @parameter%pairing_check + CAR; # pair (option %checkResult bool) (bls12_381_fr %fr) : pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : @parameter%pairing_check + CDR; # bls12_381_fr : pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) : @parameter%pairing_check + DIG 2; # @parameter%pairing_check : bls12_381_fr : pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) + PAIRING_CHECK; # bool : bls12_381_fr : pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) + SOME; # option bool : bls12_381_fr : pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) + PAIR; # pair (option bool) bls12_381_fr : pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr)) + PAIR; # pair (pair (option bool) bls12_381_fr) (pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr))) + } + { + DROP; # @storage + # == toInt == + # sp.verify((sp.to_int(self.data.fr)) == 35115637951021136697019058358166656987035571271296265805438287419849817743725, message = 'Failed to cast field element Fr to Int') # @storage + DUP; # @storage : @storage + CAR; # pair (option %checkResult bool) (bls12_381_fr %fr) : @storage + CDR; # bls12_381_fr : @storage + INT; # int : @storage + PUSH int 35115637951021136697019058358166656987035571271296265805438287419849817743725; # int : int : @storage + COMPARE; # int : @storage + EQ; # bool : @storage + IF + {} + { + PUSH string "Failed to cast field element Fr to Int"; # string : @storage + FAILWITH; # FAILED + }; # @storage + }; # pair (pair (option bool) bls12_381_fr) (pair (bls12_381_g1 %g1) (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr))) + }; # pair (pair (option %checkResult bool) (bls12_381_fr %fr)) (pair bls12_381_g1 (pair (bls12_381_g2 %g2) (option %mulResult bls12_381_fr))) + }; # pair (pair (option bool) bls12_381_fr) (pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr))) + NIL operation; # list operation : pair (pair (option bool) bls12_381_fr) (pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr))) + PAIR; # pair (list operation) (pair (pair (option bool) bls12_381_fr) (pair bls12_381_g1 (pair bls12_381_g2 (option bls12_381_fr)))) + }; \ No newline at end of file diff --git a/test/chain/tezos/lexer/samples/p008-sapling/sapling-adv.hex b/test/chain/tezos/lexer/samples/p008-sapling/sapling-adv.hex new file mode 100644 index 00000000..baa3630e --- /dev/null +++ b/test/chain/tezos/lexer/samples/p008-sapling/sapling-adv.hex @@ -0,0 +1 @@ +0000018802000001830501058300080500055f07650663035d00000004256b6579068400080000000c257472616e73616374696f6e0502020000015003210317034c03160321053d036d034c0552020000012405700003034c03210571000203170386072f02000000080743035b000a03270200000000032103170571000403210316032103110743036a0001033a0743035b0000057000020321057100030319032a072c020000002e034c0320034c0320057100020316072f02000000080743035b000f03270200000000031e05700002034f034d031b020000009a057000020320057000020316072f0200000004034c0320020000003407430368010000002957726f6e67436f6e646974696f6e3a207e206f7065726174696f6e2e6b65792e69735f736f6d6528290327031303190325072c0200000000020000003807430368010000002d57726f6e67436f6e646974696f6e3a2073702e616d6f756e74203d3d20616d6f756e745f74657a2e76616c75650327034c0320053d036d034c05520200000002031b0342 diff --git a/test/chain/tezos/lexer/samples/p008-sapling/sapling-adv.micheline b/test/chain/tezos/lexer/samples/p008-sapling/sapling-adv.micheline new file mode 100644 index 00000000..cd08a72d --- /dev/null +++ b/test/chain/tezos/lexer/samples/p008-sapling/sapling-adv.micheline @@ -0,0 +1,111 @@ +[ + { "prim": "storage", "args": [ { "prim": "sapling_state", "args": [ { "int": "8" } ] } ] }, + { + "prim": "parameter", + "args": [ + { + "prim": "list", + "args": [ + { + "prim": "pair", + "args": [ + { "prim": "option", "args": [ { "prim": "key_hash" } ], "annots": [ "%key" ] }, + { "prim": "sapling_transaction", "args": [ { "int": "8" } ], "annots": [ "%transaction" ] } + ] + } + ] + } + ] + }, + { + "prim": "code", + "args": [ + [ + { "prim": "DUP" }, + { "prim": "CDR" }, + { "prim": "SWAP" }, + { "prim": "CAR" }, + { "prim": "DUP" }, + { "prim": "NIL", "args": [ { "prim": "operation" } ] }, + { "prim": "SWAP" }, + { + "prim": "ITER", + "args": [ + [ + { "prim": "DIG", "args": [ { "int": "3" } ] }, + { "prim": "SWAP" }, + { "prim": "DUP" }, + { "prim": "DUG", "args": [ { "int": "2" } ] }, + { "prim": "CDR" }, + { "prim": "SAPLING_VERIFY_UPDATE" }, + { "prim": "IF_NONE", "args": [ [ { "prim": "PUSH", "args": [ { "prim": "int" }, { "int": "10" } ] }, { "prim": "FAILWITH" } ], [] ] }, + { "prim": "DUP" }, + { "prim": "CDR" }, + { "prim": "DUG", "args": [ { "int": "4" } ] }, + { "prim": "DUP" }, + { "prim": "CAR" }, + { "prim": "DUP" }, + { "prim": "ABS" }, + { "prim": "PUSH", "args": [ { "prim": "mutez" }, { "int": "1" } ] }, + { "prim": "MUL" }, + { "prim": "PUSH", "args": [ { "prim": "int" }, { "int": "0" } ] }, + { "prim": "DIG", "args": [ { "int": "2" } ] }, + { "prim": "DUP" }, + { "prim": "DUG", "args": [ { "int": "3" } ] }, + { "prim": "COMPARE" }, + { "prim": "GT" }, + { + "prim": "IF", + "args": [ + [ + { "prim": "SWAP" }, + { "prim": "DROP" }, + { "prim": "SWAP" }, + { "prim": "DROP" }, + { "prim": "DUG", "args": [ { "int": "2" } ] }, + { "prim": "CAR" }, + { "prim": "IF_NONE", "args": [ [ { "prim": "PUSH", "args": [ { "prim": "int" }, { "int": "15" } ] }, { "prim": "FAILWITH" } ], [] ] }, + { "prim": "IMPLICIT_ACCOUNT" }, + { "prim": "DIG", "args": [ { "int": "2" } ] }, + { "prim": "UNIT" }, + { "prim": "TRANSFER_TOKENS" }, + { "prim": "CONS" } + ], + [ + { "prim": "DIG", "args": [ { "int": "2" } ] }, + { "prim": "DROP" }, + { "prim": "DIG", "args": [ { "int": "2" } ] }, + { "prim": "CAR" }, + { + "prim": "IF_NONE", + "args": [ + [ { "prim": "SWAP" }, { "prim": "DROP" } ], + [ { "prim": "PUSH", "args": [ { "prim": "string" }, { "string": "WrongCondition: ~ operation.key.is_some()" } ] }, { "prim": "FAILWITH" } ] + ] + }, + { "prim": "AMOUNT" }, + { "prim": "COMPARE" }, + { "prim": "EQ" }, + { + "prim": "IF", + "args": [ + [], + [ { "prim": "PUSH", "args": [ { "prim": "string" }, { "string": "WrongCondition: sp.amount == amount_tez.value" } ] }, { "prim": "FAILWITH" } ] + ] + } + ] + ] + } + ] + ] + }, + { "prim": "SWAP" }, + { "prim": "DROP" }, + { "prim": "NIL", "args": [ { "prim": "operation" } ] }, + { "prim": "SWAP" }, + { "prim": "ITER", "args": [ [ { "prim": "CONS" } ] ] }, + { "prim": "PAIR" } + ] + ] + } +] \ No newline at end of file diff --git a/test/chain/tezos/lexer/samples/p008-sapling/sapling-adv.michelson b/test/chain/tezos/lexer/samples/p008-sapling/sapling-adv.michelson new file mode 100644 index 00000000..fea1a0be --- /dev/null +++ b/test/chain/tezos/lexer/samples/p008-sapling/sapling-adv.michelson @@ -0,0 +1,105 @@ +parameter (list (pair (option %key key_hash) (sapling_transaction %transaction 8))); +storage (sapling_state 8); +code + { + DUP; # pair @parameter @storage : pair @parameter @storage + CDR; # @storage : pair @parameter @storage + SWAP; # pair @parameter @storage : @storage + CAR; # @parameter : @storage + # == handle == + # for operation in params: ... # @parameter : @storage + DUP; # @parameter : @parameter : @storage + NIL operation; # list operation : @parameter : @parameter : @storage + SWAP; # @parameter : list operation : @parameter : @storage + ITER + { + # result = sp.local("result", sp.sapling_verify_update(self.data.ledger, operation.transaction).open_some()) # pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : @storage + DIG 3; # @storage : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter + SWAP; # pair (option %key key_hash) (sapling_transaction %transaction 8) : @storage : list operation : @parameter + DUP; # pair (option %key key_hash) (sapling_transaction %transaction 8) : pair (option %key key_hash) (sapling_transaction %transaction 8) : @storage : list operation : @parameter + DUG 2; # pair (option %key key_hash) (sapling_transaction %transaction 8) : @storage : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter + CDR; # sapling_transaction 8 : @storage : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter + SAPLING_VERIFY_UPDATE; # option (pair int (sapling_state 8)) : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter + IF_SOME + {} + { + PUSH int 10; # int : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter + FAILWITH; # FAILED + }; # @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter + # self.data.ledger = sp.snd(result.value) # @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter + DUP; # @some : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter + CDR; # sapling_state 8 : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter + DUG 4; # @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + # amount = sp.local("amount", sp.fst(result.value)) # @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + DUP; # @some : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + CAR; # int : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + # amount_tez = sp.local("amount_tez", sp.mutez(abs(amount.value))) # int : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + DUP; # int : int : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + ABS; # nat : int : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + PUSH mutez 1; # mutez : nat : int : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + MUL; # mutez : int : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + # if amount.value > 0: # mutez : int : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + PUSH int 0; # int : mutez : int : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + DIG 2; # int : int : mutez : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + DUP; # int : int : int : mutez : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + DUG 3; # int : int : mutez : int : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + COMPARE; # int : mutez : int : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + GT; # bool : mutez : int : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + IF + { + SWAP; # int : mutez : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + DROP; # mutez : @some : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + SWAP; # @some : mutez : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + DROP; # mutez : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + # sp.transfer(sp.unit, amount_tez.value, sp.implicit_account(operation.key.open_some())) # mutez : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + DUG 2; # pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : mutez : @parameter : sapling_state 8 + CAR; # option key_hash : list operation : mutez : @parameter : sapling_state 8 + IF_SOME + {} + { + PUSH int 15; # int : list operation : mutez : @parameter : sapling_state 8 + FAILWITH; # FAILED + }; # @some : list operation : mutez : @parameter : sapling_state 8 + IMPLICIT_ACCOUNT; # contract unit : list operation : mutez : @parameter : sapling_state 8 + DIG 2; # mutez : contract unit : list operation : @parameter : sapling_state 8 + UNIT; # unit : mutez : contract unit : list operation : @parameter : sapling_state 8 + TRANSFER_TOKENS; # operation : list operation : @parameter : sapling_state 8 + CONS; # list operation : @parameter : sapling_state 8 + } + { + DIG 2; # @some : mutez : int : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + DROP; # mutez : int : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + # sp.verify(~ operation.key.is_some()) # mutez : int : pair (option %key key_hash) (sapling_transaction %transaction 8) : list operation : @parameter : sapling_state 8 + DIG 2; # pair (option %key key_hash) (sapling_transaction %transaction 8) : mutez : int : list operation : @parameter : sapling_state 8 + CAR; # option key_hash : mutez : int : list operation : @parameter : sapling_state 8 + IF_SOME + { + PUSH string "WrongCondition: ~ operation.key.is_some()"; # string : @some : mutez : int : list operation : @parameter : sapling_state 8 + FAILWITH; # FAILED + } + { + SWAP; # int : mutez : list operation : @parameter : sapling_state 8 + DROP; # mutez : list operation : @parameter : sapling_state 8 + }; # mutez : list operation : @parameter : sapling_state 8 + # sp.verify(sp.amount == amount_tez.value) # mutez : list operation : @parameter : sapling_state 8 + AMOUNT; # mutez : mutez : list operation : @parameter : sapling_state 8 + COMPARE; # int : list operation : @parameter : sapling_state 8 + EQ; # bool : list operation : @parameter : sapling_state 8 + IF + {} + { + PUSH string "WrongCondition: sp.amount == amount_tez.value"; # string : list operation : @parameter : sapling_state 8 + FAILWITH; # FAILED + }; # list operation : @parameter : sapling_state 8 + }; # list operation : @parameter : sapling_state 8 + }; # list operation : @parameter : @storage + SWAP; # @parameter : list operation : @storage + DROP; # list operation : @storage + NIL operation; # list operation : list operation : @storage + SWAP; # list operation : list operation : @storage + ITER + { + CONS; # list operation : @storage + }; # list operation : @storage + PAIR; # pair (list operation) @storage + }; \ No newline at end of file diff --git a/test/chain/tezos/lexer/samples/p008-sapling/sapling.hex b/test/chain/tezos/lexer/samples/p008-sapling/sapling.hex new file mode 100644 index 00000000..c1738144 --- /dev/null +++ b/test/chain/tezos/lexer/samples/p008-sapling/sapling.hex @@ -0,0 +1 @@ +000000ae02000000a9050107650765085e07650683000c0000000225610684000c00000002256205630765035b0583000c000000022568045b0000000225780765066305630765035b0583000f000000022579085e035b0765035b0583000800000002257a050007650683000f0000000225730684000f0000000225740502020000002e03210316034c031703210316034c031703170570000203210316034c0317038603460342034c0342053d036d0342 diff --git a/test/chain/tezos/lexer/samples/p008-sapling/sapling.micheline b/test/chain/tezos/lexer/samples/p008-sapling/sapling.micheline new file mode 100644 index 00000000..36229377 --- /dev/null +++ b/test/chain/tezos/lexer/samples/p008-sapling/sapling.micheline @@ -0,0 +1,87 @@ +[ + { + "prim": "storage", + "args": [ + { + "prim": "pair", + "args": [ + { + "prim": "pair", + "args": [ + { + "prim": "lambda", + "args": [ + { + "prim": "pair", + "args": [ + { "prim": "sapling_state", "args": [ { "int": "12" } ], "annots": [ "%a" ] }, + { "prim": "sapling_transaction", "args": [ { "int": "12" } ], "annots": [ "%b" ] } + ] + }, + { "prim": "option", "args": [ { "prim": "pair", "args": [ { "prim": "int" }, { "prim": "sapling_state", "args": [ { "int": "12" } ] } ] } ] } + ], + "annots": [ "%h" ] + }, + { "prim": "int", "annots": [ "%x" ] } + ] + }, + { + "prim": "pair", + "args": [ + { + "prim": "option", + "args": [ { "prim": "option", "args": [ { "prim": "pair", "args": [ { "prim": "int" }, { "prim": "sapling_state", "args": [ { "int": "15" } ] } ] } ] } ], + "annots": [ "%y" ] + }, + { + "prim": "lambda", + "args": [ { "prim": "int" }, { "prim": "pair", "args": [ { "prim": "int" }, { "prim": "sapling_state", "args": [ { "int": "8" } ] } ] } ], + "annots": [ "%z" ] + } + ] + } + ] + } + ] + }, + { + "prim": "parameter", + "args": [ + { + "prim": "pair", + "args": [ + { "prim": "sapling_state", "args": [ { "int": "15" } ], "annots": [ "%s" ] }, + { "prim": "sapling_transaction", "args": [ { "int": "15" } ], "annots": [ "%t" ] } + ] + } + ] + }, + { + "prim": "code", + "args": [ + [ + { "prim": "DUP" }, + { "prim": "CAR" }, + { "prim": "SWAP" }, + { "prim": "CDR" }, + { "prim": "DUP" }, + { "prim": "CAR" }, + { "prim": "SWAP" }, + { "prim": "CDR" }, + { "prim": "CDR" }, + { "prim": "DIG", "args": [ { "int": "2" } ] }, + { "prim": "DUP" }, + { "prim": "CAR" }, + { "prim": "SWAP" }, + { "prim": "CDR" }, + { "prim": "SAPLING_VERIFY_UPDATE" }, + { "prim": "SOME" }, + { "prim": "PAIR" }, + { "prim": "SWAP" }, + { "prim": "PAIR" }, + { "prim": "NIL", "args": [ { "prim": "operation" } ] }, + { "prim": "PAIR" } + ] + ] + } +] \ No newline at end of file diff --git a/test/chain/tezos/lexer/samples/p008-sapling/sapling.michelson b/test/chain/tezos/lexer/samples/p008-sapling/sapling.michelson new file mode 100644 index 00000000..48c4c194 --- /dev/null +++ b/test/chain/tezos/lexer/samples/p008-sapling/sapling.michelson @@ -0,0 +1,28 @@ +parameter (pair (sapling_state %s 15) (sapling_transaction %t 15)); +storage (pair (pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x)) (pair (option %y (option (pair int (sapling_state 15)))) (lambda %z int (pair int (sapling_state 8))))); +code + { + DUP; # pair @parameter @storage : pair @parameter @storage + CAR; # @parameter : pair @parameter @storage + SWAP; # pair @parameter @storage : @parameter + CDR; # @storage : @parameter + # == entry_point_1 == + # self.data.y = sp.some(sp.sapling_verify_update(params.s, params.t)) # @storage : @parameter + DUP; # @storage : @storage : @parameter + CAR; # pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x) : @storage : @parameter + SWAP; # @storage : pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x) : @parameter + CDR; # pair (option %y (option (pair int (sapling_state 15)))) (lambda %z int (pair int (sapling_state 8))) : pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x) : @parameter + CDR; # lambda int (pair int (sapling_state 8)) : pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x) : @parameter + DIG 2; # @parameter : lambda int (pair int (sapling_state 8)) : pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x) + DUP; # @parameter : @parameter : lambda int (pair int (sapling_state 8)) : pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x) + CAR; # sapling_state 15 : @parameter : lambda int (pair int (sapling_state 8)) : pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x) + SWAP; # @parameter : sapling_state 15 : lambda int (pair int (sapling_state 8)) : pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x) + CDR; # sapling_transaction 15 : sapling_state 15 : lambda int (pair int (sapling_state 8)) : pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x) + SAPLING_VERIFY_UPDATE; # option (pair int (sapling_state 15)) : lambda int (pair int (sapling_state 8)) : pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x) + SOME; # option (option (pair int (sapling_state 15))) : lambda int (pair int (sapling_state 8)) : pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x) + PAIR; # pair (option (option (pair int (sapling_state 15)))) (lambda int (pair int (sapling_state 8))) : pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x) + SWAP; # pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x) : pair (option (option (pair int (sapling_state 15)))) (lambda int (pair int (sapling_state 8))) + PAIR; # pair (pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x)) (pair (option (option (pair int (sapling_state 15)))) (lambda int (pair int (sapling_state 8)))) + NIL operation; # list operation : pair (pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x)) (pair (option (option (pair int (sapling_state 15)))) (lambda int (pair int (sapling_state 8)))) + PAIR; # pair (list operation) (pair (pair (lambda %h (pair (sapling_state %a 12) (sapling_transaction %b 12)) (option (pair int (sapling_state 12)))) (int %x)) (pair (option (option (pair int (sapling_state 15)))) (lambda int (pair int (sapling_state 8))))) + }; \ No newline at end of file diff --git a/test/chain/tezos/lexer/samples/p008-tickets/tickets.hex b/test/chain/tezos/lexer/samples/p008-tickets/tickets.hex new file mode 100644 index 00000000..0afdb0a5 --- /dev/null +++ b/test/chain/tezos/lexer/samples/p008-tickets/tickets.hex @@ -0,0 +1 @@ +00000142020000013d0501076506630587035b00000002257806630587036800000002257905000764046c0000000a256175746f5f63616c6c0687035b000000042572756e050202000000fa037a072e020000002c032007430362002b0743035b00010388053d036d0449000000042572756e0743036a000005700003034d031b02000000be038907430362002a074303680100000003616263038805700003034c0346034c0316034205710002052900040321074303620003034c0322072f02000000080743035b0014032702000000020316034c032105710002034b0356072f02000000080743035b001403270200000000074303620003057000020322072f02000000080743035b00140327020000000203160342034c038a072f02000000080743035b001403270200000000037a034c0342038b034c0317034c0342053d036d0342 diff --git a/test/chain/tezos/lexer/samples/p008-tickets/tickets.micheline b/test/chain/tezos/lexer/samples/p008-tickets/tickets.micheline new file mode 100644 index 00000000..6f511991 --- /dev/null +++ b/test/chain/tezos/lexer/samples/p008-tickets/tickets.micheline @@ -0,0 +1,86 @@ +[ + { + "prim": "storage", + "args": [ + { + "prim": "pair", + "args": [ + { "prim": "option", "args": [ { "prim": "ticket", "args": [ { "prim": "int" } ] } ], "annots": [ "%x" ] }, + { "prim": "option", "args": [ { "prim": "ticket", "args": [ { "prim": "string" } ] } ], "annots": [ "%y" ] } + ] + } + ] + }, + { + "prim": "parameter", + "args": [ { "prim": "or", "args": [ { "prim": "unit", "annots": [ "%auto_call" ] }, { "prim": "ticket", "args": [ { "prim": "int" } ], "annots": [ "%run" ] } ] } ] + }, + { + "prim": "code", + "args": [ + [ + { "prim": "UNPAIR" }, + { + "prim": "IF_LEFT", + "args": [ + [ + { "prim": "DROP" }, + { "prim": "PUSH", "args": [ { "prim": "nat" }, { "int": "43" } ] }, + { "prim": "PUSH", "args": [ { "prim": "int" }, { "int": "1" } ] }, + { "prim": "TICKET" }, + { "prim": "NIL", "args": [ { "prim": "operation" } ] }, + { "prim": "SELF", "annots": [ "%run" ] }, + { "prim": "PUSH", "args": [ { "prim": "mutez" }, { "int": "0" } ] }, + { "prim": "DIG", "args": [ { "int": "3" } ] }, + { "prim": "TRANSFER_TOKENS" }, + { "prim": "CONS" } + ], + [ + { "prim": "READ_TICKET" }, + { "prim": "PUSH", "args": [ { "prim": "nat" }, { "int": "42" } ] }, + { "prim": "PUSH", "args": [ { "prim": "string" }, { "string": "abc" } ] }, + { "prim": "TICKET" }, + { "prim": "DIG", "args": [ { "int": "3" } ] }, + { "prim": "SWAP" }, + { "prim": "SOME" }, + { "prim": "SWAP" }, + { "prim": "CAR" }, + { "prim": "PAIR" }, + { "prim": "DUG", "args": [ { "int": "2" } ] }, + { "prim": "GET", "args": [ { "int": "4" } ] }, + { "prim": "DUP" }, + { "prim": "PUSH", "args": [ { "prim": "nat" }, { "int": "3" } ] }, + { "prim": "SWAP" }, + { "prim": "EDIV" }, + { "prim": "IF_NONE", "args": [ [ { "prim": "PUSH", "args": [ { "prim": "int" }, { "int": "20" } ] }, { "prim": "FAILWITH" } ], [ { "prim": "CAR" } ] ] }, + { "prim": "SWAP" }, + { "prim": "DUP" }, + { "prim": "DUG", "args": [ { "int": "2" } ] }, + { "prim": "SUB" }, + { "prim": "ISNAT" }, + { "prim": "IF_NONE", "args": [ [ { "prim": "PUSH", "args": [ { "prim": "int" }, { "int": "20" } ] }, { "prim": "FAILWITH" } ], [] ] }, + { "prim": "PUSH", "args": [ { "prim": "nat" }, { "int": "3" } ] }, + { "prim": "DIG", "args": [ { "int": "2" } ] }, + { "prim": "EDIV" }, + { "prim": "IF_NONE", "args": [ [ { "prim": "PUSH", "args": [ { "prim": "int" }, { "int": "20" } ] }, { "prim": "FAILWITH" } ], [ { "prim": "CAR" } ] ] }, + { "prim": "PAIR" }, + { "prim": "SWAP" }, + { "prim": "SPLIT_TICKET" }, + { "prim": "IF_NONE", "args": [ [ { "prim": "PUSH", "args": [ { "prim": "int" }, { "int": "20" } ] }, { "prim": "FAILWITH" } ], [] ] }, + { "prim": "UNPAIR" }, + { "prim": "SWAP" }, + { "prim": "PAIR" }, + { "prim": "JOIN_TICKETS" }, + { "prim": "SWAP" }, + { "prim": "CDR" }, + { "prim": "SWAP" }, + { "prim": "PAIR" }, + { "prim": "NIL", "args": [ { "prim": "operation" } ] } + ] + ] + }, + { "prim": "PAIR" } + ] + ] + } +] \ No newline at end of file diff --git a/test/chain/tezos/lexer/samples/p008-tickets/tickets.michelson b/test/chain/tezos/lexer/samples/p008-tickets/tickets.michelson new file mode 100644 index 00000000..38a1a47a --- /dev/null +++ b/test/chain/tezos/lexer/samples/p008-tickets/tickets.michelson @@ -0,0 +1,98 @@ +parameter (or (unit %auto_call) (ticket %run int)); +storage (pair (option %x (ticket int)) (option %y (ticket string))); +code + { + UNPAIR; # @parameter : @storage + IF_LEFT + { + DROP; # @storage + # == auto_call == + # ticket_11 = sp.local("ticket_11", sp.ticket(1, 43)) # @storage + PUSH nat 43; # nat : @storage + PUSH int 1; # int : nat : @storage + TICKET; # ticket int : @storage + # sp.transfer(ticket_11.value, sp.tez(0), sp.self_entry_point('run')) # ticket int : @storage + NIL operation; # list operation : ticket int : @storage + SELF %run; # contract (ticket int) : list operation : ticket int : @storage + PUSH mutez 0; # mutez : contract (ticket int) : list operation : ticket int : @storage + DIG 3; # ticket int : mutez : contract (ticket int) : list operation : @storage + TRANSFER_TOKENS; # operation : list operation : @storage + CONS; # list operation : @storage + } + { + # == run == + # match_pair_17_fst, match_pair_17_snd = sp.match_tuple(sp.read_ticket(params), names = [ "match_pair_17_fst", "match_pair_17_snd" ]) # @parameter%run : @storage + READ_TICKET; # pair address (pair int nat) : ticket int : @storage + # ticket_18 = sp.local("ticket_18", sp.ticket('abc', 42)) # pair address (pair int nat) : ticket int : @storage + PUSH nat 42; # nat : pair address (pair int nat) : ticket int : @storage + PUSH string "abc"; # string : nat : pair address (pair int nat) : ticket int : @storage + TICKET; # ticket string : pair address (pair int nat) : ticket int : @storage + # self.data.y = sp.some(ticket_18.value) # ticket string : pair address (pair int nat) : ticket int : @storage + DIG 3; # @storage : ticket string : pair address (pair int nat) : ticket int + SWAP; # ticket string : @storage : pair address (pair int nat) : ticket int + SOME; # option (ticket string) : @storage : pair address (pair int nat) : ticket int + SWAP; # @storage : option (ticket string) : pair address (pair int nat) : ticket int + CAR; # option (ticket int) : option (ticket string) : pair address (pair int nat) : ticket int + PAIR; # pair (option (ticket int)) (option (ticket string)) : pair address (pair int nat) : ticket int + DUG 2; # pair address (pair int nat) : ticket int : pair (option (ticket int)) (option (ticket string)) + # compute_19 = sp.local("compute_19", sp.snd(sp.snd(match_pair_17_fst))) # pair address (pair int nat) : ticket int : pair (option (ticket int)) (option (ticket string)) + GET 4; # nat : ticket int : pair (option (ticket int)) (option (ticket string)) + # split_ticket_20 = sp.local("split_ticket_20", sp.split_ticket(match_pair_17_snd, (compute_19.value // 3, sp.as_nat(compute_19.value - (compute_19.value // 3))))) # nat : ticket int : pair (option (ticket int)) (option (ticket string)) + DUP; # nat : nat : ticket int : pair (option (ticket int)) (option (ticket string)) + PUSH nat 3; # nat : nat : nat : ticket int : pair (option (ticket int)) (option (ticket string)) + SWAP; # nat : nat : nat : ticket int : pair (option (ticket int)) (option (ticket string)) + EDIV; # option (pair nat nat) : nat : ticket int : pair (option (ticket int)) (option (ticket string)) + IF_SOME + { + CAR; # nat : nat : ticket int : pair (option (ticket int)) (option (ticket string)) + } + { + PUSH int 20; # int : nat : ticket int : pair (option (ticket int)) (option (ticket string)) + FAILWITH; # FAILED + }; # nat : nat : ticket int : pair (option (ticket int)) (option (ticket string)) + SWAP; # nat : nat : ticket int : pair (option (ticket int)) (option (ticket string)) + DUP; # nat : nat : nat : ticket int : pair (option (ticket int)) (option (ticket string)) + DUG 2; # nat : nat : nat : ticket int : pair (option (ticket int)) (option (ticket string)) + SUB; # int : nat : ticket int : pair (option (ticket int)) (option (ticket string)) + ISNAT; # option nat : nat : ticket int : pair (option (ticket int)) (option (ticket string)) + IF_SOME + {} + { + PUSH int 20; # int : nat : ticket int : pair (option (ticket int)) (option (ticket string)) + FAILWITH; # FAILED + }; # @some : nat : ticket int : pair (option (ticket int)) (option (ticket string)) + PUSH nat 3; # nat : @some : nat : ticket int : pair (option (ticket int)) (option (ticket string)) + DIG 2; # nat : nat : @some : ticket int : pair (option (ticket int)) (option (ticket string)) + EDIV; # option (pair nat nat) : @some : ticket int : pair (option (ticket int)) (option (ticket string)) + IF_SOME + { + CAR; # nat : @some : ticket int : pair (option (ticket int)) (option (ticket string)) + } + { + PUSH int 20; # int : @some : ticket int : pair (option (ticket int)) (option (ticket string)) + FAILWITH; # FAILED + }; # nat : @some : ticket int : pair (option (ticket int)) (option (ticket string)) + PAIR; # pair nat @some : ticket int : pair (option (ticket int)) (option (ticket string)) + SWAP; # ticket int : pair nat @some : pair (option (ticket int)) (option (ticket string)) + SPLIT_TICKET; # option (pair (ticket int) (ticket int)) : pair (option (ticket int)) (option (ticket string)) + # match_pair_21_fst, match_pair_21_snd = sp.match_tuple(split_ticket_20.value.open_some(), names = [ "match_pair_21_fst", "match_pair_21_snd" ]) # option (pair (ticket int) (ticket int)) : pair (option (ticket int)) (option (ticket string)) + IF_SOME + {} + { + PUSH int 20; # int : pair (option (ticket int)) (option (ticket string)) + FAILWITH; # FAILED + }; # @some : pair (option (ticket int)) (option (ticket string)) + UNPAIR; # ticket int : ticket int : pair (option (ticket int)) (option (ticket string)) + SWAP; # ticket int : ticket int : pair (option (ticket int)) (option (ticket string)) + # join_ticket_22 = sp.local("join_ticket_22", sp.join_tickets((match_pair_21_snd, match_pair_21_fst))) # ticket int : ticket int : pair (option (ticket int)) (option (ticket string)) + PAIR; # pair (ticket int) (ticket int) : pair (option (ticket int)) (option (ticket string)) + JOIN_TICKETS; # option (ticket int) : pair (option (ticket int)) (option (ticket string)) + SWAP; # pair (option (ticket int)) (option (ticket string)) : option (ticket int) + # self.data.x = join_ticket_22.value # pair (option (ticket int)) (option (ticket string)) : option (ticket int) + CDR; # option (ticket string) : option (ticket int) + SWAP; # option (ticket int) : option (ticket string) + PAIR; # pair (option (ticket int)) (option (ticket string)) + NIL operation; # list operation : pair (option (ticket int)) (option (ticket string)) + }; # list operation : @storage + PAIR; # pair (list operation) @storage + }; \ No newline at end of file