/construction/metadata
and /construction/submit
, which require an internet connection to work properly).
To support deployment in these distinct environments, it must be possible to specify an “offline” or “online” mode at startup (it is ok to default to “online”). When the “offline” mode is specified, the implementation must not attempt to open any outbound connections over the internet (i.e. attempt to peer with other nodes).
We do not recommend using multiple Dockerfiles to support these 2 modes as the overhead of maintaining two deployment artifacts across upgrades can end up being unnecessarily burdensome for both Mesh implementers and integrators.
/network/*
/block/*
/account/*
/mempool/*
/call
/construction/metadata
/construction/submit
/network/list
/network/options
/construction/derive
/construction/preprocess
/construction/payloads
/construction/combine
/construction/parse
/construction/hash
musl-libc
from Alpine, it would not be considered Ubuntu-compatible.
You may be wondering why Ubuntu is required instead of Debian or Alpine, or why there is any base image requirement at all (outside of maybe requiring any linux-based image). Many companies (especially ones extremely concerned with security) very purposely limit the number of operating systems they support on their infrastructure to simplify the tracking and patching of critical vulnerabilities in the OS. Ubuntu is one of the most popular Linux distributions and nearly all developers that will be running your implementation can support Ubuntu (even though they may not support other Linux distributions).
docker build
). For this reason, your Dockerfile must not copy any files from the directory where it is built. Instead, any required files must be downloaded from the internet with explicit versioning. If it is not possible to fetch a specific version, the hash of downloaded files must be compared with a constant defined in the Dockerfile.