이 가이드에서는 Story 스마트 컨트랙트 개발 환경을 몇 분 만에 설정하는 방법을 보여드리겠습니다.

전제 조건

프로젝트 생성

  1. 실행 foundryup하여 최신 안정 버전의 미리 컴파일된 바이너리(forge, cast, anvil, chisel)를 자동으로 설치합니다
  2. 새 디렉토리에서 다음 명령을 실행합니다: forge init. 이것은 foundry.toml와 프로젝트 루트에 예제 프로젝트 파일들을 생성합니다. 기본적으로 forge init은 새로운 git 저장소도 초기화합니다.
  3. 새로운 yarn 프로젝트를 초기화합니다: yarn init. 또는 다음을 사용할 수 있습니다 npm init 또는 pnpm init.
  4. 루트 레벨의 foundry.toml 파일(프로젝트의 최상위 디렉토리에 위치)을 열고 다음으로 교체하세요:
[profile.default]
out = 'out'
libs = ['node_modules', 'lib']
cache_path  = 'forge-cache'
gas_reports = ["*"]
optimizer = true
optimizer_runs = 20000
test = 'test'
solc = '0.8.26'
fs_permissions = [{ access = 'read', path = './out' }, { access = 'read-write', path = './deploy-out' }]
evm_version = 'cancun'
remappings = [
    '@openzeppelin/=node_modules/@openzeppelin/',
    '@storyprotocol/core/=node_modules/@story-protocol/protocol-core/contracts/',
    '@storyprotocol/periphery/=node_modules/@story-protocol/protocol-periphery/contracts/',
    'erc6551/=node_modules/erc6551/',
    'forge-std/=node_modules/forge-std/src/',
    'ds-test/=node_modules/ds-test/src/',
    '@storyprotocol/test/=node_modules/@story-protocol/protocol-core/test/foundry/',
    '@solady/=node_modules/solady/'
]
  1. 예제 컨트랙트 파일들을 제거합니다: rm src/Counter.sol script/Counter.s.sol test/Counter.t.sol

의존성 설치

이제 의존성을 설치할 준비가 되었습니다. Story Protocol 코어 및 주변 모듈을 통합하기 위해 다음을 실행하여 package.json에 추가하세요. 또한 openzeppelinerc6551를 컨트랙트와 테스트를 위한 의존성으로 설치할 것입니다.

# note: you can run them one-by-one, or all at once
yarn add @story-protocol/protocol-core@https://github.com/storyprotocol/protocol-core-v1
yarn add @story-protocol/protocol-periphery@https://github.com/storyprotocol/protocol-periphery-v1
yarn add @openzeppelin/contracts
yarn add @openzeppelin/contracts-upgradeable
yarn add erc6551
yarn add solady

또한, Foundry의 테스트 키트 작업을 위해 다음 devDependencies를 추가하는 것을 추천합니다:

yarn add -D https://github.com/dapphub/ds-test
yarn add -D github:foundry-rs/forge-std#v1.7.6

이제 간단한 테스트 등록 컨트랙트를 만들 준비가 되었습니다!