신뢰 모델
누가 무엇을 할 수 있는가. 마케팅용 답이 아니라 정직한 답입니다.
2026-10-02부터 프로토콜의 거의 모든 컨트랙트는 업그레이드할 수 있습니다: StockFun의 오너가 그 코드를 교체할 수 있으며, 교체는 즉시 효력을 가집니다. 2026-10-05부터는 택스에서 에어드랍 주기에 이르는 프로토콜의 수치들도 오너의 온체인 설정이며, 이 역시 즉시 효력을 가집니다: 이 문서가 제시하는 수치는 그 기본값이며, 고정된 채로 남는 것과 함께 아래에 정리되어 있습니다. 이 문서가 어떤 모듈에 부여하는 모든 규칙은 그 모듈의 현재 구현 컨트랙트의 규칙입니다. 업그레이드 권한 밖에 있는 것은 토큰, 유동성 락, 그리고 Robinhood Chain의 미러 볼트 배포자입니다.
누구도 할 수 없는 것
아래 항목은 업그레이드할 수 없는 컨트랙트에 기반합니다. 오너가 무엇을 업그레이드하거나 설정하든 유지됩니다.
- 새 토큰 민트. 공급량은 생성자에서 한 번만 민트되며, 토큰은 업그레이드할 수 없습니다
- 홀더의 승인 없이 그 홀더의 토큰 이동. 토큰의 setter인
setRecorder는 어떤 잔액도 옮기지 않으며, 2026-10-05부터 있는 토큰의 레스큐는 토큰 자신의 주소로 보내진 것만 옮깁니다 - 30일의 공개 사전 공지 없이 풀의 유동성 제거. 락은 업그레이드할 수 없고, 유일한 출구는 아래의 종료 모드이며, 그 30일은 설정이 아니라 상수입니다. 2026-10-05부터 있는 락의 레스큐는 포지션에도, 락이 수령인을 위해 보관하는 수수료 몫에도 닿지 않습니다
- 운영 중인 풀의 LP 수수료나 틱 간격 변경. 각 풀은 생성될 때의 값을 유지합니다: 이 값들은 풀 키의 일부이며, 락이 그 키를 보관합니다
현재 코드가 배제하는 것
현재 구현 컨트랙트에서는 오너를 포함해 누구도 아래 항목을 할 수 없습니다. 각 항목은 오너가 업그레이드할 수 있는 모듈에 기반합니다.
- StockFun 풀에 유동성 추가. 2026-10-01부터 유동성 락만 할 수 있습니다
- 수수료 지갑이나 볼트를 통한 거래 차단. 거래 중에 지급되는 것은 트레저리 몫뿐이며, 2026-10-05부터는 이를 거부하는 볼트에는 대신 그 금액이 지급해야 할 것으로 남습니다; 나머지는 이후에 청구됩니다
- 생성 후 바스켓 구성 변경
- 기존 볼트가 읽는 가격 피드 변경. 각 피드는 오라클이 초기화될 때 한 번만 기록되며, 각 볼트는 자신의 오라클을 유지합니다; 피드의 하트비트는 설정이며, 2026-10-06부터는 가격을 보류할 수만 있을 뿐 결코 바꾸지 못하는, Robinhood Chain에서의 오라클의 두 가드도 설정입니다
$STOCKFUN바이백 토큰을 소각 주소 외의 곳으로 전송- 에어드랍 받을 사람 선택, 또는 다른 사람의 몫 청구. 배분은 기록된 보유량에 따라 비례 배분으로 정해지며, 청구는 홀더 본인만 합니다
크리에이터가 할 수 있는 것
- 자신의 마켓에서 일어나는 모든 거래의 크리에이터 항목 받기, 기본값 2 %, 그리고 이를 청구하기.
2026-10-05부터는 원하면 다른 주소로 청구할 수 있음(
claimCreatorFeesTo) - 첫 블록들 동안 정상 택스를 내는 주소들로 이루어진, 자신의 마켓의 안티 스나이프 화이트리스트 설정하기: 기본값으로 최대 20개 주소, 생성 트랜잭션에서 고정, 공개, 이후 변경 불가
- 다른 누구와 마찬가지로 자신의 토큰을 매수하고 매도하기
크리에이터는 할당을 받지 않고, 유동성을 통제하지 않으며, 자신의 마켓을 일시 중지할 수 없습니다. 트레저리에 대한 권한은 없습니다: 다른 홀더와 똑같이 주식을 받을 뿐입니다.
키퍼가 할 수 있는 것
스스로 고른 시점에, 스스로 지정한 금액으로, 스스로 제안한 경로로 전환을 트리거합니다. 항상 볼트의 오라클 한도와 각 주식의 배정분 안에서이며, 누가 무엇을 받는지는 결코 선택하지 않습니다. 2026-10-01부터는 주식을 건너뛰어도 바스켓 비중이 더 이상 바뀌지 않습니다: 그 주식은 자신의 몫을 나중을 위해 유지합니다. 2026-10-05부터 볼트는 키퍼가 지정한 최소 수량을 실제로 도착하는 양에 적용합니다. 2026-10-06부터 키퍼는 2026-09-27에 결정된 대로 에어드랍 측정 구간마다 한 번 볼트의 ETH를 전환합니다: 이는 볼트가 강제하지 않는 키퍼 자신의 규칙이며, 볼트는 그 ETH가 마지막으로 전환된 때만 기록합니다.
2026-10-05부터 키퍼는 브리지 배치를 보내는(bridgeReady) 유일한 주체이기도 하며, StockFun의 오너와
함께 Robinhood Chain에 마켓의 미러 볼트를 미리 배포하는(predeploy) 유일한 주체입니다. 그 전까지는
둘 다 누구에게나 열려 있었습니다. 리모트 허브는 배치를 통해 키퍼를 알게 되므로, 첫 배치 전에는
StockFun의 오너가 첫 마켓의 볼트를 미리 배포하며, 키퍼가 볼트를 미리 배포할 수 없는 마켓은 그
배치에서 제외됩니다.
에어드랍에서는 2026-10-04부터: 마켓의 주기 열기(openCycle), 볼트의 주식을 에어드랍 컨트랙트로
보내기(sendToAirdrop, Robinhood Chain에서는 LayerZero 수수료를 지불), 따로 보관된 주식
귀속시키기(assignUnassigned). 키퍼는 시점을 정할 뿐, 수량도, 자산도, 목적지도, 받는 사람도 정하지
않습니다: 수량은 볼트의 잔액이고, 목적지는 프로토콜이 지정한 컨트랙트이며, 배분은 보유량에 따라
정해집니다. 주기를 열거나 따로 보관된 주식을 귀속시키는 일은 누구나 할 수 있으며, 누가 호출하든
결과는 같습니다. 다음 마감 시각(기본값 13:00 UTC) 이후에 도착한 전송은 다음 날의 측정 구간을
기준으로 측정됩니다. 그 일일 단계는 2026-10-05부터 작성되어 있습니다: 키퍼를
참고하십시오. 일곱 번째 감사 루프 이후로, 2026-10-06부터, 키퍼는 주식이 그 전송 비용만큼의 가치가
된 뒤에만 그 주식을 보내며, 이는 그 주식이 언제 나가는지만 정합니다: 기다리는 것은 이후의 측정
구간까지 볼트에 남습니다. 같은 날의 아홉 번째 이후로는 각 전달이 Ethereum에서 받는 가스도
지정하며, 리모트 허브는 그 가스를 StockFun의 오너가 정하는 하한과 상한 사이로 유지합니다. 또한
Ethereum의 LayerZero 엔드포인트에서 멈춘 전달을 자신의 키에서 다시 실행하는데, 이는 누구나 할 수
있는 일입니다: 둘 다 전달되는 것도, 그 목적지도 바꾸지 않습니다.
2026-10-05부터 키퍼는 또한 매 주기, 훅과 락이 이를 거부한 수령인을 위해 보관하는 것을
지급하며(payTreasury, payOwed), LP 수수료와 함께 생성된 풀의 LP 수수료를
거둡니다(collectFees). 이 세 호출은 누구나 할 수 있으며, 컨트랙트가 지정한 수령인에게만
지급합니다.
키퍼의 키는 핫 키입니다. 키퍼는 자산이 어디로 갈지 결코 선택하지 않습니다.
StockFun의 오너가 할 수 있는 것
실제 신뢰가 놓이는 곳은 여기입니다. StockFun의 오너는 프로토콜 오너입니다: Ethereum에서 팩토리의 오너이며, Robinhood Chain에서는 리모트 허브가 이를 반영합니다.
- 토큰, 유동성 락, 미러 볼트 배포자를 제외한 모든 모듈 업그레이드: 즉시 효력이 발생하며 사전 공지는 없음. 볼트는 두 체인 모두에서 하나씩, 마켓별로 업그레이드됩니다
- 프로토콜의 수치 변경: 즉시 효력이 발생하며 사전 공지는 없음: 택스와 그 배분, 안티 스나이프, 생성 수수료, 새 마켓의 형태, 전환 기준치와 볼트의 가격 한도, 에어드랍 주기, 그리고 아래에 정리된 나머지 수치
- 락의 종료 모드를 시작하고, 30일 뒤
$STOCKFUN의 유동성을 포함해 모든 풀의 유동성 전체를 어떤 주소로든 회수 - 각 토큰이 자신의 전송을 보고하는 보유량 기록기 지정. 보고가 실패하면 전송도 실패합니다: 이는
하나의 실패가 결코 나머지를 막지 않는다는 규칙의 의도된 유일한
예외이며(아키텍처 참고), 즉시 쓸 수 있는 두 가지 조치 수단이 있습니다: 토큰의
기록을 멈추는
setRecorder(0), 그리고 기록기를 제자리에서 업그레이드하는 것. 2026-10-05부터 토큰은 자신의 풀이 있는 곳이 아닌 다른 UniswapPoolManager에 묶인 기록기를 거부합니다. 기록기는 제자리에서 업그레이드하며, 그러면 그 기록이 유지됩니다. 운영 중인 토큰에서는 기록기를 교체하지 않습니다: 2026-10-05부터 교체된 기록기는 UniswapPoolManager밖에 있는 토큰의 공급량에서 시작하므로 거래는 계속되고, 에어드랍은 교체 전에 시작된 측정 구간을 측정하지 않습니다; 하지만 교체된 기록기는 자신이 움직이는 것을 보지 못한 홀더를 다음 움직임 전까지 아무것도 보유하지 않았던 것으로 읽습니다. 따라서 그 기간에 걸친 측정 구간에서 그 홀더는 덜 받으며, 다른 누구도 더 받지 않습니다. 2026-10-05까지는 새 기록기가 모든 매도를 실패하게 만들었고, 그 이후에 열린 주기의 에어드랍 몫을 망가뜨렸습니다 - 바스켓이 고정되기 전에 바스켓 등록
- 1회만 쓸 수 있는 주소를 한 번 설정
- 키퍼와 수수료 지갑 설정. 청구는 청구 시점에 설정된 지갑으로 지급되므로, 지갑을 바꾸면 아직 청구되지 않은 팀 잔액이나 바이백 잔액도 새 지갑으로 향합니다
- 팩토리에 기록된 공식 스왑 라우터 변경. 훅은 이 라우터를 통해 안티 스나이프 화이트리스트를 인식합니다
- 향후 볼트가 다른 주식 라우터나 오라클 레지스트리를 가리키도록 지정; 기존 볼트는 자신의 것을 유지
- 각 바스켓 주식을 해당 Robinhood Chain 토큰에 매핑, 추가만 가능
- 그 이후에 닫히는 측정 구간에 적용되는, 각 토큰의 에어드랍 제외 목록 설정(
setExclusions); Ethereum에서 각 주식의 OFT 등록(registerStockOft) - 볼트가 주식을 보내는 에어드랍 컨트랙트 지정(
setAirdropDistributor); 교체된 컨트랙트도 자신의 모든 주기를 그곳에서 청구할 수 있는 상태로 유지합니다. Robinhood Chain에서는 에어드랍 경로, 즉 컨트랙트와 각 전달의 가스를 지정(setAirdrop)하고, 각 주식의 어댑터를 지정(setStockAdapter); 2026-10-06부터는 각 전달이 Ethereum에서 받는 가스의 기본값, 하한, 상한을 설정(setAirdropReceiveGas,setAirdropComposeGas) - 향후 전송에 쓸 브리지 어댑터를 즉시 교체(
changeAdapter). 새 어댑터는 고정값이 정확히 같아야 합니다: 같은 허브, 팩토리, 현금 토큰, 리모트 허브, 목적지. 2026-09-29 보안 감사는 리모트 허브가 새 어댑터의 배치를 거부하게 된다는 것을 발견했습니다(M-2); 2026-10-05에 오너는 이를 그대로 유지하기로 결정했으므로, 어댑터는 같은 주소를 유지한 채 제자리에서 업그레이드하는 방식으로 바꿉니다 - 전환과 브리징을 즉시 일시 중지. 일시 중지된 리모트 허브도 각 배치가 담고 있는 역할 변경은 적용합니다. 에어드랍 컨트랙트에서 일시 중지는 전송, 주기 개시, 따로 보관된 주식의 귀속을 멈추지만, 청구는 결코 멈추지 않습니다
- 트레저리, 브리지 허브, 에어드랍 컨트랙트에서 어떤 자산이든 어떤 주소로든 사전 공지 없이 즉시
이동(
emergencyTransfer), 두 체인 모두에서, 언제든; 리모트 허브에서는 2026-10-05부터 한 마켓에 차감하는 방식으로도 가능하며, 그 마켓의 장부는 같은 호출에서 정산됨(emergencyTransferFromPending,emergencyTransferRecord) - 에어드랍 컨트랙트나 리모트 허브에서 그런 이동이 있은 뒤, 손실을 입은 주기나 마켓에서 그 손실을
상각(
writeDownCycle,writeDownUnassigned,writeOffPending,writeOffRecord, 2026-10-05부터). 주기의 부분 상각은 아무도 그 주기에서 그 주식을 청구하지 않은 동안에만 가능하며, 그러면 모든 홀더가 같은 비율을 잃습니다; 일부 홀더가 지급받은 뒤에는 아직 지급받지 않은 홀더들이 잃게 되는 남은 양 전체로만 상각할 수 있으며, 그 뒤에 그 주기에 도착하는 것은 다시 그 주기의 모든 홀더에게 비례 배분으로 나뉩니다. 다른 어떤 마켓도 그 대가를 치르지 않습니다; 손실이 상각되거나 자산이 누구나 호출할 수 있는restore를 통해 돌아올 때까지, 없어진 것의 지급은 대기하고 나머지는 계속됩니다: 청구는 다른 주식들을 지급합니다. 두 컨트랙트는 자신의 장부를 뒷받침하는 것을 셀 뿐, 결코 잔액을 세지 않습니다: 다른 마켓으로 가는 중인 자산으로 그 손실을 메우는 일은 결코 없으며, 두 컨트랙트로 보내는 단순한 전송은 아무것도 뒷받침하지 않습니다 - 모듈이 실수로 보유한 것을 꺼내기(
rescue, 2026-10-05부터): 누구의 것도 보관하지 않는 모듈로 보내진 ETH나 토큰; 훅의 잘못 들어온 자금, 훅이 지급해야 할 것은 결코 아님; 락이 보관하는 수수료 몫을 넘어 락이 보유한 것, 락의 포지션은 결코 아님; 어떤 소각도 쓸 수 없게 된 뒤에만BuybackBurner의 ETH; 토큰 자신의 주소로 보내진 것. 긴급 모드를 참고하십시오 - 에어드랍 주식 어댑터의 LayerZero 설정을 사전 공지 없이, 인출 상한 없이 변경
업그레이드는 이 권한들 중 가장 넓은 것입니다: 위의 두 번째 목록에 있는 모든 규칙에 한 번에 미칩니다. 설정, 종료 모드, 긴급 이동, 주식 어댑터의 LayerZero 설정과 함께, 업그레이드는 StockFun이 트러스트리스가 아니며, 그렇다고 주장하지도 않는다는 뜻입니다. 트레저리는 프로토콜이 지키며, 오너가 통제하는 회수 경로가 있습니다.
설정
2026-10-05부터 프로토콜의 수치는 두 체인 모두에서 StockFun 오너의 온체인 설정입니다. 각 설정은 그것을 바꾸는 트랜잭션 안에서 사전 공지 없이 효력이 발생하고, 이벤트를 발생시키며, 불가능한 값은 거부합니다: 100 %를 넘는 요율, 택스보다 큰 배분, 풀이 담을 수 없는 런칭 형태. 아래 값은 이 문서가 제시하는 기본값입니다.
| 설정 | 기본값 | 설정 위치 |
|---|---|---|
| 모든 거래(매수와 매도)의 택스 | 5 % | 훅, setTaxSettings |
| 런칭된 마켓에서의 항목: 트레저리, 크리에이터, 팀; 나머지는 바이백 | 2 %, 2 %, 0.5 %; 바이백 0.5 % | 훅, setTaxSettings |
$STOCKFUN 마켓에서의 항목: 트레저리, 팀; 나머지는 바이백 |
2 %, 2.5 %; 바이백 0.5 % | 훅, setTaxSettings |
| 안티 스나이프: 오프닝 블록의 택스, 블록당 감소폭, 지속 블록 수 | 80 %, 8포인트, 10블록 | 훅, setTaxSettings |
| 마켓의 안티 스나이프 화이트리스트 최대 크기 | 20개 주소 | 훅, setTaxSettings |
| 팀 지갑으로 지급되는 생성 수수료 | 0.001 ETH | 팩토리, setCreationFee |
| 새 마켓의 길이 제한: 티커, 이름, 이미지 URI, 설명 | 2~10, 48, 256, 512바이트 | 팩토리, setStringLimits |
| 새 마켓의 형태: 공급량, 밴드 1, 틱, 틱 간격, LP 수수료 | 토큰 1,000,000,000개, 밴드 1에 700,000,000개, 틱 195,000 / 171,960 / −887,220, 간격 60, LP 수수료 없음 | 팩토리, setLaunchConfig |
잠긴 포지션이 거두는 것의 ETH 쪽: 마켓 볼트와 팀의 몫; 나머지는 크리에이터($STOCKFUN에서는 팀) |
50 %, 25 %; 크리에이터 25 % | 팩토리, setLpFeeShares |
| 볼트가 전환하는 최소 금액, 그리고 ETH → USDC와 주식 매수에서 오라클 대비 가격 한도 | 0.1 ETH, 50 bps, 200 bps | 팩토리, setConversionParams |
| 미러 볼트의 매수 가격 한도 | 200 bps | 리모트 허브, setStockMaxSlippageBps |
| 오라클 하트비트: ETH/USD, 각 주식 | 배포 스크립트 기준 1시간과 1일 | 각 체인의 오라클, setEthUsdHeartbeat, setHeartbeat |
| 시퀀서 검사: Chainlink의 L2 시퀀서 업타임 피드와, 재시작 뒤 오라클이 모든 가격을 보류하는 유예 기간(2026-10-06부터) | 꺼짐: Robinhood Chain에는 그런 피드가 없으므로 배포는 검사를 끈 채로 이루어짐; 피드가 설정되면 유예 기간 3,600초 | 각 체인의 오라클, setSequencerUptimeFeed; Ethereum에서는 꺼짐 |
| 주식별 오라클 일시 중지 검사: 토큰이 기업 행위로 자신의 오라클이 일시 중지되었다고 알리는 동안 그 가격을 보류함(2026-10-06부터) | Robinhood Chain의 모든 주식에서 켜짐, Ethereum에서는 꺼짐 | 각 체인의 오라클, setOraclePauseCheck, 주식별 |
| 에어드랍 측정 구간: 길이, 마감 시각 | 24시간, 13:00 UTC | 에어드랍 컨트랙트, setCycleSchedule |
에어드랍 한도: 제외 목록 최대 크기, assignUnassigned 한 번이 검사하는 측정 구간 수 |
16, 30 | 에어드랍 컨트랙트, setMaxExcluded, setMaxWindowsPerAssign |
| 에어드랍의 LayerZero 엔드포인트와 출발 체인 | 배포 시의 값 | 에어드랍 컨트랙트, setLayerZero |
| USDG 브리지: Curve에서 허용하는 최악의 USDC당 USDG 비율, 그리고 Robinhood Chain에서 배치의 마지막 단계 중 모든 배치에 필요한 부분(열 번째 감사 루프 전까지는 단계 전체에 수치 하나, 1,200,000) | 30 bps, 200,000 가스 | UsdgOftAdapter, setSettings |
| USDG 브리지의 배치: 배치의 각 마켓이 그 단계에 더하는 가스, 그리고 LayerZero의 메시지 크기가 정하는, 배치 하나가 담는 마켓의 최대 수(열 번째 감사 루프 이후; 설정과 상관없이 가장 큰 배치의 가스는 많아야 24,000,000) | 400,000 가스, 마켓 17개 | UsdgOftAdapter, setBatchGas |
| 정식 브리지: 두 티켓의 가스와, 하한 역할을 하는 그 제출 비용 | 배포 시의 값 | ArbitrumCanonicalAdapter, setTicketGas |
| 정식 브리지: 입금 티켓의 비용을 계산하는 기준 바이트 수 | 1,024 | ArbitrumCanonicalAdapter, setDepositCalldataLength |
| 리모트 허브에서 스윕 한 번이 지급하는 기록 수 | 64 | 리모트 허브, setMaxRecordsPerSweep |
Ethereum에서 각 에어드랍 전달의 lzReceive 가스(주식 OFT가 강제하는 가스에 더해지는 몫): 키퍼가 요청하는 값의 기본값, 하한, 상한(2026-10-06부터) |
650,000, 200,000, 1,500,000 | 리모트 허브, setAirdropReceiveGas |
| 에어드랍 컨트랙트에서 각 에어드랍 전달의 compose 가스: 기본값, 하한, 상한(2026-10-06까지는 수치 하나, 600,000) | 1,250,000, 600,000, 4,000,000 | 리모트 허브, setAirdropComposeGas; 기본값은 setAirdrop으로도 설정 |
- 다음 스왑부터, 모든 풀에. 택스나 안티 스나이프의 변경은 아직 안티 스나이프 블록 안에 있는 풀을 포함해 모든 풀에 다음 스왑부터 적용됩니다: 감소는 풀의 런칭 블록부터, 현재 유효한 설정으로 계산됩니다. 안티 스나이프는 결코 택스보다 적게 부과하지 않습니다. 화이트리스트 상한은 마켓이 생성될 때 적용됩니다
- 형태는 새 마켓에만. 새 공급량, 새 밴드, 새 틱 간격, 새 LP 수수료는 이후 생성되는 마켓에
적용됩니다. 각 풀은 생성될 때의 LP 수수료와 틱 간격을 유지하며, Lens가 마켓별로 이를
제공합니다;
$STOCKFUN풀은 런칭될 때 유효한 값을 따릅니다 - 볼트에는 실시간으로. 모든 볼트는 전환할 때마다 전환 기준치와 가격 한도를 읽으며, 락은 수수료를 거둘 때마다 LP 수수료 몫을 읽습니다
- 열린 주기는 자신의 측정 구간을 유지. 새 에어드랍 일정은 아직 열리지 않은 측정 구간에 적용되어 이를 다시 나누며, 따로 보관된 주식이 아직 살펴봐야 할 측정 구간도 포함됩니다
고정된 채로 남는 것:
- 종료 모드의 30일 사전 공지,
END_DELAY: 업그레이드할 수 없는 유동성 락의 상수 - 긴급 이동의 즉시성: 대기 기간이 없으며, 어떤 설정으로도 대기 기간을 추가할 수 없음
- 단위와 인코딩: 베이시스 포인트, 보유량 기록과 에어드랍 측정 구간의 단위인 시간(hour), 소각 주소, 메시지 형식
- 연결 구성: 가격 피드, Ethereum에서 주식 라우터가 매수하는 풀, USDG OFT, 브리지의 LayerZero 엔드포인트, 리모트 허브, Curve 풀. 이들은 배포 시 고정되거나 한 번만 기록됩니다; 하나를 바꾸려면 다른 컨트랙트를 가리켜야 하며, 이는 업그레이드를 필요로 합니다
업그레이드
2026-10-02부터 아래의 컨트랙트를 제외한 모든 모듈은 UUPS 방식으로 업그레이드되는 프록시입니다. 구성 방식은 아키텍처를 참고하십시오.
| 체인 | 업그레이드 주체 | 모듈 |
|---|---|---|
| Ethereum | 팩토리의 오너: 모든 모듈이 팩토리에 그 오너가 누구인지 물음 | 팩토리 자체, 훅, 보유량 기록기, 모든 TreasuryVault, 오라클, 주식 라우터들, 공식 스왑 라우터, BuybackBurner, Lens, 브리지 허브와 그 어댑터들, 에어드랍 컨트랙트 |
| Robinhood Chain | 리모트 허브의 긴급 관리자: 마지막 브리지 배치가 전달한 Ethereum 오너, 그리고 첫 배치 전에는 배포 시 지정된 초기 관리자 | 리모트 허브 자체, 모든 미러 볼트, 주식 라우터, 오라클 |
- 즉시. 업그레이드는 그것을 실행하는 트랜잭션 안에서 효력이 발생합니다: 설정과 긴급 이동과 마찬가지로, 타임락도 사전 공지도 없습니다
- 검사됨. 프로토콜 오너만 업그레이드할 수 있습니다. 새 구현 컨트랙트는 같은 업그레이드
권한자를 따라야 하며, 훅과 보유량 기록기의 새 구현 컨트랙트는 같은
PoolManager를 유지해야 합니다 - 마켓별. 각 볼트는 별도의 프록시입니다. 팩토리에 지정된 새 볼트 구현 컨트랙트는 이후 생성되는 마켓에 적용되며, 기존 볼트는 하나씩 업그레이드됩니다
- 스토리지는 끝에 추가만 하고 순서는 바꾸지 않음. 각 모듈의 스토리지 레이아웃이 기록되어 있으며, 매 업그레이드 전에 스크립트가 이를 검사합니다. 2026-10-05부터는 모든 구조체를 모든 깊이까지 검사합니다
다음은 업그레이드할 수 없습니다:
- 토큰, 즉 마켓 토큰과
$STOCKFUN: 공급량이 한 번만 민트되는 단순한 ERC-20이며, 민트, 소각, 일시 중지, 블랙리스트가 없습니다. 유일한 setter인setRecorder와 레스큐는 프로토콜 오너의 것입니다 - 유동성 락: 그 코드가 유동성을 풀 안에 붙잡아 둡니다. 유동성의 유일한 출구는 종료 모드입니다; 락의 레스큐는 포지션에도, 락이 보관하는 몫에도 닿지 않습니다
- 미러 볼트 배포자(Robinhood Chain): 모든 미러 볼트의 주소가 미러 볼트 배포자의 주소에서 도출됩니다
상태를 보유하지 않는 Ethereum의 두 배포자 컨트랙트는 업그레이드되는 대신 팩토리를 통해 교체됩니다.
종료 모드
유동성 락의 유일한 출구로, 프로젝트가 문을 닫는 경우를 위해 2026-10-02에 추가되었습니다.
StockFun의 오너가 end()를 호출합니다. 그때부터 새 마켓은 런칭할 수 없지만, 모든 풀은 계속
거래됩니다. 30일 뒤 오너는 모든 풀의 유동성 전체를 어떤 주소로든 회수할 수 있습니다. 오너는 종료가
대기 중인 동안 언제든 취소할 수 있으며, 이미 회수된 풀은 빈 상태로 남습니다. 30일은 홀더를 위한
사전 공지 기간입니다. 자세한 내용은 두 포지션 런칭에 있습니다.
외부 의존성
| 의존성 | 망가뜨릴 수 있는 것 |
|---|---|
| Paxos / USDG | 일시 중지하거나 동결할 수 있음. 레일의 현금 레그가 멈춤. 2026-10-05부터 미러 볼트 하나가 동결되면 그 볼트로의 전달만 멈춤: 그 몫은 그 마켓에 지급해야 할 것으로 리모트 허브에서 대기하며, 다른 마켓들은 지급받음(R2H-2, 종결) |
| LayerZero | 메시지가 유실되면 재실행이나 회수 전까지 자금이 전송 중에 묶임. 2026-09-28부터는 에어드랍의 래핑된 주식의 안전도 여기에 달려 있음 |
| Robinhood Chain | 신생 체인. 장애가 나면 보유 중인 주식이 동결됨. 2026-10-06부터 오라클은 Chainlink의 시퀀서 업타임 피드가 시퀀서가 멈췄거나 막 복구되었다고 알리는 동안 모든 가격을 보류할 수도 있음; 이 검사는 Chainlink가 Robinhood Chain을 위한 그런 피드를 공개할 때까지 꺼져 있으며, 아직 공개되지 않았음 |
| Chainlink 피드 | 오래된 피드는 그 피드가 필요한 전환을 막음; 2026-10-05부터 주식의 경우에는 그 주식의 레그만 막음. 2026-10-06부터는 기업 행위도 마찬가지임: 주식의 토큰이 자신의 오라클이 일시 중지되었다고 알리는 동안 피드는 마지막 값을 유지하고, 오라클은 그 주식의 가격을 보류하므로, 그 레그는 기다리고, 그 현금은 그 주식을 위해 유지되며, 다른 주식들은 매수됨. 이는 의도된 동작 |
| 세컨더리 유동성 | 풀이 너무 얕으면 키퍼는 더 작은 단위로 나누어 매수하며, 그래도 체결할 수 없는 것은 가격 한도(기본값 200 bps)에 걸려 거부됨 |
이 의존성 중 숨겨진 것은 없으며, 어느 것도 볼트의 자산을 특정 주소로 빼낼 수 없습니다.
감수한 위험
- 업그레이드, 설정 변경, 긴급 이동은 즉시 효력이 발생함: 30일 전에 공지되는 종료 모드와 달리, 홀더는 이에 대해 사전 공지를 받지 못함
- 모든 토큰 전송은 보유량 기록기에 달려 있음: 보고가 실패하면 전송도 실패함. 이는 하나의 실패가
결코 나머지를 막지 않는다는 규칙의 의도된 유일한 예외임: 보고가 실패해도 되게 하면 홀더가 기록을
건너뛰고 자신의 에어드랍 몫을 키울 수 있을 것임. 조치 수단은 즉시 작동함: 토큰의
setRecorder(0), 또는 기록기를 제자리에서 업그레이드하는 것 - 수령인이 거부하는 몫은 나머지를 멈추는 대신 훅, 락, 리모트 허브, 에어드랍 컨트랙트에서 그 수령인을 기다림; 그리고 어느 마켓에도 차감되지 않는 긴급 이동은 정산될 때까지 그 자산의 지급을 대기하게 만듦
- 트레저리는 쌓이지 않음: 모든 것이 분배되며, 아무도 거래하지 않으면 에어드랍은 0일 수 있음
- 에어드랍은 Ethereum에서 래핑된 주식으로 지급됨: 그 가치는 Robinhood Chain에 잠긴 주식과 LayerZero 설정에만 달려 있으며, 발행사가 주식 토큰을 동결하면 잠긴 주식도 묶이게 됨
- 마켓이 첫 번째 유동성 밴드를 끝내 소진하지 못할 수 있음
- 왕복 거래에는 기본값 5 % 택스 기준으로, 가격 변동 이전에 9.75 %의 비용이 듦
- 이 문서가 작성된 시점에 크로스체인 레일은 실제 조건에서 가동된 적이 없었음