From c8d70fd921a876c3d76c8092a8f1b9d502401444 Mon Sep 17 00:00:00 2001 From: Manank Patni Date: Thu, 29 Jun 2023 03:15:56 +0530 Subject: [PATCH] Add delegated token deployment (#592) Signed-off-by: Manank Patni --- .../contracts/token/assets/MultiAsset.json | 4592 ----------------- .../assets/fa2_single_asset_delegated.ts | 938 ++++ .../contracts/token/hooks/useToken.ts | 8 +- src/services/contracts/token/index.ts | 39 +- 4 files changed, 968 insertions(+), 4609 deletions(-) delete mode 100644 src/services/contracts/token/assets/MultiAsset.json create mode 100644 src/services/contracts/token/assets/fa2_single_asset_delegated.ts diff --git a/src/services/contracts/token/assets/MultiAsset.json b/src/services/contracts/token/assets/MultiAsset.json deleted file mode 100644 index e1f8b94a..00000000 --- a/src/services/contracts/token/assets/MultiAsset.json +++ /dev/null @@ -1,4592 +0,0 @@ -[ - { - "prim": "storage", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address", - "annots": [ - "%admin" - ] - }, - { - "prim": "bool", - "annots": [ - "%paused" - ] - } - ] - }, - { - "prim": "option", - "args": [ - { - "prim": "address" - } - ], - "annots": [ - "%pending_admin" - ] - } - ], - "annots": [ - "%admin" - ] - }, - { - "prim": "pair", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "big_map", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "nat" - } - ] - }, - { - "prim": "nat" - } - ], - "annots": [ - "%ledger" - ] - }, - { - "prim": "big_map", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "nat" - } - ] - } - ] - }, - { - "prim": "unit" - } - ], - "annots": [ - "%operators" - ] - } - ] - }, - { - "prim": "pair", - "args": [ - { - "prim": "big_map", - "args": [ - { - "prim": "nat" - }, - { - "prim": "pair", - "args": [ - { - "prim": "nat", - "annots": [ - "%token_id" - ] - }, - { - "prim": "map", - "args": [ - { - "prim": "string" - }, - { - "prim": "bytes" - } - ], - "annots": [ - "%token_info" - ] - } - ] - } - ], - "annots": [ - "%token_metadata" - ] - }, - { - "prim": "big_map", - "args": [ - { - "prim": "nat" - }, - { - "prim": "nat" - } - ], - "annots": [ - "%token_total_supply" - ] - } - ] - } - ], - "annots": [ - "%assets" - ] - } - ] - }, - { - "prim": "big_map", - "args": [ - { - "prim": "string" - }, - { - "prim": "bytes" - } - ], - "annots": [ - "%metadata" - ] - } - ] - } - ] - }, - { - "prim": "parameter", - "args": [ - { - "prim": "or", - "args": [ - { - "prim": "or", - "args": [ - { - "prim": "or", - "args": [ - { - "prim": "or", - "args": [ - { - "prim": "unit", - "annots": [ - "%confirm_admin" - ] - }, - { - "prim": "bool", - "annots": [ - "%pause" - ] - } - ] - }, - { - "prim": "address", - "annots": [ - "%set_admin" - ] - } - ], - "annots": [ - "%admin" - ] - }, - { - "prim": "or", - "args": [ - { - "prim": "or", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "list", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address", - "annots": [ - "%owner" - ] - }, - { - "prim": "nat", - "annots": [ - "%token_id" - ] - } - ] - } - ], - "annots": [ - "%requests" - ] - }, - { - "prim": "contract", - "args": [ - { - "prim": "list", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address", - "annots": [ - "%owner" - ] - }, - { - "prim": "nat", - "annots": [ - "%token_id" - ] - } - ], - "annots": [ - "%request" - ] - }, - { - "prim": "nat", - "annots": [ - "%balance" - ] - } - ] - } - ] - } - ], - "annots": [ - "%callback" - ] - } - ], - "annots": [ - "%balance_of" - ] - }, - { - "prim": "list", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address", - "annots": [ - "%from_" - ] - }, - { - "prim": "list", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address", - "annots": [ - "%to_" - ] - }, - { - "prim": "pair", - "args": [ - { - "prim": "nat", - "annots": [ - "%token_id" - ] - }, - { - "prim": "nat", - "annots": [ - "%amount" - ] - } - ] - } - ] - } - ], - "annots": [ - "%txs" - ] - } - ] - } - ], - "annots": [ - "%transfer" - ] - } - ] - }, - { - "prim": "list", - "args": [ - { - "prim": "or", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address", - "annots": [ - "%owner" - ] - }, - { - "prim": "pair", - "args": [ - { - "prim": "address", - "annots": [ - "%operator" - ] - }, - { - "prim": "nat", - "annots": [ - "%token_id" - ] - } - ] - } - ], - "annots": [ - "%add_operator" - ] - }, - { - "prim": "pair", - "args": [ - { - "prim": "address", - "annots": [ - "%owner" - ] - }, - { - "prim": "pair", - "args": [ - { - "prim": "address", - "annots": [ - "%operator" - ] - }, - { - "prim": "nat", - "annots": [ - "%token_id" - ] - } - ] - } - ], - "annots": [ - "%remove_operator" - ] - } - ] - } - ], - "annots": [ - "%update_operators" - ] - } - ], - "annots": [ - "%assets" - ] - } - ] - }, - { - "prim": "or", - "args": [ - { - "prim": "or", - "args": [ - { - "prim": "list", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address", - "annots": [ - "%owner" - ] - }, - { - "prim": "pair", - "args": [ - { - "prim": "nat", - "annots": [ - "%token_id" - ] - }, - { - "prim": "nat", - "annots": [ - "%amount" - ] - } - ] - } - ] - } - ], - "annots": [ - "%burn_tokens" - ] - }, - { - "prim": "pair", - "args": [ - { - "prim": "nat", - "annots": [ - "%token_id" - ] - }, - { - "prim": "map", - "args": [ - { - "prim": "string" - }, - { - "prim": "bytes" - } - ], - "annots": [ - "%token_info" - ] - } - ], - "annots": [ - "%create_token" - ] - } - ] - }, - { - "prim": "list", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address", - "annots": [ - "%owner" - ] - }, - { - "prim": "pair", - "args": [ - { - "prim": "nat", - "annots": [ - "%token_id" - ] - }, - { - "prim": "nat", - "annots": [ - "%amount" - ] - } - ] - } - ] - } - ], - "annots": [ - "%mint_tokens" - ] - } - ], - "annots": [ - "%tokens" - ] - } - ] - } - ] - }, - { - "prim": "code", - "args": [ - [ - { - "prim": "PUSH", - "args": [ - { - "prim": "string" - }, - { - "string": "FA2_TOKEN_UNDEFINED" - } - ] - }, - { - "prim": "PUSH", - "args": [ - { - "prim": "string" - }, - { - "string": "FA2_INSUFFICIENT_BALANCE" - } - ] - }, - { - "prim": "LAMBDA", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "nat" - } - ] - }, - { - "prim": "big_map", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "nat" - } - ] - }, - { - "prim": "nat" - } - ] - } - ] - }, - { - "prim": "nat" - }, - [ - { - "prim": "UNPAIR" - }, - { - "prim": "GET" - }, - { - "prim": "IF_NONE", - "args": [ - [ - { - "prim": "PUSH", - "args": [ - { - "prim": "nat" - }, - { - "int": "0" - } - ] - } - ], - [] - ] - } - ] - ] - }, - { - "prim": "DUP" - }, - { - "prim": "LAMBDA", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "lambda", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "nat" - } - ] - }, - { - "prim": "big_map", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "nat" - } - ] - }, - { - "prim": "nat" - } - ] - } - ] - }, - { - "prim": "nat" - } - ] - }, - { - "prim": "pair", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "nat" - } - ] - }, - { - "prim": "pair", - "args": [ - { - "prim": "nat" - }, - { - "prim": "big_map", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "nat" - } - ] - }, - { - "prim": "nat" - } - ] - } - ] - } - ] - } - ] - }, - { - "prim": "big_map", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "nat" - } - ] - }, - { - "prim": "nat" - } - ] - }, - [ - { - "prim": "UNPAIR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "GET", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "CAR" - }, - { - "prim": "CDR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "EXEC" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "ADD" - }, - { - "prim": "DUP" - }, - { - "prim": "PUSH", - "args": [ - { - "prim": "nat" - }, - { - "int": "0" - } - ] - }, - { - "prim": "COMPARE" - }, - { - "prim": "EQ" - }, - { - "prim": "IF", - "args": [ - [ - { - "prim": "DROP" - }, - { - "prim": "NONE", - "args": [ - { - "prim": "nat" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "UPDATE" - } - ], - [ - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "SOME" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "UPDATE" - } - ] - ] - } - ] - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "APPLY" - }, - { - "prim": "DUP", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DUP", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "LAMBDA", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "lambda", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "nat" - } - ] - }, - { - "prim": "big_map", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "nat" - } - ] - }, - { - "prim": "nat" - } - ] - } - ] - }, - { - "prim": "nat" - } - ] - }, - { - "prim": "string" - } - ] - }, - { - "prim": "pair", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "nat" - } - ] - }, - { - "prim": "pair", - "args": [ - { - "prim": "nat" - }, - { - "prim": "big_map", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "nat" - } - ] - }, - { - "prim": "nat" - } - ] - } - ] - } - ] - } - ] - }, - { - "prim": "big_map", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "nat" - } - ] - }, - { - "prim": "nat" - } - ] - }, - [ - { - "prim": "UNPAIR" - }, - { - "prim": "UNPAIR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DUP" - }, - { - "prim": "GET", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "CAR" - }, - { - "prim": "CDR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "EXEC" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "SUB" - }, - { - "prim": "ISNAT" - }, - { - "prim": "IF_NONE", - "args": [ - [ - { - "prim": "DROP", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "FAILWITH" - } - ], - [ - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DUP" - }, - { - "prim": "PUSH", - "args": [ - { - "prim": "nat" - }, - { - "int": "0" - } - ] - }, - { - "prim": "COMPARE" - }, - { - "prim": "EQ" - }, - { - "prim": "IF", - "args": [ - [ - { - "prim": "DROP" - }, - { - "prim": "NONE", - "args": [ - { - "prim": "nat" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "UPDATE" - } - ], - [ - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "SOME" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "UPDATE" - } - ] - ] - } - ] - ] - } - ] - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "APPLY" - }, - { - "prim": "LAMBDA", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "bool" - } - ] - }, - { - "prim": "option", - "args": [ - { - "prim": "address" - } - ] - } - ] - }, - { - "prim": "unit" - }, - [ - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "SENDER" - }, - { - "prim": "COMPARE" - }, - { - "prim": "NEQ" - }, - { - "prim": "IF", - "args": [ - [ - { - "prim": "PUSH", - "args": [ - { - "prim": "string" - }, - { - "string": "NOT_AN_ADMIN" - } - ] - }, - { - "prim": "FAILWITH" - } - ], - [] - ] - }, - { - "prim": "UNIT" - } - ] - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "6" - } - ] - }, - { - "prim": "UNPAIR" - }, - { - "prim": "IF_LEFT", - "args": [ - [ - { - "prim": "DIG", - "args": [ - { - "int": "6" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "IF_LEFT", - "args": [ - [ - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "SWAP" - }, - { - "prim": "IF_LEFT", - "args": [ - [ - { - "prim": "IF_LEFT", - "args": [ - [ - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DUP" - }, - { - "prim": "CDR" - }, - { - "prim": "IF_NONE", - "args": [ - [ - { - "prim": "PUSH", - "args": [ - { - "prim": "string" - }, - { - "string": "NO_PENDING_ADMIN" - } - ] - }, - { - "prim": "FAILWITH" - } - ], - [ - { - "prim": "SENDER" - }, - { - "prim": "COMPARE" - }, - { - "prim": "EQ" - }, - { - "prim": "IF", - "args": [ - [ - { - "prim": "CAR" - }, - { - "prim": "CDR" - }, - { - "prim": "NONE", - "args": [ - { - "prim": "address" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "SENDER" - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - } - ], - [ - { - "prim": "PUSH", - "args": [ - { - "prim": "string" - }, - { - "string": "NOT_A_PENDING_ADMIN" - } - ] - }, - { - "prim": "FAILWITH" - } - ] - ] - } - ] - ] - }, - { - "prim": "NIL", - "args": [ - { - "prim": "operation" - } - ] - }, - { - "prim": "PAIR" - } - ], - [ - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "EXEC" - }, - { - "prim": "DROP" - }, - { - "prim": "PAIR" - }, - { - "prim": "DUP" - }, - { - "prim": "CDR" - }, - { - "prim": "DUP" - }, - { - "prim": "CDR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - }, - { - "prim": "NIL", - "args": [ - { - "prim": "operation" - } - ] - }, - { - "prim": "PAIR" - } - ] - ] - } - ], - [ - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "EXEC" - }, - { - "prim": "DROP" - }, - { - "prim": "PAIR" - }, - { - "prim": "DUP" - }, - { - "prim": "CAR" - }, - { - "prim": "SOME" - }, - { - "prim": "SWAP" - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "NIL", - "args": [ - { - "prim": "operation" - } - ] - }, - { - "prim": "PAIR" - } - ] - ] - }, - { - "prim": "UNPAIR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DUP" - }, - { - "prim": "CDR" - }, - { - "prim": "SWAP" - }, - { - "prim": "CAR" - }, - { - "prim": "CDR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - }, - { - "prim": "SWAP" - }, - { - "prim": "PAIR" - } - ], - [ - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "CDR" - }, - { - "prim": "IF", - "args": [ - [ - { - "prim": "PUSH", - "args": [ - { - "prim": "string" - }, - { - "string": "PAUSED" - } - ] - }, - { - "prim": "FAILWITH" - } - ], - [] - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CDR" - }, - { - "prim": "SWAP" - }, - { - "prim": "IF_LEFT", - "args": [ - [ - { - "prim": "IF_LEFT", - "args": [ - [ - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - }, - { - "prim": "DUP" - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "DUP" - }, - { - "prim": "CAR" - }, - { - "prim": "MAP", - "args": [ - [ - { - "prim": "DUP", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "CDR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CDR" - }, - { - "prim": "MEM" - }, - { - "prim": "IF", - "args": [ - [ - { - "prim": "DUP", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CDR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "DUP", - "args": [ - { - "int": "7" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "EXEC" - }, - { - "prim": "SWAP" - }, - { - "prim": "PAIR" - } - ], - [ - { - "prim": "DROP" - }, - { - "prim": "DUP", - "args": [ - { - "int": "6" - } - ] - }, - { - "prim": "FAILWITH" - } - ] - ] - } - ] - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "SWAP" - }, - { - "prim": "CDR" - }, - { - "prim": "PUSH", - "args": [ - { - "prim": "mutez" - }, - { - "int": "0" - } - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "TRANSFER_TOKENS" - }, - { - "prim": "SWAP" - }, - { - "prim": "NIL", - "args": [ - { - "prim": "operation" - } - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CONS" - }, - { - "prim": "PAIR" - } - ], - [ - { - "prim": "DIG", - "args": [ - { - "int": "5" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "LAMBDA", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "address" - } - ] - }, - { - "prim": "pair", - "args": [ - { - "prim": "nat" - }, - { - "prim": "big_map", - "args": [ - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "pair", - "args": [ - { - "prim": "address" - }, - { - "prim": "nat" - } - ] - } - ] - }, - { - "prim": "unit" - } - ] - } - ] - } - ] - }, - { - "prim": "unit" - }, - [ - { - "prim": "DUP" - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CDR" - }, - { - "prim": "DUP" - }, - { - "prim": "DUP", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "COMPARE" - }, - { - "prim": "EQ" - }, - { - "prim": "IF", - "args": [ - [ - { - "prim": "DROP", - "args": [ - { - "int": "3" - } - ] - } - ], - [ - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DUP" - }, - { - "prim": "GET", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "MEM" - }, - { - "prim": "IF", - "args": [ - [], - [ - { - "prim": "PUSH", - "args": [ - { - "prim": "string" - }, - { - "string": "FA2_NOT_OPERATOR" - } - ] - }, - { - "prim": "FAILWITH" - } - ] - ] - } - ] - ] - }, - { - "prim": "UNIT" - } - ] - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - }, - { - "prim": "DUP" - }, - { - "prim": "CDR" - }, - { - "prim": "DUP" - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "DUP", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "ITER", - "args": [ - [ - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CDR" - }, - { - "prim": "ITER", - "args": [ - [ - { - "prim": "SWAP" - }, - { - "prim": "PAIR" - }, - { - "prim": "DUP" - }, - { - "prim": "CDR" - }, - { - "prim": "DUP", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "MEM" - }, - { - "prim": "IF", - "args": [ - [ - { - "prim": "DUP", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CDR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "SENDER" - }, - { - "prim": "DUP", - "args": [ - { - "int": "5" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - }, - { - "prim": "DUP", - "args": [ - { - "int": "6" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CDR" - }, - { - "prim": "SWAP" - }, - { - "prim": "EXEC" - }, - { - "prim": "DROP" - }, - { - "prim": "SWAP" - }, - { - "prim": "CAR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DUP", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - }, - { - "prim": "DUP", - "args": [ - { - "int": "8" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "EXEC" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - }, - { - "prim": "DUP", - "args": [ - { - "int": "8" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "EXEC" - } - ], - [ - { - "prim": "DROP", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DUP", - "args": [ - { - "int": "8" - } - ] - }, - { - "prim": "FAILWITH" - } - ] - ] - } - ] - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DROP" - } - ] - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DROP" - }, - { - "prim": "SWAP" - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "CDR" - }, - { - "prim": "SWAP" - }, - { - "prim": "CAR" - }, - { - "prim": "CDR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - }, - { - "prim": "NIL", - "args": [ - { - "prim": "operation" - } - ] - }, - { - "prim": "PAIR" - } - ] - ] - } - ], - [ - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CDR" - }, - { - "prim": "SWAP" - }, - { - "prim": "PAIR" - }, - { - "prim": "SENDER" - }, - { - "prim": "SWAP" - }, - { - "prim": "UNPAIR" - }, - { - "prim": "ITER", - "args": [ - [ - { - "prim": "SWAP" - }, - { - "prim": "PAIR" - }, - { - "prim": "DUP" - }, - { - "prim": "CDR" - }, - { - "prim": "DUP", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "IF_LEFT", - "args": [ - [], - [] - ] - }, - { - "prim": "CAR" - }, - { - "prim": "COMPARE" - }, - { - "prim": "EQ" - }, - { - "prim": "IF", - "args": [ - [], - [ - { - "prim": "PUSH", - "args": [ - { - "prim": "string" - }, - { - "string": "FA2_NOT_OWNER" - } - ] - }, - { - "prim": "FAILWITH" - } - ] - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "CAR" - }, - { - "prim": "SWAP" - }, - { - "prim": "IF_LEFT", - "args": [ - [ - { - "prim": "SWAP" - }, - { - "prim": "PUSH", - "args": [ - { - "prim": "option", - "args": [ - { - "prim": "unit" - } - ] - }, - { - "prim": "Some", - "args": [ - { - "prim": "Unit" - } - ] - } - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DUP" - }, - { - "prim": "GET", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "UPDATE" - } - ], - [ - { - "prim": "DUP" - }, - { - "prim": "GET", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "NONE", - "args": [ - { - "prim": "unit" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "UPDATE" - } - ] - ] - } - ] - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DROP" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CDR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - }, - { - "prim": "NIL", - "args": [ - { - "prim": "operation" - } - ] - }, - { - "prim": "PAIR" - } - ] - ] - }, - { - "prim": "UNPAIR" - }, - { - "prim": "DUP", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "CDR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - }, - { - "prim": "SWAP" - }, - { - "prim": "PAIR" - } - ] - ] - } - ], - [ - { - "prim": "DIG", - "args": [ - { - "int": "5" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "EXEC" - }, - { - "prim": "DROP" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CDR" - }, - { - "prim": "SWAP" - }, - { - "prim": "IF_LEFT", - "args": [ - [ - { - "prim": "DIG", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "IF_LEFT", - "args": [ - [ - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "ITER", - "args": [ - [ - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - }, - { - "prim": "DUP", - "args": [ - { - "int": "5" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "EXEC" - } - ] - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DUP", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "ITER", - "args": [ - [ - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "GET" - }, - { - "prim": "IF_NONE", - "args": [ - [ - { - "prim": "DROP", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DUP", - "args": [ - { - "int": "5" - } - ] - }, - { - "prim": "FAILWITH" - } - ], - [ - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "SUB" - }, - { - "prim": "ISNAT" - }, - { - "prim": "IF_NONE", - "args": [ - [ - { - "prim": "DUP", - "args": [ - { - "int": "6" - } - ] - }, - { - "prim": "FAILWITH" - } - ], - [] - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "SOME" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "UPDATE" - } - ] - ] - } - ] - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DUP" - }, - { - "prim": "CDR" - }, - { - "prim": "SWAP" - }, - { - "prim": "CAR" - }, - { - "prim": "CDR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "SWAP" - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "NIL", - "args": [ - { - "prim": "operation" - } - ] - }, - { - "prim": "PAIR" - } - ], - [ - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DUP" - }, - { - "prim": "CAR" - }, - { - "prim": "DUP", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET" - }, - { - "prim": "IF_NONE", - "args": [ - [ - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DUP" - }, - { - "prim": "GET", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DUP", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "SOME" - }, - { - "prim": "SWAP" - }, - { - "prim": "UPDATE" - }, - { - "prim": "PAIR" - }, - { - "prim": "DUP", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "PUSH", - "args": [ - { - "prim": "option", - "args": [ - { - "prim": "nat" - } - ] - }, - { - "prim": "Some", - "args": [ - { - "int": "0" - } - ] - } - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "UPDATE" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "SWAP" - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - } - ], - [ - { - "prim": "PUSH", - "args": [ - { - "prim": "string" - }, - { - "string": "FA2_DUP_TOKEN_ID" - } - ] - }, - { - "prim": "FAILWITH" - } - ] - ] - }, - { - "prim": "NIL", - "args": [ - { - "prim": "operation" - } - ] - }, - { - "prim": "PAIR" - } - ] - ] - } - ], - [ - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "ITER", - "args": [ - [ - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - }, - { - "prim": "DUP", - "args": [ - { - "int": "5" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "EXEC" - } - ] - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DUP", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "ITER", - "args": [ - [ - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "GET" - }, - { - "prim": "IF_NONE", - "args": [ - [ - { - "prim": "DROP", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DUP", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "FAILWITH" - } - ], - [ - { - "prim": "SWAP" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "ADD" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "SWAP" - }, - { - "prim": "SOME" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "UPDATE" - } - ] - ] - } - ] - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "4" - } - ] - }, - { - "prim": "DROP" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DUP" - }, - { - "prim": "CDR" - }, - { - "prim": "SWAP" - }, - { - "prim": "CAR" - }, - { - "prim": "CDR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - }, - { - "prim": "DUP" - }, - { - "prim": "DUG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "GET", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "PAIR" - }, - { - "prim": "SWAP" - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "NIL", - "args": [ - { - "prim": "operation" - } - ] - }, - { - "prim": "PAIR" - } - ] - ] - }, - { - "prim": "UNPAIR" - }, - { - "prim": "DUP", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "CDR" - }, - { - "prim": "DIG", - "args": [ - { - "int": "2" - } - ] - }, - { - "prim": "DIG", - "args": [ - { - "int": "3" - } - ] - }, - { - "prim": "CAR" - }, - { - "prim": "CAR" - }, - { - "prim": "PAIR" - }, - { - "prim": "PAIR" - }, - { - "prim": "SWAP" - }, - { - "prim": "PAIR" - } - ] - ] - } - ] - ] - } -] \ No newline at end of file diff --git a/src/services/contracts/token/assets/fa2_single_asset_delegated.ts b/src/services/contracts/token/assets/fa2_single_asset_delegated.ts new file mode 100644 index 00000000..98f4d8f7 --- /dev/null +++ b/src/services/contracts/token/assets/fa2_single_asset_delegated.ts @@ -0,0 +1,938 @@ +export default `{ parameter + (or (or (or (or %admin (bool %pause) (address %set_admin)) + (or %assets + (or (pair %balance_of + (list %requests (pair (address %owner) (nat %token_id))) + (contract %callback + (list (pair (pair %request (address %owner) (nat %token_id)) (nat %balance))))) + (list %transfer + (pair (address %from_) (list %txs (pair (address %to_) (nat %token_id) (nat %amount)))))) + (list %update_operators + (or (pair %add_operator (address %owner) (address %operator) (nat %token_id)) + (pair %remove_operator (address %owner) (address %operator) (nat %token_id)))))) + (or (option %set_delegate address) (address %set_minter))) + (or %tokens + (list %burn_tokens (pair (address %owner) (nat %amount))) + (list %mint_tokens (pair (address %owner) (nat %amount))))) ; +storage + (pair (pair (pair %admin (address %admin) (bool %paused)) + (pair %assets + (pair (pair (big_map %delegates address address) (big_map %ledger address nat)) + (address %minter) + (big_map %operators (pair address address nat) unit)) + (pair (big_map %token_metadata nat (pair (nat %token_id) (map %token_info string bytes))) + (nat %total_supply)) + (big_map %voting_power_history + (pair address nat) + (pair (nat %amount) (nat %from_block))) + (big_map %voting_power_history_sizes address nat))) + (big_map %metadata string bytes)) ; +code { PUSH string "FA2_TOKEN_UNDEFINED" ; + PUSH string "FA2_INSUFFICIENT_BALANCE" ; + LAMBDA + int + nat + { ISNAT ; IF_NONE { PUSH string "NOT_A_NAT" ; FAILWITH } {} } ; + LAMBDA + (pair (lambda int nat) + (pair (pair address int) + (pair (pair (big_map address address) (big_map address nat)) + address + (big_map (pair address address nat) unit)) + (pair (big_map nat (pair nat (map string bytes))) nat) + (big_map (pair address nat) (pair nat nat)) + (big_map address nat))) + (pair (pair (pair (big_map address address) (big_map address nat)) + address + (big_map (pair address address nat) unit)) + (pair (big_map nat (pair nat (map string bytes))) nat) + (big_map (pair address nat) (pair nat nat)) + (big_map address nat)) + { UNPAIR ; + SWAP ; + UNPAIR ; + UNPAIR ; + DUP 3 ; + CDR ; + CDR ; + CDR ; + DUP 2 ; + GET ; + IF_NONE + { SWAP ; DIG 3 ; SWAP ; EXEC ; PUSH nat 0 } + { DUP 4 ; + CDR ; + CDR ; + CAR ; + PUSH int 1 ; + DUP 3 ; + SUB ; + DUP 7 ; + SWAP ; + EXEC ; + DUP 4 ; + PAIR ; + GET ; + IF_NONE { PUSH string "option is None" ; FAILWITH } {} ; + DIG 3 ; + DUP 2 ; + CAR ; + ADD ; + DUP 6 ; + SWAP ; + EXEC ; + LEVEL ; + DIG 2 ; + CDR ; + COMPARE ; + EQ ; + IF { PUSH int 1 ; DIG 2 ; SUB ; DIG 4 ; SWAP ; EXEC } + { DIG 4 ; DROP ; SWAP } } ; + LEVEL ; + DIG 2 ; + PAIR ; + DUP 4 ; + CDR ; + CDR ; + CDR ; + PUSH nat 1 ; + DUP 4 ; + ADD ; + SOME ; + DUP 5 ; + UPDATE ; + DUP 5 ; + CDR ; + CDR ; + CAR ; + PAIR ; + DUP 5 ; + CDR ; + CAR ; + PAIR ; + DUP 5 ; + CAR ; + PAIR ; + DUP ; + CDR ; + CDR ; + CDR ; + DIG 5 ; + CDR ; + CDR ; + CAR ; + DIG 3 ; + SOME ; + DIG 4 ; + DIG 5 ; + PAIR ; + UPDATE ; + PAIR ; + DUP 2 ; + CDR ; + CAR ; + PAIR ; + SWAP ; + CAR ; + PAIR } ; + DUP 2 ; + APPLY ; + SWAP ; + DROP ; + LAMBDA + (pair address (big_map address nat)) + nat + { UNPAIR ; GET ; IF_NONE { PUSH nat 0 } {} } ; + LAMBDA + (pair (pair (lambda (pair address (big_map address nat)) nat) + (lambda + (pair (pair address int) + (pair (pair (big_map address address) (big_map address nat)) + address + (big_map (pair address address nat) unit)) + (pair (big_map nat (pair nat (map string bytes))) nat) + (big_map (pair address nat) (pair nat nat)) + (big_map address nat)) + (pair (pair (pair (big_map address address) (big_map address nat)) + address + (big_map (pair address address nat) unit)) + (pair (big_map nat (pair nat (map string bytes))) nat) + (big_map (pair address nat) (pair nat nat)) + (big_map address nat))) + string) + (pair (pair address int) + (pair (pair (big_map address address) (big_map address nat)) + address + (big_map (pair address address nat) unit)) + (pair (big_map nat (pair nat (map string bytes))) nat) + (big_map (pair address nat) (pair nat nat)) + (big_map address nat))) + (pair (pair (pair (big_map address address) (big_map address nat)) + address + (big_map (pair address address nat) unit)) + (pair (big_map nat (pair nat (map string bytes))) nat) + (big_map (pair address nat) (pair nat nat)) + (big_map address nat)) + { UNPAIR ; + UNPAIR 3 ; + DIG 3 ; + UNPAIR ; + UNPAIR ; + DUP 3 ; + CAR ; + CAR ; + CDR ; + DUP 2 ; + PAIR ; + DIG 4 ; + SWAP ; + EXEC ; + DUP 3 ; + ADD ; + ISNAT ; + IF_NONE + { DIG 4 ; FAILWITH } + { DIG 5 ; + DROP ; + PUSH nat 0 ; + DUP 2 ; + COMPARE ; + EQ ; + IF { DROP ; DUP 3 ; CAR ; CAR ; CDR ; DUP 2 ; NONE nat ; SWAP ; UPDATE } + { DUP 4 ; CAR ; CAR ; CDR ; SWAP ; SOME ; DUP 3 ; UPDATE } } ; + PUSH int 0 ; + DUP 4 ; + COMPARE ; + EQ ; + IF { SWAP ; DIG 2 ; DIG 4 ; DROP 3 ; SWAP } + { DUP 4 ; + DIG 3 ; + DIG 4 ; + CAR ; + CAR ; + CAR ; + DUP 5 ; + GET ; + IF_NONE { DIG 3 } { DIG 4 ; DROP } ; + PAIR ; + PAIR ; + DIG 2 ; + SWAP ; + EXEC } ; + DUP ; + CDR ; + DUP 2 ; + CAR ; + CDR ; + DIG 3 ; + DIG 3 ; + CAR ; + CAR ; + CAR ; + PAIR ; + PAIR ; + PAIR } ; + DUP 4 ; + DUP 4 ; + DUP 4 ; + PAIR 3 ; + APPLY ; + LAMBDA + (pair (pair (lambda + (pair (pair address int) + (pair (pair (big_map address address) (big_map address nat)) + address + (big_map (pair address address nat) unit)) + (pair (big_map nat (pair nat (map string bytes))) nat) + (big_map (pair address nat) (pair nat nat)) + (big_map address nat)) + (pair (pair (pair (big_map address address) (big_map address nat)) + address + (big_map (pair address address nat) unit)) + (pair (big_map nat (pair nat (map string bytes))) nat) + (big_map (pair address nat) (pair nat nat)) + (big_map address nat))) + string) + (pair (pair (list (pair (option address) (list (pair (option address) nat nat)))) + (lambda (pair (pair address address) nat (big_map (pair address address nat) unit)) unit)) + (pair (pair (big_map address address) (big_map address nat)) + address + (big_map (pair address address nat) unit)) + (pair (big_map nat (pair nat (map string bytes))) nat) + (big_map (pair address nat) (pair nat nat)) + (big_map address nat))) + (pair (list operation) + (pair (pair (big_map address address) (big_map address nat)) + address + (big_map (pair address address nat) unit)) + (pair (big_map nat (pair nat (map string bytes))) nat) + (big_map (pair address nat) (pair nat nat)) + (big_map address nat)) + { UNPAIR ; + UNPAIR ; + DIG 2 ; + UNPAIR ; + UNPAIR ; + DIG 2 ; + SWAP ; + ITER { SWAP ; + SENDER ; + SWAP ; + DUP 3 ; + CDR ; + ITER { SWAP ; + PUSH nat 0 ; + DUP 3 ; + GET 3 ; + COMPARE ; + NEQ ; + IF { DROP 2 ; DUP 5 ; FAILWITH } + { DUP 4 ; + CAR ; + IF_NONE + {} + { DUP 2 ; + CAR ; + CDR ; + CDR ; + DUP 4 ; + GET 3 ; + PAIR ; + DUP 5 ; + DUP 3 ; + PAIR ; + PAIR ; + DUP 7 ; + SWAP ; + EXEC ; + DROP ; + SWAP ; + DUP 3 ; + GET 4 ; + NEG ; + DIG 2 ; + PAIR ; + PAIR ; + DUP 6 ; + SWAP ; + EXEC } ; + DUP 2 ; + CAR ; + IF_NONE + { SWAP ; DROP } + { SWAP ; DIG 2 ; GET 4 ; INT ; DIG 2 ; PAIR ; PAIR ; DUP 5 ; SWAP ; EXEC } } } ; + SWAP ; + DIG 2 ; + DROP 2 } ; + SWAP ; + DIG 2 ; + DIG 3 ; + DROP 3 ; + NIL operation ; + PAIR } ; + DUP 6 ; + DUP 3 ; + PAIR ; + APPLY ; + SWAP ; + DROP ; + LAMBDA + (list (pair address nat)) + nat + { PUSH nat 0 ; SWAP ; ITER { CDR ; ADD } } ; + LAMBDA + (pair address bool) + unit + { CAR ; + SENDER ; + COMPARE ; + NEQ ; + IF { PUSH string "NOT_AN_ADMIN" ; FAILWITH } { UNIT } } ; + LAMBDA + (pair address bool) + unit + { CDR ; IF { PUSH string "PAUSED" ; FAILWITH } { UNIT } } ; + DIG 8 ; + UNPAIR ; + PUSH mutez 0 ; + AMOUNT ; + COMPARE ; + GT ; + IF { PUSH string "AMOUNT_NOT_ZERO" ; FAILWITH } {} ; + IF_LEFT + { DIG 4 ; + DIG 8 ; + DROP 2 ; + IF_LEFT + { DIG 6 ; + DROP ; + IF_LEFT + { DIG 2 ; + DIG 4 ; + DIG 5 ; + DIG 6 ; + DROP 4 ; + DUP 2 ; + CAR ; + CAR ; + DIG 3 ; + SWAP ; + EXEC ; + DROP ; + DUP 2 ; + CAR ; + CAR ; + SWAP ; + IF_LEFT { SWAP ; CAR } { SWAP ; CDR ; SWAP } ; + PAIR ; + NIL operation ; + DUP 3 ; + CDR ; + DIG 3 ; + CAR ; + CDR ; + DIG 3 } + { DIG 3 ; + DROP ; + DUP 2 ; + CAR ; + CAR ; + DIG 3 ; + SWAP ; + EXEC ; + DROP ; + DUP 2 ; + CAR ; + CDR ; + SWAP ; + IF_LEFT + { IF_LEFT + { DIG 3 ; + DROP ; + DUP ; + CAR ; + MAP { PUSH nat 0 ; + DUP 2 ; + CDR ; + COMPARE ; + NEQ ; + IF { DROP ; DUP 5 ; FAILWITH } + { DUP 3 ; + CAR ; + CAR ; + CDR ; + DUP 2 ; + CAR ; + PAIR ; + DUP 6 ; + SWAP ; + EXEC ; + SWAP ; + PAIR } } ; + DIG 4 ; + DIG 5 ; + DROP 2 ; + SWAP ; + CDR ; + PUSH mutez 0 ; + DIG 2 ; + TRANSFER_TOKENS ; + SWAP ; + NIL operation ; + DIG 2 ; + CONS ; + PAIR } + { DIG 4 ; + DIG 5 ; + DROP 2 ; + MAP { DUP ; + CDR ; + MAP { DUP ; GET 4 ; DUP 2 ; GET 3 ; DIG 2 ; CAR ; SOME ; PAIR 3 } ; + SWAP ; + CAR ; + SOME ; + PAIR } ; + SWAP ; + LAMBDA + (pair (pair address address) nat (big_map (pair address address nat) unit)) + unit + { UNPAIR ; + UNPAIR ; + DIG 2 ; + UNPAIR ; + DUP 4 ; + DUP 4 ; + COMPARE ; + EQ ; + IF { DROP 4 ; UNIT } + { DIG 3 ; + PAIR ; + DIG 2 ; + PAIR ; + MEM ; + IF { UNIT } { PUSH string "FA2_NOT_OPERATOR" ; FAILWITH } } } ; + DIG 2 ; + PAIR ; + PAIR ; + DIG 2 ; + SWAP ; + EXEC } } + { DIG 3 ; + DIG 4 ; + DIG 5 ; + DROP 3 ; + SENDER ; + DUP 3 ; + CAR ; + CDR ; + CDR ; + DIG 2 ; + ITER { SWAP ; + DUP 3 ; + DUP 3 ; + IF_LEFT {} {} ; + CAR ; + COMPARE ; + EQ ; + IF {} { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ; + SWAP ; + IF_LEFT + { SWAP ; + UNIT ; + SOME ; + DUP 3 ; + GET 4 ; + DUP 4 ; + GET 3 ; + PAIR ; + DIG 3 ; + CAR ; + PAIR ; + UPDATE } + { SWAP ; + DUP 2 ; + GET 4 ; + DUP 3 ; + GET 3 ; + PAIR ; + DIG 2 ; + CAR ; + PAIR ; + NONE unit ; + SWAP ; + UPDATE } } ; + SWAP ; + DROP ; + DUP 2 ; + CDR ; + SWAP ; + DUP 3 ; + CAR ; + CDR ; + CAR ; + PAIR ; + DIG 2 ; + CAR ; + CAR ; + PAIR ; + PAIR ; + NIL operation ; + PAIR } ; + UNPAIR ; + DUP 3 ; + CDR ; + DIG 2 ; + DIG 3 ; + CAR ; + CAR } ; + PAIR ; + PAIR ; + SWAP } + { DIG 4 ; + DIG 7 ; + DROP 2 ; + IF_LEFT + { DIG 3 ; + DROP ; + DUP 2 ; + CAR ; + CAR ; + DIG 3 ; + SWAP ; + EXEC ; + DROP ; + DUP 2 ; + CAR ; + CDR ; + DUP ; + CAR ; + CAR ; + CDR ; + SENDER ; + PAIR ; + DIG 4 ; + SWAP ; + EXEC ; + DUP 3 ; + IF_NONE { SENDER } {} ; + DUP 3 ; + CAR ; + CAR ; + CAR ; + SENDER ; + GET ; + IF_NONE { SENDER } {} ; + PUSH nat 0 ; + DUP 4 ; + COMPARE ; + EQ ; + DUP 2 ; + DUP 4 ; + COMPARE ; + EQ ; + OR ; + IF { SWAP ; DIG 2 ; DIG 6 ; DROP 4 ; DUP } + { DUP 4 ; + DUP 4 ; + NEG ; + DIG 2 ; + PAIR ; + PAIR ; + DUP 7 ; + SWAP ; + EXEC ; + DIG 2 ; + INT ; + DIG 2 ; + PAIR ; + PAIR ; + DIG 4 ; + SWAP ; + EXEC } ; + DUP ; + CDR ; + DUP 2 ; + CAR ; + CDR ; + DIG 2 ; + CAR ; + CAR ; + CDR ; + DIG 3 ; + CAR ; + CAR ; + CAR ; + DIG 4 ; + SENDER ; + UPDATE ; + PAIR ; + PAIR ; + PAIR ; + DUP 2 ; + CDR ; + SWAP ; + DIG 2 ; + CAR ; + CAR } + { DIG 2 ; + DIG 4 ; + DIG 5 ; + DROP 3 ; + DUP 2 ; + CAR ; + CAR ; + DIG 3 ; + SWAP ; + EXEC ; + DROP ; + DUP 2 ; + CDR ; + DUP 3 ; + CAR ; + CDR ; + DUP ; + CDR ; + DUP 2 ; + CAR ; + CDR ; + CDR ; + DIG 4 ; + PAIR ; + DIG 2 ; + CAR ; + CAR ; + PAIR ; + PAIR ; + DIG 2 ; + CAR ; + CAR } ; + PAIR ; + PAIR ; + NIL operation } } + { DIG 3 ; + DIG 6 ; + DIG 7 ; + DIG 9 ; + DROP 4 ; + DUP 2 ; + CAR ; + CAR ; + DIG 3 ; + SWAP ; + EXEC ; + DROP ; + DUP 2 ; + CAR ; + CDR ; + CAR ; + CDR ; + CAR ; + SENDER ; + COMPARE ; + NEQ ; + IF { PUSH string "NOT_MINTER" ; FAILWITH } {} ; + DUP 2 ; + CAR ; + CDR ; + SWAP ; + IF_LEFT + { DUP ; + MAP { NIL (pair (option address) nat nat) ; + DUP 2 ; + CDR ; + PUSH nat 0 ; + NONE address ; + PAIR 3 ; + CONS ; + SWAP ; + CAR ; + SOME ; + PAIR } ; + DUP 3 ; + LAMBDA + (pair (pair address address) nat (big_map (pair address address nat) unit)) + unit + { DROP ; UNIT } ; + DIG 2 ; + PAIR ; + PAIR ; + DIG 5 ; + SWAP ; + EXEC ; + UNPAIR ; + DIG 2 ; + DIG 5 ; + SWAP ; + EXEC ; + DIG 3 ; + CDR ; + CAR ; + CDR ; + SUB ; + ISNAT ; + IF_NONE { DIG 3 ; FAILWITH } { DIG 4 ; DROP } ; + DUP 3 ; + CDR ; + CDR ; + SWAP ; + DUP 4 ; + CDR ; + CAR ; + CAR ; + PAIR ; + PAIR ; + DIG 2 ; + CAR } + { DIG 5 ; + DROP ; + DUP ; + MAP { DUP ; CDR ; PUSH nat 0 ; DIG 2 ; CAR ; SOME ; PAIR 3 } ; + DUP 3 ; + LAMBDA + (pair (pair address address) nat (big_map (pair address address nat) unit)) + unit + { DROP ; UNIT } ; + NIL (pair (option address) (list (pair (option address) nat nat))) ; + DIG 3 ; + NONE address ; + PAIR ; + CONS ; + PAIR ; + PAIR ; + DIG 5 ; + SWAP ; + EXEC ; + UNPAIR ; + DIG 2 ; + DIG 5 ; + SWAP ; + EXEC ; + DUP 3 ; + CDR ; + CDR ; + SWAP ; + DIG 4 ; + CDR ; + CAR ; + CDR ; + ADD ; + DUP 4 ; + CDR ; + CAR ; + CAR ; + PAIR ; + PAIR ; + DIG 2 ; + CAR } ; + PAIR ; + SWAP ; + DUP 3 ; + CDR ; + DIG 2 ; + DIG 3 ; + CAR ; + CAR ; + PAIR ; + PAIR ; + SWAP } ; + PAIR } ; +view "voting_power" + (pair (address %addr) (nat %block_level)) + nat + { LAMBDA + int + nat + { ISNAT ; IF_NONE { PUSH string "NOT_A_NAT" ; FAILWITH } {} } ; + SWAP ; + UNPAIR ; + SWAP ; + CAR ; + CDR ; + SWAP ; + UNPAIR ; + DUP 3 ; + CDR ; + CDR ; + CDR ; + DUP 2 ; + GET ; + IF_NONE { PUSH nat 0 } {} ; + PUSH nat 0 ; + DUP 2 ; + COMPARE ; + EQ ; + IF { DROP 5 ; PUSH nat 0 } + { DUP 4 ; + PUSH int 1 ; + DUP 3 ; + SUB ; + DUP 7 ; + SWAP ; + EXEC ; + DUP 4 ; + DIG 2 ; + CDR ; + CDR ; + CAR ; + DUG 2 ; + PAIR ; + GET ; + IF_NONE { PUSH string "option is None" ; FAILWITH } {} ; + DUP 4 ; + DUP 2 ; + CDR ; + COMPARE ; + LE ; + IF { SWAP ; DIG 2 ; DIG 3 ; DIG 4 ; DIG 5 ; DROP 5 ; CAR } + { DROP ; + DUP 4 ; + CDR ; + CDR ; + CAR ; + PUSH nat 0 ; + DUP 4 ; + PAIR ; + GET ; + IF_NONE { PUSH string "option is None" ; FAILWITH } {} ; + DUP 4 ; + SWAP ; + CDR ; + COMPARE ; + GT ; + IF { DROP 5 ; PUSH nat 0 } + { PUSH int 1 ; + SWAP ; + SUB ; + DUP 5 ; + SWAP ; + EXEC ; + PUSH nat 0 ; + PAIR ; + LEFT nat ; + LOOP_LEFT + { UNPAIR ; + DUP 2 ; + DUP 2 ; + COMPARE ; + EQ ; + IF { SWAP ; + DROP ; + DUP 4 ; + CDR ; + CDR ; + CAR ; + SWAP ; + DUP 3 ; + PAIR ; + GET ; + IF_NONE { PUSH string "option is None" ; FAILWITH } {} ; + CAR ; + RIGHT (pair nat nat) } + { PUSH int 2 ; + DUP 2 ; + DUP 4 ; + SUB ; + DUP 8 ; + SWAP ; + EXEC ; + EDIV ; + IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ; + CAR ; + DUP 3 ; + SUB ; + DUP 7 ; + SWAP ; + EXEC ; + DUP 6 ; + CDR ; + CDR ; + CAR ; + DUP 2 ; + DUP 6 ; + PAIR ; + GET ; + IF_NONE { PUSH string "option is None" ; FAILWITH } {} ; + DUP 6 ; + DUP 2 ; + CDR ; + COMPARE ; + EQ ; + IF { SWAP ; DIG 2 ; DIG 3 ; DROP 3 ; CAR ; RIGHT (pair nat nat) } + { DUP 6 ; + SWAP ; + CDR ; + COMPARE ; + GT ; + IF { DIG 2 ; DROP ; PUSH int 1 ; SWAP ; SUB ; DUP 6 ; SWAP ; EXEC } + { SWAP ; DROP ; SWAP } ; + SWAP ; + PAIR ; + LEFT nat } } } ; + SWAP ; + DIG 2 ; + DIG 3 ; + DIG 4 ; + DROP 4 } } } } ; +view "total_supply" unit nat { CDR ; CAR ; CDR ; CDR ; CAR ; CDR } } + +` diff --git a/src/services/contracts/token/hooks/useToken.ts b/src/services/contracts/token/hooks/useToken.ts index 8c38d3c8..66526503 100644 --- a/src/services/contracts/token/hooks/useToken.ts +++ b/src/services/contracts/token/hooks/useToken.ts @@ -7,7 +7,8 @@ import { deployMetadataCarrier } from "services/contracts/metadataCarrier/deploy import { useTezos } from "services/beacon/hooks/useTezos" import mixpanel from "mixpanel-browser" import { TokenContractParams } from "modules/creator/deployment/state/types" -import { deployTokenContract } from ".." +import { getCurrentBlock } from "services/utils/utils" +import { deployTokenContract } from "services/contracts/token" export const useTokenOriginate = (tokenData: TokenContractParams) => { const queryClient = useQueryClient() @@ -33,10 +34,13 @@ export const useTokenOriginate = (tokenData: TokenContractParams) => { tokenSettings } + const currentBlock = await getCurrentBlock(network) + const contract = await deployTokenContract({ ...mutateTokenData, tezos: tezosToolkit, - account + account, + currentBlock }) if (!contract) { diff --git a/src/services/contracts/token/index.ts b/src/services/contracts/token/index.ts index 89545d59..b235a152 100644 --- a/src/services/contracts/token/index.ts +++ b/src/services/contracts/token/index.ts @@ -2,7 +2,7 @@ import { MichelsonMap, TezosToolkit } from "@taquito/taquito" import BigNumber from "bignumber.js" import { TokenContractParams } from "modules/creator/deployment/state/types" import { formatUnits } from "../utils" -import fa2MultiAsset from "./assets/MultiAsset.json" +import fa2_single_asset_delegated from "./assets/fa2_single_asset_delegated" interface Tezos { tezos: TezosToolkit @@ -13,8 +13,9 @@ export const deployTokenContract = async ({ tokenSettings, tokenDistribution, tezos, - account -}: TokenContractParams & Tezos) => { + account, + currentBlock +}: TokenContractParams & Tezos & any) => { try { const metadata = MichelsonMap.fromLiteral({ "": Buffer.from("tezos-storage:contents", "ascii").toString("hex"), @@ -23,7 +24,7 @@ export const deployTokenContract = async ({ version: "v0.0.1", name: tokenSettings.name, description: tokenSettings.description, - authors: ["FA2 Bakery"], + authors: ["Tezos Homebase"], source: { tools: ["Ligo"] }, @@ -35,14 +36,17 @@ export const deployTokenContract = async ({ const storage = { admin: { admin: account, - pending_admin: null, paused: false }, assets: { - token_total_supply: MichelsonMap.fromLiteral({}), - ledger: MichelsonMap.fromLiteral({}), - operators: MichelsonMap.fromLiteral({}), - token_metadata: MichelsonMap.fromLiteral({}) + ledger: new MichelsonMap(), + voting_power_history: new MichelsonMap(), + voting_power_history_sizes: new MichelsonMap(), + delegates: new MichelsonMap(), + operators: new MichelsonMap(), + token_metadata: new MichelsonMap(), + total_supply: 0, + minter: account }, metadata: metadata } @@ -52,14 +56,19 @@ export const deployTokenContract = async ({ tokenSettings.decimals && formatUnits(new BigNumber(tokenSettings.totalSupply), tokenSettings.decimals) - totalSupply && storage.assets.token_total_supply.set(index, totalSupply.toString()) - tokenDistribution.holders.map((holder, holderIndex) => { - holder.amount && - tokenSettings.decimals && + storage.assets.total_supply = totalSupply.toString() + tokenDistribution.holders.map((holder: { amount: BigNumber.Value; walletAddress: any }) => { + if (holder.amount && tokenSettings.decimals) { storage.assets.ledger.set( - [holder.walletAddress, index], + holder.walletAddress, formatUnits(new BigNumber(holder.amount), tokenSettings.decimals).toString() ) + storage.assets.voting_power_history.set([holder.walletAddress, 0], { + from_block: currentBlock, + amount: formatUnits(new BigNumber(holder.amount), tokenSettings.decimals).toString() + }) + storage.assets.voting_power_history_sizes.set(holder.walletAddress, 1) + } }) storage.assets.token_metadata.set(index, { token_id: index, @@ -73,7 +82,7 @@ export const deployTokenContract = async ({ }) }) const t = tezos.wallet.originate({ - code: fa2MultiAsset, + code: fa2_single_asset_delegated, storage }) const c = await t.send()