From afbbb68f6f74d5415f1ab39956cd7738e2655bdf Mon Sep 17 00:00:00 2001 From: nieldeckx Date: Mon, 30 Mar 2026 13:00:46 +0200 Subject: [PATCH 1/3] fix: new stake registry to remove at-block --- .../stake/arkadiko-stake-registry-v3-1.clar | 234 ++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 clarity/contracts/stake/arkadiko-stake-registry-v3-1.clar diff --git a/clarity/contracts/stake/arkadiko-stake-registry-v3-1.clar b/clarity/contracts/stake/arkadiko-stake-registry-v3-1.clar new file mode 100644 index 000000000..69159e976 --- /dev/null +++ b/clarity/contracts/stake/arkadiko-stake-registry-v3-1.clar @@ -0,0 +1,234 @@ +;; @contract Stake Registry - Keep track of all staking pools +;; Users can stake, unstake and claim rewards from active pools. +;; DAO can activate a new pool or deactivate an existing one. +;; When a pool is deactivated, users can not stake but they can unstake. +;; @version 3.1 + +(use-trait ft-trait 'SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.sip-010-trait) +(use-trait stake-pool-trait .arkadiko-stake-pool-trait-v1.stake-pool-trait) +(use-trait stake-registry-trait .arkadiko-stake-registry-trait-v1.stake-registry-trait) +(impl-trait .arkadiko-stake-registry-trait-v1.stake-registry-trait) + +;; Errors +(define-constant ERR-INVALID-POOL (err u19001)) +(define-constant ERR-POOL-EXIST (err u19002)) +(define-constant ERR-POOL-INACTIVE (err u19003)) +(define-constant ERR-WRONG-REGISTRY (err u19004)) +(define-constant ERR-NOT-AUTHORIZED u19401) + +;; Variables +(define-data-var pool-count uint u0) + +;; Pool maps +(define-map pools-data-map + { pool: principal } + { + name: (string-ascii 256), + deactivated-block: uint, + deactivated-rewards-per-block: uint, + rewards-percentage: uint + } +) + +;; Get pool info +(define-read-only (get-pool-data (pool principal)) + (unwrap-panic (map-get? pools-data-map { pool: pool })) +) + +;; Set pool info +(define-public (set-pool-data + (pool principal) + (name (string-ascii 256)) + (deactivated-block uint) + (deactivated-rewards-per-block uint) + (rewards-percentage uint) +) + (begin + (asserts! (is-eq tx-sender (contract-call? .arkadiko-dao get-dao-owner)) (err ERR-NOT-AUTHORIZED)) + + (map-set pools-data-map + { pool: pool } + { + name: name, + deactivated-block: deactivated-block, + deactivated-rewards-per-block: deactivated-rewards-per-block, + rewards-percentage: rewards-percentage + } + ) + (ok true) + ) +) + +;; Get pool rewards per block +(define-read-only (get-rewards-per-block-for-pool (pool principal)) + (let ( + (total-staking-rewards u29362456) + (pool-percentage (get rewards-percentage (get-pool-data pool))) + (deactivated-block (get deactivated-block (get-pool-data pool))) + (deactivated-rewards-per-block (get deactivated-rewards-per-block (get-pool-data pool))) + ) + (if (is-eq deactivated-block u0) + (ok (/ (* total-staking-rewards pool-percentage) u1000000)) + (ok deactivated-rewards-per-block) + ) + ) +) + +;; Get pool deactivated block +(define-read-only (get-pool-deactivated-block (pool principal)) + (let ( + (pool-info (unwrap! (map-get? pools-data-map { pool: pool }) ERR-POOL-EXIST)) + (block (get deactivated-block pool-info)) + ) + (ok block) + ) +) + +;; @desc stake tokens +;; @param registry-trait; current stake registry, to be used by stake pool +;; @param pool-trait; pool to stake tokens in +;; @param token-trait; token to stake in pool +;; @param amount; amount of tokens to stake +;; @post uint; returns amount of staked tokens +(define-public (stake (registry-trait ) (pool-trait ) (token-trait ) (amount uint)) + (begin + (let ( + (pool (contract-of pool-trait)) + (pool-info (unwrap! (map-get? pools-data-map { pool: pool }) ERR-POOL-EXIST)) + ) + (asserts! (is-eq (as-contract tx-sender) (contract-of registry-trait)) ERR-WRONG-REGISTRY) + (asserts! (is-eq (get deactivated-block pool-info) u0) ERR-POOL-INACTIVE) + + (print { + type: "pool", + action: "stake", + data: { registry: registry-trait, pool: pool-trait, token: token-trait, amount: amount, owner: tx-sender } + }) + (contract-call? pool-trait stake registry-trait token-trait tx-sender amount) + ) + ) +) + +;; @desc unstake tokens +;; @param registry-trait; current stake registry, to be used by pool +;; @param pool-trait; pool to unstake tokens from +;; @param token-trait; token to unstake from pool +;; @param amount; amount of tokens to unstake +;; @post uint; returns amount of unstaked tokens +(define-public (unstake (registry-trait ) (pool-trait ) (token-trait ) (amount uint)) + (begin + (let ( + (pool (contract-of pool-trait)) + (pool-info (unwrap! (map-get? pools-data-map { pool: pool }) ERR-POOL-EXIST)) + ) + (asserts! (is-eq (as-contract tx-sender) (contract-of registry-trait)) ERR-WRONG-REGISTRY) + + (print { + type: "pool", + action: "unstake", + data: { registry: registry-trait, pool: pool-trait, token: token-trait, amount: amount, owner: tx-sender } + }) + (contract-call? pool-trait unstake registry-trait token-trait tx-sender amount) + ) + ) +) + +;; @desc get amount of pending DIKO rewards for pool +;; @param registry-trait; current stake registry, to be used by pool +;; @param pool-trait; pool to get pending rewards from +;; @post uint; returns amount of pending rewards +(define-public (get-pending-rewards (registry-trait ) (pool-trait )) + (begin + (let ( + (pool (contract-of pool-trait)) + (pool-info (unwrap! (map-get? pools-data-map { pool: pool }) ERR-POOL-EXIST)) + ) + (asserts! (is-eq (as-contract tx-sender) (contract-of registry-trait)) ERR-WRONG-REGISTRY) + (contract-call? pool-trait get-pending-rewards registry-trait tx-sender) + ) + ) +) + +;; @desc claim pending DIKO rewards for pool +;; @param registry-trait; current stake registry, to be used by pool +;; @param pool-trait; pool to claim rewards on +;; @post uint; returns amount of claimed rewards +(define-public (claim-pending-rewards (registry-trait ) (pool-trait )) + (begin + (asserts! (is-eq (as-contract tx-sender) (contract-of registry-trait)) ERR-WRONG-REGISTRY) + (contract-call? pool-trait claim-pending-rewards registry-trait tx-sender) + ) +) + +;; @desc claim pending DIKO rewards for pool and immediately stake in DIKO pool +;; @param registry-trait; current stake registry, to be used by pool +;; @param pool-trait; pool to claim rewards on +;; @param diko-pool-trait; DIKO pool to stake rewards +;; @param diko-token-trait; DIKO token contract +;; @post uint; returns amount of claimed/staked rewards +(define-public (stake-pending-rewards + (registry-trait ) + (pool-trait ) + (diko-pool-trait ) + (diko-token-trait ) + ) + (let ( + (claimed-rewards (unwrap-panic (contract-call? pool-trait claim-pending-rewards registry-trait tx-sender))) + ) + (asserts! (is-eq (as-contract tx-sender) (contract-of registry-trait)) ERR-WRONG-REGISTRY) + + (print { + type: "pool", + action: "stake-pending-rewards", + data: { registry: registry-trait, pool: pool-trait, owner: tx-sender } + }) + (contract-call? diko-pool-trait stake registry-trait diko-token-trait tx-sender claimed-rewards) + ) +) + +;; --------------------------------------------------------- +;; Contract initialisation +;; --------------------------------------------------------- + +(begin + ;; DIKO pool + (map-set pools-data-map + { pool: 'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-stake-pool-diko-v2-1 } + { + name: "DIKO", + deactivated-block: u0, + deactivated-rewards-per-block: u0, + rewards-percentage: u160000 ;; 16% + } + ) + ;; DIKO-USDA LP + (map-set pools-data-map + { pool: 'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-stake-pool-diko-usda-v1-1 } + { + name: "DIKO-USDA LP", + deactivated-block: u0, + deactivated-rewards-per-block: u0, + rewards-percentage: u190000 ;; 19% + } + ) + ;; wSTX-USDA LP + (map-set pools-data-map + { pool: 'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-stake-pool-wstx-usda-v1-1 } + { + name: "wSTX-USDA LP", + deactivated-block: u0, + deactivated-rewards-per-block: u0, + rewards-percentage: u310000 ;; 31% + } + ) + ;; wSTX-DIKO LP + (map-set pools-data-map + { pool: 'SP2C2YFP12AJZB4MABJBAJ55XECVS7E4PMMZ89YZR.arkadiko-stake-pool-wstx-diko-v1-1 } + { + name: "wSTX-DIKO LP", + deactivated-block: u0, + deactivated-rewards-per-block: u0, + rewards-percentage: u130000 ;; 13% + } + ) +) From 9214075797ccbe37e1fb405fc816a8b32ac2c42e Mon Sep 17 00:00:00 2001 From: Philip Date: Tue, 31 Mar 2026 10:49:38 +1300 Subject: [PATCH 2/3] fix: update UI with new stake registry --- web/components/stake.tsx | 55 ++++++++++++++------------- web/components/unstake-diko-modal.tsx | 4 +- web/components/unstake-lp-modal.tsx | 6 +-- 3 files changed, 33 insertions(+), 32 deletions(-) diff --git a/web/components/stake.tsx b/web/components/stake.tsx index 967e97586..aa40a9f6b 100644 --- a/web/components/stake.tsx +++ b/web/components/stake.tsx @@ -27,6 +27,7 @@ import { getRPCClient } from '@common/utils'; export const Stake = () => { const apiUrl = 'https://arkadiko-api.herokuapp.com'; + const registryContract = 'arkadiko-stake-registry-v3-1'; const [state, setState] = useContext(AppContext); const stxAddress = useSTXAddress(); const [showStakeModal, setShowStakeModal] = useState(false); @@ -219,7 +220,7 @@ export const Stake = () => { contractName: poolContract, functionName: 'get-pending-rewards', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, registryContract), standardPrincipalCV(stxAddress || contractAddress), ], senderAddress: stxAddress || contractAddress, @@ -416,7 +417,7 @@ export const Stake = () => { contractName: 'arkadiko-stake-pool-diko-v2-1', functionName: 'get-stake-of', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, registryContract), standardPrincipalCV(stxAddress || contractAddress), uintCV(stDikoSupply), ], @@ -435,7 +436,7 @@ export const Stake = () => { contractName: 'arkadiko-stake-pool-diko-v2-1', functionName: 'diko-for-stdiko', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, registryContract), uintCV(1000000 * 10), uintCV(stDikoSupply), ], @@ -648,10 +649,10 @@ export const Stake = () => { { stxAddress, contractAddress, - contractName: 'arkadiko-stake-registry-v2-1', + contractName: registryContract, functionName: 'claim-pending-rewards', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, registryContract), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-diko-usda-v1-1'), ], network, @@ -671,10 +672,10 @@ export const Stake = () => { { stxAddress, contractAddress, - contractName: 'arkadiko-stake-registry-v2-1', + contractName: registryContract, functionName: 'claim-pending-rewards', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, registryContract), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-wstx-usda-v1-1'), ], network, @@ -694,10 +695,10 @@ export const Stake = () => { { stxAddress, contractAddress, - contractName: 'arkadiko-stake-registry-v2-1', + contractName: registryContract, functionName: 'claim-pending-rewards', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, registryContract), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-wstx-diko-v1-1'), ], network, @@ -717,10 +718,10 @@ export const Stake = () => { { stxAddress, contractAddress, - contractName: 'arkadiko-stake-registry-v2-1', + contractName: registryContract, functionName: 'stake-pending-rewards', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, registryContract), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-diko-usda-v1-1'), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-diko-v2-1'), contractPrincipalCV(contractAddress, 'arkadiko-token'), @@ -743,10 +744,10 @@ export const Stake = () => { { stxAddress, contractAddress, - contractName: 'arkadiko-stake-registry-v2-1', + contractName: registryContract, functionName: 'claim-pending-rewards', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, registryContract), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-wstx-xbtc-v1-1'), ], network, @@ -766,10 +767,10 @@ export const Stake = () => { { stxAddress, contractAddress, - contractName: 'arkadiko-stake-registry-v2-1', + contractName: registryContract, functionName: 'stake-pending-rewards', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, registryContract), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-wstx-xbtc-v1-1'), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-diko-v2-1'), contractPrincipalCV(contractAddress, 'arkadiko-token'), @@ -792,10 +793,10 @@ export const Stake = () => { { stxAddress, contractAddress, - contractName: 'arkadiko-stake-registry-v2-1', + contractName: registryContract, functionName: 'claim-pending-rewards', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, registryContract), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-xbtc-usda-v1-1'), ], network, @@ -818,7 +819,7 @@ export const Stake = () => { contractName: 'arkadiko-stake-pool-xusd-usda-v1-4', functionName: 'claim-pending-rewards', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1') + contractPrincipalCV(contractAddress, registryContract) ], network, }, @@ -840,7 +841,7 @@ export const Stake = () => { contractName: 'arkadiko-stake-pool-xusd-usda-v1-5', functionName: 'claim-pending-rewards', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1') + contractPrincipalCV(contractAddress, registryContract) ], network, }, @@ -859,10 +860,10 @@ export const Stake = () => { { stxAddress, contractAddress, - contractName: 'arkadiko-stake-registry-v2-1', + contractName: registryContract, functionName: 'stake-pending-rewards', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, registryContract), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-xbtc-usda-v1-1'), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-diko-v2-1'), contractPrincipalCV(contractAddress, 'arkadiko-token'), @@ -888,7 +889,7 @@ export const Stake = () => { contractName: 'arkadiko-stake-pool-xusd-usda-v1-4', functionName: 'stake-pending-rewards', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, registryContract), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-diko-v2-1'), contractPrincipalCV(contractAddress, 'arkadiko-token'), ], @@ -913,7 +914,7 @@ export const Stake = () => { contractName: 'arkadiko-stake-pool-xusd-usda-v1-5', functionName: 'stake-pending-rewards', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, registryContract), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-diko-v2-1'), contractPrincipalCV(contractAddress, 'arkadiko-token'), ], @@ -935,10 +936,10 @@ export const Stake = () => { { stxAddress, contractAddress, - contractName: 'arkadiko-stake-registry-v2-1', + contractName: registryContract, functionName: 'stake-pending-rewards', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, registryContract), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-wstx-usda-v1-1'), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-diko-v2-1'), contractPrincipalCV(contractAddress, 'arkadiko-token'), @@ -961,10 +962,10 @@ export const Stake = () => { { stxAddress, contractAddress, - contractName: 'arkadiko-stake-registry-v2-1', + contractName: registryContract, functionName: 'stake-pending-rewards', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, registryContract), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-wstx-diko-v1-1'), contractPrincipalCV(contractAddress, 'arkadiko-stake-pool-diko-v2-1'), contractPrincipalCV(contractAddress, 'arkadiko-token'), diff --git a/web/components/unstake-diko-modal.tsx b/web/components/unstake-diko-modal.tsx index 1c9da16f1..b4992f0d4 100644 --- a/web/components/unstake-diko-modal.tsx +++ b/web/components/unstake-diko-modal.tsx @@ -37,10 +37,10 @@ export const UnstakeDikoModal = ({ showUnstakeModal, setShowUnstakeModal, staked { stxAddress, contractAddress, - contractName: 'arkadiko-stake-registry-v2-1', + contractName: 'arkadiko-stake-registry-v3-1', functionName: 'unstake', functionArgs: [ - Cl.contractPrincipal(contractAddress, 'arkadiko-stake-registry-v2-1'), + Cl.contractPrincipal(contractAddress, 'arkadiko-stake-registry-v3-1'), Cl.contractPrincipal(contractAddress, 'arkadiko-stake-pool-diko-v2-1'), Cl.contractPrincipal(contractAddress, 'arkadiko-token'), amount, diff --git a/web/components/unstake-lp-modal.tsx b/web/components/unstake-lp-modal.tsx index 39255641e..666e7af3e 100644 --- a/web/components/unstake-lp-modal.tsx +++ b/web/components/unstake-lp-modal.tsx @@ -68,7 +68,7 @@ export const UnstakeLpModal = ({ contractName: contractName, functionName: 'unstake', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v3-1'), contractPrincipalCV(assetContractAddress, tokenContract), amount, ], @@ -89,10 +89,10 @@ export const UnstakeLpModal = ({ { stxAddress, contractAddress, - contractName: 'arkadiko-stake-registry-v2-1', + contractName: 'arkadiko-stake-registry-v3-1', functionName: 'unstake', functionArgs: [ - contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v2-1'), + contractPrincipalCV(contractAddress, 'arkadiko-stake-registry-v3-1'), contractPrincipalCV(contractAddress, contractName), contractPrincipalCV(contractAddress, tokenContract), amount, From a6404553fabb55ff38561fd82792b7784459bd76 Mon Sep 17 00:00:00 2001 From: Philip Date: Sun, 5 Apr 2026 18:50:46 +1200 Subject: [PATCH 3/3] fix and deploy --- web/components/stake-diko-modal.tsx | 4 +- web/components/stake-lp-modal.tsx | 6 +- web/scripts/deploy-contracts-v2.ts | 103 +++++++++------------------- 3 files changed, 37 insertions(+), 76 deletions(-) diff --git a/web/components/stake-diko-modal.tsx b/web/components/stake-diko-modal.tsx index bc003c5bc..4598ce141 100644 --- a/web/components/stake-diko-modal.tsx +++ b/web/components/stake-diko-modal.tsx @@ -64,10 +64,10 @@ export const StakeDikoModal: React.FC = ({ showStakeModal, setShowStakeMo { stxAddress, contractAddress, - contractName: 'arkadiko-stake-registry-v2-1', + contractName: 'arkadiko-stake-registry-v3-1', functionName: 'stake', functionArgs: [ - Cl.contractPrincipal(contractAddress, 'arkadiko-stake-registry-v2-1'), + Cl.contractPrincipal(contractAddress, 'arkadiko-stake-registry-v3-1'), Cl.contractPrincipal(contractAddress, 'arkadiko-stake-pool-diko-v2-1'), Cl.contractPrincipal(contractAddress, 'arkadiko-token'), amount, diff --git a/web/components/stake-lp-modal.tsx b/web/components/stake-lp-modal.tsx index 6e06c2344..9817a5abb 100644 --- a/web/components/stake-lp-modal.tsx +++ b/web/components/stake-lp-modal.tsx @@ -102,7 +102,7 @@ export const StakeLpModal = ({ contractName, functionName: "stake", functionArgs: [ - Cl.contractPrincipal(contractAddress, 'arkadiko-stake-registry-v2-1'), + Cl.contractPrincipal(contractAddress, 'arkadiko-stake-registry-v3-1'), Cl.contractPrincipal(assetContractAddress, tokenContract), amount, ], @@ -124,10 +124,10 @@ export const StakeLpModal = ({ { stxAddress: stxAddress, contractAddress: contractAddress, - contractName: "arkadiko-stake-registry-v2-1", + contractName: "arkadiko-stake-registry-v3-1", functionName: "stake", functionArgs: [ - Cl.contractPrincipal(contractAddress, 'arkadiko-stake-registry-v2-1'), + Cl.contractPrincipal(contractAddress, 'arkadiko-stake-registry-v3-1'), Cl.contractPrincipal(contractAddress, contractName), Cl.contractPrincipal(assetContractAddress, tokenContract), amount, diff --git a/web/scripts/deploy-contracts-v2.ts b/web/scripts/deploy-contracts-v2.ts index 6c2d4c44f..147885aef 100644 --- a/web/scripts/deploy-contracts-v2.ts +++ b/web/scripts/deploy-contracts-v2.ts @@ -5,10 +5,11 @@ import { RPCClient } from '@stacks/rpc-client'; import { getAddressFromPrivateKey, TransactionVersion, - makeContractDeploy, - StacksTestnet, + // makeContractDeploy, + StacksMainnet, } from '@blockstack/stacks-transactions'; -import BN from 'bn.js'; +import { makeContractDeploy, broadcastTransaction } from '@stacks/transactions'; +// import BN from 'bn.js'; require('dotenv').config(); const readFile = promisify(readFileFn); @@ -19,59 +20,7 @@ interface Contract { } const contracts: Contract[] = [ - - // Traits - { name: 'sip-010-trait-ft-standard' }, - - { name: 'arkadiko-oracle-trait-v1' }, - { name: 'arkadiko-vault-trait-v1', file: 'vaults/arkadiko-vault-trait-v1' }, - { name: 'arkadiko-collateral-types-trait-v1', file: 'vaults/arkadiko-collateral-types-trait-v1' }, - { name: 'arkadiko-vault-manager-trait-v1', file: 'vaults/arkadiko-vault-manager-trait-v1' }, - { name: 'arkadiko-dao-token-trait-v1' }, - { name: 'arkadiko-stake-pool-diko-trait-v1', file: 'stake/arkadiko-stake-pool-diko-trait-v1' }, - { name: 'arkadiko-swap-trait-v1', file: 'swap/arkadiko-swap-trait-v1' }, - { name: 'arkadiko-stake-registry-trait-v1', file: 'stake/arkadiko-stake-registry-trait-v1' }, - { name: 'arkadiko-stake-pool-trait-v1', file: 'stake/arkadiko-stake-pool-trait-v1' }, - { name: 'arkadiko-liquidation-pool-trait-v1', file: 'vaults/arkadiko-liquidation-pool-trait-v1' }, - { name: 'arkadiko-liquidation-rewards-trait-v2', file: 'vaults/arkadiko-liquidation-rewards-trait-v2' }, - { name: 'arkadiko-diko-guardian-v3-1', file: 'stake/arkadiko-diko-guardian-v3-1' }, - - { name: 'restricted-token-trait', file: 'tests/xbtc/restricted-token-trait' }, - - // Contracts - { name: 'arkadiko-token' }, - { name: 'arkadiko-dao' }, - { name: 'usda-token' }, - { name: 'xstx-token', file: 'vaults/xstx-token' }, - { name: 'stdiko-token' }, - { name: 'arkadiko-governance-v4-3' }, - { name: 'arkadiko-oracle-v2-3' }, - { name: 'wrapped-stx-token' }, - { name: 'Wrapped-Bitcoin', file: 'tests/xbtc/Wrapped-Bitcoin' }, - - // V2 contracts - { name: 'arkadiko-vaults-data-trait-v1-1', file: 'vaults-v2/arkadiko-vaults-data-trait-v1-1' }, - { name: 'arkadiko-vaults-pool-active-trait-v1-1', file: 'vaults-v2/arkadiko-vaults-pool-active-trait-v1-1' }, - { name: 'arkadiko-vaults-tokens-trait-v1-1', file: 'vaults-v2/arkadiko-vaults-tokens-trait-v1-1' }, - { name: 'arkadiko-vaults-pool-liq-trait-v1-1', file: 'vaults-v2/arkadiko-vaults-pool-liq-trait-v1-1' }, - { name: 'arkadiko-vaults-helpers-trait-v1-1', file: 'vaults-v2/arkadiko-vaults-helpers-trait-v1-1' }, - { name: 'arkadiko-vaults-sorted-trait-v1-1', file: 'vaults-v2/arkadiko-vaults-sorted-trait-v1-1' }, - - { name: 'arkadiko-vaults-data-v1-1', file: 'vaults-v2/arkadiko-vaults-data-v1-1' }, - { name: 'arkadiko-vaults-helpers-v1-1', file: 'vaults-v2/arkadiko-vaults-helpers-v1-1' }, - { name: 'arkadiko-vaults-manager-v1-2', file: 'vaults-v2/arkadiko-vaults-manager-v1-1' }, - { name: 'arkadiko-vaults-operations-v1-3', file: 'vaults-v2/arkadiko-vaults-operations-v1-3' }, - { name: 'arkadiko-vaults-pool-active-v1-1', file: 'vaults-v2/arkadiko-vaults-pool-active-v1-1' }, - { name: 'arkadiko-vaults-pool-fees-v1-1', file: 'vaults-v2/arkadiko-vaults-pool-fees-v1-1' }, - { name: 'arkadiko-vaults-pool-liq-v1-1', file: 'vaults-v2/arkadiko-vaults-pool-liq-v1-1' }, - { name: 'arkadiko-vaults-sorted-v1-1', file: 'vaults-v2/arkadiko-vaults-sorted-v1-1' }, - { name: 'arkadiko-vaults-tokens-v1-1', file: 'vaults-v2/arkadiko-vaults-tokens-v1-1' }, - - { name: 'arkadiko-vaults-migration-v1-1', file: 'vaults-v2/arkadiko-vaults-migration-v1-1' }, - - { name: 'ststx-token', file: 'tests/ststx/ststx-token' }, - { name: 'wstx-token' }, - { name: 'auto-alex-v2', file: 'tests/atalex/auto-alex-v2' } + { name: 'arkadiko-stake-registry-v3-1', file: 'stake/arkadiko-stake-registry-v3-1' }, ]; const rpcClient = new RPCClient(process.env.API_SERVER || 'http://localhost:3999'); @@ -80,9 +29,9 @@ if (!privateKey) { console.error('Provide a private key with `process.env.CONTRACT_PRIVATE_KEY`'); process.exit(1); } -const address = getAddressFromPrivateKey(privateKey, TransactionVersion.Testnet); +const address = getAddressFromPrivateKey(privateKey, TransactionVersion.Mainnet); -const network = new StacksTestnet(); +const network = new StacksMainnet(); network.coreApiUrl = rpcClient.url; const run = async () => { @@ -113,28 +62,40 @@ const run = async () => { console.log(`Deploying ${contractId}`); const source = await readFile(`../clarity/contracts/${contract.file || contract.name}.clar`); + // const tx = await makeContractDeploy({ + // contractName: contract.name, + // codeBody: source.toString('utf8'), + // senderKey: privateKey, + // nonce: new BN(account.nonce + index, 10), + // fee: new BN(1000000, 10), + // network, + // }); const tx = await makeContractDeploy({ contractName: contract.name, codeBody: source.toString('utf8'), + clarityVersion: 3, // <-- pin to Clarity 3 senderKey: privateKey, - nonce: new BN(account.nonce + index, 10), - fee: new BN(1000000, 10), - network, + nonce: BigInt(account.nonce + index), // native BigInt, not BN + fee: 1000000, // BigInt literal + network: 'mainnet', // string shorthand works now }); - const result = await rpcClient.broadcastTX(tx.serialize()); + const response = await broadcastTransaction({ transaction: tx, network: 'mainnet' }); + console.log(response); - if (result.ok) { - index += 1; + // const result = await rpcClient.broadcastTX(tx.serialize()); - const txId = (await result.text()).replace(/"/g, ''); - console.log(`${rpcClient.url}/extended/v1/tx/${txId}`); + // if (result.ok) { + // index += 1; - txResults.push(txId); - } else { - const errorMsg = await result.text(); - throw new Error(errorMsg); - } + // const txId = (await result.text()).replace(/"/g, ''); + // console.log(`${rpcClient.url}/extended/v1/tx/${txId}`); + + // txResults.push(txId); + // } else { + // const errorMsg = await result.text(); + // throw new Error(errorMsg); + // } } if (txResults.length > 0) console.log('Broadcasted transactions:');