# Foundry veya Hardhat ile bir sözleşme dağıtın

> Source: https://docs.blockvectra.com/tr/guides/deploy-contract/

## Ağı seçin

Hedef zincirin entegrasyon rehberini takip ederek ([Desteklenen Zincirler](https://docs.blockvectra.com/en/chains/) üzerinden erişilir) `network.mjs` dosyasını oluşturun ve `RPC_URL` ile `CHAIN_ID` değişkenlerini dışa aktarın. Zincir rehberleri zincir kimliğini ve yöntem politikasını [GET /v1/chains](https://api.blockvectra.com/v1/chains) üzerinden okur ve gas token'ını, ayrı bir yayınlama RPC'sinin gerekip gerekmediğini ve zincire özel dağıtım ayarlarını açıklar.

Aşağıdaki araçlardan birini seçin. Her ikisi de constructor argümanı olmadan aynı küçük sözleşmeyi dağıtır.

Dağıtıcıyı seçilen ağın yerel gas token'ı ile fonlayın. `DEPLOYER_PRIVATE_KEY` değerini yerel ortamınızda güvenli bir şekilde ayarlayın; asla commit etmeyin. Aşağıdaki komutlar bir işlemi yayınlar ve gas harcar.

Constructor argümanı olmayan `Hello.sol` dosyasını oluşturun:

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
contract Hello {
    event Ping(address indexed sender);
    function ping() external { emit Ping(msg.sender); }
    function hello() external pure returns (string memory) {
        return "hello";
    }
}
```

### Foundry

Başlatılmış bir Foundry projesinde, sözleşmeyi `src/Hello.sol` konumuna yerleştirin ve şu `foundry.toml` dosyasını kullanın:

```toml
[profile.default]
src = "src"
out = "out"
libs = ["lib"]
solc_version = "0.8.24"
evm_version = "paris"

[rpc_endpoints]
target = "${RPC_URL}"
```

```bash
: "${RPC_URL:?Set RPC_URL}" "${CHAIN_ID:?Set CHAIN_ID}" "${DEPLOYER_PRIVATE_KEY:?Set deployer key}"
test "$(cast chain-id --rpc-url "$RPC_URL")" = "$CHAIN_ID" || exit 1
forge build
forge create src/Hello.sol:Hello --rpc-url target \
  --chain "$CHAIN_ID" --private-key "$DEPLOYER_PRIVATE_KEY" --broadcast
```

İşlem karmasını ve dağıtılan adresi saklayın. Dahil edilme ve durumu incelemek için `cast receipt "$TX_HASH" --rpc-url "$RPC_URL"` kullanın, ardından sözleşmeyi okumak için `cast call "$CONTRACT_ADDRESS" "hello()(string)" --rpc-url "$RPC_URL"` çalıştırın. Bu iki değişkeni dağıtım çıktısından ayarlayın.

### Hardhat 2 ile ethers 6

Ayrı bir CommonJS projesinde (`npm init -y`), `npm install --save-dev hardhat@2 @nomicfoundation/hardhat-ethers@3 ethers@6` komutunu çalıştırın. Aynı sözleşmeyi `contracts/Hello.sol` konumuna yerleştirin. Bunu `hardhat.config.cjs` olarak kaydedin:

```js
require('@nomicfoundation/hardhat-ethers');
const { RPC_URL, CHAIN_ID, DEPLOYER_PRIVATE_KEY } = process.env;
if (!RPC_URL || !/^[1-9][0-9]*$/.test(CHAIN_ID ?? '') || !DEPLOYER_PRIVATE_KEY) {
  throw new Error('Set RPC_URL, CHAIN_ID and DEPLOYER_PRIVATE_KEY');
}
module.exports = {
  solidity: { version: '0.8.24', settings: { evmVersion: 'paris' } },
  networks: {
    target: { url: RPC_URL, chainId: Number(CHAIN_ID), accounts: [DEPLOYER_PRIVATE_KEY] },
  },
};
```

`scripts` dizinini oluşturun ve `scripts/deploy.cjs` olarak kaydedin:

```js
const { ethers } = require('hardhat');
async function main() {
  const contract = await ethers.deployContract('Hello');
  console.log(contract.deploymentTransaction().hash);
  await contract.waitForDeployment();
  console.log(await contract.getAddress());
}
main().catch(error => { console.error(error); process.exitCode = 1; });
```

```bash
npx hardhat compile
npx hardhat run scripts/deploy.cjs --network target
```

Ağın `chainId` değeri RPC'ye karşı kontrol edilir. [Hardhat 2 ağ ayarlarına](https://v2.hardhat.org/hardhat-runner/docs/config) ve [Foundry ayarlarına](https://www.getfoundry.sh/config/index.html) bakın (erişim tarihi: 2026-10-07).

## Olayları okuyun

`LOG_ADDRESS` değişkenini dağıtılan adrese ayarlayın. `ping()` çağrısından sonra `Ping` olaylarını okumak için hedef zincirin rehberindeki olay okuma yöntemini takip edin (`/v1/chains` içindeki zincirin `ws` alanına bağlı olarak WebSocket aboneliği veya HTTP parçalı yoklama).
