proto.alpha.contract.counter_in_the_future error when calling run_operation
Environment Zeronet
Expected behavior
the chains/main/blocks/head/helpers/scripts/run_operation
and /chains/main/blocks/head/helpers/preapply/operations
APIs take into account the transaction in the mempool when checking the account counter
value.
Actual behavior
While trying to broadcast several operations from the same account in the same block, we're doing the following sequence: 1- broadcast the first operation (this works fine) 2- try to run locally the second operation with counter incremented by one. We receive the following error:
proto.alpha.contract.counter_in_the_future
error when calling therun_operation
API or thepreapply/operations
API
Note that if we don't increment the counter, the run_operation
will succeed; but the injection
command will fail.
Steps to reproduce
Execute transfers from the same address twice in a block time range.
Logs
-------
>>> GET http://zeronet-node.tzscan.io//chains/main/blocks/head/hash?
<<< code: 200
"BLkie5NxMRYqWiazyJAUFAseh5A2QNBu5H7zVYh5LT7wttRaJ6B"
-------
-------
>>> GET http://zeronet-node.tzscan.io//chains/main/blocks/head/context/contracts/tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq/counter?
<<< code: 200
"318"
-------
-------
>>> POST http://zeronet-node.tzscan.io:80/chains/main/blocks/head/helpers/forge/operations
{:branch=>"BLkie5NxMRYqWiazyJAUFAseh5A2QNBu5H7zVYh5LT7wttRaJ6B",
:contents=>
[{:kind=>"transaction",
:amount=>"100000",
:source=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
:destination=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
:gas_limit=>"400000",
:storage_limit=>"6000",
:counter=>"319",
:fee=>"50000"}]}
<<< code: 200
"893a5c9147c3818611175419df6a76c1ebacea550ea48a713c6551c5e1156edc080000982fd7853b46e70022bc56f12b427855a2adb67ed08603bf0280b518f02ea08d060000982fd7853b46e70022bc56f12b427855a2adb67e00"
-------
-------
>>> POST http://zeronet-node.tzscan.io:80/chains/main/blocks/head/helpers/scripts/run_operation
{:branch=>"BLkie5NxMRYqWiazyJAUFAseh5A2QNBu5H7zVYh5LT7wttRaJ6B",
:contents=>
[{:kind=>"transaction",
:amount=>"100000",
:source=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
:destination=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
:gas_limit=>"400000",
:storage_limit=>"6000",
:counter=>"319",
:fee=>"50000"}],
:signature=>
"edsigtZo18kaxqVjgsL6Zf5yiPwJfexxr6314KLXDdGR2tfTJk8mgfyfne53kM8zYt81nvX1h5MpR1tRwX5E9MRXdPhyjaSydgy"}
<<< code: 200
{"contents"=>
[{"kind"=>"transaction",
"source"=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
"fee"=>"50000",
"counter"=>"319",
"gas_limit"=>"400000",
"storage_limit"=>"6000",
"amount"=>"100000",
"destination"=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
"metadata"=>
{"balance_updates"=>
[{"kind"=>"contract",
"contract"=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
"change"=>"-50000"},
{"kind"=>"freezer",
"category"=>"fees",
"delegate"=>"tz1Ke2h7sDdakHJQh8WX4Z372du1KChsksyU",
"level"=>1594,
"change"=>"50000"}],
"operation_result"=>
{"status"=>"applied",
"balance_updates"=>
[{"kind"=>"contract",
"contract"=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
"change"=>"-100000"},
{"kind"=>"contract",
"contract"=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
"change"=>"100000"}],
"consumed_gas"=>"100"}}}],
"signature"=>
"edsigtZo18kaxqVjgsL6Zf5yiPwJfexxr6314KLXDdGR2tfTJk8mgfyfne53kM8zYt81nvX1h5MpR1tRwX5E9MRXdPhyjaSydgy"}
-------
-------
>>> POST http://zeronet-node.tzscan.io:80/chains/main/blocks/head/helpers/forge/operations
{:branch=>"BLkie5NxMRYqWiazyJAUFAseh5A2QNBu5H7zVYh5LT7wttRaJ6B",
:contents=>
[{:kind=>"transaction",
:amount=>"100000",
:source=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
:destination=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
:gas_limit=>"10100",
:storage_limit=>"0",
:counter=>"319",
:fee=>"50000"}]}
<<< code: 200
"893a5c9147c3818611175419df6a76c1ebacea550ea48a713c6551c5e1156edc080000982fd7853b46e70022bc56f12b427855a2adb67ed08603bf02f44e00a08d060000982fd7853b46e70022bc56f12b427855a2adb67e00"
-------
-------
>>> GET http://zeronet-node.tzscan.io//chains/main/blocks/head/metadata?
<<< code: 200
{"protocol"=>"ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK",
"next_protocol"=>"ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK",
"test_chain_status"=>{"status"=>"not_running"},
"max_operations_ttl"=>60,
"max_operation_data_length"=>16384,
"max_block_header_length"=>238,
"max_operation_list_length"=>
[{"max_size"=>32768, "max_op"=>32},
{"max_size"=>32768},
{"max_size"=>135168, "max_op"=>132},
{"max_size"=>524288}],
"baker"=>"tz1aWXP237BLwNHJcCD4b3DutCevhqq2T1Z9",
"level"=>
{"level"=>204147,
"level_position"=>204146,
"cycle"=>1594,
"cycle_position"=>114,
"voting_period"=>6,
"voting_period_position"=>7538,
"expected_commitment"=>false},
"voting_period_kind"=>"proposal",
"nonce_hash"=>nil,
"consumed_gas"=>"0",
"deactivated"=>[],
"balance_updates"=>
[{"kind"=>"contract",
"contract"=>"tz1aWXP237BLwNHJcCD4b3DutCevhqq2T1Z9",
"change"=>"-512000000"},
{"kind"=>"freezer",
"category"=>"deposits",
"delegate"=>"tz1aWXP237BLwNHJcCD4b3DutCevhqq2T1Z9",
"level"=>1594,
"change"=>"512000000"},
{"kind"=>"freezer",
"category"=>"rewards",
"delegate"=>"tz1aWXP237BLwNHJcCD4b3DutCevhqq2T1Z9",
"level"=>1594,
"change"=>"16000000"}]}
-------
-------
>>> POST http://zeronet-node.tzscan.io:80/chains/main/blocks/head/helpers/preapply/operations
[{:protocol=>"ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK",
:branch=>"BLkie5NxMRYqWiazyJAUFAseh5A2QNBu5H7zVYh5LT7wttRaJ6B",
:contents=>
[{:kind=>"transaction",
:amount=>"100000",
:source=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
:destination=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
:gas_limit=>"10100",
:storage_limit=>"0",
:counter=>"319",
:fee=>"50000"}],
:signature=>
"edsigtzbj1EmKdhF9NMSKvgL1P75sivGZf5ugu46t4iQPgsHFzmgE1zQtKnk5YbQUceZZ8YppN6JKDjAsCPmi9oQxMKTKnqpn1x"}]
<<< code: 200
[{"contents"=>
[{"kind"=>"transaction",
"source"=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
"fee"=>"50000",
"counter"=>"319",
"gas_limit"=>"10100",
"storage_limit"=>"0",
"amount"=>"100000",
"destination"=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
"metadata"=>
{"balance_updates"=>
[{"kind"=>"contract",
"contract"=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
"change"=>"-50000"},
{"kind"=>"freezer",
"category"=>"fees",
"delegate"=>"tz1Ke2h7sDdakHJQh8WX4Z372du1KChsksyU",
"level"=>1594,
"change"=>"50000"}],
"operation_result"=>
{"status"=>"applied",
"balance_updates"=>
[{"kind"=>"contract",
"contract"=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
"change"=>"-100000"},
{"kind"=>"contract",
"contract"=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
"change"=>"100000"}],
"consumed_gas"=>"100"}}}],
"signature"=>
"edsigtzbj1EmKdhF9NMSKvgL1P75sivGZf5ugu46t4iQPgsHFzmgE1zQtKnk5YbQUceZZ8YppN6JKDjAsCPmi9oQxMKTKnqpn1x"}]
-------
-------
>>> POST http://zeronet-node.tzscan.io:80/chains/main/blocks/head/helpers/forge/operations
{:branch=>"BLkie5NxMRYqWiazyJAUFAseh5A2QNBu5H7zVYh5LT7wttRaJ6B",
:contents=>
[{:kind=>"transaction",
:amount=>"100000",
:source=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
:destination=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
:gas_limit=>"10100",
:storage_limit=>"0",
:counter=>"319",
:fee=>"50000"}]}
<<< code: 200
"893a5c9147c3818611175419df6a76c1ebacea550ea48a713c6551c5e1156edc080000982fd7853b46e70022bc56f12b427855a2adb67ed08603bf02f44e00a08d060000982fd7853b46e70022bc56f12b427855a2adb67e00"
-------
-------
>>> POST http://zeronet-node.tzscan.io:80/injection/operation?chain=main
"893a5c9147c3818611175419df6a76c1ebacea550ea48a713c6551c5e1156edc080000982fd7853b46e70022bc56f12b427855a2adb67ed08603bf02f44e00a08d060000982fd7853b46e70022bc56f12b427855a2adb67e00ccca6cc873bf7daa8a772aeaa6d1ad0f75d48532d4e25ce8ca31fe27390a5dba30f1b5f886e05bc1c69ddb31dcd0faaf135ab11ad7e6ab278006dd54a0605204"
<<< code: 200
"opEz4rMiCB9szVyEb5Yg1qbRXKjw5nKz6potQRQGG87EZicCq3W"
-------
-------
>>> GET http://zeronet-node.tzscan.io//chains/main/blocks/head/hash?
<<< code: 200
"BLkie5NxMRYqWiazyJAUFAseh5A2QNBu5H7zVYh5LT7wttRaJ6B"
-------
-------
>>> POST http://zeronet-node.tzscan.io:80/chains/main/blocks/head/helpers/forge/operations
{:branch=>"BLkie5NxMRYqWiazyJAUFAseh5A2QNBu5H7zVYh5LT7wttRaJ6B",
:contents=>
[{:kind=>"transaction",
:amount=>"200000",
:source=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
:destination=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
:gas_limit=>"400000",
:storage_limit=>"6000",
:counter=>"320",
:fee=>"50000"}]}
<<< code: 200
"893a5c9147c3818611175419df6a76c1ebacea550ea48a713c6551c5e1156edc080000982fd7853b46e70022bc56f12b427855a2adb67ed08603c00280b518f02ec09a0c0000982fd7853b46e70022bc56f12b427855a2adb67e00"
-------
-------
>>> POST http://zeronet-node.tzscan.io:80/chains/main/blocks/head/helpers/scripts/run_operation
{:branch=>"BLkie5NxMRYqWiazyJAUFAseh5A2QNBu5H7zVYh5LT7wttRaJ6B",
:contents=>
[{:kind=>"transaction",
:amount=>"200000",
:source=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
:destination=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
:gas_limit=>"400000",
:storage_limit=>"6000",
:counter=>"320",
:fee=>"50000"}],
:signature=>
"edsigtmjDpo1NzUWhoLWCLyEw1ddgiTRvqPUKuFHxxkTfPB9hMAuEMt2caqsm9MJ56NYQZpMCVY2qTakLDuZoH2MH7TXb5YqwXB"}
<<< code: 500
[{"kind"=>"temporary",
"id"=>"proto.alpha.contract.counter_in_the_future",
"contract"=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
"expected"=>"319",
"found"=>"320"}]
-------
RuntimeError: http://zeronet-node.tzscan.io:80/chains/main/blocks/head/helpers/scripts/run_operation failed with code 500:
[{"kind"=>"temporary",
"id"=>"proto.alpha.contract.counter_in_the_future",
"contract"=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
"expected"=>"319",
"found"=>"320"}]
0) TezosClient#transfer caching counter can used cached counter
Failure/Error: raise "#{url} failed with code #{response.code}:\n #{formatted_response.pretty_inspect}"
RuntimeError:
http://zeronet-node.tzscan.io:80/chains/main/blocks/head/helpers/scripts/run_operation failed with code 500:
[{"kind"=>"temporary",
"id"=>"proto.alpha.contract.counter_in_the_future",
"contract"=>"tz1ZWiiPXowuhN1UqNGVTrgNyf5tdxp4XUUq",
"expected"=>"319",
"found"=>"320"}]
# ./lib/tezos_client/rpc_interface/request_manager.rb:37:in `post'
# ./lib/tezos_client/rpc_interface/helper.rb:83:in `run_operation'
# ./lib/tezos_client/operation.rb:94:in `run'
# ./lib/tezos_client/operation.rb:53:in `simulate_and_update_limits'
# ./lib/tezos_client/operation.rb:80:in `test_and_broadcast'
# ./lib/tezos_client.rb:104:in `transfer'
# ./spec/tezos_client_spec.rb:87:in `block (4 levels) in <top (required)>'
1 example, 1 failure, 0 passed
Finished in 1.627409 seconds
Process finished with exit code 1