|
| 1 | +include ../.env |
| 2 | +include .env |
| 3 | + |
| 4 | +include ../../Makefile |
| 5 | + |
| 6 | +## |
| 7 | +# Project Setup |
| 8 | +## |
| 9 | + |
| 10 | +.PHONY: install-rust |
| 11 | +install-rust: |
| 12 | + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y |
| 13 | + |
| 14 | +.PHONY: install-solana-cli |
| 15 | +install-solana-cli: |
| 16 | + curl -sSfL https://release.anza.xyz/v$(SOLANA_VERSION)/install | sh |
| 17 | + |
| 18 | +.PHONY: install-anchor |
| 19 | +install-anchor: |
| 20 | + cargo install --git https://github.com/coral-xyz/anchor --tag v$(ANCHOR_VERSION) anchor-cli --force |
| 21 | + |
| 22 | +.PHONY: setup-deps |
| 23 | +setup-deps: install-rust install-solana-cli install-anchor |
| 24 | + |
| 25 | +## |
| 26 | +# Deployment Workflow |
| 27 | +## |
| 28 | + |
| 29 | +# Step 1: Clone and patch the MCM program |
| 30 | +.PHONY: step1-clone-and-patch |
| 31 | +step1-clone-and-patch: |
| 32 | + @echo "==> Step 1: Cloning and patching the MCM program..." |
| 33 | + rm -rf chainlink-ccip |
| 34 | + git clone --filter=blob:none $(MCM_REPO) chainlink-ccip |
| 35 | + cd chainlink-ccip && \ |
| 36 | + git checkout $(MCM_COMMIT) |
| 37 | + |
| 38 | +# Step 2: Build and deploy the MCM program |
| 39 | +.PHONY: step2-build-and-deploy |
| 40 | +step2-build-and-deploy: |
| 41 | + @echo "==> Step 2: Building and deploying the MCM program..." |
| 42 | + mkdir -p chainlink-ccip/chains/solana/contracts/target/deploy/ && \ |
| 43 | + cp $(MCM_KEYPAIR) chainlink-ccip/chains/solana/contracts/target/deploy/mcm-keypair.json |
| 44 | + cd chainlink-ccip/chains/solana/contracts && \ |
| 45 | + anchor keys sync && \ |
| 46 | + anchor build -p mcm && \ |
| 47 | + anchor deploy --provider.cluster $(CLUSTER) --provider.wallet $(AUTHORITY) -p mcm |
| 48 | + |
| 49 | +# Step 3: Generate deploy artifacts (use solana explorer to get the signature of the deployWithMaxDataLen tx) |
| 50 | +.PHONY: step3-generate-deploy-artifacts |
| 51 | +step3-generate-deploy-artifacts: |
| 52 | + @echo "==> Step 3: Generating MCM deploy artifacts..." |
| 53 | + make sol-confirm SIG=$(MCM_DEPLOY_SIGNATURE) output=artifacts/mcm-deploy-artifacts.json |
| 54 | + |
| 55 | +# Step 4: Initialize the multisigs(inherited from parent) |
| 56 | +.PHONY: step4-init-multisigs |
| 57 | +step4-init-multisigs: |
| 58 | + @echo "==> Step 4: Initializing MCM multisigs..." |
| 59 | + make mcm-multisig-init \ |
| 60 | + MCM_MULTISIG_ID=$(MCM_MULTISIG_ID_0) \ |
| 61 | + MCM_MULTISIG_INIT_ARTIFACT=$(MCM_MULTISIG_INIT_ARTIFACT_0) |
| 62 | + make mcm-multisig-init \ |
| 63 | + MCM_MULTISIG_ID=$(MCM_MULTISIG_ID_1) \ |
| 64 | + MCM_MULTISIG_INIT_ARTIFACT=$(MCM_MULTISIG_INIT_ARTIFACT_1) |
| 65 | + @echo "==> MCM multisig authority for multisig 0..." |
| 66 | + make mcm-multisig-print-authority \ |
| 67 | + MCM_MULTISIG_ID=$(MCM_MULTISIG_ID_0) |
| 68 | + @echo "==> MCM multisig authority for multisig 1..." |
| 69 | + make mcm-multisig-print-authority \ |
| 70 | + MCM_MULTISIG_ID=$(MCM_MULTISIG_ID_1) |
| 71 | + |
| 72 | +# Step 5: Initialize the signers for multisigs(inherited from parent) |
| 73 | +.PHONY: step5-init-signers |
| 74 | +step5-init-signers: |
| 75 | + @echo "==> Step 5: Initializing MCM signers for multisigs..." |
| 76 | + make mcm-signers-all \ |
| 77 | + MCM_MULTISIG_ID=$(MCM_MULTISIG_ID_0) \ |
| 78 | + MCM_SIGNERS_INIT_ARTIFACT=$(MCM_SIGNERS_INIT_ARTIFACT_0) \ |
| 79 | + MCM_SIGNERS_APPEND_ARTIFACT=$(MCM_SIGNERS_APPEND_ARTIFACT_0) \ |
| 80 | + MCM_SIGNERS_FINALIZE_ARTIFACT=$(MCM_SIGNERS_FINALIZE_ARTIFACT_0) \ |
| 81 | + MCM_SIGNERS_SET_CONFIG_ARTIFACT=$(MCM_SIGNERS_SET_CONFIG_ARTIFACT_0) |
| 82 | + make mcm-signers-all \ |
| 83 | + MCM_MULTISIG_ID=$(MCM_MULTISIG_ID_1) \ |
| 84 | + MCM_SIGNERS_INIT_ARTIFACT=$(MCM_SIGNERS_INIT_ARTIFACT_1) \ |
| 85 | + MCM_SIGNERS_APPEND_ARTIFACT=$(MCM_SIGNERS_APPEND_ARTIFACT_1) \ |
| 86 | + MCM_SIGNERS_FINALIZE_ARTIFACT=$(MCM_SIGNERS_FINALIZE_ARTIFACT_1) \ |
| 87 | + MCM_SIGNERS_SET_CONFIG_ARTIFACT=$(MCM_SIGNERS_SET_CONFIG_ARTIFACT_1) |
| 88 | + |
| 89 | +# Step 6: Create accept-ownership proposals (inherited from parent) |
| 90 | +.PHONY: step6-create-accept-ownership-proposals |
| 91 | +step6-create-accept-ownership-proposals: |
| 92 | + @echo "==> Step 6: Creating MCM accept-ownership proposals..." |
| 93 | + make mcm-proposal-accept-ownership \ |
| 94 | + MCM_MULTISIG_ID=$(MCM_MULTISIG_ID_0) \ |
| 95 | + MCM_PROPOSAL_OUTPUT=$(MCM_PROPOSAL_OUTPUT_0) |
| 96 | + make mcm-proposal-accept-ownership \ |
| 97 | + MCM_MULTISIG_ID=$(MCM_MULTISIG_ID_1) \ |
| 98 | + MCM_PROPOSAL_OUTPUT=$(MCM_PROPOSAL_OUTPUT_1) |
| 99 | + |
| 100 | +# Step 7: Sign the proposals (inherited from parent) |
| 101 | +.PHONY: step7-sign-proposals |
| 102 | +step7-sign-proposals: |
| 103 | + @echo "==> Step 7: Signing MCM proposals..." |
| 104 | + make mcm-sign \ |
| 105 | + MCM_PROPOSAL_OUTPUT=$(MCM_PROPOSAL_OUTPUT_0) |
| 106 | + make mcm-sign \ |
| 107 | + MCM_PROPOSAL_OUTPUT=$(MCM_PROPOSAL_OUTPUT_1) |
| 108 | + |
| 109 | +# Step 8: Execute ownership transfers (inherited from parent) |
| 110 | +.PHONY: step8-execute-ownership-transfers |
| 111 | +step8-execute-ownership-transfers: |
| 112 | + @echo "==> Step 8: Executing MCM ownership transfers..." |
| 113 | + make mcm-ownership-transfer \ |
| 114 | + MCM_MULTISIG_ID=$(MCM_MULTISIG_ID_0) \ |
| 115 | + MCM_PROPOSED_OWNER=$(MCM_AUTHORITY_0) \ |
| 116 | + MCM_OWNERSHIP_TRANSFER_ARTIFACT=$(MCM_OWNERSHIP_TRANSFER_ARTIFACT_0) |
| 117 | + make mcm-all \ |
| 118 | + MCM_PROPOSAL_OUTPUT=$(MCM_PROPOSAL_OUTPUT_0) \ |
| 119 | + MCM_SIGNATURES=$(MCM_SIGNATURES_0) \ |
| 120 | + MCM_SIGNATURES_INIT_ARTIFACT=$(MCM_SIGNATURES_INIT_ARTIFACT_0) \ |
| 121 | + MCM_SIGNATURES_APPEND_ARTIFACT=$(MCM_SIGNATURES_APPEND_ARTIFACT_0) \ |
| 122 | + MCM_SIGNATURES_FINALIZE_ARTIFACT=$(MCM_SIGNATURES_FINALIZE_ARTIFACT_0) \ |
| 123 | + MCM_PROPOSAL_SET_ROOT_ARTIFACT=$(MCM_PROPOSAL_SET_ROOT_ARTIFACT_0) \ |
| 124 | + MCM_PROPOSAL_EXECUTE_ARTIFACT=$(MCM_PROPOSAL_EXECUTE_ARTIFACT_0) |
| 125 | + make mcm-ownership-transfer \ |
| 126 | + MCM_MULTISIG_ID=$(MCM_MULTISIG_ID_1) \ |
| 127 | + MCM_PROPOSED_OWNER=$(MCM_AUTHORITY_1) \ |
| 128 | + MCM_OWNERSHIP_TRANSFER_ARTIFACT=$(MCM_OWNERSHIP_TRANSFER_ARTIFACT_1) |
| 129 | + make mcm-all \ |
| 130 | + MCM_PROPOSAL_OUTPUT=$(MCM_PROPOSAL_OUTPUT_1) \ |
| 131 | + MCM_SIGNATURES=$(MCM_SIGNATURES_1) \ |
| 132 | + MCM_SIGNATURES_INIT_ARTIFACT=$(MCM_SIGNATURES_INIT_ARTIFACT_1) \ |
| 133 | + MCM_SIGNATURES_APPEND_ARTIFACT=$(MCM_SIGNATURES_APPEND_ARTIFACT_1) \ |
| 134 | + MCM_SIGNATURES_FINALIZE_ARTIFACT=$(MCM_SIGNATURES_FINALIZE_ARTIFACT_1) \ |
| 135 | + MCM_PROPOSAL_SET_ROOT_ARTIFACT=$(MCM_PROPOSAL_SET_ROOT_ARTIFACT_1) \ |
| 136 | + MCM_PROPOSAL_EXECUTE_ARTIFACT=$(MCM_PROPOSAL_EXECUTE_ARTIFACT_1) |
| 137 | + |
| 138 | +# Step 9: Transfer upgrade authority (inherited from parent) |
| 139 | +.PHONY: step9-transfer-upgrade-authority |
| 140 | +step9-transfer-upgrade-authority: |
| 141 | + @echo "==> Step 9: Transferring MCM upgrade authority..." |
| 142 | + make sol-program-set-upgrade-authority |
| 143 | + make sol-program-show |
| 144 | + |
| 145 | +# Step 10: Generate set-upgrade-authority artifacts (use solana explorer to get the signature of the set-upgrade-authority tx) |
| 146 | +.PHONY: step10-generate-set-upgrade-authority-artifacts |
| 147 | +step10-generate-set-upgrade-authority-artifacts: |
| 148 | + @echo "==> Step 10: Generating MCM set-upgrade-authority artifacts..." |
| 149 | + make sol-confirm SIG=$(SET_UPGRADE_AUTHORITY_SIGNATURE) output=artifacts/set-upgrade-authority-artifacts.json |
| 150 | + |
| 151 | +# Step 11: Fund MCM authorities (inherited from parent) |
| 152 | +.PHONY: step11-fund-mcm-authorities |
| 153 | +step11-fund-mcm-authorities: |
| 154 | + @echo "==> Step 11: Funding MCM authorities..." |
| 155 | + make sol-transfer SOL_RECIPIENT=$(MCM_AUTHORITY_0) output=artifacts/fund-mcm-authority-0.json |
| 156 | + make sol-transfer SOL_RECIPIENT=$(MCM_AUTHORITY_1) output=artifacts/fund-mcm-authority-1.json |
0 commit comments