Makefile 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. # Chain ids
  2. # ---------
  3. CHAIN_ID_solana=1
  4. CHAIN_ID_fogo=51
  5. # Solana addresses
  6. # ----------------
  7. # Mainnet buffer authority is the "upgrade" PDA
  8. bridge_ADDRESS_solana_mainnet=worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth
  9. bridge_AUTHORITY_solana_mainnet=2rCAC1VKz5YP1jZTHcVfWDhHMs2iEruUaATdeZe5Fjk5
  10. token_bridge_ADDRESS_solana_mainnet=wormDTUJ6AWPNvk59vGQbDvGJmqbDTdgWgAqcLBCgUb
  11. token_bridge_AUTHORITY_solana_mainnet=DHyAcRbFpRWTkcsAsfwQpbABXvtjs6bQ1dq5ScNhRDoQ
  12. nft_bridge_ADDRESS_solana_mainnet=WnFt12ZrnzZrFZkt2xsNsaNWoQribnuQ5B5FrDbwDhD
  13. nft_bridge_AUTHORITY_solana_mainnet=3cVZHphy4QUYnU1hYFyvHF9joeZJ6ZTxpWx1nzavaUa8
  14. # Testnet buffer authority is the deployer public key
  15. bridge_ADDRESS_solana_testnet=3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5
  16. bridge_AUTHORITY_solana_testnet=J8am6SkUHRTtLPJpnfUd6Uy38U7Yh17fa7ZtiqaLoJcV
  17. token_bridge_ADDRESS_solana_testnet=DZnkkTmCiFWfYTfT41X3Rd1kDgozqzxWaHqsw6W4x2oe
  18. token_bridge_AUTHORITY_solana_testnet=FQAHqBcVHiiiLP8qXKPDQGr3mEXLv7RSdvfHJ3ZLugBV
  19. nft_bridge_ADDRESS_solana_testnet=2rHhojZ7hpu1zA91nvZmT8TqWWvMcKmmNBCr2mKTtMq4
  20. nft_bridge_AUTHORITY_solana_testnet=9r6q2iEg4MBevjC8reaLmQUDxueF3vabUoqDkZ2LoAYe
  21. # Devnet buffer authority is the devnet public key
  22. bridge_ADDRESS_solana_devnet=Bridge1p5gheXUvJ6jGWGeCsgPKgnE3YgdGKRVCMY9o
  23. bridge_AUTHORITY_solana_devnet=6sbzC1eH4FTujJXWj51eQe25cYvr4xfXbJ1vAj7j2k5J
  24. token_bridge_ADDRESS_solana_devnet=B6RHG3mfcckmrYN1UhmJzyS1XX3fZKbkeUcpJe9Sy3FE
  25. token_bridge_AUTHORITY_solana_devnet=6sbzC1eH4FTujJXWj51eQe25cYvr4xfXbJ1vAj7j2k5J
  26. nft_bridge_ADDRESS_solana_devnet=NFTWqJR8YnRVqPDvTJrYuLrQDitTG5AScqbeghi4zSA
  27. nft_bridge_AUTHORITY_solana_devnet=6sbzC1eH4FTujJXWj51eQe25cYvr4xfXbJ1vAj7j2k5J
  28. # Fogo SVM addresses
  29. # -------------------
  30. # Testnet
  31. bridge_ADDRESS_fogo_testnet=BhnQyKoQQgpuRTRo6D8Emz93PvXCYfVgHhnrR4T3qhw4
  32. bridge_AUTHORITY_fogo_testnet=34NzRtyigDRthGuWTCcaVRN6sHjkJc86fFNkqjvtghXs
  33. token_bridge_ADDRESS_fogo_testnet=78HdStBqCMioGii9D8mF3zQaWDqDZBQWTUwjjpdmbJKX
  34. token_bridge_AUTHORITY_fogo_testnet=CDZR3RgCs21mJS2uYKFmof24iiryxJAb8R2Wk9Rgg3Pw
  35. # Mainnet
  36. bridge_ADDRESS_fogo_mainnet=worm2mrQkG1B1KTz37erMfWN8anHkSK24nzca7UD8BB
  37. bridge_AUTHORITY_fogo_mainnet=CAb6rWkJAMMX4feJQgJZvBg2sK5Z5Tn2i48njRhSL9sw
  38. token_bridge_ADDRESS_fogo_mainnet=wormQuCVWSSmPdjVmEzAWxAXViVyTSWnLyhff5hVYGS
  39. token_bridge_AUTHORITY_fogo_mainnet=BAaVJ8fzpw8WJJqER9LK5ezTvxmG5VvFRgAWh21jJchz
  40. # Fogo specific RPC URLs.
  41. # for testnet we use the alt endpoint because of solana-cli issues with certs
  42. # at the time of writing.
  43. FOGO_RPC_URL_MAINNET=https://mainnet.fogo.io
  44. FOGO_RPC_URL_TESTNET=https://testnet-alt.fogo.io
  45. SOURCE_FILES:=$(shell find . -name "*.rs" -or -name "*.lock" -or -name "*.toml" | grep -v "target") Dockerfile
  46. .PHONY: clean all help artifacts deploy/bridge deploy/token_bridge deploy/nft_bridge .FORCE fmt check clippy test
  47. -include ../Makefile.help
  48. .FORCE:
  49. ## Build contracts.
  50. artifacts: check-svmchain-name check-network artifacts-$(SVM)-$(NETWORK)
  51. .PHONY: check-network
  52. check-network:
  53. ifndef bridge_ADDRESS_$(SVM)_$(NETWORK)
  54. $(error Invalid or missing NETWORK and/or SVM. Please call with `$(MAKE) $(MAKECMDGOALS) SVM=[solana | fogo] NETWORK=[mainnet | testnet | devnet]`)
  55. endif
  56. check-svmchain-name:
  57. @if [ -z "$(SVM)" ] || [ "$(filter $(SVM), solana fogo)" != "$(SVM)" ]; then \
  58. echo "Error: Invalid or missing SVM. Valid options are 'solana' and 'fogo'"; \
  59. exit 1; \
  60. fi
  61. artifacts-$(SVM)-$(NETWORK): $(SOURCE_FILES)
  62. echo $@
  63. @echo "Building artifacts for ${SVM} ${NETWORK} (${bridge_ADDRESS_$${SVM}_${NETWORK}})"
  64. DOCKER_BUILDKIT=1 docker build -f Dockerfile --build-arg BRIDGE_ADDRESS=${bridge_ADDRESS_${SVM}_${NETWORK}} --build-arg CHAIN_ID=${CHAIN_ID_${SVM}} -o $@ .
  65. cd $@ && ls | xargs sha256sum > checksums.txt
  66. payer-$(SVM)-$(NETWORK).json:
  67. $(error Missing private key in payer-$(SVM)-$(NETWORK).json)
  68. %-buffer-$(SVM)-$(NETWORK).txt: payer-$(SVM)-$(NETWORK).json check-network
  69. $(eval FLAG := $(shell echo $(if $(filter fogo,$(SVM)),\
  70. $(if $(filter mainnet,$(NETWORK)), $(FOGO_RPC_URL_MAINNET),\
  71. $(if $(filter testnet,$(NETWORK)), $(FOGO_RPC_URL_TESTNET),\
  72. l)),\
  73. $(if $(filter mainnet,$(NETWORK)), m,\
  74. $(if $(filter testnet,$(NETWORK)), d,\
  75. l)))))
  76. solana -k payer-${SVM}-${NETWORK}.json program write-buffer artifacts-$(SVM)-$(NETWORK)/$*.so -u $(FLAG) | cut -f2 -d' ' > $@
  77. solana -k payer-${SVM}-${NETWORK}.json program set-buffer-authority $$(cat $@) --new-buffer-authority $($*_AUTHORITY_$(SVM)_$(NETWORK)) -u $(FLAG)
  78. ## Deploy core bridge program.
  79. deploy/bridge: bridge-buffer-$(SVM)-$(NETWORK).txt
  80. @echo Deployed core bridge contract at:
  81. @cat $<
  82. ## Deploy token bridge program.
  83. deploy/token_bridge: token_bridge-buffer-$(SVM)-$(NETWORK).txt
  84. @echo Deployed token bridge contract at:
  85. @cat $<
  86. ## Deploy nft bridge program.
  87. deploy/nft_bridge: nft_bridge-buffer-$(SVM)-$(NETWORK).txt
  88. @echo Deployed nft bridge contract at:
  89. @cat $<
  90. .PHONY: wasm
  91. ## Build wasm
  92. wasm: $(SOURCE_FILES)
  93. DOCKER_BUILDKIT=1 docker build -f Dockerfile.wasm -o type=local,dest=$@ .
  94. cp -r $@/* ..
  95. fmt: $(SOURCE_FILES)
  96. cargo fmt --check --all --manifest-path Cargo.toml
  97. check: $(SOURCE_FILES)
  98. cargo check --workspace --tests --manifest-path Cargo.toml \
  99. --features "nft-bridge/instructions token-bridge/instructions wormhole-bridge-solana/instructions"
  100. clippy: $(SOURCE_FILES)
  101. cargo clippy --workspace --tests --manifest-path Cargo.toml \
  102. --features "nft-bridge/instructions token-bridge/instructions wormhole-bridge-solana/instructions"
  103. test: $(SOURCE_FILES) check-svmchain-name
  104. DOCKER_BUILDKIT=1 docker build -f Dockerfile --build-arg BRIDGE_ADDRESS=${bridge_ADDRESS_${SVM}_devnet} \
  105. --build-arg CHAIN_ID=${CHAIN_ID_${SVM}} \
  106. --build-arg EMITTER_ADDRESS=CiByUvEcx7w2HA4VHcPCBUAFQ73Won9kB36zW9VjirSr -o target/deploy .
  107. BPF_OUT_DIR=$(realpath $(dir $(firstword $(MAKEFILE_LIST))))/target/deploy \
  108. cargo test --workspace \
  109. --features "nft-bridge/instructions token-bridge/instructions wormhole-bridge-solana/instructions"
  110. .PHONY: build
  111. # Build for local use (not for deployment)
  112. build: check-network check-svmchain-name
  113. CHAIN_ID=${CHAIN_ID_${SVM}} \
  114. BRIDGE_ADDRESS=${bridge_ADDRESS_${SVM}_${NETWORK}} \
  115. EMITTER_ADDRESS=11111111111111111111111111111115 \
  116. cargo build
  117. clean: check-svmchain-name
  118. rm -rf artifacts-$(SVM)-mainnet artifacts-$(SVM)-testnet artifacts-$(SVM)-devnet *-buffer-*.txt