> For the complete documentation index, see [llms.txt](https://docs.rome.builders/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rome.builders/tr/gelistirici-kilavuzlari/deploy-solidity.md).

# Solidity Sözleşmelerini Dağıtma

Solana üzerinde Hardhat veya Foundry ile Solidity akıllı sözleşmeleri dağıtın — Rome ağ yapılandırması, fonlanmış hesaplar ve adım adım dağıtım.

Bu kılavuz, Hardhat ve Foundry kullanarak Solidity akıllı sözleşmelerini Rome EVM'e dağıtmayı kapsar.

## Ön koşullar

* Node.js v22.13+ (Hardhat) veya Foundry yüklü
* Bakiyesi olan bir Rome EVM adresi (bkz. [Hızlı başlangıç](/tr/baslarken/quickstart.md))
* Özel anahtarınız bir ortam değişkeni olarak dışa aktarılmış

```bash
export PRIVATE_KEY="0xYOUR_PRIVATE_KEY"
```

## Ağ Yapılandırması

| Ağ                    | RPC URL'si                                  | Zincir Kimliği | Gezgin                                 |
| --------------------- | ------------------------------------------- | -------------- | -------------------------------------- |
| Hadrian (testnet)     | `https://hadrian.testnet.romeprotocol.xyz/` | `200010`       | `via-hadrian.testnet.romeprotocol.xyz` |
| **Rubicon (mainnet)** | `https://rubicon.mainnet.romeprotocol.xyz/` | `7531`         | `via-rubicon.mainnet.romeprotocol.xyz` |

Her ağda gas USDC'dir. Hadrian'da bunu test USDC'yi köprüleyerek veya bir Solana devnet cüzdanından sararak alırsınız ([Faucets](/tr/kaynaklar/faucets.md)); Rubicon'da ise Ethereum'dan USDC'yi bununla içeri köprüleyerek [Rome Köprüsü](https://bridge-api.mainnet.romeprotocol.xyz/). Hadrian'da test ettiğiniz aynı artefaktlarla Rubicon'a dağıtın — yalnızca zincir kimliği ve sarmalayıcı adresleri farklıdır.

## Hardhat

### Kurulum

```bash
mkdir my-rome-project && cd my-rome-project
npx hardhat --init
```

Varsayılanları kabul edin (Hardhat 3, geçerli dizin, TypeScript + viem şablonu); bağımlılıklar otomatik olarak yüklenir.

### hardhat.config.ts

```typescript
import hardhatToolboxViemPlugin from "@nomicfoundation/hardhat-toolbox-viem";
import { configVariable, defineConfig } from "hardhat/config";

export default defineConfig({
  plugins: [hardhatToolboxViemPlugin],
  solidity: {
    profiles: {
      default: { version: "0.8.28" },
      production: {
        version: "0.8.28",
        settings: { optimizer: { enabled: true, runs: 200 } },
      },
    },
  },
  networks: {
    hadrian: {
      type: "http",
      chainType: "l1",
      chainId: 200010,
      url: "https://hadrian.testnet.romeprotocol.xyz/",
      accounts: [configVariable("PRIVATE_KEY")],
    },
    rubicon: {
      type: "http",
      chainType: "l1",
      chainId: 7531,
      url: "https://rubicon.mainnet.romeprotocol.xyz/",
      accounts: [configVariable("PRIVATE_KEY")],
    },
  },
});
```

`configVariable("PRIVATE_KEY")` ortamdan çözümlenir (veya şifrelenmiş anahtar deposundan — `npx hardhat keystore set PRIVATE_KEY`).

### Dağıt

```bash
npx hardhat run scripts/deploy.ts --network hadrian
```

### Blok Gezgini'nde Doğrula

```bash
npx hardhat verify --network hadrian 0xCONTRACT_ADDRESS
```

şuradan Sourcify doğrulayıcı yapılandırmasını gerektirir [Sözleşmeleri Doğrula](/tr/gelistirici-kilavuzlari/verify-contracts.md) şunun içinde `hardhat.config.ts`.

## Foundry

### Kurulum

```bash
forge init my-rome-project
cd my-rome-project
```

### Dağıt

```bash
# Testnet
forge create --rpc-url https://hadrian.testnet.romeprotocol.xyz/ \\
  --private-key $PRIVATE_KEY \\
  src/Counter.sol:Counter
```

### Dağıtılmış Sözleşmeyi Çağır

```bash
# Oku
cast call 0xCONTRACT_ADDRESS "number()" \\
  --rpc-url https://hadrian.testnet.romeprotocol.xyz/

# Yaz
cast send 0xCONTRACT_ADDRESS "increment()" \\
  --rpc-url https://hadrian.testnet.romeprotocol.xyz/ \\
  --private-key $PRIVATE_KEY
```

## Rome Solidity SDK'sini Kullanma

Solana programlarıyla etkileşime giren sözleşmeler için, herkese açık [`rome-solidity`](https://github.com/rome-protocol/rome-solidity) deponun arayüzlerini kullanın. GitHub'dan kurulur, npm'den değil:

```bash
# Hardhat / npm
npm install github:rome-protocol/rome-solidity

# Foundry
forge install rome-protocol/rome-solidity
# ardından foundry.toml içinde, [profile.default] altında:
# remappings = ["@rome-protocol/rome-solidity/=lib/rome-solidity/"]
```

Şunun ötesindeki sözleşmeler `interface.sol` ve oracle arayüzleri (örneğin ERC-20 sarmalayıcıları ve fabrika) OpenZeppelin'i içe aktarır. npm ile bağımlılık olarak birlikte gelir. Foundry ile ayrıca şunu çalıştırın `forge install OpenZeppelin/openzeppelin-contracts` ve remapping'i ekleyin `@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/`.

npm ile paket şu şekilde kurulur `@rome-protocol/rome-solidity`, bu yüzden aşağıdaki içe aktarma şuradan çözümlenir `node_modules`. Foundry ile remapping, aynı içe aktarmanın şuradan çözümlenmesini sağlar `lib/rome-solidity`.

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

import {ICrossProgramInvocation, IHelperProgram}
    from "@rome-protocol/rome-solidity/contracts/interface.sol";

contract MyRomeContract {
    IHelperProgram constant Helper =
        IHelperProgram(0xFF00000000000000000000000000000000000009);
    ICrossProgramInvocation constant Cpi =
        ICrossProgramInvocation(0xFF00000000000000000000000000000000000008);

    // Çağıranın PDA'sından bir SPL token aktar
    function moveSpl(address to, uint64 tokens, bytes32 mint) external {
        Helper.transfer_spl(to, tokens, mint);
    }

    // CPI aracılığıyla herhangi bir Solana programını çağır
    function callSolanaProgram(
        bytes32 programId,
        ICrossProgramInvocation.AccountMeta[] calldata accounts,
        bytes calldata data
    ) external {
        Cpi.invoke(programId, accounts, data);
    }
}
```

## Mevcut bir protokolü getirin

Herhangi bir Solidity sözleşmesi Rome'a değiştirilmeden dağıtılır — bir uyumluluk sözleşmesi, bir DeFi protokolü veya mevcut, sağlamlaştırılmış bir uygulama. Sözleşmenizde olmayan tek şey **tek seferlik sarmalayıcı izni**: SPL-sarmalayıcı token'larını (wUSDC ve benzerleri) sözleşmeniz üzerinden hareket ettiren bir kullanıcı, ilkinden önce o token'ın sarmalayıcısına tokenlarını bir kez taşıma hakkını vermek zorundadır `transferFrom`. Bu olmadan aktarım SPL hatasıyla geri alınır `0x4`çağrıyı tamamlandı saymadan önce. `isEnabled(user)` sarmalayıcıda ve şunu görün [Cüzdan başına tek seferlik izin](/tr/temel-kavramlar/token-interop.md#one-time-grant-per-wallet); izin verme işlemini ön yüzünüz gönderir, sözleşmeniz değişmez. Yukarıdaki aynı Hardhat / Foundry akışıyla çatallayıp dağıtabileceğiniz iki üretim örneği:

* [**compound-on-rome-comet**](https://github.com/rome-protocol/compound-on-rome-comet) — standart Foundry ile kanonik Compound v3 (Comet).
* [**rome-aave-v3**](https://github.com/rome-protocol/rome-aave-v3) — kanonik Aave v3.

İkisi de sözleşme değişikliği olmadan Solana yürütmesi ve CPI birleştirilebilirliği kazanır; kullanıcıları ilk yatırımdan önce yukarıda açıklanan tek seferlik sarmalayıcı iznini verir.

## Gas

Araçlarınızın gas'ı tahmin etmesine izin verin (`eth_estimateGas`; Hardhat, `forge create` ve `cast` hepsi bunu yapar) ve asla sabitlemeyin `21000`. Rome'da bir yazma işleminin maliyetinin çoğu, dağıtılmış bir sözleşme, yeni bir token hesabı veya hiç kullanılmamış bir alıcı gibi Solana hesapları oluşturmaktır ve tahmin bunları içerir. Solana CPI'ları yapan bir çağrıda tahmin düşük çıkabilir, bu yüzden bir pay bırakın. Rome yalnızca gerçekten kullanılan gas'ı ücretlendirir. Hadrian'da ölçüldüğünde, 10 baytlık bir sözleşmeyi dağıtmak için tahmin edilen ve kullanılan gas 1.147.921 oldu; mevcut bir adrese yerel bir transfer için ise 21.000 tahmin edildi ve 10.001 kullanıldı. Gerçek bir sözleşmenin maliyeti daha yüksektir, bu yüzden kendi dağıtımınızı tahmin edin. Şu [JSON-RPC sayfası](/tr/referans/json-rpc.md#gas-is-solana-derived-estimate-dont-hardcode) ölçülen tabloyu içerir.

## Dağıtım Kısıtları

| Kısıt                    | Sınır              | Notlar                                                            |
| ------------------------ | ------------------ | ----------------------------------------------------------------- |
| Maksimum sözleşme boyutu | 24 KB              | Ethereum ile aynı (EIP-170, 24.576 bayt)                          |
| İşlem boyutu sınırı      | Hesap başına 80 KB | Büyük dağıtımlar, tutucu hesaplar arasında şeffaf biçimde bölünür |
| Hesaplama bütçesi        | \~1,4M CU (atomik) | Ağır sözleşmeler için yinelemeli modu kullanın                    |
| Solidity sürümü          | 0.8.28 önerilir    | Daha eski sürümler çalışır, ancak 0.8.28 SDK ile uyumludur        |

## Yaygın Hatalar

| Hata                                                                        | Neden                                                                                          | Çözüm                                                                                                                                                                                                                                                                                                |
| --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `gas için yetersiz bakiye`                                                  | EVM adresinde gas token'ı yok                                                                  | Hadrian: test USDC'yi bununla içeri köprüleyin [Rome Köprüsü](/tr/rome-uzerindeki-uygulamalar/bridge-api.md) (bkz. [Hızlı başlangıç](/tr/baslarken/quickstart.md), 2. adım); Rubicon: gerçek USDC'yi bununla içeri köprüleyin [ana ağdaki Rome Bridge](https://bridge-api.mainnet.romeprotocol.xyz/) |
| `nonce çok düşük`                                                           | Cüzdanda eski nonce                                                                            | MetaMask hesabını sıfırlayın veya nonce'u elle belirtin                                                                                                                                                                                                                                              |
| `yürütme geri alındı`                                                       | Sözleşme mantığı başarısız oldu                                                                | Şununla hata ayıklayın `eth_call` veya `forge test --fork-url`                                                                                                                                                                                                                                       |
| `yürütme geri alındı` SPL hatasıyla `0x4` sarmalayıcı token'ları taşınırken | Kullanıcı tek seferlik sarmalayıcı iznini vermedi                                              | Kontrol edin `isEnabled(user)` sarmalayıcıda ve gönder `approve_spl` bir kez ([ayrıntılar](/tr/temel-kavramlar/token-interop.md#one-time-grant-per-wallet))                                                                                                                                          |
| `işlem fiyatı düşük`                                                        | Gas fiyatı minimumun altında                                                                   | İşlemdeki gas fiyatını artırın                                                                                                                                                                                                                                                                       |
| Sabit bir gas limitiyle bir transfer veya dağıtım başarısız olur            | Şu gibi sabit kodlanmış bir sınır `21000` Solana hesapları oluşturmanın maliyetinin altındadır | Onu kaldırın ve şunu kullanın `eth_estimateGas`                                                                                                                                                                                                                                                      |

## Sırada Ne Var

* [Sözleşmenizi Solana kullanıcılarına açın](/tr/gelistirici-kilavuzlari/open-to-solana-users.md) — Solana cüzdan kullanıcılarının az önce dağıttığınızı çağırmasına izin verin
* [EVM'den Solana'yı çağırma](/tr/gelistirici-kilavuzlari/call-solana-from-evm.md) — Solana programlarıyla etkileşime geçmek için CPI precompile'larını kullanın
* [Sözleşmeleri Doğrula](/tr/gelistirici-kilavuzlari/verify-contracts.md) — kaynak kodunuzu blok gezgininde yayınlayın


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.rome.builders/tr/gelistirici-kilavuzlari/deploy-solidity.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
