Michelson: allow CREATE_CONTRACT to set the spendable flag
This commit is contained in:
parent
98424be5be
commit
110e0206e7
@ -459,8 +459,8 @@ let rec interp
|
|||||||
let contract = Contract.default_contract key in
|
let contract = Contract.default_contract key in
|
||||||
logged_return (Item ((Unit_t, Unit_t, contract), rest), qta - 1, ctxt)
|
logged_return (Item ((Unit_t, Unit_t, contract), rest), qta - 1, ctxt)
|
||||||
| Create_contract (g, p, r),
|
| Create_contract (g, p, r),
|
||||||
Item (manager, Item (delegate, Item (delegatable, Item (credit,
|
Item (manager, Item (delegate, Item (spendable, Item (delegatable, Item (credit,
|
||||||
Item (Lam (_, code), Item (init, rest)))))) ->
|
Item (Lam (_, code), Item (init, rest))))))) ->
|
||||||
let code, storage =
|
let code, storage =
|
||||||
{ code; arg_type = unparse_ty p; ret_type = unparse_ty r; storage_type = unparse_ty g },
|
{ code; arg_type = unparse_ty p; ret_type = unparse_ty r; storage_type = unparse_ty g },
|
||||||
{ storage = unparse_data g init; storage_type = unparse_ty g } in
|
{ storage = unparse_data g init; storage_type = unparse_ty g } in
|
||||||
@ -470,7 +470,7 @@ let rec interp
|
|||||||
origination
|
origination
|
||||||
~manager ~delegate ~balance
|
~manager ~delegate ~balance
|
||||||
~script:({ code ; storage }, (dummy_code_fee, dummy_storage_fee))
|
~script:({ code ; storage }, (dummy_code_fee, dummy_storage_fee))
|
||||||
~spendable:true ~delegatable
|
~spendable ~delegatable
|
||||||
>>=? fun (ctxt, contract, origination) ->
|
>>=? fun (ctxt, contract, origination) ->
|
||||||
logged_return ~origination (Item ((p, r, contract), rest), qta - 1, ctxt)
|
logged_return ~origination (Item ((p, r, contract), rest), qta - 1, ctxt)
|
||||||
| Balance, rest ->
|
| Balance, rest ->
|
||||||
|
@ -1273,12 +1273,13 @@ and parse_instr
|
|||||||
(Key_t, Item_t
|
(Key_t, Item_t
|
||||||
(Option_t Key_t, Item_t
|
(Option_t Key_t, Item_t
|
||||||
(Bool_t, Item_t
|
(Bool_t, Item_t
|
||||||
(Tez_t, Item_t
|
(Bool_t, Item_t
|
||||||
(Lambda_t (Pair_t (Pair_t (Tez_t, p), gp),
|
(Tez_t, Item_t
|
||||||
Pair_t (r, gr)), Item_t
|
(Lambda_t (Pair_t (Pair_t (Tez_t, p), gp),
|
||||||
(ginit, rest)))))) ->
|
Pair_t (r, gr)), Item_t
|
||||||
check_item_ty gp gr loc "CREATE_CONTRACT" 5 6 >>=? fun (Eq _) ->
|
(ginit, rest))))))) ->
|
||||||
check_item_ty ginit gp loc "CREATE_CONTRACT" 6 6 >>=? fun (Eq _) ->
|
check_item_ty gp gr loc "CREATE_CONTRACT" 5 7 >>=? fun (Eq _) ->
|
||||||
|
check_item_ty ginit gp loc "CREATE_CONTRACT" 6 7 >>=? fun (Eq _) ->
|
||||||
return (typed loc (Create_contract (gp, p, r),
|
return (typed loc (Create_contract (gp, p, r),
|
||||||
Item_t (Contract_t (p, r), rest)))
|
Item_t (Contract_t (p, r), rest)))
|
||||||
| Prim (loc, "NOW", []),
|
| Prim (loc, "NOW", []),
|
||||||
@ -1352,7 +1353,7 @@ and parse_instr
|
|||||||
fail (Bad_stack (loc, name, 3, stack))
|
fail (Bad_stack (loc, name, 3, stack))
|
||||||
| Prim (loc, "CREATE_CONTRACT", []),
|
| Prim (loc, "CREATE_CONTRACT", []),
|
||||||
stack ->
|
stack ->
|
||||||
fail (Bad_stack (loc, "CREATE_CONTRACT", 6, stack))
|
fail (Bad_stack (loc, "CREATE_CONTRACT", 7, stack))
|
||||||
| Prim (loc, "CREATE_ACCOUNT", []),
|
| Prim (loc, "CREATE_ACCOUNT", []),
|
||||||
stack ->
|
stack ->
|
||||||
fail (Bad_stack (loc, "CREATE_ACCOUNT", 4, stack))
|
fail (Bad_stack (loc, "CREATE_ACCOUNT", 4, stack))
|
||||||
|
@ -269,8 +269,8 @@ and ('bef, 'aft) instr =
|
|||||||
(unit, unit) typed_contract * 'rest) instr
|
(unit, unit) typed_contract * 'rest) instr
|
||||||
| Default_account : (public_key_hash * 'rest, (unit, unit) typed_contract * 'rest) instr
|
| Default_account : (public_key_hash * 'rest, (unit, unit) typed_contract * 'rest) instr
|
||||||
| Create_contract : 'g ty * 'p ty * 'r ty ->
|
| Create_contract : 'g ty * 'p ty * 'r ty ->
|
||||||
(public_key_hash * (public_key_hash option * (bool * (Tez.t *
|
(public_key_hash * (public_key_hash option * (bool * (bool * (Tez.t *
|
||||||
(((Tez.t * 'p) * 'g, 'r * 'g) lambda * ('g * 'rest))))),
|
(((Tez.t * 'p) * 'g, 'r * 'g) lambda * ('g * 'rest)))))),
|
||||||
('p, 'r) typed_contract * 'rest) instr
|
('p, 'r) typed_contract * 'rest) instr
|
||||||
| Now :
|
| Now :
|
||||||
('rest, Timestamp.t * 'rest) instr
|
('rest, Timestamp.t * 'rest) instr
|
||||||
|
Loading…
Reference in New Issue
Block a user