diff --git a/.github/workflows/arkproject-deploy-contracts-sepolia.yml b/.github/workflows/arkproject-deploy-contracts-sepolia.yml index 2c788ada1..bd041de05 100644 --- a/.github/workflows/arkproject-deploy-contracts-sepolia.yml +++ b/.github/workflows/arkproject-deploy-contracts-sepolia.yml @@ -44,61 +44,91 @@ jobs: STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_SEPOLIA: ${{ secrets.STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_SEPOLIA }} run: | pnpm run deploy:starknet -- --starknet sepolia - # deploy-orderbook: - # needs: deploy-starknet - # runs-on: ubuntu-latest - # name: Build & Deploy orderbook contract - # steps: - # - name: Checkout repository - # uses: actions/checkout@v2 - # - name: Set up Node.js - # uses: actions/setup-node@v2 - # with: - # node-version: "20" + - name: Setup SSH + uses: webfactory/ssh-agent@v0.5.3 + with: + ssh-private-key: ${{ secrets.SCALEWAY_SSH_KEY }} + + - name: Upload generated messaging file to Scaleway instance + env: + SCALEWAY_MAINNET_IP: ${{ secrets.SCALEWAY_MAINNET_IP }} + run: | + scp -o StrictHostKeyChecking=no ./messaging.json root@${{ env.SCALEWAY_MAINNET_IP }}:/root/solis/config/messaging.json - # - name: Setup Scarb - # uses: software-mansion/setup-scarb@v1 - # with: - # scarb-version: 2.5.4 + - name: Restart solis service on Scaleway instance + env: + SCALEWAY_MAINNET_IP: ${{ secrets.SCALEWAY_MAINNET_IP }} + run: | + ssh -o StrictHostKeyChecking=no root@${{ env.SCALEWAY_MAINNET_IP }} 'sudo systemctl restart solis.service' + + - name: Commit and Push Generated contract file + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git config --global user.email "account@screenshot.co" + git config --global user.name "Solis Bot" + git add contracts.json + if ! git diff --cached --quiet; then + git commit -m "feat: update contracts.json for sepolia deployment" + git push https://x-access-token:${GITHUB_TOKEN}@github.com/${{ github.repository }}.git HEAD:${{ github.ref }} + else + echo "No changes to commit" + deploy-orderbook: + needs: deploy-starknet + runs-on: ubuntu-latest + name: Build & Deploy orderbook contract + steps: + - name: Checkout repository + uses: actions/checkout@v2 - # - name: Build contracts - # run: | - # cd contracts - # scarb build --workspace + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: "20" - # - name: Install pnpm & dependencies - # run: | - # npm install -g pnpm - # pnpm install + - name: Setup Scarb + uses: software-mansion/setup-scarb@v1 + with: + scarb-version: 2.5.4 - # - name: Deploy orderbook contracts - # env: - # STARKNET_NODE_URL_SEPOLIA: ${{ secrets.STARKNET_NODE_URL_SEPOLIA }} - # SOLIS_NODE_URL_SEPOLIA: ${{ secrets.SOLIS_NODE_URL_SEPOLIA }} - # STARKNET_ADMIN_ADDRESS_SEPOLIA: ${{ secrets.STARKNET_ADMIN_ADDRESS_SEPOLIA }} - # STARKNET_ADMIN_PRIVATE_KEY_SEPOLIA: ${{ secrets.STARKNET_ADMIN_PRIVATE_KEY_SEPOLIA }} - # STARKNET_ADMIN_PUBLIC_KEY_SEPOLIA: ${{ secrets.STARKNET_ADMIN_PUBLIC_KEY_SEPOLIA }} - # STARKNET_SOLIS_ACCOUNT_ADDRESS_SEPOLIA: ${{ secrets.STARKNET_SOLIS_ACCOUNT_ADDRESS_SEPOLIA }} - # STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY_SEPOLIA: ${{ secrets.STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY_SEPOLIA }} - # STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_SEPOLIA: ${{ secrets.STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_SEPOLIA }} - # SOLIS_ADMIN_ADDRESS_SEPOLIA: ${{ secrets.SOLIS_ADMIN_ADDRESS_SEPOLIA }} - # SOLIS_ADMIN_PRIVATE_KEY_SEPOLIA: ${{ secrets.SOLIS_ADMIN_PRIVATE_KEY_SEPOLIA }} - # SOLIS_ADMIN_PUBLIC_KEY_SEPOLIA: ${{ secrets.SOLIS_ADMIN_PUBLIC_KEY_SEPOLIA }} - # RPC_USER: ${{ secrets.RPC_USER }} - # RPC_PASSWORD: ${{ secrets.RPC_PASSWORD }} - # run: | - # pnpm run deploy:solis -- --solis sepolia --starknet sepolia - # - name: Commit and Push Generated contract file - # env: - # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # run: | - # git config --global user.email "account@screenshot.co" - # git config --global user.name "Solis Bot" - # git add contracts.json - # if ! git diff --cached --quiet; then - # git commit -m "feat: update contracts.json for sepolia deployment" - # git push https://x-access-token:${GITHUB_TOKEN}@github.com/${{ github.repository }}.git HEAD:${{ github.ref }} - # else - # echo "No changes to commit" - # fi + - name: Build contracts + run: | + cd contracts + scarb build --workspace + + - name: Install pnpm & dependencies + run: | + npm install -g pnpm + pnpm install + + - name: Deploy orderbook contracts + env: + STARKNET_NODE_URL_SEPOLIA: ${{ secrets.STARKNET_NODE_URL_SEPOLIA }} + SOLIS_NODE_URL_SEPOLIA: ${{ secrets.SOLIS_NODE_URL_SEPOLIA }} + STARKNET_ADMIN_ADDRESS_SEPOLIA: ${{ secrets.STARKNET_ADMIN_ADDRESS_SEPOLIA }} + STARKNET_ADMIN_PRIVATE_KEY_SEPOLIA: ${{ secrets.STARKNET_ADMIN_PRIVATE_KEY_SEPOLIA }} + STARKNET_ADMIN_PUBLIC_KEY_SEPOLIA: ${{ secrets.STARKNET_ADMIN_PUBLIC_KEY_SEPOLIA }} + STARKNET_SOLIS_ACCOUNT_ADDRESS_SEPOLIA: ${{ secrets.STARKNET_SOLIS_ACCOUNT_ADDRESS_SEPOLIA }} + STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY_SEPOLIA: ${{ secrets.STARKNET_SOLIS_ACCOUNT_PRIVATE_KEY_SEPOLIA }} + STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_SEPOLIA: ${{ secrets.STARKNET_SOLIS_ACCOUNT_PUBLIC_KEY_SEPOLIA }} + SOLIS_ADMIN_ADDRESS_SEPOLIA: ${{ secrets.SOLIS_ADMIN_ADDRESS_SEPOLIA }} + SOLIS_ADMIN_PRIVATE_KEY_SEPOLIA: ${{ secrets.SOLIS_ADMIN_PRIVATE_KEY_SEPOLIA }} + SOLIS_ADMIN_PUBLIC_KEY_SEPOLIA: ${{ secrets.SOLIS_ADMIN_PUBLIC_KEY_SEPOLIA }} + RPC_USER: ${{ secrets.RPC_USER }} + RPC_PASSWORD: ${{ secrets.RPC_PASSWORD }} + run: | + pnpm run deploy:solis -- --solis sepolia --starknet sepolia + - name: Commit and Push Generated contract file + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git config --global user.email "account@screenshot.co" + git config --global user.name "Solis Bot" + git add contracts.json + if ! git diff --cached --quiet; then + git commit -m "feat: update contracts.json for sepolia deployment" + git push https://x-access-token:${GITHUB_TOKEN}@github.com/${{ github.repository }}.git HEAD:${{ github.ref }} + else + echo "No changes to commit" + fi diff --git a/packages/deployer/src/deployStarknetContracts.ts b/packages/deployer/src/deployStarknetContracts.ts index e5c68c53b..817b1580c 100644 --- a/packages/deployer/src/deployStarknetContracts.ts +++ b/packages/deployer/src/deployStarknetContracts.ts @@ -1,7 +1,7 @@ import { promises as fs } from "fs"; +import path from "path"; import { program } from "commander"; -import * as sn from "starknet"; import { ProviderNetwork } from "./types"; @@ -16,12 +16,12 @@ import { getFeeAddress, getStarknetProvider } from "./providers"; import { getContractsFilePath, getExistingContracts, - getMessagingFilePath, getStarknetAccounts } from "./utils"; async function deployStarknetContracts(starknetNetwork: ProviderNetwork) { - const { provider: starknetProvider } = getStarknetProvider(starknetNetwork); + const { provider: starknetProvider, nodeUrl: starknetNodeUrl } = + getStarknetProvider(starknetNetwork); const { starknetAdminAccount, starknetSolisAccount } = getStarknetAccounts(starknetNetwork); const existingContracts = await getExistingContracts(); @@ -30,7 +30,8 @@ async function deployStarknetContracts(starknetNetwork: ProviderNetwork) { console.log("=================\n"); console.log(`| Admin account | ${starknetAdminAccount.address}`); const starknetSpinner = loading("💅 Deploying Starknet Contracts...").start(); - let messagingContract: sn.Contract; + + let messagingContract; if (existingContracts[starknetNetwork].messaging) { console.log("⚡ Upgrading Messaging Contract..."); starknetSpinner.text = "⚡ Upgrading Messaging Contract..."; @@ -55,8 +56,9 @@ async function deployStarknetContracts(starknetNetwork: ProviderNetwork) { JSON.stringify(existingContracts) ); } + starknetSpinner.text = "⚡ Deploying Executor Contract..."; - let executorContract: sn.Contract; + let executorContract; if (existingContracts[starknetNetwork].executor) { console.log("⚡ Upgrading Executor Contract.."); starknetSpinner.text = "⚡ Upgrading Executor Contract..."; @@ -67,7 +69,6 @@ async function deployStarknetContracts(starknetNetwork: ProviderNetwork) { existingContracts[starknetNetwork].executor ); } else { - starknetSpinner.text = "⚡ Deploying Executor Contract..."; starknetSpinner.text = "⚡ Deploying Executor Contract..."; executorContract = await deployExecutor( ARTIFACTS_PATH, @@ -81,13 +82,34 @@ async function deployStarknetContracts(starknetNetwork: ProviderNetwork) { getContractsFilePath(), JSON.stringify(existingContracts) ); - const messagingFilePath = getMessagingFilePath(starknetNetwork); - const configData = JSON.parse(await fs.readFile(messagingFilePath, "utf8")); - configData.contract_address = messagingContract.address; - configData.sender_address = starknetSolisAccount?.address; - configData.private_key = starknetSolisAccount?.privateKey; - await fs.writeFile(messagingFilePath, JSON.stringify(configData, null, 2)); } + + // Determine from_block based on the network + let fromBlock; + if (starknetNetwork === "sepolia") { + fromBlock = 72242; + } else if (starknetNetwork === "mainnet") { + fromBlock = 644128; + } else { + fromBlock = 0; // default or handle other networks if any + } + + // Create the messaging file at the root of the project + const messagingFilePath = path.join(process.cwd(), "messaging.json"); + const messagingFileContent = { + chain: "starknet", + rpc_url: starknetNodeUrl, + contract_address: messagingContract.address, + sender_address: starknetSolisAccount?.address, + private_key: starknetSolisAccount?.privateKey, + interval: 10, + from_block: fromBlock + }; + await fs.writeFile( + messagingFilePath, + JSON.stringify(messagingFileContent, null, 2) + ); + starknetSpinner.stop(); console.log("STARKNET CONTRACTS"); console.log("==================\n");