Shell/RPC: remove the fake block /blocks/prevalidation
Add a `/mempool/pending_operations`
This commit is contained in:
parent
c332343cee
commit
fcdf36acd4
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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"
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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 ;
|
||||||
|
48
src/lib_shell_services/mempool_services.ml
Normal file
48
src/lib_shell_services/mempool_services.ml
Normal 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 () () ()
|
22
src/lib_shell_services/mempool_services.mli
Normal file
22
src/lib_shell_services/mempool_services.mli
Normal 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
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 @@
|
||||||
|
@ -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 =
|
||||||
|
@ -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 ;
|
||||||
|
@ -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 ;
|
||||||
|
@ -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 ->
|
||||||
|
@ -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)))))
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user