배포
프로토콜은 두 체인에 걸쳐, 타협할 수 없는 순서로 배포됩니다.
지갑
서로 다른 세 역할이며, 결코 같은 키를 쓰지 않습니다.
| 지갑 | 할 수 있는 일 |
|---|---|
| 프로토콜 오너 | 토큰, 유동성 락, 미러 볼트 배포자를 제외한 모든 모듈 업그레이드; 팩토리 연결; 바스켓 등록; 1회만 설정 가능한 주소 설정; 프로토콜의 설정 변경; 에어드랍의 제외 목록 설정, 각 주식의 OFT 등록; 긴급 시 자산을 즉시 이동; 모듈이 실수로 보유한 것을 꺼내기(rescue); 종료 모드 시작 또는 취소, 그리고 그 30일이 지난 뒤 유동성 회수 |
| 키퍼 | 전환, 브리지 배치, 에어드랍을 트리거: 주기 열기, 주식 보내기, 따로 보관된 주식 귀속시키기. 2026-10-05부터는 훅과 락이 수령인을 위해 보관하는 것을 지급하고 LP 수수료를 거두는 일도 하며, 이 호출들은 누구에게나 열려 있음 |
| 배포자 | 컨트랙트 배포. 프로토콜 오너가 소유권을 수락할 때까지 팩토리를 소유하며, 첫 브리지 배치가 리모트 허브에 프로토콜 오너를 지정할 때까지 리모트 허브를 관리 |
스크립트는 서명자를 forge 명령줄에서, 또는 환경 변수의 원시 DEPLOYER_PRIVATE_KEY에서 가져옵니다.
DeployEthereumRail, DeployProtocol, DeployRemote, DeployBridge는 둘 다 지원합니다.
LaunchProtocol, RegisterBaskets, CreateMarket은 DEPLOYER_PRIVATE_KEY만 읽습니다.
열 번째 감사 루프부터 모든 브로드캐스트는 --slow --skip-simulation과 함께 실행합니다. 이것이
없으면 forge는 각 트랜잭션에 자신의 시뮬레이션이 센 가스를 이더리움의 Glamsterdam 업그레이드 이전
가격으로 주지만, 업그레이드 이후 컨트랙트 생성에는 그 4~7배가 필요합니다: 모든 생성이 가스 부족으로
실패합니다. 이것을 붙이면 forge는 이전 트랜잭션이 채굴된 뒤 각 트랜잭션에 노드의 추정치를 씁니다.
따라서 드라이 런의 가스 수치도 예산이 되지 않습니다: Glamsterdam에서 DeployProtocol은 약 2억
4,000만 가스, 각 마켓의 런칭은 1,500만~2,400만 가스가 듭니다.
순서
세 가지 제약이 순서를 정합니다. 모든 Ethereum 모듈은 생성 시점에 팩토리의 주소를 받으므로, 팩토리가 먼저 오고, 그 오너가 이후에 나머지를 팩토리에 연결합니다. Ethereum 레일의 라우터와 오라클은 브리지 허브와 마찬가지로 팩토리에 묶여 있으므로, 프로토콜 다음에 옵니다. 두 허브는 예측된 주소로 서로를 고정합니다.
DeployProtocol: 먼저 팩토리, 이어서 v4 권한 14개 전부에 맞춰 채굴한 훅, 락, 보유량 기록기, 배포자 컨트랙트, 볼트 구현 컨트랙트, 렌즈, 스왑 라우터, 그리고 에어드랍 컨트랙트인AirdropDistributor를 배포하며, 모두 팩토리에 연결됨. 이후 소유권은 프로토콜 오너에게 넘어가며, 프로토콜 오너가 이를 수락해야 함- 팩토리 주소를 받는
DeployEthereumRail: Ethereum의 오라클과 ETH → USDC 라우터이며, 오너가 이를 팩토리에 설정 DeployBridge --sig "predict()": 브리지 허브와 그 어댑터가 받게 될 주소를 출력- Robinhood Chain의
DeployRemote: 먼저 그 예측 주소에 고정된 리모트 허브, 이어서 주식 라우터, 오라클, 미러 볼트 구현 컨트랙트이며, 허브의 관리자가 이들을 허브에 연결하고, 에어드랍 경로와 주식 어댑터가 주어지면 이들도 연결(아래 참고). 2026-10-06부터는 실행할 때마다 Ethereum에서의 에어드랍 전달을 위한 리모트 허브의 두 가스 정책을 에어드랍 경로보다 먼저 설정하고(아래 참고), 오라클의 두 가드도 설정하며, 시퀀서 검사에 대한 결정이 없으면 시작을 거부함: Robinhood Chain에서 Chainlink의 L2 시퀀서 업타임 피드인SEQUENCER_UPTIME_FEED, 또는 의도적으로 검사를 끄는SEQUENCER_CHECK_OFF=true중 하나이며, 둘을 함께 쓸 수는 결코 없고,SEQUENCER_GRACE_PERIOD(기본값 3,600초)는 피드와 함께일 때만 씀. Chainlink는 Robinhood Chain을 위한 그런 피드를 공개하지 않으므로, 현재의 메인넷 실행은SEQUENCER_CHECK_OFF=true를 설정하며, 그런 피드가 공개되면 StockFun의 오너가 나중에 이를 설정함(setSequencerUptimeFeed). 그다음 스크립트는 허브, 라우터, 오라클 뒤에 각 주식의 오라클 일시 중지 검사를 켜므로(setOraclePauseCheck), 어떤 예측 주소도 움직이지 않음 DeployBridge: 예측 주소에 배포되는 브리지 허브와 그 어댑터; 오너가 허브에 어댑터를 한 번 지정(setAdapter). 2026-10-05부터 이 스크립트는 팩토리가 이미 허브를 지정하고 있으면 아무것도 배포하기 전에 멈추며(2026-10-06부터는 예측 주소보다 먼저 하는 첫 번째 확인), 서명자가 팩토리를 소유하고 있으면 허브를 지정하기 전에 주식을 매핑함setBridgeHub— 첫 마켓 전에. 2026-10-05부터는 이미 등록된 바스켓을 운반할 수 없는 허브를 거부함(UnmappedBridgeStock)- 모든 바스켓 주식에 대해 브리지 허브에서
addStockMapping호출 - 바스켓 등록:
PlanBridgeBaskets가 오너의 호출을 출력. 2026-10-06부터 바스켓에는 최대 다섯 개의 주식만 담을 수 있음: 바스켓 참고 LaunchProtocol: 전체 공급량이 잠긴 포지션에 들어가는$STOCKFUN, 그 볼트,BuybackBurner와setBuybackWallet. 먼저 에어드랍 컨트랙트가 지정되어 있어야 하며, 이는DeployProtocol이 수행함: 2026-10-05부터 이 스크립트는 민트 전에, 토큰이 갖게 될 주소에 대해 런칭 운영자를$STOCKFUN의 제외 목록에 올림. 2026-10-06부터는 프로토콜 마켓이 지정되기 전에 멈춘 실행이 두 번째$STOCKFUN을 민트하는 대신, 남겨 둔 토큰과 볼트를 먼저 확인한 뒤 이를 이어받아 재개함(--sig "resume(address,address)"); 프로토콜 마켓이 지정된 뒤에는 이 스크립트가 더 이상 실행되지 않으며, 남은 단계는 수작업으로 진행함- 오너가 에어드랍 컨트랙트에서, Ethereum에 있는 각 주식의 OFT에 대해
registerStockOft호출
업그레이드 가능한 각 모듈은 두 컨트랙트로 배포됩니다: 먼저 구현 컨트랙트, 그다음 프록시입니다.
predict()는 이를 계산에 넣습니다: 브리지 허브의 프록시는 배포자의 nonce + 1에, 그 어댑터의
프록시는 nonce + 3에 배포됩니다.
StockFun은 LayerZero 피어를 전혀 페어링하지 않습니다: USDG OFT의 피어는 발행사의 것이며, 사전 점검은 이를 확인할 뿐입니다.
2026-10-06부터 로컬 스크립트와 테스트넷 스크립트인 LocalRun과 DeployTestnetBridge는 실제로
트랜잭션을 브로드캐스트할 때에만 배포 파일을 쓰며, 아홉 번째 감사 루프 이후로는
DeployTestnetRail도 그렇습니다: 드라이 런으로 얻은 주소에는 코드가 없기 때문입니다. 테스트넷에서
DeployTestnetRail은 같은 세 가지 시퀀서 입력을 모두 선택 사항으로 받으며(피드가 없으면 검사는
꺼진 채로 남습니다. Chainlink는 테스트넷에 대해서도 그런 피드를 올려 두지 않았습니다), 각 주식의
오라클 일시 중지 검사를 켭니다; Ethereum 스크립트는 두 가드를 모두 꺼 둡니다. 테스트넷 키퍼는
KEEPER_REQUIRE_MARKET_OPEN, KEEPER_AIRDROP_AFTER_SESSION, 그리고 2026-10-06부터는
KEEPER_CONVERT_ONCE_PER_WINDOW를 false로 두고 실행되며, 그래서 루프를 돌 때마다 전환합니다:
키퍼를 참고하십시오. 일곱 번째 감사 루프 이후로, 2026-10-06부터, 키퍼는 시작하기 전에
각 RPC의 체인을 자신의 설정과 대조합니다: 테스트넷 키퍼는 KEEPER_CHAIN_ID=11155111을, 브리지를
쓴다면 KEEPER_REMOTE_CHAIN_ID=46630도 설정하며, 메인넷 키퍼는 KEEPER_CHAIN_ID=1과 4663을
설정합니다. 여덟 번째 감사 루프 이후로는 둘 다 필수입니다: KEEPER_CHAIN_ID가 없거나, 브리지를
쓰는데 KEEPER_REMOTE_CHAIN_ID가 없으면 키퍼는 시작을 거부합니다. 앱의 데이터 Worker도 같은
방식으로 엔드포인트의 체인을 확인하며, 그 공개 RPC는 두 체인 ID를 따르므로, 테스트넷 Worker에
필요한 것은 그 둘뿐입니다.
2026-10-06의 LayerZero 테스트넷 실행은 프로덕션 스크립트, 또는 그 본체를 유지한 테스트넷용 래퍼와,
컨트랙트의 테스트넷 전용 폴더에 있는 자체 테스트 토큰, 거래 장소, 어댑터로 Sepolia와 Robinhood
Chain의 테스트넷(체인 46630)에 프로토콜을 배포했습니다. 아홉 번째 감사 루프 이후로 사전 점검은 그
두 파일과 SEPOLIA_RPC_URL, ROBINHOOD_TESTNET_RPC_URL이 주어지면 그 실행도 확인합니다. 그
실행이 무엇을 증명했고 무엇을 증명하지 않았는지는 테스트와 검증에
있습니다.
에어드랍
2026-10-04부터 에어드랍 컨트랙트는 프로토콜과 함께 배포됩니다. 그 설정은 환경 변수에서 가져옵니다:
| 스크립트 | 변수 | 기본값 | 역할 |
|---|---|---|---|
DeployProtocol |
AIRDROP_LZ_ENDPOINT |
없음: 로컬 레일만 사용 | Robinhood Chain에서 매수한 주식을 위한, Ethereum의 LayerZero 엔드포인트 |
DeployProtocol |
AIRDROP_REMOTE_EID |
엔드포인트가 있으면 30416 | 전달의 유일한 출처인 Robinhood Chain의 LayerZero 엔드포인트 ID |
DeployProtocol |
AIRDROP_CYCLE_LENGTH |
86,400 (24시간) | 측정 구간의 길이, 초 단위이며 정시 단위의 값 |
DeployProtocol |
AIRDROP_CYCLE_OFFSET |
46,800 (13:00 UTC) | 측정 구간이 끝나는 위치, 00:00 UTC 이후의 초 단위이며 정시 단위의 값: 1년 내내 미국 개장 전 |
DeployRemote |
AIRDROP_DISTRIBUTOR |
없음 | 미러 볼트가 주식을 보내는 Ethereum의 에어드랍 컨트랙트 |
DeployRemote |
AIRDROP_RECEIVE_GAS, _MIN, _MAX |
650,000, 200,000, 1,500,000 | 2026-10-06부터: 키퍼가 기본값을 요청할 때 Ethereum에서 각 전달의 lzReceive 가스(주식 OFT가 강제하는 가스에 더해지는 몫), 그리고 키퍼가 요청할 수 있는 값의 하한과 상한 |
DeployRemote |
AIRDROP_COMPOSE_GAS, _MIN, _MAX |
1,250,000, 600,000, 4,000,000 | 에어드랍 컨트랙트에 대한 각 전달의 호출인 lzCompose의 가스, 방식은 같음. 2026-10-06까지는 수치 하나, 600,000이 모든 전달의 가스를 정했음 |
DeployRemote |
STOCK_ADAPTERS |
없음 | 쉼표로 구분한 목록으로, STOCKS의 항목마다 LayerZero 어댑터 하나, 어댑터가 없는 주식은 0 |
이 값들은 시작값입니다: 오너는 나중에 일정(setCycleSchedule)과 LayerZero
엔드포인트(setLayerZero)를 바꿀 수 있습니다. DeployRemote에서 AIRDROP_DISTRIBUTOR와
STOCK_ADAPTERS는 선택 사항입니다: 리모트 허브의 관리자가 나중에 설정할 수 있습니다(setAirdrop,
setStockAdapter). 두 가스 정책은 실행할 때마다 환경 변수나 허브의 기본값에서 가져와 분배
컨트랙트보다 먼저 설정되며, 분배 컨트랙트의 compose 가스는 그 범위 안에 들어야 합니다; 관리자는
나중에 이를 바꿀 수 있습니다(setAirdropReceiveGas, setAirdropComposeGas). uint128을 넘는
값은 실행을 멈춥니다. 그다음은 오너의 단계입니다:
- 팩토리의
setAirdropDistributor,DeployProtocol이 수행. 오너는 나중에 다른 컨트랙트를 지정할 수 있으며, 볼트는 이를 실시간으로 읽고, 교체된 분배 컨트랙트도 자신의 모든 주기를 그곳에서 청구할 수 있는 상태로 유지합니다 - 에어드랍 컨트랙트의
registerStockOft, Ethereum에 있는 각 주식의 OFT에 대해 호출하며, 그 OFT는 컨트랙트 자신의 LayerZero 엔드포인트를 사용해야 합니다 setExclusions: 소각 주소 외에 제외할 주소가 필요한 토큰에만 해당하며, 기본적으로 그런 마켓 토큰은 없습니다; 런칭 운영자를 담은$STOCKFUN의 목록은LaunchProtocol이 설정합니다
주식 어댑터 자체, 즉 주식마다 하나인 Robinhood Chain의 락박스 어댑터와 Ethereum의 그 OFT는
메인넷용으로는 저장소에 없습니다: LayerZero의 oft-evm 패키지가 필요합니다. DeployRemote는 그
주소를 받습니다. 2026-10-06의 LayerZero 테스트넷 실행은 테스트용 어댑터, 즉 테스트 주식 위의
LayerZero OFTAdapter와 래핑된 주식을 위한 LayerZero OFT를, 테스트넷 전용 폴더에서
사용했습니다.
Robinhood Chain에서 오는 각 전달은 Ethereum에서 두 번의 호출로 실행됩니다: 래핑된 주식을 에어드랍
컨트랙트에 민트하는 주식 OFT의 lzReceive, 그리고 이를 적립하는 에어드랍 컨트랙트의 lzCompose.
2026-10-06부터 키퍼는 Ethereum에서의 시뮬레이션으로 고른 두 호출의 가스를 전송할 때마다
지정하며(키퍼 참고), 리모트 허브는 각 값을 자신의 정책 범위 안으로 맞추고, 0은
기본값을 뜻합니다. 기본값은 Ethereum의 Glamsterdam 업그레이드 이후 Sepolia에서 측정한 가장 무거운
경우를 각각 35 %와 30 %의 여유를 두고 감당합니다: 그곳에서 lzReceive는 에어드랍 컨트랙트가 이미
보유한 잔액으로의 전달에 184,702 가스, 주식의 첫 전달에 481,548 가스가 필요합니다; compose는
주기가 이미 그 주식을 나열하고 있을 때 105,075, 키퍼가 연 주기가 아직 그 주식을 나열하지 않을 때
433,645, 그 전달이 주기의 첫 적립이기도 할 때 약 531,600, 전달 자체가 주기를 열 때 962,154가
필요합니다. 테스트에서 만든 가장 무거운 전달, 즉 긴 이력을 가진 제외 홀더 열여섯을 상대로 주기를
열면서 따로 보관된 주식 네 개도 함께 가져가는 전달은 Glamsterdam의 가격으로 약 280만 가스가
필요하며, compose 상한보다 낮습니다. Glamsterdam 이전에, 테스트에서 콜드 상태로 측정한 값은 열려
있는 주기로의 전달이 약 85,000, 제외 주소 하나를 상대로 주기를 여는 전달이 약 275,000, 가장 무거운
경우가 약 1,016,000이었습니다. 가스가 부족한 전달은 아무것도 잃지 않고 실패합니다: 그 전달은
LayerZero의 엔드포인트에 저장된 채로 남으며, compose만 실패한 경우 래핑된 주식은 이미 에어드랍
컨트랙트에 있고, 누구나 더 많은 가스로 이를 다시 실행할 수 있습니다. 2026-10-06부터는 키퍼가
자신의 한도 안에서 직접 이를 하며, 두 번째 실패에는 알림을 보냅니다.
팩토리 연결
팩토리는 오너와 세 지갑만으로 초기화되며, 그 설정은 기본값에서 시작합니다. 나머지는 모두 오너가 이후에 지정합니다:
setLaunchModules: 훅과 락, 단 한 번만; 둘 다 이 팩토리를, 락은 이 훅도 지정해야 함setDeployers: 두 배포자 컨트랙트, 교체 가능setVaultImplementation: 이후 생성되는 마켓의 볼트 뒤에 놓이는 구현 컨트랙트setHoldingRecorder: 새 마켓 토큰이 보고하는 대상인 기록기setAirdropDistributor: 볼트가 주식을 넘기는 에어드랍 컨트랙트; 이 팩토리를 지정해야 함setTreasuryRouter,setTreasuryOracle,setSwapRouter,setBridgeHub,setProtocolMarket
락, 볼트 구현 컨트랙트, 보유량 기록기가 지정되기 전에는 어떤 마켓도 생성할 수 없습니다.
브리지 허브와 스왑 라우터
setBridgeHub는 한 번만 설정할 수 있습니다. 놓치면 되돌릴 수 없습니다. 2026-10-05부터는 이미
등록된 바스켓의 모든 주식을 변환할 수 없는 허브를 거부합니다: 먼저 허브에서 그 주식들을
매핑하십시오.
setBridgeHub는 첫 마켓이 생성되기 전에 호출해야 합니다. 모든 TreasuryVault는 생성 시점에
브리지 허브 주소를 고정합니다. 주소가 0인 상태에서 생성된 볼트는 영원히 로컬 레일에 머물며,
Robinhood Chain으로는 결코 아무것도 보내지 않습니다.
setSwapRouter는 1회만 쓸 수 있는 설정이 아닙니다: 오너가 언제든 변경할 수 있습니다. 더 이상 어떤
볼트에도 영향을 주지 않습니다: 2026-09-28에 크리에이터 바이백이 코드에서 제거되면서 볼트가 이 값을
읽지 않게 되었습니다. 이 설정은 공식 스왑 라우터의 주소를 기록하며, 사전 점검이 그 주소를
확인합니다.
훅과 채굴된 주소
훅의 주소는 하위 비트에 v4 권한을 인코딩합니다: CREATE2 솔트를 무차별 대입해 찾습니다. 2026-10-02부터 채굴하는 주소는 훅 프록시의 주소이며, 권한 비트 14개가 모두 설정되어 있습니다. 주소는 프록시의 바이트코드와, 구현 컨트랙트의 주소를 담은 프록시의 생성자 인자에 따라 달라집니다. 새로 배포할 때는 다시 채굴해야 하며, 업그레이드는 주소를 유지합니다.
foundry.toml에는 bytecode_hash = "none"과 evm_version = "cancun"이 있어야 하며, 그렇지
않으면 채굴한 주소가 배포된 컨트랙트와 일치하지 않습니다.
업그레이드
업그레이드는 프로토콜 오너가 모듈의 프록시에 대해 새 구현 컨트랙트를 지정하는 호출이며, 즉시
효력이 발생합니다. 매 업그레이드 전에 contracts/script/check-storage-layouts.sh가 새 스토리지
레이아웃을 contracts/storage-layouts/에 기록된 레이아웃과 비교하며, 끝에 추가하는 것 외의 변경이
있으면 실패합니다. 2026-10-05부터는 모든 구조체를 모든 깊이까지, 크기를 포함해 비교하며, 스토리지
배열의 원소인 구조체는 어떤 변경이든 거부합니다: 커질 수 있는 것은 매핑의 값인 구조체나 마지막
상태 변수뿐이며, 그 끝에서만 커질 수 있습니다. 의도적인 변경 뒤에는 --write가 기록을 갱신합니다.
리모트 허브의 가스 정책은 2026-10-06의 아홉 번째 감사 루프와 함께 들어왔습니다. 그 이전에 배포된
뒤 업그레이드된 허브는 두 정책을 모두 0으로 읽으며, 그에 맞는 코드로 업그레이드된 미러 볼트는 두
정책이 모두 설정될 때까지 모든 에어드랍 전송과 견적을 거부합니다(AirdropGasNotSet). 따라서
순서는 다음과 같습니다: 리모트 허브를 업그레이드하고, 두 정책을 설정하고(setAirdropReceiveGas,
setAirdropComposeGas), 이어서 새 미러 볼트 구현 컨트랙트를 지정해 각 미러 볼트를 업그레이드한
다음, 그 뒤에야 허브에 정책을 묻고 인자 세 개로 전송하는 아홉 번째 루프의 키퍼를 시작합니다.
그동안 이전 키퍼는 허브의 기본값으로 계속 전송합니다. 새 코드로 배포된 허브는 초기화할 때 기본값을
설정합니다.
USDG 어댑터의 배치 설정은 2026-10-06의 열 번째 감사 루프와 함께 들어왔습니다: 브리지 배치의 각
마켓이 더하는 compose 가스와, 배치 하나가 담는 마켓의 최대 수입니다. 그 이전에 배포된 뒤
업그레이드된 어댑터는 둘 다 0으로 읽으며, 그것들이 설정될 때까지 모든 배치와 견적을
거부합니다(BatchGasNotSet). 따라서 어댑터의 업그레이드는 같은 트랜잭션에서 그것들을
설정하고(setBatchGas(400000, 17)을 담은 upgradeToAndCall), 이어서 오너가 예전 compose 가스
1,200,000을 이제 모든 배치에 필요한 기본분으로 낮춘 다음(setSettings, 200,000), 그 뒤에야
배치마다 상한을 읽는 열 번째 루프의 키퍼를 시작합니다. 이전 키퍼는 한 번에 준비된 마켓이 17개를
넘지 않는 동안 업그레이드된 어댑터와 계속 동작합니다. 테스트넷의 어댑터는 2026-10-06에 이렇게
업그레이드되었고, 그 다음 배치는 새 compose 가스로 통과했습니다.
앱의 데이터 서비스가 읽는 내용을 바꾸는 업그레이드는 그 서비스보다 먼저 적용됩니다. 2026-10-06부터 Lens는 각 볼트의 상태와, 훅과 락이 그 볼트에 지급해야 할 것을 담고 있으며, 이 필드들을 읽는 Worker와 앱은 그보다 오래된 Lens를 읽을 수 없습니다: 먼저 Lens를 업그레이드하십시오. 일곱 번째 감사 루프는 Lens도, Worker가 공개하는 것의 형태(스키마 7)도 바꾸지 않습니다: 그 Worker와 앱은 어느 순서로든 배포됩니다. 여덟 번째는 형태를 바꾸지만(스키마 8: Robinhood Chain 오라클이 주식의 가격을 보류할 때 각 주식 가격이 그 가격이 빠진 이유를 알려 줌) Lens는 바꾸지 않으며, 그 Worker와 앱도 여전히 어느 순서로든 배포됩니다: 이전 앱은 그 이유를 무시하고, 이 앱은 이유가 없는 이전 Worker를 읽습니다. 아홉 번째는 스키마 8을 유지합니다.
Robinhood 레일의 오라클은 다른 모든 TreasuryOracle과 마찬가지로 두 가드가 꺼진 상태로
시작합니다. 따라서 리모트 허브에서 지정한 교체 오라클(setOracle)도 가드가 꺼진 상태로 시작하며,
허브의 관리자는 배포 스크립트가 하듯 그 오라클에 대해 가드를 다시 켭니다: 각 주식의 오라클 일시
중지 검사와, 설정되어 있었다면 시퀀서 피드입니다. 이미 초기화된 미러 볼트는 초기화될 때의 오라클을
유지합니다.
설정
설정은 프로토콜 오너가 그 설정을 보유한 모듈에 대해 하는 호출이며, Robinhood Chain에서는 리모트
허브의 관리자가 합니다; 즉시 효력이 발생하고 이벤트를 발생시킵니다. 모든 모듈은
신뢰 모델에 정리된 기본값으로 시작합니다. 브리지 어댑터는 배포 시의 가스로
시작합니다: USDG 레일에서는 배치의 마지막 단계 중 모든 배치에 필요한 부분인 COMPOSE_GAS(열 번째
감사 루프 이후로 DeployBridge의 기본값은 200,000, 그 전까지는 단계 전체에 대해 1,200,000)에
배치의 마켓마다 400,000을 더한 가스와 배치당 최대 마켓 17개(setBatchGas; 가장 큰 배치의 가스는
많아야 24,000,000), 그리고 30 베이시스 포인트의 Curve 한도; 정식 브리지 레일에서는 두
티켓의 가스와, 2026-10-05부터는 입금 티켓의 비용을 계산하는 기준 바이트 수(DeployTestnetBridge의
DEPOSIT_CALLDATA_LENGTH; 0이면 기본값 1,024를 사용). 리모트 허브는 에어드랍 전달의 두 가스
정책을 갖춘 채 시작합니다(위 참고).
메인넷 이전
- 긴급 모드 전체 리허설: 이동, 일시 중지, 일시 중지 해제
- 공개 오픈 전에, 검증용 볼트에서 첫 소규모 에어드랍. 2026-10-06의 LayerZero 테스트넷 실행은 LayerZero의 테스트넷 엔드포인트, DVN, 익스큐터 위에서 StockFun의 코드를 처음부터 끝까지 실행했습니다; 이 실행은 Paxos의 USDG 쌍도, Robinhood의 주식과 그 어댑터도, 실제 피드와 유동성도, 메인넷의 가스, 수수료, 완결성도 증명하지 않습니다
- 원격 체인의 가격 피드에 대한 최신 조사
- 사전 점검을 통한 USDG OFT의 LayerZero 피어 및 USDG 일시 중지 상태 검증; 여덟 번째 감사 루프 이후로 사전 점검은 오라클의 가드도 그 매니페스트와 대조하며, 매니페스트는 시퀀서 검사의 상태(현재는 꺼짐)를 밝혀야 합니다
- LayerZero의 전송 라이브러리에서(
getExecutorConfig) 읽은, Paxos의 USDG가 Robinhood Chain으로 가는 경로의 크기 제한, 그리고 그것이 10,000바이트가 아니면 그에 맞춰 설정한 브리지 배치의 마켓 수 상한: 많아야 (크기 − 392) ÷ 544개 마켓(열 번째 감사 루프 이후) - 외부 검토 — 기존 정형 증명은 크로스체인 레일을 다루지 않습니다