configuration.md 4.8 KB


title: ๊ตฌ์„ฑ metaTitle: ๊ตฌ์„ฑ | Amman

description: Amman ๋กœ์ปฌ ๊ฒ€์ฆ์ž ๋„๊ตฌ ํ‚คํŠธ ๊ตฌ์„ฑํ•˜๊ธฐ.

์‹คํ–‰ํ•  ๋•Œ Amman์€ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์—์„œ ๊ตฌ์„ฑ ํŒŒ์ผ .ammanrc.js๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์ด ์—†์œผ๋ฉด Amman์€ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์œผ๋กœ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ์€ ์•„๋ž˜ ์†์„ฑ ์ค‘ ํ•˜๋‚˜์™€ ํ•จ๊ป˜ 'validator'๋ฅผ ๋‚ด๋ณด๋‚ด๋Š” JavaScript ๋ชจ๋“ˆ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • killRunningValidators: true์ด๋ฉด ์‹œ์Šคํ…œ์—์„œ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  solana-test-validators๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
  • programs: ํ…Œ์ŠคํŠธ ๊ฒ€์ฆ์ž์— ๋กœ๋“œ๋˜์–ด์•ผ ํ•˜๋Š” bpf ํ”„๋กœ๊ทธ๋žจ
  • accountsCluster: ์›๊ฒฉ ๊ณ„์ •์„ ๋ณต์ œํ•  ๊ธฐ๋ณธ ํด๋Ÿฌ์Šคํ„ฐ
  • accounts: ํ…Œ์ŠคํŠธ ๊ฒ€์ฆ์ž์— ๋กœ๋“œํ•  ์›๊ฒฉ ๊ณ„์ • ๋ฐฐ์—ด
  • jsonRpcUrl: ํ…Œ์ŠคํŠธ ๊ฒ€์ฆ์ž๊ฐ€ JSON RPC ์š”์ฒญ์„ ์ˆ˜์‹ ํ•  URL
  • websocketUrl: RPC ์›น์†Œ์ผ“์šฉ
  • ledgerDir: solana ํ…Œ์ŠคํŠธ ๊ฒ€์ฆ์ž๊ฐ€ ์›์žฅ์„ ์“ฐ๋Š” ์œ„์น˜
  • resetLedger: true์ด๋ฉด ์‹œ์ž‘ ์‹œ ์›์žฅ์ด ์ œ๋„ค์‹œ์Šค๋กœ ์žฌ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  • verifyFees: true์ด๋ฉด ํŠธ๋žœ์žญ์…˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ฒญ๊ตฌํ•  ๋•Œ๊นŒ์ง€ ๊ฒ€์ฆ์ž๊ฐ€ ์™„์ „ํžˆ ์‹œ์ž‘๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ์˜ˆ์ œ

๊ธฐ๋ณธ๊ฐ’์ด ์žˆ๋Š” ๊ฒ€์ฆ์ž/๋ฆด๋ ˆ์ด/์Šคํ† ๋ฆฌ์ง€ ๊ตฌ์„ฑ

๋‹ค์Œ์€ ์ถ”๊ฐ€๋œ ํ”„๋กœ๊ทธ๋žจ๊ณผ relay ๋ฐ storage ๊ตฌ์„ฑ์„ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ๊ฐ’์ด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •๋œ ๊ตฌ์„ฑ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

_amman-explorer relay_๋Š” CI ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ํ•œ ๊ฒ€์ฆ์ž์™€ ํ•จ๊ป˜ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋˜๋ฉฐ, ์•Œ๋ ค์ง„ _relay port_์—์„œ ๋ฆด๋ ˆ์ด๊ฐ€ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ ๋จผ์ € ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

_mock storage_๋Š” storage ๊ตฌ์„ฑ์ด ์ œ๊ณต๋œ ๊ฒฝ์šฐ์—๋งŒ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ์•Œ๋ ค์ง„ _storage port_์—์„œ ์Šคํ† ๋ฆฌ์ง€ ์„œ๋ฒ„๊ฐ€ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ ๋จผ์ € ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

import { LOCALHOST, tmpLedgerDir } from '@metaplex-foundation/amman'

module.exports = {
  validator: {
    killRunningValidators: true,
    programs: [
      {
        label: 'Token Metadata Program',
        programId: programIds.metadata,
        deployPath: localDeployPath('mpl_token_metadata'),
      },
    ],
    jsonRpcUrl: LOCALHOST,
    websocketUrl: '',
    commitment: 'confirmed',
    ledgerDir: tmpLedgerDir(),
    resetLedger: true,
    verifyFees: false,
    detached: process.env.CI != null,
  },
  relay: {
    enabled: process.env.CI == null,
    killRunningRelay: true,
  },
  storage: {
    enabled: process.env.CI == null,
    storageId: 'mock-storage',
    clearOnStart: true,
  },
}

์›๊ฒฉ ๊ณ„์ • ๋ฐ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋Š” ๊ตฌ์„ฑ

Amman์€ ์„ ํƒํ•œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋กœ์ปฌ ์‚ฌ์šฉ ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๊ณ„์ •๊ณผ ํ”„๋กœ๊ทธ๋žจ์„ ๋ชจ๋‘ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

module.exports = {
  validator: {
    // ๊ธฐ๋ณธ์ ์œผ๋กœ Amman์€ accountsCluster์—์„œ ๊ณ„์ • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค (๊ณ„์ •๋ณ„๋กœ ์žฌ์ •์˜ ๊ฐ€๋Šฅ)
    accountsCluster: 'https://api.metaplex.solana.com',
    accounts: [
      {
        label: 'Token Metadata Program',
        accountId: 'metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s',
        // executable์„ true๋กœ ํ‘œ์‹œํ•˜๋ฉด Amman์ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ๊ณ„์ •๋„ ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค
        executable: true,
      },
      {
        label: 'Random other account',
        accountId: '4VLgNs1jXgdciSidxcaLKfrR9WjATkj6vmTm5yCwNwui',
        // ๊ธฐ๋ณธ์ ์œผ๋กœ executable์€ false์ด๋ฉฐ ๊ตฌ์„ฑ์— ํฌํ•จ๋  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค
        // executable: false,

        // ์—ฌ๊ธฐ์— ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋ฉด accountsCluster ํ•„๋“œ๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค
        cluster: 'https://metaplex.devnet.rpcpool.com',
      },
    ],
  },
}

ํ…Œ์ŠคํŠธ ๊ฒ€์ฆ์ž ๊ธฐ๋Šฅ ๋น„ํ™œ์„ฑํ™”

_devnet_๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฒฝ์šฐ ์ผ๋ถ€ ๊ธฐ๋Šฅ์ด ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋กœ์ปฌ์—์„œ ์‹คํ–‰๋˜๋Š” solana-test-validator๋Š” ์–ด๋–ค ๊ธฐ๋Šฅ๋„ ๋น„ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ œ๊ณต๋œ ํด๋Ÿฌ์Šคํ„ฐ์™€ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด ์‹คํ–‰๋  ๋ฐฉ์‹์— ๋” ๊ฐ€๊นŒ์šด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด matchFeatures ๊ตฌ์„ฑ ์†์„ฑ์„ ํ†ตํ•ด ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ผ์น˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

module.exports = {
  validator: {
    ...
    // ์•„๋ž˜๋Š” `mainnet-beta` ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด ๋น„ํ™œ์„ฑํ™”๋œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค
    matchFeatures: 'mainnet-beta',
  }
}

๊ธฐ๋Šฅ ์„ธํŠธ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด deactivateFeatures ์†์„ฑ์„ ํ†ตํ•ด ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

module.exports = {
  validator: {
    ...
   deactivateFeatures: ['21AWDosvp3pBamFW91KB35pNoaoZVTM7ess8nr2nt53B'],
  }
}

์ฐธ๊ณ : ์œ„์˜ ์†์„ฑ ์ค‘ ํ•˜๋‚˜๋งŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๋ฆฌ์†Œ์Šค