fetch-programs.sh 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. # Source this file.
  2. #
  3. # Fetches on-chain programs and produces the solana-genesis command-line
  4. # arguments needed to install them
  5. #
  6. upgradeableLoader=BPFLoaderUpgradeab1e11111111111111111111111
  7. fetch_program() {
  8. declare prefix=$1
  9. declare name=$2
  10. declare version=$3
  11. declare address=$4
  12. declare loader=$5
  13. declare download_url=$6
  14. declare so=$prefix-$name-$version.so
  15. if [[ $loader == "$upgradeableLoader" ]]; then
  16. genesis_args+=(--upgradeable-program "$address" "$loader" "$so" none)
  17. else
  18. genesis_args+=(--bpf-program "$address" "$loader" "$so")
  19. fi
  20. if [[ -r $so ]]; then
  21. return
  22. fi
  23. if [[ -r ~/.cache/solana-$prefix/$so ]]; then
  24. cp ~/.cache/solana-"$prefix"/"$so" "$so"
  25. else
  26. echo "Downloading $name $version"
  27. (
  28. set -x
  29. curl -L --retry 5 --retry-delay 2 --retry-connrefused -o "$so" "$download_url"
  30. )
  31. mkdir -p ~/.cache/solana-"$prefix"
  32. cp "$so" ~/.cache/solana-"$prefix"/"$so"
  33. fi
  34. }
  35. fetch_programs() {
  36. declare prefix=$1
  37. shift
  38. declare -a programs=("$@")
  39. for program in "${programs[@]}"; do
  40. # shellcheck disable=SC2086
  41. fetch_program "$prefix" $program
  42. done
  43. echo "${genesis_args[@]}" > "$prefix"-genesis-args.sh
  44. echo
  45. echo "Available $prefix programs:"
  46. ls -l "$prefix"-*.so
  47. echo
  48. echo "solana-genesis command-line arguments ($prefix-genesis-args.sh):"
  49. cat "$prefix"-genesis-args.sh
  50. }