주요 콘텐츠로 건너뛰기
AI 튜토리얼

FastMint FCFS: Binance 에이전틱 월렛으로 시간 제한 BSC 민트 실행

동기화된 시계, 블록체인 헤드, RPC 시뮬레이션을 통해 세일 시작을 감지한 후 안전 검사를 거쳐 Binance 에이전틱 월렛 트랜잭션 1건을 미리 확인하고 실행하는 AI 에이전트 스킬 fastmint-fcfs의 설치 및 사용 방법을 알아보세요.

FastMint FCFS: Binance 에이전틱 월렛으로 시간 제한 BSC 민트 실행

fastmint-fcfs의 기능

fastmint-fcfs는 Claude Code, Codex, Cursor, OpenClaw와 같은 AI 에이전트를 위한 스킬입니다. 판매가 시작되는 즉시 BNB Smart Chain에서 단일 민트, 클레임 또는 구매 트랜잭션을 실행할 수 있도록 지원합니다.

이 도구는 Binance Agentic Wallet baw CLI를 사용합니다. 사용자의 컴퓨터가 calldata를 준비하고 요청 제출 시점을 결정하며, 트랜잭션 서명은 Developer Mode를 통해 Binance 백엔드에서 수행됩니다. 개인 키, 시드 문구 또는 세션 토큰은 컴퓨터에 저장되지 않습니다.

Binance 지갑 흐름에는 contract-call preview 후 contract-call execute가 필요하므로 fastmint-fcfs는 이 단계의 타이밍을 최적화합니다. 하나의 신호만 기다리지 않고 여러 독립 트리거를 사용합니다.

  • 시계 트리거: NTP로 보정된 시계를 사용해 판매 시작 시각에 실행됩니다.
  • 헤드 트리거: 타임스탬프가 시작 시각에 도달하는 최초의 BSC 블록을 감시합니다.
  • 시뮬레이션 트리거: 가장 빠르게 사용 가능한 RPC 엔드포인트로 eth_call 요청을 동시에 경쟁시킵니다.

가장 먼저 성공한 preview가 정확히 한 번 실행됩니다. 아직 실행 중인 다른 preview는 무시됩니다.

이 도구는 특정 민트에 대해 사용자가 명시적으로 지시한 경우에만 사용하세요. URL만으로는 트랜잭션 전송 권한이 부여되지 않습니다.

사전 요구 사항 및 설치

필수 소프트웨어 설치

Node.js 20 이상을 사용하세요. 저장소에 ethers 6.13이 포함되어 있으므로 프로젝트 자체에는 npm install이 필요하지 않습니다. Binance Agentic Wallet CLI를 전역으로 설치하세요.

npm install -g @binance/agentic-wallet@1.12.0

Binance 앱에서 Agentic Wallet과 Developer Mode를 활성화하세요. 지갑 잔액이 Developer Mode 한도 미만으로 유지되는지 확인하세요. 선택 사항인 Binance wallet skill을 사용하면 추가적인 지갑 작업을 지원받을 수 있습니다.

에이전트가 읽을 수 있는 위치에 스킬 배치

저장소를 압축 해제하고 fastmint-fcfs 디렉터리를 에이전트가 사용하는 스킬 디렉터리로 복사하세요.

# Claude Code, 프로젝트별
mkdir -p .claude/skills
cp -r fastmint-fcfs .claude/skills/

# Claude Code, 전역
mkdir -p ~/.claude/skills
cp -r fastmint-fcfs ~/.claude/skills/

# Codex, Cursor 또는 기타 .agents 호환 도구
mkdir -p .agents/skills
cp -r fastmint-fcfs .agents/skills/

chmod +x fastmint-fcfs/fastmint.sh

지갑 로그인

터미널에서 한 번 로그인하세요.

baw auth signin --json

반환된 urlForWeb을 열고 Binance 앱에 표시된 pairingCode가 일치하는지 확인한 뒤 연결을 승인하세요. 그런 다음 세션을 확인합니다.

baw auth verify --qrCodeId <qrCodeId> --json
baw wallet status --json

지갑 상태는 CONNECTED여야 합니다. 세션은 비활성 상태에서 최대 48시간 동안 유지됩니다. 세션이 만료되면 에이전트는 중지한 뒤 다시 로그인하도록 요청해야 하며, 자동으로 인증을 시도해서는 안 됩니다.

환경 확인

프로젝트 디렉터리로 이동한 다음 읽기 전용 벤치마크를 실행하세요.

cd fastmint-fcfs
./fastmint.sh bench

벤치마크는 RPC 순위, WebSocket 지연 시간, NTP 시계 오프셋, 지갑 연결, Developer Mode, BNB 잔액, Agent ID 및 preview 타이밍을 확인합니다. 민트를 예약하기 전에 실행할 수 있는 유용한 첫 진단입니다.

macOS에서 Node가 인증서 체인을 검증하지 못하는 경우, 프로젝트가 시스템 키체인에서 CA 번들을 생성할 수 있습니다.

./fastmint.sh bench --ca

그 외 환경에서는 NODE_EXTRA_CA_CERTS를 적절한 CA 파일로 설정하세요.

선택적 RPC 엔드포인트 구성

런처는 스킬 디렉터리의 .env 파일을 자동으로 불러옵니다. 프리미엄 HTTP 및 WebSocket 엔드포인트를 추가할 수 있습니다.

FASTMINT_RPCS_EXTRA=https://<premium-endpoint>
FASTMINT_WS_EXTRA=wss://<premium-endpoint>

지원되는 기타 설정으로는 전체 RPC 풀을 교체하는 FASTMINT_RPCS, WebSocket 엔드포인트를 설정하는 FASTMINT_WS, 로컬 시간대를 지정하는 FASTMINT_TZ, Node 인증서 번들을 지정하는 FASTMINT_CA가 있습니다. 로그에서는 엔드포인트 호스트가 마스킹됩니다.

권장 사용 흐름

일반적인 실행은 환경 벤치마크, 민트 컨트랙트 점검, preview 리허설, 실제 트랜잭션 실행의 네 단계로 구성됩니다.

  1. Bench: 지갑과 네트워크 환경이 준비되었는지 확인합니다.
  2. Recon: 컨트랙트 주소, ABI, 민트 함수, 인수, 타이밍 및 관련 getter를 찾습니다.
  3. Dry-run: preview를 전송하되 실행 직전에 중지합니다.
  4. Fire: 트랜잭션 엔진을 실행하고 preview가 모든 검사를 통과한 뒤 한 번 실행되도록 합니다.

1. 민트 웹사이트 점검

민트 페이지에서 recon을 실행하세요.

./fastmint.sh recon https://mint-site

컨트랙트 주소를 이미 알고 있다면 직접 지정하세요.

./fastmint.sh recon https://mint-site --contract 0x...

Recon은 페이지와 관련 JavaScript 또는 에이전트 문서를 다운로드한 다음 컨트랙트 주소, 체인 ID, 함수 이름, ABI 시그니처 및 타임스탬프를 검색합니다. 또한 배포된 바이트코드를 확인하고, 가능한 경우 Sourcify에서 ABI를 가져오며, view 함수를 읽고, 추정 인수, calldata, 시뮬레이션 결과 및 가능한 시작 시각과 함께 민트 후보를 출력합니다.

출력 결과를 사용해 시작 시각, 가격, 무료 공급량, 지갑별 한도, Agent ID 요구 사항 및 디코딩된 컨트랙트 오류를 확인하세요. 확인하지 않은 추정 인수에 의존하지 마세요.

2. Preview 리허설

fire --dry를 사용하면 트랜잭션을 실행하지 않고 검사를 수행하고 미리 볼 수 있습니다:

./fastmint.sh fire --to 0xSALE --data 0x195ad114 --start 23:00 --dry

--start 옵션은 Unix 초, 현지 HH:MM[:SS] 시간 또는 ISO-8601 타임스탬프를 허용합니다. 출력된 call 값을 확인하고 셀렉터와 인수가 의도한 함수를 나타내는지 확인하세요.

시간 제한 경로를 반드시 테스트해야 하는 리허설에는 --gateSim을 추가하세요. 이렇게 하면 이미 성공하는 eth_call 때문에 설정된 오픈 시간 전에 리허설이 실행되는 것을 방지할 수 있습니다.

3. 민트 한 건 실행

드라이런을 검토하고 명시적인 승인을 받은 후, 에이전트가 계속 응답할 수 있도록 백그라운드에서 트랜잭션을 실행하세요:

./fastmint.sh fire --to 0xSALE --data 0x195ad114 --start 23:00 --label project_free

미리 보기에서 성공적인 시뮬레이션이 반환되면 엔진은 baw contract-call execute를 한 번 호출합니다. 최종 보고서에는 트랜잭션 해시, BscScan 링크, 영수증 상태, 가능한 경우 수신한 자산, 타임라인 및 로그 경로가 포함됩니다.

기본 명령 예시

함수 시그니처 사용

원시 calldata를 준비하는 대신 함수 시그니처를 제공할 수 있습니다:

./fastmint.sh fire \
  --to 0xSALE \
  --sig "claimFreeShare()" \
  --start 23:00

유료 민트 전송

유료 민트에는 명시적인 금액과 일치하는 최대 한도가 필요합니다. 예를 들어 0.005 BNB씩 두 개의 셰어를 민트하려면 다음과 같이 사용합니다:

./fastmint.sh fire \
  --to 0xSALE \
  --sig "buyWithBnb(uint256,address,uint256)" \
  --args '[2,"0x0000000000000000000000000000000000000000",0]' \
  --value 0.01 \
  --maxValue 0.01 \
  --start 23:00

무료 민트는 --value 0을 사용해야 합니다. 이 도구는 한도 없이 0이 아닌 금액을 지정하면 거부하며, --maxValue를 초과하는 금액도 거부합니다.

특정 NFT 결과 요구

미리 보기에서 정확한 수의 NFT가 지갑으로 들어오는 경우에만 실행해야 한다면 --expectNft를 사용하세요:

./fastmint.sh fire \
  --to 0xNFT \
  --data 0xa0712d68...0002 \
  --value 0 \
  --expectNft 2

동적 인수

각 미리 보기 직전에 인수를 평가할 수 있습니다. 오픈 시간에 가까워질 때 데드라인, 지갑 주소, Agent ID 또는 컨트랙트 카운터가 변경되는 경우 유용합니다.

  • $wallet은 BNB Smart Chain에 연결된 지갑 주소로 해석됩니다.
  • $agentId는 지갑에 등록된 핸들에서 파생된 Agent ID 토큰 ID로 해석됩니다.
  • $zero는 제로 주소로 해석됩니다.
  • $now+1800은 현재 Unix 시간에 1,800초를 더한 값으로 해석됩니다.
  • {"getter":"totalMinted()","add":1}은 getter를 읽고 부호 없는 정수 결과에 1을 더합니다.
  • {"getter":"saleStart()","at":"0x..","mul":2}는 다른 컨트랙트에서 getter를 읽고 결과를 곱합니다.

예를 들어 다음 명령은 각 미리 보기마다 Agent ID와 데드라인을 갱신합니다:

./fastmint.sh fire \
  --to 0xSALE \
  --sig "mintFree(uint256,uint256,uint256,uint256,address)" \
  --args '["$agentId","1","0","$now+1800","0x0000000000000000000000000000000000000000"]' \
  --start 21:00

동적 호출은 대상, 셀렉터 및 값을 기반으로 잠금 키를 사용하므로, 인수가 변경되어도 동일한 민트가 실수로 두 번째 실행되는 것을 허용하지 않습니다.

타이밍 및 트리거 동작

오픈 시간 전후에 엔진은 서로 독립적인 여러 트리거에서 미리 보기를 전송할 수 있습니다. 기본 버스트는 3초 동안 지속되고, 미리 보기 간격은 최소 350밀리초이며, 최대 3개의 미리 보기가 동시에 진행될 수 있습니다.

버스트가 끝난 후에도 eth_call 루프는 타임아웃까지 성공적인 시뮬레이션을 계속 확인합니다. 타임아웃 기본값은 600초입니다. 따라서 오픈 예정 시간보다 늦게 판매가 시작되는 경우에도 미리 보기 한도를 반복적으로 소모하지 않고 처리할 수 있습니다.

Revert는 가능한 경우 컨트랙트의 Sourcify ABI, 내장 공통 오류 및 4byte 데이터를 사용해 디코딩됩니다. NotStarted, NotOpen, TooEarly와 같은 오류는 일시적인 오류로 처리됩니다. SoldOut, FreeGone, AlreadyClaimed, NotEligible, WrongValue와 같은 오류는 최종 오류로 처리됩니다. 알 수 없는 오류는 치명적 오류가 되기 전에 유예 기간 동안 대기합니다.

--waitOn 및 --fatalOn 정규 표현식을 사용해 분류를 맞춤 설정할 수 있지만, 컨트랙트의 오류 동작을 이해하는 경우에만 사용하세요.

이해해야 할 안전장치

  • 이 도구는 특정 민트에 대한 명시적인 사용자 지시를 요구합니다.
  • 실행 전에 잠금 파일이 기록되어 동일한 호출이 다시 브로드캐스트되는 것을 방지합니다.
  • 엔진은 자동으로 로그인하거나 개인 키를 요청하거나 시드 문구를 요구하지 않습니다.
  • Binance 위험 차단, 위험 플래그, allowance 변경 및 권한 변경이 발생하면 실행을 중지합니다.
  • 지갑에는 요청한 금액과 가스에 충분한 잔액이 있어야 합니다.
  • 미리 보기에는 시뮬레이션 코드 000000000, 요청 ID, 허용 가능한 네이티브 자산 유출이 있어야 하며 금지된 지갑 변경이 없어야 합니다.
  • PENDING_CONFIRMATION은 사용자가 Binance App에서 승인해야 한다는 의미이며, 트랜잭션을 다시 전송해서는 안 됩니다.
  • 실행 오류, revert된 트랜잭션 또는 누락된 영수증이 발생한 후에는 자동으로 재시도하지 마세요.

이전 실행을 확인하려면 다음을 사용하세요:

./fastmint.sh logs
./fastmint.sh locks

트랜잭션이 느리거나 실패한 것처럼 보인다는 이유만으로 잠금을 삭제하지 마세요. 새로운 명시적 사용자 지시가 있을 때만 삭제해야 합니다.

문제 해결

지갑 및 개발자 모드 오류

baw wallet status가 UNCONNECTED를 보고하면 수동으로 다시 로그인하세요. 351802 및 351804 코드는 일반적으로 Developer Mode가 비활성화되었거나 만료되었거나 잔액 한도를 초과했음을 나타냅니다. 351803 코드는 Binance의 위험 차단이며 우회해서는 안 됩니다.

시뮬레이션 및 컨트랙트 오류

Binance 백엔드가 오프닝 블록을 확인하기 전에는 351805 응답이 반복되어도 정상입니다. 하지만 인수가 잘못되었음을 나타낼 수도 있습니다. NotStarted 응답이 지속되면 설정된 시간이 잘못되었을 수 있습니다. SoldOut, FreeGone, AlreadyClaimed는 종료 상태입니다.

AgentIdRequired 또는 NotEligible는 호출에 Agent ID 인수가 필요하다는 의미일 수 있습니다. PaymentLow 및 WrongValue와 같은 결제 오류는 입력한 BNB 수량이 컨트랙트의 요구 사항과 일치하지 않음을 의미합니다.

네트워크 및 인증서 문제

RPC가 느리거나 요청 제한을 받는 경우 FASTMINT_RPCS 또는 FASTMINT_RPCS_EXTRA를 설정하세요. Node에서 UNABLE_TO_GET_ISSUER_CERT_LOCALLY를 보고하면 설치 섹션의 설명에 따라 CA 번들을 생성하거나 제공하세요.

DNS 가로채기로 인해 인증서 오류가 발생하거나 예상치 못한 ISP 도메인이 반환될 수도 있습니다. 에이전트가 제어할 수 없는 환경에서는 암호화된 DNS 또는 VPN을 사용하세요. 시스템 DNS를 자동으로 변경하지 마세요.

유용한 파일 및 명령

주요 파일은 다음과 같습니다.

  • fastmint.sh는 benchmark, recon, fire, log, lock 명령을 실행합니다.
  • fire.js는 사전 검사, 트리거, 미리 보기, 실행 및 영수증을 관리합니다.
  • recon.js는 컨트랙트 세부 정보와 민트 후보를 검색합니다.
  • bench.js는 지갑과 네트워크 환경을 확인합니다.
  • lib.js는 RPC 경쟁, WebSocket 헤드, NTP 보정, revert 디코딩 및 지갑 헬퍼를 제공합니다.
  • runs/에는 로그, 미리 보기 데이터, 실행 데이터, 영수증 및 잠금 파일이 저장됩니다.
  • cache/에는 다운로드한 Sourcify ABI가 저장됩니다.

각 실행 로그에는 로컬 타임스탬프와 T+x.xxxs 오프셋이 포함됩니다. 마지막 줄은 TIMELINE 요약입니다.

결론

fastmint-fcfs는 시간에 민감한 BSC 민트를 위해 컨트랙트 정찰, 동기화된 타이밍, 병렬 블록체인 신호, Binance 지갑 미리 보기 및 1회성 실행 보호를 결합합니다. 먼저 bench로 시작하고, recon으로 대상을 검사한 다음, --dry를 사용해 리허설을 진행하세요. calldata, 수량, 지갑 상태 및 사용자 승인을 확인한 후에만 실행해야 합니다.

이 프로젝트는 현재 BNB Smart Chain을 대상으로 합니다. 체인 ID, RPC 풀, Agent ID 레지스트리 및 탐색기 연동이 BSC에 특화되어 있으므로 멀티체인 도구로 취급해서는 안 됩니다.