에어드랍

2026-09-27부터 마켓의 트레저리에는 단 하나의 용도만 있습니다: 트레저리가 매수하는 토큰화 주식의 100 %는 해당 마켓 토큰의 홀더에게 에어드랍되며, 24시간마다 보유량에 비례해 분배됩니다. 그 이전에 있던 크리에이터 바이백은 폐지되었습니다.

코딩과 테스트는 끝났으나, 배포되지 않았습니다. 에어드랍 컨트랙트인 AirdropDistributor는 두 볼트에서 이를 채우는 경로와 함께 2026-10-04에 코딩되고 테스트되었으며, 키퍼의 일일 에어드랍 단계와 디앱의 청구 화면은 2026-10-05에 작성되었습니다. 테스트에서 LayerZero는 목(mock)으로 대체되었으며, 배포된 것은 아무것도 없습니다. 남은 일: 주식의 LayerZero 어댑터. 진행 상황을 참고하십시오.

분배되는 것

트레저리가 매수하는 모든 것입니다: 매수와 매도를 가리지 않고 모든 거래에서 떼는 2 %와 마켓의 첫 10개 블록에서 생기는 안티 스나이프 초과분을, 마켓 바스켓의 주식으로 전환한 것입니다.

분배는 현물로 이루어집니다: 홀더는 토큰화 주식을 Ethereum에서 래핑된 형태로 받으며(아래 참고), 현금은 결코 받지 않습니다. 아직 전환을 기다리는 ETH, USDC, USDG는 그 상태로 분배되지 않고, 주식으로 전환된 뒤에 분배됩니다.

누구에게, 어디서

마켓 토큰의 홀더에게, 보유량에 비례해 분배됩니다. 프로토콜 자체 주소는 아무것도 받지 않습니다.

보유량은 월요일을 포함해, 주기 직전 24시간 동안 각 지갑의 평균 잔액으로 계산합니다: 토큰을 1시간 보유하면 하루 전체의 1/24로 계산됩니다. 측정 구간이 닫히기 직전의 매수는 거의 아무것도 받지 못합니다. 2026-09-28부터는 각 지갑의 보유량이 시간에 따라 온체인에 기록되므로, 컨트랙트가 Ethereum에서 모든 몫을 계산합니다. 키퍼가 이를 제공하는 일은 결코 없습니다. 2026-10-02부터 이 기록은 토큰 밖에서, 하나의 모듈인 보유량 기록기가 관리합니다: 모든 토큰은 잔액이 바뀔 때마다 이를 보유량 기록기에 보고하며, 보고가 실패하면 전송도 실패합니다. 이는 의도된 것으로, 하나의 실패가 결코 나머지를 막지 않는다는 프로토콜 규칙의 유일한 예외입니다: 보고가 실패해도 되게 하면, 홀더가 자신의 전송에서 보고에 가스를 모자라게 주어 기록이 그 움직임을 건너뛰게 하고 자신의 몫을 키울 수 있을 것입니다. 아키텍처와 아래의 운영 규칙을 참고하십시오.

2026-10-01부터 이 기록에는 각 토큰의 기록된 공급량도 시간에 따라 담깁니다: Uniswap PoolManager 밖에 있는 모든 잔액입니다. 이것이 몫의 분모가 됩니다:

몫 = 측정 구간의 평균 잔액
     ÷ (기록된 공급량의 평균 − 제외 주소들의 평균)

제외 주소는 아무것도 받지 않는 주소입니다: 소각 주소는 항상 제외되며, 토큰의 제외 목록에 있는 주소들도 제외됩니다. 아래의 제외 대상을 참고하십시오. 기록기는 기록된 공급량을 매시 정각 기준으로만 제공하므로, 에어드랍의 측정 구간은 정각에 시작하고 정각에 끝납니다. 이 기록에는 스왑마다 스토리지 쓰기 한 번이 더 듭니다. 토큰의 매시 첫 스왑은 매수든 매도든, 기록이 토큰 밖으로 옮겨지기 전인 2026-10-01에 별도의 트랜잭션으로 측정했을 때 약 28,000~30,000 가스가 더 듭니다. 이 페이지가 2026-10-01 보안 파이프라인 전까지 제시한 23,000은 하나의 트랜잭션 안에서 측정한 값이었습니다. 따라서 한 시간이 끝나갈 무렵 지갑이 산출한 가스 추정치는, 트랜잭션이 다음 시간의 첫 스왑으로 처리되면 모자랄 수 있습니다. Ethereum의 Glamsterdam 업그레이드(Sepolia에서는 2026-10-06부터 활성화되었고, 메인넷에서는 그 포크 시점에 활성화됨) 이후로, 이 쓰기는 새 가격으로 스토리지 슬롯을 만듭니다: Sepolia에서 한 시간의 첫 스왑에는 123,216 가스가 더 들었습니다. 앱은 한 시간의 첫 스왑으로 처리될 수 있는 거래에 150,000 가스를 더 줍니다: 트랜잭션은 쓴 가스만큼만 지불하므로, 이는 한도를 높일 뿐입니다.

보유량은 토큰이 거래되는 Ethereum에서 측정하며, 2026-09-28부터는 주식도 그곳에서 분배됩니다. 주식은 Robinhood Chain에서 매수되어, 그곳에서 StockFun이 배포한 LayerZero 어댑터(주식마다 하나)에 잠기고, 잠긴 주식 하나당 래핑된 주식 하나로 Ethereum에 보내집니다. 각 홀더는 Ethereum에서 자신의 몫을 청구하고 청구에 드는 가스비를 부담합니다. 실제 주식을 보유하려면 홀더는 래핑된 주식을 브리지를 통해 Robinhood Chain으로 되돌려 보내며, 그 비용은 본인이 부담합니다. StockFun의 오너는 대기 기간도, 인출 상한도 없이 어댑터의 LayerZero 설정을 보유합니다: 신뢰 모델을 참고하십시오.

이 규칙은 $STOCKFUN의 트레저리를 포함해 모든 트레저리에 적용되며, 그 트레저리는 $STOCKFUN 홀더에게 에어드랍됩니다.

24시간마다

에어드랍은 마켓별로 일일 주기로 실행됩니다. 기본값으로 13:00 UTC인 그 시각은 보유량을 측정하는 구간을 닫는 시각으로, 1년 내내 미국 주식시장이 열리기 전입니다: 개장은 여름에는 13:30 UTC, 겨울에는 14:30 UTC입니다. 주기의 매수는 그다음, 이어지는 거래 시간 중에 이루어지며, 그 전송은 기본적으로 그 거래 시간이 끝난 뒤에 이루어집니다:

  1. 마켓의 트레저리에 0.1 ETH 이상이 쌓여 있으면, 키퍼가 이를 전환해 브리지로 보내고 바스켓의 주식을 매수합니다.
  2. 기본적으로 그날의 거래 시간이 끝난 뒤, 키퍼는 매수한 주식을 래핑된 형태로 Ethereum의 에어드랍 컨트랙트에 보내며, 그곳에서 그 100 %를 토큰 홀더가 청구할 수 있게 됩니다. 일곱 번째 감사 루프 이후로, 2026-10-06부터, 키퍼는 측정 구간의 개시를 포함해 주식이 그 전송 비용만큼의 가치가 될 때 보냅니다; 그렇지 않으면 주식은 그 뒤에 쌓이는 것과 함께 이후의 측정 구간까지 볼트에서 기다립니다(키퍼 참고). 열 번째 감사 루프 이후로 키퍼는 거래 시간이 끝난 뒤 보낼 것이 없었던 볼트를 다음 거래 시간에야 다시 읽으므로, 거래 시간이 끝난 뒤 그 매수와 별개로 볼트에 주어진 주식은 다음 거래 시간의 전송과 함께 더 나중의 측정 구간으로 갑니다; 그날의 매수가 가져오는 것은 여전히 그날 끝난 측정 구간으로 갑니다.

0.1 ETH 미만이면 그날 해당 마켓에서는 아무 일도 일어나지 않습니다: ETH는 다음 주기를 기다립니다. 2 % 기준으로, 임계값에 도달하려면 매수와 매도를 합쳐 해당 마켓에서 약 5 ETH의 거래량이 필요합니다. 하루 중에 임계값을 넘어도 아무것도 트리거되지 않습니다: 전환은 일일 주기에서만 이루어집니다. 키퍼는 측정 구간이 닫힌 뒤 루프를 처음 돌 때 각 볼트를 확인하고, 그 측정 구간 안에서 그 ETH를 한 번만 전환합니다. 키퍼는 2026-10-06부터 이를 지키며, 그 전에는 볼트가 임계값을 보유하는 즉시 거래 시간 중 루프를 돌 때 어느 때든 볼트의 ETH를 전환했습니다. 볼트에서 이미 기다리고 있는 현금은 임계값과 상관없이 이어서 처리됩니다: 여섯 번째 감사 루프 이후로, 2026-10-06부터, 볼트의 USDC는 그 ETH의 각 전환 뒤에 한 번, 그 밖에는 측정 구간마다 많아야 한 번, 미러 볼트의 USDG는 루프를 돌 때마다 처리됩니다.

주식은 미국 주식시장이 열려 있을 때만 매수할 수 있습니다. 따라서 주말이나 NYSE 휴장일에는 주기가 없습니다: 금요일의 수수료는 월요일에 분배됩니다.

임계값과 캘린더는 키퍼의 규칙입니다: 에어드랍 컨트랙트는 둘 다 알지 못합니다. 컨트랙트가 아는 것은 측정 구간이며, 각 전송을 그것이 도착한 시점에 마지막으로 닫혀 있던 측정 구간에 적립합니다.

주기의 길이와 마감 시각, 임계값 0.1 ETH, 그리고 아래에 나오는 에어드랍 컨트랙트의 한도는 2026-10-05부터 StockFun 오너의 설정입니다; 이 페이지의 값은 기본값입니다. 새 일정은 아직 열리지 않은 측정 구간에 적용됩니다: 이미 열린 주기는 자신의 측정 구간을 유지합니다.

도중에 실패한 주기(늦어진 브리지, 오래된 피드, 한도에 따른 거부)는 그 실패가 닿는 부분만 멈춥니다. 2026-10-05부터 각 주식의 매수는 따로 진행됩니다: 레그가 실패한 주식은 바스켓의 다른 주식들이 매수되는 동안 그 현금을 이후 주기를 위해 유지하며, 브리지 배치에서 제외된 마켓은 다른 마켓들이 건너가는 동안 대기합니다. 진행되지 못한 것은 Ethereum이나 Robinhood Chain에 있는 마켓의 볼트에서 대기하다가, 트레저리가 다시 0.1 ETH에 도달하지 않았더라도 다음 주기에 마무리됩니다. StockFun의 오너는 즉시 이루어지는 긴급 이동으로 언제든 이를 옮길 수도 있습니다: 긴급 모드를 참고하십시오.

주기가 진행되는 방식

2026-10-04부터 에어드랍 컨트랙트에서는:

  • 측정 구간. 주기의 측정 구간은 그 끝 직전의 기간입니다: 기본값으로 13:00 UTC에 끝나는 24시간입니다. StockFun의 오너는 그 길이와 마감 시각을 정시 단위로 정합니다(setCycleSchedule). 전송은 그것이 도착한 시점이나 그 이전의 마지막 마감 시각에 끝나는 측정 구간에 속하며, 마켓에서 가장 최근에 열린 주기보다 앞선 측정 구간에 속하는 일은 결코 없습니다.
  • 주기를 열면 수치가 고정됩니다. 측정 구간의 첫 전송이 그 주기를 엽니다. 키퍼는 누구나 호출할 수 있는 openCycle로 주기를 먼저 열 수 있습니다: 키퍼는 측정 구간이 닫힌 뒤, 주식이 도착하기 전에 이를 호출하므로, 각 전달은 주기에 더해지기만 합니다. 주기를 열면 다음이 영구히 고정됩니다: 토큰의 보유량 기록기, 주기가 언제 열리든 측정 구간이 닫힌 시점에 유효했던 제외 목록, 그리고 분모, 즉 측정 구간 동안의 기록된 공급량에서 소각 주소와 목록에 있는 주소들의 보유량을 뺀 값. 한 주기의 모든 홀더는 이후 무엇이 바뀌든 같은 수치를 기준으로 측정됩니다.
  • 측정 구간 하나에 주기 하나. 같은 측정 구간에 대한 이후의 전송은 같은 주기에 더해집니다.
  • 시점은 키퍼가 정합니다. 키퍼는 전송을 트리거할 뿐, 측정 구간도, 홀더도, 금액도 지정하지 않습니다. 따라서 다음 마감 시각 이후에 도착한 전송은 다음 날의 측정 구간을 기준으로 측정됩니다. 이는 감수하고 문서화한 사항입니다.

주식이 도착하는 경로

경로는 두 가지이며, 그 밖의 어떤 것도 주기에 적립되지 않습니다.

  • Robinhood Chain에서. 키퍼는 마켓의 미러 볼트에서 sendToAirdrop(stocks)를 호출하고 LayerZero 수수료를 지불합니다. 초과 지불한 금액은 키퍼에게 환불됩니다. 2026-10-06부터 이 호출은 각 전달이 Ethereum에서 받는 가스도 지정하며(sendToAirdrop(stocks, receiveGas, composeGas)), 리모트 허브는 그 가스를 StockFun의 오너가 정하는 하한과 상한 사이로 유지합니다(Robinhood 레일과 키퍼 참고). 목록의 각 주식에 대해, 볼트는 리모트 허브가 그 주식에 지정한 어댑터를 통해, 리모트 허브가 지정한 에어드랍 컨트랙트로, 마켓 ID를 페이로드로 담아 자신의 잔액 전체를 보냅니다. LayerZero는 소수점 여섯 자리까지 운반합니다: 소수점 18자리 주식의 10^12 단위 미만, 즉 토큰 하나의 100만분의 1 미만은 다음 전송을 위해 볼트에 남습니다. Ethereum에서는 주식의 OFT가 래핑된 주식을 에어드랍 컨트랙트에 민트하고, 이어서 LayerZero의 엔드포인트가 컨트랙트를 호출합니다. 컨트랙트는 전달이 자신의 엔드포인트에서, StockFun의 오너가 등록한 주식 OFT로부터, Robinhood Chain에서 온 것이고, 페이로드가 지정하는 마켓의 미러 볼트가 보낸 것이며, 그 마켓이 존재할 때에만 그 전달을 적립합니다.
  • Ethereum에서. 주식을 Ethereum에서 매수하는 볼트, 즉 로컬 레일에서는 키퍼가 마켓의 TreasuryVault에서 sendToAirdrop(stocks)를 호출합니다. 볼트는 정확한 금액을 승인하고, 에어드랍 컨트랙트는 이를 가져가 실제로 받은 양을 적립하며, 승인은 다시 닫힙니다. 마켓을 위해 전송할 수 있는 것은 그 마켓 자신의 볼트뿐입니다. 브리지 허브에 연결된 볼트는 이 경로를 거부합니다: 그 볼트의 주식은 Robinhood Chain에 있기 때문입니다.

두 경로 모두에서 키퍼는 시점을 정할 뿐, 수량도, 자산도, 목적지도 정하지 않습니다: 수량은 볼트의 잔액이고, 목적지는 프로토콜이 지정한 컨트랙트이며, 두 번 나열되거나 바스켓 밖에 있는 주식이 있으면 호출이 실패합니다.

2026-10-05부터 목록에 있는 각 주식은 따로 진행됩니다. 발행사가 동결한 주식, 잔액을 읽을 수 없는 주식, 또는 Robinhood Chain에서 보낼 때 어댑터가 없거나 키퍼의 지불액이 그 수수료를 충당하지 못하는 주식은 이벤트(AirdropSendFailed)와 함께 볼트에 남고, 나머지는 진행됩니다; 남은 주식은 이후의 전송과 함께 갑니다. 어떤 주식도 진행되지 않으면 호출은 실패하며 그 이유를 밝힙니다.

몫과 청구

  • 홀더가 청구합니다. 각 홀더는 Ethereum에서 자신의 몫을 직접 청구하고 가스비를 부담합니다: 주기 하나는 claim으로, 여러 주기는 claimMany로 청구합니다. 누구도 다른 사람을 대신해 청구할 수 없으며, 키퍼는 아무것도 보내지 않습니다. 2026-10-05부터 디앱의 청구 화면은 지갑이 청구할 수 있는 모든 측정 구간을 나열하고, 트랜잭션 하나에 주기 5개씩(2026-10-06까지는 10개씩) 청구를 보냅니다: 디앱을 참고하십시오.
  • 금액. 주기의 각 주식에 대해:

    지급액 = 내림(금액 × 측정 구간의 보유량 ÷ 적격 보유량)
             − 그 홀더에게 이미 지급된 양
    

    주기에 그 주식이 남아 있는 양을 결코 넘지 않습니다. 청구 후에 전송이 도착하면 금액이 늘어나며, 홀더는 그 차액을 청구합니다. 내림으로 남는 양은 컨트랙트에 남습니다.

  • 기한도, 상한도, 최소 금액도 없습니다. 몫은 기한 없이 언제든 청구할 수 있습니다. 지갑당 상한도, 최소 금액도 없습니다.
  • 제외 주소는 아무것도 청구하지 못합니다.
  • 결코 다른 주기에서 지급되지 않습니다. 2026-10-05부터 에어드랍 컨트랙트는 자신이 지급해야 할 양과 그것을 뒷받침하는 양을 주식별로 관리하며, 그것을 뒷받침하는 양이 지급해야 할 양을 충당하는 동안에만 그 주식을 지급합니다. 그것을 뒷받침하는 양은 주기에 적립된 주식으로 계산할 뿐, 결코 컨트랙트의 잔액에서 읽지 않습니다. 그 잔액에는 아직 적립되지 않은 전달도 들어 있습니다: 다른 마켓으로 가는 중인 주식이 청구를 지급하는 데 쓰이는 일은 결코 없습니다. 어떤 주식의 일부를 가져간 긴급 이동 이후에는, 그 주식을 보유한 모든 마켓에서 그 주식의 청구가, 그 주식이 누구나 호출할 수 있는 restore를 통해 돌아오거나(단순한 전송은 인정되지 않습니다) StockFun의 오너가 그 손실을 그 주식을 잃은 주기에서 상각할 때까지 대기합니다. 아무도 그 주기에서 그 주식을 청구하지 않은 동안에는 그중 어느 부분이든 상각할 수 있으며, 모든 홀더가 같은 비율을 잃습니다; 일부 홀더가 지급받은 뒤에는 아직 지급받지 않은 홀더들이 잃게 되는 남은 양 전체만 상각할 수 있습니다. 그러한 상각 이후 그 주기에 도착하는 것은, 상각된 양이 처음부터 없었던 것처럼 그 주기의 모든 홀더에게 비례 배분으로 나뉩니다. 긴급 모드를 참고하십시오.
  • 청구는 지급할 수 있는 것을 지급합니다. 2026-10-05부터 claim과 claimMany는 지급할 수 있는 모든 주식을 지급합니다. 위에서처럼 장부에 부족한 주식, 또는 예를 들어 발행사가 동결해 전송이 거부되는 주식은 연기됩니다(ClaimDeferred): 그 주식은 계속 지급 대상으로 남으며, 이후의 청구가 이를 지급합니다. claimMany는 제외 목록에 호출자가 올라 있는 주기를 건너뛰고, claim은 그런 주기를 거부합니다(Excluded). 아무것도 지급하지 않는 청구는 실패하며 그 이유를 밝힙니다: 장부에 주식이 부족함(Underfunded), 전송이 거부됨(TransferRefused), 또는 청구할 것이 없음(NothingToClaim). 그 전까지는 그런 주식 하나가 청구 전체를 실패하게 만들었고, 제외된 주기 하나가 claimMany 전체를 실패하게 만들었습니다.
  • 비용. 주식 두세 개로 이루어진 주기를 청구하는 데에는, 웜 스토리지 상태에서 실행되는 테스트의 측정 기준으로 대략 120,000~210,000 가스가 듭니다. 2026-10-05에 주기당 주식 다섯 개로 콜드 상태에서 측정하면, 첫 주기는 트랜잭션 전체로 약 508,000~528,000 가스, 같은 claimMany의 이후 각 주기는 약 321,000~332,000 가스가 듭니다: 당시 청구 화면의 배치 크기였던 주기 10개에 약 340만~350만 가스, 각 주기의 주식도 콜드 상태일 때는 최대 약 530만 가스가 듭니다. 이는 Ethereum의 Glamsterdam 업그레이드 이전의 가스 가격입니다. 이 업그레이드에서는(Sepolia에서 2026-10-06부터 활성화) 새 스토리지 슬롯의 비용이 약 다섯 배가 되며, 청구가 지급하는 각 주식은 새 슬롯을 세 개까지 쓸 수 있습니다: Sepolia에서 주식 세 개로 이루어진 주기의 청구에는 그 주기의 첫 청구자에게 1,177,679 가스, 이후 청구자에게 878,713~888,051 가스가 들었습니다. 주식 다섯 개로 이루어진 주기 10개에는 약 800만~1,400만 가스가 들며, 이는 EIP-7825가 트랜잭션 하나에 정한 16,777,216 가스(Glamsterdam에서는 그 실행 가스에 대한 한도) 안에 들어갑니다. 청구 화면의 배치는 주기 5개입니다.

claimable은 한 주소가 한 주기에서 청구할 수 있는 양을 주식별로 알려 줍니다.

제외 대상

각 토큰에는 StockFun의 오너가 정하는 자신만의 목록이 있습니다: 기본값으로 최대 16개 주소(setMaxExcluded)이며, 중복도, 제로 주소도 허용되지 않습니다. 소각 주소 0x…dEaD는 항상 제외되며 목록에는 올라가지 않습니다. 변경할 때마다 날짜가 기록된 새 버전의 목록이 만들어집니다: 측정 구간은 그 주기가 언제 열리든, 그 구간이 닫힌 시점에 유효했던 목록을 기준으로 측정되며, 변경은 그 이후에 닫히는 측정 구간에만 적용됩니다.

마켓의 토큰에서 기본적으로 제외되는 것은 소각 주소뿐입니다. Uniswap PoolManager는 결코 기록되지 않으므로 목록에 올릴 필요가 없습니다. StockFun 풀의 유일한 유동성 공급자는 유동성 락이며, 유동성 락은 런칭 때가 아니면 아무것도 보유하지 않습니다. 다른 거래소의 풀이 토큰을 보유한다면 그 풀은 기록되는 평범한 홀더이며, 오너가 이를 목록에 올릴 수 있습니다.

$STOCKFUN에서는 목록에 런칭 운영자도 올라 있습니다. 런칭 운영자는 민트와 락 사이의 몇 블록 동안 공급량 전체를 보유합니다. 2026-10-05부터 런칭 스크립트는 토큰이 존재하기 전에, 토큰이 갖게 될 주소에 대해 그 주소를 목록에 올린 다음 민트하므로, 민트와 목록 사이에 측정 구간이 닫힐 수 없습니다: 운영자는 아무것도 받지 않습니다. 런칭 후 첫 측정 구간이 닫히기 전에 오너가 그 목록을 바꾼다면, 새 목록에도 그 주소가 남아 있어야 합니다.

따로 보관되는 주식

적격 보유량이 없는 측정 구간을 위한 전송은 그 마켓을 위해 따로 보관됩니다: 예를 들어 마켓이 런칭된 날, 그 마켓이 존재하기 전에 끝난 측정 구간을 위해 보내진 주식이 그렇습니다.

따로 보관된 주식은, 누가 확인하든 언제 확인하든, 적격 보유량이 없다고 확인된 마지막 측정 구간 다음에 오는, 적격 보유량이 있는 첫 측정 구간으로 갑니다. 바로 다음 측정 구간에 대한 openCycle이나 전송이 이 주식을 함께 가져갑니다. 그렇지 않으면 누구나 호출할 수 있는 assignUnassigned가 끝난 측정 구간을 순서대로, 호출당 기본값으로 최대 30개까지 (setMaxWindowsPerAssign) 확인하고, 이후의 주기가 이미 열려 있더라도 적격 보유량이 있는 첫 측정 구간을 엽니다. 따라서 주기는 순서와 다르게 열릴 수 있습니다.

이는 그 사이에 주기 일정이 바뀌지 않고 토큰의 보유량 기록기가 교체되지 않는 한 성립합니다. 새 일정은 아직 열리지 않은 측정 구간을 다시 나누며, 따로 보관된 주식이 아직 확인해야 할 구간도 여기에 포함됩니다; 그 사이에 교체된 기록기는 자신보다 앞서 시작된 측정 구간을 측정하지 않으며, 주식은 그 기록기가 전 기간을 기록하는 첫 측정 구간을 기다립니다(아래의 운영 규칙 참고).

자신도 적격 보유량을 찾지 못한 전송은, 그보다 앞선 측정 구간이 아직 확인되지 않은 상태라면 실패합니다: 먼저 assignUnassigned를 실행한 뒤, 전송을 다시 합니다. Robinhood Chain에서 온 전달은 Ethereum에 저장된 채로 남아 다시 실행할 수 있습니다: 2026-10-06부터는 저장된 전달을 그 시뮬레이션이 통과하는 즉시 키퍼가 직접 다시 실행하며, 그럴 수 없을 때는 수동으로 실행하는 명령과 함께 알림을 보냅니다(키퍼 참고). 2026-10-05부터, 마지막으로 확인된 측정 구간이 끝난 시점이나 그 이전에 끝나는 측정 구간을 위한 전송(측정 구간을 더 길게 바꾸면 생길 수 있는 경우)은 그 대신 따로 보관된 주식에 더해집니다: 주식을 따로 보관하고 있는 마켓은 계속 전송을 받습니다.

원칙

  • 자산의 에어드랍이지, 결코 지분의 바이백이 아닙니다. 누구도 토큰을 볼트에 돌려주지 않습니다. 중요한 것은 토큰을 보유하는 것입니다.
  • 트레이딩이 아니라 보유를 보상합니다.
  • 약속된 금액은 없습니다. 에어드랍은 이율이 아니라 과거 거래량에 따라 달라집니다. 금액은 0일 수도 있으며, 내일 거래량이 있으리라고 약속하는 것은 아무것도 없습니다.
  • 상환은 없습니다. 홀더는 각 에어드랍에서 자신의 몫을 받을 뿐 그 외에는 아무것도 받지 않습니다: 볼트에 대한 인출 권리는 여전히 없습니다.
  • 키퍼는 트리거할 뿐, 결코 선택하지 않습니다. 배분은 보유량 기록기가 관리하는 보유량을 바탕으로 컨트랙트가 계산합니다. 키퍼는 언제 전송할지를 정할 뿐, 수량도, 자산도, 목적지도, 받는 사람도 정하지 않으며, 자기 자신에게도, 그 계산 밖의 누구에게도 몫을 배정할 수 없습니다.
  • 한 주기가 보유한 것 이상은 결코 없습니다. 각 주기는 주식별로 자신이 보유한 양까지만 지급하며, 어떤 홀더도 내림한 비례 배분 몫보다 많이 받지 않습니다.
  • 하나의 실패는 자기 자신만 멈춥니다. 2026-10-05부터 보낼 수 없거나 지급할 수 없는 주식, 또는 건너갈 수 없는 마켓은 따로 대기하며, 나머지는 진행됩니다. 아키텍처를 참고하십시오.

긴급 모드는 프로토콜의 자산을 보유한 다른 모든 컨트랙트와 마찬가지로 에어드랍 컨트랙트에도 적용됩니다: 즉시 이루어지는 오너의 이전은 주식을 이동하되 몫은 그대로 둡니다. 2026-10-05부터 그 대가를 다른 주기가 치르는 일은 결코 없습니다: 이전이 가져간 주식에 대해 청구는 그 주식을 연기하고 다른 주식들을 지급하며, 이는 그 주식이 restore를 통해 돌아오거나 오너가 그 손실을 그 주식을 잃은 주기에서 상각할 때까지 이어집니다(위와 긴급 모드 참고). 오너의 절차는 장부가 결코 부족해지지 않게 합니다: 먼저 주기를 상각한 다음(writeDownCycle, 따로 보관된 주식은 writeDownUnassigned), 주식을 옮깁니다. 에어드랍 컨트랙트의 일시 중지는 전송, 주기 개시, 따로 보관된 주식의 귀속을 멈추며, 아무것도 이동하지 않고, 청구는 결코 멈추지 않습니다. 에어드랍 컨트랙트와 보유량 기록기는 토큰과 유동성 락을 제외한 모든 모듈과 마찬가지로 StockFun의 오너가 업그레이드할 수 있으며, 업그레이드는 즉시 효력을 가집니다.

여기서 운영 규칙 하나가 나옵니다: 토큰의 보유량 기록기는 제자리에서 업그레이드하며, 그러면 그 기록 전체가 유지됩니다; 운영 중인 토큰에서는 기록기를 교체하지 않습니다. 2026-10-05부터는 교체해도 더 이상 거래가 망가지지 않습니다: 새 기록기는 그 시점에 Uniswap PoolManager 밖에 있는 토큰의 공급량에서 시작하고, 이전에 그 토큰을 기록한 적이 있는 기록기는 그 토큰을 거부하며, 그날의 두 번째 감사 루프 이후로는 토큰이 자신의 풀이 있는 곳이 아닌 다른 PoolManager에 묶인 기록기를 거부합니다. 그런 기록기는 풀을 홀더로 계산하게 될 것입니다. 세 번째 루프 이후로 새 기록기는 교체 시점에 새 기록을 시작합니다: 에어드랍 컨트랙트는 교체 전에 시작된 측정 구간을 측정하지 않으며, 그 측정 구간의 주식은 따로 보관된 채 새 기록기가 전 기간을 기록하는 첫 측정 구간을 기다립니다. 그리고 토큰은 교체 시점의 소각 주소 잔액을 보고하므로, 소각된 토큰은 계속 제외됩니다. 하지만 새 기록기는 홀더의 잔액을 알지 못합니다: 새 기록기가 움직이는 것을 보지 못한 홀더는 다음 움직임 전까지 아무것도 보유하지 않았던 것으로 읽히므로, 그 기간에 걸친 측정 구간에서 그 홀더는 덜 받으며, 다른 누구도 더 받지 않습니다. 이미 열린 주기는 자신이 고정한 기록기를 유지합니다. 교체해야 하는 기록기는, 이미 닫힌 측정 구간들의 주기가 열린 뒤, 측정 구간이 끝난 직후에 교체합니다. 2026-10-05까지는 새 기록기가 공급량 0에서 시작했습니다: 모든 매도가 실패했고, 그 이후에 열린 주기의 몫은 영구히 망가졌습니다.

보고가 실패하면 전송도 실패하므로, StockFun의 오너는 각각 트랜잭션 하나로 즉시 쓸 수 있는 두 가지 조치 수단을 유지합니다: 기록기를 제자리에서 업그레이드하는 것, 또는 토큰의 기록을 멈추는 토큰의 setRecorder(0). 토큰에 기록기가 없는 동안 에어드랍 컨트랙트는 그 토큰의 주기를 열지 않으며, 그 토큰을 위해 보내진 주식은 기록기가 지정될 때까지 따로 보관됩니다.

미정이던 사항과 그 결정

프로젝트의 기록부인 doc/DECISIONS.md는 미정 사항 세 가지를 TBD 5, 7, 8로 관리했습니다. 세 가지 모두 2026-10-04에 결정되었습니다:

  • 키퍼 푸시(TBD 5). 없습니다: 홀더만이 본인을 위해, 본인 부담으로 청구합니다.
  • 제한(TBD 7). 지갑당 상한도, 최소 금액도 없으며, 몫은 만료되지 않습니다.
  • 제외 대상(TBD 8). 토큰마다 StockFun의 오너가 정하는 목록 하나, 기본값으로 최대 16개 주소이며, 소각 주소는 항상 제외됩니다. 기본값은 소각 주소뿐입니다. 위를 참고하십시오.

남은 일

  • 주식 어댑터. 각 주식을 Ethereum으로 운반하는, 주식마다 하나인 LayerZero 어댑터: Robinhood Chain의 락박스 어댑터와 Ethereum의 그 OFT. 저장소에 없으며, 테스트는 목을 사용합니다
  • 배포. 배포된 것은 아무것도 없습니다

그때까지 여기에 나열되어 있던 키퍼의 에어드랍 단계와 디앱의 청구 화면은 2026-10-05에 작성되었습니다: 키퍼와 디앱을 참고하십시오.

Treasury Ratio는 어떻게 됩니까?

트레저리 가치를 유통 시가총액으로 나눈 Treasury Ratio는 제품의 대표 지표였습니다. 이제는 아무 의미가 없습니다: 트레저리가 분배 때마다 비워지기 때문입니다. 2026-09-27부터 폐기된 상태입니다.

이를 대체할 지표는 아직 결정되지 않았습니다. 현재 제안은 마켓의 홀더에게 분배된 주식의 누적 가치를 달러로 나타내는 것입니다. 두 분배 사이에는 디앱이 다음 에어드랍을 기다리는 트레저리의 보유 자산을 계속 표시합니다.

크리에이터 바이백은 어떻게 됩니까?

폐지되었습니다. 2026-08-27부터 2026-09-27까지 마켓의 크리에이터는 트레저리의 주식을 매도하게 하여 자신의 토큰을 바이백하고 소각할 수 있었습니다. 이제 크리에이터는 트레저리에 대해 아무런 권한이 없습니다: 토큰을 보유하고 있다면 다른 홀더와 똑같이 주식을 받을 뿐입니다.

이와 함께, 크리에이터 바이백에만 쓰이던 Robinhood Chain에서 Ethereum으로 가는 브리지의 역방향 경로도 사라집니다. 이제 브리지는 한 방향으로만 작동합니다. 에어드랍을 위해 주식은 래핑된 형태로 주식 어댑터를 거쳐 반대 방향으로 건너갑니다: 이는 주식만 운반하는 별개의 경로입니다.

$STOCKFUN 바이백 소각은 영향을 받지 않습니다: 모든 거래에서 $STOCKFUN을 매수해 소각 주소로 보내는 0.5 %는 어떤 트레저리에도 손대지 않으며, 그대로 유지됩니다. $STOCKFUN을 참고하십시오.

문구

디앱용으로 제안된 문구이며, 검증 대기 중입니다:

트레저리가 매수하는 주식은 매 분배 시 토큰 홀더에게 비례 배분으로 에어드랍됩니다. 이는 이자도 아니고 보장도 아닙니다.

금지 어휘는 에어드랍에도 전부 적용됩니다. 프로젝트는 passive income, earn stocks, returns, your stocks are safe in the vault라는 표현을 결코 쓰지 않으며, 향후 에어드랍 금액을 확실한 것으로 제시하지도 않습니다.

Robinhood가 발행한 토큰화 주식이며, US persons에게는 제공되지 않습니다.