Skip to content

Commit c574834

Browse files
authored
feat: da sequencer, update docs with upgrade remarks (#1250)
1 parent e35ad91 commit c574834

File tree

8 files changed

+268
-8
lines changed

8 files changed

+268
-8
lines changed

docker/compose/movement-full-node/snapshot/docker-compose.restore.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ services:
44
image: restic/restic
55
container_name: movement-restore-db
66
environment:
7-
- AWS_REGION=${AWS_REGION}
8-
- RESTIC_PASSWORD=${RESTIC_PASSWORD}
9-
- RESTIC_HOST=${RESTIC_HOST}
10-
- SYNC_BUCKET=${SYNC_BUCKET}
7+
- AWS_REGION=${AWS_REGION:?AWS_REGION is not set}
8+
- RESTIC_PASSWORD=${RESTIC_PASSWORD:?RESTIC_PASSWORD is not set}
9+
- RESTIC_HOST=${RESTIC_HOST:?RESTIC_HOST is not set}
10+
- SYNC_BUCKET=${SYNC_BUCKET:?SYNC_BUCKET is not set}
1111
entrypoint: ["/bin/sh", "-c"]
1212
command: >
1313
"restic --no-lock -r s3:s3.${AWS_REGION}.amazonaws.com/${SYNC_BUCKET}/restic_node_backup

docs/movement-node/run-fullnode/README.md

Lines changed: 258 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,13 @@ First set the DA-Sequencer connection URL depending on the network:
8787
* Testnet: `export MAPTOS_DA_SEQUENCER_CONNECTION_URL=https://da-sequencer.testnet.movementinfra.xyz`
8888
* Mainnet: `export MAPTOS_DA_SEQUENCER_CONNECTION_URL=https://da-sequencer.mainnet.movementinfra.xyz`
8989

90+
If you create a new node add these environment variables:
91+
92+
* Devnet: `export MAPTOS_CHAIN_ID=27 && export MAPTOS_PRIVATE_KEY=random`
93+
* Testnet: `export MAPTOS_CHAIN_ID=250 && export MAPTOS_PRIVATE_KEY=random`
94+
* Mainnet: `export MAPTOS_CHAIN_ID=126 && export MAPTOS_PRIVATE_KEY=random`
95+
96+
9097
Then run the setup/migration script:
9198

9299
```bash
@@ -140,11 +147,261 @@ If you encounter an error from the `restoration` script indicating a rejected bu
140147
Also verify that the script is using the correct AWS access key and secret.
141148

142149
### The node doesn't sync
150+
143151
If your node cannot reach the same state as the main node, it means it did not execute blocks correctly and its database must be restored.
144152

145153
Perform a restoration using the appropriate snapshot. If the issue persists after restoration, contact Movement support.
146154

147155
### Error "State from Da verification failed"
156+
148157
When there's a divergence between the main node state and the full node state, it is detected on the full node, and the node stops with an error containing the sentence: `state from Da verification failed`.
149158

150-
To recover, try restarting the node. If you get the same error, perform a restoration to restart from a correct state. After restoration, restart the node; it should then sync correctly.
159+
To recover, try restarting the node. If you get the same error, perform a restoration to restart from a correct state. After restoration, restart the node; it should then sync correctly.
160+
161+
### Warn "DA Sequencer reject batch, can't send the batch."
162+
163+
The full node batch signer key is not white listed. Send it to movement so that to register it to the da-sequencer.
164+
165+
### The node is blocked and doesn't start
166+
167+
If the node start but stop with this logs:
168+
```
169+
Attempting to bind metrics server to 0.0.0.0:9464
170+
Metrics server successfully bound to 0.0.0.0:9464
171+
Metrics server listening on 0.0.0.0:9464
172+
```
173+
It means that the config.json file hasn't been configured. Run the setup_migration script (see Update config).
174+
175+
### Error "Send execution state to da sequencer failed"
176+
177+
Update config.json to set `propagate_execution_state` field to "propagate_execution_state": false and restart.
178+
179+
### Error "he node shouldn't send state to the DA, change the config propagate_execution_state to "propagate_execution_state": false and resta"
180+
181+
The maptos database is not the one expected by the node. Stop the node and do a restoration.
182+
183+
### Error "WARN movement_da_sequencer_client: DA sequencer Http2 connection url:... failed"
184+
185+
The da-sequencer connection url is badly configured. Edit the config.json field `connection_url` and set it with the value corresponding the connected network define in Update config chapter.
186+
187+
### Error "movement-restore-db | unknown command "latest" for "restic"
188+
189+
The environment needed by the docker script or not defined or not detected by docker.
190+
191+
### Error "Error: Da Sync from height zero is not allowed."
192+
193+
The restoration hasn't been done or the database is not loaded correctly. Verify the DOT_MOVEMENT variable use to start the node is the same as the one to do the restoration.
194+
195+
### Example of a config file for mainnet
196+
Sensitive data and some unused has been removed.
197+
198+
```
199+
{
200+
"maptos_config": {
201+
"chain": {
202+
"maptos_chain_id": 126,
203+
"maptos_rest_listen_hostname": "0.0.0.0",
204+
"maptos_rest_listen_port": 30731,
205+
"maptos_private_key_signer_identifier": {
206+
"Local": {
207+
"private_key_hex_bytes": "..."
208+
}
209+
},
210+
"maptos_read_only": false,
211+
"enabled_pruning": false,
212+
"maptos_ledger_prune_window": 50000000,
213+
"maptos_epoch_snapshot_prune_window": 50000000,
214+
"maptos_state_merkle_prune_window": 100000,
215+
"maptos_db_path": "/.movement/maptos/126/.maptos",
216+
"genesis_timestamp_microseconds": 1600000000000,
217+
"genesis_block_hash_hex": "25112f5405bbc65b2542a67d94094f12f4d2e287025480efcdb6200c5fed8671",
218+
"known_framework_release_str": "elsa",
219+
"dont_increase_epoch_until_version": 0
220+
},
221+
"indexer": {
222+
"maptos_indexer_grpc_listen_hostname": "0.0.0.0",
223+
"maptos_indexer_grpc_listen_port": 30734,
224+
"maptos_indexer_grpc_inactivity_timeout": 60,
225+
"maptos_indexer_grpc_inactivity_ping_interval": 10,
226+
"maptos_indexer_grpc_healthcheck_hostname": "0.0.0.0",
227+
"maptos_indexer_grpc_healthcheck_port": 8084
228+
},
229+
"indexer_processor": {
230+
"postgres_connection_string": "postgresql://postgres:password@localhost:5432",
231+
"indexer_processor_auth_token": "auth_token"
232+
},
233+
"client": {
234+
"maptos_rest_connection_hostname": "0.0.0.0",
235+
"maptos_rest_connection_port": 30731,
236+
"maptos_faucet_rest_connection_hostname": "0.0.0.0",
237+
"maptos_faucet_rest_connection_port": 30732,
238+
"maptos_indexer_grpc_connection_hostname": "0.0.0.0",
239+
"maptos_indexer_grpc_connection_port": 30734
240+
},
241+
"faucet": {
242+
"maptos_rest_connection_hostname": "0.0.0.0",
243+
"maptos_rest_connection_port": 30731,
244+
"maptos_faucet_rest_listen_hostname": "0.0.0.0",
245+
"maptos_faucet_rest_listen_port": 30732
246+
},
247+
"fin": {
248+
"fin_rest_listen_hostname": "0.0.0.0",
249+
"fin_rest_listen_port": 30733
250+
},
251+
"load_shedding": {
252+
"max_transactions_in_flight": null,
253+
"batch_production_time": 2000
254+
},
255+
"mempool": {
256+
"sequence_number_ttl_ms": 180000,
257+
"gc_slot_duration_ms": 2000,
258+
"max_tx_per_batch": 8192,
259+
"max_batch_size": 1048576
260+
},
261+
"access_control": {
262+
"ingress_account_whitelist": null
263+
},
264+
"da_sequencer": {
265+
"connection_url": "https://da-sequencer.mainnet.movementinfra.xyz",
266+
"batch_signer_identifier": {
267+
"Local": {
268+
"private_key_hex_bytes": "..."
269+
}
270+
},
271+
"stream_heartbeat_interval_sec": 10,
272+
"propagate_execution_state": false
273+
}
274+
275+
},
276+
"celestia_da_light_node_config": {
277+
"network": "Local",
278+
"appd": {
279+
"celestia_rpc_listen_hostname": "0.0.0.0",
280+
"celestia_rpc_listen_port": 26657,
281+
"celestia_websocket_connection_protocol": "ws",
282+
"celestia_websocket_connection_hostname": "0.0.0.0",
283+
"celestia_websocket_connection_port": 26658,
284+
"celestia_websocket_connection_path": "",
285+
"celestia_auth_token": null,
286+
"celestia_chain_id": "movement",
287+
"celestia_namespace": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAbW92ZW1lbnQ=",
288+
"celestia_path": null,
289+
"celestia_validator_address": null,
290+
"celestia_appd_use_replace_args": false,
291+
"celestia_appd_replace_args": []
292+
},
293+
"bridge": {
294+
"celestia_rpc_connection_protocol": "http",
295+
"celestia_rpc_connection_hostname": "0.0.0.0",
296+
"celestia_rpc_connection_port": 26657,
297+
"celestia_websocket_listen_hostname": "0.0.0.0",
298+
"celestia_websocket_listen_port": 26658,
299+
"celestia_bridge_path": null,
300+
"celestia_bridge_use_replace_args": false,
301+
"celestia_bridge_replace_args": []
302+
},
303+
"light": {
304+
"key_name": "movement_celestia_light",
305+
"node_store": null
306+
},
307+
"da_light_node": {
308+
"celestia_rpc_connection_protocol": "http",
309+
"celestia_rpc_connection_hostname": "0.0.0.0",
310+
"celestia_rpc_connection_port": 26657,
311+
"celestia_websocket_connection_hostname": "0.0.0.0",
312+
"celestia_websocket_connection_port": 26658,
313+
"celestia_websocket_connection_path": "",
314+
"movement_da_light_node_listen_hostname": "0.0.0.0",
315+
"movement_da_light_node_listen_port": 30730,
316+
"movement_da_light_node_connection_protocol": "http",
317+
"movement_da_light_node_connection_hostname": "0.0.0.0",
318+
"movement_da_light_node_connection_port": 30730,
319+
"movement_da_light_node_http1": false,
320+
"da_signers": {
321+
"signer_identifier": {
322+
"Local": {
323+
"private_key_hex_bytes": "..."
324+
}
325+
},
326+
"public_keys_hex": [
327+
"0433d4cc423c3799cf3213d2b9e0fdcf94cec93fd3c52582f0bdef143ae008b233e778ab201e7d85e92044901e40b40d3cc9be67ce7591932a07390df1cfd7e152"
328+
]
329+
}
330+
},
331+
"celestia_force_new_chain": true,
332+
"memseq": {
333+
"sequencer_chain_id": "test",
334+
"sequencer_database_path": "/tmp/sequencer",
335+
"memseq_build_time": 500,
336+
"memseq_max_block_size": 2048
337+
},
338+
"da_light_node_is_initial": true,
339+
"initial_height": 0,
340+
"access_control": {
341+
"ingress_account_whitelist": null
342+
},
343+
"digest_store": {
344+
"digest_store_db_path": "/tmp/nix-shell.rSYGNN/digest_store_db"
345+
}
346+
},
347+
"mcr": {
348+
"eth_connection": {
349+
"eth_rpc_connection_protocol": "https",
350+
"eth_rpc_connection_hostname": "ethereum-holesky-rpc.publicnode.com",
351+
"eth_rpc_connection_port": 443,
352+
"eth_ws_connection_protocol": "ws",
353+
"eth_ws_connection_hostname": "ethereum-holesky-rpc.publicnode.com",
354+
"eth_ws_connection_port": 443,
355+
"eth_chain_id": 0
356+
},
357+
"settle": {
358+
"should_settle": false,
359+
"signer_identifier": {
360+
"Local": {
361+
"private_key_hex_bytes": "..."
362+
}
363+
},
364+
"mcr_contract_address": "0x5fc8d32690cc91d4c39d9d3abcbd16989f875707",
365+
"settlement_super_block_size": 1,
366+
"settlement_admin_mode": false
367+
},
368+
"transactions": {
369+
"gas_limit": 10000000000000000,
370+
"batch_timeout": 2000,
371+
"transaction_send_retries": 10
372+
},
373+
"maybe_run_local": true,
374+
"deploy": null,
375+
"testing": null
376+
},
377+
"da_db": {
378+
"da_db_path": "/.movement/movement-da-db",
379+
"start_sync_height": 0,
380+
"allow_sync_from_zero": false
381+
},
382+
"execution_extension": {
383+
"block_retry_count": 10,
384+
"block_retry_increment_microseconds": 5000
385+
},
386+
"syncing": {
387+
"movement_sync": null,
388+
"application_id": [
389+
26,
390+
43,
391+
...
392+
242,
393+
3
394+
],
395+
"syncer_id": [
396+
138,
397+
138,
398+
...
399+
187,
400+
41
401+
],
402+
"root_dir": "/.movement"
403+
}
404+
}
405+
406+
407+
```

docs/movement-node/run-fullnode/ansible/devnet/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ We've provided a hardcoded Ansible playbook for joining the Movement Testnet as
55
ansible-playbook --inventory <your-inventory> \
66
--user ubuntu \
77
--extra-vars "movement_container_version=${CONTAINER_REV}" \
8+
--extra-vars "movement_repo_commit=${MOVEMENT_COMMIT}" \
89
--extra-vars "user=ubuntu" \
910
docs/movement-node/run-fullnode/ansible/devnet/movement-node.yml \
1011
--private-key your-private-key.pem

docs/movement-node/run-fullnode/ansible/devnet/movement-fullnode.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
git:
2828
repo: "{{ repo_url }}"
2929
dest: "{{ destination_path }}"
30-
version: "{{ movement_container_version }}"
30+
version: "{{ movement_repo_commit }}"
3131
clone: yes
3232
update: yes
3333
force: true

docs/movement-node/run-fullnode/ansible/mainnet/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ We've provided a hardcoded Ansible playbook for joining the Movement Mainnet as
55
ansible-playbook --inventory <your-inventory> \
66
--user ubuntu \
77
--extra-vars "movement_container_version=${CONTAINER_REV}" \
8+
--extra-vars "movement_repo_commit=${MOVEMENT_COMMIT}" \
89
--extra-vars "user=ubuntu" \
910
docs/movement-node/run-fullnode/ansible/mainnet/movement-fullnode.yml \
1011
--private-key your-private-key.pem

docs/movement-node/run-fullnode/ansible/mainnet/movement-fullnode.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
git:
2727
repo: "{{ repo_url }}"
2828
dest: "{{ destination_path }}"
29-
version: "{{ movement_container_version }}"
29+
version: "{{ movement_repo_commit }}"
3030
clone: yes
3131
update: yes
3232
force: true

docs/movement-node/run-fullnode/ansible/testnet/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ We've provided a hardcoded Ansible playbook for joining the Movement Testnet as
55
ansible-playbook --inventory <your-inventory> \
66
--user ubuntu \
77
--extra-vars "movement_container_version=${CONTAINER_REV}" \
8+
--extra-vars "movement_repo_commit=${MOVEMENT_COMMIT}" \
89
--extra-vars "user=ubuntu" \
910
docs/movement-node/run-fullnode/ansible/testnet/movement-node.yml \
1011
--private-key your-private-key.pem

docs/movement-node/run-fullnode/ansible/testnet/movement-fullnode.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
git:
2828
repo: "{{ repo_url }}"
2929
dest: "{{ destination_path }}"
30-
version: "{{ movement_container_version }}"
30+
version: "{{ movement_repo_commit }}"
3131
clone: yes
3232
update: yes
3333
force: true

0 commit comments

Comments
 (0)