결정 기록

공식 기록부는 doc/DECISIONS.md입니다. 이 페이지는 전환점을 요약합니다.

2026-08-25 — 내부 보안 검토

높은 심각도의 발견 사항 1건: 부분 체결 시 ETH와 USDC가 택스가 전액 부과된 채 라우터에 묶였습니다. 부분 체결을 처리하는 대신 거부하는 방식으로 수정했습니다.

2026-08-27 — 수수료가 4 %에서 5 %로

크리에이터 몫이 1 %에서 2 %로 두 배가 되었습니다. $STOCKFUN 수수료 구성은 2 / 1.5 / 0.5에서 2 / 2.5 / 0.5로 바뀌었습니다. 트레저리 몫은 2 %로 유지되며, 이것이 절대 움직이지 않는 숫자입니다.

감수한 결과: 왕복 거래 비용이 7.84 %에서 9.75 %로 오릅니다. 2026-10-05부터 요율과 그 배분은 오너의 설정이며, 이 값들은 기본값입니다.

2026-08-27 — 크리에이터 바이백

"출구 없음" 원칙을 단 하나의 경로에 대해 해제하며, 이 경로는 항상 소각으로 끝납니다. 이제 Treasury Ratio는 크리에이터의 재량으로 떨어질 수 있습니다. 2026-09-27에 폐지되었고, 에어드랍으로 대체되었습니다.

2026-08-29 — 긴급 모드

오너는 48시간의 공개 대기 후 트레저리의 자산을 이동할 수 있습니다. "누구도 트레저리를 건드릴 수 없다"는 약속을 대체합니다. 프로토콜은 더 이상 트러스트리스로 설명되지 않습니다. 2026-10-05부터 즉시: 대기 기간은 사라졌습니다.

2026-09-11 — 레일이 Robinhood Chain으로 이동

걸림돌은 프라이머리 민트 발행사에 대한 볼트 컨트랙트의 자격 요건이었고, 이는 한 번도 공개적으로 문서화된 적이 없었습니다. Robinhood Chain의 세컨더리 풀은 이를 요구하지 않습니다. 치른 대가: 감수한 크로스체인 의존성.

2026-09-12 — 본딩 커브 폐지

생성 시점부터 잠기는 두 개의 싱글 사이드 Uniswap v4 포지션으로 대체되었습니다. 졸업도, 마이그레이션도, 졸업 수수료도 없습니다.

런칭 FDV는 바뀌지 않습니다: 커브가 시작하던 3.409 ETH 그대로입니다. 첫 2 ETH 매수는 이전의 36.99 %에 비해 공급량의 36.06 %를 가져갑니다 — 런칭은 1포인트 이내의 차이로 이전과 똑같이 작동합니다.

그 과정에서 배제된 안: $50,000 상한의 $5,000 런칭. 깊이가 3.25 ETH에 불과해 첫 2 ETH 매수자가 공급량의 57 %를 가져갈 수 있었습니다. 그리고 상한을 낮추면 시장이 진정되리라는 생각 — 이는 얇은, 상한 없는 밴드로 더 일찍 넘어가게 만들어, 50 ETH를 지출한 뒤 도달하는 FDV를 두 배로 만듭니다.

2026-09-12 — 세 블록 안티 스나이프

블록 1에서는 크리에이터만, 블록 2에서는 크리에이터와 오너 화이트리스트를 제외하고 99 %를 바이백으로, 그 이후는 정상. 2026-09-28에 감소형 안티 스나이프로 대체되었습니다.

반론을 충분히 알고서 내린 결정입니다: 99 % 택스는 누군가 돈을 잃어야만 무언가를 만들어 내며, 블록 2를 닫았다면 피해자 없이 같은 억지 효과를 냈을 것입니다. 화이트리스트를 크리에이터 수준이 아닌 프로토콜 수준에 둔 것은, 바로 마켓마다 내부자 특혜가 되지 않게 하기 위해서입니다.

2026-09-12 — 매도 시 소각 없음

매도할 때마다 들어오는 토큰의 10 %를 소각 주소로 보내자는 아이디어는 폐기되었습니다. 매도자가 부담하면 왕복 거래 비용이 18.78 %까지 올라갔습니다. LP가 부담하면 "영구히 잠긴 유동성"이 거짓이 되고, 누구에게나 유통 물량을 소각해 자기 물량을 펌핑할 수 있는 대략 1:1의 지렛대를 쥐여 주게 되었습니다.

2026-09-27 — 에어드랍이 크리에이터 바이백을 대체

이제 마켓의 트레저리에는 단 하나의 용도만 있습니다: 트레저리가 매수하는 주식의 100 %는 Robinhood Chain에서 해당 토큰의 홀더에게 현물로, 비례 배분으로 에어드랍됩니다. 크리에이터 바이백은 폐지되고, 그와 함께 브리지의 역방향 경로도 사라집니다. $STOCKFUN 바이백 소각은 유지됩니다.

그 과정에서 배제된 안: 크리에이터 바이백 유지, 그리고 이전 V2 계획이었던, 60 %는 트레저리에 남기고 40 %를 분배하는 분할안. 감수한 결과: 더 이상 어떤 트레저리도 쌓이지 않고, Treasury Ratio는 의미를 잃으며, 슬로건과 태그라인은 재검토해야 합니다. 메커니즘은 2026-10-04에 코딩되었습니다: 에어드랍을 참고하십시오.

2026-09-27 — 24시간마다 한 번의 주기

같은 날 에어드랍의 주기가 정해졌습니다. 24시간마다 한 번, 트레저리에 0.1 ETH 이상이 쌓인 각 마켓에 대해 키퍼가 전환하고, 브리지로 보내고, 주식을 매수한 뒤, 이를 에어드랍합니다. 임계값 미만이면 그날은 아무 일도 일어나지 않으며, ETH는 기다립니다.

주식은 미국 주식시장이 열려 있을 때만 매수할 수 있으므로, 주말이나 NYSE 휴장일에는 주기가 없습니다. 키퍼의 코드에서는 2026-10-06까지 전환이 거래 시간 중, 볼트가 임계값을 보유한 첫 바퀴에서 이루어졌습니다; 그 이후로는 이 결정을 따라, 측정 구간마다 한 번, 측정 구간이 닫힌 뒤 키퍼가 루프를 처음 돌 때, 그리고 그때 볼트가 임계값을 보유한 경우에만 이루어집니다(아래 2026-10-06 참고); 같은 날 여섯 번째 감사 루프 이후로는 볼트가 보유한 USDC도 이 빈도를 따릅니다. 에어드랍으로의 전송은 2026-10-05부터 그날의 거래 시간이 끝난 뒤 측정 구간마다 한 번 실행됩니다: 키퍼를 참고하십시오.

2026-09-27 — 묶인 자금과 보유량 측정

중단된 주기의 잔여분은 임계값 도달 여부와 관계없이 다음 주기에 마무리됩니다. 미러 볼트에 24시간 동안 묶인 에어드랍 자금은 오너가 사전 공지 없이 이동할 수 있습니다: 48시간 공개 대기 기간의 유일한 예외이며, 이를 알고서 선택한 것입니다. 보유량은 월요일을 포함해, 주기 직전 24시간 동안의 평균 잔액으로 측정합니다. 묶인 자금에 적용되는 기간은 2026-09-28에 48시간이 되었고, 이 규칙은 코딩되지 않은 채 2026-10-05에 종결되었습니다.

2026-09-28 — 감소형 안티 스나이프

매수와 매도 모두, 오프닝 블록에서 80 %, 이후 블록마다 8포인트씩 차감, 11번째 블록부터 5 %. 초과분은 마켓의 트레저리로, $STOCKFUN에서는 팀의 청구 가능한 수수료로 갑니다. 면제: 크리에이터의 런칭 매수와 크리에이터가 설정한 화이트리스트. 이 목록은 생성 트랜잭션에서 고정되고, 공개되며, 변경할 수 없고, 최대 20개 주소로 제한됩니다. $STOCKFUN에서는 런칭 시 오너가 설정합니다. 2026-10-05부터 이 수치들은 오너의 설정이며, 위의 값들은 기본값입니다.

그 과정에서 배제된 안: 첫 블록들에서 매수한 지갑에 태그를 붙여, 전송 이후에도 그 지갑들의 이후 매도에 택스를 부과하는 방안. v4 풀은 지갑을 보지 못하고, 토큰이 떼어 가는 택스는 매도를 실패하게 만들며, StockFun 라우터 밖에서 태그된 지갑을 차단하면 토큰이 스캐너에서 경고 대상으로 표시될 것입니다. 감수한 결과: 화이트리스트가 프로토콜에서 크리에이터로 넘어가며, 이는 2026-09-12 결정이 내부자 특혜를 막기 위해 배제했던 것입니다.

2026-09-28 — 묶인 에어드랍 자금: 48시간

미러 볼트에 24시간이 아니라 48시간 동안 머문 에어드랍 자금은 오너가 사전 공지 없이 이동할 수 있습니다. 24시간일 때는 이 기간이 주기의 간격과 같아서, 한 주기만 넘어가는 평범한 이월분도 사전 공지 없이 이동할 수 있게 되었습니다. 48시간에서는 더 이상 그렇지 않습니다. 금요일에 실패한 주기의 자금은 여전히 월요일 주기 전인 일요일에 이동 가능해집니다. 같은 날 결정: 이 카운트는 일시 중지 중에도, 주말에도 결코 멈추지 않습니다. 코딩되지 않은 채 2026-10-05에 종결되었습니다: 긴급 이동은 어디서나 즉시 이루어집니다.

2026-09-28 — 온체인에 기록되는 보유량

각 마켓의 토큰은 모든 지갑의 보유량을 시간에 따라 기록하므로, 주기 직전 24시간의 평균과 모든 몫을 컨트랙트가 계산합니다. 키퍼가 이를 제공하는 일은 결코 없습니다. 배제된 안: 키퍼가 오프체인에서 계산하고 이의 제기 기간을 두어 공개하는 배분. 감수한 비용: 토큰을 전송할 때마다 추가 가스비가 듭니다.

2026-09-28 — Ethereum에서 래핑된 주식으로 하는 에어드랍

Robinhood Chain에서 매수된 주식은 그곳에서 StockFun이 배포한 LayerZero 어댑터(주식마다 하나)에 잠기고, 래핑된 주식으로 Ethereum에 보내집니다. 분배는 토큰과 그 보유량이 존재하는 Ethereum에서 이루어지며, 각 홀더는 본인 부담으로 자신의 몫을 청구합니다. 감수한 결과: 래핑된 주식의 가치는 잠긴 주식과 LayerZero 설정에만 달려 있고, Ethereum에는 그 거래 시장이 없으며, 발행사가 주식 토큰을 동결하면 잠긴 주식도 묶이게 됩니다. 같은 날 결정: Paxos가 USDG에 대해 그러하듯, 오너가 대기 기간도, 인출 상한도 없이 어댑터의 LayerZero 설정을 보유합니다. 배제된 안: 배포 후 고정되는 설정, 그리고 48시간 사전 공지를 거친 변경.

2026-09-28 — 공식 라우터는 변경 가능한 상태로 유지

오너는 공식 스왑 라우터를 언제든 변경할 수 있으며, 훅은 이 라우터를 통해 안티 스나이프 화이트리스트를 인식합니다. 감수한 결과: 오너는 다른 라우터를 지정함으로써 누구든 안티 스나이프에서 면제할 수 있습니다.

2026-09-28 — 0.001 ETH 생성 수수료

생성 수수료는 약 $3 대신, 코드에 고정된 0.001 ETH가 됩니다: 가격 피드도, 오너 설정도 없습니다. 이제 그 달러 가치는 ETH 가격을 따라 움직입니다. 2026-10-05부터 오너 설정이며, 기본값은 0.001 ETH입니다.

2026-09-28 — 보유량 기록에서 제외되는 PoolManager

토큰은 Uniswap의 PoolManager를 기록하지 않습니다. PoolManager는 모든 스왑의 한쪽 당사자로, 모든 풀의 토큰을 보유하며 에어드랍을 받는 일이 없습니다. 그 기록은 0으로 읽히고, 트레이더의 보유량은 계속 기록됩니다. 측정된 절감: 스왑 1회당 약 24,000 가스이며, 매수와 매도 모두 같습니다.

2026-09-29 — StockFun 풀에 LP 수수료 없음

풀은 Uniswap LP 수수료를 0.30 %가 아닌 0으로 설정해 생성됩니다: 훅의 택스가 거래 비용의 전부이며, 방향당 5 %, 왕복 거래는 가격 영향을 고려하기 전 기준 9.75 %입니다. 감수한 비용: 트레저리, 팀, 크리에이터는 LP 수수료에서 받던 몫을 잃고, 그 수수료 중 토큰 쪽 부분의 소각도 사라집니다. 2026-10-05부터 LP 수수료는 런칭 설정이며 기본값은 0입니다; 각 풀은 생성될 때의 수수료를 유지합니다.

2026-10-01 — 2026-09-29 보안 감사에 따른 수정

모든 발견 사항을 검토하고 각각의 수정 방법을 정한 뒤, 2026-09-30과 2026-10-01에 적용했습니다. 수정된 각 발견 사항에는 감사 대상 코드에서는 실패하는 회귀 테스트가 있습니다.

StockFun 풀에 유동성을 추가할 수 있는 것은 유동성 락뿐입니다: 서드파티 포지션이 택스도, 안티 스나이프도 내지 않고 택스가 부과되는 스왑을 상대로 거래했습니다. 새 훅 권한 때문에 훅의 주소가 바뀌었고, 주소는 다시 채굴되었습니다.

거래 중에 전송되는 것은 트레저리 몫뿐입니다. 팀과 바이백 몫은 훅에 적립되며, 누구나 호출할 수 있는 청구를 통해 팩토리의 현재 지갑으로 지급됩니다. 에스크로는 사라졌습니다. 라우터와 락은 스왑 전에 입력 금액을 지불합니다. 그 전까지는 Uniswap을 다시 호출하는 수수료 지갑이 모든 풀의 거래를 멈출 수 있었습니다.

각 전환 단계는 키퍼가 지정한 금액을 지출하므로, 거래 장소보다 큰 볼트는 나누어 전환합니다. 현금은 들어오는 대로 바스켓 주식별로 배정되며, 키퍼가 건너뛴 주식은 자신의 배정분을 유지합니다. 미러 볼트도 같은 방식으로 작동합니다.

각 토큰은 Uniswap PoolManager 밖에 있는 공급량을 시간에 따라 기록하며, 이것이 에어드랍 비례 배분 몫의 분모입니다. 감사가 제시한 세 가지 안 중 이 안은 스왑마다 쓰기 한 번이 더 듭니다. PoolManager를 다시 기록했다면 스왑 1회당 약 24,000 가스가 들었을 것입니다. 감수한 결과: 에어드랍의 측정 구간은 정각에 시작하고 정각에 끝납니다.

Robinhood 레일에서는 거부된 바스켓이 더 이상 배치의 다른 마켓들을 막지 않고, 원격 토큰 하나는 식별자 하나만 가지며, v3 경로의 부분 체결은 그 경로를 실패시키고, 일시 중지된 리모트 허브도 역할 변경을 적용하며, 정식 브리지의 기록은 도착한 순서대로 지급됩니다.

측정 결과: 라우터를 통한 매수는 113,529 가스, 매도는 137,250 가스이며, 이전에는 각각 125,862와 150,416이었습니다. 오너의 결정을 기다리며 아직 열려 있는 것: 브리지 어댑터 교체(M-2, 그리고 함께 묶인 L-8), Ondo 어테스테이션(M-7), 자기 자신을 수신자로 받아들이는 라우터(L-4). 2026-10-05부터 M-7과 L-4는 수정되었고, M-2는 오너의 결정에 따라 그대로 유지되며, L-8도 함께 유지됩니다.

2026-10-01 — 보안 파이프라인이 수정을 보완

같은 날, 독립적인 감사자 두 명이 진행한 두 번째 감사 라운드가 여러 수정을 보완했습니다. 각 수정에는 회귀 테스트가 있으며, 어느 것도 설계 결정이나 변경 불가능한 파라미터를 바꾸지 않습니다.

Robinhood Chain에서 v3 경로는 한 번에 풀 하나씩 실행되며, 각 풀은 입력 전체를 받아야 합니다: 이전의 검사는 첫 번째 풀만 보았고, 그 뒤 풀에서의 부분 체결은 누구나 가져갈 수 있는 곳에 중간 토큰을 남겼습니다. 정식 브리지의 회계 정보 티켓은 자신이 대기열에 추가한 수만큼의 기록까지만 가장 오래된 것부터 지급하므로, 적체가 더 이상 티켓을 자동 실행의 가스 너머로 밀어내지 않습니다. 나머지는 스윕이 지급합니다.

볼트의 현금을 배정분 아래로 떨어뜨리는, 실행된 긴급 회수는 두 볼트 모두에서 배정분을 모두 0으로 만듭니다: 남은 현금과 이후 들어오는 모든 현금은 비중에 따라 새로 나뉩니다. 그 전까지 이 초기화는 읽는 값에만 존재했고, 예전 배정분은 다음에 들어오는 현금과 함께 되살아났습니다.

키퍼는 매수할 때마다 바스켓의 마지막 주식에서 n−1 단위를 남겨 둡니다: 반올림 나머지가 그 주식으로 가므로, 더스트 전송 하나로 매수가 실패할 수 있었습니다. 키퍼는 또한 $STOCKFUN 풀이 전부 체결할 수 없는 소각 분량을 절반으로 줄입니다. 각 토큰은 배포 시점에 첫 시간별 기록점을 남기며, 이는 테스트 체인의 시계처럼 시간 0에서 시작하는 시계에서만 문제가 되었습니다. Ethereum의 주식 라우터는 ETH로 지불하기 전에 동기화하며, Lens는 빈 페이지를 거부합니다.

측정 결과: 토큰의 매시 첫 스왑은 별도의 트랜잭션일 때 약 23,000이 아니라 약 28,000~30,000 가스가 더 듭니다.

오너의 결정을 기다리며 아직 결정되지 않은 것: 그 기록이 이후 다른 마켓들의 현금으로 지급되는, 리모트 허브의 기록된 현금에 대한 긴급 회수(R2H-1); 미러 볼트 하나를 거부해 정식 브리지의 대기열을 멈추고 그 마켓과 묶인 배치를 실패시키는 현금 토큰(R2H-2); 문서화된 배정 규칙을 바꾸는, 마지막 주식 여유분의 컨트랙트 측 처리(R2T-1); 어떤 라우터든 매수할 수 있도록 매수 택스를 PoolManager 클레임으로 받는 방안(R2F-1, option b); $STOCKFUN 볼트를 팩토리가 직접 배포하게 하는 방안(R2F-2); 그리고 정보성 항목 세 개(R2H-4, R2H-6, R2H-7). 다시는 매수할 수 없는 주식도 들어오는 모든 현금에서 자신의 비중만큼 계속 배정받습니다: 레그를 제외하면 바스켓의 고정된 비중이 바뀌므로, 이는 의도된 것입니다. 2026-10-05부터 R2H-1은 그날 감사 루프들의 정산 도구와 하나의 절차, 즉 이동 전에 오너가 리모트 허브를 일시 중지하는 절차로 다루어집니다; R2H-2는 네 번째 루프의, 다른 마켓을 막지 않는 전달로 종결되었습니다; R2F-1의 option b는 채택되지 않았으며, 택스는 지금 받는 방식 그대로 유지됩니다; 그리고 ETH를 거부하는 볼트는 R2F-2가 설명한 멈춤, 즉 그 마켓을 멈추는 일을 더 이상 일으키지 않습니다: 아래의 2026-10-05 항목들을 참고하십시오.

2026-10-02 — 모든 모듈이 업그레이드 가능

그때까지 프로토콜의 어떤 컨트랙트도 업그레이드할 수 없었습니다. 토큰과 유동성 락을 제외한 모든 모듈을 StockFun의 오너가 업그레이드할 수 있게 되며, 업그레이드는 즉시 효력을 가집니다: 타임락은 없습니다. 각 모듈은 UUPS 방식으로 업그레이드되는 프록시이며, 누가 자신을 업그레이드할 수 있는지를 자신의 업그레이드 권한자에게 묻습니다: Ethereum에서는 팩토리, Robinhood Chain에서는 리모트 허브입니다. 두 체인 모두에서 볼트는 마켓마다 프록시 하나이며, 마켓별로 업그레이드됩니다. 훅의 프록시는 v4 권한 14개를 모두 담도록 채굴되므로, 이후의 구현 컨트랙트는 주소를 옮기지 않고도 어떤 콜백이든 사용할 수 있습니다.

토큰에는 자체 로직이 없습니다: 고정된 공급량과, 오너를 위한 setter 하나, setRecorder를 가진 단순한 ERC-20입니다. 보유량 기록은 토큰을 떠나 새 모듈인 보유량 기록기로 옮겨지며, 모든 토큰은 전송할 때마다 이 기록기를 호출합니다: 호출이 실패하면 전송도 실패합니다. 2026-10-05부터 토큰에는 자신의 주소로 보내진 것을 위한 레스큐도 있으며, 그 차단 방식의 호출은 창업자의 격리 규칙의 의도된 유일한 예외입니다(아래 참고).

유동성 락은 업그레이드할 수 없는 상태로 남으며, 종료 모드가 추가됩니다: 오너가 종료 모드를 공지하고, 30일 뒤에는 $STOCKFUN의 유동성을 포함해 모든 풀의 유동성 전체를 어떤 주소로든 회수할 수 있습니다. 오너는 취소할 수 있습니다. 30일 동안 거래는 계속되며, 종료가 대기 중인 동안에는 새 마켓을 런칭할 수 없습니다. 종료 모드는 프로젝트가 문을 닫는 경우를 위한 것이며, 30일은 홀더를 위한 사전 공지 기간입니다. Robinhood Chain의 미러 볼트 배포자도 업그레이드할 수 없습니다: 모든 미러 볼트의 주소가 여기서 도출되기 때문입니다.

달라지는 것: 업그레이드는 그대로 유지되는 긴급 모드의 48시간을 기다리지 않습니다. 볼트의 한도에서 소각과 5 % 요율에 이르기까지, 이 문서가 고정되어 있다고 말하는 규칙은 오너가 그 규칙을 담은 모듈을 업그레이드하지 않는 동안에만 유지됩니다. 팩토리가 먼저 배포되고 오너가 이를 연결하므로, 배포 순서가 바뀝니다. 스왑에는 단독으로 측정했을 때 약 27,000 가스가 더 듭니다: 매수는 210,105 대신 237,190 가스, 매도는 258,278 대신 285,031 가스이며, 이는 경로상의 프록시들과 기록기 호출에 드는 비용입니다. 2026-10-05부터 긴급 모드에도 대기 기간이 없으며, 볼트의 한도와 5 % 요율은 오너의 설정입니다.

2026-10-04 — 에어드랍 컨트랙트

코딩과 테스트는 끝났으나, 배포되지 않았습니다. 팩토리에 묶인, Ethereum의 업그레이드 가능한 모듈인 AirdropDistributor가 각 마켓의 주식을 일일 주기로 분배합니다. 주기의 측정 구간은 1년 내내 미국 개장 전인 13:00 UTC에 닫히며, 그 매수와 전송은 이어지는 거래 시간 중에 이루어집니다. 주기는 첫 전송과 함께, 또는 그보다 먼저 열리며, 그 수치를 고정합니다: 보유량 기록기, 측정 구간이 닫힌 시점에 유효했던 제외 목록, 그리고 적격 보유량. 이 컨트랙트를 채우는 경로는 두 가지로, 각 주식의 LayerZero 어댑터를 거치는 미러 볼트의 sendToAirdrop과, 로컬 레일을 위한 Ethereum 볼트의 sendToAirdrop입니다; 그 밖의 어떤 것도 주기에 적립되지 않습니다.

같은 날 결정된 것: 키퍼 푸시는 없으며, 홀더만이 본인 부담으로 청구합니다(TBD 5); 지갑당 상한도, 최소 금액도, 기한도 없습니다(TBD 7); 토큰마다 오너가 정하는 제외 목록 하나, 최대 16개 주소이며, 소각 주소는 항상, $STOCKFUN의 경우 베스팅 컨트랙트도 포함됩니다(TBD 8). 적격 보유량이 없는 측정 구간을 위한 전송은, 누가 호출하든 언제 호출하든, 그 사이에 주기 시각이 바뀌지 않고 토큰의 보유량 기록기가 교체되지 않는 한, 적격 보유량이 있는 첫 측정 구간을 위해 따로 보관됩니다.

감수하고 문서화한 것: 키퍼가 시점을 정하므로, 다음 13:00 UTC 이후에 도착한 전송은 다음 날의 측정 구간을 기준으로 측정됩니다; 주기 시각을 옮기면 아직 열리지 않은 측정 구간이 다시 나뉘며, 따로 보관된 주식이 아직 확인해야 할 구간도 여기에 포함됩니다; 토큰의 보유량 기록기는 제자리에서 업그레이드할 뿐, 운영 중인 토큰에서 결코 교체하지 않습니다. 이번 변경에 포함되지 않은 것: 묶인 자금에 대한 48시간 규칙, 주식 어댑터, 키퍼의 에어드랍 단계, 디앱의 청구 화면. 2026-10-05부터 제외할 베스팅 컨트랙트는 없고, 48시간 규칙은 종결되었으며, 주기 시각은 오너가 정하는 일정, 즉 측정 구간의 길이와 마감 시각(setCycleSchedule)의 일부가 되었습니다; 운영 중인 토큰에 지정된 기록기는 PoolManager 밖에 있는 토큰의 공급량에서 시작합니다(아래의 감사 루프 항목 참고).

2026-10-05 — 팀 할당 없음, 즉시 작동하는 긴급 모드, 모든 수치는 설정

같은 날 코딩과 테스트를 마친, 배포되지 않은 세 가지 결정.

팀 할당이 사라집니다. 팀 베스팅 컨트랙트 TeamVesting은 삭제되었고, 팀을 위해 예약된 $STOCKFUN은 없습니다: 기본값 1,000,000,000개인 공급량 전체가, 마켓의 공급량 전체가 두 포지션에 들어가듯, 싱글 사이드로 잠긴 포지션에 들어갑니다. 그때까지는 10 %가 12개월에 걸쳐 베스팅 컨트랙트로 갔고, 에어드랍은 그 컨트랙트를 $STOCKFUN의 주기에서 제외했습니다; 이제 제외되는 것은 소각 주소뿐이며, 그날의 세 번째 감사 루프 이후로는 런칭 운영자도 제외됩니다(아래 참고).

긴급 모드가 즉시 작동합니다. emergencyTransfer는 볼트, 브리지 허브, 에어드랍 컨트랙트에서 어떤 자산이든 어떤 주소로든 즉시 이동합니다; 각 이동에는 순차 id와 공개 이벤트가 있습니다. 2026-08-29의 48시간 예약 절차는 취소 기간과 함께 사라졌고, 대기 기간은 파라미터가 아닙니다: 긴급 조치는 오너가 사용하는 즉시 작동하며, 결코 기다린 뒤에 작동하지 않습니다. 브리지 어댑터 교체 changeAdapter도 같은 고정값 아래에서 즉시 이루어집니다. 2026-09-27과 2026-09-28에 결정되었으나 코딩되지 않은 묶인 에어드랍 자금 규칙은 종결되었습니다: 즉시 이루어지는 이동이 어떤 컨트랙트에서든, 언제든 그 경우를 다룹니다.

모든 수치가 설정이 됩니다. 이제 프로토콜의 수치는 두 체인 모두에서 오너의 온체인 설정이며, 현재의 값이 기본값입니다: 택스와 그 배분, 안티 스나이프; 생성 수수료와 새 마켓 문자열의 길이 제한; LP 수수료와 틱 간격을 포함한 새 마켓의 형태, 그리고 잠긴 포지션이 거두는 것의 몫; 전환 기준치와 볼트의 가격 한도; 에어드랍의 일정과 한도; 오라클의 하트비트; 브리지의 가스와 슬리피지. 각 설정은 즉시 효력이 발생하고 불가능한 값은 거부합니다. 택스 변경은 아직 안티 스나이프 블록 안에 있는 풀을 포함해 모든 풀에 다음 스왑부터 적용됩니다; 형태 변경은 이후 생성되는 마켓에 적용되며, 각 풀은 생성될 때의 LP 수수료와 틱 간격을 유지합니다.

고정된 채로 남는 것: 업그레이드할 수 없는 락에 있는 종료 모드의 30일 사전 공지 END_DELAY; 베이시스 포인트에서 보유량 기록의 시간 단위에 이르는 단위와 인코딩; 그리고 가격 피드에서 브리지의 엔드포인트에 이르는 연결 구성으로, 이를 다른 곳으로 향하게 할 수 있는 것은 업그레이드뿐입니다.

감수한 결과: 이 문서가 택스, 런칭, 볼트, 에어드랍에 대해 제시하는 수치는 보장이 아니라 기본값입니다; 오너는 그 각각을 언제든 사전 공지 없이 바꿀 수 있습니다. 측정 결과: 택스 설정을 읽는 데 스왑 1회당 약 1,200 가스가 더 들며, 웜 상태 기준입니다. 신뢰 모델을 참고하십시오.

2026-10-05 — 감사 루프의 수정

같은 날, 코드 전체에 대한 검토 루프가 컨트랙트 수정으로 이어졌습니다. 각 수정에는 회귀 테스트가 있으며, 배포되지 않았습니다. 그중 네 가지는 동작을 바꿉니다.

긴급 이동 이후에는 장부가 정산될 뿐, 결코 다른 마켓의 몫에서 지급되지 않습니다. 에어드랍 컨트랙트와 리모트 허브는 여러 마켓에 지급해야 할 자산을 보유합니다. 둘 중 어느 쪽에서든 이동이 일어난 뒤에는 없어진 것에 달린 지급, 즉 에어드랍에서 그 주식의 청구와 USDG 레일에서 리모트 허브의 지급이, 자산이 돌아오거나 StockFun의 오너가 손실을 입은 주기나 마켓에서 그 손실을 상각할 때까지 대기합니다; 정식 브리지 레일에서는 오너가, 이동이 그 현금을 가져간 기록을 다음 입금이 도착하기 전에 제거합니다. 주기의 부분 상각은 아무도 그 주기에서 그 주식을 청구하지 않은 동안에만 가능하며, 그러면 모든 홀더가 같은 비율을 잃습니다; 일부 홀더가 지급받은 뒤에는 아직 지급받지 않은 홀더들이 잃게 되는 남은 양 전체로만 상각할 수 있습니다. 이동 자체는 여전히 즉시, 아무 조건 없이 이루어집니다. 긴급 모드를 참고하십시오.

브리징은 키퍼만 합니다. 그 전까지는 누구나 브리지 배치를 보낼 수 있었습니다: 제3자가 Curve 풀에서 자신의 두 거래 사이에 어댑터가 허용하는 가장 느슨한 최소 수량으로 배치 하나를 끼워 넣거나, 키퍼의 배치에 든 볼트 하나를 먼저 브리지로 보내 그 배치를 실패하게 만들 수 있었습니다.

Robinhood Chain에서 미러 볼트를 미리 배포하는 것은 키퍼와 StockFun의 오너뿐입니다. 그 전까지는 아직 존재하지 않는 마켓에 대해서도 누구나 그렇게 할 수 있었고, 그 볼트는 그날의 연결 구성에 묶였습니다. 이제 미리 배포된 볼트는 첫 배치 때 리모트 허브의 주식 라우터와 오라클을 넘겨받습니다.

운영 중인 토큰에 지정된 보유량 기록기는 PoolManager 밖에 있는 토큰의 공급량에서 시작하며, 이전에 그 토큰을 기록한 적이 있는 기록기는 그 토큰을 거부합니다. 그 전까지 새 기록기는 0에서 시작했습니다: 모든 매도가 실패했고, 그 이후에 열린 주기의 에어드랍 몫은 영구히 망가졌습니다. 이제 거래는 계속되며, 새 기록기가 움직이는 것을 보지 못한 홀더는 다음 움직임 전까지 아무것도 보유하지 않았던 것으로 읽힙니다. 기록기를 제자리에서 업그레이드하는 것이 여전히 규칙입니다.

더 작은 수정: 볼트는 실제로 도착하는 양에 자체 한도뿐 아니라 키퍼 자신의 최소 수량도 적용합니다; 정식 브리지의 회계 정보 티켓은 배치의 크기에 맞는 비용을 지불합니다; 설정은 어떤 풀도 그 틱에서 열릴 수 없는 런칭 틱, 0인 이름 길이 제한, 서로 다른 PoolManager를 쓰는 훅과 락을 거부합니다; 에어드랍 측정 구간을 더 길게 바꿔도 따로 보관된 주식이 있는 마켓이 더 이상 막히지 않습니다. 신뢰 모델을 참고하십시오.

2026-10-05 — 감사 루프의 두 번째 회차

같은 날, 그 수정들에 대한 두 번째 검토 루프가 더 많은 컨트랙트 수정과 키퍼 변경으로 이어졌습니다. 각 컨트랙트 수정에는 테스트가 있으며, 배포되지 않았습니다.

장부는 자신을 뒷받침하는 것을 셀 뿐, 결코 잔액을 세지 않습니다. 에어드랍 컨트랙트의 잔액과, USDG 레일에서 리모트 허브의 잔액에는, 도착했지만 아직 적립되지 않은 토큰도 들어 있습니다: 마지막 단계가 아직 실행되지 않은 전달입니다. 긴급 회수 이후, 그런 토큰이 비워진 주기의 청구를 다시 열어 다른 마켓의 주식으로 그 청구에 지급할 수 있었습니다. 이제 두 컨트랙트는 자신의 장부를 뒷받침하는 것을 스스로 셉니다. 긴급 이동은 먼저 그것에서 가져갑니다; 그것을 넘어 가져간 것은 아직 적립되지 않은 토큰에서 나온 것이며, 다음 전달들은 무엇이든 뒷받침하기 전에 먼저 그것을 메우고, 이때 리모트 허브는 그 배치들을 전달하는 대신 기록합니다. 자산은 누구나 호출할 수 있는 restore를 통해 돌아옵니다; 단순한 전송은 아무것도 뒷받침하지 않으므로, 잘못 들어온 토큰은 복원하기 위해서만 회수합니다. 긴급 모드를 참고하십시오.

청구 이후에 이루어지는, 주기의 남은 양 전체에 대한 상각이 있고 나면, 그 뒤에 그 주기에 도착하는 것은 무엇이든 상각된 양이 처음부터 없었던 것처럼 그 주기의 모든 홀더에게 비례 배분으로 나뉩니다; 그 전까지는 아직 지급받지 않은 홀더들에게, 그들이 청구하는 순서대로 먼저 갔습니다. 어떤 마켓을 위해 따로 보관된 것을 하나도 남기지 않는 상각은 그 마켓의 측정 구간 탐색을 끝냅니다.

토큰은 자신의 풀이 있는 곳이 아닌 다른 Uniswap PoolManager에 묶인 보유량 기록기를 거부합니다. 그런 기록기는 풀을 홀더로 계산해, 모든 홀더에게 자신의 몫의 일부만 지급하게 될 것입니다. 그리고 운영 중인 토큰에 지정된 기록기는, 모든 홀더가 움직일 때까지, 홀더들의 합계와 같은 값이 아니라 그 합계 이상인 기록된 공급량을 유지합니다.

정식 브리지에서는 수수료 견적을 키퍼가 지정하는 base fee, 즉 최신 base fee의 두 배로 산정하며, 초과분은 환불됩니다: 가스 가격 없이 읽은 견적은 base fee를 0으로 보았고, 긴 배치가 실패했습니다. 리모트 허브는 배치를 통해서만 키퍼를 알게 됩니다: 첫 배치 전에는 StockFun의 오너가 첫 마켓의 미러 볼트를 미리 배포하며, 키퍼가 볼트를 미리 배포할 수 없는 마켓은 알림과 함께 그 배치에서 제외됩니다. 키퍼는 볼트의 실패를 Ethereum과 Robinhood Chain에서 따로 셉니다.

2026-10-01의 두 번째 라운드에서 나온 것 중: R2H-1은 정산 도구와 하나의 절차, 즉 이동 전에 오너가 리모트 허브를 일시 중지하는 절차로 다루어집니다; R2H-2는 완화되었으나 아직 열려 있습니다: 동결된 미러 볼트가 더 이상 정식 브리지의 대기열을 영구히 멈추지 않고, 배치를 구성하는 것은 키퍼뿐이지만, 그 볼트로의 전달은 여전히 통째로 실패하므로 키퍼는 그 마켓을 제외해야 합니다. 신뢰 모델을 참고하십시오. 네 번째 회차로 같은 날 종결되었습니다: 아래를 참고하십시오.

2026-10-05 — 하나의 실패는 결코 나머지를 막지 않음

같은 날 정해진 창업자의 설계 규칙: 무언가가 한 기능을 실패하게 만들 때, 다른 기능들이 그 대가를 치러서는 안 되며, 모든 것이 계속 작동해야 하고, 모든 것에는 잃어버린 자금을 회수하고 수정을 받아들일 조치 수단이 있어야 합니다. 이 규칙에는 두 부분이 있습니다. 격리: 한 기능, 마켓, 주식, 주기, 기록, 수령인에서의 실패는 결코 다른 것들을 막지 않습니다; 그 항목은 건너뛰거나, 지급해야 할 것으로 보관하거나, 연기하며, 이벤트를 발생시키고, 나머지는 계속 진행됩니다. 조치 수단: 지나가는 동안이든 실수로든 ETH나 토큰을 보유할 수 있는 모든 컨트랙트에는 묶인 것을 꺼낼 조치 수단이 있으며, 모든 모듈은 수정, 즉 업그레이드나 모듈을 교체하는 setter를 받아들일 수 있습니다. 네 번째 감사 루프부터 루프들은 어떤 위반이든 결함으로 셉니다.

의도된 유일한 예외: 토큰이 보유량 기록기에 하는 보고는 여전히 차단 방식이며, 보고가 실패하면 전송도 실패합니다. 보고가 실패해도 되게 하면, 홀더가 자신의 전송에서 보고에 가스를 모자라게 주어 기록이 그 움직임을 건너뛰게 하고 자신의 에어드랍 몫을 키울 수 있을 것입니다. 조치 수단은 즉시 작동합니다: 토큰의 setRecorder(0), 또는 기록기를 제자리에서 업그레이드하는 것이며, 각각 트랜잭션 하나입니다.

받아들인 결과: 거부된 몫은 나머지를 멈추는 대신 그 수령인을 기다립니다; 어느 마켓에도 차감되지 않는 긴급 이동은 정산될 때까지 그 자산의 지급을 대기하게 만듭니다; 그리고 토큰에 기록기가 없는 동안 에어드랍은 그 토큰의 주기를 열지 않으며 그 주식을 따로 보관합니다. 아키텍처를 참고하십시오.

2026-10-05 — 감사 루프의 세 번째 회차

같은 날, 세 번째 루프가 작업의 순서를 대상으로 진행되었습니다: 단독으로는 올바르지만 어떤 순서나 타이밍에서는 잘못되는 작업들입니다. 각 수정에는 테스트가 있으며, 배포되지 않았습니다.

restore는 에어드랍 컨트랙트와 리모트 허브의 USDG 레일에서, 긴급 이동이 장부를 뒷받침하는 것을 넘어 가져간 것을 먼저 메우고, 나머지로 장부를 뒷받침합니다: 대기 중인 전달의 토큰을 돌려주어도 더 이상 그 토큰으로 비워진 마켓에 지급하지 않습니다. 아무도 청구하기 전에 한 주기에서 통째로 상각된 주식은 그 주기의 목록에서 빠집니다.

운영 중인 토큰에 지정된 보유량 기록기는 교체 시점에 새 기록을 시작합니다: 에어드랍은 교체 전에 시작된 측정 구간을 측정하지 않으며, 그 측정 구간의 주식은 따로 보관된 채 그 기록기가 전 기간을 기록하는 첫 측정 구간을 기다립니다. 그리고 토큰은 교체 시점의 소각 주소 잔액을 보고합니다. 그 전까지 그런 측정 구간은 교체 시점부터만 측정되어, 그 뒤에 움직인 사람에게 과다 지급했습니다. 절차: 먼저 이미 닫힌 측정 구간들의 주기를 연 다음, 측정 구간이 끝난 직후에 교체합니다; 기록기를 제자리에서 업그레이드하는 것이 여전히 규칙입니다.

$STOCKFUN 런칭 스크립트는 런칭 운영자를 에어드랍에서 제외합니다. 그 전까지는 에어드랍의 첫 주기가 그 보유분에 지급했습니다. 브리지 스크립트는 팩토리가 이미 다른 허브를 지정하고 있으면 배포하기 전에 멈추며, 허브를 지정하기 전에 주식을 매핑합니다; setBridgeHub는 등록된 바스켓을 운반할 수 없는 허브를 거부합니다. 오프체인: 영수증을 읽을 수 없는 트랜잭션은 그 해시로 추적되며 결코 두 번 보내지지 않습니다; 긴급 감시는 이벤트를 나누어 읽으며, 실패할 때 한 번, 회복할 때 한 번 알림을 보냅니다; 배치 항목을 만들 수 없는 마켓은 한 번의 알림과 함께 제외됩니다. 앱에서는 확인되지 않은 트랜잭션이 해시를 유지하며(열 번째 감사 루프 이후로는 그 nonce에서 채굴된 것까지 추적되고, 지갑에서의 취소는 결코 완료로 읽히지 않습니다: 아래 참고), 종료 모드가 회수한 풀은 가격도 거래도 표시하지 않습니다.

2026-10-05 — 감사 루프의 네 번째 회차: 코드에 들어간 규칙

같은 날, 네 번째 루프가 창업자의 규칙을 코드에 반영했습니다. 각 수정에는 회귀 테스트가 있으며, 배포되지 않았습니다.

브리지 전달은 결코 다른 마켓을 막지 않으며, 이는 R2H-2에 대한 오너의 결정입니다: 현금 토큰이 미러 볼트에 대해 거부한 몫은 그 마켓에 지급해야 할 것으로 리모트 허브에 남고, 다른 마켓들은 지급받습니다; 정식 브리지 레일에서는 그 몫이 대기열을 떠나므로, 그 뒤의 기록들은 지급됩니다. 누구나 나중에 sweep으로 이를 지급할 수 있습니다. 리모트 허브에서의 긴급 이동은 한 마켓에 차감할 수 있으며, 그 마켓의 장부는 같은 호출에서 정산됩니다. 청구는 지급할 수 있는 것을 지급합니다: 장부에 부족하거나 전송이 거부되는 주식은 연기되어 계속 지급 대상으로 남으며, claimMany는 호출자를 제외하는 주기를 건너뜁니다. 각 매수 레그, 에어드랍으로 보내는 전송의 각 주식, 브리지 배치의 각 마켓은 따로 진행됩니다. ETH를 거부하는 볼트는 더 이상 그 마켓을 멈추지 않습니다: 훅은 지급할 수 없었던 것을 그 볼트에 지급해야 할 것으로 보관하고, 락은 수수료 수취분 중 거부된 몫을 그 수령인을 위해 보관하며, 누구나 이를 지급할 수 있습니다; ETH를 받을 수 없는 크리에이터 컨트랙트는 다른 주소로 청구합니다. Lens는 한 번에 볼트 하나를 읽습니다.

모든 곳에 조치 수단: 모듈이 실수로 보유한 것에 대한 레스큐가, 누구의 것도 보관하지 않는 모든 모듈에, 훅에는 잘못 들어온 자금에 한해, 락에는 락이 보관하는 몫은 결코 대상으로 하지 않은 채, 버너에는 어떤 소각도 그 ETH를 쓸 수 없게 된 뒤에만 그 ETH에 대해, 그리고 두 토큰 모두에 있습니다; 볼트, 허브, 에어드랍 컨트랙트는 긴급 모드를 유지합니다.

그 밖에: Ondo 라우터는 자신의 팩토리의 볼트만 처리하며(M-7), 모든 라우터는 자기 자신을 수신자로 지정하는 것을 거부합니다(L-4); 정식 브리지 레일의 입금 티켓은 base fee 기준으로 가격이 매겨집니다; $STOCKFUN 런칭 스크립트는 민트 전에 운영자를 목록에 올립니다; 스토리지 검사는 모든 구조체를 모든 깊이까지 비교합니다. 같은 날 결정: M-2와 R2F-1은 그대로 유지됩니다. 긴급 모드와 신뢰 모델을 참고하십시오.

2026-10-05 — 키퍼의 에어드랍 단계와 청구 화면

같은 날 창업자의 요청으로, 새로운 결정 없이 작성되었으며, 배포되지 않았습니다. 키퍼는 각 마켓의 주식을 측정 구간마다 한 번, 기본값으로 미국 거래 시간이 끝난 뒤에 보냅니다: 먼저 따로 보관된 주식을 귀속시키고, 이어서 주기를 열고, 그다음 전송하며, 각 주식과 각 마켓은 따로 진행되고, Robinhood Chain에서 오는 각 전달은 적립될 때까지 추적되며, 늦어진 전달을 다시 실행하는 명령이 담긴 알림이 함께 갑니다. 디앱의 청구 화면은 지갑이 청구할 수 있는 것을 측정 구간별로 나열하며, 트랜잭션 하나에 최대 10개 측정 구간까지 청구하고, 콜드 상태에서 측정하면 약 340만~350만 가스가 듭니다. 빠진 것: 실패한 전달의 마지막 단계를 자동으로 실행하는 것; 대신 알림이 그 명령을 알려 줍니다.

이어서 네 번째 루프의 오프체인 회차가 키퍼에게 새 임무를 주었습니다: 훅과 락이 보관하는 채무의 지급, 실패한 레그, 반복해서 제외되는 마켓, 거부된 전달에 대한 알림, 각 주식 레그의 개별 계획, 재시작을 넘어 유지되는 상태 파일, LP 수수료의 일일 수취. 앱은 응답할 수 없는 볼트에 대해 "Figures unavailable"을 표시합니다. 키퍼와 디앱을 참고하십시오.

2026-10-05 — 감사 루프의 다섯 번째 회차

같은 날, 다섯 번째 루프가 심각도 낮은 문제 일곱 개를 찾았으며, 각각 테스트와 함께 수정되었고, 배포되지 않았습니다. 정식 브리지 기록에 차감되는 리모트 허브의 이동은 입금이 도착한 기록을 위한 것입니다: 거부된 몫을 위해 보관된 것이 아닌 현금을 넘는 금액은 거부하며, 입금을 잃어버린 기록은 상각합니다. 잔액을 읽을 수 없는 주식은 더 이상 에어드랍으로의 전송도, 그 견적도 멈추지 않으며, 견적에서 코드가 없는 어댑터도 마찬가지입니다. 관리자를 프록시의 스토리지에 두는 팩토리와 리모트 허브의 구현 컨트랙트는, 자신에게 보내진 것에 대한 조치 수단으로 자신의 배포자를 씁니다. 락과 두 토큰에는 실수로 보내진 v4 클레임과 NFT를 위한 레스큐가 추가됩니다; 락에는 여전히 범용 호출이 없습니다. 브리지 배치는 볼트에 아직 코드가 없는 마켓을 제외합니다. 매수가 자금을 어떻게 옮기는지 잘못 설명하던 주석이 바로잡혔습니다. 긴급 모드를 참고하십시오.

2026-10-06 — 다섯 번째 루프의 오프체인 회차

다섯 번째 루프의 오프체인 코드 검토는 심각도가 중간인 문제 3개와 낮은 문제 16개를 찾았으며, 각각 같은 날 테스트와 함께 수정되었고, 배포되지 않았습니다. 이제 키퍼는 2026-09-27의 빈도를 지킵니다: 볼트의 ETH는, 측정 구간이 닫힌 뒤 키퍼가 루프를 처음 돌 때 볼트가 임계값을 보유하고 있으면, 에어드랍 측정 구간마다 한 번 전환됩니다; 그 아래이면 ETH는 다음 측정 구간을 기다립니다. 그 전에는 볼트가 임계값을 보유하는 즉시 키퍼가 거래 시간 중 루프를 돌 때 어느 때든 이를 전환했습니다. 키퍼가 보내는 모든 트랜잭션은 영수증을 기다리기 전에 nonce와 함께 상태 파일에 기록되므로, 기다리는 동안 종료된 키퍼가 이를 다시 보내지 않습니다; 어떤 노드도 더 이상 알지 못하는 트랜잭션은 일정 기한이 지나면 포기됩니다; 하나의 상태 폴더는 한 번에 하나의 키퍼만 사용합니다. Ondo 레일에서는 Ondo가 볼트의 한도보다 낮게 가격을 매기는 매수가 더 이상 실패하도록 보내지지 않으며, 그에 대한 어테스테이션 비용도 지불되지 않습니다. 어댑터가 응답하지 않는 주식은 그 주식만 에어드랍 전송에서 제외됩니다.

바스켓에는 최대 다섯 개의 주식만 담을 수 있으며, 이는 StockFun의 오너가 업그레이드로 바꿀 수 있는 기술적인 한계입니다: 바스켓과 함께 커지는 모든 비용은 이 크기까지 측정되어 있고, 런칭 바스켓 세 개에는 각각 주식 세 개, 세 개, 두 개가 담겨 있습니다. Lens는 각 볼트의 상태와 훅과 락이 그 볼트에 지급해야 할 것을 담으며, 그 업그레이드는 이를 읽는 Worker와 앱보다 먼저 반영됩니다. $STOCKFUN 런칭 스크립트는 두 번째 토큰을 민트하는 대신, 프로토콜 마켓이 지정되기 전에 멈춘 실행을 이어 갑니다. 앱은 볼트에 지급되어야 할 ETH를 그 트레저리에 포함하고, 블록에 포함되기 전에 적립되는 주식을 위해 청구에 여유를 두며, 토큰이 거부한 주식을 기억하고, 읽지 못한 수치를 결코 0으로 표시하지 않습니다. 키퍼, 바스켓, 디앱을 참고하십시오.

2026-10-06 — 여섯 번째 감사 루프

여섯 번째 루프는 심각도가 높은 문제 1개와 낮은 문제 5개를 찾았으며, 각각 같은 날 테스트와 함께 수정되었고, 배포되지 않았습니다. 테스트넷에서, 그리고 대체 경로로 쓰이는 정식 브리지에서 키퍼는 배치의 마켓들이 적립되는 즉시 그 배치의 티켓 재실행을 멈췄고, 한 마켓에 다른 배치의 현금이 적립될 수 있었으므로, 자동 실행을 놓친 입금이 만료될 수 있었습니다. 이제 키퍼는 각 티켓을, 그 전송의 적립과 상관없이, 실행되었다는 것을 알 때까지 지켜보고, 아직 유효한 티켓을 재실행하며, 기본값으로 6시간이 지나도 실행되었는지 알 수 없거나 티켓이 사라진 경우 알림을 보냅니다; 정식 전송은 리모트 허브 자체의 이벤트로만 적립하며, 결코 잔액으로 적립하지 않습니다.

수정과 함께, 감사가 권장 기본값으로 내린 결정이 하나 있습니다: 2026-09-27의 빈도가 USDC에도 적용됩니다. 볼트의 USDC는 Ethereum에서 주식 매수에 쓰이든 브리지로 보내지든, 그 ETH의 각 전환 뒤에 한 번, 그 밖에는 측정 구간마다 많아야 한 번 나갑니다; 그 전에는 볼트로 보내진 USDC 몇 단위 때문에 키퍼가 루프를 돌 때마다 트랜잭션을, 또는 브리지 배치 전체를 보냈습니다. Robinhood Chain에서의 매수는 여전히 루프를 돌 때마다 실행됩니다: 미러 볼트의 잔액은 전달과 기부를 구분할 수 없으며, 각 매수의 상한은 큰 전달을 의도적으로 여러 바퀴에 나눕니다. 로컬과 테스트넷 실행은 같은 스위치로 두 빈도를 모두 끕니다.

그 밖에 수정된 것: 보낼 것이 없는 볼트에 대해, 아무것도 귀속하지 않을 따로 보관된 주식 탐색은 더 이상 매일 보내지지 않습니다; 임계값보다 적은 볼트는 측정 구간이 닫힌 뒤 읽은 잔액으로 확인됩니다; 같은 날 그보다 앞서, 로컬 배포 파일은 사용 전에 체인과 대조되도록 바뀌었습니다; Lens가 트레저리를 읽을 수 없는 동안 앱은 $STOCKFUN 가격을 "(last read)"로 표시하며, 그동안 워커는 그 가격을 기록하지 않습니다. 같은 날 시작된 다음 루프는, 각 볼트가 생성될 때의 라우터를 유지하는데도 키퍼가 모든 볼트를 하나의 라우터에서 견적하고 있었음을 발견했습니다: 이제 각 볼트는 자신의 라우터에서 견적됩니다. 키퍼를 참고하십시오.

일곱 번째 루프 이후로(아래 참고), "보낼 것이 없음"은 보낼 가치가 있는 것이 없음을 뜻하며, 키퍼는 각 티켓을 그 생성 영수증부터 먼저 읽습니다.

2026-10-06 — 일곱 번째 감사 루프

일곱 번째 루프는 심각도가 중간인 문제 1개와 낮은 문제 14개를 찾았으며, 각각 같은 날 테스트와 함께 수정되었고, 배포되지 않았습니다; 컨트랙트에서는 문제가 나오지 않았습니다. 정식 브리지에서 키퍼는 티켓의 생성 영수증을 읽기 전에 그 티켓이 아직 존재하는지를 읽었습니다: 두 번의 읽기 사이에 생성된 입금이나, 한 블록 차이가 나는 두 노드가 본 입금은 아직 유효한데도 실행된 것으로 여겨져, 재실행도 알림도 없이 만료될 수 있었습니다. 이제 키퍼는 Arbitrum SDK와 같은 순서로 이를 읽습니다: 먼저 영수증, 다음으로 자동 실행, 그다음 생성보다 이르지 않은 블록에서의 티켓.

수정과 함께, 감사가 권장 기본값으로 내린 결정이 하나 있습니다: 키퍼는 보내는 비용만큼의 가치가 있는 것만 에어드랍으로 보냅니다. LayerZero 브리지가 운반할 수 없는 더스트보다 많은 주식은, 그 볼트 자신의 오라클로 그 가격 피드의 최신 응답에 따라 평가되며, 자신의 LayerZero 수수료, 또는 Ethereum에서 전송 가스 중 자신의 몫만큼의 가치가 있어야 합니다. 그리고 통과한 주식들은 합쳐서 전송 전체와, 측정 구간의 주기가 아직 열리지 않았다면 그 개시만큼의 가치가 있어야 합니다; 그렇지 않으면 그 뒤에 쌓이는 것과 함께 이후의 측정 구간까지 볼트에서 기다립니다. 키퍼가 읽을 수 없는 가치는 예전처럼 전송을 통과시킵니다. 그 배수는 키퍼 설정인 KEEPER_AIRDROP_MIN_VALUE_BPS이며, 기본값은 비용의 1배이고, 0이면 규칙이 꺼집니다. 이 규칙은 주식이 언제 나가는지만 정할 뿐, 얼마를, 무엇을, 어디로 보낼지는 결코 정하지 않습니다. 그 전까지는 아무도 거래하지 않는 마켓의 볼트에 더스트를 조금 넘는 주식을 선물하면, 키퍼가 매일 그 측정 구간의 주기를 열고 LayerZero 메시지 비용을 지불했습니다; 그리고 같은 더스트가 "보낼 것이 있음"으로 세어졌으므로, 여섯 번째 루프의 따로 보관된 주식 탐색에 대한 제한이 브리지에서는 지켜지지 않았습니다.

그 밖에 수정된 것: 키퍼의 모든 로그 탐색은 체인의 최신 블록보다 몇 블록 아래에서 멈추므로, 한두 블록 뒤처진 노드 때문에 이벤트를 놓치는 일은 결코 없습니다; 키퍼는 각 RPC가 설정에서 지정한 체인을 서비스하는지 확인하며, 그렇지 않으면 시작을 거부합니다; 알림 웹훅에는 시간 제한이 있고 그 응답을 읽으며, 웹훅이 받지 않은 알림은 보관했다가 다시 보냅니다; 빈 설정은 그 기본값을 씁니다. 앱의 데이터 Worker는 업그레이드 가능한 각 컨트랙트를 따로 읽으므로, 잘못된 업그레이드 이후 실패하는 컨트랙트가 있어도 더 이상 $STOCKFUN 토큰의 수치가 비워지지 않습니다; 거래 로그 읽기가 계속 실패하는 동안에는 24시간 거래량을 알 수 없음으로 표시하고, 각 엔드포인트가 자신의 체인을 서비스하는지 확인하며, 가격 차트는 각 점을 그 시각에 놓습니다. Lens와 Worker의 데이터 스키마는 바뀌지 않습니다. 키퍼와 디앱을 참고하십시오.

여덟 번째 루프 이후로(아래 참고), 자신의 견적이 0인 주식에 대해서는 그 어댑터에 묻고, 로컬 레일에서는 측정 구간의 개시를 한 번만 세며, 티켓은 최신 블록보다 몇 블록 아래에서 읽고, 키퍼는 체인 ID가 설정되지 않았을 때 더 이상 그 값을 가정하지 않습니다.

2026-10-06 — Robinhood Chain의 가격 피드 보호 장치

런칭 계획에는 오라클이 아직 갖추지 못한 보호 장치 두 가지가 올라 있었으며, 둘 다 Robinhood의 문서가 권장하는 것이었습니다. 이 둘은 꺼진 상태로 시작하는 StockFun 오너의 설정으로 만들어졌으며, 배포되지는 않았습니다; 둘 다 가격을 보류할 수만 있을 뿐, 결코 바꾸지 못합니다.

  • 기업 행위. 주식이 기업 행위를 거치는 동안, 그 토큰은 자신의 오라클이 일시 중지되었다고 알리며, 그 가격 피드는 마지막 값을 유지합니다. 그 값은 토큰의 승수가 바뀌는 동안에도 여전히 새것처럼 보일 수 있습니다. 이제 오라클은 그 주식의 가격을 보류합니다: 그 매수 레그는 단독으로 실패하고, 그 현금은 그 주식을 위해 유지되며, 바스켓의 다른 주식들은 매수됩니다. 이 검사는 Robinhood 레일의 모든 주식에 대해, 주식별로 켜져 있으므로, 응답을 쓸 수 없거나 플래그가 계속 세워져 있는 토큰은 따로 끌 수 있습니다. 응답하지 않는 토큰은 일시 중지되지 않은 것으로 칩니다: Robinhood는 이 플래그를 참고용이라고 하며, 피드 자체의 신선도 검사가 여전히 주된 가드입니다.
  • 시퀀서. Robinhood Chain은 시퀀서가 하나뿐인 Arbitrum 체인입니다. Chainlink의 L2 시퀀서 업타임 피드가 주어지면, 오라클은 시퀀서가 멈춰 있는 동안, 유예 기간(기본값 1시간) 안에 복구된 동안, 또는 그 피드를 읽을 수 없는 동안 모든 가격을 보류합니다. Robinhood Chain에는 그런 피드가 없으며, Chainlink는 더 이상 새 네트워크에 그런 피드를 추가하지 않습니다: 레일은 배포 스크립트가 요구하는 명시적인 선택에 따라 이 검사를 끈 채로 배포되며, 그런 피드가 언젠가 공개되면 StockFun의 오너가 이를 설정합니다.

Ethereum에서는 둘 다 꺼진 채로 남습니다. Robinhood 레일을 참고하십시오.

2026-10-06 — 여덟 번째 감사 루프

여덟 번째 루프는 심각도가 중간인 문제 1개와 낮은 문제 8개를 찾았으며, 각각 같은 날 테스트와 함께 수정되었고, 배포되지 않았습니다; 컨트랙트와 가격 피드 보호 장치에서는 문제가 나오지 않았습니다. 앱이 체인의 바스켓 레지스트리를 읽기 전에는, 그 런칭 양식이 설정된 바스켓을 설정된 번호로 제시했습니다: 바스켓에 다른 번호를 매기는 배포에서는 크리에이터가 표시된 것과 다른 바스켓으로 마켓을 되돌릴 수 없게 런칭할 수 있었습니다. 이제 양식은 체인에서 읽은 바스켓만 제시하며, 보내기 직전에 선택된 바스켓을 팩토리에서 다시 읽고, 이름이나 주식이 다르면 전송을 거부합니다.

그 밖에 수정된 것: 키퍼는 브리지 배치를 담은 블록이 몇 블록 깊이가 된 뒤에만 그 배치를 추적하므로, Ethereum 최신 블록의 체인 재구성 때문에 결코 존재하지 않을 식별자를 계속 지켜보는 일은 더 이상 없습니다; 브리지가 운반할 수 없는 더스트와 자신의 LayerZero 수수료를 견적할 수 없는 주식을 구분하며, 후자는 이제 조용히 버리는 대신 알림과 함께 제외합니다; 서로 다른 알림마다 대기 중인 알림 하나만 보관하며, 그 알림이 일어난 횟수와 시각을 함께 남기므로, 매 주기 반복되는 알림이 일회성 알림을 밀어내는 일은 더 이상 없습니다; RPC가 서비스하는 체인을 확인하기 전에 다른 체인을 위해 쓰인 상태 파일을 한쪽으로 치워 두는 일은 더 이상 없으며, 두 체인 ID를 모두 요구합니다; 엔드포인트의 모든 노드가 가진, 최신 블록보다 몇 블록 아래의 블록에서 티켓을 읽습니다; 그리고 로컬 레일에서는 측정 구간의 개시를 한 번만 셉니다. 키퍼, 그 사전 점검, 그 인스펙터가 가격 피드 보호 장치를 반영했습니다: 오라클이 시퀀서 때문에 가격을 보류하는 동안 Robinhood Chain에서의 매수는 알림 한 번과 함께 기다리며, 기업 행위 중인 주식은 단독으로 기다리고, 결코 실패로 세지 않습니다. 앱의 데이터 Worker는 거래 집계 창을 결코 뒤로 옮기지 않으므로, 몇 블록 뒤처진 노드가 더 이상 24시간 거래량이 블록을 두 번 세게 만들지 않습니다; 그 RPC 프록시는 주소가 아닌 주소를 거부합니다; 주식의 가격이 빠진 이유를 공개하며(데이터 스키마 8), 앱은 이를 표시합니다; 그리고 거래 패널은 훅과 마찬가지로 안티 스나이프 기간 동안 화이트리스트 지갑에 일반 택스를 부과합니다. Lens는 바뀌지 않으며, Worker와 앱은 여전히 어느 순서로든 배포할 수 있습니다. 키퍼와 디앱을 참고하십시오.

2026-10-06 — Glamsterdam에서의 에어드랍 전달 가스

Sepolia는 LayerZero 테스트넷 실행(아래 참고) 도중인 2026-10-06에 Ethereum의 Glamsterdam 업그레이드를 활성화했습니다; Hoodi와 메인넷에는 아직 일정이 없었습니다. 이 업그레이드는 상태 증가의 가격을 다시 매깁니다: 콜드로 쓰는 새 스토리지 슬롯은 예전의 22,100 가스 대신 110,020 가스가 듭니다. 컨트랙트와 스크립트의 모든 고정 가스 수치를 Sepolia에서 다시 측정했으며, 한 쌍을 빼고는 모두 유지됩니다. 그 한 쌍은 에어드랍 전달이 Ethereum에서 받는 가스입니다: 미러 볼트의 전송은 compose 수치 하나(600,000)만 담았고, 주식 OFT의 lzReceive는 그 OFT가 강제하는 가스만 받았습니다. 이 실행의 첫 주기에 있었던 전달은 모두 LayerZero의 익스큐터에서 가스가 바닥나, 수동으로 실행되었습니다. 열 번째 감사 루프는 그 뒤에 두 가지를 더 찾았습니다: 배포 스크립트 자체의 가스와, 배치를 위한 브리지 compose의 가스입니다(아래 참고).

같은 날 창업자의 결정: 키퍼는 각 전달을 시뮬레이션해 그 가스를 고르며, 그 가스는 StockFun의 오너가 리모트 허브에서 정하는 범위 안으로 맞춰집니다; 그래도 멈춘 전달은 키퍼가 다시 실행하며, 두 번째 실패에는 알림을 보냅니다. 코드에 있으며, 메인넷에는 배포되지 않았습니다:

  • 리모트 허브는 두 가지 가스 정책을 보유하며, 각각 기본값, 하한, 상한으로 이루어집니다: 주식 OFT가 강제하는 가스에 더해지는 lzReceive 가스는 200,000과 1,500,000 사이의 650,000(setAirdropReceiveGas), compose 가스는 600,000과 4,000,000 사이의 1,250,000(setAirdropComposeGas)입니다. 미러 볼트의 sendToAirdrop(stocks, receiveGas, composeGas)는 키퍼가 요청한 값에 대해 허브가 허용하는 값으로 보내며, 0은 기본값을 뜻합니다; 주식만 지정하는 호출은 두 기본값을 씁니다. 정책이 생기기 전의 상태에서 업그레이드된 허브는 둘 다 설정될 때까지 모든 전송을 거부합니다
  • 키퍼는 엔드포인트의 주소에서 Ethereum의 각 주식 lzReceive와 compose를 시뮬레이션하고, 필요량에 25 %를 더해 요청합니다; 시뮬레이션을 실행할 수 없을 때는 그 마켓의 최근 전달이 쓴 값을, 그다음에는 허브의 기본값을 씁니다. LayerZero의 익스큐터가 실패시킨 뒤에도, 또는 10분이 지나도 엔드포인트에 저장된 채로 남는 전달은 키퍼 자신의 키에서, 시뮬레이션한 필요량에 25 %를 더한 가스로, 기본값으로 최대 4,000,000 가스까지 다시 실행됩니다; 보낼 수 없는 전달에는 수동으로 실행하는 명령과 함께 알림이 가며, 두 번째 실패에는 알림이 가고 다시는 보내지 않습니다
  • 앱은 트랜잭션 하나에 측정 구간 10개 대신 5개를 청구하며, 측정 구간이 아직 받을 수 있는 주식 하나마다 400,000 가스를 남겨 두고, 모든 쓰기 트랜잭션의 견적에 150,000 가스를 더했습니다. 아홉 번째 감사 루프는 이를 쓰기 트랜잭션마다 자신의 한도로 바꾸었습니다(아래 참고)

이 수정은 업그레이드를 통해 테스트넷 실행의 리모트 허브와 미러 볼트에 적용되었으며, 그 이후의 주기들을 감당했습니다. 키퍼와 Robinhood 레일을 참고하십시오.

2026-10-06 — LayerZero 테스트넷 실행

프로토콜은 프로덕션 스크립트, 또는 그 본체를 유지한 테스트넷용 래퍼로, 테스트 주식, 테스트 어댑터, 테스트 USDG, 목 피드와 함께 Sepolia와 Robinhood Chain의 테스트넷에 트랜잭션 167개(모두 성공)로 배포되었으며, 13:50부터 19:07 UTC까지 실행되었습니다: 1시간짜리 측정 구간 7개에서 각각의 ETH가 전환되고, LayerZero로 브리지되어, 테스트 주식에 쓰였습니다; 에어드랍 주기 6개가 LayerZero로 되돌려 보내졌고, 처음 4개는 홀더 다섯 명이 전부 청구했으며, 각 지급은 보유량 기록기로 계산한 몫과 정확히 같았습니다; 사고 대응 훈련은 실제 메시지 위에서 진행되었고, 문서에 적힌 대로 복구되었으며, 예외는 두 개의 절반뿐이었습니다. 이 실행은 StockFun의 코드가 LayerZero의 실제 엔드포인트, DVN, 익스큐터 위에서 동작함을 증명합니다. Paxos의 USDG 쌍, Robinhood의 주식과 그 어댑터, 실제 피드나 유동성, 그리고 메인넷의 가스, 수수료, 완결성은 증명하지 않습니다: 메인넷 시험이 아직 남아 있습니다. 이 실행이 프로덕션 코드에서 찾아낸 것은 Glamsterdam의 가격 재설정(위 참고)과 아홉 번째 감사 루프의 일부(아래 참고)입니다. Robinhood 레일을 참고하십시오.

2026-10-06 — 아홉 번째 감사 루프와 검증자 게이트

아홉 번째 루프는 여덟 번째 루프의 수정을 검토했으며, LayerZero 테스트넷 실행 운영자의 발견 사항을 받아들였습니다. 심각도가 중간인 문제 2개를 찾았습니다: 에어드랍 전달의 가스(위 참고)와, 앱의 데이터 Worker가 Cloudflare 객체가 축출될 때마다 RPC 장애 조치를 다시 만들던 문제로, 이 때문에 기본 RPC가 중단된 동안 7분도 안 되어 37개의 요청을 보냈고, 이제는 8개만 나갑니다. 그리고 키퍼, Worker, 테스트넷 스크립트 하나에서 심각도가 낮은 문제들을 찾았으며, 각각 같은 날 테스트와 함께 수정되었습니다. 키퍼는 자신의 트랜잭션 하나가 끝난 뒤 1분 동안, 그 트랜잭션이 바꾼 것을 그 트랜잭션의 블록에서 읽고, 다음에 보낼 것의 가스도 그곳에서 견적하므로, 한 블록 뒤처진 노드가 더 이상 전환 직후에 보낸 브리지 배치를 거짓 실패로 만들지 않습니다; 키퍼의 각 트랜잭션은 견적한 가스에 25 %를 더해 나갑니다; 전달하지 못한 알림은 마지막으로 일어난 순서대로 나갑니다; 자신의 실행이 삭제한 티켓에 대해 더 이상 유효하다고 알리지 않습니다; 어떤 날짜에도 담을 수 없는 체인 시각은 "an unknown time"으로 읽힙니다; 오라클의 오류를 디코딩합니다; 그리고 그 사전 점검은 테스트넷 실행의 배포에서 동작합니다. Worker는 Robinhood Chain 자체의 블록 번호를 기록합니다.

이 루프 이후로, 두 번째 에이전트가 각 수정의 변경을 푸시하기 전에, 이전 루프들이 찾은 결함의 유형, 그 대부분은 직전 루프의 수정에 있던 것들에 비추어 검토합니다: 이것이 검증자 게이트입니다. 이 에이전트가 찾은 것은 리뷰의 발견 사항처럼 수정되며, 그 수정도 다시 게이트를 거칩니다. 이 루프에서 게이트는 여러 수정에서 심각도가 낮은 결함을 찾았으며, 그중에는 누구나 발생시킬 수 있는 알림을 믿던 다시 실행(이제는 LayerZero의 익스큐터에서 온 것만 믿음)과, 실패한 실행을 그 실행 자신의 블록에서 판단하던 다시 실행이 있었습니다. 후자는 그 블록의 체인 재구성 때문에 거짓 두 번째 실패가 될 수 있었습니다: 이제는 그 블록이 몇 블록 깊이가 될 때까지 기다립니다. 모두 수정되었습니다.

이어서 이 루프의 Worker와 앱 검토는 심각도가 중간인 문제를 하나 더 찾았으며, 같은 날 수정되었습니다: 거래가 그 시간의 공급량 마크보다 많은 새 스토리지를 만나면, 앱이 쓰기 트랜잭션의 견적에 더하는 150,000 가스가 모자랐습니다. 이제 모든 쓰기 트랜잭션은 견적에 50,000 가스를 더한 값을 받으며, 거래는 견적이 볼 수 없지만 아직 일어날 수 있는 각 쓰기의 가스도, 견적의 블록에서 읽어 받습니다; 견적이 실패한 쓰기 트랜잭션은 고정 한도로 나가며, 이때 런칭은 기다립니다. 심각도가 낮은 두 발견 사항도 수정되었습니다: 추정치인 트레저리 금액에는 표시되는 모든 곳에서 "+"가 붙으며, 읽을 수 없는 승인은 결코 승인이 없는 것으로 여겨지지 않습니다. 이 루프는 클린하지 않으며, 클린한 루프의 수는 여전히 0입니다. 키퍼와 디앱을 참고하십시오.

2026-10-06 — 열 번째 감사 루프

열 번째 루프는 아홉 번째 루프의 수정과 Ethereum의 Glamsterdam 업그레이드에 관한 작업을, 영역마다 저마다의 관점에서 검토했습니다: 새 가스 가격에서의 컨트랙트, 목적지에서 실패하는 모든 크로스체인 메시지, 몇 달에 걸친 키퍼, 실제 지갑을 쓰는 앱, 그리고 코드에 비춘 문서입니다. 심각도가 중간인 문제 3개와 낮은 문제 6개를 찾았으며, 각각 같은 날 테스트와 함께 수정되었고, 모든 수정은 검증자 게이트의 검토를 거쳤으며, 메인넷에는 배포되지 않았습니다. 가스 관점에서 컨트랙트는 두 가격표 모두에서 클린했습니다.

  • Glamsterdam에서의 배포 절차. 문서화된 Ethereum 배포는 성공할 수 없었습니다: 배포 도구는 각 트랜잭션에 자신의 로컬 시뮬레이션의 가스를 예전 가격으로 주었는데, 이제 컨트랙트 생성에는 그 4~7배가 필요합니다. 이제 모든 브로드캐스트는 이전 트랜잭션이 채굴된 뒤 각 트랜잭션의 가스를 노드에 묻습니다; Sepolia에서 실행해 확인했습니다
  • 브리지 배치의 compose 가스. Robinhood Chain에서 브리지 배치의 마지막 단계는 배치에 무엇이 담겼든 고정된 가스 수치 하나, 1,200,000을 받았습니다: 주식 다섯 개짜리 새 마켓 네 개가 그 가스를 바닥냈고, 그 USDG는 아무 기록 없이 리모트 허브에 머물렀으며, 같은 마켓이 든 이후의 모든 배치도 같은 식으로 실패했습니다. 이제 그 가스는 기본분에 마켓당 몫을 더한 것으로, 기본값은 200,000과 400,000이고 둘 다 StockFun 오너의 설정이며, 배치 하나는 많아야 마켓 17개를 담습니다. 이로써 메시지는 LayerZero의 크기 제한 아래에, 가스는 Robinhood Chain의 트랜잭션당 제한 아래에 머뭅니다; 키퍼는 그 이상은 보내지 않고 나머지를 다음 바퀴로 남기며, 가장 오래 기다린 마켓부터 보냅니다. 추가 가스의 비용은 작습니다: LayerZero의 익스큐터는 이를 Robinhood Chain의 가스 가격으로 청구하며, 테스트넷에서는 가스 100만당 0.00001 ETH입니다. 멈춘 전송에 대한 키퍼의 알림은 이제 배치의 메시지가 어느 단계에 있는지 알려 줍니다. 테스트넷의 어댑터는 같은 날 업그레이드되었고, 그 다음 배치는 새 가스로 통과했습니다
  • 긴급 감시. 키퍼는 감시하는 모든 볼트를 하나의 로그 요청에 지정했는데, 엔드포인트는 한도를 넘는 요청을 거부합니다: 레지스트리가 그 한도를 넘어서면, 어떤 긴급 이동도 다시는 중계되지 않았을 것입니다. 이제 키퍼는 그것들을 그룹으로 나누어 지정하며, 그룹의 크기는 새 설정으로 제한됩니다
  • 더 작은 수정. 키퍼의 오류 텍스트는 RPC 주소의 호스트만 남깁니다; 각 마켓에 대한 키퍼의 읽기는 바퀴마다 하나씩이 아니라 Multicall3를 통해 호출 하나에 마켓 100개씩 이루어집니다; 앱은 지갑이 취소하거나 교체한 트랜잭션을 추적하며, 취소를 결코 완료로 표시하지 않고, 자신의 트랜잭션 뒤 1분 동안은 그 트랜잭션의 블록보다 이르지 않은 블록에서 읽으므로, 승인 직후의 매도가 한 블록 뒤처진 노드에 더 이상 거부되지 않습니다; 그리고 문서 두 개가 코드에 맞게 갱신되었습니다

미국 거래 시간이 끝난 뒤 전송하는 기본값에서, 키퍼는 이제 거래 시간이 끝난 뒤 보낼 것이 없는 볼트를 다음 거래 시간에야 다시 읽습니다. 이는 그 절약에서 오는 결과이며 새 규칙이 아닙니다: 거래 시간이 끝난 뒤 어떤 매수와도 별개로 볼트에 주어진 주식은 다음 거래 시간의 전송과 함께 더 나중의 측정 구간으로 갑니다; 볼트 자신의 매수가 가져오는 것은 여전히 그날 끝난 측정 구간으로 갑니다.

감사는 결함이 아닌 권고 하나도 검토했습니다: 청구가 훅의 수수료 적립분마다 1 wei씩 남겨, 다음 거래가 그 스토리지 슬롯을 0에서부터 쓰는 비용을 결코 내지 않게 하는 것입니다. 이는 지금은 채택되지 않았습니다. 추가 가스는 각 청구 뒤의 첫 거래에 부과되며 슬롯당 약 104,000이고, 이를 위한 앱의 여유분은 거래의 한도를 높일 뿐 지불하는 금액을 높이지 않습니다; 이 변경은 프루버 실행 없이는 그 정형 규칙을 다시 증명할 수 없는 청구 코드에 손을 대게 됩니다; 그리고 훅과 버너는 나중에 마이그레이션 없이 업그레이드로 이를 받아들일 수 있습니다. 이 루프는 클린하지 않으며, 클린한 루프의 수는 여전히 0입니다. 키퍼, Robinhood 레일, 디앱을 참고하십시오.