Shell/RPC: remove the fake block /blocks/prevalidation

Add a `/mempool/pending_operations`
This commit is contained in:
Mathias Bourgoin 2018-03-14 17:16:18 +01:00 committed by Grégoire Henry
parent c332343cee
commit fcdf36acd4
25 changed files with 235 additions and 345 deletions

View File

@ -161,15 +161,15 @@ test:proto_alpha:
script: script:
- jbuilder build @src/proto_alpha/lib_protocol/runtest - jbuilder build @src/proto_alpha/lib_protocol/runtest
test:client_alpha:transaction: # test:client_alpha:transaction:
<<: *test_definition # <<: *test_definition
script: # script:
- jbuilder build @src/proto_alpha/lib_baking/runtest_transaction # - jbuilder build @src/proto_alpha/lib_baking/runtest_transaction
test:client_alpha:origination: # test:client_alpha:origination:
<<: *test_definition # <<: *test_definition
script: # script:
- jbuilder build @src/proto_alpha/lib_baking/runtest_origination # - jbuilder build @src/proto_alpha/lib_baking/runtest_origination
test:client_alpha:endorsement: test:client_alpha:endorsement:
<<: *test_definition <<: *test_definition

View File

@ -32,14 +32,15 @@ $client gen keys $key2
$client list known identities $client list known identities
$client get balance for bootstrap1 $client get balance for bootstrap1
$client transfer 1,000 from bootstrap1 to $key1 bake_after $client transfer 1,000 from bootstrap1 to $key1
$client transfer 2,000 from bootstrap1 to $key2 bake_after $client transfer 2,000 from bootstrap1 to $key2
$client get balance for $key1 | assert "1,000 ꜩ" $client get balance for $key1 | assert "1,000 ꜩ"
$client get balance for $key2 | assert "2,000 ꜩ" $client get balance for $key2 | assert "2,000 ꜩ"
$client transfer 1,000 from $key2 to $key1
bake_after $client transfer 1,000 from $key2 to $key1
$client get balance for $key1 | assert "2,000 ꜩ" $client get balance for $key1 | assert "2,000 ꜩ"
$client get balance for $key2 | assert "999.95 ꜩ" $client get balance for $key2 | assert "999.95 ꜩ"
@ -56,18 +57,48 @@ $client typecheck program noop
$client originate contract noop \ $client originate contract noop \
for $key1 transferring 1,000 from bootstrap1 \ for $key1 transferring 1,000 from bootstrap1 \
running noop running noop
sleep 1
$client bake for bootstrap1 -max-priority 512
$client transfer 10 from bootstrap1 to noop -arg "Unit" $client transfer 10 from bootstrap1 to noop -arg "Unit"
sleep 1
$client bake for bootstrap1 -max-priority 512
$client originate contract hardlimit \ $client originate contract hardlimit \
for $key1 transferring 1,000 from bootstrap1 \ for $key1 transferring 1,000 from bootstrap1 \
running file:contracts/hardlimit.tz -init "3" running file:contracts/hardlimit.tz -init "3"
sleep 1
$client bake for bootstrap1 -max-priority 512
$client transfer 10 from bootstrap1 to hardlimit -arg "Unit" $client transfer 10 from bootstrap1 to hardlimit -arg "Unit"
sleep 1
$client bake for bootstrap1 -max-priority 512
$client transfer 10 from bootstrap1 to hardlimit -arg "Unit" $client transfer 10 from bootstrap1 to hardlimit -arg "Unit"
# $client transfer 10 from bootstrap1 to hardlimit -arg "unit" # should fail # $client transfer 10 from bootstrap1 to hardlimit -arg "unit" # should fail
sleep 1
$client bake for bootstrap1 -max-priority 512
$client originate account free_account for $key1 \
transferring 1,000 from bootstrap1 -delegatable
sleep 1
$client bake for bootstrap1 -max-priority 512
$client get delegate for free_account
sleep 1
$client bake for bootstrap1 -max-priority 512
$client register key $key2 as delegate
sleep 1
$client bake for bootstrap1 -max-priority 512
$client set delegate for free_account to $key2
sleep 1
$client bake for bootstrap1 -max-priority 512
$client get delegate for free_account
$client get balance for bootstrap5 | assert "4,000,000 ꜩ" $client get balance for bootstrap5 | assert "4,000,000 ꜩ"
$client transfer 400,000 from bootstrap5 to bootstrap1 -fee 0 $client transfer 400,000 from bootstrap5 to bootstrap1 -fee 0
sleep 1
$client bake for bootstrap1 -max-priority 512
$client transfer 400,000 from bootstrap1 to bootstrap5 -fee 0 $client transfer 400,000 from bootstrap1 to bootstrap5 -fee 0
sleep 1
$client bake for bootstrap1 -max-priority 512
$client get balance for bootstrap5 | assert "4,000,000 ꜩ" $client get balance for bootstrap5 | assert "4,000,000 ꜩ"
echo echo

View File

@ -324,28 +324,29 @@ assert_output $contract_dir/check_signature.tz \
assert_output $contract_dir/hash_key.tz Unit '"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"' '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"' assert_output $contract_dir/hash_key.tz Unit '"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav"' '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"'
assert_output $contract_dir/hash_key.tz Unit '"edpkuJqtDcA2m2muMxViSM47MPsGQzmyjnNTawUPqR8vZTAMcx61ES"' '"tz1XPTDmvT3vVE5Uunngmixm7gj7zmdbPq6k"' assert_output $contract_dir/hash_key.tz Unit '"edpkuJqtDcA2m2muMxViSM47MPsGQzmyjnNTawUPqR8vZTAMcx61ES"' '"tz1XPTDmvT3vVE5Uunngmixm7gj7zmdbPq6k"'
$client transfer 1,000 from bootstrap1 to $key1
$client transfer 2,000 from bootstrap1 to $key2 bake_after $client transfer 1,000 from bootstrap1 to $key1
bake_after $client transfer 2,000 from bootstrap1 to $key2
assert_balance $key1 "1,000 ꜩ" assert_balance $key1 "1,000 ꜩ"
assert_balance $key2 "2,000 ꜩ" assert_balance $key2 "2,000 ꜩ"
# Create a contract and transfer 100 ꜩ to it # Create a contract and transfer 100 ꜩ to it
init_with_transfer $contract_dir/store_input.tz $key1 '""' 100 bootstrap1 init_with_transfer $contract_dir/store_input.tz $key1 '""' 100 bootstrap1
$client transfer 100 from bootstrap1 to store_input -arg '"abcdefg"' bake_after $client transfer 100 from bootstrap1 to store_input -arg '"abcdefg"'
assert_balance store_input "200 ꜩ" assert_balance store_input "200 ꜩ"
assert_storage_contains store_input '"abcdefg"' assert_storage_contains store_input '"abcdefg"'
$client transfer 100 from bootstrap1 to store_input -arg '"xyz"' bake_after $client transfer 100 from bootstrap1 to store_input -arg '"xyz"'
assert_storage_contains store_input '"xyz"' assert_storage_contains store_input '"xyz"'
init_with_transfer $contract_dir/transfer_amount.tz $key1 '"0"' "100" bootstrap1 init_with_transfer $contract_dir/transfer_amount.tz $key1 '"0"' "100" bootstrap1
$client transfer 500 from bootstrap1 to transfer_amount -arg Unit bake_after $client transfer 500 from bootstrap1 to transfer_amount -arg Unit
assert_storage_contains transfer_amount 500 assert_storage_contains transfer_amount 500
# This tests the `NOW` instruction. # This tests the `NOW` instruction.
# This test may fail if timings are marginal, though I have not yet seen this happen # This test may fail if timings are marginal, though I have not yet seen this happen
init_with_transfer $contract_dir/store_now.tz $key1 '"2017-07-13T09:19:01Z"' "100" bootstrap1 init_with_transfer $contract_dir/store_now.tz $key1 '"2017-07-13T09:19:01Z"' "100" bootstrap1
$client transfer 500 from bootstrap1 to store_now -arg Unit bake_after $client transfer 500 from bootstrap1 to store_now -arg Unit
assert_storage_contains store_now "$($client get timestamp)" assert_storage_contains store_now "$($client get timestamp)"
# Test timestamp operations # Test timestamp operations
@ -366,43 +367,50 @@ assert_output $contract_dir/diff_timestamps.tz Unit '(Pair 0 1)' -1
assert_output $contract_dir/diff_timestamps.tz Unit '(Pair 1 0)' 1 assert_output $contract_dir/diff_timestamps.tz Unit '(Pair 1 0)' 1
assert_output $contract_dir/diff_timestamps.tz Unit '(Pair "1970-01-01T00:03:20Z" "1970-01-01T00:00:00Z")' 200 assert_output $contract_dir/diff_timestamps.tz Unit '(Pair "1970-01-01T00:03:20Z" "1970-01-01T00:00:00Z")' 200
# Tests TRANSFER_TO # Tests TRANSFER_TO
$client originate account "test_transfer_account1" for $key1 transferring 100 from bootstrap1 bake_after $client originate account "test_transfer_account1" for $key1 transferring 100 from bootstrap1
$client originate account "test_transfer_account2" for $key1 transferring 20 from bootstrap1 bake_after $client originate account "test_transfer_account2" for $key1 transferring 20 from bootstrap1
init_with_transfer $contract_dir/transfer_to.tz $key2 Unit 1,000 bootstrap1 init_with_transfer $contract_dir/transfer_to.tz $key2 Unit 1,000 bootstrap1
assert_balance test_transfer_account1 "100 ꜩ" assert_balance test_transfer_account1 "100 ꜩ"
$client transfer 100 from bootstrap1 to transfer_to \ bake_after $client transfer 100 from bootstrap1 to transfer_to \
-arg "\"$(get_contract_addr test_transfer_account1)\"" -arg "\"$(get_contract_addr test_transfer_account1)\""
assert_balance test_transfer_account1 "200 ꜩ" # Why isn't this 200 ꜩ? Baking fee? assert_balance test_transfer_account1 "200 ꜩ" # Why isn't this 200 ꜩ? Baking fee?
$client transfer 100 from bootstrap1 to transfer_to \ bake_after $client transfer 100 from bootstrap1 to transfer_to \
-arg "\"$(get_contract_addr test_transfer_account2)\"" -arg "\"$(get_contract_addr test_transfer_account2)\""
assert_balance test_transfer_account2 "120 ꜩ" # Why isn't this 120 ꜩ? Baking fee? assert_balance test_transfer_account2 "120 ꜩ" # Why isn't this 120 ꜩ? Baking fee?
# Tests create_account # Tests create_account
init_with_transfer $contract_dir/create_account.tz $key2 \ init_with_transfer $contract_dir/create_account.tz $key2 \
"\"$(get_contract_addr test_transfer_account1)\"" 1,000 bootstrap1 "\"$(get_contract_addr test_transfer_account1)\"" 1,000 bootstrap1
$client transfer 100 from bootstrap1 to create_account \ $client transfer 100 from bootstrap1 to create_account \
-arg '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"' | assert_in_output "New contract" -arg '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"' | assert_in_output "New contract"
$client bake for bootstrap1 -max-priority 512
sleep 1
# Creates a contract, transfers data to it and stores the data # Creates a contract, transfers data to it and stores the data
init_with_transfer $contract_dir/create_contract.tz $key2 \ init_with_transfer $contract_dir/create_contract.tz $key2 \
"\"$(get_contract_addr test_transfer_account1)\"" 1,000 bootstrap1 "\"$(get_contract_addr test_transfer_account1)\"" 1,000 bootstrap1
$client transfer 0 from bootstrap1 to create_contract -arg '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"' $client transfer 0 from bootstrap1 to create_contract -arg '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"'
$client bake for bootstrap1 -max-priority 512
sleep 1
assert_storage_contains create_contract '"abcdefg"' assert_storage_contains create_contract '"abcdefg"'
# Test DEFAULT_ACCOUNT # Test DEFAULT_ACCOUNT
init_with_transfer $contract_dir/default_account.tz $key1 \ init_with_transfer $contract_dir/default_account.tz $key1 \
Unit 1,000 bootstrap1 Unit 1,000 bootstrap1
$client transfer 0 from bootstrap1 to default_account -arg "\"$BOOTSTRAP4_IDENTITY\"" bake_after $client transfer 0 from bootstrap1 to default_account -arg "\"$BOOTSTRAP4_IDENTITY\""
assert_balance $BOOTSTRAP4_IDENTITY "4,000,100 ꜩ" assert_balance $BOOTSTRAP4_IDENTITY "4,000,100 ꜩ"
account=tz1SuakBpFdG9b4twyfrSMqZzruxhpMeSrE5 account=tz1SuakBpFdG9b4twyfrSMqZzruxhpMeSrE5
$client transfer 0 from bootstrap1 to default_account -arg "\"$account\"" bake_after $client transfer 0 from bootstrap1 to default_account -arg "\"$account\""
assert_balance $account "100 ꜩ" assert_balance $account "100 ꜩ"
# Test SELF # Test SELF
init_with_transfer $contract_dir/self.tz $key1 \ init_with_transfer $contract_dir/self.tz $key1 \
'"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"' 1,000 bootstrap1 '"tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx"' 1,000 bootstrap1
$client transfer 0 from bootstrap1 to self bake_after $client transfer 0 from bootstrap1 to self
assert_storage_contains self "\"$(get_contract_addr self)\"" assert_storage_contains self "\"$(get_contract_addr self)\""
# Test sets and map literals # Test sets and map literals
@ -426,14 +434,24 @@ init_with_transfer $contract_dir/big_map_mem.tz $key1\
'(Pair { Elt 1 Unit ; Elt 2 Unit ; Elt 3 Unit } Unit)' \ '(Pair { Elt 1 Unit ; Elt 2 Unit ; Elt 3 Unit } Unit)' \
100 bootstrap1 100 bootstrap1
$client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 0 False)' $client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 0 False)'
$client bake for bootstrap1 -max-priority 512
sleep 1
assert_fails $client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 0 True)' assert_fails $client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 0 True)'
$client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 1 True)' $client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 1 True)'
$client bake for bootstrap1 -max-priority 512
sleep 1
assert_fails $client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 1 False)' assert_fails $client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 1 False)'
$client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 2 True)' $client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 2 True)'
$client bake for bootstrap1 -max-priority 512
sleep 1
assert_fails $client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 2 False)' assert_fails $client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 2 False)'
$client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 3 True)' $client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 3 True)'
$client bake for bootstrap1 -max-priority 512
sleep 1
assert_fails $client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 3 False)' assert_fails $client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 3 False)'
$client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 4 False)' $client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 4 False)'
$client bake for bootstrap1 -max-priority 512
sleep 1
assert_fails $client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 4 True)' assert_fails $client transfer 1 from bootstrap1 to big_map_mem -arg '(Pair 4 True)'
init_with_transfer $contract_dir/big_map_get_add.tz $key1\ init_with_transfer $contract_dir/big_map_get_add.tz $key1\
@ -441,12 +459,26 @@ init_with_transfer $contract_dir/big_map_get_add.tz $key1\
100 bootstrap1 100 bootstrap1
$client transfer 1 from bootstrap1 to big_map_get_add -arg '(Pair (Pair 200 (Some 2)) (Pair 200 (Some 2)))' $client transfer 1 from bootstrap1 to big_map_get_add -arg '(Pair (Pair 200 (Some 2)) (Pair 200 (Some 2)))'
$client bake for bootstrap1 -max-priority 512
sleep 1
$client transfer 1 from bootstrap1 to big_map_get_add -arg '(Pair (Pair 200 None) (Pair 200 None))' $client transfer 1 from bootstrap1 to big_map_get_add -arg '(Pair (Pair 200 None) (Pair 200 None))'
$client bake for bootstrap1 -max-priority 512
sleep 1
$client transfer 1 from bootstrap1 to big_map_get_add -arg '(Pair (Pair 200 None) (Pair 300 None))' $client transfer 1 from bootstrap1 to big_map_get_add -arg '(Pair (Pair 200 None) (Pair 300 None))'
$client bake for bootstrap1 -max-priority 512
sleep 1
$client transfer 1 from bootstrap1 to big_map_get_add -arg '(Pair (Pair 1 None) (Pair 200 None))' $client transfer 1 from bootstrap1 to big_map_get_add -arg '(Pair (Pair 1 None) (Pair 200 None))'
$client bake for bootstrap1 -max-priority 512
sleep 1
$client transfer 1 from bootstrap1 to big_map_get_add -arg '(Pair (Pair 1 (Some 2)) (Pair 0 (Some 1)))' $client transfer 1 from bootstrap1 to big_map_get_add -arg '(Pair (Pair 1 (Some 2)) (Pair 0 (Some 1)))'
$client bake for bootstrap1 -max-priority 512
sleep 1
$client transfer 1 from bootstrap1 to big_map_get_add -arg '(Pair (Pair 400 (Some 1232)) (Pair 400 (Some 1232)))' $client transfer 1 from bootstrap1 to big_map_get_add -arg '(Pair (Pair 400 (Some 1232)) (Pair 400 (Some 1232)))'
$client bake for bootstrap1 -max-priority 512
sleep 1
$client transfer 1 from bootstrap1 to big_map_get_add -arg '(Pair (Pair 401 (Some 0)) (Pair 400 (Some 1232)))' $client transfer 1 from bootstrap1 to big_map_get_add -arg '(Pair (Pair 401 (Some 0)) (Pair 400 (Some 1232)))'
$client bake for bootstrap1 -max-priority 512
sleep 1
printf "\nEnd of test\n" printf "\nEnd of test\n"

View File

@ -19,7 +19,7 @@ protocol_version="Ps1ZDZdgRP4PFDkzmFpiYtE7gJHioavCMxC96i9zJsK6URwSXSJ"
$admin_client inject protocol "$test_dir/demo" $admin_client inject protocol "$test_dir/demo"
$admin_client list protocols $admin_client list protocols
$client activate protocol $protocol_version with fitness 1 and key dictator $client activate protocol $protocol_version with fitness 1 and key dictator
answ=$($client rpc call /blocks/head/protocol with {} 2>/dev/null) answ=$($client -p ProtoALphaALph rpc call /blocks/head/protocol with {} 2>/dev/null)
if ! grep "$protocol_version" <<< $answ ; then if ! grep "$protocol_version" <<< $answ ; then
exit 1 exit 1

View File

@ -149,6 +149,16 @@ init_with_transfer () {
$client originate contract ${NAME} \ $client originate contract ${NAME} \
for ${KEY} transferring "${TRANSFER_AMT}" \ for ${KEY} transferring "${TRANSFER_AMT}" \
from ${TRANSFER_SRC} running "${FILE}" -init "${INITIAL_STORAGE}" from ${TRANSFER_SRC} running "${FILE}" -init "${INITIAL_STORAGE}"
$client bake for bootstrap1 -max-priority 512
sleep 1
}
bake_after () {
local ARGS="$@"
${ARGS}
$client bake for bootstrap1 -max-priority 512
sleep 1
} }
# Takes a grep regexp and fails with an error message if command does not include # Takes a grep regexp and fails with an error message if command does not include

View File

@ -52,7 +52,7 @@ let default_base_dir =
let home = try Sys.getenv "HOME" with Not_found -> "/root" in let home = try Sys.getenv "HOME" with Not_found -> "/root" in
Filename.concat home ".tezos-client" Filename.concat home ".tezos-client"
let default_block = `Prevalidation let default_block = `Head 0
let (//) = Filename.concat let (//) = Filename.concat
@ -129,7 +129,8 @@ let string_parameter () : (string, #Client_context.full) parameter =
let block_parameter () = let block_parameter () =
parameter parameter
(fun _ block -> match Block_services.parse_block block with (fun _ block ->
match Block_services.parse_block block with
| Error _ -> fail (Invalid_block_argument block) | Error _ -> fail (Invalid_block_argument block)
| Ok block -> return block) | Ok block -> return block)
@ -139,8 +140,9 @@ let protocol_parameter () =
try try
let (hash,_commands) = let (hash,_commands) =
List.find (fun (hash,_commands) -> List.find (fun (hash,_commands) ->
(Protocol_hash.to_short_b58check hash) = arg String.has_prefix ~prefix:arg
) (Client_commands.get_versions ()) (Protocol_hash.to_b58check hash))
(Client_commands.get_versions ())
in in
return (Some hash) return (Some hash)
with Not_found -> fail (Invalid_protocol_argument arg) with Not_found -> fail (Invalid_protocol_argument arg)

View File

@ -219,8 +219,8 @@ module RPC = struct
"BLockPrevaLidationPrevaLidationPrevaLidationPrZ4mr6" "BLockPrevaLidationPrevaLidationPrevaLidationPrZ4mr6"
let get_validator node = function let get_validator node = function
| `Genesis | `Head _ | `Prevalidation -> node.mainchain_validator | `Genesis | `Head _ -> node.mainchain_validator
| `Test_head _ | `Test_prevalidation -> | `Test_head _ ->
match Chain_validator.child node.mainchain_validator with match Chain_validator.child node.mainchain_validator with
| None -> raise Not_found | None -> raise Not_found
| Some v -> v | Some v -> v
@ -266,49 +266,6 @@ module RPC = struct
predecessor chain_db n head >>= convert predecessor chain_db n head >>= convert
| `Hash h -> | `Hash h ->
read_valid_block_exn node h >>= convert read_valid_block_exn node h >>= convert
| ( `Prevalidation | `Test_prevalidation ) as block ->
let validator = get_validator node block in
let pv = Chain_validator.prevalidator validator in
let chain_state = Chain_validator.chain_state validator in
Chain.head chain_state >>= fun head ->
let head_header = State.Block.header head in
let head_hash = State.Block.hash head in
let head_chain_id = State.Block.chain_id head in
State.Block.context head >>= fun head_context ->
Context.get_protocol head_context >>= fun head_protocol ->
Prevalidator.context pv >>= function
| Error _ -> Lwt.fail Not_found
| Ok { context ; fitness } ->
Context.get_protocol context >>= fun protocol ->
Context.get_test_chain context >>= fun test_chain ->
let proto_level =
if Protocol_hash.equal protocol head_protocol then
head_header.shell.proto_level
else
((head_header.shell.proto_level + 1) mod 256) in
let operations =
let pv_result, _ = Prevalidator.operations pv in
[ pv_result.applied ] in
Lwt.return
{ hash = prevalidation_hash ;
level = Int32.succ head_header.shell.level ;
proto_level ;
predecessor = head_hash ;
fitness ;
timestamp = Prevalidator.timestamp pv ;
protocol ;
validation_passes = List.length operations ;
operations_hash =
Operation_list_list_hash.compute
(List.map
(fun ops -> Operation_list_hash.compute (List.map fst ops))
operations) ;
operations = Some operations ;
context = Context_hash.zero ;
protocol_data = MBytes.of_string "" ;
chain_id = head_chain_id ;
test_chain ;
}
let rpc_context block : Tezos_protocol_environment_shell.rpc_context Lwt.t = let rpc_context block : Tezos_protocol_environment_shell.rpc_context Lwt.t =
let block_hash = State.Block.hash block in let block_hash = State.Block.hash block in
@ -344,51 +301,7 @@ module RPC = struct
rpc_context block >>= fun ctxt -> rpc_context block >>= fun ctxt ->
Lwt.return (Some ctxt) Lwt.return (Some ctxt)
end end
| ( `Prevalidation | `Test_prevalidation ) as block ->
let validator = get_validator node block in
let pv = Chain_validator.prevalidator validator in
let chain_state = Chain_validator.chain_state validator in
Chain.head chain_state >>= fun head ->
let head_header = State.Block.header head in
let head_hash = State.Block.hash head in
State.Block.context head >>= fun head_context ->
Context.get_protocol head_context >>= fun head_protocol ->
Prevalidator.context pv >>= function
| Error _ -> Lwt.fail Not_found
| Ok { context ; fitness } ->
Context.get_protocol context >>= fun protocol ->
let proto_level =
if Protocol_hash.equal protocol head_protocol then
head_header.shell.proto_level
else
((head_header.shell.proto_level + 1) mod 256) in
let operation_hashes, operations =
let pv_result, _ = Prevalidator.operations pv in
[ List.map fst pv_result.applied ],
[ List.map snd pv_result.applied ] in
let operations_hash =
Operation_list_list_hash.compute
(List.map Operation_list_hash.compute operation_hashes) in
Lwt.return (Some {
Tezos_protocol_environment_shell.
block_hash = prevalidation_hash ;
block_header = {
shell = {
level = Int32.succ head_header.shell.level ;
proto_level ;
predecessor = head_hash ;
timestamp = Prevalidator.timestamp pv ;
validation_passes = List.length operation_hashes ;
operations_hash ;
fitness ;
context = Context_hash.zero ;
} ;
protocol_data = MBytes.create 0 ;
} ;
operation_hashes = (fun () -> Lwt.return operation_hashes) ;
operations = (fun () -> Lwt.return operations) ;
context ;
})
let operation_hashes node block = let operation_hashes node block =
match block with match block with
@ -400,11 +313,6 @@ module RPC = struct
Chain.head chain_state >>= fun head -> Chain.head chain_state >>= fun head ->
predecessor chain_db n head >>= fun block -> predecessor chain_db n head >>= fun block ->
State.Block.all_operation_hashes block State.Block.all_operation_hashes block
| (`Prevalidation | `Test_prevalidation) as block ->
let validator = get_validator node block in
let pv = Chain_validator.prevalidator validator in
let { Preapply_result.applied }, _ = Prevalidator.operations pv in
Lwt.return [List.map fst applied]
| `Hash hash -> | `Hash hash ->
read_valid_block node hash >>= function read_valid_block node hash >>= function
| None -> Lwt.return_nil | None -> Lwt.return_nil
@ -421,51 +329,16 @@ module RPC = struct
Chain.head chain_state >>= fun head -> Chain.head chain_state >>= fun head ->
predecessor chain_db n head >>= fun block -> predecessor chain_db n head >>= fun block ->
State.Block.all_operations block State.Block.all_operations block
| (`Prevalidation | `Test_prevalidation) as block ->
let validator = get_validator node block in
let pv = Chain_validator.prevalidator validator in
let { Preapply_result.applied }, _ = Prevalidator.operations pv in
Lwt.return [List.map snd applied]
| `Hash hash -> | `Hash hash ->
read_valid_block node hash >>= function read_valid_block node hash >>= function
| None -> Lwt.return_nil | None -> Lwt.return_nil
| Some block -> | Some block ->
State.Block.all_operations block State.Block.all_operations block
let pending_operations node (block: block) = let pending_operations node =
match block with let validator = get_validator node (`Head 0) in
| ( `Head 0 | `Prevalidation let pv = Chain_validator.prevalidator validator in
| `Test_head 0 | `Test_prevalidation ) as block -> Lwt.return (Prevalidator.operations pv)
let validator = get_validator node block in
let pv = Chain_validator.prevalidator validator in
Lwt.return (Prevalidator.operations pv)
| ( `Head n | `Test_head n ) as block ->
let validator = get_validator node block in
let prevalidator = Chain_validator.prevalidator validator in
let chain_state = Chain_validator.chain_state validator in
let chain_db = Chain_validator.chain_db validator in
Chain.head chain_state >>= fun head ->
predecessor chain_db n head >>= fun b ->
Prevalidator.pending ~block:b prevalidator >|= fun ops ->
Preapply_result.empty, ops
| `Genesis ->
let chain_state = Chain_validator.chain_state node.mainchain_validator in
let prevalidator =
Chain_validator.prevalidator node.mainchain_validator in
Chain.genesis chain_state >>= fun b ->
Prevalidator.pending ~block:b prevalidator >|= fun ops ->
Preapply_result.empty, ops
| `Hash h -> begin
get_validator_per_hash node h >>= function
| None ->
Lwt.return (Preapply_result.empty, Operation_hash.Map.empty)
| Some validator ->
let chain_state = Chain_validator.chain_state validator in
let prevalidator = Chain_validator.prevalidator validator in
State.Block.read_exn chain_state h >>= fun block ->
Prevalidator.pending ~block prevalidator >|= fun ops ->
Preapply_result.empty, ops
end
let protocols { state } = let protocols { state } =
State.Protocol.list state >>= fun set -> State.Protocol.list state >>= fun set ->
@ -482,11 +355,6 @@ module RPC = struct
| `Genesis -> | `Genesis ->
let chain_state = Chain_validator.chain_state node.mainchain_validator in let chain_state = Chain_validator.chain_state node.mainchain_validator in
Chain.genesis chain_state >>= return Chain.genesis chain_state >>= return
| ( `Head 0 | `Prevalidation
| `Test_head 0 | `Test_prevalidation ) as block ->
let validator = get_validator node block in
let chain_state = Chain_validator.chain_state validator in
Chain.head chain_state >>= return
| `Head n | `Test_head n as block -> begin | `Head n | `Test_head n as block -> begin
let validator = get_validator node block in let validator = get_validator node block in
let chain_state = Chain_validator.chain_state validator in let chain_state = Chain_validator.chain_state validator in

View File

@ -99,7 +99,7 @@ module RPC : sig
t -> (Operation_hash.t * Operation.t) Lwt_stream.t * Lwt_watcher.stopper t -> (Operation_hash.t * Operation.t) Lwt_stream.t * Lwt_watcher.stopper
val pending_operations: val pending_operations:
t -> block -> t ->
(error Preapply_result.t * Operation.t Operation_hash.Map.t) Lwt.t (error Preapply_result.t * Operation.t Operation_hash.Map.t) Lwt.t
val protocols: val protocols:

View File

@ -13,29 +13,6 @@ let filter_bi operations (bi: Block_services.block_info) =
let bi = if operations then bi else { bi with operations = None } in let bi = if operations then bi else { bi with operations = None } in
bi bi
let monitor_operations node contents =
let stream, stopper = Node.RPC.operation_watcher node in
let shutdown () = Lwt_watcher.shutdown stopper in
let first_request = ref true in
let next () =
if not !first_request then
Lwt_stream.get stream >>= function
| None -> Lwt.return_none
| Some (h, op) when contents -> Lwt.return (Some [[h, Some op]])
| Some (h, _) -> Lwt.return (Some [[h, None]])
else begin
first_request := false ;
Node.RPC.operation_hashes node `Prevalidation >>= fun hashes ->
if contents then
Node.RPC.operations node `Prevalidation >>= fun ops ->
Lwt.return_some @@
List.map2 (List.map2 (fun h op -> h, Some op)) hashes ops
else
Lwt.return_some @@
List.map (List.map (fun h -> h, None)) hashes
end in
RPC_answer.return_stream { next ; shutdown }
let register_bi_dir node dir = let register_bi_dir node dir =
let dir = let dir =
let implementation b () include_ops = let implementation b () include_ops =
@ -100,29 +77,19 @@ let register_bi_dir node dir =
RPC_directory.register1 dir RPC_directory.register1 dir
Block_services.S.test_chain implementation in Block_services.S.test_chain implementation in
let dir = let dir =
let implementation b () { Block_services.S.contents ; monitor } = let implementation b () { Block_services.S.contents } =
match b with Node.RPC.operation_hashes node b >>= fun hashes ->
| `Prevalidation when monitor -> if contents then
monitor_operations node contents Node.RPC.operations node b >>= fun ops ->
| _ -> RPC_answer.return @@
Node.RPC.operation_hashes node b >>= fun hashes -> List.map2 (List.map2 (fun h op -> h, Some op)) hashes ops
if contents then else
Node.RPC.operations node b >>= fun ops -> RPC_answer.return @@
RPC_answer.return @@ List.map (List.map (fun h -> h, None)) hashes
List.map2 (List.map2 (fun h op -> h, Some op)) hashes ops
else
RPC_answer.return @@
List.map (List.map (fun h -> h, None)) hashes
in in
RPC_directory.gen_register1 dir RPC_directory.gen_register1 dir
Block_services.S.operations implementation in Block_services.S.operations implementation in
let dir =
let implementation b () () =
Node.RPC.pending_operations node b >>= fun res ->
return res in
RPC_directory.register1 dir
Block_services.S.pending_operations
implementation in
let dir = let dir =
let implementation let implementation
b () b ()
@ -498,7 +465,6 @@ let build_rpc_directory node =
current_request = Peer_validator.current_request w }) in current_request = Peer_validator.current_request w }) in
(* Workers : Net validators *) (* Workers : Net validators *)
let dir = let dir =
RPC_directory.register0 dir Worker_services.Chain_validators.S.list RPC_directory.register0 dir Worker_services.Chain_validators.S.list
(fun () () -> (fun () () ->
@ -519,8 +485,19 @@ let build_rpc_directory node =
(* Network *) (* Network *)
let dir = RPC_directory.merge dir (Node.RPC.build_p2p_rpc_directory node) in let dir = RPC_directory.merge dir (Node.RPC.build_p2p_rpc_directory node) in
(* Mempool *)
let dir =
let implementation () () () =
Node.RPC.pending_operations node >>= fun res ->
return res in
RPC_directory.register dir
Mempool_services.S.pending_operations
implementation in
let dir = let dir =
RPC_directory.register_describe_directory_service RPC_directory.register_describe_directory_service
dir RPC_service.description_service in dir RPC_service.description_service in
dir dir

View File

@ -11,24 +11,17 @@ open Data_encoding
type block = [ type block = [
| `Genesis | `Genesis
| `Head of int | `Prevalidation | `Head of int
| `Test_head of int | `Test_prevalidation | `Test_head of int
| `Hash of Block_hash.t | `Hash of Block_hash.t
] ]
let last_baked_block = function
| `Prevalidation -> `Head 0
| `Test_prevalidation -> `Test_head 0
| `Genesis | `Head _ | `Test_head _ | `Hash _ as block -> block
let parse_block s = let parse_block s =
try try
match String.split '~' s with match String.split '~' s with
| ["genesis"] -> Ok `Genesis | ["genesis"] -> Ok `Genesis
| ["head"] -> Ok (`Head 0) | ["head"] -> Ok (`Head 0)
| ["prevalidation"] -> Ok `Prevalidation
| ["test_head"] -> Ok (`Test_head 0) | ["test_head"] -> Ok (`Test_head 0)
| ["test_prevalidation"] -> Ok `Test_prevalidation
| ["head"; n] -> Ok (`Head (int_of_string n)) | ["head"; n] -> Ok (`Head (int_of_string n))
| ["test_head"; n] -> Ok (`Test_head (int_of_string n)) | ["test_head"; n] -> Ok (`Test_head (int_of_string n))
| [h] -> Ok (`Hash (Block_hash.of_b58check_exn h)) | [h] -> Ok (`Hash (Block_hash.of_b58check_exn h))
@ -39,10 +32,8 @@ let to_string = function
| `Genesis -> "genesis" | `Genesis -> "genesis"
| `Head 0 -> "head" | `Head 0 -> "head"
| `Head n -> Printf.sprintf "head~%d" n | `Head n -> Printf.sprintf "head~%d" n
| `Prevalidation -> "prevalidation"
| `Test_head 0 -> "test_head" | `Test_head 0 -> "test_head"
| `Test_head n -> Printf.sprintf "test_head~%d" n | `Test_head n -> Printf.sprintf "test_head~%d" n
| `Test_prevalidation -> "test_prevalidation"
| `Hash h -> Block_hash.to_b58check h | `Hash h -> Block_hash.to_b58check h
type block_info = { type block_info = {
@ -177,9 +168,9 @@ module S = struct
let descr = let descr =
"A block identifier. This is either a block hash in hexadecimal \ "A block identifier. This is either a block hash in hexadecimal \
notation or a one the predefined aliases: \ notation or a one the predefined aliases: \
'genesis', 'head', 'prevalidation', \ 'genesis', 'head', \
'test_head' or 'test_prevalidation'. One might also use 'head~N'\ or 'test_head'. One might alse use 'head~N'
to 'test_head~N', where N is an integer that denotes the Nth predecessors\ to 'test_head~N', where N is an integer to denotes the Nth predecessors
of 'head' or 'test_head'." in of 'head' or 'test_head'." in
let construct = to_string in let construct = to_string in
let destruct = parse_block in let destruct = parse_block in
@ -190,6 +181,7 @@ module S = struct
let proto_path () = let proto_path () =
RPC_path.(open_root / "blocks" /: blocks_arg / "proto") RPC_path.(open_root / "blocks" /: blocks_arg / "proto")
let info = let info =
RPC_service.post_service RPC_service.post_service
~description:"All the information about a block." ~description:"All the information about a block."
@ -307,17 +299,14 @@ module S = struct
type operations_param = { type operations_param = {
contents: bool ; contents: bool ;
monitor: bool ;
} }
let operations_param_encoding = let operations_param_encoding =
let open Data_encoding in let open Data_encoding in
conv conv
(fun { contents ; monitor } -> (contents, monitor)) (fun { contents } -> (contents))
(fun (contents, monitor) -> { contents ; monitor }) (fun (contents) -> { contents })
(obj2 (obj1 (dft "contents" bool false))
(dft "contents" bool false)
(dft "monitor" bool false))
let operations = let operations =
RPC_service.post_service RPC_service.post_service
@ -349,34 +338,6 @@ module S = struct
~output: Test_chain_status.encoding ~output: Test_chain_status.encoding
RPC_path.(block_path / "test_chain") RPC_path.(block_path / "test_chain")
let pending_operations =
let operation_encoding =
merge_objs
(obj1 (req "hash" Operation_hash.encoding))
Operation.encoding in
(* TODO: branch_delayed/... *)
RPC_service.post_service
~description:
"List the not-yet-prevalidated operations."
~query: RPC_query.empty
~input: empty
~output:
(conv
(fun (preapplied, unprocessed) ->
({ preapplied with
Preapply_result.refused = Operation_hash.Map.empty },
Operation_hash.Map.bindings unprocessed))
(fun (preapplied, unprocessed) ->
(preapplied,
List.fold_right
(fun (h, op) m -> Operation_hash.Map.add h op m)
unprocessed Operation_hash.Map.empty))
(merge_objs
(dynamic_size
(Preapply_result.encoding RPC_error.encoding))
(obj1 (req "unprocessed" (list (dynamic_size operation_encoding))))))
RPC_path.(block_path / "pending_operations")
type preapply_param = { type preapply_param = {
timestamp: Time.t ; timestamp: Time.t ;
protocol_data: MBytes.t ; protocol_data: MBytes.t ;
@ -523,11 +484,6 @@ end
open RPC_context open RPC_context
let monitor_prevalidated_operations ?(contents = false) ctxt =
make_streamed_call S.operations ctxt
((), `Prevalidation) ()
{ contents ; monitor = true }
let chain_id ctxt b = make_call1 S.chain_id ctxt b () () let chain_id ctxt b = make_call1 S.chain_id ctxt b () ()
let level ctxt b = make_call1 S.level ctxt b () () let level ctxt b = make_call1 S.level ctxt b () ()
let predecessor ctxt b = make_call1 S.predecessor ctxt b () () let predecessor ctxt b = make_call1 S.predecessor ctxt b () ()
@ -536,10 +492,9 @@ let hash ctxt b = make_call1 S.hash ctxt b () ()
let timestamp ctxt b = make_call1 S.timestamp ctxt b () () let timestamp ctxt b = make_call1 S.timestamp ctxt b () ()
let fitness ctxt b = make_call1 S.fitness ctxt b () () let fitness ctxt b = make_call1 S.fitness ctxt b () ()
let operations ctxt ?(contents = false) h = let operations ctxt ?(contents = false) h =
make_call1 S.operations ctxt h () { contents ; monitor = false } make_call1 S.operations ctxt h () { contents }
let protocol ctxt b = make_call1 S.protocol ctxt b () () let protocol ctxt b = make_call1 S.protocol ctxt b () ()
let test_chain ctxt b = make_call1 S.test_chain ctxt b () () let test_chain ctxt b = make_call1 S.test_chain ctxt b () ()
let pending_operations ctxt b = make_call1 S.pending_operations ctxt b () ()
let info ctxt ?(include_ops = true) h = let info ctxt ?(include_ops = true) h =
make_call1 S.info ctxt h () include_ops make_call1 S.info ctxt h () include_ops
let monitor ?(include_ops = false) let monitor ?(include_ops = false)

View File

@ -9,18 +9,11 @@
type block = [ type block = [
| `Genesis | `Genesis
| `Head of int | `Prevalidation | `Head of int
| `Test_head of int | `Test_prevalidation | `Test_head of int
| `Hash of Block_hash.t | `Hash of Block_hash.t
] ]
val last_baked_block:
block -> [>
| `Genesis
| `Head of int
| `Test_head of int
| `Hash of Block_hash.t
]
val parse_block: string -> (block, string) result val parse_block: string -> (block, string) result
val to_string: block -> string val to_string: block -> string
@ -72,9 +65,6 @@ val protocol:
val test_chain: val test_chain:
#simple -> block -> Test_chain_status.t tzresult Lwt.t #simple -> block -> Test_chain_status.t tzresult Lwt.t
val pending_operations:
#simple -> block ->
(error Preapply_result.t * Operation.t Operation_hash.Map.t) tzresult Lwt.t
val info: val info:
#simple -> #simple ->
@ -117,11 +107,6 @@ val raw_context_result_pp : raw_context_result -> string
val raw_context: val raw_context:
#simple -> block -> string list -> int -> raw_context_result tzresult Lwt.t #simple -> block -> string list -> int -> raw_context_result tzresult Lwt.t
val monitor_prevalidated_operations:
?contents:bool ->
#streamed ->
((Operation_hash.t * Operation.t option) list list Lwt_stream.t * stopper) tzresult Lwt.t
val unmark_invalid: val unmark_invalid:
#simple -> Block_hash.t -> unit Error_monad.tzresult Lwt.t #simple -> Block_hash.t -> unit Error_monad.tzresult Lwt.t
val list_invalid: val list_invalid:
@ -185,7 +170,6 @@ module S : sig
type operations_param = { type operations_param = {
contents: bool ; contents: bool ;
monitor: bool ;
} }
val operations: val operations:
([ `POST ], unit, ([ `POST ], unit,
@ -200,10 +184,6 @@ module S : sig
([ `POST ], unit, ([ `POST ], unit,
unit * block, unit, unit, unit * block, unit, unit,
Test_chain_status.t) RPC_service.t Test_chain_status.t) RPC_service.t
val pending_operations:
([ `POST ], unit,
unit * block, unit, unit,
error Preapply_result.t * Operation.t Operation_hash.Map.t) RPC_service.t
type list_param = { type list_param = {
include_ops: bool ; include_ops: bool ;

View File

@ -0,0 +1,48 @@
(**************************************************************************)
(* *)
(* Copyright (c) 2014 - 2018. *)
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
(* *)
(* All rights reserved. No warranty, explicit or implicit, provided. *)
(* *)
(**************************************************************************)
open Data_encoding
module S = struct
let pending_operations =
let operation_encoding =
merge_objs
(obj1 (req "hash" Operation_hash.encoding))
Operation.encoding in
(* TODO: branch_delayed/... *)
RPC_service.post_service
~description:
"List the not-yet-prevalidated operations."
~query: RPC_query.empty
~input: empty
~output:
(conv
(fun (preapplied, unprocessed) ->
({ preapplied with
Preapply_result.refused = Operation_hash.Map.empty },
Operation_hash.Map.bindings unprocessed))
(fun (preapplied, unprocessed) ->
(preapplied,
List.fold_right
(fun (h, op) m -> Operation_hash.Map.add h op m)
unprocessed Operation_hash.Map.empty))
(merge_objs
(dynamic_size
(Preapply_result.encoding RPC_error.encoding))
(obj1 (req "unprocessed" (list (dynamic_size operation_encoding))))))
RPC_path.(root / "mempool" / "pending_operations")
end
open RPC_context
let pending_operations ctxt = make_call S.pending_operations ctxt () () ()

View File

@ -0,0 +1,22 @@
(**************************************************************************)
(* *)
(* Copyright (c) 2014 - 2018. *)
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
(* *)
(* All rights reserved. No warranty, explicit or implicit, provided. *)
(* *)
(**************************************************************************)
module S : sig
val pending_operations:
([ `POST ], unit,
unit , unit, unit,
error Preapply_result.t * Operation.t Operation_hash.Map.t) RPC_service.t
end
open RPC_context
val pending_operations:
#simple ->
(error Preapply_result.t * Operation.t Operation_hash.Map.t) tzresult Lwt.t

View File

@ -70,7 +70,6 @@ let monitor cctxt
return (Lwt_stream.map_s convert block_stream) return (Lwt_stream.map_s convert block_stream)
let blocks_from_cycle cctxt block cycle = let blocks_from_cycle cctxt block cycle =
let block = Block_services.last_baked_block block in
Alpha_services.Context.level cctxt block >>=? fun level -> Alpha_services.Context.level cctxt block >>=? fun level ->
Alpha_services.Helpers.levels cctxt block cycle >>=? fun (first, last) -> Alpha_services.Helpers.levels cctxt block cycle >>=? fun (first, last) ->
let length = Int32.to_int (Raw_level.diff level.level first) in let length = Int32.to_int (Raw_level.diff level.level first) in

View File

@ -94,7 +94,6 @@ let get_signing_slots cctxt ?max_priority block delegate level =
let inject_endorsement (cctxt : #Proto_alpha.full) let inject_endorsement (cctxt : #Proto_alpha.full)
block level ?async block level ?async
src_sk slots = src_sk slots =
let block = Block_services.last_baked_block block in
Block_services.info cctxt block >>=? fun bi -> Block_services.info cctxt block >>=? fun bi ->
Alpha_services.Forge.Consensus.endorsement cctxt Alpha_services.Forge.Consensus.endorsement cctxt
block block
@ -129,7 +128,6 @@ let check_endorsement cctxt level slot =
let forge_endorsement (cctxt : #Proto_alpha.full) let forge_endorsement (cctxt : #Proto_alpha.full)
block block
~src_sk ?slots ?max_priority src_pk = ~src_sk ?slots ?max_priority src_pk =
let block = Block_services.last_baked_block block in
let src_pkh = Ed25519.Public_key.hash src_pk in let src_pkh = Ed25519.Public_key.hash src_pk in
Alpha_services.Context.level cctxt block >>=? fun { level } -> Alpha_services.Context.level cctxt block >>=? fun { level } ->
begin begin

View File

@ -113,12 +113,11 @@ let forge_block cctxt block
?timestamp ?timestamp
~priority ~priority
?seed_nonce_hash ~src_sk () = ?seed_nonce_hash ~src_sk () =
let block = Block_services.last_baked_block block in
begin begin
match operations with match operations with
| None -> | None ->
Block_services.pending_operations Mempool_services.pending_operations
cctxt block >>=? fun (ops, pendings) -> cctxt >>=? fun (ops, pendings) ->
let ops = let ops =
List.map snd @@ List.map snd @@
Operation_hash.Map.bindings @@ Operation_hash.Map.bindings @@
@ -476,8 +475,8 @@ let bake (cctxt : #Proto_alpha.full) state =
lwt_debug "Try baking after %a (slot %d) for %s (%a)" lwt_debug "Try baking after %a (slot %d) for %s (%a)"
Block_hash.pp_short bi.hash Block_hash.pp_short bi.hash
priority name Time.pp_hum timestamp >>= fun () -> priority name Time.pp_hum timestamp >>= fun () ->
Block_services.pending_operations cctxt Mempool_services.pending_operations cctxt
block >>=? fun (res, ops) -> >>=? fun (res, ops) ->
let operations = let operations =
List.map snd @@ List.map snd @@
Operation_hash.Map.bindings @@ Operation_hash.Map.bindings @@

View File

@ -12,7 +12,6 @@ open Alpha_context
let bake_block (cctxt : #Proto_alpha.full) block let bake_block (cctxt : #Proto_alpha.full) block
?force ?max_priority ?(free_baking=false) ?src_sk delegate = ?force ?max_priority ?(free_baking=false) ?src_sk delegate =
let block = Block_services.last_baked_block block in
begin begin
match src_sk with match src_sk with
| None -> | None ->
@ -96,9 +95,8 @@ let reveal_block_nonces (cctxt : #Proto_alpha.full) block_hashes =
do_reveal cctxt cctxt#block blocks do_reveal cctxt cctxt#block blocks
let reveal_nonces cctxt () = let reveal_nonces cctxt () =
let block = Block_services.last_baked_block cctxt#block in
Client_baking_forge.get_unrevealed_nonces Client_baking_forge.get_unrevealed_nonces
cctxt block >>=? fun nonces -> cctxt cctxt#block >>=? fun nonces ->
do_reveal cctxt cctxt#block nonces do_reveal cctxt cctxt#block nonces
let run_daemon cctxt ?max_priority ~endorsement_delay delegates ~endorsement ~baking ~denunciation = let run_daemon cctxt ?max_priority ~endorsement_delay delegates ~endorsement ~baking ~denunciation =

View File

@ -15,24 +15,6 @@ type operation = {
content: Operation.t option content: Operation.t option
} }
let monitor cctxt ?contents ?check () =
Block_services.monitor_prevalidated_operations
?contents cctxt >>=? fun (ops_stream, _) ->
let convert ops =
map_s
(fun (hash, op) ->
match op with
| None -> return { hash; content = None }
| Some (op : Operation.raw) ->
Alpha_services.Parse.operations cctxt
`Prevalidation ?check [op] >>=? function
| [proto] ->
return { hash ; content = Some proto }
| _ -> failwith "Error while parsing the operation")
(List.concat ops)
in
return (Lwt_stream.map_s convert ops_stream)
type valid_endorsement = { type valid_endorsement = {
hash: Operation_hash.t ; hash: Operation_hash.t ;

View File

@ -15,11 +15,6 @@ type operation = {
content: Operation.t option ; content: Operation.t option ;
} }
val monitor:
#Proto_alpha.rpc_context ->
?contents:bool -> ?check:bool -> unit ->
operation list tzresult Lwt_stream.t tzresult Lwt.t
type valid_endorsement = { type valid_endorsement = {
hash: Operation_hash.t ; hash: Operation_hash.t ;
source: public_key_hash ; source: public_key_hash ;

View File

@ -15,7 +15,6 @@ let inject_seed_nonce_revelation rpc_config block ?async nonces =
List.map List.map
(fun (level, nonce) -> (fun (level, nonce) ->
Seed_nonce_revelation { level ; nonce }) nonces in Seed_nonce_revelation { level ; nonce }) nonces in
let block = Block_services.last_baked_block block in
Block_services.info rpc_config block >>=? fun bi -> Block_services.info rpc_config block >>=? fun bi ->
Alpha_services.Forge.Anonymous.operations rpc_config Alpha_services.Forge.Anonymous.operations rpc_config
block ~branch:bi.hash operations >>=? fun bytes -> block ~branch:bi.hash operations >>=? fun bytes ->

View File

@ -30,8 +30,8 @@
((name buildtest) ((name buildtest)
(deps (test_endorsement.exe (deps (test_endorsement.exe
test_michelson_parser.exe test_michelson_parser.exe
test_origination.exe ;test_origination.exe
test_transaction.exe ;test_transaction.exe
test_rpc.exe test_rpc.exe
test_vote.exe)))) test_vote.exe))))
@ -68,8 +68,8 @@
((name runtest) ((name runtest)
(deps ((alias runtest_endorsement) (deps ((alias runtest_endorsement)
(alias runtest_michelson_parser) (alias runtest_michelson_parser)
(alias runtest_origination) ;(alias runtest_origination)
(alias runtest_transaction) ;(alias runtest_transaction)
(alias runtest_rpc) (alias runtest_rpc)
(alias runtest_vote))))) (alias runtest_vote)))))

View File

@ -28,7 +28,7 @@ let build_rpc_context config =
let rpc_ctxt = ref (build_rpc_context !rpc_config) let rpc_ctxt = ref (build_rpc_context !rpc_config)
(* Context that does not write to alias files *) (* Context that does not write to alias files *)
let no_write_context ?(block = `Prevalidation) config : #Client_context.full = object let no_write_context ?(block = `Head 0) config : #Client_context.full = object
inherit RPC_client.http_ctxt config Media_type.all_media_types inherit RPC_client.http_ctxt config Media_type.all_media_types
inherit Client_context.simple_printer (fun _ _ -> Lwt.return_unit) inherit Client_context.simple_printer (fun _ _ -> Lwt.return_unit)
method load : type a. string -> default:a -> a Data_encoding.encoding -> a Error_monad.tzresult Lwt.t = method load : type a. string -> default:a -> a Data_encoding.encoding -> a Error_monad.tzresult Lwt.t =
@ -171,7 +171,7 @@ module Account = struct
| _ -> assert false | _ -> assert false
let transfer let transfer
?(block = `Prevalidation) ?(block = `Head 0)
?(fee = Tez.fifty_cents) ?(fee = Tez.fifty_cents)
~(account:t) ~(account:t)
~destination ~destination
@ -190,7 +190,7 @@ module Account = struct
~fee () ~fee ()
let originate let originate
?(block = `Prevalidation) ?(block = `Head 0)
?delegate ?delegate
?(fee = Tez.fifty_cents) ?(fee = Tez.fifty_cents)
~(src:t) ~(src:t)
@ -217,7 +217,7 @@ module Account = struct
() ()
let set_delegate let set_delegate
?(block = `Prevalidation) ?(block = `Head 0)
?(fee = Tez.fifty_cents) ?(fee = Tez.fifty_cents)
~contract ~contract
~manager_sk ~manager_sk
@ -232,12 +232,12 @@ module Account = struct
~manager_sk ~manager_sk
delegate_opt delegate_opt
let balance ?(block = `Prevalidation) (account : t) = let balance ?(block = `Head 0) (account : t) =
Alpha_services.Contract.balance !rpc_ctxt Alpha_services.Contract.balance !rpc_ctxt
block account.contract block account.contract
(* TODO: gather contract related functions in a Contract module? *) (* TODO: gather contract related functions in a Contract module? *)
let delegate ?(block = `Prevalidation) (contract : Contract.t) = let delegate ?(block = `Head 0) (contract : Contract.t) =
Alpha_services.Contract.delegate_opt !rpc_ctxt block contract Alpha_services.Contract.delegate_opt !rpc_ctxt block contract
end end
@ -246,10 +246,10 @@ module Protocol = struct
open Account open Account
let voting_period_kind ?(block = `Prevalidation) () = let voting_period_kind ?(block = `Head 0) () =
Alpha_services.Context.voting_period_kind !rpc_ctxt block Alpha_services.Context.voting_period_kind !rpc_ctxt block
let proposals ?(block = `Prevalidation) ~src:({ pkh; sk } : Account.t) proposals = let proposals ?(block = `Head 0) ~src:({ pkh; sk } : Account.t) proposals =
Block_services.info !rpc_ctxt block >>=? fun block_info -> Block_services.info !rpc_ctxt block >>=? fun block_info ->
Alpha_services.Context.next_level !rpc_ctxt block >>=? fun next_level -> Alpha_services.Context.next_level !rpc_ctxt block >>=? fun next_level ->
Alpha_services.Forge.Amendment.proposals !rpc_ctxt block Alpha_services.Forge.Amendment.proposals !rpc_ctxt block
@ -261,7 +261,7 @@ module Protocol = struct
let signed_bytes = Ed25519.Signature.append sk bytes in let signed_bytes = Ed25519.Signature.append sk bytes in
return (Tezos_base.Operation.of_bytes_exn signed_bytes) return (Tezos_base.Operation.of_bytes_exn signed_bytes)
let ballot ?(block = `Prevalidation) ~src:({ pkh; sk } : Account.t) ~proposal ballot = let ballot ?(block = `Head 0) ~src:({ pkh; sk } : Account.t) ~proposal ballot =
Block_services.info !rpc_ctxt block >>=? fun block_info -> Block_services.info !rpc_ctxt block >>=? fun block_info ->
Alpha_services.Context.next_level !rpc_ctxt block >>=? fun next_level -> Alpha_services.Context.next_level !rpc_ctxt block >>=? fun next_level ->
Alpha_services.Forge.Amendment.ballot !rpc_ctxt block Alpha_services.Forge.Amendment.ballot !rpc_ctxt block
@ -463,7 +463,6 @@ module Endorse = struct
block block
src_sk src_sk
slot = slot =
let block = Block_services.last_baked_block block in
Block_services.info !rpc_ctxt block >>=? fun { hash ; _ } -> Block_services.info !rpc_ctxt block >>=? fun { hash ; _ } ->
Alpha_services.Context.level !rpc_ctxt (`Hash hash) >>=? fun level -> Alpha_services.Context.level !rpc_ctxt (`Hash hash) >>=? fun level ->
Alpha_services.Forge.Consensus.endorsement !rpc_ctxt Alpha_services.Forge.Consensus.endorsement !rpc_ctxt

View File

@ -28,7 +28,6 @@ let rec find_predecessor rpc_config h n =
let get_branch rpc_config block branch = let get_branch rpc_config block branch =
let branch = Option.unopt ~default:0 branch in (* TODO export parameter *) let branch = Option.unopt ~default:0 branch in (* TODO export parameter *)
let block = Block_services.last_baked_block block in
begin begin
match block with match block with
| `Head n -> return (`Head (n+branch)) | `Head n -> return (`Head (n+branch))
@ -188,7 +187,6 @@ let get_manager (cctxt : #Proto_alpha.full) block source =
return (src_name, src_pkh, src_pk, src_sk) return (src_name, src_pkh, src_pk, src_sk)
let dictate rpc_config block command seckey = let dictate rpc_config block command seckey =
let block = Block_services.last_baked_block block in
Block_services.info Block_services.info
rpc_config block >>=? fun { chain_id ; hash = branch } -> rpc_config block >>=? fun { chain_id ; hash = branch } ->
Alpha_services.Forge.Dictator.operation Alpha_services.Forge.Dictator.operation

View File

@ -34,7 +34,6 @@ let demo cctxt =
return () return ()
let bake cctxt = let bake cctxt =
let block = Block_services.last_baked_block cctxt.Client_commands.config.block in
Client_node_rpcs.Blocks.info cctxt.rpc_config block >>=? fun bi -> Client_node_rpcs.Blocks.info cctxt.rpc_config block >>=? fun bi ->
let fitness = let fitness =
match bi.fitness with match bi.fitness with

View File

@ -14,7 +14,6 @@ let protocol =
"ProtoGenesisGenesisGenesisGenesisGenesisGenesk612im" "ProtoGenesisGenesisGenesisGenesisGenesisGenesk612im"
let bake cctxt ?(timestamp = Time.now ()) block command sk = let bake cctxt ?(timestamp = Time.now ()) block command sk =
let block = Block_services.last_baked_block block in
let protocol_data = Data_encoding.Binary.to_bytes Data.Command.encoding command in let protocol_data = Data_encoding.Binary.to_bytes Data.Command.encoding command in
Block_services.preapply Block_services.preapply
cctxt block ~timestamp ~protocol_data cctxt block ~timestamp ~protocol_data