Add a -counter argument to 'transfer AMOUNT from SRC to DST'
Useful when you have issued a transaction on a node, and the node seems to be disconnected. You can use this option to issue the same transaction on another node with the same counter.
This commit is contained in:
parent
c87b6c533d
commit
a10932b577
@ -224,6 +224,19 @@ let storage_limit_arg =
|
|||||||
return v
|
return v
|
||||||
with _ -> failwith "invalid storage limit (must be a positive number of bytes)"))
|
with _ -> failwith "invalid storage limit (must be a positive number of bytes)"))
|
||||||
|
|
||||||
|
let counter_arg =
|
||||||
|
arg
|
||||||
|
~long:"counter"
|
||||||
|
~short:'C'
|
||||||
|
~placeholder:"counter"
|
||||||
|
~doc:"Set the counter to be used by the transaction"
|
||||||
|
(parameter (fun _ s ->
|
||||||
|
try
|
||||||
|
let v = Z.of_string s in
|
||||||
|
assert Compare.Z.(v >= Z.zero) ;
|
||||||
|
return v
|
||||||
|
with _ -> failwith "invalid counter (must be a positive number of bytes)"))
|
||||||
|
|
||||||
let max_priority_arg =
|
let max_priority_arg =
|
||||||
arg
|
arg
|
||||||
~long:"max-priority"
|
~long:"max-priority"
|
||||||
|
@ -30,6 +30,7 @@ val tez_sym: string
|
|||||||
|
|
||||||
val init_arg: (string, Proto_alpha.full) Clic.arg
|
val init_arg: (string, Proto_alpha.full) Clic.arg
|
||||||
val fee_arg: (Tez.t, Proto_alpha.full) Clic.arg
|
val fee_arg: (Tez.t, Proto_alpha.full) Clic.arg
|
||||||
|
val counter_arg: (Z.t option, Proto_alpha.full) Clic.arg
|
||||||
val gas_limit_arg: (Z.t option, Proto_alpha.full) Clic.arg
|
val gas_limit_arg: (Z.t option, Proto_alpha.full) Clic.arg
|
||||||
val storage_limit_arg: (Z.t option, Proto_alpha.full) Clic.arg
|
val storage_limit_arg: (Z.t option, Proto_alpha.full) Clic.arg
|
||||||
val arg_arg: (string option, Proto_alpha.full) Clic.arg
|
val arg_arg: (string option, Proto_alpha.full) Clic.arg
|
||||||
|
@ -50,7 +50,7 @@ let transfer (cctxt : #Proto_alpha.full)
|
|||||||
~chain ~block ?confirmations
|
~chain ~block ?confirmations
|
||||||
?dry_run
|
?dry_run
|
||||||
?branch ~source ~src_pk ~src_sk ~destination ?arg
|
?branch ~source ~src_pk ~src_sk ~destination ?arg
|
||||||
~amount ~fee ?gas_limit ?storage_limit () =
|
~amount ~fee ?gas_limit ?storage_limit ?counter () =
|
||||||
begin match arg with
|
begin match arg with
|
||||||
| Some arg ->
|
| Some arg ->
|
||||||
parse_expression arg >>=? fun { expanded = arg } ->
|
parse_expression arg >>=? fun { expanded = arg } ->
|
||||||
@ -62,7 +62,7 @@ let transfer (cctxt : #Proto_alpha.full)
|
|||||||
Injection.inject_manager_operation
|
Injection.inject_manager_operation
|
||||||
cctxt ~chain ~block ?confirmations
|
cctxt ~chain ~block ?confirmations
|
||||||
?dry_run
|
?dry_run
|
||||||
?branch ~source ~fee ?gas_limit ?storage_limit
|
?branch ~source ~fee ?gas_limit ?storage_limit ?counter
|
||||||
~src_pk ~src_sk contents >>=? fun (_oph, _op, result as res) ->
|
~src_pk ~src_sk contents >>=? fun (_oph, _op, result as res) ->
|
||||||
Lwt.return
|
Lwt.return
|
||||||
(Injection.originated_contracts (Single_result result)) >>=? fun contracts ->
|
(Injection.originated_contracts (Single_result result)) >>=? fun contracts ->
|
||||||
|
@ -162,6 +162,7 @@ val transfer :
|
|||||||
fee:Tez.t ->
|
fee:Tez.t ->
|
||||||
?gas_limit:Z.t ->
|
?gas_limit:Z.t ->
|
||||||
?storage_limit:Z.t ->
|
?storage_limit:Z.t ->
|
||||||
|
?counter:Z.t ->
|
||||||
unit ->
|
unit ->
|
||||||
(Kind.transaction Kind.manager Injection.result * Contract.t list) tzresult Lwt.t
|
(Kind.transaction Kind.manager Injection.result * Contract.t list) tzresult Lwt.t
|
||||||
|
|
||||||
|
@ -447,12 +447,19 @@ let inject_operation
|
|||||||
|
|
||||||
let inject_manager_operation
|
let inject_manager_operation
|
||||||
cctxt ~chain ~block ?branch ?confirmations ?dry_run
|
cctxt ~chain ~block ?branch ?confirmations ?dry_run
|
||||||
~source ~src_pk ~src_sk ~fee ?(gas_limit = Z.minus_one) ?(storage_limit = (Z.of_int (-1)))
|
~source ~src_pk ~src_sk ~fee ?(gas_limit = Z.minus_one) ?(storage_limit = (Z.of_int (-1))) ?counter
|
||||||
(type kind) (operation : kind manager_operation)
|
(type kind) (operation : kind manager_operation)
|
||||||
: (Operation_hash.t * kind Kind.manager contents * kind Kind.manager contents_result) tzresult Lwt.t =
|
: (Operation_hash.t * kind Kind.manager contents * kind Kind.manager contents_result) tzresult Lwt.t =
|
||||||
Alpha_services.Contract.counter
|
begin
|
||||||
cctxt (chain, block) source >>=? fun pcounter ->
|
match counter with
|
||||||
let counter = Z.succ pcounter in
|
| None ->
|
||||||
|
Alpha_services.Contract.counter
|
||||||
|
cctxt (chain, block) source >>=? fun pcounter ->
|
||||||
|
let counter = Z.succ pcounter in
|
||||||
|
return counter
|
||||||
|
| Some counter ->
|
||||||
|
return counter
|
||||||
|
end >>=? fun counter ->
|
||||||
Alpha_services.Contract.manager_key
|
Alpha_services.Contract.manager_key
|
||||||
cctxt (chain, block) source >>=? fun (_, key) ->
|
cctxt (chain, block) source >>=? fun (_, key) ->
|
||||||
let is_reveal : type kind. kind manager_operation -> bool = function
|
let is_reveal : type kind. kind manager_operation -> bool = function
|
||||||
|
@ -69,6 +69,7 @@ val inject_manager_operation:
|
|||||||
fee:Tez.t ->
|
fee:Tez.t ->
|
||||||
?gas_limit:Z.t ->
|
?gas_limit:Z.t ->
|
||||||
?storage_limit:Z.t ->
|
?storage_limit:Z.t ->
|
||||||
|
?counter:Z.t ->
|
||||||
'kind manager_operation ->
|
'kind manager_operation ->
|
||||||
'kind Kind.manager result tzresult Lwt.t
|
'kind Kind.manager result tzresult Lwt.t
|
||||||
|
|
||||||
|
@ -329,7 +329,7 @@ let commands version () =
|
|||||||
end ;
|
end ;
|
||||||
|
|
||||||
command ~group ~desc: "Transfer tokens / call a smart contract."
|
command ~group ~desc: "Transfer tokens / call a smart contract."
|
||||||
(args6 fee_arg dry_run_switch gas_limit_arg storage_limit_arg arg_arg no_print_source_flag)
|
(args7 fee_arg dry_run_switch gas_limit_arg storage_limit_arg counter_arg arg_arg no_print_source_flag)
|
||||||
(prefixes [ "transfer" ]
|
(prefixes [ "transfer" ]
|
||||||
@@ tez_param
|
@@ tez_param
|
||||||
~name: "qty" ~desc: "amount taken from source"
|
~name: "qty" ~desc: "amount taken from source"
|
||||||
@ -340,14 +340,14 @@ let commands version () =
|
|||||||
@@ ContractAlias.destination_param
|
@@ ContractAlias.destination_param
|
||||||
~name: "dst" ~desc: "name/literal of the destination contract"
|
~name: "dst" ~desc: "name/literal of the destination contract"
|
||||||
@@ stop)
|
@@ stop)
|
||||||
begin fun (fee, dry_run, gas_limit, storage_limit, arg, no_print_source) amount (_, source) (_, destination) cctxt ->
|
begin fun (fee, dry_run, gas_limit, storage_limit, counter, arg, no_print_source) amount (_, source) (_, destination) cctxt ->
|
||||||
source_to_keys cctxt
|
source_to_keys cctxt
|
||||||
~chain:`Main ~block:cctxt#block
|
~chain:`Main ~block:cctxt#block
|
||||||
source >>=? fun (src_pk, src_sk) ->
|
source >>=? fun (src_pk, src_sk) ->
|
||||||
transfer cctxt
|
transfer cctxt
|
||||||
~chain:`Main ~block:cctxt#block ?confirmations:cctxt#confirmations
|
~chain:`Main ~block:cctxt#block ?confirmations:cctxt#confirmations
|
||||||
~dry_run
|
~dry_run
|
||||||
~source ~fee ~src_pk ~src_sk ~destination ?arg ~amount ?gas_limit ?storage_limit () >>=
|
~source ~fee ~src_pk ~src_sk ~destination ?arg ~amount ?gas_limit ?storage_limit ?counter () >>=
|
||||||
report_michelson_errors ~no_print_source ~msg:"transfer simulation failed" cctxt >>= function
|
report_michelson_errors ~no_print_source ~msg:"transfer simulation failed" cctxt >>= function
|
||||||
| None -> return_unit
|
| None -> return_unit
|
||||||
| Some (_res, _contracts) ->
|
| Some (_res, _contracts) ->
|
||||||
|
Loading…
Reference in New Issue
Block a user