From b3979549862cb1dfc56bf51f1a92c85ad81bdd7d Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 26 Nov 2025 20:05:03 +0800 Subject: [PATCH 01/26] Add changelog entry for 2025-11-24 --- .DS_Store | Bin 0 -> 8196 bytes cn/.DS_Store | Bin 0 -> 8196 bytes cn/changelog/2025/11-24.mdx | 17 ++++++++++++++ docs.json | 22 ++++++++++++++++++ en/.DS_Store | Bin 0 -> 10244 bytes en/changelog/.DS_Store | Bin 0 -> 6148 bytes en/changelog/2025/11-24.mdx | 17 ++++++++++++++ .../snippets => snippets}/snippet-intro.mdx | 0 8 files changed, 56 insertions(+) create mode 100644 .DS_Store create mode 100644 cn/.DS_Store create mode 100644 cn/changelog/2025/11-24.mdx create mode 100644 en/.DS_Store create mode 100644 en/changelog/.DS_Store create mode 100644 en/changelog/2025/11-24.mdx rename {en/mintify-examples/snippets => snippets}/snippet-intro.mdx (100%) diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8f0cb302427fa7219c81cb6d1ae1598e5e325777 GIT binary patch literal 8196 zcmeHM%}*0S6n|4uS`k^aC~8bL_F@7-3TQOOSPG3aen4nN@T=~&)4H0R$$J(+m%=*6oyF|(lwx6vfk;puY?s?ei+VQf)1W<|J)k|HJ)k|HJ@9XN0MBfZ;=efeRj)3! z2eb!vqzAj~y);2W_joSo6dvC%DVKth-Ea)jX$Cs9R-+)#d~GFeo^W zX~{Uy#yU$YcQ=}fkLt*i+-Q*ME_swPsc*Vk^=UBQL@$(#9>45y*PY?M6F8hL-1gDO z`G79vS(T&374+|PU3B?#)bkNH$;>ZUo@cQd%|5#0S~hj3S(XO@Uz&HyoT-ubNVQm< z@u*Oly7*N&GL^X;5hoR4KuQsKlT1cbh$Qun-jj5ZaYhrV%#7+u;C4R%<8T$`U=bd} zGk5{7;4Qp|Pw)l4kxpWe6J&slkqhJ^nId^|la$GQ;t)?Mh($l}aaE5>;v*#&>q^06 zE@w5Y3*H1&fa5~7`e0_Us4;(rbc z{DIrTq6?~E!3sDS8W<8796r`+t)~Hb-nQ%$$e)I@l7Gu!iizu4YcMSWZ`B$Tq1?>V z30EKw6Oe;zP=H)3xBQ~~vgt%RjGM=GlqjN132_{yE@8_!mN{$@bRH&=9)cyPv}qH; z-mGme%p&JF@?VW4;9;wb4E|=B9=HKhC{sjh6Os}m$f1rcEJ`0XOXC2xIqg#R`^Eb| z_v`Qf+dN8bUVA`$;7@vhbW9c|vuGi@Q?(lto4JYk9%hjQUqhi3!9uWzcKIAf{P~9= h(q`C~39+FNdoca=4*@&*TCC518<(7T^X~Zb{|91mKr8SsD1c|SNX9AWzG~H_ zRzNH8Un(H>2Me>nRD@N9a_hiCUI7qWuv#Xx@g5*KR)nbts|qC*`&73F5>ZKX#UP4~ z?UryyOhs5#sOUfx9Y_?JL^l*7qa)9f?m$usb*UB53N$Jp?(POSP{DhjZyiD=0_)ADy!22I1)FH`3JHa_)Sq(Q33CtCK9JmuYA|9(ENk}f?TwAy8n(tK z#`lM!`8(3&HeqDkw{*@^CVmJN{qjhBL@;~AJD0u56V|3&CAVgM)M+HYxDYH znzfn5+S)rhySmMu-oBoAPa=`HaIyc=z~zCg+2`1~V!;<9p5h+&(_V!x7koFLDcd=h z6&6Ff9cJ8Jnl*cmxjv!!=Z97EJ7x5VA6Cfj9{7|p+28E?dO*X)I(sQ=b_Y41d)^!m z+|cE0X(d3tXF^(yjH}8pA*l>}dEzxILX!MU*Q7nqIHR#-YEHGp@WmX0 zd+-<*pa{G08s5Tt_yk|zJN$&-q?MRtkPMLta+ge!hh&C4BRR4`T;i(^nrgr7E9$vc zk^rrSmwq$jGmo!9t$qi1IW?Jotwp+7`MBPAbBxLaf20{}7Ne=t3)SrV9K8y>K!i literal 0 HcmV?d00001 diff --git a/cn/changelog/2025/11-24.mdx b/cn/changelog/2025/11-24.mdx new file mode 100644 index 0000000..15b8b6f --- /dev/null +++ b/cn/changelog/2025/11-24.mdx @@ -0,0 +1,17 @@ +--- +title: "2025-11-24" +description: "Airdrop 二期活动与三个 frontier 上线" +--- + +## Airdrop二期活动 & 三个 frontier 上线 + +### 功能发布 + +**Airdrop二期活动正式上线:** +* **活动奖励:**共设置 1 million XNY token 奖励 +* **活动内容:**包含三个新的 frontier 的数据提交任务以及其他任务参与(例如社交媒体任务) + +**首页新增三个 frontier:** +* **Advanced Physics Questions frontier:**专业物理从业者提交 AI 无法正确回答的高难度物理问题 +* **Crypto & Stock Information frontier:**为 AI 提供可靠的加密与股票投资决策相关信息 +* **Real-world Photo frontier:**为 AI 提供带有标注元数据的真实拍摄照片 diff --git a/docs.json b/docs.json index 3635758..8f098f0 100644 --- a/docs.json +++ b/docs.json @@ -74,6 +74,17 @@ ] } ] + }, + { + "tab": "Changelog", + "groups": [ + { + "group": "2025", + "pages": [ + "en/changelog/2025/11-24" + ] + } + ] } ] }, @@ -133,6 +144,17 @@ ] } ] + }, + { + "tab": "更新日志", + "groups": [ + { + "group": "2025", + "pages": [ + "cn/changelog/2025/11-24" + ] + } + ] } ] }, diff --git a/en/.DS_Store b/en/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..54bc4817bb1a7724a3a2b481fc3f78d79462ccff GIT binary patch literal 10244 zcmeHM&u<$=6n>M2W{uNilO|AtkgWQG)TSh~MT!uraf={AC{Z1y32kxL_QqLdy<>LQ z`Ozp+&TxV|+_`c>;=+*&S8j+u0j`|jdo$~HckPM*QmCRCYv;Y4ec$}}X5YSeZE_h(r@&2r?Kw2dv$x}whUs&3*1lvyp{`-2lu?7 zCHJbb7qlXUt?36=!79}4ONWPxHy5v#ZY(VxT`e6hy}1DW`dddw1#7na#@l!6JANmS zpQ+K1NIo-kLEk^gKR@YMz2F7qmBGcR#LqkKMXGoin}bwmx}Uw06*i z&CJsRRo(lc>jtX6m94GFjW<&IX5F5QnxXXlRT+7)Cxgug5$0eyc00?#mPCuY;D4pd zkD_%qj35Uv8=FoTIzij59z67&hU>2cRT;;!v*9&mpnE>4s>SVU=yH|iTfb|H%asrN z%IjLOsjL;ORA>5HB1QQJ_mR@q0vWi4a%ELNDIlC&p?B#cTBjX)OkdDf^bLJaKhiJs z8~q{1ge@+ME8>QDN8A!0h-LAyXo_v&iBMNC(tiP7)A#*cM9@y;FuS!d@MX}3J=bL^ zCyU@_0l5@Wlyj(WVUu>K0^DyK&KFP{_C8#(okfVte~&mL4mX4g<6dXiy@pJ8&Y9Rk zQU|{t9E8uC4|2}&mEiQ=SRX^iHQ_f6N!Bc z4725wChO&KS#xmFJ6Ln5 zbBbXtBVJPp*CSk<_&noSOLa_wj7_*)9mnH_kK@$=4$2nz87JtKL>_C25~NfAGr%0L Ul`GHh@tWEH|C7_`f4Tqv3pZ&NMgRZ+ literal 0 HcmV?d00001 diff --git a/en/changelog/.DS_Store b/en/changelog/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..25032dd11d0d5e33eabc675792f9412253b05209 GIT binary patch literal 6148 zcmeHKPfrs;6rTrGwji=VtB5ga?8OA4ErJO#hPq(1F$O{j76Hp{JCqH}OtZVC0wL*H zPksPDfZxExi$^bBy%|4(UOnlXKMMkKHAeO&Gru?U{_MWrW@dH>Az(FYc|uG=h=EOD zq8qzEh_H)xLOS$J0ue-xqQ|R_#~mDtgt5d7#0>n~42ZRxAY&wlZQ|Jawa|9+rxaPl zfuGX~8hV|-a~hr-gt^>j=;%zGJKtq=89l~oX@j>)p&d2@%l4PWXn}LjiFDgpbZM(% zrlvUyZI@AB2DmkfE-O!6R^u&;H(4!^u_a|Nl18#(4(;vbC-S42@yY!DXl8G6EQk8- zJNx@dBb~iT#>vx*qrx)$`Rfql%K1 zI!|lQ52qG(8t9WcoRH}r`jj%6Z+3k>pketpeW_yh1y!GW-W(6y(B*7tB|x5wA>Asn zb&gNmMviA2!W1l0KR`SYQ(m%t-)41c?W}sXL%msM@i63DWw*+idhYUk=mHb2!w8JSJ(z+=P=setg$;1QR|z_zk91HSkTy3D7Oym{6KM0e$g+jC3bZP#E_y12F?f8R%3) zQ=I<~a1Ebw|34ZOk75R52L3AsATd*#v9Kh4ww@?XoV6KjYuJPczqUddf}K8&r6P{v eA#766mJteKL1SAX&Y;9U0+NQfiy8Q<4EzFoe9x%> literal 0 HcmV?d00001 diff --git a/en/changelog/2025/11-24.mdx b/en/changelog/2025/11-24.mdx new file mode 100644 index 0000000..9ec8e6d --- /dev/null +++ b/en/changelog/2025/11-24.mdx @@ -0,0 +1,17 @@ +--- +title: "2025-11-24" +description: "Airdrop Season 2 and three new frontiers" +--- + +## Airdrop Season 2 & Three New Frontiers Launch + +### Feature Release + +**The Airdrop Season 2 event is now officially live:** +* **Event Rewards:** A total of 1 million XNY tokens have been allocated for rewards. +* **Event Content:** Includes data submission tasks across three new frontiers, along with other participation tasks (e.g., social media tasks). + +**Three new frontiers have been added to the homepage:** +* **Advanced Physics Questions Frontier:** Designed for physics professionals to submit high-difficulty physics questions that AI models cannot answer correctly. +* **Crypto & Stock Information Frontier:** Aims to provide AI with reliable information related to cryptocurrency and stock investment decisions. +* **Real-world Photo Frontier:** Encourages contributors to provide real-life photos with annotated metadata to enhance AI's understanding of the physical world. diff --git a/en/mintify-examples/snippets/snippet-intro.mdx b/snippets/snippet-intro.mdx similarity index 100% rename from en/mintify-examples/snippets/snippet-intro.mdx rename to snippets/snippet-intro.mdx From c4c78eded829f07fad0a062849569e76053fcad2 Mon Sep 17 00:00:00 2001 From: Yi Zhang Date: Thu, 27 Nov 2025 20:11:15 +0800 Subject: [PATCH 02/26] docs: add ecosystem integration section and ERC-8004/x402 post --- docs.json | 6 ++ en/diagrams/erc-8004-x402-flow.png | Bin 0 -> 269122 bytes .../adopting-erc-8004-x402-essentials.mdx | 90 ++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 en/diagrams/erc-8004-x402-flow.png create mode 100644 en/ecosystem-integration/adopting-erc-8004-x402-essentials.mdx diff --git a/docs.json b/docs.json index 3635758..000d641 100644 --- a/docs.json +++ b/docs.json @@ -58,6 +58,12 @@ "en/business/governance-treasury" ] }, + { + "group": "Ecosystem Integration", + "pages": [ + "en/ecosystem-integration/adopting-erc-8004-x402-essentials" + ] + }, { "group": "Protocol Token ($XNY)", "pages": [ diff --git a/en/diagrams/erc-8004-x402-flow.png b/en/diagrams/erc-8004-x402-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..c19a6dd8f4afd8991a684a441b7ff529d1fd4780 GIT binary patch literal 269122 zcmagG1yqz>_dYx`4Beg5T@unY(hY)iNQZPtOQ&>qi2?%BsR%;~(t=1!hjcf5w@kW$0bY>AyljCN zu$zXQB&c$jVhea9ZK=)y@nM1x{>oLRT%_=ffS@4KlK9d7ybmGPRx% z;NBa_7!9Ht(PvDulfWsoi3ydNBVR)ip@ixQ)CKgYkR;x&dk?C0{io-T#CYe$#CV@c zh^oB!_TG2oWqI-Sr01}hfaU$&ZP*DO7#HV%KKhSQ?!yTJfrUWsRFQ!w z|LXx0r>91SiMN*iO!}Yq1)}tU3w&Wv>HqmSq5*#MXh}vZ{eRyl4Z{M>BhXSq{?{V` z8?_Idfc>!S1O5NJj~e0%+NAtr)Pm%pXZt^>ww#;Irv(`d`68y$Gqn9=n`P(2t6-0) z+*}>4VCi1|k6(DS5K#CkYK$Yr^E{-fvToS3H644q0encpXcIun%{QJv@6 zgK5S;z6vo6?!A%QWcR(Y?d5fz_j;zw&pJ2J&`GK#bsN)N+~18Zs8zB+-kAHT$E!b@ zScyN?=rB9i;+D>?S8F|z7xzF!yV7vl4)5wTUgA#Byf=o=Zc@G0ed{YG*(1Tz3C(h? za@iVPg~7~k$^V@sf z-=2Stdk`)8$!$aR=}Oar4?0V$d?EtfPb&Wl)6LPsX5>c4`B%OsKiXb055HAR?L>B- zb!f_U?nJFg%6JzsS!2ESCABA-IG@js=q_C8;ir>>F6?+V>AL {~Z&QA|H4-y0Mw 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 literal 0 HcmV?d00001 diff --git a/en/ecosystem-integration/adopting-erc-8004-x402-essentials.mdx b/en/ecosystem-integration/adopting-erc-8004-x402-essentials.mdx new file mode 100644 index 0000000..c337df9 --- /dev/null +++ b/en/ecosystem-integration/adopting-erc-8004-x402-essentials.mdx @@ -0,0 +1,90 @@ +--- +title: "Adopting ERC-8004 and x402 as Essentials" +description: "How ERC-8004 and x402 let Codatta plug into the Ethereum agent economy while paying contributors fairly." +--- + +## Overview + +![Flow of contributors, 8004 agents, asset assembly and x402 payouts](/en/diagrams/erc-8004-x402-flow.png) + +Codatta turns human and agent work into on-chain data assets, then routes value back to whoever created that value. +To plug cleanly into the emerging agent economy, we standardize on: + +- **ERC-8004** for agent identity and trust on Ethereum +- **x402** for HTTP-native, pay-per-request payments + + +## 1. Background + +**ERC-8004 (Trustless Agents)** is an Ethereum standard that adds a trust layer on top of agent protocols. +It defines three on-chain registries—Identity, Reputation, and Validation—so agents can be discovered and judged by a shared record of their behavior ([Ethereum Improvement Proposals][1]). + +**x402** is an open, chain-agnostic payment protocol that reuses the HTTP `402 Payment Required` status code so clients (humans or AI agents) can pay for APIs and content directly over HTTP with crypto, typically stablecoins ([Coinbase Developer Docs][2]). + + +## 2. How we adopt ERC-8004 + +In Codatta, agents help with pre-labelling, triage, and validation alongside human experts. + +We use ERC-8004 to make these agents first-class, verifiable participants: + +- **Agent registration** + Each Codatta agent (for example “transaction classifier”, “KYB triage”, “policy validator”) is listed in the ERC-8004 Identity Registry with: + - its MCP/A2A endpoint + - capability description + - basic pricing metadata + +- **On-chain reputation and validation** + As agents pre-label and validate tasks, we emit: + - **Reputation entries** summarizing outcomes (accept rate, conflicts with humans, slashing events) + - **Validation entries** pointing to off-chain logs or evaluation reports via URIs ([Composable Security][3]) + +- **Link to data ownership** + For each job, our internal systems record which data portfolios and contributors were involved. + ERC-8004 events include references to those IDs in their evidence fields; our indexers then map agent activity to: + - which data assets were used + - which humans and agent operators should share future revenue ([Medium][4]) + +Result: consumers can see not just “Codatta labels”, but *which* agents produced them and how those agents have behaved over time, while we preserve a precise link back to human and on-chain ownership. + + +## 3. How we adopt x402 + +We use x402 as the payment rail for Codatta APIs and agent endpoints. + +### Pay-per-use access + +Any paid Codatta endpoint (for example, “label this batch”, “score this transaction”, “fetch this dataset slice”) follows the x402 flow: + +1. Client calls the endpoint. +2. If payment is required, we return `402 Payment Required` plus an x402 payment description (amount, currency, destination, expiry) ([Coinbase Developer Docs][5]). +3. The client (human app or AI agent) pays and retries the request with the x402 authorization header. + +This gives us **fine-grained, per-request monetization** without separate billing systems or complex API key management. + +### From revenue to rewards + +Once a payment settles to Codatta: + +- We attribute the call to: + - the data portfolios used, and + - the agents and humans who contributed to them. +- Revenue is split according to our staking and ownership rules and streamed out as **micro-payouts** to contributors and agent operators, with the remainder going to the protocol treasury ([Coinbase Developer Docs][2]). + +Because x402 is designed for low-friction, on-chain payments, these payouts can be frequent and small rather than batched. + + +## 4. Putting it together + +- **ERC-8004** turns Codatta agents into **discoverable, auditable actors** with shared identity and trust signals. +- **x402** turns each API or agent call into a **programmable payment event**, which we route back through Codatta’s ownership graph. + +Together, they let Codatta plug into a broader agent economy while staying true to our core promise: when your data and expertise power AI, you get a verifiable share of the upside. + +[1]: https://eips.ethereum.org/EIPS/eip-8004 "ERC-8004: Trustless Agents - Ethereum Improvement Proposals" +[2]: https://docs.cdp.coinbase.com/x402/welcome "Welcome to x402 - Coinbase Developer Documentation" +[3]: https://composable-security.com/blog/erc-8004-a-practical-explainer-for-trustless-agents/ "ERC-8004: a practical explainer for trustless agents" +[4]: https://medium.com/%40gwrx2005/erc-8004-and-the-ethereum-ai-agent-economy-technical-economic-and-policy-analysis-3134290b24d1 "ERC-8004 and the Ethereum AI Agent Economy" +[5]: https://docs.cdp.coinbase.com/x402/core-concepts/http-402 "HTTP 402 - Coinbase Developer Documentation" + + From 24ec2486f12e7daa1a7b53b1f57958e65b494683 Mon Sep 17 00:00:00 2001 From: Joel Date: Fri, 28 Nov 2025 01:07:55 +0800 Subject: [PATCH 03/26] add .gitignore file to ignore tracking .DS_store files and unify the format of cn/changelog/2025/11-24 --- .DS_Store | Bin 8196 -> 0 bytes .gitignore | 3 +++ cn/.DS_Store | Bin 8196 -> 0 bytes cn/changelog/2025/11-24.mdx | 10 +++++----- en/.DS_Store | Bin 10244 -> 0 bytes en/changelog/.DS_Store | Bin 6148 -> 0 bytes 6 files changed, 8 insertions(+), 5 deletions(-) delete mode 100644 .DS_Store create mode 100644 .gitignore delete mode 100644 cn/.DS_Store delete mode 100644 en/.DS_Store delete mode 100644 en/changelog/.DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 8f0cb302427fa7219c81cb6d1ae1598e5e325777..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHM%}*0S6n|4uS`k^aC~8bL_F@7-3TQOOSPG3aen4nN@T=~&)4H0R$$J(+m%=*6oyF|(lwx6vfk;puY?s?ei+VQf)1W<|J)k|HJ)k|HJ@9XN0MBfZ;=efeRj)3! z2eb!vqzAj~y);2W_joSo6dvC%DVKth-Ea)jX$Cs9R-+)#d~GFeo^W zX~{Uy#yU$YcQ=}fkLt*i+-Q*ME_swPsc*Vk^=UBQL@$(#9>45y*PY?M6F8hL-1gDO z`G79vS(T&374+|PU3B?#)bkNH$;>ZUo@cQd%|5#0S~hj3S(XO@Uz&HyoT-ubNVQm< z@u*Oly7*N&GL^X;5hoR4KuQsKlT1cbh$Qun-jj5ZaYhrV%#7+u;C4R%<8T$`U=bd} zGk5{7;4Qp|Pw)l4kxpWe6J&slkqhJ^nId^|la$GQ;t)?Mh($l}aaE5>;v*#&>q^06 zE@w5Y3*H1&fa5~7`e0_Us4;(rbc z{DIrTq6?~E!3sDS8W<8796r`+t)~Hb-nQ%$$e)I@l7Gu!iizu4YcMSWZ`B$Tq1?>V z30EKw6Oe;zP=H)3xBQ~~vgt%RjGM=GlqjN132_{yE@8_!mN{$@bRH&=9)cyPv}qH; z-mGme%p&JF@?VW4;9;wb4E|=B9=HKhC{sjh6Os}m$f1rcEJ`0XOXC2xIqg#R`^Eb| z_v`Qf+dN8bUVA`$;7@vhbW9c|vuGi@Q?(lto4JYk9%hjQUqhi3!9uWzcKIAf{P~9= h(q`C~39+FNdoca=4*@&*TCC518<(7T^X~Zb{|91mKr8SsD1c|SNX9AWzG~H_ zRzNH8Un(H>2Me>nRD@N9a_hiCUI7qWuv#Xx@g5*KR)nbts|qC*`&73F5>ZKX#UP4~ z?UryyOhs5#sOUfx9Y_?JL^l*7qa)9f?m$usb*UB53N$Jp?(POSP{DhjZyiD=0_)ADy!22I1)FH`3JHa_)Sq(Q33CtCK9JmuYA|9(ENk}f?TwAy8n(tK z#`lM!`8(3&HeqDkw{*@^CVmJN{qjhBL@;~AJD0u56V|3&CAVgM)M+HYxDYH znzfn5+S)rhySmMu-oBoAPa=`HaIyc=z~zCg+2`1~V!;<9p5h+&(_V!x7koFLDcd=h z6&6Ff9cJ8Jnl*cmxjv!!=Z97EJ7x5VA6Cfj9{7|p+28E?dO*X)I(sQ=b_Y41d)^!m z+|cE0X(d3tXF^(yjH}8pA*l>}dEzxILX!MU*Q7nqIHR#-YEHGp@WmX0 zd+-<*pa{G08s5Tt_yk|zJN$&-q?MRtkPMLta+ge!hh&C4BRR4`T;i(^nrgr7E9$vc zk^rrSmwq$jGmo!9t$qi1IW?Jotwp+7`MBPAbBxLaf20{}7Ne=t3)SrV9K8y>K!i diff --git a/cn/changelog/2025/11-24.mdx b/cn/changelog/2025/11-24.mdx index 15b8b6f..35df0a3 100644 --- a/cn/changelog/2025/11-24.mdx +++ b/cn/changelog/2025/11-24.mdx @@ -8,10 +8,10 @@ description: "Airdrop 二期活动与三个 frontier 上线" ### 功能发布 **Airdrop二期活动正式上线:** -* **活动奖励:**共设置 1 million XNY token 奖励 -* **活动内容:**包含三个新的 frontier 的数据提交任务以及其他任务参与(例如社交媒体任务) +* **活动奖励:** 共设置 1 million XNY token 奖励 +* **活动内容:** 包含三个新的 frontier 的数据提交任务以及其他任务参与(例如社交媒体任务) **首页新增三个 frontier:** -* **Advanced Physics Questions frontier:**专业物理从业者提交 AI 无法正确回答的高难度物理问题 -* **Crypto & Stock Information frontier:**为 AI 提供可靠的加密与股票投资决策相关信息 -* **Real-world Photo frontier:**为 AI 提供带有标注元数据的真实拍摄照片 +* **Advanced Physics Questions frontier:** 专业物理从业者提交 AI 无法正确回答的高难度物理问题 +* **Crypto & Stock Information frontier:** 为 AI 提供可靠的加密与股票投资决策相关信息 +* **Real-world Photo frontier:** 为 AI 提供带有标注元数据的真实拍摄照片 diff --git a/en/.DS_Store b/en/.DS_Store deleted file mode 100644 index 54bc4817bb1a7724a3a2b481fc3f78d79462ccff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHM&u<$=6n>M2W{uNilO|AtkgWQG)TSh~MT!uraf={AC{Z1y32kxL_QqLdy<>LQ z`Ozp+&TxV|+_`c>;=+*&S8j+u0j`|jdo$~HckPM*QmCRCYv;Y4ec$}}X5YSeZE_h(r@&2r?Kw2dv$x}whUs&3*1lvyp{`-2lu?7 zCHJbb7qlXUt?36=!79}4ONWPxHy5v#ZY(VxT`e6hy}1DW`dddw1#7na#@l!6JANmS zpQ+K1NIo-kLEk^gKR@YMz2F7qmBGcR#LqkKMXGoin}bwmx}Uw06*i z&CJsRRo(lc>jtX6m94GFjW<&IX5F5QnxXXlRT+7)Cxgug5$0eyc00?#mPCuY;D4pd zkD_%qj35Uv8=FoTIzij59z67&hU>2cRT;;!v*9&mpnE>4s>SVU=yH|iTfb|H%asrN z%IjLOsjL;ORA>5HB1QQJ_mR@q0vWi4a%ELNDIlC&p?B#cTBjX)OkdDf^bLJaKhiJs z8~q{1ge@+ME8>QDN8A!0h-LAyXo_v&iBMNC(tiP7)A#*cM9@y;FuS!d@MX}3J=bL^ zCyU@_0l5@Wlyj(WVUu>K0^DyK&KFP{_C8#(okfVte~&mL4mX4g<6dXiy@pJ8&Y9Rk zQU|{t9E8uC4|2}&mEiQ=SRX^iHQ_f6N!Bc z4725wChO&KS#xmFJ6Ln5 zbBbXtBVJPp*CSk<_&noSOLa_wj7_*)9mnH_kK@$=4$2nz87JtKL>_C25~NfAGr%0L Ul`GHh@tWEH|C7_`f4Tqv3pZ&NMgRZ+ diff --git a/en/changelog/.DS_Store b/en/changelog/.DS_Store deleted file mode 100644 index 25032dd11d0d5e33eabc675792f9412253b05209..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKPfrs;6rTrGwji=VtB5ga?8OA4ErJO#hPq(1F$O{j76Hp{JCqH}OtZVC0wL*H zPksPDfZxExi$^bBy%|4(UOnlXKMMkKHAeO&Gru?U{_MWrW@dH>Az(FYc|uG=h=EOD zq8qzEh_H)xLOS$J0ue-xqQ|R_#~mDtgt5d7#0>n~42ZRxAY&wlZQ|Jawa|9+rxaPl zfuGX~8hV|-a~hr-gt^>j=;%zGJKtq=89l~oX@j>)p&d2@%l4PWXn}LjiFDgpbZM(% zrlvUyZI@AB2DmkfE-O!6R^u&;H(4!^u_a|Nl18#(4(;vbC-S42@yY!DXl8G6EQk8- zJNx@dBb~iT#>vx*qrx)$`Rfql%K1 zI!|lQ52qG(8t9WcoRH}r`jj%6Z+3k>pketpeW_yh1y!GW-W(6y(B*7tB|x5wA>Asn zb&gNmMviA2!W1l0KR`SYQ(m%t-)41c?W}sXL%msM@i63DWw*+idhYUk=mHb2!w8JSJ(z+=P=setg$;1QR|z_zk91HSkTy3D7Oym{6KM0e$g+jC3bZP#E_y12F?f8R%3) zQ=I<~a1Ebw|34ZOk75R52L3AsATd*#v9Kh4ww@?XoV6KjYuJPczqUddf}K8&r6P{v eA#766mJteKL1SAX&Y;9U0+NQfiy8Q<4EzFoe9x%> From 7ea17d6e9bead9ae82a5a53be59574b82b1d5fb1 Mon Sep 17 00:00:00 2001 From: Joel Date: Sun, 7 Dec 2025 12:08:49 +0800 Subject: [PATCH 04/26] Add changelog entries for Oct-Nov 2025 (10-14 to 12-04) --- cn/changelog/2025/10-14.mdx | 19 +++++++++++++++++++ cn/changelog/2025/10-15.mdx | 13 +++++++++++++ cn/changelog/2025/10-20.mdx | 14 ++++++++++++++ cn/changelog/2025/10-23.mdx | 13 +++++++++++++ cn/changelog/2025/10-24.mdx | 13 +++++++++++++ cn/changelog/2025/10-28.mdx | 13 +++++++++++++ cn/changelog/2025/11-03.mdx | 13 +++++++++++++ cn/changelog/2025/11-05.mdx | 20 ++++++++++++++++++++ cn/changelog/2025/11-11.mdx | 13 +++++++++++++ cn/changelog/2025/12-04.mdx | 15 +++++++++++++++ docs.json | 24 ++++++++++++++++++++++-- en/changelog/2025/10-14.mdx | 19 +++++++++++++++++++ en/changelog/2025/10-15.mdx | 13 +++++++++++++ en/changelog/2025/10-20.mdx | 14 ++++++++++++++ en/changelog/2025/10-23.mdx | 13 +++++++++++++ en/changelog/2025/10-24.mdx | 13 +++++++++++++ en/changelog/2025/10-28.mdx | 13 +++++++++++++ en/changelog/2025/11-03.mdx | 13 +++++++++++++ en/changelog/2025/11-05.mdx | 20 ++++++++++++++++++++ en/changelog/2025/11-11.mdx | 13 +++++++++++++ en/changelog/2025/12-04.mdx | 15 +++++++++++++++ 21 files changed, 314 insertions(+), 2 deletions(-) create mode 100644 cn/changelog/2025/10-14.mdx create mode 100644 cn/changelog/2025/10-15.mdx create mode 100644 cn/changelog/2025/10-20.mdx create mode 100644 cn/changelog/2025/10-23.mdx create mode 100644 cn/changelog/2025/10-24.mdx create mode 100644 cn/changelog/2025/10-28.mdx create mode 100644 cn/changelog/2025/11-03.mdx create mode 100644 cn/changelog/2025/11-05.mdx create mode 100644 cn/changelog/2025/11-11.mdx create mode 100644 cn/changelog/2025/12-04.mdx create mode 100644 en/changelog/2025/10-14.mdx create mode 100644 en/changelog/2025/10-15.mdx create mode 100644 en/changelog/2025/10-20.mdx create mode 100644 en/changelog/2025/10-23.mdx create mode 100644 en/changelog/2025/10-24.mdx create mode 100644 en/changelog/2025/10-28.mdx create mode 100644 en/changelog/2025/11-03.mdx create mode 100644 en/changelog/2025/11-05.mdx create mode 100644 en/changelog/2025/11-11.mdx create mode 100644 en/changelog/2025/12-04.mdx diff --git a/cn/changelog/2025/10-14.mdx b/cn/changelog/2025/10-14.mdx new file mode 100644 index 0000000..de59282 --- /dev/null +++ b/cn/changelog/2025/10-14.mdx @@ -0,0 +1,19 @@ +--- +title: "2025-10-14" +description: "Airdrop 分页功能修复与菜单红点提醒" +--- + +## Airdrop 分页功能修复与菜单红点提醒 + +### 问题修复 + +**Airdrop 分页功能无效问题处理:** + +* **修复内容:** 解决 Airdrop 排名分页功能无效及 Airdrop 提交记录分页功能无效的问题 + +### 功能调整 + +**Airdrop 菜单红点提醒功能添加:** + +* **调整内容:** 在系统 Airdrop 菜单项增加红点显示,使新活动更加醒目 + diff --git a/cn/changelog/2025/10-15.mdx b/cn/changelog/2025/10-15.mdx new file mode 100644 index 0000000..2e0f329 --- /dev/null +++ b/cn/changelog/2025/10-15.mdx @@ -0,0 +1,13 @@ +--- +title: "2025-10-15" +description: "黑名单功能" +--- + +## 黑名单功能 + +### 功能发布 + +**恶意用户黑名单管控功能上线:** + +* **功能:** 新增黑名单规则功能,支持对恶意用户进行黑名单标记与管控 + diff --git a/cn/changelog/2025/10-20.mdx b/cn/changelog/2025/10-20.mdx new file mode 100644 index 0000000..6b5e1fa --- /dev/null +++ b/cn/changelog/2025/10-20.mdx @@ -0,0 +1,14 @@ +--- +title: "2025-10-20" +description: "Crypto Frontier 模块下线调整" +--- + +## Crypto Frontier 模块下线调整 + +### 问题修复与功能下线 + +**Frontier Crypto 模块移除处理:** + +* **下线内容:** 正式移除 Frontier 模块中的 Crypto 模块 +* **下线原因:** 因业务调整与产品规划,Frontier Crypto 模块已无法满足现有需求,且与产品未来设计理念方向存在偏差,故决定移除此模块 + diff --git a/cn/changelog/2025/10-23.mdx b/cn/changelog/2025/10-23.mdx new file mode 100644 index 0000000..fd220b0 --- /dev/null +++ b/cn/changelog/2025/10-23.mdx @@ -0,0 +1,13 @@ +--- +title: "2025-10-23" +description: "防刷机制新增" +--- + +## 防刷机制新增 + +### 防刷调整 + +**Task 防刷策略上线:** + +* **优化内容:** 新增防刷安全策略,对所有 task 设置每日提交上限,单个 task 每日最高限制 50 次提交 + diff --git a/cn/changelog/2025/10-24.mdx b/cn/changelog/2025/10-24.mdx new file mode 100644 index 0000000..2cb7537 --- /dev/null +++ b/cn/changelog/2025/10-24.mdx @@ -0,0 +1,13 @@ +--- +title: "2025-10-24" +description: "robotics Frontier 模块移除" +--- + +## robotics Frontier 模块移除 + +### 功能下线 + +**Robotics Frontier 入口移除处理:** + +* **下线内容:** 移除 Frontier 模块中 Robotics Frontier 的入口 + diff --git a/cn/changelog/2025/10-28.mdx b/cn/changelog/2025/10-28.mdx new file mode 100644 index 0000000..4c49ff7 --- /dev/null +++ b/cn/changelog/2025/10-28.mdx @@ -0,0 +1,13 @@ +--- +title: "2025-10-28" +description: "Airdrop 活动文案优化" +--- + +## Airdrop 活动文案优化 + +### 文案优化 + +**Airdrop 活动提示文案更新:** + +* **优化内容:** 更新 Airdrop 活动提示文案,补充奖励到账时间规则及奖励领取方式相关说明 + diff --git a/cn/changelog/2025/11-03.mdx b/cn/changelog/2025/11-03.mdx new file mode 100644 index 0000000..1459356 --- /dev/null +++ b/cn/changelog/2025/11-03.mdx @@ -0,0 +1,13 @@ +--- +title: "2025-11-03" +description: "功能下线" +--- + +## 功能下线 + +### 功能下线 + +**部分QUEST 任务下线处理:** + +* **下线内容:** 下线与 submission(提交)、validation(验证)、bounty hunting(赏金狩猎)相关的全部 QUEST 任务 + diff --git a/cn/changelog/2025/11-05.mdx b/cn/changelog/2025/11-05.mdx new file mode 100644 index 0000000..5ba00d2 --- /dev/null +++ b/cn/changelog/2025/11-05.mdx @@ -0,0 +1,20 @@ +--- +title: "2025-11-05" +description: "DID 账户升级功能与 Gas 费预估修复" +--- + +## DID 账户升级功能与 Gas 费预估修复 + +### 功能发布 + +**账户升级:DID V1 版本正式上线:** + +* **功能:** 用户可将现有账户升级为标准 DID(去中心化身份标识)账户 +* **作用:** 在 Codatta 平台中,DID 作为 "链上身份 + 数据血缘" 的统一主键,可关联用户任务行为、数据贡献、奖励发放等全链路信息,实现可追溯、可对应 + +### 问题修复 + +**Gas 费预估精准度修复:** + +* **修复内容:** 修复了领取资产时,Gas 费预估误差过大的问题 + diff --git a/cn/changelog/2025/11-11.mdx b/cn/changelog/2025/11-11.mdx new file mode 100644 index 0000000..0641a3b --- /dev/null +++ b/cn/changelog/2025/11-11.mdx @@ -0,0 +1,13 @@ +--- +title: "2025-11-11" +description: "排行榜无效入口修复" +--- + +## 排行榜无效入口修复 + +### 问题修复 + +**Leaderboard 模块无效入口移除:** + +* **修复内容:** 移除 Leaderboard 模块中跳转至 Crypto Frontier 模块的 "Contribute More" 入口 + diff --git a/cn/changelog/2025/12-04.mdx b/cn/changelog/2025/12-04.mdx new file mode 100644 index 0000000..89ab176 --- /dev/null +++ b/cn/changelog/2025/12-04.mdx @@ -0,0 +1,15 @@ +--- +title: "2025-12-04" +description: "锁仓领奖功能上线" +--- + +## 锁仓领奖功能上线 + +### 功能发布 + +**锁仓领奖规则上线:** + +* **适用范围:** 支持为 Airdrop / Frontier 等活动配置「锁仓 3 个月(T+90)」的奖励规则 +* **流程说明:** 活动奖励发放至用户在 Codatta 平台的资产余额后;用户在资产页点击「Lock now」将奖励锁入合约,锁仓到期后在 Lock-up detail页面一键领取到钱包 +* **功能价值:** 平衡高额奖励活动的激励与抛压,引导用户长期持有和持续参与 + diff --git a/docs.json b/docs.json index 8f098f0..2614ba4 100644 --- a/docs.json +++ b/docs.json @@ -81,7 +81,17 @@ { "group": "2025", "pages": [ - "en/changelog/2025/11-24" + "en/changelog/2025/12-04", + "en/changelog/2025/11-24", + "en/changelog/2025/11-11", + "en/changelog/2025/11-05", + "en/changelog/2025/11-03", + "en/changelog/2025/10-28", + "en/changelog/2025/10-24", + "en/changelog/2025/10-23", + "en/changelog/2025/10-20", + "en/changelog/2025/10-15", + "en/changelog/2025/10-14" ] } ] @@ -151,7 +161,17 @@ { "group": "2025", "pages": [ - "cn/changelog/2025/11-24" + "cn/changelog/2025/12-04", + "cn/changelog/2025/11-24", + "cn/changelog/2025/11-11", + "cn/changelog/2025/11-05", + "cn/changelog/2025/11-03", + "cn/changelog/2025/10-28", + "cn/changelog/2025/10-24", + "cn/changelog/2025/10-23", + "cn/changelog/2025/10-20", + "cn/changelog/2025/10-15", + "cn/changelog/2025/10-14" ] } ] diff --git a/en/changelog/2025/10-14.mdx b/en/changelog/2025/10-14.mdx new file mode 100644 index 0000000..9663e50 --- /dev/null +++ b/en/changelog/2025/10-14.mdx @@ -0,0 +1,19 @@ +--- +title: "2025-10-14" +description: "Airdrop Pagination Fix & Menu Notification Badge" +--- + +## Airdrop Pagination Fix & Menu Notification Badge + +### Bug Fixes + +**Airdrop pagination malfunction resolved:** + +* **Fix:** Addressed issues causing Airdrop ranking pagination and submission record pagination to fail. + +### Feature Adjustments + +**Airdrop menu badge added:** + +* **Update:** Added a red notification badge to the Airdrop menu item to highlight new activity. + diff --git a/en/changelog/2025/10-15.mdx b/en/changelog/2025/10-15.mdx new file mode 100644 index 0000000..c6f7c6b --- /dev/null +++ b/en/changelog/2025/10-15.mdx @@ -0,0 +1,13 @@ +--- +title: "2025-10-15" +description: "Blacklist Feature" +--- + +## Blacklist Feature + +### Feature Release + +**Malicious-user blacklist system launched:** + +* **Feature:** Added a blacklist rule system supporting tagging and restricting malicious users. + diff --git a/en/changelog/2025/10-20.mdx b/en/changelog/2025/10-20.mdx new file mode 100644 index 0000000..499ae51 --- /dev/null +++ b/en/changelog/2025/10-20.mdx @@ -0,0 +1,14 @@ +--- +title: "2025-10-20" +description: "Crypto Frontier Deprecation" +--- + +## Crypto Frontier Deprecation + +### Bug Fixes & Feature Deprecation + +**Crypto Frontier module removed:** + +* **Deprecated Content:** Official removal of the Crypto Frontier module. +* **Reason:** Following business and product direction adjustments, the module no longer fits the updated product vision and requirements. + diff --git a/en/changelog/2025/10-23.mdx b/en/changelog/2025/10-23.mdx new file mode 100644 index 0000000..2677a34 --- /dev/null +++ b/en/changelog/2025/10-23.mdx @@ -0,0 +1,13 @@ +--- +title: "2025-10-23" +description: "Anti-Abuse Enhancements" +--- + +## Anti-Abuse Enhancements + +### Anti-Abuse Update + +**New task anti-bot strategy rolled out:** + +* **Optimization:** Introduced new anti-abuse rules limiting daily submissions, with a maximum of 50 submissions per task per day. + diff --git a/en/changelog/2025/10-24.mdx b/en/changelog/2025/10-24.mdx new file mode 100644 index 0000000..a143740 --- /dev/null +++ b/en/changelog/2025/10-24.mdx @@ -0,0 +1,13 @@ +--- +title: "2025-10-24" +description: "Removal of Robotics Frontier" +--- + +## Removal of Robotics Frontier + +### Feature Deprecation + +**Robotics Frontier entry removed:** + +* **Deprecated Content:** Removed the Robotics Frontier entry from the Frontier module. + diff --git a/en/changelog/2025/10-28.mdx b/en/changelog/2025/10-28.mdx new file mode 100644 index 0000000..05829c6 --- /dev/null +++ b/en/changelog/2025/10-28.mdx @@ -0,0 +1,13 @@ +--- +title: "2025-10-28" +description: "Airdrop Message Copy Update" +--- + +## Airdrop Message Copy Update + +### Copy Optimization + +**Airdrop prompt copy revised:** + +* **Update:** Improved the Airdrop activity prompts with clearer information regarding reward distribution timing and reward claiming instructions. + diff --git a/en/changelog/2025/11-03.mdx b/en/changelog/2025/11-03.mdx new file mode 100644 index 0000000..d560193 --- /dev/null +++ b/en/changelog/2025/11-03.mdx @@ -0,0 +1,13 @@ +--- +title: "2025-11-03" +description: "Feature Deprecation" +--- + +## Feature Deprecation + +### Feature Deprecation + +**QUEST-related tasks removed:** + +* **Deprecated Content:** All QUEST tasks related to submission, validation, and bounty hunting have been taken offline. + diff --git a/en/changelog/2025/11-05.mdx b/en/changelog/2025/11-05.mdx new file mode 100644 index 0000000..949f05d --- /dev/null +++ b/en/changelog/2025/11-05.mdx @@ -0,0 +1,20 @@ +--- +title: "2025-11-05" +description: "DID Account Upgrade Release & Gas Fee Estimation Fix" +--- + +## DID Account Upgrade Release & Gas Fee Estimation Fix + +### Feature Release + +**DID Account Upgrade: DID V1 officially launched:** + +* **Feature:** Users can now upgrade their existing accounts to a standard DID (Decentralized Identifier) account. +* **Purpose:** The DID serves as the unified on-chain identity and data-lineage key on Codatta, linking a user's task activity, data contributions, and reward distribution across the entire lifecycle with traceability and consistency. + +### Bug Fixes + +**Improved accuracy of gas fee estimation:** + +* **Fix:** Resolved significant inaccuracies in gas fee estimation during asset claiming. + diff --git a/en/changelog/2025/11-11.mdx b/en/changelog/2025/11-11.mdx new file mode 100644 index 0000000..ada53cb --- /dev/null +++ b/en/changelog/2025/11-11.mdx @@ -0,0 +1,13 @@ +--- +title: "2025-11-11" +description: "Leaderboard Invalid Entry Fix" +--- + +## Leaderboard Invalid Entry Fix + +### Bug Fixes + +**Removed invalid entry in the Leaderboard module:** + +* **Fix:** Removed the "Contribute More" button that incorrectly redirected users to the Crypto Frontier module. + diff --git a/en/changelog/2025/12-04.mdx b/en/changelog/2025/12-04.mdx new file mode 100644 index 0000000..70a640a --- /dev/null +++ b/en/changelog/2025/12-04.mdx @@ -0,0 +1,15 @@ +--- +title: "2025-12-04" +description: "Lock-up Rewards for Campaign Payouts" +--- + +## Lock-up Rewards for Campaign Payouts + +### Feature Release + +**Lock-up rewards for campaign payouts are now live:** + +* **Scope:** Campaign owners can enable a 3-month (T+90) lock-up rule for rewards from Airdrops, Frontiers and other campaigns. +* **Flow:** Rewards first land in the user's on-platform balance. From the Assets page, users click Lock now to send them into the lock-up contract; once the 3-month period ends, unlocked rewards appear under Lock-up detail and can be claimed to the wallet in one click. +* **Value:** Helps high-reward campaigns reduce instant sell pressure and better reward users who stay in the ecosystem. + From e263dbbc7a841b6fc4d71433c57f4eaa4edffafa Mon Sep 17 00:00:00 2001 From: Yi Zhang Date: Thu, 11 Dec 2025 22:21:12 +0800 Subject: [PATCH 05/26] docs: add data lineage product page and navigation --- docs.json | 6 +++ en/products/data-linage.mdx | 85 +++++++++++++++++++++++++++++++++++++ en/products/overview.mdx | 0 3 files changed, 91 insertions(+) create mode 100644 en/products/data-linage.mdx delete mode 100644 en/products/overview.mdx diff --git a/docs.json b/docs.json index bf793d3..2e5d913 100644 --- a/docs.json +++ b/docs.json @@ -58,6 +58,12 @@ "en/business/governance-treasury" ] }, + { + "group": "Product", + "pages": [ + "en/products/data-linage" + ] + }, { "group": "Ecosystem Integration", "pages": [ diff --git a/en/products/data-linage.mdx b/en/products/data-linage.mdx new file mode 100644 index 0000000..f817daa --- /dev/null +++ b/en/products/data-linage.mdx @@ -0,0 +1,85 @@ +--- +title: 'Data Lineage' +description: 'Trace the lifecycle of data: Assetification, Assembling, Adoption, and Payouts.' +icon: 'diagram-project' +--- + +Codatta provides a transparent, immutable visualization of data—from its genesis as a verified asset to its inclusion in larger datasets and final economic utilization. + +The **Data Lineage** interface visualizes this lifecycle across four distinct stages. + +## Lineage Visualization + +The following diagram illustrates the flow of data through the four codified stages of the Codatta protocol. + +```mermaid +graph TB + %% Data Lineage Flow + + subgraph Stage1 [Stage 1: Assetification] + S1(Submit) --> V1(Validate) + V1 --> ANCHOR{{⬢ Anchor On-Chain}} + end + + subgraph Stage2 [Stage 2: Data Assembling] + ANCHOR --> M1{◆ Merge / Curate} + ExtAsset(Other Assets) --> M1 + M1 --> DS(Dataset Version) + end + + subgraph Stage3 [Stage 3: Publication & Adoption] + DS --> PUB[■ Publish to GitHub] + DS --> ADOPT[■ Adopted by Model X] + end + + subgraph Stage4 [Stage 4: Payouts] + ADOPT -.-> PAY(● $ Payout Event) + PAY -..-> ANCHOR + end +``` + +## Lifecycle Stages + +### 1. Assetification + +The foundational stage where raw contributions are transformed into trusted, immutable assets. This process involves three critical steps tracked by the lineage graph: + +- **Submission:** Contributors submit raw samples (e.g., text, images) and corresponding metadata. +- **Validation:** The network validators verify the quality and accuracy of the submission. +- **Anchoring:** Once validated, the data is immutably recorded (anchored) on the blockchain. This generates a unique Asset ID and establishes the initial ownership rights. + +For the underlying mechanics, see: + +- **[Contribution Fingerprint (CF)](/core-systems/contribution-fingerprint)** – how each atomic contribution becomes a signed, anchored record. + +### 2. Data Assembling + +In this stage, individual anchored assets are curated and combined to form comprehensive datasets. + +- **Composition:** The lineage view visualizes how multiple atomic assets (from Stage 1) flow into a larger "Assembly." +- **Versioning:** Assembling allows for different versions of a dataset (e.g., "Training Set v1.0") to be created from a pool of assets without altering the underlying provenance of the original contributions. + +For assembly rules, manifests, and versioning semantics, see **[Data Assembly](/core-concepts/data-assembly)**. + +### 3. Publication & Adoption + +Once assembled, datasets are released for utility. This stage tracks the downstream reach of the data. + +- **Publication:** Visualizes where the dataset has been pushed (e.g., HuggingFace, GitHub, decentralized storage). +- **Adoption:** Tracks commercial or research usage, such as a specific AI model integrating the dataset for training. This node represents the "proof of utility." + +For access control and usage metering, see: + +- **[Access Control & Metering](/core-concepts/access-control-metering)** +- **[Storage, Compute & Serving](/core-concepts/storage-compute-serving)** + +### 4. Payouts + +The final stage closes the economic loop. When an adoption event generates revenue (e.g., a licensing fee), it is visualized as a **Payout Event**. + +- **Value Flow:** A connection is drawn from the Payout node back to the original **Anchored Assets**. +- **Distribution to Backers:** Funds are distributed to the *current* ownership holders at the time of the payout snapshot. + - **Initial Owners:** Originally, ownership belongs to the contributors (submitters), validators, and initial stakers. + - **Backers:** Because fractional ownership is tradable, the current holder may differ from the original creator. The lineage view identifies these current owners as **Backers**—investors or entities who have acquired ownership rights on the open market. The system ensures rewards reach the wallet currently holding the asset fraction. + +For payout math, reserves, and replay guarantees, see **[Royalty Engine](/core-concepts/royalty-engine)**. diff --git a/en/products/overview.mdx b/en/products/overview.mdx deleted file mode 100644 index e69de29..0000000 From 75e6cec53befe14e45092b36a6a9d7b0f28e1e95 Mon Sep 17 00:00:00 2001 From: Yi Zhang Date: Thu, 11 Dec 2025 22:31:55 +0800 Subject: [PATCH 06/26] i18n: add CN/KO data lineage product pages and update Products group --- cn/products/data-linage.mdx | 90 +++++++++++++++++++++++++++++++++++++ docs.json | 14 +++++- ko/products/data-linage.mdx | 86 +++++++++++++++++++++++++++++++++++ 3 files changed, 189 insertions(+), 1 deletion(-) create mode 100644 cn/products/data-linage.mdx create mode 100644 ko/products/data-linage.mdx diff --git a/cn/products/data-linage.mdx b/cn/products/data-linage.mdx new file mode 100644 index 0000000..7c7235e --- /dev/null +++ b/cn/products/data-linage.mdx @@ -0,0 +1,90 @@ +--- +title: "数据谱系 (Data Lineage)" +description: "在 Codatta 中,从资产化到组装、采用和分润,完整跟踪数据的生命周期。" +icon: "diagram-project" +--- + +Codatta 提供一套透明、不可篡改的方式,来追踪数据从**原始贡献**到**链上资产**、再到**数据集组装**和**经济分配**的全过程。 + +**数据谱系 (Data Lineage)** 页面,把这一流程拆解为四个阶段,方便贡献者、验证者、买家和治理参与者理解和审计。 + +## 谱系可视化 + +下图(使用英文节点)展示了 Codatta 协议中数据生命周期的四个阶段。 + +```mermaid +graph TB + %% Data Lineage Flow + + subgraph Stage1 [Stage 1: Assetification] + S1(Submit) --> V1(Validate) + V1 --> ANCHOR{{⬢ Anchor On-Chain}} + end + + subgraph Stage2 [Stage 2: Data Assembling] + ANCHOR --> M1{◆ Merge / Curate} + ExtAsset(Other Assets) --> M1 + M1 --> DS(Dataset Version) + end + + subgraph Stage3 [Stage 3: Publication & Adoption] + DS --> PUB[■ Publish to GitHub] + DS --> ADOPT[■ Adopted by Model X] + end + + subgraph Stage4 [Stage 4: Payouts] + ADOPT -.-> PAY(● $ Payout Event) + PAY -..-> ANCHOR + end +``` + +## 生命周期阶段 + +### 1. 资产化 (Assetification) + +原始贡献在这一阶段被转化为可信、不可篡改的链上资产: + +- **提交 (Submission):** 贡献者提交样本、标签等原子贡献,并生成对应的贡献指纹 (CF)。 +- **验证 (Validation):** 网络中的验证者审核质量、合规性与正确性。 +- **锚定 (Anchoring):** 通过锚定到区块链生成唯一资产 ID,并确立初始所有权份额。 + +相关文档: + +- **[贡献指纹 (CF)](/cn/core-systems/contribution-fingerprint)** + +### 2. 数据组装 (Data Assembling) + +在资产化基础上,已经锚定的资产会被策展、组合成可用的数据集版本: + +- **组合 (Composition):** 多个原子资产与资产包被合并进一个数据集装配流程。 +- **版本化 (Versioning):** 对输入或规则的每次修改都会生成新的数据集版本,方便回滚与对比。 + +相关文档: + +- **[数据组装 (Data Assembly)](/cn/core-systems/data-assembly)** + +### 3. 发布与采纳 (Publication & Adoption) + +完成组装与锚定后,数据集被发布并进入实际使用场景: + +- **发布 (Publication):** 数据集被发布到内部目录、HuggingFace、GitHub 或其他平台。 +- **采纳 (Adoption):** 模型和应用将特定版本的数据集接入训练、评估或推理,形成“有效使用”记录。 + +相关文档: + +- **[访问控制与计量](/cn/core-systems/access-control-metering)** +- **[存储、计算与服务](/cn/core-systems/storage-compute-serving)** + +### 4. 分润 (Payouts) + +当采纳行为产生收入(许可费、API 费用等)时,资金会沿着所有权图回流到权利方: + +- **价值流动 (Value Flow):** 每个付费事件都被绑定到具体的数据集版本与使用上下文。 +- **权利分配 (Distribution):** 协议按照事件时间点的所有权快照,把净收入分配给贡献者、验证者、支持者和协议金库。 +- **可转让所有权 (Backers):** 若所有权被二级交易给新的持有者,系统会自动把未来分润支付给当前持有人。 + +相关文档: + +- **[版税引擎 (Royalty Engine)](/cn/core-systems/royalty-engine)** + + diff --git a/docs.json b/docs.json index 2e5d913..a84f039 100644 --- a/docs.json +++ b/docs.json @@ -59,7 +59,7 @@ ] }, { - "group": "Product", + "group": "Products", "pages": [ "en/products/data-linage" ] @@ -150,6 +150,12 @@ "cn/business/governance-treasury" ] }, + { + "group": "产品 (Products)", + "pages": [ + "cn/products/data-linage" + ] + }, { "group": "协议代币 ($XNY)", "pages": [ @@ -230,6 +236,12 @@ "ko/business/governance-treasury" ] }, + { + "group": "프로덕트", + "pages": [ + "ko/products/data-linage" + ] + }, { "group": "프로토콜 토큰 ($XNY)", "pages": [ diff --git a/ko/products/data-linage.mdx b/ko/products/data-linage.mdx new file mode 100644 index 0000000..b85f484 --- /dev/null +++ b/ko/products/data-linage.mdx @@ -0,0 +1,86 @@ +--- +title: "데이터 계보 (Data Lineage)" +description: "자산화 → 조립 → 채택 → 분배까지, Codatta에서 데이터의 전체 라이프사이클을 추적합니다." +icon: "diagram-project" +--- + +Codatta는 원시 기여가 **신뢰할 수 있는 온체인 자산**이 되고, 다시 **데이터셋으로 조립**되어 **수익과 로열티**로 이어지는 전 과정을 투명하게 보여줍니다. + +**데이터 계보 (Data Lineage)** 페이지는 이 흐름을 네 단계로 나누어 기여자, 검증자, 데이터 구매자, 백커가 모두 같은 지도를 공유할 수 있게 합니다. + +## 계보 다이어그램 + +아래 다이어그램(영문 노드 사용)은 Codatta 프로토콜에서 데이터가 거치는 네 가지 단계를 시각화합니다. + +```mermaid +graph TB + %% Data Lineage Flow + + subgraph Stage1 [Stage 1: Assetification] + S1(Submit) --> V1(Validate) + V1 --> ANCHOR{{⬢ Anchor On-Chain}} + end + + subgraph Stage2 [Stage 2: Data Assembling] + ANCHOR --> M1{◆ Merge / Curate} + ExtAsset(Other Assets) --> M1 + M1 --> DS(Dataset Version) + end + + subgraph Stage3 [Stage 3: Publication & Adoption] + DS --> PUB[■ Publish to GitHub] + DS --> ADOPT[■ Adopted by Model X] + end + + subgraph Stage4 [Stage 4: Payouts] + ADOPT -.-> PAY(● $ Payout Event) + PAY -..-> ANCHOR + end +``` + +## 라이프사이클 단계 + +### 1. 자산화 (Assetification) + +원시 기여가 신뢰할 수 있는 온체인 자산으로 변환되는 단계입니다: + +- **제출 (Submission):** 기여자가 샘플·레이블 등 원자 기여를 제출하고, 각 기여에 대해 기여 지문(CF)이 생성됩니다. +- **검증 (Validation):** 검증자들이 품질·정책·정확성을 검사합니다. +- **앵커링 (Anchoring):** 승인된 기여는 체인에 앵커되어 고유 자산 ID와 초기 소유권 분수가 정해집니다. + +관련 문서: + +- **[기여 지문 (CF)](/ko/core-systems/contribution-fingerprint)** + +### 2. 데이터 조립 (Data Assembling) + +자산화가 끝난 후, 앵커된 자산이 모여 실제로 사용 가능한 데이터셋으로 조립됩니다: + +- **구성 (Composition):** 여러 원자 자산과 자산 번들이 하나의 조립 파이프라인으로 합쳐집니다. +- **버전 관리 (Versioning):** 입력이나 규칙이 바뀔 때마다 새로운 데이터셋 버전이 생성되어, 과거 상태를 보존하고 diff를 쉽게 비교할 수 있습니다. + +자세한 조립 규칙과 매니페스트, 버전 정책은 **[데이터 조립 (Data Assembly)](/ko/core-systems/data-assembly)** 문서를 참고하세요. + +### 3. 게시 및 채택 (Publication & Adoption) + +조립과 앵커링이 끝난 데이터셋은 실제 사용을 위해 게시됩니다: + +- **게시 (Publication):** 내부 카탈로그, HuggingFace, GitHub, 기타 플랫폼에 게시됩니다. +- **채택 (Adoption):** 특정 AI 모델이나 애플리케이션이 해당 데이터셋 버전을 학습·평가·추론에 사용하며, 이는 “유틸리티 증거”로 기록됩니다. + +접근 제어와 사용 계량에 대한 자세한 내용은 다음을 참고하세요: + +- **[액세스 제어 & 계량](/ko/core-systems/access-control-metering)** +- **[스토리지·컴퓨트·서빙](/ko/core-systems/storage-compute-serving)** + +### 4. 분배 (Payouts) + +채택 이벤트가 매출(라이선스·API 요금 등)을 발생시키면, 수익은 소유권 그래프를 따라 권리자에게 돌아갑니다: + +- **가치 흐름 (Value Flow):** 각 유료 이벤트는 특정 데이터셋 버전과 사용 컨텍스트에 고정됩니다. +- **분배 (Distribution):** 이벤트 시점의 소유권 스냅샷을 기준으로, 기여자·검증자·백커·프로토콜 금고 등에 순수익이 분배됩니다. +- **백커 (Backers):** 소유권 지분이 2차 거래된 경우에도, 시스템은 항상 그 시점의 **현재 소유자**에게 분배하도록 보장합니다. + +분배 수학, 준비금, 재생 가능성에 대해서는 **[로열티 엔진 (Royalty Engine)](/ko/core-systems/royalty-engine)** 문서를 참고하세요. + + From c8330a66c1f587d33e777a510e8f4acb847afd8f Mon Sep 17 00:00:00 2001 From: Yi Zhang Date: Fri, 12 Dec 2025 15:28:18 +0800 Subject: [PATCH 07/26] docs: update pre-scan checks to include heuristic checks and AI agent semantic checks - Update pre-scan descriptions across EN/CN/KO Contribution Fingerprint pages - Expand Screening & Validation sections in Data Lineage product pages - Clarify that pre-scan includes heuristic-based checks (format/policy/dedup) plus AI agent semantic checks --- cn/core-systems/contribution-fingerprint.mdx | 4 ++-- cn/products/data-linage.mdx | 6 +++--- en/core-systems/contribution-fingerprint.mdx | 4 ++-- en/products/data-linage.mdx | 11 ++++++----- ko/core-systems/contribution-fingerprint.mdx | 4 ++-- ko/products/data-linage.mdx | 6 +++--- 6 files changed, 18 insertions(+), 17 deletions(-) diff --git a/cn/core-systems/contribution-fingerprint.mdx b/cn/core-systems/contribution-fingerprint.mdx index 5e96df4..d520a0a 100644 --- a/cn/core-systems/contribution-fingerprint.mdx +++ b/cn/core-systems/contribution-fingerprint.mdx @@ -27,7 +27,7 @@ config: --- flowchart TB subm[Submission of Data] - subm --> prescan[Pre-scan: Format/Policy Gate and De-dup] + subm --> prescan[Pre-scan: Heuristic checks (format/policy/dedup) + AI agent semantic checks] subm --> store[Store Encrypted Payload at Hybrid Storage] prescan --> |Auto-accept| build[Build CF Commit: canonicalize hash attach Evidence and Signals atomic_kind parent_cf] prescan --> |Needs Human Review| review[Human Review] @@ -49,7 +49,7 @@ flowchart TB **步骤说明** - **提交:** 贡献者发送内容。我们保存**加密副本**与稳定引用(内容 ID 或 URL)。 -- **预扫描:** 轻量检查格式、隐私脱敏与去重。部分项目自动通过;其余可能需要人工快速审核。 +- **预扫描:** 基于启发式的格式、策略合规与去重检查,以及 AI 代理的语义检查。部分项目自动通过;其余可能需要人工快速审核。 - **创建记录:** 标准化细节,标注是否为**样本**、**标签**或**验证**,并附上**证据与信号**。 - **绑定身份:** 贡献者用钱包或 DID **签名**记录。 - **链上锚定:** 指纹以不可变方式锚定到区块链(单条或批量)。 diff --git a/cn/products/data-linage.mdx b/cn/products/data-linage.mdx index 7c7235e..ee1397b 100644 --- a/cn/products/data-linage.mdx +++ b/cn/products/data-linage.mdx @@ -17,7 +17,7 @@ graph TB %% Data Lineage Flow subgraph Stage1 [Stage 1: Assetification] - S1(Submit) --> V1(Validate) + S1(Submit Samples or Labels) --> V1(Validate) V1 --> ANCHOR{{⬢ Anchor On-Chain}} end @@ -45,8 +45,8 @@ graph TB 原始贡献在这一阶段被转化为可信、不可篡改的链上资产: - **提交 (Submission):** 贡献者提交样本、标签等原子贡献,并生成对应的贡献指纹 (CF)。 -- **验证 (Validation):** 网络中的验证者审核质量、合规性与正确性。 -- **锚定 (Anchoring):** 通过锚定到区块链生成唯一资产 ID,并确立初始所有权份额。 +- **筛选与验证 (Screening & Validation):** Codatta 运行自动预扫描检查,包括基于启发式的格式、策略合规与去重检查,以及 AI 代理的语义检查。必要时触发人工审核。在此步骤失败的提交会被拒绝,**不会产生 CF**。 +- **CF 创建与锚定 (CF Creation & Anchoring):** 对于每个被接受的原子贡献,系统构建一个 **CF 提交**(规范化内容哈希、附加证据与信号、绑定贡献者身份),然后在所选网络上**将 CF 的指纹锚定到链上**(单条 CF 或批量 Merkle 根)。 相关文档: diff --git a/en/core-systems/contribution-fingerprint.mdx b/en/core-systems/contribution-fingerprint.mdx index e3172a6..8baa1b7 100644 --- a/en/core-systems/contribution-fingerprint.mdx +++ b/en/core-systems/contribution-fingerprint.mdx @@ -31,7 +31,7 @@ config: --- flowchart TB subm[Submission of Data] - subm --> prescan[Pre-scan: Format/Policy Gate and De-dup] + subm --> prescan[Pre-scan: Heuristic checks (format/policy/dedup) + AI agent semantic checks] subm --> store[Store Encrypted Payload at Hybrid Storage] prescan --> |Auto-accept| build[Build CF Commit: canonicalize hash attach Evidence and Signals atomic_kind parent_cf] prescan --> |Needs Human Review| review[Human Review] @@ -55,7 +55,7 @@ flowchart TB **Step explanations** - **Submit** — The contributor sends the content. We save an **encrypted copy** and a stable reference (content ID or URL). -- **Pre‑scan** — Light checks for format, privacy redactions, and duplicates. Some items pass automatically; others may need a quick human review. +- **Pre‑scan** — Heuristic-based checks for format, policy compliance, and deduplication, plus semantic checks with AI agents. Some items pass automatically; others may need a quick human review. - **Create the record** — We standardize the details, mark whether it’s a **sample**, **label**, or **validation**, and attach **evidence & signals** (see below). - **Bind identity** — The contributor approves/signs the record using a wallet or decentralized ID (DID). - **Anchor on chain** — A fingerprint is immutably anchored to a blockchain (individually or in a batch). diff --git a/en/products/data-linage.mdx b/en/products/data-linage.mdx index f817daa..b4f0442 100644 --- a/en/products/data-linage.mdx +++ b/en/products/data-linage.mdx @@ -10,14 +10,15 @@ The **Data Lineage** interface visualizes this lifecycle across four distinct st ## Lineage Visualization -The following diagram illustrates the flow of data through the four codified stages of the Codatta protocol. +The following diagram illustrates the flow of data through the four codified stages of the Codatta protocol. +In **Stage 1**, the system accepts atomic contributions (samples or labels), builds a **Contribution Fingerprint (CF) record** for each accepted contribution, and then anchors the CF’s fingerprint on-chain. ```mermaid graph TB %% Data Lineage Flow subgraph Stage1 [Stage 1: Assetification] - S1(Submit) --> V1(Validate) + S1(Submit Samples or Labels) --> V1(Validate) V1 --> ANCHOR{{⬢ Anchor On-Chain}} end @@ -44,9 +45,9 @@ graph TB The foundational stage where raw contributions are transformed into trusted, immutable assets. This process involves three critical steps tracked by the lineage graph: -- **Submission:** Contributors submit raw samples (e.g., text, images) and corresponding metadata. -- **Validation:** The network validators verify the quality and accuracy of the submission. -- **Anchoring:** Once validated, the data is immutably recorded (anchored) on the blockchain. This generates a unique Asset ID and establishes the initial ownership rights. +- **Submission:** Contributors initiate this stage by providing [samples](https://docs.codatta.io/en/quick-guide/fundamentals#data-basics-for-artificial-intelligence-ai) or [labels](https://docs.codatta.io/en/quick-guide/fundamentals#data-basics-for-artificial-intelligence-ai), along with relevant metadata. +- **Screening & validation:** Codatta runs automatic pre‑scan checks including heuristic-based checks for format, policy compliance, and deduplication, plus semantic checks with AI agents. Where needed, human review is triggered. Submissions that fail at this step are rejected and **never produce a CF**. +- **CF creation & anchoring:** For each accepted atomic contribution, the system builds a **CF commit** (canonicalizing the content hash, attaching evidence & signals, and binding contributor identity), then **anchors the CF’s fingerprint on-chain** (per‑CF or in a batched Merkle root) on the selected network. For the underlying mechanics, see: diff --git a/ko/core-systems/contribution-fingerprint.mdx b/ko/core-systems/contribution-fingerprint.mdx index 7e01617..6c78a77 100644 --- a/ko/core-systems/contribution-fingerprint.mdx +++ b/ko/core-systems/contribution-fingerprint.mdx @@ -28,7 +28,7 @@ config: --- flowchart TB subm[Submission of Data] - subm --> prescan[Pre-scan: Format/Policy Gate and De-dup] + subm --> prescan[Pre-scan: Heuristic checks (format/policy/dedup) + AI agent semantic checks] subm --> store[Store Encrypted Payload at Hybrid Storage] prescan --> |Auto-accept| build[Build CF Commit: canonicalize hash attach Evidence and Signals atomic_kind parent_cf] prescan --> |Needs Human Review| review[Human Review] @@ -50,7 +50,7 @@ flowchart TB **단계 설명** - **제출** — 기여자가 콘텐츠를 보냅니다. **암호화 사본**과 안정적 참조(콘텐츠 ID/URL)를 저장합니다. -- **사전 점검** — 형식/프라이버시 마스킹/중복을 가볍게 확인. 일부는 자동 통과, 일부는 간단한 휴먼 리뷰 필요. +- **사전 점검** — 휴리스틱 기반 형식/정책 준수/중복 제거 검사와 AI 에이전트의 의미론적 검사. 일부는 자동 통과, 일부는 간단한 휴먼 리뷰 필요. - **기록 생성** — 세부를 표준화하고 **샘플/레이블/검증** 여부를 표시하며 **증거 & 신호**를 첨부. - **아이덴티티 바인딩** — 지갑/DID로 레코드에 승인/서명. - **온체인 앵커** — 지문을 블록체인에 불변으로 앵커(단건 or 배치). diff --git a/ko/products/data-linage.mdx b/ko/products/data-linage.mdx index b85f484..b418587 100644 --- a/ko/products/data-linage.mdx +++ b/ko/products/data-linage.mdx @@ -17,7 +17,7 @@ graph TB %% Data Lineage Flow subgraph Stage1 [Stage 1: Assetification] - S1(Submit) --> V1(Validate) + S1(Submit Samples or Labels) --> V1(Validate) V1 --> ANCHOR{{⬢ Anchor On-Chain}} end @@ -45,8 +45,8 @@ graph TB 원시 기여가 신뢰할 수 있는 온체인 자산으로 변환되는 단계입니다: - **제출 (Submission):** 기여자가 샘플·레이블 등 원자 기여를 제출하고, 각 기여에 대해 기여 지문(CF)이 생성됩니다. -- **검증 (Validation):** 검증자들이 품질·정책·정확성을 검사합니다. -- **앵커링 (Anchoring):** 승인된 기여는 체인에 앵커되어 고유 자산 ID와 초기 소유권 분수가 정해집니다. +- **스크리닝 및 검증 (Screening & Validation):** Codatta는 휴리스틱 기반 형식/정책 준수/중복 제거 검사와 AI 에이전트의 의미론적 검사를 포함한 자동 사전 스캔을 실행합니다. 필요시 휴먼 리뷰가 트리거됩니다. 이 단계에서 실패한 제출은 거부되며 **CF를 생성하지 않습니다**。 +- **CF 생성 및 앵커링 (CF Creation & Anchoring):** 승인된 각 원자 기여에 대해 시스템은 **CF 커밋**을 구축하고(콘텐츠 해시 정규화, 증거 및 신호 첨부, 기여자 신원 바인딩), 선택된 네트워크에서 **CF의 지문을 온체인에 앵커**합니다(CF당 또는 배치 Merkle 루트). 관련 문서: From cd6d002140d51f4d9021845879df57ed6fb239ca Mon Sep 17 00:00:00 2001 From: Yi Zhang Date: Fri, 12 Dec 2025 15:51:50 +0800 Subject: [PATCH 08/26] docs: switch publication target to HuggingFace and add references --- cn/products/data-linage.mdx | 8 ++++++-- en/products/data-linage.mdx | 8 ++++++-- ko/products/data-linage.mdx | 8 ++++++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/cn/products/data-linage.mdx b/cn/products/data-linage.mdx index ee1397b..b6dda73 100644 --- a/cn/products/data-linage.mdx +++ b/cn/products/data-linage.mdx @@ -28,7 +28,7 @@ graph TB end subgraph Stage3 [Stage 3: Publication & Adoption] - DS --> PUB[■ Publish to GitHub] + DS --> PUB[■ Publish to HuggingFace] DS --> ADOPT[■ Adopted by Model X] end @@ -67,7 +67,7 @@ graph TB 完成组装与锚定后,数据集被发布并进入实际使用场景: -- **发布 (Publication):** 数据集被发布到内部目录、HuggingFace、GitHub 或其他平台。 +- **发布 (Publication):** 数据集被发布到 HuggingFace、去中心化存储或其他平台。 - **采纳 (Adoption):** 模型和应用将特定版本的数据集接入训练、评估或推理,形成“有效使用”记录。 相关文档: @@ -87,4 +87,8 @@ graph TB - **[版税引擎 (Royalty Engine)](/cn/core-systems/royalty-engine)** +## 参考 (References) + +- [Codatta Hugging Face 数据集页面](https://huggingface.co/Codatta/datasets) + diff --git a/en/products/data-linage.mdx b/en/products/data-linage.mdx index b4f0442..5256fd9 100644 --- a/en/products/data-linage.mdx +++ b/en/products/data-linage.mdx @@ -29,7 +29,7 @@ graph TB end subgraph Stage3 [Stage 3: Publication & Adoption] - DS --> PUB[■ Publish to GitHub] + DS --> PUB[■ Publish to HuggingFace] DS --> ADOPT[■ Adopted by Model X] end @@ -66,7 +66,7 @@ For assembly rules, manifests, and versioning semantics, see **[Data Assembly](/ Once assembled, datasets are released for utility. This stage tracks the downstream reach of the data. -- **Publication:** Visualizes where the dataset has been pushed (e.g., HuggingFace, GitHub, decentralized storage). +- **Publication:** Visualizes where the dataset has been pushed (e.g., HuggingFace, decentralized storage). - **Adoption:** Tracks commercial or research usage, such as a specific AI model integrating the dataset for training. This node represents the "proof of utility." For access control and usage metering, see: @@ -84,3 +84,7 @@ The final stage closes the economic loop. When an adoption event generates reven - **Backers:** Because fractional ownership is tradable, the current holder may differ from the original creator. The lineage view identifies these current owners as **Backers**—investors or entities who have acquired ownership rights on the open market. The system ensures rewards reach the wallet currently holding the asset fraction. For payout math, reserves, and replay guarantees, see **[Royalty Engine](/core-concepts/royalty-engine)**. + +## References + +- [Codatta datasets on Hugging Face](https://huggingface.co/Codatta/datasets) diff --git a/ko/products/data-linage.mdx b/ko/products/data-linage.mdx index b418587..d275bbb 100644 --- a/ko/products/data-linage.mdx +++ b/ko/products/data-linage.mdx @@ -28,7 +28,7 @@ graph TB end subgraph Stage3 [Stage 3: Publication & Adoption] - DS --> PUB[■ Publish to GitHub] + DS --> PUB[■ Publish to HuggingFace] DS --> ADOPT[■ Adopted by Model X] end @@ -65,7 +65,7 @@ graph TB 조립과 앵커링이 끝난 데이터셋은 실제 사용을 위해 게시됩니다: -- **게시 (Publication):** 내부 카탈로그, HuggingFace, GitHub, 기타 플랫폼에 게시됩니다. +- **게시 (Publication):** HuggingFace, 분산 스토리지 등으로 게시됩니다. - **채택 (Adoption):** 특정 AI 모델이나 애플리케이션이 해당 데이터셋 버전을 학습·평가·추론에 사용하며, 이는 “유틸리티 증거”로 기록됩니다. 접근 제어와 사용 계량에 대한 자세한 내용은 다음을 참고하세요: @@ -83,4 +83,8 @@ graph TB 분배 수학, 준비금, 재생 가능성에 대해서는 **[로열티 엔진 (Royalty Engine)](/ko/core-systems/royalty-engine)** 문서를 참고하세요. +## 참고 (References) + +- [Hugging Face의 Codatta 데이터셋 페이지](https://huggingface.co/Codatta/datasets) + From dc4349acad3681fd3abd2171ad096a00cb49e3e1 Mon Sep 17 00:00:00 2001 From: Yi Zhang Date: Sat, 13 Dec 2025 11:58:44 +0800 Subject: [PATCH 09/26] fix naming issues (data-linage.mdx -> data-lineage.mdx) --- cn/products/{data-linage.mdx => data-lineage.mdx} | 0 docs.json | 6 +++--- en/products/{data-linage.mdx => data-lineage.mdx} | 0 ko/products/{data-linage.mdx => data-lineage.mdx} | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename cn/products/{data-linage.mdx => data-lineage.mdx} (100%) rename en/products/{data-linage.mdx => data-lineage.mdx} (100%) rename ko/products/{data-linage.mdx => data-lineage.mdx} (100%) diff --git a/cn/products/data-linage.mdx b/cn/products/data-lineage.mdx similarity index 100% rename from cn/products/data-linage.mdx rename to cn/products/data-lineage.mdx diff --git a/docs.json b/docs.json index a84f039..72b5963 100644 --- a/docs.json +++ b/docs.json @@ -61,7 +61,7 @@ { "group": "Products", "pages": [ - "en/products/data-linage" + "en/products/data-lineage" ] }, { @@ -153,7 +153,7 @@ { "group": "产品 (Products)", "pages": [ - "cn/products/data-linage" + "cn/products/data-lineage" ] }, { @@ -239,7 +239,7 @@ { "group": "프로덕트", "pages": [ - "ko/products/data-linage" + "ko/products/data-lineage" ] }, { diff --git a/en/products/data-linage.mdx b/en/products/data-lineage.mdx similarity index 100% rename from en/products/data-linage.mdx rename to en/products/data-lineage.mdx diff --git a/ko/products/data-linage.mdx b/ko/products/data-lineage.mdx similarity index 100% rename from ko/products/data-linage.mdx rename to ko/products/data-lineage.mdx From 94a58fb4eb85d468d897b67baf0627161dd8dd07 Mon Sep 17 00:00:00 2001 From: Joel Date: Tue, 23 Dec 2025 04:49:16 +0800 Subject: [PATCH 10/26] Update changelog: Add filters, reorganize entries, and update content for 2025 --- cn/changelog/2025.mdx | 851 ++++++++++++++++++++++++++++++++++++ cn/changelog/2025/10-14.mdx | 19 - cn/changelog/2025/10-15.mdx | 13 - cn/changelog/2025/10-20.mdx | 14 - cn/changelog/2025/10-23.mdx | 13 - cn/changelog/2025/10-24.mdx | 13 - cn/changelog/2025/10-28.mdx | 13 - cn/changelog/2025/11-03.mdx | 13 - cn/changelog/2025/11-05.mdx | 20 - cn/changelog/2025/11-11.mdx | 13 - cn/changelog/2025/11-24.mdx | 17 - cn/changelog/2025/12-04.mdx | 15 - docs.json | 24 +- en/changelog/2025.mdx | 849 +++++++++++++++++++++++++++++++++++ en/changelog/2025/10-14.mdx | 19 - en/changelog/2025/10-15.mdx | 13 - en/changelog/2025/10-20.mdx | 14 - en/changelog/2025/10-23.mdx | 13 - en/changelog/2025/10-24.mdx | 13 - en/changelog/2025/10-28.mdx | 13 - en/changelog/2025/11-03.mdx | 13 - en/changelog/2025/11-05.mdx | 20 - en/changelog/2025/11-11.mdx | 13 - en/changelog/2025/11-24.mdx | 17 - en/changelog/2025/12-04.mdx | 15 - 25 files changed, 1702 insertions(+), 348 deletions(-) create mode 100644 cn/changelog/2025.mdx delete mode 100644 cn/changelog/2025/10-14.mdx delete mode 100644 cn/changelog/2025/10-15.mdx delete mode 100644 cn/changelog/2025/10-20.mdx delete mode 100644 cn/changelog/2025/10-23.mdx delete mode 100644 cn/changelog/2025/10-24.mdx delete mode 100644 cn/changelog/2025/10-28.mdx delete mode 100644 cn/changelog/2025/11-03.mdx delete mode 100644 cn/changelog/2025/11-05.mdx delete mode 100644 cn/changelog/2025/11-11.mdx delete mode 100644 cn/changelog/2025/11-24.mdx delete mode 100644 cn/changelog/2025/12-04.mdx create mode 100644 en/changelog/2025.mdx delete mode 100644 en/changelog/2025/10-14.mdx delete mode 100644 en/changelog/2025/10-15.mdx delete mode 100644 en/changelog/2025/10-20.mdx delete mode 100644 en/changelog/2025/10-23.mdx delete mode 100644 en/changelog/2025/10-24.mdx delete mode 100644 en/changelog/2025/10-28.mdx delete mode 100644 en/changelog/2025/11-03.mdx delete mode 100644 en/changelog/2025/11-05.mdx delete mode 100644 en/changelog/2025/11-11.mdx delete mode 100644 en/changelog/2025/11-24.mdx delete mode 100644 en/changelog/2025/12-04.mdx diff --git a/cn/changelog/2025.mdx b/cn/changelog/2025.mdx new file mode 100644 index 0000000..f98a6ad --- /dev/null +++ b/cn/changelog/2025.mdx @@ -0,0 +1,851 @@ +--- +title: "变更日志" +description: "此日志记录了 2025 年 Codatta 所有更新、修复和新功能。" +--- + +import { useState, useEffect } from 'react'; + +
+
+ + +
+ + {(() => { + const ShowResult = () => { + const [num, setNum] = useState(0); + useEffect(() => { + if (typeof document === 'undefined') return; + const update = () => { + try { + const items = document.querySelectorAll('.changelog-item'); + let count = 0; + items.forEach(item => { + if (item.style.display !== 'none') count++; + }); + setNum(count); + } catch {} + }; + update(); + const id = setInterval(update, 2000); + return () => clearInterval(id); + }, []); + return ( +
+ + {num} + 条结果 +
+ ); + }; + return ; + })()} +
+ +
+ +## Dec 04, 2025 +--- +**引入奖励锁仓机制,管理生态长期激励** + +
+ +
+ +- **适用范围:** 我们为 Airdrop、Frontier 等高激励场景的任务引入了可选的「锁仓」奖励规则。 +- **核心流程:** + - **触发:** 在支持此规则的活动结束后,奖励将发放至平台资产余额。 + - **锁仓:** 在资产页将奖励转入智能合约锁定。 + - **释放:** 锁仓期满后,一键领取奖励至钱包。 +- **迭代意义:** 此机制是我们激励体系向"精细化管理"演进的关键一步。它针对高激励场景,通过引入流动性调节工具,旨在系统性地平衡短期激励效应与生态长期健康发展。 + +
+ +
+ +## Nov 24, 2025 +--- +**Airdrop二期活动** + +
+ +
+ +- **活动目标:** + - **数据目标:** 系统性收集学术级验证的物理、金融、多模态领域数据集。 + - **生态目标:** 通过定向激励,为三个新前线模块冷启动高质量数据流 +- **活动内容:** + - **Airdrop Season 2:** 代号"Physics Frontier Challenge",总奖池 1M $XNY (含3个月锁仓)。 + - **三个Frontier上线:** 同步上线高难度物理问题、加密资产与股票信息、真实世界图像三个数据收集frontier。 + - **Advanced Physics Questions frontier:** 专业物理专业人士提交AI无法正确回答的高难度物理问题 + - **Crypto & Stock Information frontier:** 给AI提供可靠的crypto和股票投资决策相关的信息 + - **Real-world Photo frontier:** 给AI提供标注元数据的真实拍摄图片 +- **奖励信息:** 形式:任务奖励(90%奖池)与排行榜激励(10%奖池)结合。 +- **活动时间:** 周期:2025/11/24 - 2025/12/08 (UTC)。 + +
+ +
+ +## Nov 05, 2025 +--- +**账户体系升级:DID 正式上线** + +
+ +
+ +- **是什么:** 一项账户升级功能,允许用户在现有平台账户绑定标准 DID(去中心化身份标识)账户。 +- **如何运作:** + - **升级:** 用户可在账户设置中自行升级,将现有账户与链上DID绑定。 + - **关联:** 升级后,该DID将在Codatta平台内作为您的统一主键,自动关联并索引您的所有任务行为、数据贡献、奖励记录等全链路信息。 + - **追溯:** 基于DID,所有历史与未来的链上及链下行为均可被追溯和验证,形成完整的"数据血缘"。 +- **为何重要:** 这是构建可信、透明数据经济基础设施的关键一步。DID为每位用户在生态中的贡献提供了唯一、持久且可验证的"数字身份",是实现贡献精准计量、权属清晰界定和激励公平发放的技术基石。 + +
+ +
+ +## Nov 03, 2025 +--- +**任务系统调整:Crypto Frontier QUEST 模块下线** + +
+ +
+ +- **下线范围:** + - 整个 Crypto Frontier QUEST 模块。 + - 所有相关任务——包括 Submission(提交)、Validation(验证)与 Bounty Hunting(赏金狩猎)——均已关闭。 +- **下线原因:** + - 该模块已在当前产品路线图中完成其预设的生命周期。 + - 此次下线有助于系统结构优化,并为后续功能更新释放资源、重新聚焦。 +- **相关说明:** + - 用户在该模块中的历史贡献记录与已获奖励保持完整,不受影响。 + - 本次调整不涉及其他任何 Frontier 模块的正常运行。 + +
+ +
+ +## Oct 24, 2025 +--- +**Frontier 系统调整:Robotics Frontier 已下线** + +
+ +
+ +- **调整内容:** + - Robotics Frontier 已正式下线。 + - 本次调整仅涉及前端入口,所有历史贡献数据均保持完整且可查询。 +- **调整原因:** + - 该决定是产品持续优化的一部分,旨在将资源与用户注意力集中至当前优先级最高的活跃 Frontier。 + - Robotics Frontier 已完成其预设的探索阶段,下线有助于我们整合资源、聚焦核心任务。 +- **相关说明:** + - 用户在 Robotics Frontier 中的历史贡献与所获奖励已被完整保留,可在其贡献历史记录中随时查看。 + - 此次调整不影响平台其他 Frontier 模块及任何系统功能的正常使用。 + +
+ +
+ +## Oct 23, 2025 +--- +**反垃圾信息增强:每日提交次数限制已实施** + +
+ +
+ +- **策略内容:** 已实施一项新的平台级安全策略,以防止任务刷单行为。 +- **实施方式:** 针对每项任务,执行可配置的每日提交次数上限。 +- **实施目的:** 保护系统资源,确保所有贡献者公平参与,并维持任务生态系统的长期健康与公平 + +
+ +
+ +## Oct 20, 2025 +--- +**Frontier 系统调整:Crypto Frontier 已下线** + +
+ +
+ +- **调整内容:** + - Crypto Frontier 已正式下线。 + - 本次调整仅涉及前端入口关闭,所有历史贡献数据均保持完整且可正常访问。 +- **调整原因:** + - 此决策是我们持续优化产品结构的一部分,旨在将资源与用户关注聚焦于优先级最高的活跃 Frontier 模块。 + - Crypto Frontier 已完成其预设的探索阶段,下线有助于我们集中资源、推进核心目标。 +- **相关说明:** + - 用户在 Crypto Frontier 中的历史贡献与奖励记录已完整保留,可在个人贡献历史中查询。 + - 本次调整不影响其他任何 Frontier 模块及平台功能的正常运行。 + +
+ +
+ +## Oct 15, 2025 +--- +**系统治理:平台黑名单管控功能已上线** + +
+ +
+ +- **功能概述:** 平台已实施全新的黑名单管控功能。 +- **运作方式:** 指定管理员现可通过应用黑名单规则对恶意账户实施限制。 +- **实施目标:** 主动维护平台生态的完整性,保护诚信贡献者,并为所有参与者构建公平、可信的环境。旨在提升平台整体安全性,保障贡献者权益,并维护生态系统的公平性。 + +
+ +
+ +## Oct 13, 2025 +--- +**Airdrop 第一期活动** + +
+ +
+ +- **活动目标:** + - **数据目标:** 通过高额奖励机制与违规处罚策略,系统性地筛选并收集高质量、结构化的数据,保障数据的有效性与学术价值。 + - **生态目标:** 回馈长期支持的用户,通过五个新前线模块推动平台数据生态的多元发展与健康循环。 +- **主要动作:** + - 正式上线 Airdrop 第一期活动,提供 2.5M 高额 $XNY 与积分奖励,活动为期两周。 + - 同步推出五个全新的 Frontier 数据模块: + - **Model Comparison:** 支持横向比较不同AI模型的性能指标与业务回报,助力识别最优或融合模型方案。 + - **Spot LLM's Mistakes:** 聚焦识别大语言模型在推理、事实表述、等方面的错误,为模型优化提供数据支撑。 + - **Correct LLM's Mistakes:** 通过收集错误纠正数据,帮助大模型从错误中学习,提升其自我修正与推理能力。 + - **Food Science:** 围绕食品科学、营养功能等方向收集研究数据,助力食品科学领域创新。 + - **Lifelog Canvas:** 支持生活行为、健康状态等数据的跟踪与记录,为相关研究提供基础数据。 +- **奖励信息:** 奖励将依据数据提交后的评级得分进行排名,并于活动结束后统一发放。活动全程将监测并处罚恶意提交行为,以保障数据质量。 +- **活动时间:** 周期:2025/10/13 - 2025/10/27 (UTC)。 + +
+ +
+ +## Oct 10, 2025 +--- +**功能上线:Frontier 专属激励活动(Activity)** + +
+ +
+ +- **是什么:** 平台现支持为各 Frontier 灵活配置专属奖励活动(Activity),为特定高难度模块提供叠加式高额奖励。 +- **如何运作:** + - 部分 Frontier 任务将额外提供高额 $XNY 或 USDT 活动奖励,该奖励独立于平台基础积分,叠加发放。 + - 活动奖励规则(如额度、周期、目标)由各Frontier独立设定,具体信息见对应Frontier Home页说明。 +- **为何重要:** 通过更精准、可配置的激励方式,持续吸引用户参与高价值数据任务,提升数据贡献深度与生态活跃度。 + +
+ +
+ +## Sep 26, 2025 +--- +**活动上线:Codatta Booster Campaign 第三季第4周** + +
+ +
+ +- **活动目标:** 通过收集多领域可信数据加速AI发展,并推动社区共建去中心化AI知识层。 +- **主要动作:** 正式上线第三季第4周活动,入口位于币安钱包Booster页及平台首页(需Alpha Points ≥ 61)。 +- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 +- **活动时间:** 2025年9月26日 07:00(UTC)开始。 + +
+ +
+ +## Sep 12, 2025 +--- +**活动上线:Codatta Booster Campaign 第三季第3周** + +
+ +
+ +- **活动目标:** 收集跨领域数据,涵盖生活、机器人、加密资产、模型对比和指纹验证等领域,用于AI训练和验证。 +- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 +- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 +- **活动时间:** 2025年9月12日 07:00(UTC)– 2025年9月19日 07:00(UTC)。 + +
+ +
+ +## Sep 05, 2025 +--- +**活动上线:Codatta Booster Campaign 第三季第2周** + +
+ +
+ +- **活动目标:** 收集并标注跨领域数据,涵盖生活、机器人和加密资产等领域,用于AI训练和验证。 +- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 +- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 +- **活动时间:** 2025年9月5日 07:00(UTC)– 2025年9月12日 07:00(UTC)。 + +
+ +
+ +## Aug 28, 2025 +--- +**功能上线:用户数据档案** + +
+ +
+ +- **是什么:** 在用户信息模块中引入全新的数据档案功能。 +- **如何运作:** 通过用户信息 > 数据档案访问,在可视化仪表板中查看您的总提交数、已获奖励和贡献统计。 +- **为何重要:** 提供贡献透明度,通过可见的进度跟踪增强参与度,并支持长期参与。 + +
+ +
+ +## Aug 22, 2025 +--- +**活动上线:Codatta Booster Campaign 第三季第1周** + +
+ +
+ +- **活动目标:** 建立跨领域标注数据基础,涵盖生活、机器人和加密资产等领域,用于去中心化AI训练。 +- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 +- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 +- **活动时间:** 2025年8月22日 07:00(UTC)– 2025年8月29日 07:00(UTC)。 + +
+ +
+ +## Aug 15, 2025 +--- +**活动上线:Codatta Booster Campaign 第二季第4周** + +
+ +
+ +- **活动目标:** 系统性地标注和扩展特定领域数据集,涵盖食品AI、机器人交互和CEX链上数据,用于去中心化AI训练。 +- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 +- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 +- **活动时间:** 2025年8月15日 07:00(UTC)– 2025年8月22日 07:00(UTC)。 + +
+ +
+ +## Aug 08, 2025 +--- +**活动上线:Codatta Booster Campaign 第二季第3周** + +
+ +
+ +- **活动目标:** 系统性地收集四个关键领域的标注数据:项目学习、食品AI判断、机器人标注和CEX数据扩展。 +- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 +- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 +- **活动时间:** 2025年8月8日 07:00(UTC)– 2025年8月15日 07:00(UTC)。 + +
+ +
+ +## Aug 01, 2025 +--- +**活动上线:Codatta Booster Campaign 第二季第2周** + +
+ +
+ +- **活动目标:** 收集三个核心领域的标注数据:AI食品模型对比、机器人交互标注和CEX热钱包数据标注。 +- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 +- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 +- **活动时间:** 2025年8月1日 07:00(UTC)– 2025年8月8日 07:00(UTC)。 + +
+ +
+ +## Jul 24, 2025 +--- +**活动上线:Codatta Booster Campaign 第二季第1周** + +
+ +
+ +- **活动目标:** 通过标注真实世界交互数据,验证AI食品分析并增强机器人训练。 +- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 +- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 +- **活动时间:** 2025年7月24日 07:00(UTC)– 2025年7月31日 07:00(UTC)。 + +
+ +
+ +## Jul 16, 2025 +--- +**活动上线:Codatta Booster Campaign 第一季第4周** + +
+ +
+ +- **活动目标:** 通过收集丰富的标注数据深化AI对食品的理解,标注内容不仅包括标签,还包括重量、烹饪方法和卡路里含量。 +- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 +- **活动规则:** 总奖池50,000,000 $XNY,奖励于任务完成并通过审核后发放。 +- **活动时间:** 2025年7月16日 13:00(UTC)– 2025年7月23日 13:00(UTC)。 + +
+ +
+ +## Jul 09, 2025 +--- +**活动上线:Codatta Booster Campaign 第一季第3周** + +
+ +
+ +- **活动目标:** 通过收集即食食品的标注图像,教授AI对人类饮食习惯的细致理解,关注文化背景和情境相关性,而不仅仅是简单标签。 +- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 +- **活动规则:** 总奖池50,000,000 $XNY,奖励于任务完成并通过审核后发放。 +- **活动时间:** 2025年7月9日 13:00(UTC)– 2025年7月16日 13:00(UTC)。 + +
+ +
+ +## Jul 07, 2025 +--- +**功能优化:Quest 系统已恢复** + +
+ +
+ +- **是什么:** Quest 系统已完全恢复并重新开放。 +- **如何运作:** 系统于2025年6月30日暂时下线,现已全面恢复。 +- **为何重要:** 通过架构升级提升系统稳定性和用户体验。 + +
+ +
+ +## Jul 02, 2025 +--- +**活动上线:Codatta Booster Campaign 第一季第2周** + +
+ +
+ +- **活动目标:** 通过细致的图像标注扩展AI对全球食品文化和偏好的理解,涵盖素食、非素食和混合类别。 +- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 +- **活动规则:** 总奖池50,000,000 $XNY,奖励于任务完成并通过审核后发放。 +- **活动时间:** 2025年7月2日 13:00(UTC)– 2025年7月9日 13:00(UTC)。 + +
+ +
+ +## Jun 25, 2025 +--- +**活动上线:Codatta Booster Campaign 第一季第1周** + +
+ +
+ +- **活动目标:** 通过收集标注食品数据、社区知识问答和分层激励结构,启动首届活动。 +- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 +- **活动规则:** 总奖池50,000,000 $XNY,奖励于任务完成并通过审核后发放。 +- **活动时间:** 2025年6月25日 13:00(UTC)– 2025年7月2日 13:00(UTC)。 + +
+ +{/* Component definitions - moved to end of file for cleaner code organization */} +export const ChangelogFilter = () => { + const [activeFilter, setActiveFilter] = useState('all'); + const [isOpen, setIsOpen] = useState(false); + const [isMenuHovered, setIsMenuHovered] = useState(false); + + useEffect(() => { + window.activeTypeFilter = activeFilter; + }, [activeFilter]); + + useEffect(() => { + const items = document.querySelectorAll('.changelog-item'); + const activeMonth = window.activeMonthFilter || 'all'; + + items.forEach((item) => { + const itemType = item.getAttribute('data-type'); + const itemMonth = item.getAttribute('data-month'); + + const typeMatch = activeFilter === 'all' || itemType === activeFilter; + const monthMatch = activeMonth === 'all' || itemMonth === activeMonth; + + item.style.display = typeMatch && monthMatch ? '' : 'none'; + }); + }, [activeFilter]); + + const filterTypes = [ + { id: 'all', label: '全部', color: '#6b7280', count: 24 }, + { id: 'core-feature', label: '核心功能发布', color: '#16A34A', count: 4 }, + { id: 'optimization', label: '调整与优化', color: '#F59E0B', count: 3 }, + { id: 'fixes', label: '修复与功能下线', color: '#EF4444', count: 3 }, + { id: 'campaign', label: '活动上线', color: '#A855F7', count: 14 } + ]; + + const activeType = filterTypes.find(type => type.id === activeFilter) || filterTypes[0]; + + return ( +
+
setIsOpen(!isOpen)} + style={{ + display: 'inline-flex', + alignItems: 'center', + gap: '0.5rem', + padding: '0.625rem 1rem', + border: '2px solid #e5e7eb', + borderRadius: '0.5rem', + background: 'white', + cursor: 'pointer', + fontSize: '0.875rem', + fontWeight: '500', + boxShadow: isOpen ? `0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)` : '0 1px 2px 0 rgba(0, 0, 0, 0.05)', + transition: 'all 0.2s ease', + userSelect: 'none', + minWidth: '200px' + }} + > + + + {activeType.label} ({activeType.count}) + + +
+ + {isOpen && ( +
setIsMenuHovered(true)} + onMouseLeave={() => setIsMenuHovered(false)} + style={{ + position: 'absolute', + top: '100%', + left: 0, + marginTop: '0.5rem', + backgroundColor: 'white', + border: `2px solid ${isMenuHovered ? '#9ca3af' : '#e5e7eb'}`, + borderRadius: '0.5rem', + boxShadow: isMenuHovered + ? '0 10px 15px -3px rgba(0, 0, 0, 0.15), 0 4px 6px -2px rgba(0, 0, 0, 0.1)' + : '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)', + zIndex: 1000, + minWidth: '280px', + overflow: 'hidden', + transition: 'border-color 0.2s ease, box-shadow 0.2s ease' + }} + > + {filterTypes.map((type) => ( +
{ + setActiveFilter(type.id); + setIsOpen(false); + }} + style={{ + padding: '0.75rem 1rem', + cursor: 'pointer', + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + borderBottom: type.id !== filterTypes[filterTypes.length - 1].id ? '1px solid #f3f4f6' : 'none', + backgroundColor: activeFilter === type.id ? '#f9fafb' : 'white', + transition: 'background-color 0.15s ease' + }} + onMouseEnter={(e) => { + if (activeFilter !== type.id) { + e.currentTarget.style.backgroundColor = '#f3f4f6'; + } + }} + onMouseLeave={(e) => { + if (activeFilter !== type.id) { + e.currentTarget.style.backgroundColor = 'white'; + } + }} + > + + {type.label} + + + {type.count} + +
+ ))} +
+ )} + + {isOpen && ( +
setIsOpen(false)} + style={{ + position: 'fixed', + top: 0, + left: 0, + right: 0, + bottom: 0, + zIndex: 999, + backgroundColor: 'transparent' + }} + /> + )} +
+ ); +}; + +export const MonthFilter = () => { + const [activeMonth, setActiveMonth] = useState('all'); + const [isOpen, setIsOpen] = useState(false); + const [isMenuHovered, setIsMenuHovered] = useState(false); + + useEffect(() => { + window.activeMonthFilter = activeMonth; + const event = new Event('monthFilterChange'); + window.dispatchEvent(event); + }, [activeMonth]); + + useEffect(() => { + const handleMonthChange = () => { + const items = document.querySelectorAll('.changelog-item'); + const activeType = window.activeTypeFilter || 'all'; + + items.forEach((item) => { + const itemType = item.getAttribute('data-type'); + const itemMonth = item.getAttribute('data-month'); + + const typeMatch = activeType === 'all' || itemType === activeType; + const monthMatch = activeMonth === 'all' || itemMonth === activeMonth; + + item.style.display = typeMatch && monthMatch ? '' : 'none'; + }); + }; + + window.addEventListener('monthFilterChange', handleMonthChange); + handleMonthChange(); + + return () => { + window.removeEventListener('monthFilterChange', handleMonthChange); + }; + }, [activeMonth]); + + const months = [ + { id: 'all', label: '全部月份', count: 24 }, + { id: 'dec', label: '十二月', count: 1 }, + { id: 'nov', label: '十一月', count: 3 }, + { id: 'oct', label: '十月', count: 6 }, + { id: 'sep', label: '九月', count: 3 }, + { id: 'aug', label: '八月', count: 5 }, + { id: 'jul', label: '七月', count: 5 }, + { id: 'jun', label: '六月', count: 1 } + ]; + + const activeMonthData = months.find(month => month.id === activeMonth) || months[0]; + + return ( +
+
setIsOpen(!isOpen)} + style={{ + display: 'inline-flex', + alignItems: 'center', + gap: '0.5rem', + padding: '0.625rem 1rem', + border: '2px solid #e5e7eb', + borderRadius: '0.5rem', + background: 'white', + cursor: 'pointer', + fontSize: '0.875rem', + fontWeight: '500', + boxShadow: isOpen ? `0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)` : '0 1px 2px 0 rgba(0, 0, 0, 0.05)', + transition: 'all 0.2s ease', + userSelect: 'none', + minWidth: '200px' + }} + > + + {activeMonthData.label} ({activeMonthData.count}) + + +
+ + {isOpen && ( +
setIsMenuHovered(true)} + onMouseLeave={() => setIsMenuHovered(false)} + style={{ + position: 'absolute', + top: '100%', + left: 0, + marginTop: '0.5rem', + backgroundColor: 'white', + border: `2px solid ${isMenuHovered ? '#9ca3af' : '#e5e7eb'}`, + borderRadius: '0.5rem', + boxShadow: isMenuHovered + ? '0 10px 15px -3px rgba(0, 0, 0, 0.15), 0 4px 6px -2px rgba(0, 0, 0, 0.1)' + : '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)', + zIndex: 1000, + minWidth: '280px', + overflow: 'hidden', + transition: 'border-color 0.2s ease, box-shadow 0.2s ease' + }} + > + {months.map((month) => ( +
{ + setActiveMonth(month.id); + setIsOpen(false); + }} + style={{ + padding: '0.75rem 1rem', + cursor: 'pointer', + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + borderBottom: month.id !== months[months.length - 1].id ? '1px solid #f3f4f6' : 'none', + backgroundColor: activeMonth === month.id ? '#f9fafb' : 'white', + transition: 'background-color 0.15s ease' + }} + onMouseEnter={(e) => { + if (activeMonth !== month.id) { + e.currentTarget.style.backgroundColor = '#f3f4f6'; + } + }} + onMouseLeave={(e) => { + if (activeMonth !== month.id) { + e.currentTarget.style.backgroundColor = 'white'; + } + }} + > + + {month.label} + + + {month.count} + +
+ ))} +
+ )} + + {isOpen && ( +
setIsOpen(false)} + style={{ + position: 'fixed', + top: 0, + left: 0, + right: 0, + bottom: 0, + zIndex: 999, + backgroundColor: 'transparent' + }} + /> + )} +
+ ); +}; diff --git a/cn/changelog/2025/10-14.mdx b/cn/changelog/2025/10-14.mdx deleted file mode 100644 index de59282..0000000 --- a/cn/changelog/2025/10-14.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "2025-10-14" -description: "Airdrop 分页功能修复与菜单红点提醒" ---- - -## Airdrop 分页功能修复与菜单红点提醒 - -### 问题修复 - -**Airdrop 分页功能无效问题处理:** - -* **修复内容:** 解决 Airdrop 排名分页功能无效及 Airdrop 提交记录分页功能无效的问题 - -### 功能调整 - -**Airdrop 菜单红点提醒功能添加:** - -* **调整内容:** 在系统 Airdrop 菜单项增加红点显示,使新活动更加醒目 - diff --git a/cn/changelog/2025/10-15.mdx b/cn/changelog/2025/10-15.mdx deleted file mode 100644 index 2e0f329..0000000 --- a/cn/changelog/2025/10-15.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "2025-10-15" -description: "黑名单功能" ---- - -## 黑名单功能 - -### 功能发布 - -**恶意用户黑名单管控功能上线:** - -* **功能:** 新增黑名单规则功能,支持对恶意用户进行黑名单标记与管控 - diff --git a/cn/changelog/2025/10-20.mdx b/cn/changelog/2025/10-20.mdx deleted file mode 100644 index 6b5e1fa..0000000 --- a/cn/changelog/2025/10-20.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "2025-10-20" -description: "Crypto Frontier 模块下线调整" ---- - -## Crypto Frontier 模块下线调整 - -### 问题修复与功能下线 - -**Frontier Crypto 模块移除处理:** - -* **下线内容:** 正式移除 Frontier 模块中的 Crypto 模块 -* **下线原因:** 因业务调整与产品规划,Frontier Crypto 模块已无法满足现有需求,且与产品未来设计理念方向存在偏差,故决定移除此模块 - diff --git a/cn/changelog/2025/10-23.mdx b/cn/changelog/2025/10-23.mdx deleted file mode 100644 index fd220b0..0000000 --- a/cn/changelog/2025/10-23.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "2025-10-23" -description: "防刷机制新增" ---- - -## 防刷机制新增 - -### 防刷调整 - -**Task 防刷策略上线:** - -* **优化内容:** 新增防刷安全策略,对所有 task 设置每日提交上限,单个 task 每日最高限制 50 次提交 - diff --git a/cn/changelog/2025/10-24.mdx b/cn/changelog/2025/10-24.mdx deleted file mode 100644 index 2cb7537..0000000 --- a/cn/changelog/2025/10-24.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "2025-10-24" -description: "robotics Frontier 模块移除" ---- - -## robotics Frontier 模块移除 - -### 功能下线 - -**Robotics Frontier 入口移除处理:** - -* **下线内容:** 移除 Frontier 模块中 Robotics Frontier 的入口 - diff --git a/cn/changelog/2025/10-28.mdx b/cn/changelog/2025/10-28.mdx deleted file mode 100644 index 4c49ff7..0000000 --- a/cn/changelog/2025/10-28.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "2025-10-28" -description: "Airdrop 活动文案优化" ---- - -## Airdrop 活动文案优化 - -### 文案优化 - -**Airdrop 活动提示文案更新:** - -* **优化内容:** 更新 Airdrop 活动提示文案,补充奖励到账时间规则及奖励领取方式相关说明 - diff --git a/cn/changelog/2025/11-03.mdx b/cn/changelog/2025/11-03.mdx deleted file mode 100644 index 1459356..0000000 --- a/cn/changelog/2025/11-03.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "2025-11-03" -description: "功能下线" ---- - -## 功能下线 - -### 功能下线 - -**部分QUEST 任务下线处理:** - -* **下线内容:** 下线与 submission(提交)、validation(验证)、bounty hunting(赏金狩猎)相关的全部 QUEST 任务 - diff --git a/cn/changelog/2025/11-05.mdx b/cn/changelog/2025/11-05.mdx deleted file mode 100644 index 5ba00d2..0000000 --- a/cn/changelog/2025/11-05.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "2025-11-05" -description: "DID 账户升级功能与 Gas 费预估修复" ---- - -## DID 账户升级功能与 Gas 费预估修复 - -### 功能发布 - -**账户升级:DID V1 版本正式上线:** - -* **功能:** 用户可将现有账户升级为标准 DID(去中心化身份标识)账户 -* **作用:** 在 Codatta 平台中,DID 作为 "链上身份 + 数据血缘" 的统一主键,可关联用户任务行为、数据贡献、奖励发放等全链路信息,实现可追溯、可对应 - -### 问题修复 - -**Gas 费预估精准度修复:** - -* **修复内容:** 修复了领取资产时,Gas 费预估误差过大的问题 - diff --git a/cn/changelog/2025/11-11.mdx b/cn/changelog/2025/11-11.mdx deleted file mode 100644 index 0641a3b..0000000 --- a/cn/changelog/2025/11-11.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "2025-11-11" -description: "排行榜无效入口修复" ---- - -## 排行榜无效入口修复 - -### 问题修复 - -**Leaderboard 模块无效入口移除:** - -* **修复内容:** 移除 Leaderboard 模块中跳转至 Crypto Frontier 模块的 "Contribute More" 入口 - diff --git a/cn/changelog/2025/11-24.mdx b/cn/changelog/2025/11-24.mdx deleted file mode 100644 index 35df0a3..0000000 --- a/cn/changelog/2025/11-24.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "2025-11-24" -description: "Airdrop 二期活动与三个 frontier 上线" ---- - -## Airdrop二期活动 & 三个 frontier 上线 - -### 功能发布 - -**Airdrop二期活动正式上线:** -* **活动奖励:** 共设置 1 million XNY token 奖励 -* **活动内容:** 包含三个新的 frontier 的数据提交任务以及其他任务参与(例如社交媒体任务) - -**首页新增三个 frontier:** -* **Advanced Physics Questions frontier:** 专业物理从业者提交 AI 无法正确回答的高难度物理问题 -* **Crypto & Stock Information frontier:** 为 AI 提供可靠的加密与股票投资决策相关信息 -* **Real-world Photo frontier:** 为 AI 提供带有标注元数据的真实拍摄照片 diff --git a/cn/changelog/2025/12-04.mdx b/cn/changelog/2025/12-04.mdx deleted file mode 100644 index 89ab176..0000000 --- a/cn/changelog/2025/12-04.mdx +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "2025-12-04" -description: "锁仓领奖功能上线" ---- - -## 锁仓领奖功能上线 - -### 功能发布 - -**锁仓领奖规则上线:** - -* **适用范围:** 支持为 Airdrop / Frontier 等活动配置「锁仓 3 个月(T+90)」的奖励规则 -* **流程说明:** 活动奖励发放至用户在 Codatta 平台的资产余额后;用户在资产页点击「Lock now」将奖励锁入合约,锁仓到期后在 Lock-up detail页面一键领取到钱包 -* **功能价值:** 平衡高额奖励活动的激励与抛压,引导用户长期持有和持续参与 - diff --git a/docs.json b/docs.json index 72b5963..ec1d518 100644 --- a/docs.json +++ b/docs.json @@ -93,17 +93,7 @@ { "group": "2025", "pages": [ - "en/changelog/2025/12-04", - "en/changelog/2025/11-24", - "en/changelog/2025/11-11", - "en/changelog/2025/11-05", - "en/changelog/2025/11-03", - "en/changelog/2025/10-28", - "en/changelog/2025/10-24", - "en/changelog/2025/10-23", - "en/changelog/2025/10-20", - "en/changelog/2025/10-15", - "en/changelog/2025/10-14" + "en/changelog/2025" ] } ] @@ -179,17 +169,7 @@ { "group": "2025", "pages": [ - "cn/changelog/2025/12-04", - "cn/changelog/2025/11-24", - "cn/changelog/2025/11-11", - "cn/changelog/2025/11-05", - "cn/changelog/2025/11-03", - "cn/changelog/2025/10-28", - "cn/changelog/2025/10-24", - "cn/changelog/2025/10-23", - "cn/changelog/2025/10-20", - "cn/changelog/2025/10-15", - "cn/changelog/2025/10-14" + "cn/changelog/2025" ] } ] diff --git a/en/changelog/2025.mdx b/en/changelog/2025.mdx new file mode 100644 index 0000000..e6d944f --- /dev/null +++ b/en/changelog/2025.mdx @@ -0,0 +1,849 @@ +--- +title: "Changelog" +description: "This changelog documents all updates, fixes, and new features for Codatta in 2025." +--- + +import { useState, useEffect } from 'react'; + +
+
+ + +
+ + {(() => { + const ShowResult = () => { + const [num, setNum] = useState(0); + useEffect(() => { + if (typeof document === 'undefined') return; + const update = () => { + try { + const items = document.querySelectorAll('.changelog-item'); + let count = 0; + items.forEach(item => { + if (item.style.display !== 'none') count++; + }); + setNum(count); + } catch {} + }; + update(); + const id = setInterval(update, 2000); + return () => clearInterval(id); + }, []); + return ( +
+ + {num} + result{num !== 1 ? 's' : ''} +
+ ); + }; + return ; + })()} +
+ +
+ +## Dec 04, 2025 +--- +**Evolving Incentives: Reward Lock-ups for Long-term Ecosystem Management** + +
+ +
+ +An optional lock-up feature for rewards from high-incentive tasks (e.g., in Airdrop or Frontier campaigns). + +- **Trigger:** Rewards are deposited to your balance after a campaign. +- **Lock:** Secure rewards by locking them in a smart contract via the Assets page. +- **Release:** After the lock-up period, claim rewards directly to your wallet with one click. + +This is a key step in evolving our incentive system toward granular management. It provides a tool to manage liquidity in high-reward scenarios, balancing short-term engagement with the ecosystem's long-term health. + +
+ +
+ +## Nov 24, 2025 +--- +**Campaign Launch: Airdrop Season 2** + +
+ +
+ +To systematically collect academic-grade datasets in physics, finance, and multimodal domains, and bootstrap high-quality data pipelines for three new frontiers. + +- **Action:** Launched Airdrop Season 2 with a 1M $XNY prize pool (3-month linear vesting). +- **New Frontiers:** + - **Advanced Physics Questions:** For domain experts to submit high-difficulty physics problems that current AI cannot answer correctly. + - **Crypto & Stock Information:** To provide AI with reliable information related to cryptocurrency and stock investment decisions. + - **Real-world Photo:** To provide AI with real-world photographs that include annotated metadata. +- **Reward Structure:** 90% for task completion, 10% for leaderboard rankings. +- **Timeline:** Nov 24, 2025, 09:00 UTC – Dec 8, 2025, 09:00 UTC. + +
+ +
+ +## Nov 05, 2025 +--- +**Account System Upgrade: DID Officially Launched** + +
+ +
+ +A foundational upgrade enabling account binding to Decentralized Identifiers (DID). + +- **Binding:** Self-service integration of an on-chain DID through your next login to Codatta. +- **Association:** The bound DID serves as the unified primary key, systematically indexing all task actions, data contributions, and reward distributions. +- **Lineage:** Enables full traceability and verification of both on-chain and off-chain activities, establishing immutable data provenance. + +This deployment establishes the technical cornerstone for a verifiable data economy. By providing each contributor with a persistent, unique digital identity, we enable granular contribution attribution, unambiguous ownership verification, and transparent incentive allocation at the protocol level. + +
+ +
+ +## Nov 03, 2025 +--- +**Quest System Adjustment: Crypto Frontier QUEST Module Decommissioned** + +
+ +
+ +The entire Crypto Frontier QUEST module and all associated tasks—including Submission, Validation, and Bounty Hunting—have been taken offline. + +- **Why:** This module has completed its planned lifecycle under the current product roadmap. The decommission supports system streamlining and resource realignment for upcoming feature releases. +- **Note:** Users' historical contribution records and earned rewards from this module remain intact. No other Frontier modules are affected by this change. + +
+ +
+ +## Oct 24, 2025 +--- +**Frontier System Adjustment: Robotics Frontier Decommissioned** + +
+ +
+ +The Robotics Frontier has been officially decommissioned. This action only affects the front-end entry point. All historical contribution data remains intact and accessible. + +- **Why:** This decision is part of our ongoing product streamlining to focus resources and user attention on our highest-priority active frontiers. The Robotics Frontier has fulfilled its planned exploratory phase, and its decommission allows us to consolidate efforts. +- **Note:** Users' past contributions and rewards from the Robotics Frontier are preserved and can be reviewed in their contribution history. No other frontiers or platform functionality is impacted. + +
+ +
+ +## Oct 23, 2025 +--- +**Anti-Spam Enhancement: Daily Submission Limits Implemented** + +
+ +
+ +A new platform-wide security policy to prevent task spamming. + +- **How:** Enforces a configurable daily submission cap for each task. +- **Why:** To protect system resources, ensure equitable participation for all contributors, and maintain the long-term health and fairness of the task ecosystem. + +
+ +
+ +## Oct 20, 2025 +--- +**Frontier System Adjustment: Crypto Frontier Decommissioned** + +
+ +
+ +The Crypto Frontier has been officially decommissioned. This action only affects the front-end entry point. All historical contribution data remains intact and accessible. + +- **Why:** This decision is part of our ongoing product streamlining to focus resources and user attention on our highest-priority active frontiers. The Crypto Frontier has fulfilled its planned exploratory phase, and its decommission allows us to consolidate efforts. +- **Note:** Users' past contributions and rewards from the Crypto Frontier are preserved and can be reviewed in their contribution history. No other frontiers or platform functionality is impacted. + +
+ +
+ +## Oct 15, 2025 +--- +**System Governance: Platform Blacklist Control Implemented** + +
+ +
+ +A new blacklist control feature has been implemented on the platform. + +- **How:** Designated admins can now apply blacklist rules to restrict malicious accounts. +- **Why:** To enhance platform security, protect contributor interests, and uphold ecosystem fairness. + +
+ +
+ +## Oct 13, 2025 +--- +**Campaign Launch: Airdrop Season 1** + +
+ +
+ +To systematically collect high-quality, structured data through a high-reward mechanism and anti-spam enforcement, ensuring validity and academic value, and to reward long-term contributors and diversify the platform's data ecosystem via five new frontier modules. + +- **Action:** Launched Airdrop Season 1 with a 2.5M $XNY prize pool and points rewards. +- **New Frontiers:** + - **Model Comparison:** Compare performance metrics and business outcomes across different AI models to identify optimal or hybrid solutions. + - **Spot LLM's Mistakes:** Identify reasoning, factual, and logical errors in LLM outputs to support model optimization. + - **Correct LLM's Mistakes:** Collect corrective data to help LLMs learn from mistakes and improve self-correction and reasoning. + - **Food Science:** Gather research data in food science and nutritional functionality to drive innovation in the field. + - **Lifelog Canvas:** Track and log personal behavior and health-related data to support behavioral and related research. +- **Reward Structure:** Rewards are ranked by submission rating and distributed after the campaign. Malicious submissions are penalized to ensure data quality. +- **Timeline:** Oct 13, 2025, 09:00 UTC - Oct 27, 2025, 09:00 UTC. + +
+ +
+ +## Oct 10, 2025 +--- +**Feature Launch: Frontier-Specific Reward Activity** + +
+ +
+ +Configurable reward activities are now available for Frontiers, offering additional high-value incentives. + +- **How:** Selected Frontier tasks provide extra rewards in $XNY or USDT, independent of base points. Activity parameters (reward amount, duration, objectives) are set per Frontier and displayed on their respective homepages. +- **Why:** To drive deeper participation in high-value data tasks through targeted incentives, improving both data quality and ecosystem engagement. + +
+ +
+ +## Sep 26, 2025 +--- +**Campaign Launch: Codatta Booster Campaign Season 3 Week 4** + +
+ +
+ +To accelerate AI development through trusted multi-domain data collection and foster community-driven decentralized AI knowledge building. + +- **Access:** Accessible via the Binance Wallet Booster tab or the homepage banner (requires Alpha Points ≥ 61). +- **Rewards:** Total reward pool of 50,000,000 $XNY (with a lock-up period), distributed after task completion and verification. +- **Timeline:** September 26, 2025, 07:00 UTC – October 3, 2025, 07:00 UTC. + +
+ +
+ +## Sep 12, 2025 +--- +**Campaign Launch: Codatta Booster Campaign Season 3 Week 3** + +
+ +
+ +To collect cross-domain data across life, robotics, crypto, model comparison, and fingerprint verification for AI training and verification. + +- **Access:** Accessible via the Binance Wallet Booster tab or the homepage banner (requires Alpha Points ≥ 61). +- **Rewards:** Total reward pool of 50,000,000 $XNY (with a lock-up period), distributed after task completion and verification. +- **Timeline:** September 12, 2025, 07:00 UTC – September 19, 2025, 07:00 UTC. + +
+ +
+ +## Sep 05, 2025 +--- +**Campaign Launch: Codatta Booster Campaign Season 3 Week 2** + +
+ +
+ +To collect and annotate cross-domain data across life, robotics, and crypto for AI training and validation. + +- **Access:** Accessible via the Binance Wallet Booster tab or the homepage banner (requires Alpha Points ≥ 61). +- **Rewards:** Total reward pool of 50,000,000 $XNY (with a lock-up period), distributed after task completion and verification. +- **Timeline:** September 5, 2025, 07:00 UTC – September 12, 2025, 07:00 UTC. + +
+ +
+ +## Aug 28, 2025 +--- +**Feature Launch: User Data Profile** + +
+ +
+ +Introduce a new Data Profile feature within the User Info module. + +- **How:** Access via User Info > Data Profile to view your total submissions, earned rewards, and contribution statistics in a visual dashboard. +- **Why:** Provide transparency into your contributions, reinforce engagement through visible progress tracking, and support long-term participation. + +
+ +
+ +## Aug 22, 2025 +--- +**Campaign Launch: Codatta Booster Campaign Season 3 Week 1** + +
+ +
+ +To establish a foundation of cross-domain annotated data across life, robotics, and crypto for decentralized AI training. + +- **Access:** Accessible via the Binance Wallet Booster tab or the homepage banner (requires Alpha Points ≥ 61). +- **Rewards:** Total reward pool of 50,000,000 $XNY (with a lock-up period), distributed after task completion and verification. +- **Timeline:** August 22, 2025, 07:00 UTC – August 29, 2025, 07:00 UTC. + +
+ +
+ +## Aug 15, 2025 +--- +**Campaign Launch: Codatta Booster Campaign Season 2 Week 4** + +
+ +
+ +To systematically annotate and expand domain-specific datasets in food AI, robotic interaction, and CEX on-chain data for decentralized AI training. + +- **Access:** Accessible via Binance Wallet Booster tab or homepage banner (requires Alpha Points ≥ 61). +- **Rewards:** Total reward pool of 50,000,000 $XNY (with a lock-up period), distributed after task completion and verification. +- **Timeline:** August 15, 2025, 07:00 UTC – August 22, 2025, 07:00 UTC. + +
+ +
+ +## Aug 08, 2025 +--- +**Campaign Launch: Codatta Booster Campaign Season 2 Week 3** + +
+ +
+ +To systematically collect annotated data across four key areas: project learning, food AI judgement, robotic annotation, and CEX data expansion. + +- **Access:** Accessible via Binance Wallet Booster tab or homepage banner (Alpha Points ≥ 61). +- **Rewards:** Total reward pool of 50,000,000 $XNY (with a lock-up period), distributed after task completion and verification. +- **Timeline:** August 8, 2025, 07:00 UTC – August 15, 2025, 07:00 UTC. + +
+ +
+ +## Aug 01, 2025 +--- +**Campaign Launch: Codatta Booster Campaign Season 2 Week 2** + +
+ +
+ +To collect annotated data across three core domains: AI food model comparison, robotic interaction annotation, and CEX hot wallet data labeling. + +- **Access:** Accessible via Binance Wallet Booster tab or homepage banner (Alpha Points ≥ 61). +- **Rewards:** Total reward pool of 50,000,000 $XNY (with a lock-up period), distributed after task completion and verification. +- **Timeline:** August 1, 2025, 07:00 UTC – August 8, 2025, 07:00 UTC. + +
+ +
+ +## July 24, 2025 +--- +**Campaign Launch: Codatta Booster Campaign Season 2 Week 1** + +
+ +
+ +To validate AI food analysis and enhance robotics training through annotated real-world interaction data. + +- **Access:** Accessible via Binance Wallet Booster tab or homepage banner (Alpha Points ≥ 61). +- **Rewards:** Total reward pool of 50,000,000 $XNY (with a lock-up period), distributed after task completion and verification. +- **Timeline:** July 24, 2025, 07:00 UTC – July 31, 2025, 07:00 UTC. + +
+ +
+ +## July 16, 2025 +--- +**Campaign Launch: Codatta Booster Campaign Season 1 Week 4** + +
+ +
+ +To deepen AI's understanding of food by collecting enriched annotations that go beyond labels to include weight, cooking methods, and caloric content. + +- **Access:** Accessible via Binance Wallet Booster tab or homepage banner (Alpha Points ≥ 61). +- **Rewards:** Total reward pool of 50,000,000 $XNY, distributed after task completion and verification. +- **Timeline:** July 16, 2025, 13:00 UTC – July 23, 2025, 13:00 UTC. + +
+ +
+ +## July 09, 2025 +--- +**Campaign Launch: Codatta Booster Campaign Season 1 Week 3** + +
+ +
+ +To teach AI nuanced understanding of human dietary habits by collecting annotated images of ready-to-eat food, focusing on cultural and contextual relevance beyond simple labels. + +- **Access:** Accessible via Binance Wallet Booster tab or homepage banner (Alpha Points ≥ 61). +- **Rewards:** Total reward pool of 50,000,000 $XNY, distributed after task completion and verification. +- **Timeline:** July 9, 2025, 13:00 UTC – July 16, 2025, 13:00 UTC. + +
+ +
+ +## July 07, 2025 +--- +**Feature Optimization: Quest System Restored** + +
+ +
+ +The Quest system has been fully restored and reopened. + +- **How:** Temporarily taken offline on June 30, 2025, and now comprehensively restored. +- **Why:** To enhance system stability and user experience through architectural upgrades. + +
+ +
+ +## July 02, 2025 +--- +**Campaign Launch: Codatta Booster Campaign Season 1 Week 2** + +
+ +
+ +To expand AI's understanding of global food culture and preferences through nuanced image labeling across vegetarian, non-vegetarian, and mixed categories. + +- **Access:** Accessible via Binance Wallet Booster tab or homepage banner (Alpha Points ≥ 61). +- **Rewards:** Total reward pool of 50,000,000 $XNY, distributed after task completion and verification. +- **Timeline:** July 2, 2025, 13:00 UTC – July 9, 2025, 13:00 UTC. + +
+ +
+ +## June 25, 2025 +--- +**Campaign Launch: Codatta Booster Campaign Season 1 Week 1** + +
+ +
+ +To launch the inaugural season by collecting annotated food data, engaging community knowledge through quizzes, and rewarding participation via a multi-tiered incentive structure. + +- **Access:** Accessible via Binance Wallet Booster tab or homepage banner (Alpha Points ≥ 61). +- **Rewards:** Total reward pool of 50,000,000 $XNY, distributed after task completion and verification. +- **Timeline:** June 25, 2025, 13:00 UTC – July 2, 2025, 13:00 UTC. + +
+ +{/* Component definitions - moved to end of file for cleaner code organization */} +export const ChangelogFilter = () => { + const [activeFilter, setActiveFilter] = useState('all'); + const [isOpen, setIsOpen] = useState(false); + const [isMenuHovered, setIsMenuHovered] = useState(false); + + useEffect(() => { + window.activeTypeFilter = activeFilter; + }, [activeFilter]); + + useEffect(() => { + const items = document.querySelectorAll('.changelog-item'); + const activeMonth = window.activeMonthFilter || 'all'; + + items.forEach((item) => { + const itemType = item.getAttribute('data-type'); + const itemMonth = item.getAttribute('data-month'); + + const typeMatch = activeFilter === 'all' || itemType === activeFilter; + const monthMatch = activeMonth === 'all' || itemMonth === activeMonth; + + item.style.display = typeMatch && monthMatch ? '' : 'none'; + }); + }, [activeFilter]); + + const filterTypes = [ + { id: 'all', label: 'All', color: '#6b7280', count: 24 }, + { id: 'core-feature', label: 'Core Feature Release', color: '#16A34A', count: 4 }, + { id: 'optimization', label: 'Adjustments & Optimization', color: '#F59E0B', count: 3 }, + { id: 'fixes', label: 'Fixes & Feature Sunset', color: '#EF4444', count: 3 }, + { id: 'campaign', label: 'Campaign Launch', color: '#A855F7', count: 14 } + ]; + + const activeType = filterTypes.find(type => type.id === activeFilter) || filterTypes[0]; + + return ( +
+
setIsOpen(!isOpen)} + style={{ + display: 'inline-flex', + alignItems: 'center', + gap: '0.5rem', + padding: '0.625rem 1rem', + border: '2px solid #e5e7eb', + borderRadius: '0.5rem', + background: 'white', + cursor: 'pointer', + fontSize: '0.875rem', + fontWeight: '500', + boxShadow: isOpen ? `0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)` : '0 1px 2px 0 rgba(0, 0, 0, 0.05)', + transition: 'all 0.2s ease', + userSelect: 'none', + minWidth: '200px' + }} + > + + + {activeType.label} ({activeType.count}) + + +
+ + {isOpen && ( +
setIsMenuHovered(true)} + onMouseLeave={() => setIsMenuHovered(false)} + style={{ + position: 'absolute', + top: '100%', + left: 0, + marginTop: '0.5rem', + backgroundColor: 'white', + border: `2px solid ${isMenuHovered ? '#9ca3af' : '#e5e7eb'}`, + borderRadius: '0.5rem', + boxShadow: isMenuHovered + ? '0 10px 15px -3px rgba(0, 0, 0, 0.15), 0 4px 6px -2px rgba(0, 0, 0, 0.1)' + : '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)', + zIndex: 1000, + minWidth: '280px', + overflow: 'hidden', + transition: 'border-color 0.2s ease, box-shadow 0.2s ease' + }} + > + {filterTypes.map((type) => ( +
{ + setActiveFilter(type.id); + setIsOpen(false); + }} + style={{ + padding: '0.75rem 1rem', + cursor: 'pointer', + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + borderBottom: type.id !== filterTypes[filterTypes.length - 1].id ? '1px solid #f3f4f6' : 'none', + backgroundColor: activeFilter === type.id ? '#f9fafb' : 'white', + transition: 'background-color 0.15s ease' + }} + onMouseEnter={(e) => { + if (activeFilter !== type.id) { + e.currentTarget.style.backgroundColor = '#f3f4f6'; + } + }} + onMouseLeave={(e) => { + if (activeFilter !== type.id) { + e.currentTarget.style.backgroundColor = 'white'; + } + }} + > + + {type.label} + + + {type.count} + +
+ ))} +
+ )} + + {isOpen && ( +
setIsOpen(false)} + style={{ + position: 'fixed', + top: 0, + left: 0, + right: 0, + bottom: 0, + zIndex: 999, + backgroundColor: 'transparent' + }} + /> + )} +
+ ); +}; + +export const MonthFilter = () => { + const [activeMonth, setActiveMonth] = useState('all'); + const [isOpen, setIsOpen] = useState(false); + const [isMenuHovered, setIsMenuHovered] = useState(false); + + useEffect(() => { + window.activeMonthFilter = activeMonth; + const event = new Event('monthFilterChange'); + window.dispatchEvent(event); + }, [activeMonth]); + + useEffect(() => { + const handleMonthChange = () => { + const items = document.querySelectorAll('.changelog-item'); + const activeType = window.activeTypeFilter || 'all'; + + items.forEach((item) => { + const itemType = item.getAttribute('data-type'); + const itemMonth = item.getAttribute('data-month'); + + const typeMatch = activeType === 'all' || itemType === activeType; + const monthMatch = activeMonth === 'all' || itemMonth === activeMonth; + + item.style.display = typeMatch && monthMatch ? '' : 'none'; + }); + }; + + window.addEventListener('monthFilterChange', handleMonthChange); + handleMonthChange(); + + return () => { + window.removeEventListener('monthFilterChange', handleMonthChange); + }; + }, [activeMonth]); + + const months = [ + { id: 'all', label: 'All Months', count: 24 }, + { id: 'dec', label: 'December', count: 1 }, + { id: 'nov', label: 'November', count: 3 }, + { id: 'oct', label: 'October', count: 6 }, + { id: 'sep', label: 'September', count: 3 }, + { id: 'aug', label: 'August', count: 5 }, + { id: 'jul', label: 'July', count: 5 }, + { id: 'jun', label: 'June', count: 1 } + ]; + + const activeMonthData = months.find(month => month.id === activeMonth) || months[0]; + + return ( +
+
setIsOpen(!isOpen)} + style={{ + display: 'inline-flex', + alignItems: 'center', + gap: '0.5rem', + padding: '0.625rem 1rem', + border: '2px solid #e5e7eb', + borderRadius: '0.5rem', + background: 'white', + cursor: 'pointer', + fontSize: '0.875rem', + fontWeight: '500', + boxShadow: isOpen ? `0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)` : '0 1px 2px 0 rgba(0, 0, 0, 0.05)', + transition: 'all 0.2s ease', + userSelect: 'none', + minWidth: '200px' + }} + > + + {activeMonthData.label} ({activeMonthData.count}) + + +
+ + {isOpen && ( +
setIsMenuHovered(true)} + onMouseLeave={() => setIsMenuHovered(false)} + style={{ + position: 'absolute', + top: '100%', + left: 0, + marginTop: '0.5rem', + backgroundColor: 'white', + border: `2px solid ${isMenuHovered ? '#9ca3af' : '#e5e7eb'}`, + borderRadius: '0.5rem', + boxShadow: isMenuHovered + ? '0 10px 15px -3px rgba(0, 0, 0, 0.15), 0 4px 6px -2px rgba(0, 0, 0, 0.1)' + : '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)', + zIndex: 1000, + minWidth: '280px', + overflow: 'hidden', + transition: 'border-color 0.2s ease, box-shadow 0.2s ease' + }} + > + {months.map((month) => ( +
{ + setActiveMonth(month.id); + setIsOpen(false); + }} + style={{ + padding: '0.75rem 1rem', + cursor: 'pointer', + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + borderBottom: month.id !== months[months.length - 1].id ? '1px solid #f3f4f6' : 'none', + backgroundColor: activeMonth === month.id ? '#f9fafb' : 'white', + transition: 'background-color 0.15s ease' + }} + onMouseEnter={(e) => { + if (activeMonth !== month.id) { + e.currentTarget.style.backgroundColor = '#f3f4f6'; + } + }} + onMouseLeave={(e) => { + if (activeMonth !== month.id) { + e.currentTarget.style.backgroundColor = 'white'; + } + }} + > + + {month.label} + + + {month.count} + +
+ ))} +
+ )} + + {isOpen && ( +
setIsOpen(false)} + style={{ + position: 'fixed', + top: 0, + left: 0, + right: 0, + bottom: 0, + zIndex: 999, + backgroundColor: 'transparent' + }} + /> + )} +
+ ); +}; diff --git a/en/changelog/2025/10-14.mdx b/en/changelog/2025/10-14.mdx deleted file mode 100644 index 9663e50..0000000 --- a/en/changelog/2025/10-14.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "2025-10-14" -description: "Airdrop Pagination Fix & Menu Notification Badge" ---- - -## Airdrop Pagination Fix & Menu Notification Badge - -### Bug Fixes - -**Airdrop pagination malfunction resolved:** - -* **Fix:** Addressed issues causing Airdrop ranking pagination and submission record pagination to fail. - -### Feature Adjustments - -**Airdrop menu badge added:** - -* **Update:** Added a red notification badge to the Airdrop menu item to highlight new activity. - diff --git a/en/changelog/2025/10-15.mdx b/en/changelog/2025/10-15.mdx deleted file mode 100644 index c6f7c6b..0000000 --- a/en/changelog/2025/10-15.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "2025-10-15" -description: "Blacklist Feature" ---- - -## Blacklist Feature - -### Feature Release - -**Malicious-user blacklist system launched:** - -* **Feature:** Added a blacklist rule system supporting tagging and restricting malicious users. - diff --git a/en/changelog/2025/10-20.mdx b/en/changelog/2025/10-20.mdx deleted file mode 100644 index 499ae51..0000000 --- a/en/changelog/2025/10-20.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: "2025-10-20" -description: "Crypto Frontier Deprecation" ---- - -## Crypto Frontier Deprecation - -### Bug Fixes & Feature Deprecation - -**Crypto Frontier module removed:** - -* **Deprecated Content:** Official removal of the Crypto Frontier module. -* **Reason:** Following business and product direction adjustments, the module no longer fits the updated product vision and requirements. - diff --git a/en/changelog/2025/10-23.mdx b/en/changelog/2025/10-23.mdx deleted file mode 100644 index 2677a34..0000000 --- a/en/changelog/2025/10-23.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "2025-10-23" -description: "Anti-Abuse Enhancements" ---- - -## Anti-Abuse Enhancements - -### Anti-Abuse Update - -**New task anti-bot strategy rolled out:** - -* **Optimization:** Introduced new anti-abuse rules limiting daily submissions, with a maximum of 50 submissions per task per day. - diff --git a/en/changelog/2025/10-24.mdx b/en/changelog/2025/10-24.mdx deleted file mode 100644 index a143740..0000000 --- a/en/changelog/2025/10-24.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "2025-10-24" -description: "Removal of Robotics Frontier" ---- - -## Removal of Robotics Frontier - -### Feature Deprecation - -**Robotics Frontier entry removed:** - -* **Deprecated Content:** Removed the Robotics Frontier entry from the Frontier module. - diff --git a/en/changelog/2025/10-28.mdx b/en/changelog/2025/10-28.mdx deleted file mode 100644 index 05829c6..0000000 --- a/en/changelog/2025/10-28.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "2025-10-28" -description: "Airdrop Message Copy Update" ---- - -## Airdrop Message Copy Update - -### Copy Optimization - -**Airdrop prompt copy revised:** - -* **Update:** Improved the Airdrop activity prompts with clearer information regarding reward distribution timing and reward claiming instructions. - diff --git a/en/changelog/2025/11-03.mdx b/en/changelog/2025/11-03.mdx deleted file mode 100644 index d560193..0000000 --- a/en/changelog/2025/11-03.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "2025-11-03" -description: "Feature Deprecation" ---- - -## Feature Deprecation - -### Feature Deprecation - -**QUEST-related tasks removed:** - -* **Deprecated Content:** All QUEST tasks related to submission, validation, and bounty hunting have been taken offline. - diff --git a/en/changelog/2025/11-05.mdx b/en/changelog/2025/11-05.mdx deleted file mode 100644 index 949f05d..0000000 --- a/en/changelog/2025/11-05.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "2025-11-05" -description: "DID Account Upgrade Release & Gas Fee Estimation Fix" ---- - -## DID Account Upgrade Release & Gas Fee Estimation Fix - -### Feature Release - -**DID Account Upgrade: DID V1 officially launched:** - -* **Feature:** Users can now upgrade their existing accounts to a standard DID (Decentralized Identifier) account. -* **Purpose:** The DID serves as the unified on-chain identity and data-lineage key on Codatta, linking a user's task activity, data contributions, and reward distribution across the entire lifecycle with traceability and consistency. - -### Bug Fixes - -**Improved accuracy of gas fee estimation:** - -* **Fix:** Resolved significant inaccuracies in gas fee estimation during asset claiming. - diff --git a/en/changelog/2025/11-11.mdx b/en/changelog/2025/11-11.mdx deleted file mode 100644 index ada53cb..0000000 --- a/en/changelog/2025/11-11.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: "2025-11-11" -description: "Leaderboard Invalid Entry Fix" ---- - -## Leaderboard Invalid Entry Fix - -### Bug Fixes - -**Removed invalid entry in the Leaderboard module:** - -* **Fix:** Removed the "Contribute More" button that incorrectly redirected users to the Crypto Frontier module. - diff --git a/en/changelog/2025/11-24.mdx b/en/changelog/2025/11-24.mdx deleted file mode 100644 index 9ec8e6d..0000000 --- a/en/changelog/2025/11-24.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: "2025-11-24" -description: "Airdrop Season 2 and three new frontiers" ---- - -## Airdrop Season 2 & Three New Frontiers Launch - -### Feature Release - -**The Airdrop Season 2 event is now officially live:** -* **Event Rewards:** A total of 1 million XNY tokens have been allocated for rewards. -* **Event Content:** Includes data submission tasks across three new frontiers, along with other participation tasks (e.g., social media tasks). - -**Three new frontiers have been added to the homepage:** -* **Advanced Physics Questions Frontier:** Designed for physics professionals to submit high-difficulty physics questions that AI models cannot answer correctly. -* **Crypto & Stock Information Frontier:** Aims to provide AI with reliable information related to cryptocurrency and stock investment decisions. -* **Real-world Photo Frontier:** Encourages contributors to provide real-life photos with annotated metadata to enhance AI's understanding of the physical world. diff --git a/en/changelog/2025/12-04.mdx b/en/changelog/2025/12-04.mdx deleted file mode 100644 index 70a640a..0000000 --- a/en/changelog/2025/12-04.mdx +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: "2025-12-04" -description: "Lock-up Rewards for Campaign Payouts" ---- - -## Lock-up Rewards for Campaign Payouts - -### Feature Release - -**Lock-up rewards for campaign payouts are now live:** - -* **Scope:** Campaign owners can enable a 3-month (T+90) lock-up rule for rewards from Airdrops, Frontiers and other campaigns. -* **Flow:** Rewards first land in the user's on-platform balance. From the Assets page, users click Lock now to send them into the lock-up contract; once the 3-month period ends, unlocked rewards appear under Lock-up detail and can be claimed to the wallet in one click. -* **Value:** Helps high-reward campaigns reduce instant sell pressure and better reward users who stay in the ecosystem. - From 0305792818234591624832224373578fc25f2ada Mon Sep 17 00:00:00 2001 From: chababa Date: Sun, 28 Dec 2025 21:41:33 +0800 Subject: [PATCH 11/26] doc: codatta did --- cn/products/codatta-did.mdx | 101 ++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 cn/products/codatta-did.mdx diff --git a/cn/products/codatta-did.mdx b/cn/products/codatta-did.mdx new file mode 100644 index 0000000..f397eef --- /dev/null +++ b/cn/products/codatta-did.mdx @@ -0,0 +1,101 @@ +--- +title: "Codatta去中心化身份(Codatta DID)" +description: "Codatta DID是一个去中心化数字身份系统,让用户自主管理身份信息,并灵活授权与验证。" +--- + +## 概述 + +Codatta DID是一个去中心化数字身份系统,它为用户提供用户自主控制的去中心化身份,并允许用户进行身份信息的授权、验证和撤销。 + +Codatta DID为Codatta生态提供必要的支持,但其并非与Codatta绑定,而是被设计为一个可共享的去中心化数字身份基础设施,任何人都可以独立使用。 + +在Codatta中,Codatta DID被用作生态的唯一身份标识,用于平台的登录授权验证,同时作为数据指纹与数据血缘可信、可追溯的基础标识,同时也是在数据可用性与数据隐私保护机制中,用于主体识别与访问鉴权的关键组件。 + +## 背景 + +**现有身份系统**:随着应用形态从单一平台向多链,多平台等多系统协同的方式演进,现有身份体系逐渐暴露出结构性问题:身份割裂,缺乏统一标识;身份依赖平台,用户缺乏自主权;授权模型僵化,难以适配复杂场景;身份与系统实现强耦合,扩展成本高。这些问题导致现有身份系统难以支撑长期、跨环境的身份使用需求。 + +**去中心化身份**:去中心化身份是由传统的中心化身份演化而来。中心化身份,是由中心化机构控制的,比如居民身份证是政府控制的。而去中心化身份,最大的特点就在于它可以完全由个体自己控制,身份的创建和管理都不依赖于某个中心化的机构。 + +**W3C DID**:自去中心化身份的概念提出以来,经过多年的研究与标准化推进,W3C 的 DID 规范整合了早期去中心化身份的相关探索,现已被广泛采用,成为 DID 体系的基础标准。 +W3C DID规定每个用户有一个ID用于标识其身份,同时用一个Document记录用户身份信息和相关的一系列数据,比如授权信息,可以用于第三方的登录授权验证,这个设计使得围绕该用户的可信交互成为可能。 + +## Codatta DID + +Codatta DID是W3C DID规范的一个实例,通过自定义的Codatta DID method为用户提供跨链的、可扩展的去中心化身份基础设施,从而应对现有身份系统带来的挑战。 + +```mermaid +graph TB + %%Codatta DID%% + + subgraph Contracts + C1[DID Registrar] --> C2[DID Registry] + C2 --> O1 + end + + subgraph Offchain Storage Infrastructure + O1[DID Indexer] --> O2[Storage] + end + + O2 --> RESOLVER + RESOLVER[DID Resolver] --> A1[Login] + RESOLVER[DID Resolver] --> A2[DID Explorer] +``` + +**DID Registrar** + +Codatta DID注册入口,负责注册DID。 + +注册的逻辑不只一种,也不是一次性就能确定的,比如最开始的时候是白名单注册,后面需要改为在创建DID的时候收取一定费用,或者持有指定NFT可免费,最后改为免费注册等。为了保证这种业务模式的可行性,同时保持DID Registry的稳定性,我们将注册的功能独立出来,新增注册逻辑,只需要开发一个新的DID Registrar即可,不会对现有的功能有任何影响。 + +**DID Registry** + +Codatta DID的核心业务实现,包括DID的创建、管理员管理、属性的更新、所有者转移等。所有的操作都会触发相应的事件,链下模块接收到事件之后,可以执行相应的处理逻辑。 + +此外,该合约记录了完整的DID Document数据,用户可以直接从合约中查询其DID Document。 + +**Storage** + +链下数据存储模块,主要用于存储DID Document,也可以根据业务需求存储其他数据。 + +链下存储的数据便于扩展,可读性更强,适用高频交互场景,支持链下存储能够提升DID的可扩展性和易用性。 + +**DID Indexer** + +监听链上DID事件,将DID Document数据更新到Storage中。 + +任何开发者都可以根据Codatta DID method构建自己的Indexer,以支持自己项目的业务功能。 + +**DID Resolver** + +DID解析服务,根据did identifier,查询did document,并使用JSON-LD格式返回。 + +**DID Explorer** + +在DID的基础上开发的浏览器,与blockchain explorer类似,可以方便用户查询DID相关的信息。DID Explorer需要在DID Resolver的基础上进行开发,需要根据@context进行语义解析。 + +**Login** + +开放的登录接口,使得任何平台都可以接入Codatta DID身份系统,并通过其授权验证机制进行登录 + +## 核心价值 + +**统一、跨链的身份标识** + +Codatta DID 为每个身份主体提供全局唯一的 DID,与具体链或应用无关。 + +在Codatta DID中,用户拥有全局的身份标识:did:codatta:\,例如did:codatta:bcf71098-397d-4741-a4b6-851384a9d48a。 + +这个设计解决了传统多链、多应用环境中身份割裂的问题,使同一用户在不同系统中可以被一致识别,形成连续的身份历史。 + +**用户自主控制,降低平台依赖** + +Codatta DID 的身份由用户生成并掌控,系统仅负责解析和验证。 + +用户不依赖包括Codatta在内的中心化平台,身份及其关联关系可以在不同应用间自由迁移,从而消除平台锁定风险,保障长期可用性。 + +**灵活授权模型,支持多场景** + +通过 Codatta DID method,身份文档可承载细粒度的授权信息,包括不同范围、期限和可撤销的权限。 + +这一机制使身份能够适配多种使用场景,从简单登录验证,到跨系统协作和自动化授权,解决了传统身份体系授权僵化的问题。 \ No newline at end of file From ba20994478cb9c7eb873cdc747e8d27b92aadbcf Mon Sep 17 00:00:00 2001 From: chababa Date: Sun, 28 Dec 2025 22:36:42 +0800 Subject: [PATCH 12/26] doc: update did --- cn/products/codatta-did.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cn/products/codatta-did.mdx b/cn/products/codatta-did.mdx index f397eef..7638678 100644 --- a/cn/products/codatta-did.mdx +++ b/cn/products/codatta-did.mdx @@ -29,17 +29,17 @@ graph TB %%Codatta DID%% subgraph Contracts - C1[DID Registrar] --> C2[DID Registry] - C2 --> O1 + C1(DID Registrar) --> C2(DID Registry) end subgraph Offchain Storage Infrastructure - O1[DID Indexer] --> O2[Storage] + O1(DID Indexer) --> O2[(Storage)] end + C2 --> O1 O2 --> RESOLVER - RESOLVER[DID Resolver] --> A1[Login] - RESOLVER[DID Resolver] --> A2[DID Explorer] + RESOLVER(DID Resolver) --> A1(Login) + RESOLVER(DID Resolver) --> A2(DID Explorer) ``` **DID Registrar** From d72519b2e58a1389e7c3959cf2793ea903d3ddab Mon Sep 17 00:00:00 2001 From: Yi Zhang Date: Tue, 30 Dec 2025 19:25:14 +0800 Subject: [PATCH 13/26] =?UTF-8?q?Update=20roadmap=20(2026=E2=80=932028)=20?= =?UTF-8?q?and=20sync=20CN/KO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cn/community/roadmap.mdx | 50 ++++++++++++++---- en/community/roadmap.mdx | 108 ++++++++++++++++++++++++++++++++++++--- ko/community/roadmap.mdx | 106 +++++++++++++++++++++++++++++++++++--- 3 files changed, 240 insertions(+), 24 deletions(-) diff --git a/cn/community/roadmap.mdx b/cn/community/roadmap.mdx index 1bf4eeb..08cd103 100644 --- a/cn/community/roadmap.mdx +++ b/cn/community/roadmap.mdx @@ -1,20 +1,52 @@ --- title: "路线图 (Roadmap)" -description: "4 年建设计划" +description: "3 年建设计划" --- -## Codatta 社区路线图(2025-2028) +## Codatta 社区路线图(2026–2028) + +本路线图概述了未来三年的执行重点:从让混合协议在生产环境端到端跑通,到去中心化核心闭环,再到成为知识经济的底层基础设施。 + +**术语:** **CF** = Contribution Fingerprint;**TNPL** = Train‑Now‑Pay‑Later。 + +### 概览 + +- **2026 — Forge**:打通混合协议端到端链路,并接入真实业务场景。 +- **2027 — Mesh**:去中心化核心闭环,并实现跨链/多运营方/多代理生态的互操作。 +- **2028 — Nexus**:以可审计的端到端链上谱系 + 链上 TNPL + 自主演进,成为知识经济的底层骨干。 --- -| 阶段 | 目标和关键交付(包括产品推出) | 社区参与/节点策略 | 关键协议指标 | -| ------------------------------------ | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| **2025 – 资产化和版税准备** | 启动注册表、质押即信心、声誉、支付轨道;试点 API/SDK;推出 50–100 个主题 | 在主要地理位置启动区域俱乐部(节点)以管理入职、同行支持、本地活动 | 活跃主题数量;版税支付量;质押在数据/贡献者的总数;平均信心分数;活跃数据访问调用数量 | -| **2026 – 扩大参与和业务整合** | 部署投资组合包装和分割数据资产模块;SDK v2;上线商业客户和消费 API | 扩展节点网络(20+ 区域);培训节点负责人;运行本地活动、冲刺、黑客马拉松 | 流向贡献者的收入百分比;创建和交易的投资组合数量;数据使用/请求量;高信心数据的保留;查询的延迟/响应时间 | -| **2027 – 去中心化和互操作性** | 协议 v3:模块化、跨链基础设施、运营商去中心化、链上治理和库 | 将节点转变为本地 DAO/子 DAO 角色;启用节点提案和监督;联邦节点协调 | 治理去中心化(如非基金会投票百分比、中本聪系数);独立运营商数量;跨链吞吐量;治理提案数量;协议正常运行时间/可用性 | -| **2028 – 知识经济骨干** | 协议 v4:自主升级、数据市场成熟、AI-代理集成、机构投资组合启动 | 节点完全融入生态系统治理;节点子治理(主题分叉、策展人选举);全球节点协作 | 主题总数;贡献者数量;协议 ARR;每贡献者平均版税;AI 集成数量;链上升级频率;跨链的协议可组合性 | +## 2026 — **Forge** + +让混合协议 *端到端跑通*,并接入真实企业/业务。 + +### 关键里程碑 + +**协议成熟度** + +* 交付 **资产化 → CF 创建 → 链上锚定**:自动筛查(启发式 + 代理语义检查),必要时采用批量 Merkle 锚定。([数据谱系](/cn/products/data-lineage)) +* 生产化 **混合交付栈**:去中心化真源 + 云端热路径 + 安全计算(技术栈待选),通过 Access Gateway 对外提供能力。([存储、计算与服务](/cn/core-systems/storage-compute-serving)) +* 生产化 **访问控制与计量**:版本化访问策略、义务(例如脱敏/抽样)以及用于计费/版税的签名使用事件(支持 TNPL)。([访问控制与计量](/cn/core-systems/access-control-metering)) +* 构建 **归因与追踪平台**(不一定完全上链):高速谱系查询(检索/差异/导出)、批量访问与推理/使用追踪,使全周期归因可回放。([数据组装](/cn/core-systems/data-assembly)) +* 交付 **所有权与版税**:可分割所有权证明/回执、快照哈希、挑战窗口;由 Royalty Engine 做确定性分润(默认稳定币)。([所有权证明](/cn/core-systems/tokenized-ownership-proofs)) +* 将 **$XNY 的用途**纳入真实生产路径:Gas、任务发起押金、计量访问、所有权交易;分润保持灵活(稳定币 + 主流币)以降低买方摩擦。([代币用途](/cn/protocol-token/token-utility)) +* 为 **组合打包、分割模块与 SDK(0.x 试点)**打地基,并与精选创业团队开展试点。 + +**人类 + 代理网络** + +* 推出 **身份阶梯 + 人才索引**(DID 身份、凭证/证明与验证网络),支持专家赛道与可检索的人才发现——同时避免过度暴露隐私。([身份](/cn/core-systems/identity)) +* 将贡献者 **Pods 扩展到 10+ 个关键区域**,作为入门、质量文化与本地增长闭环的运营层。 +* 让 **代理在生产中可用**(预标注、分流、验证),并开始产出足够的证据轨迹,为其后续成为“第一类参与者”打基础。([ERC‑8004 + x402](/cn/ecosystem-integration/adopting-erc-8004-x402-essentials)) + +**资产经济与 GTM** + +* 将 **数据谱系**作为默认叙事 UI:资产化 → 组装 → 采用 → 分润,并把“采用”与真实分润事件连接起来。([数据谱系](/cn/products/data-lineage)) +* 为 API 与代理端点启用 **按请求付费**(x402),让计量 → 分润路由成为原生能力而非后贴补。([ERC‑8004 + x402](/cn/ecosystem-integration/adopting-erc-8004-x402-essentials)) + +**可实现的用例** -න් +一家创业公司调用 Codatta 端点,收到 `402`,支付一次后重试。请求被计量,与某个数据集版本绑定,并记录允许它的策略。数月后,当产品收入到账,Royalty Engine 回放同样的事件并把钱分给正确的人——贡献者、验证者、出资者——无需争论。 ### 沟通和参与原则 diff --git a/en/community/roadmap.mdx b/en/community/roadmap.mdx index 3a8b3a0..2ed820c 100644 --- a/en/community/roadmap.mdx +++ b/en/community/roadmap.mdx @@ -1,18 +1,109 @@ --- title: "Roadmap" -description: "4-year building plan" +description: "3-year building plan" --- -## Codatta Community Roadmap (2025-2028) +## Codatta Community Roadmap (2026–2028) + +This roadmap lays out the next three years of execution—from making the hybrid protocol work end-to-end in production, to decentralizing the core loop, to becoming the knowledge-economy backbone. + +**Terms:** **CF** = Contribution Fingerprint; **TNPL** = Train‑Now‑Pay‑Later. + +### Summary + +- **2026 — Forge**: Make the hybrid protocol work end-to-end and plug into real businesses. +- **2027 — Mesh**: Decentralize the core loop and make it interoperable across chains, operators, and agent ecosystems. +- **2028 — Nexus**: Become the knowledge-economy backbone with end-to-end auditable lineage, on-chain TNPL, and autonomous evolution. --- -| Phase | Goals & Key Deliverables (incl. product rollouts) | Community Engagement / Pod Strategy | Key Protocol Metrics | -| ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **2025 – Assetification & Royalty Readiness** | Launch registry, staking-as-confidence, reputation, payout rails; pilot APIs/SDKs; roll out 50–100 topics | Kick off regional clubs (pods) in major geographies to manage onboarding, peer support, local campaigns | Number of topics live; volume of royalty payouts; total staked on data/contributors; average confidence scores; number of active data access calls | -| **2026 – Scale Participation & Business Integration** | Deploy portfolio packaging & fractional data asset modules; SDK v2; onboard business clients and consumption APIs | Expand pod network (20+ regions); train pod leads; run local events, sprints, hackathons | % of revenue flowing to contributors; number of portfolios created & traded; data usage / request volume; retention of high-confidence data; latencies / response times for queries | -| **2027 – Decentralization & Interoperability** | Protocol v3: modular, cross-chain infrastructure, operator decentralization, on-chain governance & treasury | Transition pods into local DAO/sub-DAO roles; enable pod proposals & supervision; federated pod coordination | Governance decentralization (e.g. % non-foundation votes, Nakamoto coefficient); number of independent operators; cross-chain throughput; governance proposals count; protocol uptime / availability | -| **2028 – Knowledge Economy Backbone** | Protocol v4: autonomous upgrades, data marketplace maturity, AI-agent integration, institutional portfolio launch | Pods fully integrated into ecosystem governance; pod subgovernance (topic forks, curator elections); global pod collaboration | Total topics; contributor count; ARR of protocol; average royalty per contributor; number of AI integrations; on-chain upgrade frequency; protocol composability across chains | +## 2026 — **Forge** + +Make the hybrid protocol *work end-to-end* and plug into real businesses. + +### Key milestones + +**Protocol maturity** + +* Ship **Assetification → CF creation → on-chain anchoring** with automated screening (heuristics + agent semantic checks) and batched Merkle anchoring where needed. ([Data Lineage](/en/products/data-lineage)) +* Productionize the **hybrid delivery stack**: decentralized source-of-truth + cloud hot paths + secure compute (stack to be selected) behind an Access Gateway. ([Storage, Compute & Serving](/en/core-systems/storage-compute-serving)) +* Productionize **Access Control & Metering**: versioned access policies, obligations (e.g., masking/sampling), and signed usage events for billing/royalties (TNPL supported). ([Access Control & Metering](/en/core-systems/access-control-metering)) +* Build the **attribution + tracking platform** (not necessarily fully on-chain): fast lineage lookups (search/diffs/export), batch access, and inference/usage tracking—so full-cycle attribution is replayable. ([Data Assembly](/en/core-systems/data-assembly)) +* Ship **Ownership + Royalties**: fractional ownership proofs/receipts, snapshot hashes, challenge windows; deterministic Royalty Engine payouts (stablecoins default). ([Tokenized Ownership Proofs](/en/core-systems/tokenized-ownership-proofs)) +* Put **$XNY utility** into real production paths: gas, task launch deposits, metered access, ownership trades; keep payouts flexible (stablecoins + majors) to reduce buyer friction. ([Token Utility](/en/protocol-token/token-utility)) +* Lay the groundwork for **portfolio packaging, fractional modules, and SDK (0.x pilots)** with select startup partners. + +**Network of humans + agents** + +* Roll out the **identity ladder + talent index** (DID identities, attestations, and a verification network), enabling expert tracks and reliable talent discovery—without overexposing privacy. ([Identity](/en/core-systems/identity)) +* Scale contributor **pods to 10+ pivotal regions** as the operating layer for onboarding, QA culture, and local growth loops. +* Make **agents useful in production** (pre-labeling, triage, validation), and start emitting the right evidence trails so they can later become fully “first-class” participants. ([ERC-8004 + x402](/en/ecosystem-integration/adopting-erc-8004-x402-essentials)) + +**Asset economy & GTM** + +* Launch **Data Lineage** as the default story UI: Assetification → Assembling → Adoption → Payouts; connect adoption to real payout events. ([Data Lineage](/en/products/data-lineage)) +* Enable **pay-per-request** for APIs and agent endpoints (x402) so metering → payout routing is native, not bolted on. ([ERC-8004 + x402](/en/ecosystem-integration/adopting-erc-8004-x402-essentials)) + +**Use case enabled** + +A startup hits a Codatta endpoint, gets a `402`, pays once, and retries. The request is metered, tied to a dataset version, and logged with the policy that allowed it. Months later, when their product revenue lands, the Royalty Engine replays the same events and pays the right people—contributors, validators, backers—without debate. + +--- + +## 2027 — **Mesh** + +Decentralize the core loop and make it interoperable across chains, operators, and agent ecosystems. + +### Key milestones + +**Protocol maturity** + +* Ship **Protocol v2: modular + cross-chain + operator decentralization + on-chain governance/treasury**. +* Build and test the **dataset + ownership marketplace** (policy-gated): listings, bundles, transfers, and ownership fractions—so real demand can start forming. ([Ownership, Royalties & Liquidity](/en/business/ownership-liquidity)) +* Run **governance pilots** on real knobs (market rules, royalty bands, split templates, access rules, staking parameters, task launch deposit sizing). ([Governance and Treasury](/en/business/governance-treasury)) +* Push privacy forward: **selective disclosure** by default; pilot **anonymous credentials / ZK** where it unlocks regulated demand. ([Identity](/en/core-systems/identity)) + +**Network of humans + agents** + +* Transition pods toward **DAO/sub-DAO roles** (local proposals + supervision, federated coordination). +* Make agents truly first-class via **ERC-8004 identity/reputation/validation registries** and map their work to ownership/royalties. ([ERC-8004 + x402](/en/ecosystem-integration/adopting-erc-8004-x402-essentials)) + +**Asset economy & GTM** + +* Launch the **dataset + ownership marketplace** (still policy-gated), using listings, bundles, and secondary markets where appropriate; $XNY for listing/settlement, stablecoins for payouts. ([Ownership, Royalties & Liquidity](/en/business/ownership-liquidity)) +* Deepen “plug-in backend” distribution: APIs + on-chain hooks + identity adapters so existing platforms can adopt Codatta without re-platforming. ([Governance and Treasury](/en/business/governance-treasury)) +* Take **portfolio packaging, fractional modules, and SDK** into production—supporting packaging contributions and revenue-share entitlements for startups at scale. + +**Use case enabled** + +A research group in Seoul and an enterprise team in Dubai both contribute to the same topic through local pods. A KYB-triage agent, registered and scored like a real participant, pre-labels the queue; expert humans confirm edge cases. Liquidity starts to form: a backer buys a fraction in a high-performing asset bundle, and payouts flow to whoever holds the fraction at snapshot time. + +--- + +## 2028 — **Nexus** + +Become the knowledge-economy backbone: end-to-end on-chain lineage + on-chain TNPL + autonomous evolution. + +### Key milestones + +**Protocol maturity** + +* Ship **Protocol v3**: autonomous upgrades, marketplace maturity, deep AI-agent integration, and institutional portfolio rails. +* Move to **end-to-end auditable lineage** across the full lifecycle (CFs → assets → dataset versions → adoption → payout), minimizing trust gaps and maximizing replayability. ([Data Assembly](/en/core-systems/data-assembly)) +* Put **TNPL fully on-chain**: usage metering covers training + downstream inference of derived models; settlement flows by rule, not negotiation. ([Royalty Economy](/en/quick-guide/royalty-economy)) +* Governance becomes real control: community tunes **reputation weights** and other protocol parameters with transparent versions and audit trails. ([Reputation](/en/core-systems/reputation)) + +**Network of humans + agents** + +* Agents become **investable, composable actors** with shared trust signals; humans shift toward high-skill review, adjudication, and frontier expertise. ([ERC-8004 + x402](/en/ecosystem-integration/adopting-erc-8004-x402-essentials)) + +**Asset economy & GTM** + +* Codatta is the default **provenance + policy + metering + payouts backend** across many ecosystems; open distribution stays broad, paid inventory compounds. ([Royalty Economy](/en/quick-guide/royalty-economy)) + +**Use case enabled** + +A developer trains under TNPL, ships a model, and sells an API worldwide. Every meaningful request is metered, and royalties stream continuously to the people and agents whose work made the model possible. Nobody argues over attribution—lineage answers it. The protocol upgrades itself through governed, replayable rules, while the ecosystem keeps building on top. --- @@ -39,3 +130,4 @@ description: "4-year building plan" * We aim to **build in public**, where transparency fosters trust, invites constructive feedback, and holds us accountable to our community. * We view **token holders, contributors, and participants** as **stakeholders** — like shareholders — and believe visibility helps align incentives, deepen commitment, and elevate long-term thinking. + diff --git a/ko/community/roadmap.mdx b/ko/community/roadmap.mdx index a12c85d..7a5a50f 100644 --- a/ko/community/roadmap.mdx +++ b/ko/community/roadmap.mdx @@ -1,17 +1,109 @@ --- title: "로드맵 (Roadmap)" +description: "3년 구축 계획" --- -## Codatta 커뮤니티 로드맵 (2025-2028) +## Codatta 커뮤니티 로드맵 (2026–2028) + +이 로드맵은 향후 3년의 실행 우선순위를 정리합니다. 하이브리드 프로토콜을 프로덕션에서 end-to-end로 작동시키는 것부터, 핵심 루프의 분산화, 그리고 지식 경제의 백본으로 확장하는 과정까지를 담습니다. + +**용어:** **CF** = Contribution Fingerprint; **TNPL** = Train‑Now‑Pay‑Later. + +### 요약 + +- **2026 — Forge**: 하이브리드 프로토콜의 end-to-end 루프를 프로덕션에서 완성하고, 실제 비즈니스에 연결합니다. +- **2027 — Mesh**: 핵심 루프를 분산화하고, 체인/운영자/에이전트 생태계 전반에서 상호운용되게 만듭니다. +- **2028 — Nexus**: 감사 가능한 end-to-end 온체인 계보, 온체인 TNPL, 자율적 진화를 통해 지식 경제 백본으로 자리잡습니다. + +--- + +## 2026 — **Forge** + +하이브리드 프로토콜을 *end-to-end로 작동*시키고, 실제 비즈니스에 플러그인합니다. + +### 핵심 마일스톤 + +**프로토콜 성숙도** + +* **자산화 → CF 생성 → 온체인 앵커링**을 출하합니다: 자동 스크리닝(휴리스틱 + 에이전트 시맨틱 체크)과 필요 시 배치 Merkle 앵커링을 포함합니다. ([데이터 계보](/ko/products/data-lineage)) +* **하이브리드 딜리버리 스택**을 프로덕션화합니다: 탈중앙 소스오브트루스 + 클라우드 핫패스 + 보안 컴퓨트(스택은 추후 선택)를 Access Gateway 뒤에서 제공합니다. ([스토리지·컴퓨트·서빙](/ko/core-systems/storage-compute-serving)) +* **액세스 제어와 계량**을 프로덕션화합니다: 버전 관리되는 접근 정책, 의무사항(예: 마스킹/샘플링), 그리고 과금/로열티를 위한 서명된 사용 이벤트(TNPL 지원). ([액세스 제어와 계량](/ko/core-systems/access-control-metering)) +* **어트리뷰션 + 트래킹 플랫폼**을 구축합니다(완전 온체인일 필요 없음): 빠른 계보 조회(검색/디프/익스포트), 배치 액세스, 추론/사용 트래킹으로 풀 사이클 어트리뷰션을 재현 가능하게 합니다. ([데이터 조립](/ko/core-systems/data-assembly)) +* **소유권 + 로열티**를 출하합니다: 분할 소유권 증명/영수증, 스냅샷 해시, 챌린지 윈도우; Royalty Engine의 결정적 분배(기본은 스테이블코인). ([토큰화된 소유권 증명](/ko/core-systems/tokenized-ownership-proofs)) +* **$XNY 유틸리티**를 실제 프로덕션 경로에 넣습니다: 가스, 태스크 런치 디파짓, 계량 기반 접근, 소유권 거래; 구매자 마찰을 줄이기 위해 분배는 유연하게(스테이블코인 + 메이저) 유지합니다. ([토큰 유틸리티](/ko/protocol-token/token-utility)) +* **포트폴리오 패키징, 분할 모듈, SDK(0.x 파일럿)**의 기반을 마련하고, 선별된 스타트업 파트너와 파일럿을 진행합니다. + +**휴먼 + 에이전트 네트워크** + +* **아이덴티티 래더 + 탤런트 인덱스**(DID 아이덴티티, 어테스테이션, 검증 네트워크)를 롤아웃해 전문가 트랙과 신뢰 가능한 탤런트 디스커버리를 가능하게 합니다—프라이버시는 과도하게 노출하지 않습니다. ([아이덴티티](/ko/core-systems/identity)) +* 온보딩, QA 문화, 로컬 그로스 루프의 운영 레이어로서 기여자 **팟을 10+ 핵심 지역**으로 확장합니다. +* **에이전트를 프로덕션에서 유용하게** 만듭니다(프리라벨링, 트리아지, 밸리데이션). 이후 “1급 참여자”가 될 수 있도록 적절한 증거 트레일을 배출하기 시작합니다. ([ERC‑8004 + x402](/ko/ecosystem-integration/adopting-erc-8004-x402-essentials)) + +**자산 경제 & GTM** + +* **데이터 계보**를 기본 스토리 UI로 론치합니다: 자산화 → 조립 → 채택 → 분배; 채택을 실제 분배 이벤트와 연결합니다. ([데이터 계보](/ko/products/data-lineage)) +* API 및 에이전트 엔드포인트에 **요청당 과금**(x402)을 활성화해, 계량 → 분배 라우팅이 “붙이는 기능”이 아니라 네이티브가 되게 합니다. ([ERC‑8004 + x402](/ko/ecosystem-integration/adopting-erc-8004-x402-essentials)) + +**가능해진 유스케이스** + +스타트업이 Codatta 엔드포인트를 호출하면 `402`를 받고, 한 번 결제한 뒤 재시도합니다. 요청은 계량되고 데이터셋 버전에 묶이며, 허용한 정책과 함께 로그에 남습니다. 몇 달 뒤 제품 매출이 들어오면, Royalty Engine은 동일한 이벤트를 재생해 기여자·검증자·백커에게 정확히 분배합니다—논쟁 없이. + +--- + +## 2027 — **Mesh** + +핵심 루프를 분산화하고, 체인/운영자/에이전트 생태계 전반에서 상호운용되게 만듭니다. + +### 핵심 마일스톤 + +**프로토콜 성숙도** + +* **프로토콜 v2**를 출하합니다: 모듈형 + 크로스체인 + 운영자 분산화 + 온체인 거버넌스/금고. +* **데이터셋 + 소유권 마켓플레이스**를 구축/테스트합니다(폴리시 게이팅): 리스팅, 번들, 전송, 소유권 지분—실수요가 형성되도록 합니다. ([소유권, 로열티 및 유동성](/ko/business/ownership-liquidity)) +* **거버넌스 파일럿**을 실제 노브로 돌립니다(마켓 룰, 로열티 밴드, 스플릿 템플릿, 액세스 룰, 스테이킹 파라미터, 태스크 런치 디파짓 사이징). ([거버넌스와 금고](/ko/business/governance-treasury)) +* 프라이버시를 한 단계 끌어올립니다: 기본은 **선택적 공개**; 규제 수요를 여는 곳에서 **익명 자격증명/ZK**를 파일럿합니다. ([아이덴티티](/ko/core-systems/identity)) + +**휴먼 + 에이전트 네트워크** + +* 팟을 **DAO/서브DAO 역할**로 전환합니다(로컬 제안 + 감독, 연합형 코디네이션). +* **ERC‑8004 아이덴티티/평판/밸리데이션 레지스트리**로 에이전트를 진정한 1급 참여자로 만들고, 그 작업을 소유권/로열티에 매핑합니다. ([ERC‑8004 + x402](/ko/ecosystem-integration/adopting-erc-8004-x402-essentials)) + +**자산 경제 & GTM** + +* **데이터셋 + 소유권 마켓플레이스**를 론치합니다(여전히 폴리시 게이팅): 리스팅, 번들, 2차 시장을 적절히 사용; 리스팅/정산에는 $XNY, 분배에는 스테이블코인. ([소유권, 로열티 및 유동성](/ko/business/ownership-liquidity)) +* “플러그인 백엔드” 디스트리뷰션을 강화합니다: API + 온체인 훅 + 아이덴티티 어댑터로 기존 플랫폼이 리플랫폼 없이 Codatta를 채택하게 합니다. ([거버넌스와 금고](/ko/business/governance-treasury)) +* **포트폴리오 패키징, 분할 모듈, SDK**를 프로덕션으로 끌어올려, 스타트업 스케일의 패키징 기여와 매출 공유 엔타이틀먼트를 지원합니다. + +**가능해진 유스케이스** + +서울의 연구 그룹과 두바이의 엔터프라이즈 팀이 로컬 팟을 통해 같은 토픽에 기여합니다. 실체로 등록되고 스코어링되는 KYB‑트리아지 에이전트가 큐를 프리라벨링하고, 전문가 인간이 엣지 케이스를 확정합니다. 유동성이 형성되기 시작합니다: 백커가 성과 좋은 에셋 번들의 일부 지분을 매수하고, 스냅샷 시점의 보유자에게 분배가 흐릅니다. --- -| 단계 | 목표 & 핵심 딜리버러블(프로덕트 롤아웃 포함) | 커뮤니티 참여 / 팟(Pod) 전략 | 핵심 프로토콜 지표 | -| ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| **2025 – 자산화 & 로열티 준비** | 레지스트리, 신뢰로서의 스테이킹, 평판, 분배 레일 론치; API/SDK 파일럿; 50–100개 토픽 롤아웃 | 주요 지역의 지역 클럽(팟) 킥오프: 온보딩/피어 지원/로컬 캠페인 운영 | 활성 토픽 수; 로열티 분배량; 데이터/기여자 스테이킹 총액; 평균 신뢰 점수; 활성 데이터 접근 호출 수 | -| **2026 – 참여 스케일 & 비즈니스 통합** | 포트폴리오 패키징 & 분수형 데이터 자산 모듈 배포; SDK v2; 비즈니스 클라이언트/소비 API 온보딩 | 팟 네트워크 확장(20+ 지역); 팟 리드 양성; 로컬 이벤트/스프린트/해커톤 운영 | 기여자에게 흐르는 매출 비중; 생성/거래된 포트폴리오 수; 데이터 사용/요청량; 고신뢰 데이터 유지율; 질의 레이턴시/응답 시간 | -| **2027 – 분산화 & 상호운용성** | 프로토콜 v3: 모듈형·크로스체인 인프라, 운영자 분산화, 온체인 거버넌스/금고 | 팟을 로컬 DAO/서브DAO 역할로 전환; 팟 제안/감사 활성화; 연합형 팟 조정 | 거버넌스 분산도(예: 비재단 표 수, 나카모토 계수); 독립 운영자 수; 크로스체인 처리량; 거버넌스 제안 수; 프로토콜 가용성 | -| **2028 – 지식 경제 백본** | 프로토콜 v4: 자율 업그레이드, 데이터 마켓 성숙, AI‑에이전트 통합, 기관 포트폴리오 론치 | 팟의 생태계 거버넌스 완전 통합; 팟 서브거버넌스(토픽 포크, 큐레이터 선출); 글로벌 팟 협업 | 총 토픽 수; 기여자 수; 프로토콜 ARR; 기여자당 평균 로열티; AI 통합 수; 온체인 업그레이드 빈도; 체인 간 프로토콜 조합성 | +## 2028 — **Nexus** + +감사 가능한 end-to-end 온체인 계보 + 온체인 TNPL + 자율적 진화를 통해 지식 경제 백본이 됩니다. + +### 핵심 마일스톤 + +**프로토콜 성숙도** + +* **프로토콜 v3**를 출하합니다: 자율 업그레이드, 마켓 성숙, 깊은 AI‑에이전트 통합, 기관 포트폴리오 레일. +* **전체 라이프사이클의 end-to-end 감사 가능한 계보**를 완성합니다(CF → 에셋 → 데이터셋 버전 → 채택 → 분배). 트러스트 갭을 줄이고 리플레이 가능성을 극대화합니다. ([데이터 조립](/ko/core-systems/data-assembly)) +* **TNPL을 완전히 온체인**으로 가져옵니다: 사용 계량이 학습 + 파생 모델의 다운스트림 추론까지 커버; 정산은 협상이 아니라 룰로 흐릅니다. ([로열티 이코노미](/ko/quick-guide/royalty-economy)) +* 거버넌스가 실질적 제어가 됩니다: 커뮤니티가 **평판 가중치** 등 프로토콜 파라미터를 투명한 버전과 감사 트레일로 조정합니다. ([평판](/ko/core-systems/reputation)) + +**휴먼 + 에이전트 네트워크** + +* 에이전트는 공유 신뢰 시그널을 가진 **투자 가능·컴포저블 액터**가 되고, 인간은 고난도 리뷰/판정/프런티어 전문성으로 이동합니다. ([ERC‑8004 + x402](/ko/ecosystem-integration/adopting-erc-8004-x402-essentials)) + +**자산 경제 & GTM** + +* Codatta는 여러 생태계에서 **프로비넌스 + 정책 + 계량 + 분배** 백엔드의 기본값이 됩니다. 오픈 디스트리뷰션은 넓게 유지되고, 유료 인벤토리는 복리로 성장합니다. ([로열티 이코노미](/ko/quick-guide/royalty-economy)) + +**가능해진 유스케이스** + +개발자가 TNPL로 학습하고 모델을 출시한 뒤, 전 세계에 API를 판매합니다. 의미 있는 모든 요청이 계량되고, 로열티는 그 모델을 가능하게 한 사람과 에이전트에게 지속적으로 스트리밍됩니다. 어트리뷰션은 논쟁이 아니라 계보가 답합니다. 프로토콜은 거버넌스로 관리되는 재현 가능한 규칙을 통해 스스로 업그레이드하고, 생태계는 그 위에서 계속 구축합니다. --- From 702c516f2ebe2bf3b0bf2ffec084f38bf08613ba Mon Sep 17 00:00:00 2001 From: chababa Date: Wed, 31 Dec 2025 14:57:34 +0800 Subject: [PATCH 14/26] add navigation to Codatta DID --- docs.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs.json b/docs.json index ec1d518..742763f 100644 --- a/docs.json +++ b/docs.json @@ -143,7 +143,8 @@ { "group": "产品 (Products)", "pages": [ - "cn/products/data-lineage" + "cn/products/data-lineage", + "cn/products/codatta-did" ] }, { From 8a67ecf150e19d53a5b27af985bd31d22328eacd Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 31 Dec 2025 16:43:17 +0800 Subject: [PATCH 15/26] Fix: Add missing 2027 Mesh and 2028 Nexus sections to Chinese roadmap --- cn/community/roadmap.mdx | 59 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/cn/community/roadmap.mdx b/cn/community/roadmap.mdx index 08cd103..5a0f9b2 100644 --- a/cn/community/roadmap.mdx +++ b/cn/community/roadmap.mdx @@ -48,6 +48,65 @@ description: "3 年建设计划" 一家创业公司调用 Codatta 端点,收到 `402`,支付一次后重试。请求被计量,与某个数据集版本绑定,并记录允许它的策略。数月后,当产品收入到账,Royalty Engine 回放同样的事件并把钱分给正确的人——贡献者、验证者、出资者——无需争论。 +--- + +## 2027 — **Mesh** + +去中心化核心闭环,并实现跨链/多运营方/多代理生态的互操作。 + +### 关键里程碑 + +**协议成熟度** + +* 交付 **协议 v2**:模块化 + 跨链 + 运营方去中心化 + 链上治理/金库。 +* 构建并测试 **数据集 + 所有权市场**(策略门控):列表、打包、转让与所有权份额——让真实需求开始形成。([所有权、版税与流动性](/cn/business/ownership-liquidity)) +* 在真实控制点上运行 **治理试点**(市场规则、版税区间、分配模板、访问规则、质押参数、任务发起押金规模)。([治理与金库](/cn/business/governance-treasury)) +* 推进隐私:默认 **选择性披露**;在能解锁受监管需求的地方试点 **匿名凭证 / ZK**。([身份](/cn/core-systems/identity)) + +**人类 + 代理网络** + +* 将 Pods 转向 **DAO/子DAO 角色**(本地提案 + 监督、联邦式协调)。 +* 通过 **ERC-8004 身份/声誉/验证注册表**让代理成为真正的第一类参与者,并将其工作映射到所有权/版税。([ERC‑8004 + x402](/cn/ecosystem-integration/adopting-erc-8004-x402-essentials)) + +**资产经济与 GTM** + +* 启动 **数据集 + 所有权市场**(仍为策略门控),适当使用列表、打包与二级市场;$XNY 用于列表/结算,稳定币用于分润。([所有权、版税与流动性](/cn/business/ownership-liquidity)) +* 深化“插件后端”分发:API + 链上钩子 + 身份适配器,让现有平台无需重新平台化即可采用 Codatta。([治理与金库](/cn/business/governance-treasury)) +* 将 **组合打包、分割模块与 SDK** 投入生产——支持大规模创业公司的打包贡献与收入分成权益。 + +**可实现的用例** + +首尔的研究团队与迪拜的企业团队通过本地 Pods 为同一主题做出贡献。一个 KYB 分流代理,像真实参与者一样注册并评分,对队列进行预标注;专家人类确认边缘情况。流动性开始形成:一位出资者购买高绩效资产组合的一部分份额,分润流向快照时持有该份额的人。 + +--- + +## 2028 — **Nexus** + +成为知识经济的底层骨干:端到端链上谱系 + 链上 TNPL + 自主演进。 + +### 关键里程碑 + +**协议成熟度** + +* 交付 **协议 v3**:自主升级、市场成熟、深度 AI 代理集成与机构组合轨道。 +* 转向 **端到端可审计谱系**,覆盖完整生命周期(CF → 资产 → 数据集版本 → 采用 → 分润),最小化信任差距并最大化可回放性。([数据组装](/cn/core-systems/data-assembly)) +* 将 **TNPL 完全上链**:使用计量覆盖训练 + 衍生模型的下游推理;结算按规则流动,而非协商。([版税经济](/cn/quick-guide/royalty-economy)) +* 治理成为真实控制:社区通过透明版本与审计轨迹调整 **声誉权重**与其他协议参数。([声誉](/cn/core-systems/reputation)) + +**人类 + 代理网络** + +* 代理成为具有共享信任信号的 **可投资、可组合参与者**;人类转向高技能审查、裁决与前沿专业知识。([ERC‑8004 + x402](/cn/ecosystem-integration/adopting-erc-8004-x402-essentials)) + +**资产经济与 GTM** + +* Codatta 成为多个生态系统中默认的 **来源 + 策略 + 计量 + 分润后端**;开放分发保持广泛,付费库存复利增长。([版税经济](/cn/quick-guide/royalty-economy)) + +**可实现的用例** + +开发者在 TNPL 下训练,发布模型,并在全球销售 API。每个有意义的请求都被计量,版税持续流向使模型成为可能的人员与代理。没有人争论归属——谱系回答了它。协议通过受治理、可回放的规则自主升级,而生态在其上继续构建。 + +--- + ### 沟通和参与原则 1. **透明度和定期更新** From a183fbd7e2d7b88451e0c499163e844928b684d0 Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 31 Dec 2025 18:25:01 +0800 Subject: [PATCH 16/26] Update: Improve Chinese roadmap translation and formatting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add missing 2027 Mesh and 2028 Nexus sections - Replace markdown bold with HTML strong tags for better rendering - Fix spacing between Chinese and English words - Replace '运营者' with '运营商' - Improve sentence flow and readability - Remove React imports from changelog files (Mintlify compatibility) --- cn/changelog/2025.mdx | 2 -- cn/community/roadmap.mdx | 68 ++++++++++++++++++++-------------------- en/changelog/2025.mdx | 2 -- 3 files changed, 34 insertions(+), 38 deletions(-) diff --git a/cn/changelog/2025.mdx b/cn/changelog/2025.mdx index f98a6ad..d052d64 100644 --- a/cn/changelog/2025.mdx +++ b/cn/changelog/2025.mdx @@ -3,8 +3,6 @@ title: "变更日志" description: "此日志记录了 2025 年 Codatta 所有更新、修复和新功能。" --- -import { useState, useEffect } from 'react'; -
$XNY 的用途 纳入真实生产路径:Gas、任务发起存款、计量访问、所有权交易;分润保持灵活(稳定币 + 主流币)以降低买方摩擦。([代币用途](/cn/protocol-token/token-utility)) +* 为组合打包、分割模块与 SDK(0.x 试点) 奠定基础,并与精选创业团队开展试点。 **人类 + 代理网络** -* 推出 **身份阶梯 + 人才索引**(DID 身份、凭证/证明与验证网络),支持专家赛道与可检索的人才发现——同时避免过度暴露隐私。([身份](/cn/core-systems/identity)) +* 推出**身份分层 + 人才索引机制**(DID 身份、凭证/证明与验证网络),支持专家赛道与可检索的人才发现——同时避免过度暴露隐私。([身份](/cn/core-systems/identity)) * 将贡献者 **Pods 扩展到 10+ 个关键区域**,作为入门、质量文化与本地增长闭环的运营层。 -* 让 **代理在生产中可用**(预标注、分流、验证),并开始产出足够的证据轨迹,为其后续成为“第一类参与者”打基础。([ERC‑8004 + x402](/cn/ecosystem-integration/adopting-erc-8004-x402-essentials)) +* 让**代理在生产中可用**(预标注、分流、验证),并开始产出足够的证据轨迹,为其后续成为"第一类参与者"打基础。([ERC‑8004 + x402](/cn/ecosystem-integration/adopting-erc-8004-x402-essentials)) **资产经济与 GTM** -* 将 **数据谱系**作为默认叙事 UI:资产化 → 组装 → 采用 → 分润,并把“采用”与真实分润事件连接起来。([数据谱系](/cn/products/data-lineage)) -* 为 API 与代理端点启用 **按请求付费**(x402),让计量 → 分润路由成为原生能力而非后贴补。([ERC‑8004 + x402](/cn/ecosystem-integration/adopting-erc-8004-x402-essentials)) +* 将**数据谱系**作为默认叙事 UI:资产化 → 组装 → 采用 → 分润,并把"采用"与真实分润事件连接起来。([数据谱系](/cn/products/data-lineage)) +* 为 API 与代理端点启用**按请求付费**(x402),让计量 → 分润路由成为原生能力而非后贴补。([ERC‑8004 + x402](/cn/ecosystem-integration/adopting-erc-8004-x402-essentials)) **可实现的用例** @@ -52,58 +52,58 @@ description: "3 年建设计划" ## 2027 — **Mesh** -去中心化核心闭环,并实现跨链/多运营方/多代理生态的互操作。 +将核心闭环去中心化,并实现跨链、跨运营商、跨 Agent 生态的互操作。 ### 关键里程碑 **协议成熟度** -* 交付 **协议 v2**:模块化 + 跨链 + 运营方去中心化 + 链上治理/金库。 -* 构建并测试 **数据集 + 所有权市场**(策略门控):列表、打包、转让与所有权份额——让真实需求开始形成。([所有权、版税与流动性](/cn/business/ownership-liquidity)) -* 在真实控制点上运行 **治理试点**(市场规则、版税区间、分配模板、访问规则、质押参数、任务发起押金规模)。([治理与金库](/cn/business/governance-treasury)) -* 推进隐私:默认 **选择性披露**;在能解锁受监管需求的地方试点 **匿名凭证 / ZK**。([身份](/cn/core-systems/identity)) +* 交付 **Protocol v2**:模块化 + 跨链 + 运营商去中心化 + 链上治理/金库。 +* 构建并测试**数据集 + 所有权市场**(策略门控):支持上架、打包、转让与所有权分割,让真实需求开始形成。([所有权、版税与流动性](/cn/business/ownership-liquidity)) +* 在真实参数上运行**治理试点**:市场规则、版税区间、分成模板、访问规则、质押参数、任务发起存款规模等。([治理与金库](/cn/business/governance-treasury)) +* 推进**隐私能力**:默认选择性披露;在能解锁受监管需求的场景下,试点匿名凭证 / ZK。([身份](/cn/core-systems/identity)) **人类 + 代理网络** -* 将 Pods 转向 **DAO/子DAO 角色**(本地提案 + 监督、联邦式协调)。 -* 通过 **ERC-8004 身份/声誉/验证注册表**让代理成为真正的第一类参与者,并将其工作映射到所有权/版税。([ERC‑8004 + x402](/cn/ecosystem-integration/adopting-erc-8004-x402-essentials)) +* 将 Pods 逐步转向 **DAO/sub-DAO 角色**(本地提案 + 监督,联邦式协作)。 +* 让 Agent 成为真正的第一类参与者:通过 **ERC-8004 身份 / 声誉 / 验证注册表**,将其工作映射到所有权与版税之中。([ERC‑8004 + x402](/cn/ecosystem-integration/adopting-erc-8004-x402-essentials)) **资产经济与 GTM** -* 启动 **数据集 + 所有权市场**(仍为策略门控),适当使用列表、打包与二级市场;$XNY 用于列表/结算,稳定币用于分润。([所有权、版税与流动性](/cn/business/ownership-liquidity)) -* 深化“插件后端”分发:API + 链上钩子 + 身份适配器,让现有平台无需重新平台化即可采用 Codatta。([治理与金库](/cn/business/governance-treasury)) -* 将 **组合打包、分割模块与 SDK** 投入生产——支持大规模创业公司的打包贡献与收入分成权益。 +* 上线**数据集 + 所有权市场**(仍为策略门控):支持上架、组合包以及适当的二级市场;使用 $XNY 进行上架与结算,分润使用稳定币。([所有权、版税与流动性](/cn/business/ownership-liquidity)) +* 深化 "插件式后端"分发:提供 API + 链上 Hook + 身份适配器,使现有平台无需重构即可接入 Codatta。([治理与金库](/cn/business/governance-treasury)) +* 将组合打包、分割模块与 SDK 投入生产环境,支持创业团队规模化地进行贡献打包与收益分成。 **可实现的用例** -首尔的研究团队与迪拜的企业团队通过本地 Pods 为同一主题做出贡献。一个 KYB 分流代理,像真实参与者一样注册并评分,对队列进行预标注;专家人类确认边缘情况。流动性开始形成:一位出资者购买高绩效资产组合的一部分份额,分润流向快照时持有该份额的人。 +首尔的一个研究团队与迪拜的企业团队,通过各自的本地 Pods 围绕同一主题协作。一个 KYB 分流 Agent(像真实参与者一样注册与评分)先行预标注任务队列,人类专家确认边缘案例。流动性开始形成:某位支持者购买了一个高表现资产组合的份额,分润在快照时刻自动流向该份额的持有者。 --- ## 2028 — **Nexus** -成为知识经济的底层骨干:端到端链上谱系 + 链上 TNPL + 自主演进。 +成为知识经济的基础设施:端到端链上谱系 + 链上 TNPL + 自主演化。 ### 关键里程碑 **协议成熟度** -* 交付 **协议 v3**:自主升级、市场成熟、深度 AI 代理集成与机构组合轨道。 -* 转向 **端到端可审计谱系**,覆盖完整生命周期(CF → 资产 → 数据集版本 → 采用 → 分润),最小化信任差距并最大化可回放性。([数据组装](/cn/core-systems/data-assembly)) -* 将 **TNPL 完全上链**:使用计量覆盖训练 + 衍生模型的下游推理;结算按规则流动,而非协商。([版税经济](/cn/quick-guide/royalty-economy)) -* 治理成为真实控制:社区通过透明版本与审计轨迹调整 **声誉权重**与其他协议参数。([声誉](/cn/core-systems/reputation)) +* 交付 **Protocol v3**:支持自治升级、成熟的市场机制、深度 AI-Agent 集成以及机构级资产组合通道。 +* 实现**全生命周期可审计的端到端谱系**(CF → 资产 → 数据集版本 → 采用 → 分润),最小化信任缺口,最大化可回放性。([数据组装](/cn/core-systems/data-assembly)) +* 将 **TNPL 完全上链**:使用计量覆盖训练与衍生模型的下游推理;结算按规则自动执行,而非人工谈判。([版税经济](/cn/quick-guide/royalty-economy)) +* 让**治理成为真实控制权**:社区可调节声誉权重等协议参数,具备透明的版本记录与审计轨迹。([声誉](/cn/core-systems/reputation)) **人类 + 代理网络** -* 代理成为具有共享信任信号的 **可投资、可组合参与者**;人类转向高技能审查、裁决与前沿专业知识。([ERC‑8004 + x402](/cn/ecosystem-integration/adopting-erc-8004-x402-essentials)) +* Agent 成为**可投资、可组合的经济主体**,共享信任信号;人类更多转向高技能审核、裁决与前沿领域专业工作。([ERC‑8004 + x402](/cn/ecosystem-integration/adopting-erc-8004-x402-essentials)) **资产经济与 GTM** -* Codatta 成为多个生态系统中默认的 **来源 + 策略 + 计量 + 分润后端**;开放分发保持广泛,付费库存复利增长。([版税经济](/cn/quick-guide/royalty-economy)) +* Codatta 成为多个生态中的**默认溯源 + 策略 + 计量 + 分润后端**;免费使用仍然开放,而付费资产在使用与流通中持续沉淀并复利增长。([版税经济](/cn/quick-guide/royalty-economy)) **可实现的用例** -开发者在 TNPL 下训练,发布模型,并在全球销售 API。每个有意义的请求都被计量,版税持续流向使模型成为可能的人员与代理。没有人争论归属——谱系回答了它。协议通过受治理、可回放的规则自主升级,而生态在其上继续构建。 +一名开发者在 TNPL 模式下完成模型训练并发布 API,在全球销售。每一次有意义的请求都会被计量,版税持续流向那些让模型成为可能的人与 Agent。无需争论归因——谱系本身给出答案。协议在可治理、可回放的规则下完成自我升级,而整个生态持续在其之上构建。 --- diff --git a/en/changelog/2025.mdx b/en/changelog/2025.mdx index e6d944f..dcc6f8e 100644 --- a/en/changelog/2025.mdx +++ b/en/changelog/2025.mdx @@ -3,8 +3,6 @@ title: "Changelog" description: "This changelog documents all updates, fixes, and new features for Codatta in 2025." --- -import { useState, useEffect } from 'react'; -
Date: Sun, 4 Jan 2026 11:36:29 +0800 Subject: [PATCH 17/26] =?UTF-8?q?Update=20community=20history=20for=202025?= =?UTF-8?q?=E2=80=932026?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cn/community/history.mdx | 8 +++++++- en/community/history.mdx | 8 +++++++- ko/community/history.mdx | 8 +++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/cn/community/history.mdx b/cn/community/history.mdx index cd3dd3e..9fd90d6 100644 --- a/cn/community/history.mdx +++ b/cn/community/history.mdx @@ -4,8 +4,12 @@ description: "Codatta的发展史" --- + + 执行 “Forge” 年度:推动混合协议在生产环境端到端跑通(链上锚定 -> CF 资产化);以试点与 PoV(Proof of Value,价值验证)方式验证访问控制与计量以及确定性版税;扩展 Pods 与可用代理,并启用按请求付费的分发;里程碑级细节见 [路线图](/cn/community/roadmap)。 + + - `$XNY` TGE(2025 年 7 月 23 日)和上市实况;作为首届币安助推器活动,激活了分配和社区参与;商业数据集/API 交付使贡献者获得持续版税。 + `$XNY` TGE(2025 年 7 月 23 日)并在主流交易所广泛流通(如 Binance、Kraken、Bybit 等);特别感谢 Binance Booster 项目(Codatta 作为首个项目)带来的早期分发与关注;KYC 认证用户突破 **100 万+**(企业级数据的真正起跑线);将分发节点用于招募与训练贡献者(而不是追逐空指标);商业数据集/API 交付使贡献者获得持续版税。 @@ -27,6 +31,7 @@ description: "Codatta的发展史" * **Codatta Medium** — "从分散标签到共享知识"(CAA 下约 5 亿加密账户标注的回顾)。([Medium][4]) * **Binance** — Codatta 助推器活动公告。([Binance][5]) * **Codatta X(Twitter)** — TGE 日期(2025 年 7 月 23 日)和助推器进展帖子。([X(前 Twitter)][6]) +* **Codatta Docs** — 社区路线图(2026–2028)。([Roadmap][9]) * **Avalanche** — infraBUIDL(AI) 计划( incentive framework)和关于 Codatta 选择的第三方笔记。([Avalanche Builder Hub][8]) [1]: https://www.coinbase.com/blog/microscope-protocol-for-collaboratively-labeling-crypto-addresses?utm_source=chatgpt.com "Microscope: Protocol for Collaboratively Labeling Crypto ..." @@ -37,4 +42,5 @@ description: "Codatta的发展史" [6]: https://x.com/codatta_io/status/1947668869671489793?utm_source=chatgpt.com "Codatta - TGE 23 July" [7]: https://coinmarketcap.com/currencies/codatta/?utm_source=chatgpt.com "Codatta price today, XNY to USD live ..." [8]: https://build.avax.network/grants/infrabuidlai?utm_source=chatgpt.com "Avalanche infraBUIDL(AI) Program" +[9]: /cn/community/roadmap "Codatta 社区路线图(2026–2028)" diff --git a/en/community/history.mdx b/en/community/history.mdx index e01c8b7..7ca06b9 100644 --- a/en/community/history.mdx +++ b/en/community/history.mdx @@ -4,8 +4,12 @@ description: "" --- + + Execute the “Forge” year: ship end-to-end hybrid protocol in production (on-chain anchoring -> CF assetification), pilot & PoV (Proof of Value) access control & metering and deterministic royalties, scale pods + useful agents, and enable pay-per-request distribution; see the [Roadmap](/en/community/roadmap) for milestone-level details. + + - `$XNY` TGE (Jul 23, 2025) and listing live; As the 1st Binance Booster Campaign, it activated distribution and community participation; commercial datasets/APIs shipped so contributors earn ongoing royalties. + `$XNY` TGE (Jul 23, 2025) and broad circulation via major exchanges (e.g., Binance, Kraken, Bybit, etc.); special thanks to the Binance Booster program (Codatta as the first project) for early distribution and attention; crossed **1M+ KYC’ed users** (the real starting line for enterprise-grade data); used distribution moments to recruit and train contributors (not chase empty metrics); commercial datasets/APIs shipped so contributors earn ongoing royalties. @@ -27,6 +31,7 @@ description: "" * **Codatta Medium** — “From Fragmented Labels to Shared Knowledge” (recap of ~500M crypto account annotations under CAA). ([Medium][4]) * **Binance** — Codatta Booster Campaign announcement. ([Binance][5]) * **Codatta X (Twitter)** — TGE date (Jul 23, 2025) and Booster progress posts. ([X (formerly Twitter)][6]) +* **Codatta Docs** — Community roadmap (2026–2028). ([Roadmap][9]) * **Avalanche** — infraBUIDL(AI) program (grant framework) and third-party notes on Codatta’s selection. ([Avalanche Builder Hub][8]) [1]: https://www.coinbase.com/blog/microscope-protocol-for-collaboratively-labeling-crypto-addresses?utm_source=chatgpt.com "Microscope: Protocol for Collaboratively Labeling Crypto ..." @@ -37,3 +42,4 @@ description: "" [6]: https://x.com/codatta_io/status/1947668869671489793?utm_source=chatgpt.com "Codatta - TGE 23 July" [7]: https://coinmarketcap.com/currencies/codatta/?utm_source=chatgpt.com "Codatta price today, XNY to USD live ..." [8]: https://build.avax.network/grants/infrabuidlai?utm_source=chatgpt.com "Avalanche infraBUIDL(AI) Program" +[9]: /en/community/roadmap "Codatta Community Roadmap (2026–2028)" diff --git a/ko/community/history.mdx b/ko/community/history.mdx index 67c1284..bc16594 100644 --- a/ko/community/history.mdx +++ b/ko/community/history.mdx @@ -3,8 +3,12 @@ title: "히스토리 (History)" --- + + “Forge” 연도를 실행: 하이브리드 프로토콜을 프로덕션에서 end-to-end로 작동(온체인 앵커링 -> CF 자산화); 액세스 제어·계량 및 결정적 로열티는 파일럿 & PoV(Proof of Value)로 검증; 팟과 유용한 에이전트를 확장하고, 요청당 과금 기반의 분배를 활성화; 마일스톤 상세는 [로드맵](/ko/community/roadmap) 참고. + + - `$XNY` TGE(2025년 7월 23일) 및 상장 라이브; 1st Binance Booster Campaign으로서 메인넷/커뮤니티 참여를 활성화; 기여자가 지속 로열티를 받는 상용 데이터셋/API 출시. + `$XNY` TGE(2025년 7월 23일) 이후 메이저 거래소에서 광범위 유통(예: Binance, Kraken, Bybit 등); Binance Booster 프로그램(Codatta 최초 프로젝트)에 특별 감사—초기 분배와 주목도를 확보; **KYC 완료 사용자 100만+** 달성(엔터프라이즈급 데이터의 실제 출발선); 분배 모멘텀을 “빈 지표”가 아닌 기여자 모집·트레이닝에 활용; 기여자가 지속 로열티를 받는 상용 데이터셋/API 출시. @@ -26,6 +30,7 @@ title: "히스토리 (History)" * **Codatta Medium** — “From Fragmented Labels to Shared Knowledge”(CAA 하 ~5억 개 계정 주석 회고). ([Medium][4]) * **Binance** — Codatta Booster Campaign 공지. ([Binance][5]) * **Codatta X(Twitter)** — TGE 일자(2025‑07‑23) 및 Booster 진행 포스트. ([X(구 Twitter)][6]) +* **Codatta Docs** — 커뮤니티 로드맵(2026–2028). ([Roadmap][9]) * **Avalanche** — infraBUIDL(AI) 프로그램(그랜트 프레임워크) 및 Codatta 선정 관련 서드파티 노트. ([Avalanche Builder Hub][8]) [1]: https://www.coinbase.com/blog/microscope-protocol-for-collaboratively-labeling-crypto-addresses?utm_source=chatgpt.com "Microscope: Protocol for Collaboratively Labeling Crypto ..." @@ -36,5 +41,6 @@ title: "히스토리 (History)" [6]: https://x.com/codatta_io/status/1947668869671489793?utm_source=chatgpt.com "Codatta - TGE 23 July" [7]: https://coinmarketcap.com/currencies/codatta/?utm_source=chatgpt.com "Codatta price today, XNY to USD live ..." [8]: https://build.avax.network/grants/infrabuidlai?utm_source=chatgpt.com "Avalanche infraBUIDL(AI) Program" +[9]: /ko/community/roadmap "Codatta 커뮤니티 로드맵(2026–2028)" From 0b82514d5129b48454ccf6fd2b405ec53d4bdbf2 Mon Sep 17 00:00:00 2001 From: Joel Date: Sun, 4 Jan 2026 19:00:42 +0800 Subject: [PATCH 18/26] Update translation prompts: improve natural language expression for CN and KO --- .github/workflows/auto-translate.yml | 68 ++++++++ translate.js | 239 +++++++++++++++++++++++++++ 2 files changed, 307 insertions(+) create mode 100644 .github/workflows/auto-translate.yml create mode 100644 translate.js diff --git a/.github/workflows/auto-translate.yml b/.github/workflows/auto-translate.yml new file mode 100644 index 0000000..f5c1351 --- /dev/null +++ b/.github/workflows/auto-translate.yml @@ -0,0 +1,68 @@ +name: Auto Translate (Push to New Branch) + +on: + push: + branches-ignore: + - main + +jobs: + translate: + if: "!contains(github.ref_name, 'auto-translate')" + runs-on: ubuntu-latest + + permissions: + contents: write + + steps: + # 1️⃣ 检出触发的源分支 + - name: Checkout source branch + uses: actions/checkout@v4 + with: + ref: ${{ github.ref_name }} + + # 2️⃣ Node 环境 + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + + # 3️⃣ 安装依赖 + - name: Install deps + run: | + npm init -y + npm install openai fs-extra + + # 4️⃣ 执行翻译(生成 cn/ ko/ 文件) + - name: Run translation + env: + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + run: node translate.js + timeout-minutes: 60 + + # 5️⃣ 创建【带时间戳】的翻译分支并 push + - name: Push translated files + run: | + # 时间戳(UTC,保证稳定) + TS=$(date -u '+%Y%m%d-%H%M%S') + + SRC_BRANCH="${GITHUB_REF_NAME}" + TRANS_BRANCH="${SRC_BRANCH}-auto-translate-${TS}" + + git config user.name "github-actions" + git config user.email "github-actions@github.com" + + # 新建翻译分支(每次都是新的) + git checkout -b "$TRANS_BRANCH" + + # 确保目录存在(防止 glob 报错) + mkdir -p cn/changelog + mkdir -p ko/changelog + + # 只 add 翻译文件 + git add cn/** ko/** + + # 没变化就不提交 + git diff --cached --quiet || git commit -m "chore: auto translate (${TS})" + + # 推送新分支 + git push origin "$TRANS_BRANCH" \ No newline at end of file diff --git a/translate.js b/translate.js new file mode 100644 index 0000000..4347867 --- /dev/null +++ b/translate.js @@ -0,0 +1,239 @@ +import OpenAI from "openai"; +import fs from "fs-extra"; +import path from "path"; + +/** + * 配置区 + */ +const SRC_DIR = "en/changelog"; +const TARGET_LANGS = [ + { + code: "cn", + name: "Chinese", + systemPrompt: + "请将以下英文 changelog 按中文语境重写一下,要求:1. 只翻译纯文本部分,忽略任何 HTML 标签、代码块、表格、特殊格式(如代码行、列)等,看着像代码也保留不动。2. 保留原有 HTML 标签和结构,不要修改格式。3. 保证翻译内容准确。4.小标题的单词也要翻译(标题的日期不要翻译)。5.不要直译,要理解英文原文的语义,然后用符合中文语言习惯的自然方式重新表述。例如:'action' 不应直译为'行动',而应根据上下文用更自然的中文表达。确保翻译后的中文读起来自然流畅,符合中文表达习惯。", + }, + { + code: "ko", + name: "Korean", + systemPrompt: + "다음 영어 changelog 를 한국어 문맥에 맞게 재작성해 주세요. 다음 요구사항을 엄격히 준수하세요: 1. 텍스트 내용만 번역하고, HTML 태그, 코드 블록, 표, 특수 형식(예: 코드 행, 열 등) 등은 무시하고, 코드로 보이는 모든 내용은 그대로 유지하세요. 2. 원본 HTML 태그와 구조를 유지하고, 형식을 수정하지 마세요. 3. 번역 내용의 정확성을 보장하세요. 4. 소제목의 단어도 반드시 번역하세요(소제목의 날짜는 번역하지 마세요). 5. 직역하지 말고, 영어 원문의 의미를 이해한 후 한국어 언어 습관에 맞는 자연스러운 방식으로 재표현하세요. 예를 들어, 'action'을 단순히 '행동'으로 직역하지 말고, 문맥에 따라 더 자연스러운 한국어 표현을 사용하세요. 번역된 한국어가 자연스럽고 유창하게 읽히도록 한국어 표현 습관에 맞게 작성하세요.", + }, +]; + +// 初始化客户端 +const client = new OpenAI({ + apiKey: process.env.OPENAI_API_KEY, + timeout: 120000, + maxRetries: 0, +}); + +/** + * 重试策略 + */ +async function withRetry(fn, maxRetries = 5) { + let retries = 0; + while (retries < maxRetries) { + try { + return await fn(); + } catch (err) { + retries++; + if (retries >= maxRetries) { + throw new Error(`重试${maxRetries}次后仍失败:${err.message}`); + } + const delay = 1000 * Math.pow(2, retries); + console.log(`请求失败,${delay}ms 后重试(第 ${retries}/${maxRetries} 次):`, err.message); + await new Promise(resolve => setTimeout(resolve, delay)); + } + } +} + +/** + * 分块函数(仅处理待翻译部分) + */ +function splitTextByParagraphs(text, maxChars = 8000) { + const paragraphs = text.split("\n\n"); + const chunks = []; + let currentChunk = ""; + + for (const para of paragraphs) { + if (para.length > maxChars) { + const subPara = para.split("\n"); + let subCurrent = ""; + for (const sub of subPara) { + if (subCurrent.length + sub.length <= maxChars) { + subCurrent += sub + "\n"; + } else { + chunks.push(subCurrent.trim()); + subCurrent = sub + "\n"; + } + } + if (subCurrent.trim()) chunks.push(subCurrent.trim()); + continue; + } + + if (currentChunk.length + para.length <= maxChars) { + currentChunk += para + "\n\n"; + } else { + chunks.push(currentChunk.trim()); + currentChunk = para + "\n\n"; + } + } + if (currentChunk.trim()) { + chunks.push(currentChunk.trim()); + } + console.log(`✅ 待翻译部分拆分为 ${chunks.length} 块,单块最大${maxChars}字符`); + return chunks; +} + +/** + * 🔥 双标记截断逻辑(核心修改) + * 规则: + * 1. 前标记(markerBefore)及之前 → 不翻译,保留 + * 2. 前标记后 ~ 后标记前 → 翻译 + * 3. 后标记(markerAfter)及之后 → 不翻译,保留 + */ +function truncateWithTwoMarkers(text, markerBefore, markerAfter) { + // 1. 定位前标记(兼容跨多行) + const markerBeforeIndex = text.indexOf(markerBefore); + // 2. 定位后标记(从前往后找,且在前标记之后) + const markerAfterIndex = markerBeforeIndex === -1 + ? -1 + : text.indexOf(markerAfter, markerBeforeIndex + markerBefore.length); + + // 边界情况1:没找到前标记 → 只处理后标记(后标记及之后不翻译) + if (markerBeforeIndex === -1) { + if (markerAfterIndex === -1) { + console.log("⚠️ 未找到任何标记,将翻译全部内容"); + return { translatePart: text, keepBefore: "", keepAfter: "" }; + } + console.log("⚠️ 未找到前标记,仅保留后标记及之后不翻译"); + return { + translatePart: text.slice(0, markerAfterIndex).trim(), + keepBefore: "", + keepAfter: text.slice(markerAfterIndex) + }; + } + + // 边界情况2:找到前标记,但没找到后标记 → 仅前标记及之前不翻译,之后全翻译 + if (markerAfterIndex === -1) { + console.log("⚠️ 未找到后标记,仅保留前标记及之前不翻译"); + return { + translatePart: text.slice(markerBeforeIndex + markerBefore.length).trim(), + keepBefore: text.slice(0, markerBeforeIndex + markerBefore.length), + keepAfter: "" + }; + } + + // 正常情况:前后标记都找到 → 中间部分翻译 + console.log(`✅ 双标记定位成功: + - 前标记位置:${markerBeforeIndex} + - 后标记位置:${markerAfterIndex}`); + + return { + // 待翻译:前标记后 ~ 后标记前 + translatePart: text.slice(markerBeforeIndex + markerBefore.length, markerAfterIndex).trim(), + // 保留:前标记及之前 + keepBefore: text.slice(0, markerBeforeIndex + markerBefore.length), + // 保留:后标记及之后 + keepAfter: text.slice(markerAfterIndex) + }; +} + +/** + * 翻译函数(整合双标记+分块+翻译+拼接) + */ +async function translate(text, systemPrompt) { + console.log("\n📝 原始文本总长度:", text.length, "字符"); + + // 🔥 配置两个标记(原样复制,含换行/缩进/特殊字符) + // 前标记:}; return ; })()}
+ const markerBefore = `}; + return ; + })()} +
`; + // 后标记:{/* Component definitions - moved to end of file for cleaner code organization */} + const markerAfter = `{/* Component definitions - moved to end of file for cleaner code organization */}`; + + // 执行双标记截断 + const { translatePart, keepBefore, keepAfter } = truncateWithTwoMarkers(text, markerBefore, markerAfter); + + // 无待翻译内容 → 直接返回保留的前后部分 + if (!translatePart) { + return keepBefore + keepAfter; + } + + // 分块翻译中间内容 + const chunks = splitTextByParagraphs(translatePart); + const translatedChunks = []; + + for (let i = 0; i < chunks.length; i++) { + console.log(`🔄 翻译第 ${i+1}/${chunks.length} 块(字符数:${chunks[i].length})`); + const res = await withRetry(async () => { + return await client.chat.completions.create({ + model: "gpt-4o-mini", + messages: [ + { role: "system", content: systemPrompt }, + { role: "user", content: `请翻译以下文本,严格遵循系统指令:\n${chunks[i]}` }, + ], + temperature: 0.0, + max_tokens: 4096, + stream: false, + }); + }); + + if (!res || !res.choices || res.choices.length === 0) { + throw new Error(`第${i+1}块翻译失败:API返回异常`); + } + translatedChunks.push(res.choices[0].message.content.trim()); + } + + // 拼接最终结果:前保留 + 翻译后的中间内容 + 后保留 + const translatedPart = translatedChunks.join("\n\n"); + const finalResult = keepBefore + (translatedPart ? "\n" + translatedPart : "") + keepAfter; + + return finalResult; +} + +/** + * 主流程 + */ +async function run() { + if (!(await fs.pathExists(SRC_DIR))) { + console.log("❌ 未找到 changelog 目录,跳过翻译"); + return; + } + + const files = await fs.readdir(SRC_DIR); + for (const file of files) { + if (!file.endsWith(".md") && !file.endsWith(".mdx")) continue; + + const srcPath = path.join(SRC_DIR, file); + const content = await fs.readFile(srcPath, "utf-8"); + + console.log(`\n========== 开始处理 ${srcPath} ==========`); + + for (const lang of TARGET_LANGS) { + const outDir = path.join(lang.code, "changelog"); + const outPath = path.join(outDir, file); + await fs.ensureDir(outDir); + + try { + const translated = await translate(content, lang.systemPrompt); + await fs.writeFile(outPath, translated, "utf-8"); + console.log(`✅ 成功:${file} → ${lang.code}/changelog/${file}`); + } catch (err) { + console.error(`❌ 失败:${file} → ${lang.code}`, err.stack); + continue; + } + } + } + + console.log("\n🎉 所有文件处理完成!"); +} + +// 执行主流程 +run().catch((err) => { + console.error("💥 全局执行失败:", err.stack); + process.exit(1); +}); \ No newline at end of file From eed99a996290ae91de1f6a4162ea824d3244ebbf Mon Sep 17 00:00:00 2001 From: github-actions Date: Sun, 4 Jan 2026 11:05:27 +0000 Subject: [PATCH 19/26] chore: auto translate (20260104-110527) --- cn/changelog/2025.mdx | 367 +++++++++--------- ko/changelog/2025.mdx | 839 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1021 insertions(+), 185 deletions(-) create mode 100644 ko/changelog/2025.mdx diff --git a/cn/changelog/2025.mdx b/cn/changelog/2025.mdx index d052d64..61379e5 100644 --- a/cn/changelog/2025.mdx +++ b/cn/changelog/2025.mdx @@ -1,6 +1,6 @@ --- -title: "变更日志" -description: "此日志记录了 2025 年 Codatta 所有更新、修复和新功能。" +title: "Changelog" +description: "This changelog documents all updates, fixes, and new features for Codatta in 2025." ---
{num} - 条结果 + result{num !== 1 ? 's' : ''}
); }; return ; })()}
-
## Dec 04, 2025 --- -**引入奖励锁仓机制,管理生态长期激励** +**激励机制演变:长期生态管理的奖励锁定**
-- **适用范围:** 我们为 Airdrop、Frontier 等高激励场景的任务引入了可选的「锁仓」奖励规则。 -- **核心流程:** - - **触发:** 在支持此规则的活动结束后,奖励将发放至平台资产余额。 - - **锁仓:** 在资产页将奖励转入智能合约锁定。 - - **释放:** 锁仓期满后,一键领取奖励至钱包。 -- **迭代意义:** 此机制是我们激励体系向"精细化管理"演进的关键一步。它针对高激励场景,通过引入流动性调节工具,旨在系统性地平衡短期激励效应与生态长期健康发展。 +为高激励任务(例如,在空投或前沿活动中)提供的可选奖励锁定功能。 + +- **触发:** 活动结束后,奖励将存入您的余额。 +- **锁定:** 通过资产页面将奖励锁定在智能合约中以确保安全。 +- **释放:** 锁定期结束后,您可以一键将奖励直接提取到您的钱包。 + +这是我们激励系统向细化管理演变的重要一步。它为高奖励场景中的流动性管理提供了工具,平衡了短期参与与生态系统的长期健康。
@@ -96,23 +96,21 @@ description: "此日志记录了 2025 年 Codatta 所有更新、修复和新功 ## Nov 24, 2025 --- -**Airdrop二期活动** +**活动启动:空投第二季**
-- **活动目标:** - - **数据目标:** 系统性收集学术级验证的物理、金融、多模态领域数据集。 - - **生态目标:** 通过定向激励,为三个新前线模块冷启动高质量数据流 -- **活动内容:** - - **Airdrop Season 2:** 代号"Physics Frontier Challenge",总奖池 1M $XNY (含3个月锁仓)。 - - **三个Frontier上线:** 同步上线高难度物理问题、加密资产与股票信息、真实世界图像三个数据收集frontier。 - - **Advanced Physics Questions frontier:** 专业物理专业人士提交AI无法正确回答的高难度物理问题 - - **Crypto & Stock Information frontier:** 给AI提供可靠的crypto和股票投资决策相关的信息 - - **Real-world Photo frontier:** 给AI提供标注元数据的真实拍摄图片 -- **奖励信息:** 形式:任务奖励(90%奖池)与排行榜激励(10%奖池)结合。 -- **活动时间:** 周期:2025/11/24 - 2025/12/08 (UTC)。 +系统性地收集物理学、金融和多模态领域的学术级数据集,并为三个新前沿建立高质量的数据管道。 + +- **行动:** 启动空投第二季,奖池为100万$XNY(3个月线性归属)。 +- **新前沿:** + - **高级物理问题:** 供领域专家提交当前AI无法正确回答的高难度物理问题。 + - **加密与股票信息:** 为AI提供与加密货币和股票投资决策相关的可靠信息。 + - **现实世界照片:** 为AI提供包含注释元数据的现实世界照片。 +- **奖励结构:** 任务完成奖励占90%,排行榜排名占10%。 +- **时间表:** 2025年11月24日09:00 UTC – 2025年12月8日09:00 UTC。
@@ -120,18 +118,19 @@ description: "此日志记录了 2025 年 Codatta 所有更新、修复和新功 ## Nov 05, 2025 --- -**账户体系升级:DID 正式上线** +**账户系统升级:去中心化身份(DID)正式上线**
-- **是什么:** 一项账户升级功能,允许用户在现有平台账户绑定标准 DID(去中心化身份标识)账户。 -- **如何运作:** - - **升级:** 用户可在账户设置中自行升级,将现有账户与链上DID绑定。 - - **关联:** 升级后,该DID将在Codatta平台内作为您的统一主键,自动关联并索引您的所有任务行为、数据贡献、奖励记录等全链路信息。 - - **追溯:** 基于DID,所有历史与未来的链上及链下行为均可被追溯和验证,形成完整的"数据血缘"。 -- **为何重要:** 这是构建可信、透明数据经济基础设施的关键一步。DID为每位用户在生态中的贡献提供了唯一、持久且可验证的"数字身份",是实现贡献精准计量、权属清晰界定和激励公平发放的技术基石。 +一项基础升级,使账户绑定到去中心化身份(DID)。 + +- **绑定:** 通过下次登录Codatta自助集成链上DID。 +- **关联:** 绑定的DID作为统一主键,系统性地索引所有任务操作、数据贡献和奖励分配。 +- **血统:** 实现链上和链下活动的完整可追溯性和验证,建立不可变的数据来源。 + +此部署为可验证的数据经济奠定了技术基础。通过为每位贡献者提供持久的、独特的数字身份,我们实现了细化的贡献归属、明确的所有权验证和协议层面的透明激励分配。
@@ -139,21 +138,16 @@ description: "此日志记录了 2025 年 Codatta 所有更新、修复和新功 ## Nov 03, 2025 --- -**任务系统调整:Crypto Frontier QUEST 模块下线** +**任务系统调整:加密前沿任务模块停用**
-- **下线范围:** - - 整个 Crypto Frontier QUEST 模块。 - - 所有相关任务——包括 Submission(提交)、Validation(验证)与 Bounty Hunting(赏金狩猎)——均已关闭。 -- **下线原因:** - - 该模块已在当前产品路线图中完成其预设的生命周期。 - - 此次下线有助于系统结构优化,并为后续功能更新释放资源、重新聚焦。 -- **相关说明:** - - 用户在该模块中的历史贡献记录与已获奖励保持完整,不受影响。 - - 本次调整不涉及其他任何 Frontier 模块的正常运行。 +整个加密前沿任务模块及所有相关任务——包括提交、验证和赏金猎人——已下线。 + +- **原因:** 该模块已完成当前产品路线图下的计划生命周期。停用有助于系统精简和资源重新配置,以支持即将发布的新功能。 +- **注意:** 用户在该模块的历史贡献记录和获得的奖励保持不变。此变更不影响其他前沿模块。
@@ -161,21 +155,16 @@ description: "此日志记录了 2025 年 Codatta 所有更新、修复和新功 ## Oct 24, 2025 --- -**Frontier 系统调整:Robotics Frontier 已下线** +**前沿系统调整:机器人前沿停用**
-- **调整内容:** - - Robotics Frontier 已正式下线。 - - 本次调整仅涉及前端入口,所有历史贡献数据均保持完整且可查询。 -- **调整原因:** - - 该决定是产品持续优化的一部分,旨在将资源与用户注意力集中至当前优先级最高的活跃 Frontier。 - - Robotics Frontier 已完成其预设的探索阶段,下线有助于我们整合资源、聚焦核心任务。 -- **相关说明:** - - 用户在 Robotics Frontier 中的历史贡献与所获奖励已被完整保留,可在其贡献历史记录中随时查看。 - - 此次调整不影响平台其他 Frontier 模块及任何系统功能的正常使用。 +机器人前沿已正式停用。此操作仅影响前端入口点。所有历史贡献数据保持完整且可访问。 + +- **原因:** 此决定是我们持续产品精简的一部分,旨在将资源和用户注意力集中在我们最高优先级的活跃前沿上。机器人前沿已完成其计划的探索阶段,停用使我们能够整合努力。 +- **注意:** 用户在机器人前沿的过去贡献和奖励被保留,并可在其贡献历史中查看。其他前沿或平台功能不受影响。 @@ -183,15 +172,16 @@ description: "此日志记录了 2025 年 Codatta 所有更新、修复和新功 ## Oct 23, 2025 --- -**反垃圾信息增强:每日提交次数限制已实施** +**反垃圾邮件增强:实施每日提交限制**
-- **策略内容:** 已实施一项新的平台级安全策略,以防止任务刷单行为。 -- **实施方式:** 针对每项任务,执行可配置的每日提交次数上限。 -- **实施目的:** 保护系统资源,确保所有贡献者公平参与,并维持任务生态系统的长期健康与公平 +一项新的平台安全政策,以防止任务垃圾邮件。 + +- **如何:** 对每个任务实施可配置的每日提交上限。 +- **原因:** 保护系统资源,确保所有贡献者的公平参与,并维护任务生态系统的长期健康和公平性。 @@ -199,21 +189,16 @@ description: "此日志记录了 2025 年 Codatta 所有更新、修复和新功 ## Oct 20, 2025 --- -**Frontier 系统调整:Crypto Frontier 已下线** +**前沿系统调整:加密前沿停用**
-- **调整内容:** - - Crypto Frontier 已正式下线。 - - 本次调整仅涉及前端入口关闭,所有历史贡献数据均保持完整且可正常访问。 -- **调整原因:** - - 此决策是我们持续优化产品结构的一部分,旨在将资源与用户关注聚焦于优先级最高的活跃 Frontier 模块。 - - Crypto Frontier 已完成其预设的探索阶段,下线有助于我们集中资源、推进核心目标。 -- **相关说明:** - - 用户在 Crypto Frontier 中的历史贡献与奖励记录已完整保留,可在个人贡献历史中查询。 - - 本次调整不影响其他任何 Frontier 模块及平台功能的正常运行。 +加密前沿已正式停用。此操作仅影响前端入口点。所有历史贡献数据保持完整且可访问。 + +- **原因:** 此决定是我们持续产品精简的一部分,旨在将资源和用户注意力集中在我们最高优先级的活跃前沿上。加密前沿已完成其计划的探索阶段,停用使我们能够整合努力。 +- **注意:** 用户在加密前沿的过去贡献和奖励被保留,并可在其贡献历史中查看。其他前沿或平台功能不受影响。 @@ -221,15 +206,16 @@ description: "此日志记录了 2025 年 Codatta 所有更新、修复和新功 ## Oct 15, 2025 --- -**系统治理:平台黑名单管控功能已上线** +**系统治理:平台黑名单控制实施**
-- **功能概述:** 平台已实施全新的黑名单管控功能。 -- **运作方式:** 指定管理员现可通过应用黑名单规则对恶意账户实施限制。 -- **实施目标:** 主动维护平台生态的完整性,保护诚信贡献者,并为所有参与者构建公平、可信的环境。旨在提升平台整体安全性,保障贡献者权益,并维护生态系统的公平性。 +平台上实施了一项新的黑名单控制功能。 + +- **如何:** 指定的管理员现在可以应用黑名单规则以限制恶意账户。 +- **原因:** 增强平台安全性,保护贡献者利益,维护生态系统公平性。 @@ -237,25 +223,23 @@ description: "此日志记录了 2025 年 Codatta 所有更新、修复和新功 ## Oct 13, 2025 --- -**Airdrop 第一期活动** +**活动启动:空投第一季**
-- **活动目标:** - - **数据目标:** 通过高额奖励机制与违规处罚策略,系统性地筛选并收集高质量、结构化的数据,保障数据的有效性与学术价值。 - - **生态目标:** 回馈长期支持的用户,通过五个新前线模块推动平台数据生态的多元发展与健康循环。 -- **主要动作:** - - 正式上线 Airdrop 第一期活动,提供 2.5M 高额 $XNY 与积分奖励,活动为期两周。 - - 同步推出五个全新的 Frontier 数据模块: - - **Model Comparison:** 支持横向比较不同AI模型的性能指标与业务回报,助力识别最优或融合模型方案。 - - **Spot LLM's Mistakes:** 聚焦识别大语言模型在推理、事实表述、等方面的错误,为模型优化提供数据支撑。 - - **Correct LLM's Mistakes:** 通过收集错误纠正数据,帮助大模型从错误中学习,提升其自我修正与推理能力。 - - **Food Science:** 围绕食品科学、营养功能等方向收集研究数据,助力食品科学领域创新。 - - **Lifelog Canvas:** 支持生活行为、健康状态等数据的跟踪与记录,为相关研究提供基础数据。 -- **奖励信息:** 奖励将依据数据提交后的评级得分进行排名,并于活动结束后统一发放。活动全程将监测并处罚恶意提交行为,以保障数据质量。 -- **活动时间:** 周期:2025/10/13 - 2025/10/27 (UTC)。 +通过高奖励机制和反垃圾邮件执行系统性地收集高质量、结构化的数据,确保有效性和学术价值,并奖励长期贡献者,丰富平台的数据生态系统,推出五个新前沿模块。 + +- **行动:** 启动空投第一季,奖池为250万$XNY及积分奖励。 +- **新前沿:** + - **模型比较:** 比较不同AI模型的性能指标和商业结果,以识别最佳或混合解决方案。 + - **识别LLM错误:** 识别LLM输出中的推理、事实和逻辑错误,以支持模型优化。 + - **纠正LLM错误:** 收集纠正数据,帮助LLM从错误中学习,提高自我纠正和推理能力。 + - **食品科学:** 收集食品科学和营养功能方面的研究数据,以推动该领域的创新。 + - **生活记录画布:** 跟踪和记录个人行为及健康相关数据,以支持行为及相关研究。 +- **奖励结构:** 奖励根据提交评级排名,并在活动结束后分配。恶意提交将受到惩罚,以确保数据质量。 +- **时间表:** 2025年10月13日09:00 UTC - 2025年10月27日09:00 UTC。 @@ -263,257 +247,270 @@ description: "此日志记录了 2025 年 Codatta 所有更新、修复和新功 ## Oct 10, 2025 --- -**功能上线:Frontier 专属激励活动(Activity)** +**功能发布:前沿特定奖励活动**
-- **是什么:** 平台现支持为各 Frontier 灵活配置专属奖励活动(Activity),为特定高难度模块提供叠加式高额奖励。 -- **如何运作:** - - 部分 Frontier 任务将额外提供高额 $XNY 或 USDT 活动奖励,该奖励独立于平台基础积分,叠加发放。 - - 活动奖励规则(如额度、周期、目标)由各Frontier独立设定,具体信息见对应Frontier Home页说明。 -- **为何重要:** 通过更精准、可配置的激励方式,持续吸引用户参与高价值数据任务,提升数据贡献深度与生态活跃度。 +现在为前沿提供可配置的奖励活动,提供额外的高价值激励。 + +```html +- **如何:** 选定的前沿任务提供额外的奖励,奖励以 $XNY 或 USDT 形式发放,与基础积分无关。活动参数(奖励金额、持续时间、目标)根据每个前沿任务设定,并在其各自的主页上显示。 +- **为什么:** 通过有针对性的激励措施,推动用户更深入地参与高价值数据任务,从而提高数据质量和生态系统的参与度。
-## Sep 26, 2025 +## 2025年9月26日 --- -**活动上线:Codatta Booster Campaign 第三季第4周** +**活动启动: Codatta 助推器活动 第三季 第四周**
-- **活动目标:** 通过收集多领域可信数据加速AI发展,并推动社区共建去中心化AI知识层。 -- **主要动作:** 正式上线第三季第4周活动,入口位于币安钱包Booster页及平台首页(需Alpha Points ≥ 61)。 -- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 -- **活动时间:** 2025年9月26日 07:00(UTC)开始。 +通过可信的多领域数据收集,加速人工智能的发展,并促进社区驱动的去中心化人工智能知识构建。 + +- **访问:** 通过币安钱包助推器标签或主页横幅访问(需要 Alpha 积分 ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 +- **时间表:** 2025年9月26日 07:00 UTC – 2025年10月3日 07:00 UTC。
-## Sep 12, 2025 +## 2025年9月12日 --- -**活动上线:Codatta Booster Campaign 第三季第3周** +**活动启动: Codatta 助推器活动 第三季 第三周**
-- **活动目标:** 收集跨领域数据,涵盖生活、机器人、加密资产、模型对比和指纹验证等领域,用于AI训练和验证。 -- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 -- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 -- **活动时间:** 2025年9月12日 07:00(UTC)– 2025年9月19日 07:00(UTC)。 +收集跨领域的数据,涵盖生活、机器人、加密货币、模型比较和指纹验证,以用于人工智能的训练和验证。 + +- **访问:** 通过币安钱包助推器标签或主页横幅访问(需要 Alpha 积分 ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 +- **时间表:** 2025年9月12日 07:00 UTC – 2025年9月19日 07:00 UTC。
-## Sep 05, 2025 +## 2025年9月5日 --- -**活动上线:Codatta Booster Campaign 第三季第2周** +**活动启动: Codatta 助推器活动 第三季 第二周**
-- **活动目标:** 收集并标注跨领域数据,涵盖生活、机器人和加密资产等领域,用于AI训练和验证。 -- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 -- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 -- **活动时间:** 2025年9月5日 07:00(UTC)– 2025年9月12日 07:00(UTC)。 +收集和注释跨领域的数据,涵盖生活、机器人和加密货币,以用于人工智能的训练和验证。 + +- **访问:** 通过币安钱包助推器标签或主页横幅访问(需要 Alpha 积分 ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 +- **时间表:** 2025年9月5日 07:00 UTC – 2025年9月12日 07:00 UTC。
-## Aug 28, 2025 +## 2025年8月28日 --- -**功能上线:用户数据档案** +**功能发布: 用户数据档案**
-- **是什么:** 在用户信息模块中引入全新的数据档案功能。 -- **如何运作:** 通过用户信息 > 数据档案访问,在可视化仪表板中查看您的总提交数、已获奖励和贡献统计。 -- **为何重要:** 提供贡献透明度,通过可见的进度跟踪增强参与度,并支持长期参与。 +在用户信息模块中引入新的数据档案功能。 + +- **如何:** 通过用户信息 > 数据档案访问,查看您的总提交、获得的奖励和贡献统计信息,呈现在可视化仪表板中。 +- **为什么:** 提供对您贡献的透明度,通过可见的进度跟踪增强参与感,并支持长期参与。
-## Aug 22, 2025 +## 2025年8月22日 --- -**活动上线:Codatta Booster Campaign 第三季第1周** +**活动启动: Codatta 助推器活动 第三季 第一周**
-- **活动目标:** 建立跨领域标注数据基础,涵盖生活、机器人和加密资产等领域,用于去中心化AI训练。 -- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 -- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 -- **活动时间:** 2025年8月22日 07:00(UTC)– 2025年8月29日 07:00(UTC)。 +为去中心化的人工智能训练建立跨领域注释数据的基础,涵盖生活、机器人和加密货币。 + +- **访问:** 通过币安钱包助推器标签或主页横幅访问(需要 Alpha 积分 ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 +- **时间表:** 2025年8月22日 07:00 UTC – 2025年8月29日 07:00 UTC。
-## Aug 15, 2025 +## 2025年8月15日 --- -**活动上线:Codatta Booster Campaign 第二季第4周** +**活动启动: Codatta 助推器活动 第二季 第四周**
-- **活动目标:** 系统性地标注和扩展特定领域数据集,涵盖食品AI、机器人交互和CEX链上数据,用于去中心化AI训练。 -- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 -- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 -- **活动时间:** 2025年8月15日 07:00(UTC)– 2025年8月22日 07:00(UTC)。 +系统性地注释和扩展食品人工智能、机器人交互和 CEX 链上数据的领域特定数据集,以用于去中心化的人工智能训练。 + +- **访问:** 通过币安钱包助推器标签或主页横幅访问(需要 Alpha 积分 ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 +- **时间表:** 2025年8月15日 07:00 UTC – 2025年8月22日 07:00 UTC。
-## Aug 08, 2025 +## 2025年8月8日 --- -**活动上线:Codatta Booster Campaign 第二季第3周** +**活动启动: Codatta 助推器活动 第二季 第三周**
-- **活动目标:** 系统性地收集四个关键领域的标注数据:项目学习、食品AI判断、机器人标注和CEX数据扩展。 -- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 -- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 -- **活动时间:** 2025年8月8日 07:00(UTC)– 2025年8月15日 07:00(UTC)。 +系统性地收集四个关键领域的注释数据:项目学习、食品人工智能判断、机器人注释和 CEX 数据扩展。 + +- **访问:** 通过币安钱包助推器标签或主页横幅访问(Alpha 积分 ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 +- **时间表:** 2025年8月8日 07:00 UTC – 2025年8月15日 07:00 UTC。
-## Aug 01, 2025 +## 2025年8月1日 --- -**活动上线:Codatta Booster Campaign 第二季第2周** +**活动启动: Codatta 助推器活动 第二季 第二周**
-- **活动目标:** 收集三个核心领域的标注数据:AI食品模型对比、机器人交互标注和CEX热钱包数据标注。 -- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 -- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 -- **活动时间:** 2025年8月1日 07:00(UTC)– 2025年8月8日 07:00(UTC)。 +收集三个核心领域的注释数据:人工智能食品模型比较、机器人交互注释和 CEX 热钱包数据标注。 + +- **访问:** 通过币安钱包助推器标签或主页横幅访问(Alpha 积分 ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 +- **时间表:** 2025年8月1日 07:00 UTC – 2025年8月8日 07:00 UTC。
-## Jul 24, 2025 +## 2025年7月24日 --- -**活动上线:Codatta Booster Campaign 第二季第1周** +**活动启动: Codatta 助推器活动 第二季 第一周**
-- **活动目标:** 通过标注真实世界交互数据,验证AI食品分析并增强机器人训练。 -- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 -- **活动规则:** 总奖池50,000,000 $XNY(含锁仓机制),奖励于任务完成并通过审核后发放。 -- **活动时间:** 2025年7月24日 07:00(UTC)– 2025年7月31日 07:00(UTC)。 +通过注释的真实世界交互数据,验证人工智能食品分析并增强机器人训练。 + +- **访问:** 通过币安钱包助推器标签或主页横幅访问(Alpha 积分 ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 +- **时间表:** 2025年7月24日 07:00 UTC – 2025年7月31日 07:00 UTC。
-## Jul 16, 2025 +## 2025年7月16日 --- -**活动上线:Codatta Booster Campaign 第一季第4周** +**活动启动: Codatta 助推器活动 第一季 第四周**
-- **活动目标:** 通过收集丰富的标注数据深化AI对食品的理解,标注内容不仅包括标签,还包括重量、烹饪方法和卡路里含量。 -- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 -- **活动规则:** 总奖池50,000,000 $XNY,奖励于任务完成并通过审核后发放。 -- **活动时间:** 2025年7月16日 13:00(UTC)– 2025年7月23日 13:00(UTC)。 +通过收集丰富的注释,深化人工智能对食品的理解,超越标签,涵盖重量、烹饪方法和热量内容。 + +- **访问:** 通过币安钱包助推器标签或主页横幅访问(Alpha 积分 ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY,在任务完成和验证后分发。 +- **时间表:** 2025年7月16日 13:00 UTC – 2025年7月23日 13:00 UTC。
-## Jul 09, 2025 +## 2025年7月9日 --- -**活动上线:Codatta Booster Campaign 第一季第3周** +**活动启动: Codatta 助推器活动 第一季 第三周**
-- **活动目标:** 通过收集即食食品的标注图像,教授AI对人类饮食习惯的细致理解,关注文化背景和情境相关性,而不仅仅是简单标签。 -- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 -- **活动规则:** 总奖池50,000,000 $XNY,奖励于任务完成并通过审核后发放。 -- **活动时间:** 2025年7月9日 13:00(UTC)– 2025年7月16日 13:00(UTC)。 +通过收集即食食品的注释图像,教会人工智能对人类饮食习惯的细致理解,关注文化和情境的相关性,而不仅仅是简单的标签。 + +- **访问:** 通过币安钱包助推器标签或主页横幅访问(Alpha 积分 ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY,在任务完成和验证后分发。 +- **时间表:** 2025年7月9日 13:00 UTC – 2025年7月16日 13:00 UTC。
-## Jul 07, 2025 +## 2025年7月7日 --- -**功能优化:Quest 系统已恢复** +**功能优化: 任务系统恢复**
-- **是什么:** Quest 系统已完全恢复并重新开放。 -- **如何运作:** 系统于2025年6月30日暂时下线,现已全面恢复。 -- **为何重要:** 通过架构升级提升系统稳定性和用户体验。 +任务系统已全面恢复并重新开放。 + +- **如何:** 于2025年6月30日暂时下线,现在已全面恢复。 +- **为什么:** 通过架构升级,提高系统稳定性和用户体验。
+```
-## Jul 02, 2025 +## 2025年7月02日 --- -**活动上线:Codatta Booster Campaign 第一季第2周** +**活动启动:Codatta Booster 活动 第一季 第二周**
-- **活动目标:** 通过细致的图像标注扩展AI对全球食品文化和偏好的理解,涵盖素食、非素食和混合类别。 -- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 -- **活动规则:** 总奖池50,000,000 $XNY,奖励于任务完成并通过审核后发放。 -- **活动时间:** 2025年7月2日 13:00(UTC)– 2025年7月9日 13:00(UTC)。 +通过对素食、非素食和混合类别的细致图像标注,扩展人工智能对全球饮食文化和偏好的理解。 + +- **访问方式:** 可通过 Binance 钱包的 Booster 标签或主页横幅访问(Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY,任务完成并验证后发放。 +- **时间安排:** 2025年7月2日 13:00 UTC – 2025年7月9日 13:00 UTC。
-## Jun 25, 2025 +## 2025年6月25日 --- -**活动上线:Codatta Booster Campaign 第一季第1周** +**活动启动:Codatta Booster 活动 第一季 第一周**
-- **活动目标:** 通过收集标注食品数据、社区知识问答和分层激励结构,启动首届活动。 -- **主要动作:** 入口位于币安钱包Booster页或平台首页横幅(需Alpha Points ≥ 61)。 -- **活动规则:** 总奖池50,000,000 $XNY,奖励于任务完成并通过审核后发放。 -- **活动时间:** 2025年6月25日 13:00(UTC)– 2025年7月2日 13:00(UTC)。 +通过收集标注的食品数据、通过测验激发社区知识,并通过多层次的激励结构奖励参与者,启动首季活动。 -
+- **访问方式:** 可通过 Binance 钱包的 Booster 标签或主页横幅访问(Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY,任务完成并验证后发放。 +- **时间安排:** 2025年6月25日 13:00 UTC – 2025年7月2日 13:00 UTC。 -{/* Component definitions - moved to end of file for cleaner code organization */} +{/* Component definitions - moved to end of file for cleaner code organization */} export const ChangelogFilter = () => { const [activeFilter, setActiveFilter] = useState('all'); const [isOpen, setIsOpen] = useState(false); @@ -539,11 +536,11 @@ export const ChangelogFilter = () => { }, [activeFilter]); const filterTypes = [ - { id: 'all', label: '全部', color: '#6b7280', count: 24 }, - { id: 'core-feature', label: '核心功能发布', color: '#16A34A', count: 4 }, - { id: 'optimization', label: '调整与优化', color: '#F59E0B', count: 3 }, - { id: 'fixes', label: '修复与功能下线', color: '#EF4444', count: 3 }, - { id: 'campaign', label: '活动上线', color: '#A855F7', count: 14 } + { id: 'all', label: 'All', color: '#6b7280', count: 24 }, + { id: 'core-feature', label: 'Core Feature Release', color: '#16A34A', count: 4 }, + { id: 'optimization', label: 'Adjustments & Optimization', color: '#F59E0B', count: 3 }, + { id: 'fixes', label: 'Fixes & Feature Sunset', color: '#EF4444', count: 3 }, + { id: 'campaign', label: 'Campaign Launch', color: '#A855F7', count: 14 } ]; const activeType = filterTypes.find(type => type.id === activeFilter) || filterTypes[0]; @@ -715,14 +712,14 @@ export const MonthFilter = () => { }, [activeMonth]); const months = [ - { id: 'all', label: '全部月份', count: 24 }, - { id: 'dec', label: '十二月', count: 1 }, - { id: 'nov', label: '十一月', count: 3 }, - { id: 'oct', label: '十月', count: 6 }, - { id: 'sep', label: '九月', count: 3 }, - { id: 'aug', label: '八月', count: 5 }, - { id: 'jul', label: '七月', count: 5 }, - { id: 'jun', label: '六月', count: 1 } + { id: 'all', label: 'All Months', count: 24 }, + { id: 'dec', label: 'December', count: 1 }, + { id: 'nov', label: 'November', count: 3 }, + { id: 'oct', label: 'October', count: 6 }, + { id: 'sep', label: 'September', count: 3 }, + { id: 'aug', label: 'August', count: 5 }, + { id: 'jul', label: 'July', count: 5 }, + { id: 'jun', label: 'June', count: 1 } ]; const activeMonthData = months.find(month => month.id === activeMonth) || months[0]; diff --git a/ko/changelog/2025.mdx b/ko/changelog/2025.mdx new file mode 100644 index 0000000..946ec91 --- /dev/null +++ b/ko/changelog/2025.mdx @@ -0,0 +1,839 @@ +--- +title: "Changelog" +description: "This changelog documents all updates, fixes, and new features for Codatta in 2025." +--- + +
+
+ + +
+ + {(() => { + const ShowResult = () => { + const [num, setNum] = useState(0); + useEffect(() => { + if (typeof document === 'undefined') return; + const update = () => { + try { + const items = document.querySelectorAll('.changelog-item'); + let count = 0; + items.forEach(item => { + if (item.style.display !== 'none') count++; + }); + setNum(count); + } catch {} + }; + update(); + const id = setInterval(update, 2000); + return () => clearInterval(id); + }, []); + return ( +
+ + {num} + result{num !== 1 ? 's' : ''} +
+ ); + }; + return ; + })()} +
+
+ +## 2025년 12월 04일 +--- +**진화하는 인센티브: 장기 생태계 관리를 위한 보상 잠금 기능** + +
+ +
+ +고인센티브 작업(예: 에어드롭 또는 프론티어 캠페인)에서의 보상을 위한 선택적 잠금 기능입니다. + +- **트리거:** 캠페인 후 보상이 귀하의 잔액에 입금됩니다. +- **잠금:** 자산 페이지를 통해 스마트 계약에 보상을 잠금으로써 안전하게 보호합니다. +- **해제:** 잠금 기간이 끝난 후 한 번의 클릭으로 보상을 지갑으로 직접 청구할 수 있습니다. + +이는 우리의 인센티브 시스템을 세분화된 관리로 발전시키는 중요한 단계입니다. 이는 고보상 시나리오에서 유동성을 관리할 수 있는 도구를 제공하여 단기 참여와 생태계의 장기 건강을 균형 있게 유지합니다. + +
+ +
+ +## 2025년 11월 24일 +--- +**캠페인 시작: 에어드롭 시즌 2** + +
+ +
+ +물리학, 금융 및 다중 모드 분야에서 학술 수준의 데이터셋을 체계적으로 수집하고, 세 가지 새로운 프론티어를 위한 고품질 데이터 파이프라인을 구축합니다. + +- **행동:** 100만 $XNY 상금 풀로 에어드롭 시즌 2를 시작했습니다(3개월 선형 분배). +- **새로운 프론티어:** + - **고급 물리학 문제:** 현재 AI가 정확하게 답할 수 없는 고난이도 물리학 문제를 제출할 수 있는 도메인 전문가를 위한 것입니다. + - **암호화폐 및 주식 정보:** AI에게 암호화폐 및 주식 투자 결정과 관련된 신뢰할 수 있는 정보를 제공합니다. + - **실제 사진:** 주석이 달린 메타데이터를 포함한 실제 사진을 AI에 제공합니다. +- **보상 구조:** 작업 완료에 대해 90%, 리더보드 순위에 대해 10%. +- **일정:** 2025년 11월 24일 09:00 UTC – 2025년 12월 8일 09:00 UTC. + +
+ +
+ +## 2025년 11월 05일 +--- +**계정 시스템 업그레이드: DID 공식 출시** + +
+ +
+ +탈중앙화 식별자(DID)에 계정을 연결할 수 있는 기본 업그레이드입니다. + +- **연결:** Codatta에 다음 로그인 시 온체인 DID의 셀프 서비스 통합. +- **연관:** 연결된 DID는 모든 작업 행동, 데이터 기여 및 보상 분배를 체계적으로 인덱싱하는 통합 기본 키 역할을 합니다. +- **계보:** 온체인 및 오프체인 활동의 완전한 추적 가능성과 검증을 가능하게 하여 불변의 데이터 출처를 확립합니다. + +이 배포는 검증 가능한 데이터 경제를 위한 기술적 초석을 마련합니다. 각 기여자에게 지속적이고 고유한 디지털 정체성을 제공함으로써 세분화된 기여 귀속, 명확한 소유권 검증 및 프로토콜 수준에서의 투명한 인센티브 할당을 가능하게 합니다. + +
+ +
+ +## 2025년 11월 03일 +--- +**퀘스트 시스템 조정: 암호화폐 프론티어 QUEST 모듈 사용 중지** + +
+ +
+ +암호화폐 프론티어 QUEST 모듈과 모든 관련 작업(제출, 검증 및 보상 사냥 포함)이 오프라인 상태로 전환되었습니다. + +- **이유:** 이 모듈은 현재 제품 로드맵에 따라 계획된 생애 주기를 완료했습니다. 사용 중지는 시스템 간소화 및 향후 기능 출시를 위한 자원 재조정을 지원합니다. +- **참고:** 사용자의 과거 기여 기록과 이 모듈에서 얻은 보상은 그대로 유지됩니다. 이 변경 사항은 다른 프론티어 모듈에는 영향을 미치지 않습니다. + +
+ +
+ +## 2025년 10월 24일 +--- +**프론티어 시스템 조정: 로보틱스 프론티어 사용 중지** + +
+ +
+ +로보틱스 프론티어가 공식적으로 사용 중지되었습니다. 이 조치는 프론트엔드 진입점에만 영향을 미칩니다. 모든 과거 기여 데이터는 그대로 유지되며 접근 가능합니다. + +- **이유:** 이 결정은 자원과 사용자 주의를 가장 우선 순위가 높은 활성 프론티어에 집중하기 위한 지속적인 제품 간소화의 일환입니다. 로보틱스 프론티어는 계획된 탐색 단계를 완료하였으며, 사용 중지는 우리의 노력을 통합할 수 있게 합니다. +- **참고:** 사용자의 과거 기여 및 로보틱스 프론티어에서의 보상은 보존되며 기여 기록에서 검토할 수 있습니다. 다른 프론티어나 플랫폼 기능에는 영향을 미치지 않습니다. + +
+ +
+ +## 2025년 10월 23일 +--- +**스팸 방지 강화: 일일 제출 한도 구현** + +
+ +
+ +작업 스팸을 방지하기 위한 새로운 플랫폼 전반의 보안 정책입니다. + +- **방법:** 각 작업에 대해 구성 가능한 일일 제출 한도를 시행합니다. +- **이유:** 시스템 자원을 보호하고 모든 기여자에게 공정한 참여를 보장하며 작업 생태계의 장기적인 건강과 공정성을 유지하기 위해서입니다. + +
+ +
+ +## 2025년 10월 20일 +--- +**프론티어 시스템 조정: 암호화폐 프론티어 사용 중지** + +
+ +
+ +암호화폐 프론티어가 공식적으로 사용 중지되었습니다. 이 조치는 프론트엔드 진입점에만 영향을 미칩니다. 모든 과거 기여 데이터는 그대로 유지되며 접근 가능합니다. + +- **이유:** 이 결정은 자원과 사용자 주의를 가장 우선 순위가 높은 활성 프론티어에 집중하기 위한 지속적인 제품 간소화의 일환입니다. 암호화폐 프론티어는 계획된 탐색 단계를 완료하였으며, 사용 중지는 우리의 노력을 통합할 수 있게 합니다. +- **참고:** 사용자의 과거 기여 및 암호화폐 프론티어에서의 보상은 보존되며 기여 기록에서 검토할 수 있습니다. 다른 프론티어나 플랫폼 기능에는 영향을 미치지 않습니다. + +
+ +
+ +## 2025년 10월 15일 +--- +**시스템 거버넌스: 플랫폼 블랙리스트 제어 구현** + +
+ +
+ +플랫폼에 새로운 블랙리스트 제어 기능이 구현되었습니다. + +- **방법:** 지정된 관리자가 이제 악의적인 계정을 제한하기 위해 블랙리스트 규칙을 적용할 수 있습니다. +- **이유:** 플랫폼 보안을 강화하고 기여자의 이익을 보호하며 생태계의 공정성을 유지하기 위해서입니다. + +
+ +
+ +## 2025년 10월 13일 +--- +**캠페인 시작: 에어드롭 시즌 1** + +
+ +
+ +고보상 메커니즘과 스팸 방지 강화를 통해 고품질의 구조화된 데이터를 체계적으로 수집하고, 유효성과 학술 가치를 보장하며, 장기 기여자에게 보상하고 플랫폼의 데이터 생태계를 다각화하기 위해 다섯 개의 새로운 프론티어 모듈을 도입합니다. + +- **행동:** 250만 $XNY 상금 풀과 포인트 보상으로 에어드롭 시즌 1을 시작했습니다. +- **새로운 프론티어:** + - **모델 비교:** 다양한 AI 모델 간의 성능 지표와 비즈니스 결과를 비교하여 최적의 솔루션이나 하이브리드 솔루션을 식별합니다. + - **LLM의 실수 발견:** LLM 출력에서의 추론, 사실 및 논리적 오류를 식별하여 모델 최적화를 지원합니다. + - **LLM의 실수 수정:** LLM이 실수에서 학습하고 자기 수정 및 추론을 개선할 수 있도록 교정 데이터를 수집합니다. + - **식품 과학:** 식품 과학 및 영양 기능에 대한 연구 데이터를 수집하여 이 분야의 혁신을 촉진합니다. + - **라이프로그 캔버스:** 개인 행동 및 건강 관련 데이터를 추적하고 기록하여 행동 및 관련 연구를 지원합니다. +- **보상 구조:** 제출 평가에 따라 보상이 순위가 매겨지고 캠페인 후 분배됩니다. 악의적인 제출은 데이터 품질을 보장하기 위해 처벌됩니다. +- **일정:** 2025년 10월 13일 09:00 UTC - 2025년 10월 27일 09:00 UTC. + +
+ +
+ +## 2025년 10월 10일 +--- +**기능 출시: 프론티어별 보상 활동** + +
+ +
+ +프론티어를 위한 구성 가능한 보상 활동이 제공되어 추가적인 고부가가치 인센티브를 제공합니다. + +
+ +## Sep 26, 2025 +--- +**캠페인 시작: Codatta 부스터 캠페인 시즌 3 4주차** + +
+ +
+ +신뢰할 수 있는 다중 도메인 데이터 수집을 통해 AI 개발을 가속화하고, 커뮤니티 주도의 분산형 AI 지식 구축을 촉진합니다. + +- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 9월 26일 07:00 UTC – 2025년 10월 3일 07:00 UTC. + +
+ +
+ +## Sep 12, 2025 +--- +**캠페인 시작: Codatta 부스터 캠페인 시즌 3 3주차** + +
+ +
+ +AI 훈련 및 검증을 위해 생명, 로봇 공학, 암호화폐, 모델 비교 및 지문 검증에 걸친 교차 도메인 데이터를 수집합니다. + +- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 9월 12일 07:00 UTC – 2025년 9월 19일 07:00 UTC. + +
+ +
+ +## Sep 05, 2025 +--- +**캠페인 시작: Codatta 부스터 캠페인 시즌 3 2주차** + +
+ +
+ +AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친 교차 도메인 데이터를 수집하고 주석을 달기 위해 진행됩니다. + +- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 9월 5일 07:00 UTC – 2025년 9월 12일 07:00 UTC. + +
+ +
+ +## Aug 28, 2025 +--- +**기능 출시: 사용자 데이터 프로필** + +
+ +
+ +사용자 정보 모듈 내에 새로운 데이터 프로필 기능을 도입합니다. + +- **접근 방법:** 사용자 정보 > 데이터 프로필을 통해 총 제출 수, 획득한 보상 및 기여 통계를 시각적 대시보드에서 확인할 수 있습니다. +- **목적:** 기여에 대한 투명성을 제공하고, 가시적인 진행 상황 추적을 통해 참여를 강화하며, 장기적인 참여를 지원합니다. + +
+ +
+ +## Aug 22, 2025 +--- +**캠페인 시작: Codatta 부스터 캠페인 시즌 3 1주차** + +
+ +
+ +분산형 AI 훈련을 위해 생명, 로봇 공학 및 암호화폐에 걸친 교차 도메인 주석 데이터의 기초를 마련합니다. + +- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 8월 22일 07:00 UTC – 2025년 8월 29일 07:00 UTC. + +
+ +
+ +## Aug 15, 2025 +--- +**캠페인 시작: Codatta 부스터 캠페인 시즌 2 4주차** + +
+ +
+ +분산형 AI 훈련을 위해 음식 AI, 로봇 상호작용 및 CEX 온체인 데이터에 대한 도메인별 데이터 세트를 체계적으로 주석 달고 확장합니다. + +- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 8월 15일 07:00 UTC – 2025년 8월 22일 07:00 UTC. + +
+ +
+ +## Aug 08, 2025 +--- +**캠페인 시작: Codatta 부스터 캠페인 시즌 2 3주차** + +
+ +
+ +프로젝트 학습, 음식 AI 판단, 로봇 주석 및 CEX 데이터 확장을 포함한 네 가지 주요 영역에서 주석이 달린 데이터를 체계적으로 수집합니다. + +- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 8월 8일 07:00 UTC – 2025년 8월 15일 07:00 UTC. + +
+ +
+ +## Aug 01, 2025 +--- +**캠페인 시작: Codatta 부스터 캠페인 시즌 2 2주차** + +
+ +
+ +AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 라벨링을 포함한 세 가지 핵심 도메인에서 주석이 달린 데이터를 수집합니다. + +- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 8월 1일 07:00 UTC – 2025년 8월 8일 07:00 UTC. + +
+ +
+ +## July 24, 2025 +--- +**캠페인 시작: Codatta 부스터 캠페인 시즌 2 1주차** + +
+ +
+ +주석이 달린 실제 상호작용 데이터를 통해 AI 음식 분석을 검증하고 로봇 훈련을 향상시킵니다. + +- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 7월 24일 07:00 UTC – 2025년 7월 31일 07:00 UTC. + +
+ +
+ +## July 16, 2025 +--- +**캠페인 시작: Codatta 부스터 캠페인 시즌 1 4주차** + +
+ +
+ +무게, 조리 방법 및 칼로리 함량을 포함한 풍부한 주석을 수집하여 AI의 음식 이해를 심화합니다. + +- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY, 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 7월 16일 13:00 UTC – 2025년 7월 23일 13:00 UTC. + +
+ +
+ +## July 09, 2025 +--- +**캠페인 시작: Codatta 부스터 캠페인 시즌 1 3주차** + +
+ +
+ +문화적 및 맥락적 관련성을 넘어 단순한 라벨을 넘어서는 주석이 달린 즉석 식품 이미지를 수집하여 AI에게 인간의 식습관에 대한 미묘한 이해를 가르칩니다. + +- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY, 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 7월 9일 13:00 UTC – 2025년 7월 16일 13:00 UTC. + +
+ +
+ +## July 07, 2025 +--- +**기능 최적화: 퀘스트 시스템 복원** + +
+ +
+ +퀘스트 시스템이 완전히 복원되어 재개되었습니다. + +- **접근 방법:** 2025년 6월 30일에 일시적으로 오프라인 상태였으며, 현재는 종합적으로 복원되었습니다. +- **목적:** 아키텍처 업그레이드를 통해 시스템 안정성과 사용자 경험을 향상시키기 위함입니다. + +
+ +
+ +## 2025년 7월 02일 +--- +**캠페인 시작: Codatta 부스터 캠페인 시즌 1 2주차** + +
+ +
+ +채식, 비채식, 혼합 카테고리 전반에 걸쳐 세밀한 이미지 라벨링을 통해 AI의 글로벌 음식 문화 및 선호도 이해를 확장하기 위함입니다. + +- **접근 방법:** Binance Wallet 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (알파 포인트 ≥ 61). +- **보상:** 총 50,000,000 $XNY의 보상 풀, 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 7월 2일 13:00 UTC – 2025년 7월 9일 13:00 UTC. + +
+ +
+ +## 2025년 6월 25일 +--- +**캠페인 시작: Codatta 부스터 캠페인 시즌 1 1주차** + +
+ +
+ +주석이 달린 음식 데이터를 수집하고, 퀴즈를 통해 커뮤니티의 지식을 활용하며, 다단계 인센티브 구조를 통해 참여를 보상함으로써 첫 번째 시즌을 시작하기 위함입니다. + +- **접근 방법:** Binance Wallet 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (알파 포인트 ≥ 61). +- **보상:** 총 50,000,000 $XNY의 보상 풀, 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 6월 25일 13:00 UTC – 2025년 7월 2일 13:00 UTC. + +
{/* Component definitions - moved to end of file for cleaner code organization */} +export const ChangelogFilter = () => { + const [activeFilter, setActiveFilter] = useState('all'); + const [isOpen, setIsOpen] = useState(false); + const [isMenuHovered, setIsMenuHovered] = useState(false); + + useEffect(() => { + window.activeTypeFilter = activeFilter; + }, [activeFilter]); + + useEffect(() => { + const items = document.querySelectorAll('.changelog-item'); + const activeMonth = window.activeMonthFilter || 'all'; + + items.forEach((item) => { + const itemType = item.getAttribute('data-type'); + const itemMonth = item.getAttribute('data-month'); + + const typeMatch = activeFilter === 'all' || itemType === activeFilter; + const monthMatch = activeMonth === 'all' || itemMonth === activeMonth; + + item.style.display = typeMatch && monthMatch ? '' : 'none'; + }); + }, [activeFilter]); + + const filterTypes = [ + { id: 'all', label: 'All', color: '#6b7280', count: 24 }, + { id: 'core-feature', label: 'Core Feature Release', color: '#16A34A', count: 4 }, + { id: 'optimization', label: 'Adjustments & Optimization', color: '#F59E0B', count: 3 }, + { id: 'fixes', label: 'Fixes & Feature Sunset', color: '#EF4444', count: 3 }, + { id: 'campaign', label: 'Campaign Launch', color: '#A855F7', count: 14 } + ]; + + const activeType = filterTypes.find(type => type.id === activeFilter) || filterTypes[0]; + + return ( +
+
setIsOpen(!isOpen)} + style={{ + display: 'inline-flex', + alignItems: 'center', + gap: '0.5rem', + padding: '0.625rem 1rem', + border: '2px solid #e5e7eb', + borderRadius: '0.5rem', + background: 'white', + cursor: 'pointer', + fontSize: '0.875rem', + fontWeight: '500', + boxShadow: isOpen ? `0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)` : '0 1px 2px 0 rgba(0, 0, 0, 0.05)', + transition: 'all 0.2s ease', + userSelect: 'none', + minWidth: '200px' + }} + > + + + {activeType.label} ({activeType.count}) + + +
+ + {isOpen && ( +
setIsMenuHovered(true)} + onMouseLeave={() => setIsMenuHovered(false)} + style={{ + position: 'absolute', + top: '100%', + left: 0, + marginTop: '0.5rem', + backgroundColor: 'white', + border: `2px solid ${isMenuHovered ? '#9ca3af' : '#e5e7eb'}`, + borderRadius: '0.5rem', + boxShadow: isMenuHovered + ? '0 10px 15px -3px rgba(0, 0, 0, 0.15), 0 4px 6px -2px rgba(0, 0, 0, 0.1)' + : '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)', + zIndex: 1000, + minWidth: '280px', + overflow: 'hidden', + transition: 'border-color 0.2s ease, box-shadow 0.2s ease' + }} + > + {filterTypes.map((type) => ( +
{ + setActiveFilter(type.id); + setIsOpen(false); + }} + style={{ + padding: '0.75rem 1rem', + cursor: 'pointer', + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + borderBottom: type.id !== filterTypes[filterTypes.length - 1].id ? '1px solid #f3f4f6' : 'none', + backgroundColor: activeFilter === type.id ? '#f9fafb' : 'white', + transition: 'background-color 0.15s ease' + }} + onMouseEnter={(e) => { + if (activeFilter !== type.id) { + e.currentTarget.style.backgroundColor = '#f3f4f6'; + } + }} + onMouseLeave={(e) => { + if (activeFilter !== type.id) { + e.currentTarget.style.backgroundColor = 'white'; + } + }} + > + + {type.label} + + + {type.count} + +
+ ))} +
+ )} + + {isOpen && ( +
setIsOpen(false)} + style={{ + position: 'fixed', + top: 0, + left: 0, + right: 0, + bottom: 0, + zIndex: 999, + backgroundColor: 'transparent' + }} + /> + )} +
+ ); +}; + +export const MonthFilter = () => { + const [activeMonth, setActiveMonth] = useState('all'); + const [isOpen, setIsOpen] = useState(false); + const [isMenuHovered, setIsMenuHovered] = useState(false); + + useEffect(() => { + window.activeMonthFilter = activeMonth; + const event = new Event('monthFilterChange'); + window.dispatchEvent(event); + }, [activeMonth]); + + useEffect(() => { + const handleMonthChange = () => { + const items = document.querySelectorAll('.changelog-item'); + const activeType = window.activeTypeFilter || 'all'; + + items.forEach((item) => { + const itemType = item.getAttribute('data-type'); + const itemMonth = item.getAttribute('data-month'); + + const typeMatch = activeType === 'all' || itemType === activeType; + const monthMatch = activeMonth === 'all' || itemMonth === activeMonth; + + item.style.display = typeMatch && monthMatch ? '' : 'none'; + }); + }; + + window.addEventListener('monthFilterChange', handleMonthChange); + handleMonthChange(); + + return () => { + window.removeEventListener('monthFilterChange', handleMonthChange); + }; + }, [activeMonth]); + + const months = [ + { id: 'all', label: 'All Months', count: 24 }, + { id: 'dec', label: 'December', count: 1 }, + { id: 'nov', label: 'November', count: 3 }, + { id: 'oct', label: 'October', count: 6 }, + { id: 'sep', label: 'September', count: 3 }, + { id: 'aug', label: 'August', count: 5 }, + { id: 'jul', label: 'July', count: 5 }, + { id: 'jun', label: 'June', count: 1 } + ]; + + const activeMonthData = months.find(month => month.id === activeMonth) || months[0]; + + return ( +
+
setIsOpen(!isOpen)} + style={{ + display: 'inline-flex', + alignItems: 'center', + gap: '0.5rem', + padding: '0.625rem 1rem', + border: '2px solid #e5e7eb', + borderRadius: '0.5rem', + background: 'white', + cursor: 'pointer', + fontSize: '0.875rem', + fontWeight: '500', + boxShadow: isOpen ? `0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)` : '0 1px 2px 0 rgba(0, 0, 0, 0.05)', + transition: 'all 0.2s ease', + userSelect: 'none', + minWidth: '200px' + }} + > + + {activeMonthData.label} ({activeMonthData.count}) + + +
+ + {isOpen && ( +
setIsMenuHovered(true)} + onMouseLeave={() => setIsMenuHovered(false)} + style={{ + position: 'absolute', + top: '100%', + left: 0, + marginTop: '0.5rem', + backgroundColor: 'white', + border: `2px solid ${isMenuHovered ? '#9ca3af' : '#e5e7eb'}`, + borderRadius: '0.5rem', + boxShadow: isMenuHovered + ? '0 10px 15px -3px rgba(0, 0, 0, 0.15), 0 4px 6px -2px rgba(0, 0, 0, 0.1)' + : '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)', + zIndex: 1000, + minWidth: '280px', + overflow: 'hidden', + transition: 'border-color 0.2s ease, box-shadow 0.2s ease' + }} + > + {months.map((month) => ( +
{ + setActiveMonth(month.id); + setIsOpen(false); + }} + style={{ + padding: '0.75rem 1rem', + cursor: 'pointer', + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + borderBottom: month.id !== months[months.length - 1].id ? '1px solid #f3f4f6' : 'none', + backgroundColor: activeMonth === month.id ? '#f9fafb' : 'white', + transition: 'background-color 0.15s ease' + }} + onMouseEnter={(e) => { + if (activeMonth !== month.id) { + e.currentTarget.style.backgroundColor = '#f3f4f6'; + } + }} + onMouseLeave={(e) => { + if (activeMonth !== month.id) { + e.currentTarget.style.backgroundColor = 'white'; + } + }} + > + + {month.label} + + + {month.count} + +
+ ))} +
+ )} + + {isOpen && ( +
setIsOpen(false)} + style={{ + position: 'fixed', + top: 0, + left: 0, + right: 0, + bottom: 0, + zIndex: 999, + backgroundColor: 'transparent' + }} + /> + )} +
+ ); +}; From 5b089ab929689379a522ec402050d3c8bea673aa Mon Sep 17 00:00:00 2001 From: Joel Date: Sun, 4 Jan 2026 19:52:04 +0800 Subject: [PATCH 20/26] Fix changelog issues: unify date formats, fix parsing errors, update translation prompts --- cn/changelog/2025.mdx | 88 ++++++++++++++++++++++--------------------- docs.json | 11 ++++++ en/changelog/2025.mdx | 3 ++ ko/changelog/2025.mdx | 71 +++++++++++++++++++--------------- translate.js | 4 +- 5 files changed, 101 insertions(+), 76 deletions(-) diff --git a/cn/changelog/2025.mdx b/cn/changelog/2025.mdx index 61379e5..948787b 100644 --- a/cn/changelog/2025.mdx +++ b/cn/changelog/2025.mdx @@ -1,8 +1,10 @@ --- -title: "Changelog" -description: "This changelog documents all updates, fixes, and new features for Codatta in 2025." +title: "变更日志" +description: "本文档记录了 Codatta 在 2025 年的所有更新、修复和新功能。" --- +import { useState, useEffect } from 'react'; +
{num} - result{num !== 1 ? 's' : ''} + 条结果
); }; @@ -74,7 +76,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## Dec 04, 2025 +## 2025 年 12 月 04 日 --- **激励机制演变:长期生态管理的奖励锁定** @@ -94,7 +96,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## Nov 24, 2025 +## 2025 年 11 月 24 日 --- **活动启动:空投第二季** @@ -116,7 +118,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## Nov 05, 2025 +## 2025 年 11 月 05 日 --- **账户系统升级:去中心化身份(DID)正式上线** @@ -136,7 +138,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## Nov 03, 2025 +## 2025 年 11 月 03 日 --- **任务系统调整:加密前沿任务模块停用** @@ -153,7 +155,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## Oct 24, 2025 +## 2025 年 10 月 24 日 --- **前沿系统调整:机器人前沿停用** @@ -170,7 +172,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## Oct 23, 2025 +## 2025 年 10 月 23 日 --- **反垃圾邮件增强:实施每日提交限制** @@ -187,7 +189,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## Oct 20, 2025 +## 2025 年 10 月 20 日 --- **前沿系统调整:加密前沿停用** @@ -204,7 +206,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## Oct 15, 2025 +## 2025 年 10 月 15 日 --- **系统治理:平台黑名单控制实施** @@ -221,7 +223,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## Oct 13, 2025 +## 2025 年 10 月 13 日 --- **活动启动:空投第一季** @@ -245,7 +247,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## Oct 10, 2025 +## 2025 年 10 月 10 日 --- **功能发布:前沿特定奖励活动** @@ -255,7 +257,6 @@ description: "This changelog documents all updates, fixes, and new features for 现在为前沿提供可配置的奖励活动,提供额外的高价值激励。 -```html - **如何:** 选定的前沿任务提供额外的奖励,奖励以 $XNY 或 USDT 形式发放,与基础积分无关。活动参数(奖励金额、持续时间、目标)根据每个前沿任务设定,并在其各自的主页上显示。 - **为什么:** 通过有针对性的激励措施,推动用户更深入地参与高价值数据任务,从而提高数据质量和生态系统的参与度。 @@ -263,7 +264,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## 2025年9月26日 +## 2025 年 09 月 26 日 --- **活动启动: Codatta 助推器活动 第三季 第四周** @@ -281,7 +282,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## 2025年9月12日 +## 2025 年 09 月 12 日 --- **活动启动: Codatta 助推器活动 第三季 第三周** @@ -299,7 +300,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## 2025年9月5日 +## 2025 年 09 月 05 日 --- **活动启动: Codatta 助推器活动 第三季 第二周** @@ -317,7 +318,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## 2025年8月28日 +## 2025 年 08 月 28 日 --- **功能发布: 用户数据档案** @@ -334,7 +335,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## 2025年8月22日 +## 2025 年 08 月 22 日 --- **活动启动: Codatta 助推器活动 第三季 第一周** @@ -352,7 +353,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## 2025年8月15日 +## 2025 年 08 月 15 日 --- **活动启动: Codatta 助推器活动 第二季 第四周** @@ -370,7 +371,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## 2025年8月8日 +## 2025 年 08 月 08 日 --- **活动启动: Codatta 助推器活动 第二季 第三周** @@ -388,7 +389,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## 2025年8月1日 +## 2025 年 08 月 01 日 --- **活动启动: Codatta 助推器活动 第二季 第二周** @@ -406,7 +407,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## 2025年7月24日 +## 2025 年 07 月 24 日 --- **活动启动: Codatta 助推器活动 第二季 第一周** @@ -424,7 +425,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## 2025年7月16日 +## 2025 年 07 月 16 日 --- **活动启动: Codatta 助推器活动 第一季 第四周** @@ -442,7 +443,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## 2025年7月9日 +## 2025 年 07 月 09 日 --- **活动启动: Codatta 助推器活动 第一季 第三周** @@ -460,7 +461,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## 2025年7月7日 +## 2025 年 07 月 07 日 --- **功能优化: 任务系统恢复** @@ -474,11 +475,10 @@ description: "This changelog documents all updates, fixes, and new features for - **为什么:** 通过架构升级,提高系统稳定性和用户体验。
-```
-## 2025年7月02日 +## 2025 年 07 月 02 日 --- **活动启动:Codatta Booster 活动 第一季 第二周** @@ -496,7 +496,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## 2025年6月25日 +## 2025 年 06 月 25 日 --- **活动启动:Codatta Booster 活动 第一季 第一周** @@ -510,7 +510,9 @@ description: "This changelog documents all updates, fixes, and new features for - **奖励:** 总奖励池为 50,000,000 $XNY,任务完成并验证后发放。 - **时间安排:** 2025年6月25日 13:00 UTC – 2025年7月2日 13:00 UTC。 -
{/* Component definitions - moved to end of file for cleaner code organization */} +
+ +{/* Component definitions - moved to end of file for cleaner code organization */} export const ChangelogFilter = () => { const [activeFilter, setActiveFilter] = useState('all'); const [isOpen, setIsOpen] = useState(false); @@ -536,11 +538,11 @@ export const ChangelogFilter = () => { }, [activeFilter]); const filterTypes = [ - { id: 'all', label: 'All', color: '#6b7280', count: 24 }, - { id: 'core-feature', label: 'Core Feature Release', color: '#16A34A', count: 4 }, - { id: 'optimization', label: 'Adjustments & Optimization', color: '#F59E0B', count: 3 }, - { id: 'fixes', label: 'Fixes & Feature Sunset', color: '#EF4444', count: 3 }, - { id: 'campaign', label: 'Campaign Launch', color: '#A855F7', count: 14 } + { id: 'all', label: '全部', color: '#6b7280', count: 24 }, + { id: 'core-feature', label: '核心功能发布', color: '#16A34A', count: 4 }, + { id: 'optimization', label: '调整与优化', color: '#F59E0B', count: 3 }, + { id: 'fixes', label: '修复与功能停用', color: '#EF4444', count: 3 }, + { id: 'campaign', label: '活动启动', color: '#A855F7', count: 14 } ]; const activeType = filterTypes.find(type => type.id === activeFilter) || filterTypes[0]; @@ -712,14 +714,14 @@ export const MonthFilter = () => { }, [activeMonth]); const months = [ - { id: 'all', label: 'All Months', count: 24 }, - { id: 'dec', label: 'December', count: 1 }, - { id: 'nov', label: 'November', count: 3 }, - { id: 'oct', label: 'October', count: 6 }, - { id: 'sep', label: 'September', count: 3 }, - { id: 'aug', label: 'August', count: 5 }, - { id: 'jul', label: 'July', count: 5 }, - { id: 'jun', label: 'June', count: 1 } + { id: 'all', label: '全部月份', count: 24 }, + { id: 'dec', label: '十二月', count: 1 }, + { id: 'nov', label: '十一月', count: 3 }, + { id: 'oct', label: '十月', count: 6 }, + { id: 'sep', label: '九月', count: 3 }, + { id: 'aug', label: '八月', count: 5 }, + { id: 'jul', label: '七月', count: 5 }, + { id: 'jun', label: '六月', count: 1 } ]; const activeMonthData = months.find(month => month.id === activeMonth) || months[0]; diff --git a/docs.json b/docs.json index 742763f..f8da602 100644 --- a/docs.json +++ b/docs.json @@ -239,6 +239,17 @@ ] } ] + }, + { + "tab": "변경 로그", + "groups": [ + { + "group": "2025", + "pages": [ + "ko/changelog/2025" + ] + } + ] } ] } diff --git a/en/changelog/2025.mdx b/en/changelog/2025.mdx index dcc6f8e..895dc87 100644 --- a/en/changelog/2025.mdx +++ b/en/changelog/2025.mdx @@ -3,6 +3,8 @@ title: "Changelog" description: "This changelog documents all updates, fixes, and new features for Codatta in 2025." --- +import { useState, useEffect } from 'react'; +
## Dec 04, 2025 + --- **Evolving Incentives: Reward Lock-ups for Long-term Ecosystem Management** diff --git a/ko/changelog/2025.mdx b/ko/changelog/2025.mdx index 946ec91..ffd4e66 100644 --- a/ko/changelog/2025.mdx +++ b/ko/changelog/2025.mdx @@ -1,8 +1,10 @@ --- -title: "Changelog" -description: "This changelog documents all updates, fixes, and new features for Codatta in 2025." +title: "변경 로그" +description: "이 변경 로그는 Codatta의 2025년 모든 업데이트, 수정 사항 및 새로운 기능을 문서화합니다." --- +import { useState, useEffect } from 'react'; +
{num} - result{num !== 1 ? 's' : ''} + 개 결과
); }; @@ -255,9 +257,14 @@ description: "This changelog documents all updates, fixes, and new features for 프론티어를 위한 구성 가능한 보상 활동이 제공되어 추가적인 고부가가치 인센티브를 제공합니다. +- **방법:** 선택된 프론티어 작업은 기본 포인트와 무관하게 $XNY 또는 USDT로 추가 보상을 제공합니다. 활동 매개변수(보상 금액, 지속 시간, 목표)는 각 프론티어별로 설정되며 각각의 홈페이지에 표시됩니다. +- **목적:** 타겟팅된 인센티브를 통해 고부가가치 데이터 작업에 대한 더 깊은 참여를 유도하여 데이터 품질과 생태계 참여를 모두 개선하기 위함입니다. + +
+
-## Sep 26, 2025 +## 2025년 09월 26일 --- **캠페인 시작: Codatta 부스터 캠페인 시즌 3 4주차** @@ -275,7 +282,7 @@ description: "This changelog documents all updates, fixes, and new features for
-## Sep 12, 2025 +## 2025년 09월 12일 --- **캠페인 시작: Codatta 부스터 캠페인 시즌 3 3주차** @@ -293,7 +300,7 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학, 암호화폐, 모델 비
-## Sep 05, 2025 +## 2025년 09월 05일 --- **캠페인 시작: Codatta 부스터 캠페인 시즌 3 2주차** @@ -311,7 +318,7 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친
-## Aug 28, 2025 +## 2025년 08월 28일 --- **기능 출시: 사용자 데이터 프로필** @@ -328,7 +335,7 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친
-## Aug 22, 2025 +## 2025년 08월 22일 --- **캠페인 시작: Codatta 부스터 캠페인 시즌 3 1주차** @@ -346,7 +353,7 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친
-## Aug 15, 2025 +## 2025년 08월 15일 --- **캠페인 시작: Codatta 부스터 캠페인 시즌 2 4주차** @@ -364,7 +371,7 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친
-## Aug 08, 2025 +## 2025년 08월 08일 --- **캠페인 시작: Codatta 부스터 캠페인 시즌 2 3주차** @@ -382,7 +389,7 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친
-## Aug 01, 2025 +## 2025년 08월 01일 --- **캠페인 시작: Codatta 부스터 캠페인 시즌 2 2주차** @@ -400,7 +407,7 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터
-## July 24, 2025 +## 2025년 07월 24일 --- **캠페인 시작: Codatta 부스터 캠페인 시즌 2 1주차** @@ -418,7 +425,7 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터
-## July 16, 2025 +## 2025년 07월 16일 --- **캠페인 시작: Codatta 부스터 캠페인 시즌 1 4주차** @@ -436,7 +443,7 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터
-## July 09, 2025 +## 2025년 07월 09일 --- **캠페인 시작: Codatta 부스터 캠페인 시즌 1 3주차** @@ -454,7 +461,7 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터
-## July 07, 2025 +## 2025년 07월 07일 --- **기능 최적화: 퀘스트 시스템 복원** @@ -471,7 +478,7 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터
-## 2025년 7월 02일 +## 2025년 07월 02일 --- **캠페인 시작: Codatta 부스터 캠페인 시즌 1 2주차** @@ -489,7 +496,7 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터
-## 2025년 6월 25일 +## 2025년 06월 25일 --- **캠페인 시작: Codatta 부스터 캠페인 시즌 1 1주차** @@ -503,7 +510,9 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 - **보상:** 총 50,000,000 $XNY의 보상 풀, 작업 완료 및 검증 후 분배됩니다. - **일정:** 2025년 6월 25일 13:00 UTC – 2025년 7월 2일 13:00 UTC. -
{/* Component definitions - moved to end of file for cleaner code organization */} +
+ +{/* Component definitions - moved to end of file for cleaner code organization */} export const ChangelogFilter = () => { const [activeFilter, setActiveFilter] = useState('all'); const [isOpen, setIsOpen] = useState(false); @@ -529,11 +538,11 @@ export const ChangelogFilter = () => { }, [activeFilter]); const filterTypes = [ - { id: 'all', label: 'All', color: '#6b7280', count: 24 }, - { id: 'core-feature', label: 'Core Feature Release', color: '#16A34A', count: 4 }, - { id: 'optimization', label: 'Adjustments & Optimization', color: '#F59E0B', count: 3 }, - { id: 'fixes', label: 'Fixes & Feature Sunset', color: '#EF4444', count: 3 }, - { id: 'campaign', label: 'Campaign Launch', color: '#A855F7', count: 14 } + { id: 'all', label: '전체', color: '#6b7280', count: 24 }, + { id: 'core-feature', label: '핵심 기능 출시', color: '#16A34A', count: 4 }, + { id: 'optimization', label: '조정 및 최적화', color: '#F59E0B', count: 3 }, + { id: 'fixes', label: '수정 및 기능 종료', color: '#EF4444', count: 3 }, + { id: 'campaign', label: '캠페인 시작', color: '#A855F7', count: 14 } ]; const activeType = filterTypes.find(type => type.id === activeFilter) || filterTypes[0]; @@ -705,14 +714,14 @@ export const MonthFilter = () => { }, [activeMonth]); const months = [ - { id: 'all', label: 'All Months', count: 24 }, - { id: 'dec', label: 'December', count: 1 }, - { id: 'nov', label: 'November', count: 3 }, - { id: 'oct', label: 'October', count: 6 }, - { id: 'sep', label: 'September', count: 3 }, - { id: 'aug', label: 'August', count: 5 }, - { id: 'jul', label: 'July', count: 5 }, - { id: 'jun', label: 'June', count: 1 } + { id: 'all', label: '전체 월', count: 24 }, + { id: 'dec', label: '12월', count: 1 }, + { id: 'nov', label: '11월', count: 3 }, + { id: 'oct', label: '10월', count: 6 }, + { id: 'sep', label: '9월', count: 3 }, + { id: 'aug', label: '8월', count: 5 }, + { id: 'jul', label: '7월', count: 5 }, + { id: 'jun', label: '6월', count: 1 } ]; const activeMonthData = months.find(month => month.id === activeMonth) || months[0]; diff --git a/translate.js b/translate.js index 4347867..9e833b6 100644 --- a/translate.js +++ b/translate.js @@ -11,13 +11,13 @@ const TARGET_LANGS = [ code: "cn", name: "Chinese", systemPrompt: - "请将以下英文 changelog 按中文语境重写一下,要求:1. 只翻译纯文本部分,忽略任何 HTML 标签、代码块、表格、特殊格式(如代码行、列)等,看着像代码也保留不动。2. 保留原有 HTML 标签和结构,不要修改格式。3. 保证翻译内容准确。4.小标题的单词也要翻译(标题的日期不要翻译)。5.不要直译,要理解英文原文的语义,然后用符合中文语言习惯的自然方式重新表述。例如:'action' 不应直译为'行动',而应根据上下文用更自然的中文表达。确保翻译后的中文读起来自然流畅,符合中文表达习惯。", + "请将以下英文 changelog 按中文语境重写一下,要求:1. 只翻译纯文本部分,忽略任何 HTML 标签、代码块、表格、特殊格式(如代码行、列)等,看着像代码也保留不动。2. 保留原有 HTML 标签和结构,不要修改格式。3. 保证翻译内容准确。4.小标题的单词也要翻译,日期也要翻译,但必须遵循统一的日期格式。5.不要直译,要理解英文原文的语义,然后用符合中文语言习惯的自然方式重新表述。例如:'action' 不应直译为'行动',而应根据上下文用更自然的中文表达(如'操作'、'动作'等)。6.以下术语和表达必须固定使用,不要翻译:- 'Frontier' 和 'Frontiers' 是产品名,保持英文不翻译;- 'Lineage' 翻译为'血缘'(因为我们有产品叫 Data Lineage 数据血缘);- 小要点中的 'How' 不要翻译成'如何',统一翻译为'运作方式';- 'Timeline' 不要翻译成'时间表'、'时间安排',统一翻译为'活动时间';- 'Access' 不要翻译成'访问'、'访问方式',统一翻译为'参与方式';- 'Lock' 统一翻译为'锁仓'。7.日期格式必须严格统一为:'2025 年 12 月 04 日'格式(汉字和数字之间必须保留 1 个空格,年份、月份、日期都是两位数,月份和日期不足两位要补零,例如:'2025 年 09 月 05 日'、'2025 年 06 月 25 日')。所有日期标题(如 '## Dec 04, 2025')必须翻译为 '## 2025 年 12 月 04 日' 格式。确保翻译后的中文读起来自然流畅,符合中文表达习惯。", }, { code: "ko", name: "Korean", systemPrompt: - "다음 영어 changelog 를 한국어 문맥에 맞게 재작성해 주세요. 다음 요구사항을 엄격히 준수하세요: 1. 텍스트 내용만 번역하고, HTML 태그, 코드 블록, 표, 특수 형식(예: 코드 행, 열 등) 등은 무시하고, 코드로 보이는 모든 내용은 그대로 유지하세요. 2. 원본 HTML 태그와 구조를 유지하고, 형식을 수정하지 마세요. 3. 번역 내용의 정확성을 보장하세요. 4. 소제목의 단어도 반드시 번역하세요(소제목의 날짜는 번역하지 마세요). 5. 직역하지 말고, 영어 원문의 의미를 이해한 후 한국어 언어 습관에 맞는 자연스러운 방식으로 재표현하세요. 예를 들어, 'action'을 단순히 '행동'으로 직역하지 말고, 문맥에 따라 더 자연스러운 한국어 표현을 사용하세요. 번역된 한국어가 자연스럽고 유창하게 읽히도록 한국어 표현 습관에 맞게 작성하세요.", + "다음 영어 changelog 를 한국어 문맥에 맞게 재작성해 주세요. 다음 요구사항을 엄격히 준수하세요: 1. 텍스트 내용만 번역하고, HTML 태그, 코드 블록, 표, 특수 형식(예: 코드 행, 열 등) 등은 무시하고, 코드로 보이는 모든 내용은 그대로 유지하세요. 2. 원본 HTML 태그와 구조를 유지하고, 형식을 수정하지 마세요. 3. 번역 내용의 정확성을 보장하세요. 4. 소제목의 단어도 반드시 번역하세요. 날짜도 번역해야 하며, 반드시 통일된 날짜 형식을 따라야 합니다. 5. 직역하지 말고, 영어 원문의 의미를 이해한 후 한국어 언어 습관에 맞는 자연스러운 방식으로 재표현하세요. 예를 들어, 'action'을 단순히 '행동'으로 직역하지 말고, 문맥에 따라 더 자연스러운 한국어 표현을 사용하세요. 6. 날짜 형식은 반드시 '2025년 12월 04일' 형식으로 통일하세요(년, 월, 일은 모두 두 자리 숫자이며, 월과 일이 한 자리인 경우 앞에 0을 붙여야 합니다. 예: '2025년 09월 05일', '2025년 06월 25일'). 모든 날짜 제목(예: '## Dec 04, 2025')은 '## 2025년 12월 04일' 형식으로 번역해야 합니다. 번역된 한국어가 자연스럽고 유창하게 읽히도록 한국어 표현 습관에 맞게 작성하세요.", }, ]; From 98e1c55cadfcd376a0aa3bf70eba3cb8b12115e0 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sun, 4 Jan 2026 11:56:29 +0000 Subject: [PATCH 21/26] chore: auto translate (20260104-115629) --- cn/changelog/2025.mdx | 259 +++++++++++++++++++++--------------------- ko/changelog/2025.mdx | 175 ++++++++++++++-------------- 2 files changed, 217 insertions(+), 217 deletions(-) diff --git a/cn/changelog/2025.mdx b/cn/changelog/2025.mdx index 948787b..edeac2d 100644 --- a/cn/changelog/2025.mdx +++ b/cn/changelog/2025.mdx @@ -1,6 +1,6 @@ --- -title: "变更日志" -description: "本文档记录了 Codatta 在 2025 年的所有更新、修复和新功能。" +title: "Changelog" +description: "This changelog documents all updates, fixes, and new features for Codatta in 2025." --- import { useState, useEffect } from 'react'; @@ -67,7 +67,7 @@ import { useState, useEffect } from 'react'; flexShrink: 0 }}> {num} - 条结果 + result{num !== 1 ? 's' : ''}
); }; @@ -77,20 +77,21 @@ import { useState, useEffect } from 'react';
## 2025 年 12 月 04 日 + --- -**激励机制演变:长期生态管理的奖励锁定** +**激励机制演变:长期生态管理的奖励锁仓**
-为高激励任务(例如,在空投或前沿活动中)提供的可选奖励锁定功能。 +为高激励任务(例如,在空投或 Frontier 活动中)提供的可选锁仓功能。 - **触发:** 活动结束后,奖励将存入您的余额。 -- **锁定:** 通过资产页面将奖励锁定在智能合约中以确保安全。 -- **释放:** 锁定期结束后,您可以一键将奖励直接提取到您的钱包。 +- **锁仓:** 通过资产页面将奖励锁定在智能合约中以确保安全。 +- **释放:** 在锁仓期结束后,您可以一键将奖励直接提取到您的钱包。 -这是我们激励系统向细化管理演变的重要一步。它为高奖励场景中的流动性管理提供了工具,平衡了短期参与与生态系统的长期健康。 +这是我们激励系统向精细化管理演变的关键一步。它为在高奖励场景中管理流动性提供了工具,平衡了短期参与与生态系统的长期健康。
@@ -104,15 +105,15 @@ import { useState, useEffect } from 'react';
-系统性地收集物理学、金融和多模态领域的学术级数据集,并为三个新前沿建立高质量的数据管道。 +系统性地收集物理学、金融和多模态领域的学术级数据集,并为三个新 Frontier 启动高质量数据管道。 -- **行动:** 启动空投第二季,奖池为100万$XNY(3个月线性归属)。 -- **新前沿:** - - **高级物理问题:** 供领域专家提交当前AI无法正确回答的高难度物理问题。 - - **加密与股票信息:** 为AI提供与加密货币和股票投资决策相关的可靠信息。 - - **现实世界照片:** 为AI提供包含注释元数据的现实世界照片。 -- **奖励结构:** 任务完成奖励占90%,排行榜排名占10%。 -- **时间表:** 2025年11月24日09:00 UTC – 2025年12月8日09:00 UTC。 +- **操作:** 启动空投第二季,奖金池为 100 万 $XNY(3 个月线性解锁)。 +- **新 Frontier:** + - **高级物理问题:** 供领域专家提交当前 AI 无法正确回答的高难度物理问题。 + - **加密与股票信息:** 为 AI 提供与加密货币和股票投资决策相关的可靠信息。 + - **现实世界照片:** 为 AI 提供包含注释元数据的现实世界照片。 +- **奖励结构:** 任务完成奖励占 90%,排行榜排名奖励占 10%。 +- **活动时间:** 2025 年 11 月 24 日 09:00 UTC – 2025 年 12 月 08 日 09:00 UTC。
@@ -120,19 +121,19 @@ import { useState, useEffect } from 'react'; ## 2025 年 11 月 05 日 --- -**账户系统升级:去中心化身份(DID)正式上线** +**账户系统升级:DID 正式上线**
-一项基础升级,使账户绑定到去中心化身份(DID)。 +一项基础升级,使账户能够绑定到去中心化标识符(DID)。 -- **绑定:** 通过下次登录Codatta自助集成链上DID。 -- **关联:** 绑定的DID作为统一主键,系统性地索引所有任务操作、数据贡献和奖励分配。 -- **血统:** 实现链上和链下活动的完整可追溯性和验证,建立不可变的数据来源。 +- **绑定:** 通过下次登录 Codatta 自助集成链上 DID。 +- **关联:** 绑定的 DID 作为统一主键,系统性地索引所有任务操作、数据贡献和奖励分配。 +- **血缘:** 实现链上和链下活动的完全可追溯性和验证,建立不可变的数据来源。 -此部署为可验证的数据经济奠定了技术基础。通过为每位贡献者提供持久的、独特的数字身份,我们实现了细化的贡献归属、明确的所有权验证和协议层面的透明激励分配。 +此部署为可验证的数据经济奠定了技术基础。通过为每位贡献者提供持久的、独特的数字身份,我们实现了精细化的贡献归属、明确的所有权验证和协议层面的透明激励分配。
@@ -140,16 +141,16 @@ import { useState, useEffect } from 'react'; ## 2025 年 11 月 03 日 --- -**任务系统调整:加密前沿任务模块停用** +**任务系统调整:加密 Frontier QUEST 模块停用**
-整个加密前沿任务模块及所有相关任务——包括提交、验证和赏金猎人——已下线。 +整个加密 Frontier QUEST 模块及所有相关任务——包括提交、验证和赏金猎人——已下线。 -- **原因:** 该模块已完成当前产品路线图下的计划生命周期。停用有助于系统精简和资源重新配置,以支持即将发布的新功能。 -- **注意:** 用户在该模块的历史贡献记录和获得的奖励保持不变。此变更不影响其他前沿模块。 +- **原因:** 该模块已完成当前产品路线图下的计划生命周期。停用支持系统精简和资源重新配置,以便于即将发布的新功能。 +- **注意:** 用户在该模块的历史贡献记录和获得的奖励保持不变。此更改不影响其他 Frontier 模块。
@@ -157,16 +158,16 @@ import { useState, useEffect } from 'react'; ## 2025 年 10 月 24 日 --- -**前沿系统调整:机器人前沿停用** +**Frontier 系统调整:机器人 Frontier 停用**
-机器人前沿已正式停用。此操作仅影响前端入口点。所有历史贡献数据保持完整且可访问。 +机器人 Frontier 已正式停用。此操作仅影响前端入口点。所有历史贡献数据保持完整且可访问。 -- **原因:** 此决定是我们持续产品精简的一部分,旨在将资源和用户注意力集中在我们最高优先级的活跃前沿上。机器人前沿已完成其计划的探索阶段,停用使我们能够整合努力。 -- **注意:** 用户在机器人前沿的过去贡献和奖励被保留,并可在其贡献历史中查看。其他前沿或平台功能不受影响。 +- **原因:** 此决定是我们持续产品精简的一部分,旨在将资源和用户注意力集中在我们最高优先级的活跃 Frontier 上。机器人 Frontier 已完成其计划的探索阶段,停用使我们能够整合努力。 +- **注意:** 用户在机器人 Frontier 的过去贡献和奖励被保留,并可在其贡献历史中查看。其他 Frontier 或平台功能不受影响。
@@ -182,7 +183,7 @@ import { useState, useEffect } from 'react'; 一项新的平台安全政策,以防止任务垃圾邮件。 -- **如何:** 对每个任务实施可配置的每日提交上限。 +- **运作方式:** 对每个任务实施可配置的每日提交上限。 - **原因:** 保护系统资源,确保所有贡献者的公平参与,并维护任务生态系统的长期健康和公平性。
@@ -191,16 +192,16 @@ import { useState, useEffect } from 'react'; ## 2025 年 10 月 20 日 --- -**前沿系统调整:加密前沿停用** +**Frontier 系统调整:加密 Frontier 停用**
-加密前沿已正式停用。此操作仅影响前端入口点。所有历史贡献数据保持完整且可访问。 +加密 Frontier 已正式停用。此操作仅影响前端入口点。所有历史贡献数据保持完整且可访问。 -- **原因:** 此决定是我们持续产品精简的一部分,旨在将资源和用户注意力集中在我们最高优先级的活跃前沿上。加密前沿已完成其计划的探索阶段,停用使我们能够整合努力。 -- **注意:** 用户在加密前沿的过去贡献和奖励被保留,并可在其贡献历史中查看。其他前沿或平台功能不受影响。 +- **原因:** 此决定是我们持续产品精简的一部分,旨在将资源和用户注意力集中在我们最高优先级的活跃 Frontier 上。加密 Frontier 已完成其计划的探索阶段,停用使我们能够整合努力。 +- **注意:** 用户在加密 Frontier 的过去贡献和奖励被保留,并可在其贡献历史中查看。其他 Frontier 或平台功能不受影响。
@@ -216,7 +217,7 @@ import { useState, useEffect } from 'react'; 平台上实施了一项新的黑名单控制功能。 -- **如何:** 指定的管理员现在可以应用黑名单规则以限制恶意账户。 +- **运作方式:** 指定管理员现在可以应用黑名单规则以限制恶意账户。 - **原因:** 增强平台安全性,保护贡献者利益,维护生态系统公平性。
@@ -231,17 +232,17 @@ import { useState, useEffect } from 'react';
-通过高奖励机制和反垃圾邮件执行系统性地收集高质量、结构化的数据,确保有效性和学术价值,并奖励长期贡献者,丰富平台的数据生态系统,推出五个新前沿模块。 +通过高奖励机制和反垃圾邮件执行系统性收集高质量、结构化的数据,确保有效性和学术价值,并奖励长期贡献者,丰富平台的数据生态系统,推出五个新 Frontier 模块。 -- **行动:** 启动空投第一季,奖池为250万$XNY及积分奖励。 -- **新前沿:** - - **模型比较:** 比较不同AI模型的性能指标和商业结果,以识别最佳或混合解决方案。 - - **识别LLM错误:** 识别LLM输出中的推理、事实和逻辑错误,以支持模型优化。 - - **纠正LLM错误:** 收集纠正数据,帮助LLM从错误中学习,提高自我纠正和推理能力。 - - **食品科学:** 收集食品科学和营养功能方面的研究数据,以推动该领域的创新。 - - **生活记录画布:** 跟踪和记录个人行为及健康相关数据,以支持行为及相关研究。 -- **奖励结构:** 奖励根据提交评级排名,并在活动结束后分配。恶意提交将受到惩罚,以确保数据质量。 -- **时间表:** 2025年10月13日09:00 UTC - 2025年10月27日09:00 UTC。 +- **操作:** 启动空投第一季,奖金池为 250 万 $XNY 和积分奖励。 +- **新 Frontier:** + - **模型比较:** 比较不同 AI 模型的性能指标和商业结果,以识别最佳或混合解决方案。 + - **识别 LLM 错误:** 识别 LLM 输出中的推理、事实和逻辑错误,以支持模型优化。 + - **纠正 LLM 错误:** 收集纠正数据,帮助 LLM 从错误中学习,提高自我纠正和推理能力。 + - **食品科学:** 收集食品科学和营养功能的研究数据,以推动该领域的创新。 + - **生活记录画布:** 跟踪和记录个人行为和健康相关数据,以支持行为及相关研究。 +- **奖励结构:** 奖励根据提交评分排名,并在活动结束后分配。恶意提交将受到惩罚,以确保数据质量。 +- **活动时间:** 2025 年 10 月 13 日 09:00 UTC - 2025 年 10 月 27 日 09:00 UTC。
@@ -249,16 +250,16 @@ import { useState, useEffect } from 'react'; ## 2025 年 10 月 10 日 --- -**功能发布:前沿特定奖励活动** +**功能发布:Frontier 特定奖励活动**
-现在为前沿提供可配置的奖励活动,提供额外的高价值激励。 +现在为 Frontiers 提供可配置的奖励活动,提供额外的高价值激励。 -- **如何:** 选定的前沿任务提供额外的奖励,奖励以 $XNY 或 USDT 形式发放,与基础积分无关。活动参数(奖励金额、持续时间、目标)根据每个前沿任务设定,并在其各自的主页上显示。 -- **为什么:** 通过有针对性的激励措施,推动用户更深入地参与高价值数据任务,从而提高数据质量和生态系统的参与度。 +- **运作方式:** 选定的 Frontier 任务提供额外的奖励,奖励以 $XNY 或 USDT 形式发放,与基础积分无关。活动参数(奖励金额、持续时间、目标)根据每个 Frontier 设置,并在其各自的主页上显示。 +- **原因:** 通过有针对性的激励措施,推动对高价值数据任务的更深入参与,提高数据质量和生态系统的参与度。
@@ -266,17 +267,17 @@ import { useState, useEffect } from 'react'; ## 2025 年 09 月 26 日 --- -**活动启动: Codatta 助推器活动 第三季 第四周** +**活动启动:Codatta Booster 活动 第三季 第四周**
-通过可信的多领域数据收集,加速人工智能的发展,并促进社区驱动的去中心化人工智能知识构建。 +通过可信的多领域数据收集加速 AI 发展,并促进社区驱动的去中心化 AI 知识构建。 -- **访问:** 通过币安钱包助推器标签或主页横幅访问(需要 Alpha 积分 ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 -- **时间表:** 2025年9月26日 07:00 UTC – 2025年10月3日 07:00 UTC。 +- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **活动时间:** 2025 年 09 月 26 日 07:00 UTC – 2025 年 10 月 03 日 07:00 UTC。
@@ -284,17 +285,17 @@ import { useState, useEffect } from 'react'; ## 2025 年 09 月 12 日 --- -**活动启动: Codatta 助推器活动 第三季 第三周** +**活动启动:Codatta Booster 活动 第三季 第三周**
-收集跨领域的数据,涵盖生活、机器人、加密货币、模型比较和指纹验证,以用于人工智能的训练和验证。 +收集跨领域数据,涵盖生活、机器人、加密货币、模型比较和指纹验证,以用于 AI 训练和验证。 -- **访问:** 通过币安钱包助推器标签或主页横幅访问(需要 Alpha 积分 ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 -- **时间表:** 2025年9月12日 07:00 UTC – 2025年9月19日 07:00 UTC。 +- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **活动时间:** 2025 年 09 月 12 日 07:00 UTC – 2025 年 09 月 19 日 07:00 UTC。
@@ -302,17 +303,17 @@ import { useState, useEffect } from 'react'; ## 2025 年 09 月 05 日 --- -**活动启动: Codatta 助推器活动 第三季 第二周** +**活动启动:Codatta Booster 活动 第三季 第二周**
-收集和注释跨领域的数据,涵盖生活、机器人和加密货币,以用于人工智能的训练和验证。 +收集和注释跨领域数据,涵盖生活、机器人和加密货币,以用于 AI 训练和验证。 -- **访问:** 通过币安钱包助推器标签或主页横幅访问(需要 Alpha 积分 ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 -- **时间表:** 2025年9月5日 07:00 UTC – 2025年9月12日 07:00 UTC。 +- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **活动时间:** 2025 年 09 月 05 日 07:00 UTC – 2025 年 09 月 12 日 07:00 UTC。
@@ -320,7 +321,7 @@ import { useState, useEffect } from 'react'; ## 2025 年 08 月 28 日 --- -**功能发布: 用户数据档案** +**功能发布:用户数据档案**
@@ -328,8 +329,8 @@ import { useState, useEffect } from 'react'; 在用户信息模块中引入新的数据档案功能。 -- **如何:** 通过用户信息 > 数据档案访问,查看您的总提交、获得的奖励和贡献统计信息,呈现在可视化仪表板中。 -- **为什么:** 提供对您贡献的透明度,通过可见的进度跟踪增强参与感,并支持长期参与。 +- **运作方式:** 通过用户信息 > 数据档案访问,查看您的总提交、获得的奖励和贡献统计信息,呈现在可视化仪表板中。 +- **原因:** 提供对您贡献的透明度,通过可见的进度跟踪增强参与感,并支持长期参与。
@@ -337,17 +338,17 @@ import { useState, useEffect } from 'react'; ## 2025 年 08 月 22 日 --- -**活动启动: Codatta 助推器活动 第三季 第一周** +**活动启动:Codatta Booster 活动 第三季 第一周**
-为去中心化的人工智能训练建立跨领域注释数据的基础,涵盖生活、机器人和加密货币。 +为去中心化 AI 训练建立跨领域注释数据的基础,涵盖生活、机器人和加密货币。 -- **访问:** 通过币安钱包助推器标签或主页横幅访问(需要 Alpha 积分 ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 -- **时间表:** 2025年8月22日 07:00 UTC – 2025年8月29日 07:00 UTC。 +- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **活动时间:** 2025 年 08 月 22 日 07:00 UTC – 2025 年 08 月 29 日 07:00 UTC。
@@ -355,17 +356,17 @@ import { useState, useEffect } from 'react'; ## 2025 年 08 月 15 日 --- -**活动启动: Codatta 助推器活动 第二季 第四周** +**活动启动:Codatta Booster 活动 第二季 第四周**
-系统性地注释和扩展食品人工智能、机器人交互和 CEX 链上数据的领域特定数据集,以用于去中心化的人工智能训练。 +系统性地注释和扩展食品 AI、机器人交互和 CEX 链上数据的领域特定数据集,以用于去中心化 AI 训练。 -- **访问:** 通过币安钱包助推器标签或主页横幅访问(需要 Alpha 积分 ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 -- **时间表:** 2025年8月15日 07:00 UTC – 2025年8月22日 07:00 UTC。 +- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **活动时间:** 2025 年 08 月 15 日 07:00 UTC – 2025 年 08 月 22 日 07:00 UTC。
@@ -373,17 +374,17 @@ import { useState, useEffect } from 'react'; ## 2025 年 08 月 08 日 --- -**活动启动: Codatta 助推器活动 第二季 第三周** +**活动启动:Codatta Booster 活动 第二季 第三周**
-系统性地收集四个关键领域的注释数据:项目学习、食品人工智能判断、机器人注释和 CEX 数据扩展。 +系统性地收集四个关键领域的注释数据:项目学习、食品 AI 判断、机器人注释和 CEX 数据扩展。 -- **访问:** 通过币安钱包助推器标签或主页横幅访问(Alpha 积分 ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 -- **时间表:** 2025年8月8日 07:00 UTC – 2025年8月15日 07:00 UTC。 +- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **活动时间:** 2025 年 08 月 08 日 07:00 UTC – 2025 年 08 月 15 日 07:00 UTC。
@@ -391,17 +392,17 @@ import { useState, useEffect } from 'react'; ## 2025 年 08 月 01 日 --- -**活动启动: Codatta 助推器活动 第二季 第二周** +**活动启动:Codatta Booster 活动 第二季 第二周**
-收集三个核心领域的注释数据:人工智能食品模型比较、机器人交互注释和 CEX 热钱包数据标注。 +收集三个核心领域的注释数据:AI 食品模型比较、机器人交互注释和 CEX 热钱包数据标注。 -- **访问:** 通过币安钱包助推器标签或主页横幅访问(Alpha 积分 ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 -- **时间表:** 2025年8月1日 07:00 UTC – 2025年8月8日 07:00 UTC。 +- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **活动时间:** 2025 年 08 月 01 日 07:00 UTC – 2025 年 08 月 08 日 07:00 UTC。
@@ -409,17 +410,17 @@ import { useState, useEffect } from 'react'; ## 2025 年 07 月 24 日 --- -**活动启动: Codatta 助推器活动 第二季 第一周** +**活动启动:Codatta Booster 活动 第二季 第一周**
-通过注释的真实世界交互数据,验证人工智能食品分析并增强机器人训练。 +通过注释的真实世界交互数据来验证 AI 食品分析并增强机器人训练。 -- **访问:** 通过币安钱包助推器标签或主页横幅访问(Alpha 积分 ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁定期),在任务完成和验证后分发。 -- **时间表:** 2025年7月24日 07:00 UTC – 2025年7月31日 07:00 UTC。 +- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **活动时间:** 2025 年 07 月 24 日 07:00 UTC – 2025 年 07 月 31 日 07:00 UTC。
@@ -427,17 +428,17 @@ import { useState, useEffect } from 'react'; ## 2025 年 07 月 16 日 --- -**活动启动: Codatta 助推器活动 第一季 第四周** +**活动启动:Codatta Booster 活动 第一季 第四周**
-通过收集丰富的注释,深化人工智能对食品的理解,超越标签,涵盖重量、烹饪方法和热量内容。 +通过收集丰富的注释,深化 AI 对食品的理解,这些注释不仅限于标签,还包括重量、烹饪方法和热量含量。 -- **访问:** 通过币安钱包助推器标签或主页横幅访问(Alpha 积分 ≥ 61)。 +- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 - **奖励:** 总奖励池为 50,000,000 $XNY,在任务完成和验证后分发。 -- **时间表:** 2025年7月16日 13:00 UTC – 2025年7月23日 13:00 UTC。 +- **活动时间:** 2025 年 07 月 16 日 13:00 UTC – 2025 年 07 月 23 日 13:00 UTC。
@@ -445,17 +446,17 @@ import { useState, useEffect } from 'react'; ## 2025 年 07 月 09 日 --- -**活动启动: Codatta 助推器活动 第一季 第三周** +**活动启动:Codatta Booster 活动 第一季 第三周**
-通过收集即食食品的注释图像,教会人工智能对人类饮食习惯的细致理解,关注文化和情境的相关性,而不仅仅是简单的标签。 +通过收集即食食品的注释图像,教会 AI 对人类饮食习惯的细致理解,关注文化和上下文的相关性,而不仅仅是简单的标签。 -- **访问:** 通过币安钱包助推器标签或主页横幅访问(Alpha 积分 ≥ 61)。 +- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 - **奖励:** 总奖励池为 50,000,000 $XNY,在任务完成和验证后分发。 -- **时间表:** 2025年7月9日 13:00 UTC – 2025年7月16日 13:00 UTC。 +- **活动时间:** 2025 年 07 月 09 日 13:00 UTC – 2025 年 07 月 16 日 13:00 UTC。
@@ -463,7 +464,7 @@ import { useState, useEffect } from 'react'; ## 2025 年 07 月 07 日 --- -**功能优化: 任务系统恢复** +**功能优化:任务系统恢复**
@@ -471,8 +472,8 @@ import { useState, useEffect } from 'react'; 任务系统已全面恢复并重新开放。 -- **如何:** 于2025年6月30日暂时下线,现在已全面恢复。 -- **为什么:** 通过架构升级,提高系统稳定性和用户体验。 +- **运作方式:** 于 2025 年 06 月 30 日暂时下线,现在已全面恢复。 +- **原因:** 通过架构升级增强系统稳定性和用户体验。
@@ -480,17 +481,17 @@ import { useState, useEffect } from 'react'; ## 2025 年 07 月 02 日 --- -**活动启动:Codatta Booster 活动 第一季 第二周** +**活动启动:Codatta Booster 活动第一季第二周**
-通过对素食、非素食和混合类别的细致图像标注,扩展人工智能对全球饮食文化和偏好的理解。 +通过对素食、非素食和混合类别的细致图像标注,扩展 AI 对全球食品文化和偏好的理解。 -- **访问方式:** 可通过 Binance 钱包的 Booster 标签或主页横幅访问(Alpha Points ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY,任务完成并验证后发放。 -- **时间安排:** 2025年7月2日 13:00 UTC – 2025年7月9日 13:00 UTC。 +- **参与方式:** 可通过 Binance Wallet Booster 标签或主页横幅访问(Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY,任务完成并验证后分发。 +- **活动时间:** 2025 年 07 月 02 日 13:00 UTC – 2025 年 07 月 09 日 13:00 UTC。
@@ -498,21 +499,19 @@ import { useState, useEffect } from 'react'; ## 2025 年 06 月 25 日 --- -**活动启动:Codatta Booster 活动 第一季 第一周** +**活动启动:Codatta Booster 活动第一季第一周**
-通过收集标注的食品数据、通过测验激发社区知识,并通过多层次的激励结构奖励参与者,启动首季活动。 - -- **访问方式:** 可通过 Binance 钱包的 Booster 标签或主页横幅访问(Alpha Points ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY,任务完成并验证后发放。 -- **时间安排:** 2025年6月25日 13:00 UTC – 2025年7月2日 13:00 UTC。 +通过收集标注的食品数据、通过测验激发社区知识,并通过多层次的激励结构奖励参与,启动首季活动。 -
+- **参与方式:** 可通过 Binance Wallet Booster 标签或主页横幅访问(Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY,任务完成并验证后分发。 +- **活动时间:** 2025 年 06 月 25 日 13:00 UTC – 2025 年 07 月 02 日 13:00 UTC。 -{/* Component definitions - moved to end of file for cleaner code organization */} +
{/* Component definitions - moved to end of file for cleaner code organization */} export const ChangelogFilter = () => { const [activeFilter, setActiveFilter] = useState('all'); const [isOpen, setIsOpen] = useState(false); @@ -538,11 +537,11 @@ export const ChangelogFilter = () => { }, [activeFilter]); const filterTypes = [ - { id: 'all', label: '全部', color: '#6b7280', count: 24 }, - { id: 'core-feature', label: '核心功能发布', color: '#16A34A', count: 4 }, - { id: 'optimization', label: '调整与优化', color: '#F59E0B', count: 3 }, - { id: 'fixes', label: '修复与功能停用', color: '#EF4444', count: 3 }, - { id: 'campaign', label: '活动启动', color: '#A855F7', count: 14 } + { id: 'all', label: 'All', color: '#6b7280', count: 24 }, + { id: 'core-feature', label: 'Core Feature Release', color: '#16A34A', count: 4 }, + { id: 'optimization', label: 'Adjustments & Optimization', color: '#F59E0B', count: 3 }, + { id: 'fixes', label: 'Fixes & Feature Sunset', color: '#EF4444', count: 3 }, + { id: 'campaign', label: 'Campaign Launch', color: '#A855F7', count: 14 } ]; const activeType = filterTypes.find(type => type.id === activeFilter) || filterTypes[0]; @@ -714,14 +713,14 @@ export const MonthFilter = () => { }, [activeMonth]); const months = [ - { id: 'all', label: '全部月份', count: 24 }, - { id: 'dec', label: '十二月', count: 1 }, - { id: 'nov', label: '十一月', count: 3 }, - { id: 'oct', label: '十月', count: 6 }, - { id: 'sep', label: '九月', count: 3 }, - { id: 'aug', label: '八月', count: 5 }, - { id: 'jul', label: '七月', count: 5 }, - { id: 'jun', label: '六月', count: 1 } + { id: 'all', label: 'All Months', count: 24 }, + { id: 'dec', label: 'December', count: 1 }, + { id: 'nov', label: 'November', count: 3 }, + { id: 'oct', label: 'October', count: 6 }, + { id: 'sep', label: 'September', count: 3 }, + { id: 'aug', label: 'August', count: 5 }, + { id: 'jul', label: 'July', count: 5 }, + { id: 'jun', label: 'June', count: 1 } ]; const activeMonthData = months.find(month => month.id === activeMonth) || months[0]; diff --git a/ko/changelog/2025.mdx b/ko/changelog/2025.mdx index ffd4e66..d7a77de 100644 --- a/ko/changelog/2025.mdx +++ b/ko/changelog/2025.mdx @@ -1,6 +1,6 @@ --- -title: "변경 로그" -description: "이 변경 로그는 Codatta의 2025년 모든 업데이트, 수정 사항 및 새로운 기능을 문서화합니다." +title: "Changelog" +description: "This changelog documents all updates, fixes, and new features for Codatta in 2025." --- import { useState, useEffect } from 'react'; @@ -67,7 +67,7 @@ import { useState, useEffect } from 'react'; flexShrink: 0 }}> {num} - 개 결과 + result{num !== 1 ? 's' : ''}
); }; @@ -77,6 +77,7 @@ import { useState, useEffect } from 'react';
## 2025년 12월 04일 + --- **진화하는 인센티브: 장기 생태계 관리를 위한 보상 잠금 기능** @@ -84,11 +85,11 @@ import { useState, useEffect } from 'react';
-고인센티브 작업(예: 에어드롭 또는 프론티어 캠페인)에서의 보상을 위한 선택적 잠금 기능입니다. +고인센티브 작업(예: 에어드랍 또는 프론티어 캠페인)에서의 보상을 위한 선택적 잠금 기능입니다. - **트리거:** 캠페인 후 보상이 귀하의 잔액에 입금됩니다. - **잠금:** 자산 페이지를 통해 스마트 계약에 보상을 잠금으로써 안전하게 보호합니다. -- **해제:** 잠금 기간이 끝난 후 한 번의 클릭으로 보상을 지갑으로 직접 청구할 수 있습니다. +- **해제:** 잠금 기간이 끝난 후, 한 번의 클릭으로 보상을 지갑으로 직접 청구할 수 있습니다. 이는 우리의 인센티브 시스템을 세분화된 관리로 발전시키는 중요한 단계입니다. 이는 고보상 시나리오에서 유동성을 관리할 수 있는 도구를 제공하여 단기 참여와 생태계의 장기 건강을 균형 있게 유지합니다. @@ -98,7 +99,7 @@ import { useState, useEffect } from 'react'; ## 2025년 11월 24일 --- -**캠페인 시작: 에어드롭 시즌 2** +**캠페인 시작: 에어드랍 시즌 2**
@@ -106,13 +107,13 @@ import { useState, useEffect } from 'react'; 물리학, 금융 및 다중 모드 분야에서 학술 수준의 데이터셋을 체계적으로 수집하고, 세 가지 새로운 프론티어를 위한 고품질 데이터 파이프라인을 구축합니다. -- **행동:** 100만 $XNY 상금 풀로 에어드롭 시즌 2를 시작했습니다(3개월 선형 분배). +- **행동:** 100만 $XNY 상금 풀로 에어드랍 시즌 2를 시작했습니다(3개월 선형 분배). - **새로운 프론티어:** - - **고급 물리학 문제:** 현재 AI가 정확하게 답할 수 없는 고난이도 물리학 문제를 제출할 수 있는 도메인 전문가를 위한 것입니다. + - **고급 물리학 문제:** 현재 AI가 정확하게 답변할 수 없는 고난이도 물리학 문제를 제출할 수 있는 도메인 전문가를 위한 것입니다. - **암호화폐 및 주식 정보:** AI에게 암호화폐 및 주식 투자 결정과 관련된 신뢰할 수 있는 정보를 제공합니다. - - **실제 사진:** 주석이 달린 메타데이터를 포함한 실제 사진을 AI에 제공합니다. + - **실제 사진:** 주석이 달린 메타데이터를 포함한 실제 사진을 AI에게 제공합니다. - **보상 구조:** 작업 완료에 대해 90%, 리더보드 순위에 대해 10%. -- **일정:** 2025년 11월 24일 09:00 UTC – 2025년 12월 8일 09:00 UTC. +- **일정:** 2025년 11월 24일 09:00 UTC – 2025년 12월 08일 09:00 UTC.
@@ -126,10 +127,10 @@ import { useState, useEffect } from 'react';
-탈중앙화 식별자(DID)에 계정을 연결할 수 있는 기본 업그레이드입니다. +탈중앙화 식별자(DID)와 계정 바인딩을 가능하게 하는 기본 업그레이드입니다. -- **연결:** Codatta에 다음 로그인 시 온체인 DID의 셀프 서비스 통합. -- **연관:** 연결된 DID는 모든 작업 행동, 데이터 기여 및 보상 분배를 체계적으로 인덱싱하는 통합 기본 키 역할을 합니다. +- **바인딩:** 다음 Codatta 로그인 시 온체인 DID의 셀프 서비스 통합. +- **연관:** 바인딩된 DID는 통합된 기본 키 역할을 하여 모든 작업 행동, 데이터 기여 및 보상 분배를 체계적으로 인덱싱합니다. - **계보:** 온체인 및 오프체인 활동의 완전한 추적 가능성과 검증을 가능하게 하여 불변의 데이터 출처를 확립합니다. 이 배포는 검증 가능한 데이터 경제를 위한 기술적 초석을 마련합니다. 각 기여자에게 지속적이고 고유한 디지털 정체성을 제공함으로써 세분화된 기여 귀속, 명확한 소유권 검증 및 프로토콜 수준에서의 투명한 인센티브 할당을 가능하게 합니다. @@ -140,7 +141,7 @@ import { useState, useEffect } from 'react'; ## 2025년 11월 03일 --- -**퀘스트 시스템 조정: 암호화폐 프론티어 QUEST 모듈 사용 중지** +**퀘스트 시스템 조정: 암호화폐 프론티어 QUEST 모듈 비활성화**
@@ -148,8 +149,8 @@ import { useState, useEffect } from 'react'; 암호화폐 프론티어 QUEST 모듈과 모든 관련 작업(제출, 검증 및 보상 사냥 포함)이 오프라인 상태로 전환되었습니다. -- **이유:** 이 모듈은 현재 제품 로드맵에 따라 계획된 생애 주기를 완료했습니다. 사용 중지는 시스템 간소화 및 향후 기능 출시를 위한 자원 재조정을 지원합니다. -- **참고:** 사용자의 과거 기여 기록과 이 모듈에서 얻은 보상은 그대로 유지됩니다. 이 변경 사항은 다른 프론티어 모듈에는 영향을 미치지 않습니다. +- **이유:** 이 모듈은 현재 제품 로드맵에 따라 계획된 생애 주기를 완료했습니다. 비활성화는 시스템 간소화 및 향후 기능 출시를 위한 자원 재조정을 지원합니다. +- **참고:** 사용자의 이력 기여 기록 및 이 모듈에서 획득한 보상은 그대로 유지됩니다. 다른 프론티어 모듈에는 이 변경 사항이 영향을 미치지 않습니다.
@@ -157,16 +158,16 @@ import { useState, useEffect } from 'react'; ## 2025년 10월 24일 --- -**프론티어 시스템 조정: 로보틱스 프론티어 사용 중지** +**프론티어 시스템 조정: 로보틱스 프론티어 비활성화**
-로보틱스 프론티어가 공식적으로 사용 중지되었습니다. 이 조치는 프론트엔드 진입점에만 영향을 미칩니다. 모든 과거 기여 데이터는 그대로 유지되며 접근 가능합니다. +로보틱스 프론티어가 공식적으로 비활성화되었습니다. 이 조치는 프론트엔드 진입점에만 영향을 미칩니다. 모든 이력 기여 데이터는 그대로 유지되며 접근 가능합니다. -- **이유:** 이 결정은 자원과 사용자 주의를 가장 우선 순위가 높은 활성 프론티어에 집중하기 위한 지속적인 제품 간소화의 일환입니다. 로보틱스 프론티어는 계획된 탐색 단계를 완료하였으며, 사용 중지는 우리의 노력을 통합할 수 있게 합니다. -- **참고:** 사용자의 과거 기여 및 로보틱스 프론티어에서의 보상은 보존되며 기여 기록에서 검토할 수 있습니다. 다른 프론티어나 플랫폼 기능에는 영향을 미치지 않습니다. +- **이유:** 이 결정은 자원과 사용자 주의를 가장 우선 순위가 높은 활성 프론티어에 집중하기 위한 지속적인 제품 간소화의 일환입니다. 로보틱스 프론티어는 계획된 탐색 단계를 완료하였으며, 비활성화는 노력을 통합할 수 있게 합니다. +- **참고:** 사용자의 과거 기여 및 로보틱스 프론티어에서의 보상은 보존되며 기여 이력에서 검토할 수 있습니다. 다른 프론티어나 플랫폼 기능에는 영향을 미치지 않습니다.
@@ -191,16 +192,16 @@ import { useState, useEffect } from 'react'; ## 2025년 10월 20일 --- -**프론티어 시스템 조정: 암호화폐 프론티어 사용 중지** +**프론티어 시스템 조정: 암호화폐 프론티어 비활성화**
-암호화폐 프론티어가 공식적으로 사용 중지되었습니다. 이 조치는 프론트엔드 진입점에만 영향을 미칩니다. 모든 과거 기여 데이터는 그대로 유지되며 접근 가능합니다. +암호화폐 프론티어가 공식적으로 비활성화되었습니다. 이 조치는 프론트엔드 진입점에만 영향을 미칩니다. 모든 이력 기여 데이터는 그대로 유지되며 접근 가능합니다. -- **이유:** 이 결정은 자원과 사용자 주의를 가장 우선 순위가 높은 활성 프론티어에 집중하기 위한 지속적인 제품 간소화의 일환입니다. 암호화폐 프론티어는 계획된 탐색 단계를 완료하였으며, 사용 중지는 우리의 노력을 통합할 수 있게 합니다. -- **참고:** 사용자의 과거 기여 및 암호화폐 프론티어에서의 보상은 보존되며 기여 기록에서 검토할 수 있습니다. 다른 프론티어나 플랫폼 기능에는 영향을 미치지 않습니다. +- **이유:** 이 결정은 자원과 사용자 주의를 가장 우선 순위가 높은 활성 프론티어에 집중하기 위한 지속적인 제품 간소화의 일환입니다. 암호화폐 프론티어는 계획된 탐색 단계를 완료하였으며, 비활성화는 노력을 통합할 수 있게 합니다. +- **참고:** 사용자의 과거 기여 및 암호화폐 프론티어에서의 보상은 보존되며 기여 이력에서 검토할 수 있습니다. 다른 프론티어나 플랫폼 기능에는 영향을 미치지 않습니다.
@@ -225,22 +226,22 @@ import { useState, useEffect } from 'react'; ## 2025년 10월 13일 --- -**캠페인 시작: 에어드롭 시즌 1** +**캠페인 시작: 에어드랍 시즌 1**
-고보상 메커니즘과 스팸 방지 강화를 통해 고품질의 구조화된 데이터를 체계적으로 수집하고, 유효성과 학술 가치를 보장하며, 장기 기여자에게 보상하고 플랫폼의 데이터 생태계를 다각화하기 위해 다섯 개의 새로운 프론티어 모듈을 도입합니다. +고보상 메커니즘과 스팸 방지 시행을 통해 고품질의 구조화된 데이터를 체계적으로 수집하고, 유효성과 학술 가치를 보장하며, 장기 기여자에게 보상하고 플랫폼의 데이터 생태계를 다각화하기 위해 다섯 개의 새로운 프론티어 모듈을 도입합니다. -- **행동:** 250만 $XNY 상금 풀과 포인트 보상으로 에어드롭 시즌 1을 시작했습니다. +- **행동:** 250만 $XNY 상금 풀과 포인트 보상으로 에어드랍 시즌 1을 시작했습니다. - **새로운 프론티어:** - - **모델 비교:** 다양한 AI 모델 간의 성능 지표와 비즈니스 결과를 비교하여 최적의 솔루션이나 하이브리드 솔루션을 식별합니다. + - **모델 비교:** 다양한 AI 모델 간의 성능 지표 및 비즈니스 결과를 비교하여 최적 또는 하이브리드 솔루션을 식별합니다. - **LLM의 실수 발견:** LLM 출력에서의 추론, 사실 및 논리적 오류를 식별하여 모델 최적화를 지원합니다. - **LLM의 실수 수정:** LLM이 실수에서 학습하고 자기 수정 및 추론을 개선할 수 있도록 교정 데이터를 수집합니다. - **식품 과학:** 식품 과학 및 영양 기능에 대한 연구 데이터를 수집하여 이 분야의 혁신을 촉진합니다. - **라이프로그 캔버스:** 개인 행동 및 건강 관련 데이터를 추적하고 기록하여 행동 및 관련 연구를 지원합니다. -- **보상 구조:** 제출 평가에 따라 보상이 순위가 매겨지고 캠페인 후 분배됩니다. 악의적인 제출은 데이터 품질을 보장하기 위해 처벌됩니다. +- **보상 구조:** 보상은 제출 평가에 따라 순위가 매겨지고 캠페인 후 분배됩니다. 악의적인 제출은 데이터 품질을 보장하기 위해 처벌됩니다. - **일정:** 2025년 10월 13일 09:00 UTC - 2025년 10월 27일 09:00 UTC.
@@ -257,8 +258,9 @@ import { useState, useEffect } from 'react'; 프론티어를 위한 구성 가능한 보상 활동이 제공되어 추가적인 고부가가치 인센티브를 제공합니다. -- **방법:** 선택된 프론티어 작업은 기본 포인트와 무관하게 $XNY 또는 USDT로 추가 보상을 제공합니다. 활동 매개변수(보상 금액, 지속 시간, 목표)는 각 프론티어별로 설정되며 각각의 홈페이지에 표시됩니다. -- **목적:** 타겟팅된 인센티브를 통해 고부가가치 데이터 작업에 대한 더 깊은 참여를 유도하여 데이터 품질과 생태계 참여를 모두 개선하기 위함입니다. +```html +- **방법:** 선택된 Frontier 작업은 기본 포인트와는 독립적으로 $XNY 또는 USDT로 추가 보상을 제공합니다. 활동 매개변수(보상 금액, 기간, 목표)는 각 Frontier에 따라 설정되며 해당 홈페이지에 표시됩니다. +- **이유:** 목표 지향적인 인센티브를 통해 고부가가치 데이터 작업에 대한 참여를 촉진하고, 데이터 품질과 생태계 참여를 개선하기 위함입니다.
@@ -274,9 +276,9 @@ import { useState, useEffect } from 'react'; 신뢰할 수 있는 다중 도메인 데이터 수집을 통해 AI 개발을 가속화하고, 커뮤니티 주도의 분산형 AI 지식 구축을 촉진합니다. -- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). -- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. -- **일정:** 2025년 9월 26일 07:00 UTC – 2025년 10월 3일 07:00 UTC. +- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 09월 26일 07:00 UTC – 2025년 10월 03일 07:00 UTC.
@@ -292,9 +294,9 @@ import { useState, useEffect } from 'react'; AI 훈련 및 검증을 위해 생명, 로봇 공학, 암호화폐, 모델 비교 및 지문 검증에 걸친 교차 도메인 데이터를 수집합니다. -- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). -- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. -- **일정:** 2025년 9월 12일 07:00 UTC – 2025년 9월 19일 07:00 UTC. +- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 09월 12일 07:00 UTC – 2025년 09월 19일 07:00 UTC.
@@ -310,9 +312,9 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학, 암호화폐, 모델 비 AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친 교차 도메인 데이터를 수집하고 주석을 달기 위해 진행됩니다. -- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). -- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. -- **일정:** 2025년 9월 5일 07:00 UTC – 2025년 9월 12일 07:00 UTC. +- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 09월 05일 07:00 UTC – 2025년 09월 12일 07:00 UTC.
@@ -328,8 +330,8 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친 사용자 정보 모듈 내에 새로운 데이터 프로필 기능을 도입합니다. -- **접근 방법:** 사용자 정보 > 데이터 프로필을 통해 총 제출 수, 획득한 보상 및 기여 통계를 시각적 대시보드에서 확인할 수 있습니다. -- **목적:** 기여에 대한 투명성을 제공하고, 가시적인 진행 상황 추적을 통해 참여를 강화하며, 장기적인 참여를 지원합니다. +- **방법:** 사용자 정보 > 데이터 프로필을 통해 총 제출 수, 획득한 보상 및 기여 통계를 시각적 대시보드에서 확인할 수 있습니다. +- **이유:** 기여에 대한 투명성을 제공하고, 가시적인 진행 상황 추적을 통해 참여를 강화하며, 장기적인 참여를 지원하기 위함입니다.
@@ -343,11 +345,11 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친
-분산형 AI 훈련을 위해 생명, 로봇 공학 및 암호화폐에 걸친 교차 도메인 주석 데이터의 기초를 마련합니다. +분산형 AI 훈련을 위해 생명, 로봇 공학 및 암호화폐에 걸친 주석이 달린 데이터의 기초를 마련합니다. -- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). -- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. -- **일정:** 2025년 8월 22일 07:00 UTC – 2025년 8월 29일 07:00 UTC. +- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 08월 22일 07:00 UTC – 2025년 08월 29일 07:00 UTC. @@ -363,9 +365,9 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친 분산형 AI 훈련을 위해 음식 AI, 로봇 상호작용 및 CEX 온체인 데이터에 대한 도메인별 데이터 세트를 체계적으로 주석 달고 확장합니다. -- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). -- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. -- **일정:** 2025년 8월 15일 07:00 UTC – 2025년 8월 22일 07:00 UTC. +- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 08월 15일 07:00 UTC – 2025년 08월 22일 07:00 UTC. @@ -381,9 +383,9 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친 프로젝트 학습, 음식 AI 판단, 로봇 주석 및 CEX 데이터 확장을 포함한 네 가지 주요 영역에서 주석이 달린 데이터를 체계적으로 수집합니다. -- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). -- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. -- **일정:** 2025년 8월 8일 07:00 UTC – 2025년 8월 15일 07:00 UTC. +- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 08월 08일 07:00 UTC – 2025년 08월 15일 07:00 UTC. @@ -399,9 +401,9 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친 AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 라벨링을 포함한 세 가지 핵심 도메인에서 주석이 달린 데이터를 수집합니다. -- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). -- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. -- **일정:** 2025년 8월 1일 07:00 UTC – 2025년 8월 8일 07:00 UTC. +- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 08월 01일 07:00 UTC – 2025년 08월 08일 07:00 UTC. @@ -417,9 +419,9 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 주석이 달린 실제 상호작용 데이터를 통해 AI 음식 분석을 검증하고 로봇 훈련을 향상시킵니다. -- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). -- **보상:** 총 보상 풀 50,000,000 $XNY (잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. -- **일정:** 2025년 7월 24일 07:00 UTC – 2025년 7월 31일 07:00 UTC. +- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. +- **일정:** 2025년 07월 24일 07:00 UTC – 2025년 07월 31일 07:00 UTC. @@ -435,9 +437,9 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 무게, 조리 방법 및 칼로리 함량을 포함한 풍부한 주석을 수집하여 AI의 음식 이해를 심화합니다. -- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). +- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). - **보상:** 총 보상 풀 50,000,000 $XNY, 작업 완료 및 검증 후 분배됩니다. -- **일정:** 2025년 7월 16일 13:00 UTC – 2025년 7월 23일 13:00 UTC. +- **일정:** 2025년 07월 16일 13:00 UTC – 2025년 07월 23일 13:00 UTC. @@ -451,11 +453,11 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터
-문화적 및 맥락적 관련성을 넘어 단순한 라벨을 넘어서는 주석이 달린 즉석 식품 이미지를 수집하여 AI에게 인간의 식습관에 대한 미묘한 이해를 가르칩니다. +문화적 및 맥락적 관련성을 넘어 단순한 라벨을 넘어서, 즉석 식품의 주석이 달린 이미지를 수집하여 AI에게 인간의 식습관에 대한 미세한 이해를 가르칩니다. -- **접근 방법:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha 포인트 ≥ 61 필요). +- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). - **보상:** 총 보상 풀 50,000,000 $XNY, 작업 완료 및 검증 후 분배됩니다. -- **일정:** 2025년 7월 9일 13:00 UTC – 2025년 7월 16일 13:00 UTC. +- **일정:** 2025년 07월 09일 13:00 UTC – 2025년 07월 16일 13:00 UTC. @@ -471,10 +473,11 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 퀘스트 시스템이 완전히 복원되어 재개되었습니다. -- **접근 방법:** 2025년 6월 30일에 일시적으로 오프라인 상태였으며, 현재는 종합적으로 복원되었습니다. -- **목적:** 아키텍처 업그레이드를 통해 시스템 안정성과 사용자 경험을 향상시키기 위함입니다. +- **방법:** 2025년 06월 30일에 일시적으로 오프라인 되었으며, 현재 포괄적으로 복원되었습니다. +- **이유:** 아키텍처 업그레이드를 통해 시스템 안정성과 사용자 경험을 향상시키기 위함입니다. +```
@@ -486,11 +489,11 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터
-채식, 비채식, 혼합 카테고리 전반에 걸쳐 세밀한 이미지 라벨링을 통해 AI의 글로벌 음식 문화 및 선호도 이해를 확장하기 위함입니다. +채식, 비채식 및 혼합 카테고리 전반에 걸쳐 세밀한 이미지 라벨링을 통해 AI의 글로벌 음식 문화 및 선호도 이해를 확장하기 위함입니다. -- **접근 방법:** Binance Wallet 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (알파 포인트 ≥ 61). +- **접근:** Binance Wallet 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (알파 포인트 ≥ 61). - **보상:** 총 50,000,000 $XNY의 보상 풀, 작업 완료 및 검증 후 분배됩니다. -- **일정:** 2025년 7월 2일 13:00 UTC – 2025년 7월 9일 13:00 UTC. +- **일정:** 2025년 07월 02일 13:00 UTC – 2025년 07월 09일 13:00 UTC.
@@ -504,15 +507,13 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터
-주석이 달린 음식 데이터를 수집하고, 퀴즈를 통해 커뮤니티의 지식을 활용하며, 다단계 인센티브 구조를 통해 참여를 보상함으로써 첫 번째 시즌을 시작하기 위함입니다. +주석이 달린 음식 데이터를 수집하고, 퀴즈를 통해 커뮤니티 지식을 활용하며, 다단계 인센티브 구조를 통해 참여를 보상함으로써 첫 번째 시즌을 시작하기 위함입니다. -- **접근 방법:** Binance Wallet 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (알파 포인트 ≥ 61). +- **접근:** Binance Wallet 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (알파 포인트 ≥ 61). - **보상:** 총 50,000,000 $XNY의 보상 풀, 작업 완료 및 검증 후 분배됩니다. -- **일정:** 2025년 6월 25일 13:00 UTC – 2025년 7월 2일 13:00 UTC. - - +- **일정:** 2025년 06월 25일 13:00 UTC – 2025년 07월 02일 13:00 UTC. -{/* Component definitions - moved to end of file for cleaner code organization */} +{/* Component definitions - moved to end of file for cleaner code organization */} export const ChangelogFilter = () => { const [activeFilter, setActiveFilter] = useState('all'); const [isOpen, setIsOpen] = useState(false); @@ -538,11 +539,11 @@ export const ChangelogFilter = () => { }, [activeFilter]); const filterTypes = [ - { id: 'all', label: '전체', color: '#6b7280', count: 24 }, - { id: 'core-feature', label: '핵심 기능 출시', color: '#16A34A', count: 4 }, - { id: 'optimization', label: '조정 및 최적화', color: '#F59E0B', count: 3 }, - { id: 'fixes', label: '수정 및 기능 종료', color: '#EF4444', count: 3 }, - { id: 'campaign', label: '캠페인 시작', color: '#A855F7', count: 14 } + { id: 'all', label: 'All', color: '#6b7280', count: 24 }, + { id: 'core-feature', label: 'Core Feature Release', color: '#16A34A', count: 4 }, + { id: 'optimization', label: 'Adjustments & Optimization', color: '#F59E0B', count: 3 }, + { id: 'fixes', label: 'Fixes & Feature Sunset', color: '#EF4444', count: 3 }, + { id: 'campaign', label: 'Campaign Launch', color: '#A855F7', count: 14 } ]; const activeType = filterTypes.find(type => type.id === activeFilter) || filterTypes[0]; @@ -714,14 +715,14 @@ export const MonthFilter = () => { }, [activeMonth]); const months = [ - { id: 'all', label: '전체 월', count: 24 }, - { id: 'dec', label: '12월', count: 1 }, - { id: 'nov', label: '11월', count: 3 }, - { id: 'oct', label: '10월', count: 6 }, - { id: 'sep', label: '9월', count: 3 }, - { id: 'aug', label: '8월', count: 5 }, - { id: 'jul', label: '7월', count: 5 }, - { id: 'jun', label: '6월', count: 1 } + { id: 'all', label: 'All Months', count: 24 }, + { id: 'dec', label: 'December', count: 1 }, + { id: 'nov', label: 'November', count: 3 }, + { id: 'oct', label: 'October', count: 6 }, + { id: 'sep', label: 'September', count: 3 }, + { id: 'aug', label: 'August', count: 5 }, + { id: 'jul', label: 'July', count: 5 }, + { id: 'jun', label: 'June', count: 1 } ]; const activeMonthData = months.find(month => month.id === activeMonth) || months[0]; From b7232fcd3c3632acc798ee7a736faabce103d221 Mon Sep 17 00:00:00 2001 From: Joel Date: Sun, 4 Jan 2026 20:22:01 +0800 Subject: [PATCH 22/26] Fix: Update translation prompts and correct proper nouns in Chinese changelog - Enhanced translation prompts with automatic proper noun recognition - Fixed proper nouns: Model Comparison, Spot LLM's Mistakes, Correct LLM's Mistakes, Food Science, Lifelog Canvas, Crypto Frontier, Robotics Frontier - Keep proper nouns in English when used as product/module names - Translate descriptive terms (e.g., 'model comparison' in lowercase) to Chinese - Updated both Chinese and Korean translation prompts --- cn/changelog/2025.mdx | 30 +++++++++++++++--------------- translate.js | 4 ++-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/cn/changelog/2025.mdx b/cn/changelog/2025.mdx index edeac2d..9b5673e 100644 --- a/cn/changelog/2025.mdx +++ b/cn/changelog/2025.mdx @@ -141,13 +141,13 @@ import { useState, useEffect } from 'react'; ## 2025 年 11 月 03 日 --- -**任务系统调整:加密 Frontier QUEST 模块停用** +**任务系统调整:Crypto Frontier QUEST 模块停用**
-整个加密 Frontier QUEST 模块及所有相关任务——包括提交、验证和赏金猎人——已下线。 +整个 Crypto Frontier QUEST 模块及所有相关任务——包括提交、验证和赏金猎人——已下线。 - **原因:** 该模块已完成当前产品路线图下的计划生命周期。停用支持系统精简和资源重新配置,以便于即将发布的新功能。 - **注意:** 用户在该模块的历史贡献记录和获得的奖励保持不变。此更改不影响其他 Frontier 模块。 @@ -158,16 +158,16 @@ import { useState, useEffect } from 'react'; ## 2025 年 10 月 24 日 --- -**Frontier 系统调整:机器人 Frontier 停用** +**Frontier 系统调整:Robotics Frontier 停用**
-机器人 Frontier 已正式停用。此操作仅影响前端入口点。所有历史贡献数据保持完整且可访问。 +Robotics Frontier 已正式停用。此操作仅影响前端入口点。所有历史贡献数据保持完整且可访问。 -- **原因:** 此决定是我们持续产品精简的一部分,旨在将资源和用户注意力集中在我们最高优先级的活跃 Frontier 上。机器人 Frontier 已完成其计划的探索阶段,停用使我们能够整合努力。 -- **注意:** 用户在机器人 Frontier 的过去贡献和奖励被保留,并可在其贡献历史中查看。其他 Frontier 或平台功能不受影响。 +- **原因:** 此决定是我们持续产品精简的一部分,旨在将资源和用户注意力集中在我们最高优先级的活跃 Frontier 上。Robotics Frontier 已完成其计划的探索阶段,停用使我们能够整合努力。 +- **注意:** 用户在 Robotics Frontier 的过去贡献和奖励被保留,并可在其贡献历史中查看。其他 Frontier 或平台功能不受影响。 @@ -192,16 +192,16 @@ import { useState, useEffect } from 'react'; ## 2025 年 10 月 20 日 --- -**Frontier 系统调整:加密 Frontier 停用** +**Frontier 系统调整:Crypto Frontier 停用**
-加密 Frontier 已正式停用。此操作仅影响前端入口点。所有历史贡献数据保持完整且可访问。 +Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历史贡献数据保持完整且可访问。 -- **原因:** 此决定是我们持续产品精简的一部分,旨在将资源和用户注意力集中在我们最高优先级的活跃 Frontier 上。加密 Frontier 已完成其计划的探索阶段,停用使我们能够整合努力。 -- **注意:** 用户在加密 Frontier 的过去贡献和奖励被保留,并可在其贡献历史中查看。其他 Frontier 或平台功能不受影响。 +- **原因:** 此决定是我们持续产品精简的一部分,旨在将资源和用户注意力集中在我们最高优先级的活跃 Frontier 上。Crypto Frontier 已完成其计划的探索阶段,停用使我们能够整合努力。 +- **注意:** 用户在 Crypto Frontier 的过去贡献和奖励被保留,并可在其贡献历史中查看。其他 Frontier 或平台功能不受影响。 @@ -236,11 +236,11 @@ import { useState, useEffect } from 'react'; - **操作:** 启动空投第一季,奖金池为 250 万 $XNY 和积分奖励。 - **新 Frontier:** - - **模型比较:** 比较不同 AI 模型的性能指标和商业结果,以识别最佳或混合解决方案。 - - **识别 LLM 错误:** 识别 LLM 输出中的推理、事实和逻辑错误,以支持模型优化。 - - **纠正 LLM 错误:** 收集纠正数据,帮助 LLM 从错误中学习,提高自我纠正和推理能力。 - - **食品科学:** 收集食品科学和营养功能的研究数据,以推动该领域的创新。 - - **生活记录画布:** 跟踪和记录个人行为和健康相关数据,以支持行为及相关研究。 + - **Model Comparison:** 比较不同 AI 模型的性能指标和商业结果,以识别最佳或混合解决方案。 + - **Spot LLM's Mistakes:** 识别 LLM 输出中的推理、事实和逻辑错误,以支持模型优化。 + - **Correct LLM's Mistakes:** 收集纠正数据,帮助 LLM 从错误中学习,提高自我纠正和推理能力。 + - **Food Science:** 收集食品科学和营养功能的研究数据,以推动该领域的创新。 + - **Lifelog Canvas:** 跟踪和记录个人行为和健康相关数据,以支持行为及相关研究。 - **奖励结构:** 奖励根据提交评分排名,并在活动结束后分配。恶意提交将受到惩罚,以确保数据质量。 - **活动时间:** 2025 年 10 月 13 日 09:00 UTC - 2025 年 10 月 27 日 09:00 UTC。 diff --git a/translate.js b/translate.js index 9e833b6..d803f3f 100644 --- a/translate.js +++ b/translate.js @@ -11,13 +11,13 @@ const TARGET_LANGS = [ code: "cn", name: "Chinese", systemPrompt: - "请将以下英文 changelog 按中文语境重写一下,要求:1. 只翻译纯文本部分,忽略任何 HTML 标签、代码块、表格、特殊格式(如代码行、列)等,看着像代码也保留不动。2. 保留原有 HTML 标签和结构,不要修改格式。3. 保证翻译内容准确。4.小标题的单词也要翻译,日期也要翻译,但必须遵循统一的日期格式。5.不要直译,要理解英文原文的语义,然后用符合中文语言习惯的自然方式重新表述。例如:'action' 不应直译为'行动',而应根据上下文用更自然的中文表达(如'操作'、'动作'等)。6.以下术语和表达必须固定使用,不要翻译:- 'Frontier' 和 'Frontiers' 是产品名,保持英文不翻译;- 'Lineage' 翻译为'血缘'(因为我们有产品叫 Data Lineage 数据血缘);- 小要点中的 'How' 不要翻译成'如何',统一翻译为'运作方式';- 'Timeline' 不要翻译成'时间表'、'时间安排',统一翻译为'活动时间';- 'Access' 不要翻译成'访问'、'访问方式',统一翻译为'参与方式';- 'Lock' 统一翻译为'锁仓'。7.日期格式必须严格统一为:'2025 年 12 月 04 日'格式(汉字和数字之间必须保留 1 个空格,年份、月份、日期都是两位数,月份和日期不足两位要补零,例如:'2025 年 09 月 05 日'、'2025 年 06 月 25 日')。所有日期标题(如 '## Dec 04, 2025')必须翻译为 '## 2025 年 12 月 04 日' 格式。确保翻译后的中文读起来自然流畅,符合中文表达习惯。", + "请将以下英文 changelog 按中文语境重写一下,要求:1. 只翻译纯文本部分,忽略任何 HTML 标签、代码块、表格、特殊格式(如代码行、列)等,看着像代码也保留不动。2. 保留原有 HTML 标签和结构,不要修改格式。3. 保证翻译内容准确。4.小标题的单词也要翻译,日期也要翻译,但必须遵循统一的日期格式。5.不要直译,要理解英文原文的语义,然后用符合中文语言习惯的自然方式重新表述。例如:'action' 不应直译为'行动',而应根据上下文用更自然的中文表达(如'操作'、'动作'等)。6.专有名词识别规则:- 自动识别首字母大写的专有名词(如产品名、模块名、功能名等),这些通常应保持英文不翻译;- 特别地,以下术语和表达必须固定使用,不要翻译:- 'Frontier' 和 'Frontiers' 是产品名,保持英文不翻译;- 'Crypto Frontier'、'Crypto Frontier QUEST'、'Robotics Frontier' 是专有名词,保持英文不翻译;- 'Model Comparison'、'Spot LLM's Mistakes'、'Correct LLM's Mistakes'、'Food Science'、'Lifelog Canvas' 是专有名词,保持英文不翻译;- 'Lineage' 翻译为'血缘'(因为我们有产品叫 Data Lineage 数据血缘);- 小要点中的 'How' 不要翻译成'如何',统一翻译为'运作方式';- 'Timeline' 不要翻译成'时间表'、'时间安排',统一翻译为'活动时间';- 'Access' 不要翻译成'访问'、'访问方式',统一翻译为'参与方式';- 'Lock' 统一翻译为'锁仓'。7.日期格式必须严格统一为:'2025 年 12 月 04 日'格式(汉字和数字之间必须保留 1 个空格,年份、月份、日期都是两位数,月份和日期不足两位要补零,例如:'2025 年 09 月 05 日'、'2025 年 06 月 25 日')。所有日期标题(如 '## Dec 04, 2025')必须翻译为 '## 2025 年 12 月 04 日' 格式。确保翻译后的中文读起来自然流畅,符合中文表达习惯。", }, { code: "ko", name: "Korean", systemPrompt: - "다음 영어 changelog 를 한국어 문맥에 맞게 재작성해 주세요. 다음 요구사항을 엄격히 준수하세요: 1. 텍스트 내용만 번역하고, HTML 태그, 코드 블록, 표, 특수 형식(예: 코드 행, 열 등) 등은 무시하고, 코드로 보이는 모든 내용은 그대로 유지하세요. 2. 원본 HTML 태그와 구조를 유지하고, 형식을 수정하지 마세요. 3. 번역 내용의 정확성을 보장하세요. 4. 소제목의 단어도 반드시 번역하세요. 날짜도 번역해야 하며, 반드시 통일된 날짜 형식을 따라야 합니다. 5. 직역하지 말고, 영어 원문의 의미를 이해한 후 한국어 언어 습관에 맞는 자연스러운 방식으로 재표현하세요. 예를 들어, 'action'을 단순히 '행동'으로 직역하지 말고, 문맥에 따라 더 자연스러운 한국어 표현을 사용하세요. 6. 날짜 형식은 반드시 '2025년 12월 04일' 형식으로 통일하세요(년, 월, 일은 모두 두 자리 숫자이며, 월과 일이 한 자리인 경우 앞에 0을 붙여야 합니다. 예: '2025년 09월 05일', '2025년 06월 25일'). 모든 날짜 제목(예: '## Dec 04, 2025')은 '## 2025년 12월 04일' 형식으로 번역해야 합니다. 번역된 한국어가 자연스럽고 유창하게 읽히도록 한국어 표현 습관에 맞게 작성하세요.", + "다음 영어 changelog 를 한국어 문맥에 맞게 재작성해 주세요. 다음 요구사항을 엄격히 준수하세요: 1. 텍스트 내용만 번역하고, HTML 태그, 코드 블록, 표, 특수 형식(예: 코드 행, 열 등) 등은 무시하고, 코드로 보이는 모든 내용은 그대로 유지하세요. 2. 원본 HTML 태그와 구조를 유지하고, 형식을 수정하지 마세요. 3. 번역 내용의 정확성을 보장하세요. 4. 소제목의 단어도 반드시 번역하세요. 날짜도 번역해야 하며, 반드시 통일된 날짜 형식을 따라야 합니다. 5. 직역하지 말고, 영어 원문의 의미를 이해한 후 한국어 언어 습관에 맞는 자연스러운 방식으로 재표현하세요. 예를 들어, 'action'을 단순히 '행동'으로 직역하지 말고, 문맥에 따라 더 자연스러운 한국어 표현을 사용하세요. 6. 고유명사 식별 규칙: - 대문자로 시작하는 고유명사(예: 제품명, 모듈명, 기능명 등)를 자동으로 식별하고, 이러한 용어는 일반적으로 영어로 유지하고 번역하지 마세요. - 특히 다음 용어와 표현은 고정적으로 사용해야 하며 번역하지 마세요: - 'Frontier'와 'Frontiers'는 제품명이므로 영어로 유지하세요. - 'Crypto Frontier', 'Crypto Frontier QUEST', 'Robotics Frontier'는 고유명사이므로 영어로 유지하세요. - 'Model Comparison', 'Spot LLM's Mistakes', 'Correct LLM's Mistakes', 'Food Science', 'Lifelog Canvas'는 고유명사이므로 영어로 유지하세요. 7. 날짜 형식은 반드시 '2025년 12월 04일' 형식으로 통일하세요(년, 월, 일은 모두 두 자리 숫자이며, 월과 일이 한 자리인 경우 앞에 0을 붙여야 합니다. 예: '2025년 09월 05일', '2025년 06월 25일'). 모든 날짜 제목(예: '## Dec 04, 2025')은 '## 2025년 12월 04일' 형식으로 번역해야 합니다. 번역된 한국어가 자연스럽고 유창하게 읽히도록 한국어 표현 습관에 맞게 작성하세요.", }, ]; From 115ca7c5c6e4d2668a0697009178022ae713f7be Mon Sep 17 00:00:00 2001 From: Joel Date: Sun, 4 Jan 2026 20:41:27 +0800 Subject: [PATCH 23/26] Fix: Correct front matter, result text, and filter labels in Chinese and Korean changelogs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fixed Chinese front matter: title and description now in Chinese - Fixed Korean front matter: title and description now in Korean - Fixed result text: '条结果' for Chinese, '개 결과' for Korean - Fixed filter labels: translated all filter types and month names - Removed erroneous code block markers in Korean changelog that caused parsing errors --- cn/changelog/2025.mdx | 32 ++++++++++++++++---------------- ko/changelog/2025.mdx | 34 ++++++++++++++++------------------ 2 files changed, 32 insertions(+), 34 deletions(-) diff --git a/cn/changelog/2025.mdx b/cn/changelog/2025.mdx index 9b5673e..b68a21b 100644 --- a/cn/changelog/2025.mdx +++ b/cn/changelog/2025.mdx @@ -1,6 +1,6 @@ --- -title: "Changelog" -description: "This changelog documents all updates, fixes, and new features for Codatta in 2025." +title: "变更日志" +description: "本文档记录了 Codatta 在 2025 年的所有更新、修复和新功能。" --- import { useState, useEffect } from 'react'; @@ -67,7 +67,7 @@ import { useState, useEffect } from 'react'; flexShrink: 0 }}> {num} - result{num !== 1 ? 's' : ''} + 条结果 ); }; @@ -537,11 +537,11 @@ export const ChangelogFilter = () => { }, [activeFilter]); const filterTypes = [ - { id: 'all', label: 'All', color: '#6b7280', count: 24 }, - { id: 'core-feature', label: 'Core Feature Release', color: '#16A34A', count: 4 }, - { id: 'optimization', label: 'Adjustments & Optimization', color: '#F59E0B', count: 3 }, - { id: 'fixes', label: 'Fixes & Feature Sunset', color: '#EF4444', count: 3 }, - { id: 'campaign', label: 'Campaign Launch', color: '#A855F7', count: 14 } + { id: 'all', label: '全部', color: '#6b7280', count: 24 }, + { id: 'core-feature', label: '核心功能发布', color: '#16A34A', count: 4 }, + { id: 'optimization', label: '调整与优化', color: '#F59E0B', count: 3 }, + { id: 'fixes', label: '修复与功能下线', color: '#EF4444', count: 3 }, + { id: 'campaign', label: '活动启动', color: '#A855F7', count: 14 } ]; const activeType = filterTypes.find(type => type.id === activeFilter) || filterTypes[0]; @@ -713,14 +713,14 @@ export const MonthFilter = () => { }, [activeMonth]); const months = [ - { id: 'all', label: 'All Months', count: 24 }, - { id: 'dec', label: 'December', count: 1 }, - { id: 'nov', label: 'November', count: 3 }, - { id: 'oct', label: 'October', count: 6 }, - { id: 'sep', label: 'September', count: 3 }, - { id: 'aug', label: 'August', count: 5 }, - { id: 'jul', label: 'July', count: 5 }, - { id: 'jun', label: 'June', count: 1 } + { id: 'all', label: '全部月份', count: 24 }, + { id: 'dec', label: '十二月', count: 1 }, + { id: 'nov', label: '十一月', count: 3 }, + { id: 'oct', label: '十月', count: 6 }, + { id: 'sep', label: '九月', count: 3 }, + { id: 'aug', label: '八月', count: 5 }, + { id: 'jul', label: '七月', count: 5 }, + { id: 'jun', label: '六月', count: 1 } ]; const activeMonthData = months.find(month => month.id === activeMonth) || months[0]; diff --git a/ko/changelog/2025.mdx b/ko/changelog/2025.mdx index d7a77de..e6f3de7 100644 --- a/ko/changelog/2025.mdx +++ b/ko/changelog/2025.mdx @@ -1,6 +1,6 @@ --- -title: "Changelog" -description: "This changelog documents all updates, fixes, and new features for Codatta in 2025." +title: "변경 로그" +description: "이 변경 로그는 2025년 Codatta의 모든 업데이트, 수정 및 새로운 기능을 문서화합니다." --- import { useState, useEffect } from 'react'; @@ -67,7 +67,7 @@ import { useState, useEffect } from 'react'; flexShrink: 0 }}> {num} - result{num !== 1 ? 's' : ''} + 개 결과 ); }; @@ -258,7 +258,6 @@ import { useState, useEffect } from 'react'; 프론티어를 위한 구성 가능한 보상 활동이 제공되어 추가적인 고부가가치 인센티브를 제공합니다. -```html - **방법:** 선택된 Frontier 작업은 기본 포인트와는 독립적으로 $XNY 또는 USDT로 추가 보상을 제공합니다. 활동 매개변수(보상 금액, 기간, 목표)는 각 Frontier에 따라 설정되며 해당 홈페이지에 표시됩니다. - **이유:** 목표 지향적인 인센티브를 통해 고부가가치 데이터 작업에 대한 참여를 촉진하고, 데이터 품질과 생태계 참여를 개선하기 위함입니다. @@ -477,7 +476,6 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 - **이유:** 아키텍처 업그레이드를 통해 시스템 안정성과 사용자 경험을 향상시키기 위함입니다. -```
@@ -539,11 +537,11 @@ export const ChangelogFilter = () => { }, [activeFilter]); const filterTypes = [ - { id: 'all', label: 'All', color: '#6b7280', count: 24 }, - { id: 'core-feature', label: 'Core Feature Release', color: '#16A34A', count: 4 }, - { id: 'optimization', label: 'Adjustments & Optimization', color: '#F59E0B', count: 3 }, - { id: 'fixes', label: 'Fixes & Feature Sunset', color: '#EF4444', count: 3 }, - { id: 'campaign', label: 'Campaign Launch', color: '#A855F7', count: 14 } + { id: 'all', label: '전체', color: '#6b7280', count: 24 }, + { id: 'core-feature', label: '핵심 기능 출시', color: '#16A34A', count: 4 }, + { id: 'optimization', label: '조정 및 최적화', color: '#F59E0B', count: 3 }, + { id: 'fixes', label: '수정 및 기능 종료', color: '#EF4444', count: 3 }, + { id: 'campaign', label: '캠페인 시작', color: '#A855F7', count: 14 } ]; const activeType = filterTypes.find(type => type.id === activeFilter) || filterTypes[0]; @@ -715,14 +713,14 @@ export const MonthFilter = () => { }, [activeMonth]); const months = [ - { id: 'all', label: 'All Months', count: 24 }, - { id: 'dec', label: 'December', count: 1 }, - { id: 'nov', label: 'November', count: 3 }, - { id: 'oct', label: 'October', count: 6 }, - { id: 'sep', label: 'September', count: 3 }, - { id: 'aug', label: 'August', count: 5 }, - { id: 'jul', label: 'July', count: 5 }, - { id: 'jun', label: 'June', count: 1 } + { id: 'all', label: '전체', count: 24 }, + { id: 'dec', label: '12월', count: 1 }, + { id: 'nov', label: '11월', count: 3 }, + { id: 'oct', label: '10월', count: 6 }, + { id: 'sep', label: '9월', count: 3 }, + { id: 'aug', label: '8월', count: 5 }, + { id: 'jul', label: '7월', count: 5 }, + { id: 'jun', label: '6월', count: 1 } ]; const activeMonthData = months.find(month => month.id === activeMonth) || months[0]; From 8d5ae12c9655339ce6f9e03280ad1e754ae65d44 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sun, 4 Jan 2026 12:46:04 +0000 Subject: [PATCH 24/26] chore: auto translate (20260104-124604) --- cn/changelog/2025.mdx | 130 +++++++++++++++++----------------- ko/changelog/2025.mdx | 160 +++++++++++++++++++++--------------------- 2 files changed, 146 insertions(+), 144 deletions(-) diff --git a/cn/changelog/2025.mdx b/cn/changelog/2025.mdx index b68a21b..54882a3 100644 --- a/cn/changelog/2025.mdx +++ b/cn/changelog/2025.mdx @@ -1,6 +1,6 @@ --- -title: "变更日志" -description: "本文档记录了 Codatta 在 2025 年的所有更新、修复和新功能。" +title: "Changelog" +description: "This changelog documents all updates, fixes, and new features for Codatta in 2025." --- import { useState, useEffect } from 'react'; @@ -67,7 +67,7 @@ import { useState, useEffect } from 'react'; flexShrink: 0 }}> {num} - 条结果 + result{num !== 1 ? 's' : ''}
); }; @@ -79,19 +79,19 @@ import { useState, useEffect } from 'react'; ## 2025 年 12 月 04 日 --- -**激励机制演变:长期生态管理的奖励锁仓** +**激励机制演变:长期生态系统管理的奖励锁仓**
-为高激励任务(例如,在空投或 Frontier 活动中)提供的可选锁仓功能。 +为高激励任务(例如,在 Airdrop 或 Frontier 活动中)提供的可选锁仓功能。 - **触发:** 活动结束后,奖励将存入您的余额。 - **锁仓:** 通过资产页面将奖励锁定在智能合约中以确保安全。 - **释放:** 在锁仓期结束后,您可以一键将奖励直接提取到您的钱包。 -这是我们激励系统向精细化管理演变的关键一步。它为在高奖励场景中管理流动性提供了工具,平衡了短期参与与生态系统的长期健康。 +这是我们激励系统向精细化管理演变的关键一步。它为高奖励场景中的流动性管理提供了工具,平衡了短期参与与生态系统的长期健康。 @@ -99,16 +99,16 @@ import { useState, useEffect } from 'react'; ## 2025 年 11 月 24 日 --- -**活动启动:空投第二季** +**活动启动:Airdrop 第二季**
-系统性地收集物理学、金融和多模态领域的学术级数据集,并为三个新 Frontier 启动高质量数据管道。 +系统性地收集物理学、金融和多模态领域的学术级数据集,并为三个新前沿建立高质量的数据管道。 -- **操作:** 启动空投第二季,奖金池为 100 万 $XNY(3 个月线性解锁)。 -- **新 Frontier:** +- **操作:** 启动 Airdrop 第二季,奖金池为 100 万 $XNY(3 个月线性解锁)。 +- **新前沿:** - **高级物理问题:** 供领域专家提交当前 AI 无法正确回答的高难度物理问题。 - **加密与股票信息:** 为 AI 提供与加密货币和股票投资决策相关的可靠信息。 - **现实世界照片:** 为 AI 提供包含注释元数据的现实世界照片。 @@ -127,13 +127,13 @@ import { useState, useEffect } from 'react';
-一项基础升级,使账户能够绑定到去中心化标识符(DID)。 +一项基础升级,使账户绑定到去中心化标识符(DID)。 - **绑定:** 通过下次登录 Codatta 自助集成链上 DID。 - **关联:** 绑定的 DID 作为统一主键,系统性地索引所有任务操作、数据贡献和奖励分配。 - **血缘:** 实现链上和链下活动的完全可追溯性和验证,建立不可变的数据来源。 -此部署为可验证的数据经济奠定了技术基础。通过为每位贡献者提供持久的、独特的数字身份,我们实现了精细化的贡献归属、明确的所有权验证和协议层面的透明激励分配。 +此部署为可验证的数据经济奠定了技术基础。通过为每位贡献者提供持久的、独特的数字身份,我们实现了精细的贡献归属、明确的所有权验证和透明的激励分配。 @@ -147,9 +147,9 @@ import { useState, useEffect } from 'react';
-整个 Crypto Frontier QUEST 模块及所有相关任务——包括提交、验证和赏金猎人——已下线。 +整个 Crypto Frontier QUEST 模块及所有相关任务(包括提交、验证和赏金猎人)已下线。 -- **原因:** 该模块已完成当前产品路线图下的计划生命周期。停用支持系统精简和资源重新配置,以便于即将发布的新功能。 +- **原因:** 该模块已完成当前产品路线图下的计划生命周期。停用支持系统精简和资源重新分配,以便于即将发布的新功能。 - **注意:** 用户在该模块的历史贡献记录和获得的奖励保持不变。此更改不影响其他 Frontier 模块。 @@ -166,8 +166,8 @@ import { useState, useEffect } from 'react'; Robotics Frontier 已正式停用。此操作仅影响前端入口点。所有历史贡献数据保持完整且可访问。 -- **原因:** 此决定是我们持续产品精简的一部分,旨在将资源和用户注意力集中在我们最高优先级的活跃 Frontier 上。Robotics Frontier 已完成其计划的探索阶段,停用使我们能够整合努力。 -- **注意:** 用户在 Robotics Frontier 的过去贡献和奖励被保留,并可在其贡献历史中查看。其他 Frontier 或平台功能不受影响。 +- **原因:** 此决定是我们持续产品精简的一部分,旨在将资源和用户注意力集中在我们最高优先级的活跃前沿。Robotics Frontier 已完成其计划的探索阶段,停用使我们能够整合努力。 +- **注意:** 用户在 Robotics Frontier 的过去贡献和奖励被保留,并可在其贡献历史中查看。其他前沿或平台功能不受影响。 @@ -200,8 +200,8 @@ Robotics Frontier 已正式停用。此操作仅影响前端入口点。所有 Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历史贡献数据保持完整且可访问。 -- **原因:** 此决定是我们持续产品精简的一部分,旨在将资源和用户注意力集中在我们最高优先级的活跃 Frontier 上。Crypto Frontier 已完成其计划的探索阶段,停用使我们能够整合努力。 -- **注意:** 用户在 Crypto Frontier 的过去贡献和奖励被保留,并可在其贡献历史中查看。其他 Frontier 或平台功能不受影响。 +- **原因:** 此决定是我们持续产品精简的一部分,旨在将资源和用户注意力集中在我们最高优先级的活跃前沿。Crypto Frontier 已完成其计划的探索阶段,停用使我们能够整合努力。 +- **注意:** 用户在 Crypto Frontier 的过去贡献和奖励被保留,并可在其贡献历史中查看。其他前沿或平台功能不受影响。 @@ -209,7 +209,7 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历 ## 2025 年 10 月 15 日 --- -**系统治理:平台黑名单控制实施** +**系统治理:实施平台黑名单控制**
@@ -217,7 +217,7 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历 平台上实施了一项新的黑名单控制功能。 -- **运作方式:** 指定管理员现在可以应用黑名单规则以限制恶意账户。 +- **运作方式:** 指定的管理员现在可以应用黑名单规则以限制恶意账户。 - **原因:** 增强平台安全性,保护贡献者利益,维护生态系统公平性。 @@ -226,21 +226,21 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历 ## 2025 年 10 月 13 日 --- -**活动启动:空投第一季** +**活动启动:Airdrop 第一季**
-通过高奖励机制和反垃圾邮件执行系统性收集高质量、结构化的数据,确保有效性和学术价值,并奖励长期贡献者,丰富平台的数据生态系统,推出五个新 Frontier 模块。 +通过高奖励机制和反垃圾邮件执行系统性地收集高质量、结构化的数据,确保有效性和学术价值,并奖励长期贡献者,丰富平台的数据生态系统,推出五个新前沿模块。 -- **操作:** 启动空投第一季,奖金池为 250 万 $XNY 和积分奖励。 -- **新 Frontier:** - - **Model Comparison:** 比较不同 AI 模型的性能指标和商业结果,以识别最佳或混合解决方案。 - - **Spot LLM's Mistakes:** 识别 LLM 输出中的推理、事实和逻辑错误,以支持模型优化。 - - **Correct LLM's Mistakes:** 收集纠正数据,帮助 LLM 从错误中学习,提高自我纠正和推理能力。 - - **Food Science:** 收集食品科学和营养功能的研究数据,以推动该领域的创新。 - - **Lifelog Canvas:** 跟踪和记录个人行为和健康相关数据,以支持行为及相关研究。 +- **操作:** 启动 Airdrop 第一季,奖金池为 250 万 $XNY 和积分奖励。 +- **新前沿:** + - **模型比较:** 比较不同 AI 模型的性能指标和业务结果,以识别最佳或混合解决方案。 + - **识别 LLM 的错误:** 识别 LLM 输出中的推理、事实和逻辑错误,以支持模型优化。 + - **纠正 LLM 的错误:** 收集纠正数据,帮助 LLM 从错误中学习,提高自我纠正和推理能力。 + - **食品科学:** 收集食品科学和营养功能方面的研究数据,以推动该领域的创新。 + - **生活记录画布:** 跟踪和记录个人行为和健康相关数据,以支持行为及相关研究。 - **奖励结构:** 奖励根据提交评分排名,并在活动结束后分配。恶意提交将受到惩罚,以确保数据质量。 - **活动时间:** 2025 年 10 月 13 日 09:00 UTC - 2025 年 10 月 27 日 09:00 UTC。 @@ -250,7 +250,7 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历 ## 2025 年 10 月 10 日 --- -**功能发布:Frontier 特定奖励活动** +**功能发布:特定 Frontier 的奖励活动**
@@ -258,7 +258,7 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历 现在为 Frontiers 提供可配置的奖励活动,提供额外的高价值激励。 -- **运作方式:** 选定的 Frontier 任务提供额外的奖励,奖励以 $XNY 或 USDT 形式发放,与基础积分无关。活动参数(奖励金额、持续时间、目标)根据每个 Frontier 设置,并在其各自的主页上显示。 +- **运作方式:** 选择的 Frontier 任务提供额外的奖励,奖励以 $XNY 或 USDT 形式发放,与基础积分无关。活动参数(奖励金额、持续时间、目标)根据每个 Frontier 设置,并在其各自的主页上显示。 - **原因:** 通过有针对性的激励措施,推动对高价值数据任务的更深入参与,提高数据质量和生态系统的参与度。 @@ -275,8 +275,8 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历 通过可信的多领域数据收集加速 AI 发展,并促进社区驱动的去中心化 AI 知识构建。 -- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **参与方式:** 通过 Binance Wallet Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分配。 - **活动时间:** 2025 年 09 月 26 日 07:00 UTC – 2025 年 10 月 03 日 07:00 UTC。 @@ -293,8 +293,8 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历 收集跨领域数据,涵盖生活、机器人、加密货币、模型比较和指纹验证,以用于 AI 训练和验证。 -- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **参与方式:** 通过 Binance Wallet Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分配。 - **活动时间:** 2025 年 09 月 12 日 07:00 UTC – 2025 年 09 月 19 日 07:00 UTC。 @@ -311,8 +311,8 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历 收集和注释跨领域数据,涵盖生活、机器人和加密货币,以用于 AI 训练和验证。 -- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **参与方式:** 通过 Binance Wallet Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分配。 - **活动时间:** 2025 年 09 月 05 日 07:00 UTC – 2025 年 09 月 12 日 07:00 UTC。 @@ -346,8 +346,8 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历 为去中心化 AI 训练建立跨领域注释数据的基础,涵盖生活、机器人和加密货币。 -- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **参与方式:** 通过 Binance Wallet Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分配。 - **活动时间:** 2025 年 08 月 22 日 07:00 UTC – 2025 年 08 月 29 日 07:00 UTC。 @@ -364,8 +364,8 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历 系统性地注释和扩展食品 AI、机器人交互和 CEX 链上数据的领域特定数据集,以用于去中心化 AI 训练。 -- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **参与方式:** 通过 Binance Wallet Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分配。 - **活动时间:** 2025 年 08 月 15 日 07:00 UTC – 2025 年 08 月 22 日 07:00 UTC。 @@ -382,8 +382,8 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历 系统性地收集四个关键领域的注释数据:项目学习、食品 AI 判断、机器人注释和 CEX 数据扩展。 -- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **参与方式:** 通过 Binance Wallet Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分配。 - **活动时间:** 2025 年 08 月 08 日 07:00 UTC – 2025 年 08 月 15 日 07:00 UTC。 @@ -400,8 +400,8 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历 收集三个核心领域的注释数据:AI 食品模型比较、机器人交互注释和 CEX 热钱包数据标注。 -- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **参与方式:** 通过 Binance Wallet Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分配。 - **活动时间:** 2025 年 08 月 01 日 07:00 UTC – 2025 年 08 月 08 日 07:00 UTC。 @@ -418,8 +418,8 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历 通过注释的真实世界交互数据来验证 AI 食品分析并增强机器人训练。 -- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分发。 +- **参与方式:** 通过 Binance Wallet Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY(有锁仓期),在任务完成和验证后分配。 - **活动时间:** 2025 年 07 月 24 日 07:00 UTC – 2025 年 07 月 31 日 07:00 UTC。 @@ -436,8 +436,8 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历 通过收集丰富的注释,深化 AI 对食品的理解,这些注释不仅限于标签,还包括重量、烹饪方法和热量含量。 -- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY,在任务完成和验证后分发。 +- **参与方式:** 通过 Binance Wallet Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY,在任务完成和验证后分配。 - **活动时间:** 2025 年 07 月 16 日 13:00 UTC – 2025 年 07 月 23 日 13:00 UTC。 @@ -454,8 +454,8 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历 通过收集即食食品的注释图像,教会 AI 对人类饮食习惯的细致理解,关注文化和上下文的相关性,而不仅仅是简单的标签。 -- **参与方式:** 通过 Binance 钱包 Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 -- **奖励:** 总奖励池为 50,000,000 $XNY,在任务完成和验证后分发。 +- **参与方式:** 通过 Binance Wallet Booster 标签或主页横幅访问(需要 Alpha Points ≥ 61)。 +- **奖励:** 总奖励池为 50,000,000 $XNY,在任务完成和验证后分配。 - **活动时间:** 2025 年 07 月 09 日 13:00 UTC – 2025 年 07 月 16 日 13:00 UTC。 @@ -505,7 +505,7 @@ Crypto Frontier 已正式停用。此操作仅影响前端入口点。所有历
-通过收集标注的食品数据、通过测验激发社区知识,并通过多层次的激励结构奖励参与,启动首季活动。 +通过收集注释食品数据、通过测验吸引社区知识,并通过多层次激励结构奖励参与,启动首季活动。 - **参与方式:** 可通过 Binance Wallet Booster 标签或主页横幅访问(Alpha Points ≥ 61)。 - **奖励:** 总奖励池为 50,000,000 $XNY,任务完成并验证后分发。 @@ -537,11 +537,11 @@ export const ChangelogFilter = () => { }, [activeFilter]); const filterTypes = [ - { id: 'all', label: '全部', color: '#6b7280', count: 24 }, - { id: 'core-feature', label: '核心功能发布', color: '#16A34A', count: 4 }, - { id: 'optimization', label: '调整与优化', color: '#F59E0B', count: 3 }, - { id: 'fixes', label: '修复与功能下线', color: '#EF4444', count: 3 }, - { id: 'campaign', label: '活动启动', color: '#A855F7', count: 14 } + { id: 'all', label: 'All', color: '#6b7280', count: 24 }, + { id: 'core-feature', label: 'Core Feature Release', color: '#16A34A', count: 4 }, + { id: 'optimization', label: 'Adjustments & Optimization', color: '#F59E0B', count: 3 }, + { id: 'fixes', label: 'Fixes & Feature Sunset', color: '#EF4444', count: 3 }, + { id: 'campaign', label: 'Campaign Launch', color: '#A855F7', count: 14 } ]; const activeType = filterTypes.find(type => type.id === activeFilter) || filterTypes[0]; @@ -713,14 +713,14 @@ export const MonthFilter = () => { }, [activeMonth]); const months = [ - { id: 'all', label: '全部月份', count: 24 }, - { id: 'dec', label: '十二月', count: 1 }, - { id: 'nov', label: '十一月', count: 3 }, - { id: 'oct', label: '十月', count: 6 }, - { id: 'sep', label: '九月', count: 3 }, - { id: 'aug', label: '八月', count: 5 }, - { id: 'jul', label: '七月', count: 5 }, - { id: 'jun', label: '六月', count: 1 } + { id: 'all', label: 'All Months', count: 24 }, + { id: 'dec', label: 'December', count: 1 }, + { id: 'nov', label: 'November', count: 3 }, + { id: 'oct', label: 'October', count: 6 }, + { id: 'sep', label: 'September', count: 3 }, + { id: 'aug', label: 'August', count: 5 }, + { id: 'jul', label: 'July', count: 5 }, + { id: 'jun', label: 'June', count: 1 } ]; const activeMonthData = months.find(month => month.id === activeMonth) || months[0]; diff --git a/ko/changelog/2025.mdx b/ko/changelog/2025.mdx index e6f3de7..1c9c51c 100644 --- a/ko/changelog/2025.mdx +++ b/ko/changelog/2025.mdx @@ -1,6 +1,6 @@ --- -title: "변경 로그" -description: "이 변경 로그는 2025년 Codatta의 모든 업데이트, 수정 및 새로운 기능을 문서화합니다." +title: "Changelog" +description: "This changelog documents all updates, fixes, and new features for Codatta in 2025." --- import { useState, useEffect } from 'react'; @@ -67,7 +67,7 @@ import { useState, useEffect } from 'react'; flexShrink: 0 }}> {num} - 개 결과 + result{num !== 1 ? 's' : ''} ); }; @@ -85,7 +85,7 @@ import { useState, useEffect } from 'react';
-고인센티브 작업(예: 에어드랍 또는 프론티어 캠페인)에서의 보상을 위한 선택적 잠금 기능입니다. +고인센티브 작업(예: Airdrop 또는 Frontier 캠페인)에서의 보상을 위한 선택적 잠금 기능입니다. - **트리거:** 캠페인 후 보상이 귀하의 잔액에 입금됩니다. - **잠금:** 자산 페이지를 통해 스마트 계약에 보상을 잠금으로써 안전하게 보호합니다. @@ -99,20 +99,20 @@ import { useState, useEffect } from 'react'; ## 2025년 11월 24일 --- -**캠페인 시작: 에어드랍 시즌 2** +**캠페인 시작: Airdrop 시즌 2**
-물리학, 금융 및 다중 모드 분야에서 학술 수준의 데이터셋을 체계적으로 수집하고, 세 가지 새로운 프론티어를 위한 고품질 데이터 파이프라인을 구축합니다. +물리학, 금융 및 다중 모드 분야에서 학술 수준의 데이터셋을 체계적으로 수집하고, 세 개의 새로운 Frontier를 위한 고품질 데이터 파이프라인을 구축합니다. -- **행동:** 100만 $XNY 상금 풀로 에어드랍 시즌 2를 시작했습니다(3개월 선형 분배). -- **새로운 프론티어:** - - **고급 물리학 문제:** 현재 AI가 정확하게 답변할 수 없는 고난이도 물리학 문제를 제출할 수 있는 도메인 전문가를 위한 것입니다. - - **암호화폐 및 주식 정보:** AI에게 암호화폐 및 주식 투자 결정과 관련된 신뢰할 수 있는 정보를 제공합니다. - - **실제 사진:** 주석이 달린 메타데이터를 포함한 실제 사진을 AI에게 제공합니다. -- **보상 구조:** 작업 완료에 대해 90%, 리더보드 순위에 대해 10%. +- **행동:** 100만 $XNY 상금 풀로 Airdrop 시즌 2를 시작했습니다(3개월 선형 분배). +- **새로운 Frontier:** + - **고급 물리학 문제:** 현재 AI가 올바르게 답변할 수 없는 고난이도 물리학 문제를 제출하기 위한 도메인 전문가를 위한 것입니다. + - **암호화폐 및 주식 정보:** AI에 암호화폐 및 주식 투자 결정과 관련된 신뢰할 수 있는 정보를 제공합니다. + - **실제 사진:** 주석이 달린 메타데이터를 포함한 실제 사진을 AI에 제공합니다. +- **보상 구조:** 작업 완료에 대해 90%, 리더보드 순위에 대해 10%를 지급합니다. - **일정:** 2025년 11월 24일 09:00 UTC – 2025년 12월 08일 09:00 UTC. @@ -127,10 +127,10 @@ import { useState, useEffect } from 'react';
-탈중앙화 식별자(DID)와 계정 바인딩을 가능하게 하는 기본 업그레이드입니다. +탈중앙화 식별자(DID)에 계정을 바인딩할 수 있는 기본 업그레이드입니다. -- **바인딩:** 다음 Codatta 로그인 시 온체인 DID의 셀프 서비스 통합. -- **연관:** 바인딩된 DID는 통합된 기본 키 역할을 하여 모든 작업 행동, 데이터 기여 및 보상 분배를 체계적으로 인덱싱합니다. +- **바인딩:** Codatta에 다음 로그인 시 온체인 DID의 셀프 서비스 통합이 가능합니다. +- **연관:** 바인딩된 DID는 모든 작업 행동, 데이터 기여 및 보상 분배를 체계적으로 인덱싱하는 통합 기본 키 역할을 합니다. - **계보:** 온체인 및 오프체인 활동의 완전한 추적 가능성과 검증을 가능하게 하여 불변의 데이터 출처를 확립합니다. 이 배포는 검증 가능한 데이터 경제를 위한 기술적 초석을 마련합니다. 각 기여자에게 지속적이고 고유한 디지털 정체성을 제공함으로써 세분화된 기여 귀속, 명확한 소유권 검증 및 프로토콜 수준에서의 투명한 인센티브 할당을 가능하게 합니다. @@ -141,16 +141,16 @@ import { useState, useEffect } from 'react'; ## 2025년 11월 03일 --- -**퀘스트 시스템 조정: 암호화폐 프론티어 QUEST 모듈 비활성화** +**퀘스트 시스템 조정: Crypto Frontier QUEST 모듈 서비스 종료**
-암호화폐 프론티어 QUEST 모듈과 모든 관련 작업(제출, 검증 및 보상 사냥 포함)이 오프라인 상태로 전환되었습니다. +전체 Crypto Frontier QUEST 모듈과 모든 관련 작업(제출, 검증 및 보상 사냥 포함)이 오프라인 상태로 전환되었습니다. -- **이유:** 이 모듈은 현재 제품 로드맵에 따라 계획된 생애 주기를 완료했습니다. 비활성화는 시스템 간소화 및 향후 기능 출시를 위한 자원 재조정을 지원합니다. -- **참고:** 사용자의 이력 기여 기록 및 이 모듈에서 획득한 보상은 그대로 유지됩니다. 다른 프론티어 모듈에는 이 변경 사항이 영향을 미치지 않습니다. +- **이유:** 이 모듈은 현재 제품 로드맵에 따라 계획된 생애 주기를 완료했습니다. 서비스 종료는 시스템 간소화 및 향후 기능 출시를 위한 자원 재조정을 지원합니다. +- **참고:** 사용자의 과거 기여 기록과 이 모듈에서 얻은 보상은 그대로 유지됩니다. 이 변경으로 인해 다른 Frontier 모듈에는 영향을 미치지 않습니다. @@ -158,16 +158,16 @@ import { useState, useEffect } from 'react'; ## 2025년 10월 24일 --- -**프론티어 시스템 조정: 로보틱스 프론티어 비활성화** +**Frontier 시스템 조정: Robotics Frontier 서비스 종료**
-로보틱스 프론티어가 공식적으로 비활성화되었습니다. 이 조치는 프론트엔드 진입점에만 영향을 미칩니다. 모든 이력 기여 데이터는 그대로 유지되며 접근 가능합니다. +Robotics Frontier가 공식적으로 서비스 종료되었습니다. 이 조치는 프론트엔드 진입점에만 영향을 미칩니다. 모든 과거 기여 데이터는 그대로 유지되며 접근 가능합니다. -- **이유:** 이 결정은 자원과 사용자 주의를 가장 우선 순위가 높은 활성 프론티어에 집중하기 위한 지속적인 제품 간소화의 일환입니다. 로보틱스 프론티어는 계획된 탐색 단계를 완료하였으며, 비활성화는 노력을 통합할 수 있게 합니다. -- **참고:** 사용자의 과거 기여 및 로보틱스 프론티어에서의 보상은 보존되며 기여 이력에서 검토할 수 있습니다. 다른 프론티어나 플랫폼 기능에는 영향을 미치지 않습니다. +- **이유:** 이 결정은 자원과 사용자 주의를 가장 우선 순위가 높은 활성 Frontier에 집중하기 위한 지속적인 제품 간소화의 일환입니다. Robotics Frontier는 계획된 탐색 단계를 완료하였으며, 서비스 종료를 통해 노력을 통합할 수 있습니다. +- **참고:** 사용자의 과거 기여 및 Robotics Frontier에서의 보상은 보존되며 기여 기록에서 검토할 수 있습니다. 다른 Frontier나 플랫폼 기능에는 영향을 미치지 않습니다. @@ -192,16 +192,16 @@ import { useState, useEffect } from 'react'; ## 2025년 10월 20일 --- -**프론티어 시스템 조정: 암호화폐 프론티어 비활성화** +**Frontier 시스템 조정: Crypto Frontier 서비스 종료**
-암호화폐 프론티어가 공식적으로 비활성화되었습니다. 이 조치는 프론트엔드 진입점에만 영향을 미칩니다. 모든 이력 기여 데이터는 그대로 유지되며 접근 가능합니다. +Crypto Frontier가 공식적으로 서비스 종료되었습니다. 이 조치는 프론트엔드 진입점에만 영향을 미칩니다. 모든 과거 기여 데이터는 그대로 유지되며 접근 가능합니다. -- **이유:** 이 결정은 자원과 사용자 주의를 가장 우선 순위가 높은 활성 프론티어에 집중하기 위한 지속적인 제품 간소화의 일환입니다. 암호화폐 프론티어는 계획된 탐색 단계를 완료하였으며, 비활성화는 노력을 통합할 수 있게 합니다. -- **참고:** 사용자의 과거 기여 및 암호화폐 프론티어에서의 보상은 보존되며 기여 이력에서 검토할 수 있습니다. 다른 프론티어나 플랫폼 기능에는 영향을 미치지 않습니다. +- **이유:** 이 결정은 자원과 사용자 주의를 가장 우선 순위가 높은 활성 Frontier에 집중하기 위한 지속적인 제품 간소화의 일환입니다. Crypto Frontier는 계획된 탐색 단계를 완료하였으며, 서비스 종료를 통해 노력을 통합할 수 있습니다. +- **참고:** 사용자의 과거 기여 및 Crypto Frontier에서의 보상은 보존되며 기여 기록에서 검토할 수 있습니다. 다른 Frontier나 플랫폼 기능에는 영향을 미치지 않습니다. @@ -226,21 +226,21 @@ import { useState, useEffect } from 'react'; ## 2025년 10월 13일 --- -**캠페인 시작: 에어드랍 시즌 1** +**캠페인 시작: Airdrop 시즌 1**
-고보상 메커니즘과 스팸 방지 시행을 통해 고품질의 구조화된 데이터를 체계적으로 수집하고, 유효성과 학술 가치를 보장하며, 장기 기여자에게 보상하고 플랫폼의 데이터 생태계를 다각화하기 위해 다섯 개의 새로운 프론티어 모듈을 도입합니다. +고보상 메커니즘과 스팸 방지 시행을 통해 고품질의 구조화된 데이터를 체계적으로 수집하고, 유효성과 학술 가치를 보장하며, 장기 기여자에게 보상하고 플랫폼의 데이터 생태계를 다각화하기 위해 다섯 개의 새로운 Frontier 모듈을 도입합니다. -- **행동:** 250만 $XNY 상금 풀과 포인트 보상으로 에어드랍 시즌 1을 시작했습니다. -- **새로운 프론티어:** - - **모델 비교:** 다양한 AI 모델 간의 성능 지표 및 비즈니스 결과를 비교하여 최적 또는 하이브리드 솔루션을 식별합니다. +- **행동:** 250만 $XNY 상금 풀과 포인트 보상으로 Airdrop 시즌 1을 시작했습니다. +- **새로운 Frontier:** + - **모델 비교:** 다양한 AI 모델 간의 성능 지표와 비즈니스 결과를 비교하여 최적의 솔루션이나 하이브리드 솔루션을 식별합니다. - **LLM의 실수 발견:** LLM 출력에서의 추론, 사실 및 논리적 오류를 식별하여 모델 최적화를 지원합니다. - **LLM의 실수 수정:** LLM이 실수에서 학습하고 자기 수정 및 추론을 개선할 수 있도록 교정 데이터를 수집합니다. - **식품 과학:** 식품 과학 및 영양 기능에 대한 연구 데이터를 수집하여 이 분야의 혁신을 촉진합니다. - - **라이프로그 캔버스:** 개인 행동 및 건강 관련 데이터를 추적하고 기록하여 행동 및 관련 연구를 지원합니다. + - **Lifelog Canvas:** 개인 행동 및 건강 관련 데이터를 추적하고 기록하여 행동 및 관련 연구를 지원합니다. - **보상 구조:** 보상은 제출 평가에 따라 순위가 매겨지고 캠페인 후 분배됩니다. 악의적인 제출은 데이터 품질을 보장하기 위해 처벌됩니다. - **일정:** 2025년 10월 13일 09:00 UTC - 2025년 10월 27일 09:00 UTC. @@ -250,14 +250,15 @@ import { useState, useEffect } from 'react'; ## 2025년 10월 10일 --- -**기능 출시: 프론티어별 보상 활동** +**기능 출시: Frontier별 보상 활동**
-프론티어를 위한 구성 가능한 보상 활동이 제공되어 추가적인 고부가가치 인센티브를 제공합니다. +Frontier를 위한 구성 가능한 보상 활동이 이제 제공되어 추가적인 고부가가치 인센티브를 제공합니다. +```html - **방법:** 선택된 Frontier 작업은 기본 포인트와는 독립적으로 $XNY 또는 USDT로 추가 보상을 제공합니다. 활동 매개변수(보상 금액, 기간, 목표)는 각 Frontier에 따라 설정되며 해당 홈페이지에 표시됩니다. - **이유:** 목표 지향적인 인센티브를 통해 고부가가치 데이터 작업에 대한 참여를 촉진하고, 데이터 품질과 생태계 참여를 개선하기 위함입니다. @@ -267,7 +268,7 @@ import { useState, useEffect } from 'react'; ## 2025년 09월 26일 --- -**캠페인 시작: Codatta 부스터 캠페인 시즌 3 4주차** +**캠페인 시작: Codatta Booster 캠페인 시즌 3 4주차**
@@ -275,7 +276,7 @@ import { useState, useEffect } from 'react'; 신뢰할 수 있는 다중 도메인 데이터 수집을 통해 AI 개발을 가속화하고, 커뮤니티 주도의 분산형 AI 지식 구축을 촉진합니다. -- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **접근:** Binance Wallet Booster 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha Points ≥ 61 필요). - **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. - **일정:** 2025년 09월 26일 07:00 UTC – 2025년 10월 03일 07:00 UTC. @@ -285,15 +286,15 @@ import { useState, useEffect } from 'react'; ## 2025년 09월 12일 --- -**캠페인 시작: Codatta 부스터 캠페인 시즌 3 3주차** +**캠페인 시작: Codatta Booster 캠페인 시즌 3 3주차**
-AI 훈련 및 검증을 위해 생명, 로봇 공학, 암호화폐, 모델 비교 및 지문 검증에 걸친 교차 도메인 데이터를 수집합니다. +AI 훈련 및 검증을 위해 생명, 로봇공학, 암호화폐, 모델 비교 및 지문 검증에 걸친 교차 도메인 데이터를 수집합니다. -- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **접근:** Binance Wallet Booster 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha Points ≥ 61 필요). - **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. - **일정:** 2025년 09월 12일 07:00 UTC – 2025년 09월 19일 07:00 UTC. @@ -303,15 +304,15 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학, 암호화폐, 모델 비 ## 2025년 09월 05일 --- -**캠페인 시작: Codatta 부스터 캠페인 시즌 3 2주차** +**캠페인 시작: Codatta Booster 캠페인 시즌 3 2주차**
-AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친 교차 도메인 데이터를 수집하고 주석을 달기 위해 진행됩니다. +AI 훈련 및 검증을 위해 생명, 로봇공학 및 암호화폐에 걸친 교차 도메인 데이터를 수집하고 주석을 달기 위해 진행됩니다. -- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **접근:** Binance Wallet Booster 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha Points ≥ 61 필요). - **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. - **일정:** 2025년 09월 05일 07:00 UTC – 2025년 09월 12일 07:00 UTC. @@ -330,7 +331,7 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친 사용자 정보 모듈 내에 새로운 데이터 프로필 기능을 도입합니다. - **방법:** 사용자 정보 > 데이터 프로필을 통해 총 제출 수, 획득한 보상 및 기여 통계를 시각적 대시보드에서 확인할 수 있습니다. -- **이유:** 기여에 대한 투명성을 제공하고, 가시적인 진행 상황 추적을 통해 참여를 강화하며, 장기적인 참여를 지원하기 위함입니다. +- **이유:** 기여에 대한 투명성을 제공하고, 가시적인 진행 추적을 통해 참여를 강화하며, 장기적인 참여를 지원하기 위함입니다. @@ -338,15 +339,15 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친 ## 2025년 08월 22일 --- -**캠페인 시작: Codatta 부스터 캠페인 시즌 3 1주차** +**캠페인 시작: Codatta Booster 캠페인 시즌 3 1주차**
-분산형 AI 훈련을 위해 생명, 로봇 공학 및 암호화폐에 걸친 주석이 달린 데이터의 기초를 마련합니다. +분산형 AI 훈련을 위해 생명, 로봇공학 및 암호화폐에 걸친 교차 도메인 주석 데이터의 기초를 마련합니다. -- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **접근:** Binance Wallet Booster 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha Points ≥ 61 필요). - **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. - **일정:** 2025년 08월 22일 07:00 UTC – 2025년 08월 29일 07:00 UTC. @@ -356,7 +357,7 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친 ## 2025년 08월 15일 --- -**캠페인 시작: Codatta 부스터 캠페인 시즌 2 4주차** +**캠페인 시작: Codatta Booster 캠페인 시즌 2 4주차**
@@ -364,7 +365,7 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친 분산형 AI 훈련을 위해 음식 AI, 로봇 상호작용 및 CEX 온체인 데이터에 대한 도메인별 데이터 세트를 체계적으로 주석 달고 확장합니다. -- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **접근:** Binance Wallet Booster 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha Points ≥ 61 필요). - **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. - **일정:** 2025년 08월 15일 07:00 UTC – 2025년 08월 22일 07:00 UTC. @@ -374,15 +375,15 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친 ## 2025년 08월 08일 --- -**캠페인 시작: Codatta 부스터 캠페인 시즌 2 3주차** +**캠페인 시작: Codatta Booster 캠페인 시즌 2 3주차**
-프로젝트 학습, 음식 AI 판단, 로봇 주석 및 CEX 데이터 확장을 포함한 네 가지 주요 영역에서 주석이 달린 데이터를 체계적으로 수집합니다. +프로젝트 학습, 음식 AI 판단, 로봇 주석 및 CEX 데이터 확장을 포함한 네 가지 주요 영역에서 체계적으로 주석이 달린 데이터를 수집합니다. -- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **접근:** Binance Wallet Booster 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha Points ≥ 61 필요). - **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. - **일정:** 2025년 08월 08일 07:00 UTC – 2025년 08월 15일 07:00 UTC. @@ -392,7 +393,7 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친 ## 2025년 08월 01일 --- -**캠페인 시작: Codatta 부스터 캠페인 시즌 2 2주차** +**캠페인 시작: Codatta Booster 캠페인 시즌 2 2주차**
@@ -400,7 +401,7 @@ AI 훈련 및 검증을 위해 생명, 로봇 공학 및 암호화폐에 걸친 AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 라벨링을 포함한 세 가지 핵심 도메인에서 주석이 달린 데이터를 수집합니다. -- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **접근:** Binance Wallet Booster 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha Points ≥ 61 필요). - **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. - **일정:** 2025년 08월 01일 07:00 UTC – 2025년 08월 08일 07:00 UTC. @@ -410,7 +411,7 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 ## 2025년 07월 24일 --- -**캠페인 시작: Codatta 부스터 캠페인 시즌 2 1주차** +**캠페인 시작: Codatta Booster 캠페인 시즌 2 1주차**
@@ -418,7 +419,7 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 주석이 달린 실제 상호작용 데이터를 통해 AI 음식 분석을 검증하고 로봇 훈련을 향상시킵니다. -- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **접근:** Binance Wallet Booster 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha Points ≥ 61 필요). - **보상:** 총 보상 풀 50,000,000 $XNY(잠금 기간 포함), 작업 완료 및 검증 후 분배됩니다. - **일정:** 2025년 07월 24일 07:00 UTC – 2025년 07월 31일 07:00 UTC. @@ -428,7 +429,7 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 ## 2025년 07월 16일 --- -**캠페인 시작: Codatta 부스터 캠페인 시즌 1 4주차** +**캠페인 시작: Codatta Booster 캠페인 시즌 1 4주차**
@@ -436,7 +437,7 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 무게, 조리 방법 및 칼로리 함량을 포함한 풍부한 주석을 수집하여 AI의 음식 이해를 심화합니다. -- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **접근:** Binance Wallet Booster 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha Points ≥ 61 필요). - **보상:** 총 보상 풀 50,000,000 $XNY, 작업 완료 및 검증 후 분배됩니다. - **일정:** 2025년 07월 16일 13:00 UTC – 2025년 07월 23일 13:00 UTC. @@ -446,15 +447,15 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 ## 2025년 07월 09일 --- -**캠페인 시작: Codatta 부스터 캠페인 시즌 1 3주차** +**캠페인 시작: Codatta Booster 캠페인 시즌 1 3주차**
-문화적 및 맥락적 관련성을 넘어 단순한 라벨을 넘어서, 즉석 식품의 주석이 달린 이미지를 수집하여 AI에게 인간의 식습관에 대한 미세한 이해를 가르칩니다. +문화적 및 맥락적 관련성을 넘어 단순한 라벨을 넘어서는 즉석 식품의 주석이 달린 이미지를 수집하여 AI에게 인간의 식습관에 대한 미세한 이해를 가르칩니다. -- **접근:** 바이낸스 지갑 부스터 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha 포인트 ≥ 61 필요). +- **접근:** Binance Wallet Booster 탭 또는 홈페이지 배너를 통해 접근 가능(Alpha Points ≥ 61 필요). - **보상:** 총 보상 풀 50,000,000 $XNY, 작업 완료 및 검증 후 분배됩니다. - **일정:** 2025년 07월 09일 13:00 UTC – 2025년 07월 16일 13:00 UTC. @@ -472,16 +473,17 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 퀘스트 시스템이 완전히 복원되어 재개되었습니다. -- **방법:** 2025년 06월 30일에 일시적으로 오프라인 되었으며, 현재 포괄적으로 복원되었습니다. +- **방법:** 2025년 06월 30일에 일시적으로 오프라인 상태였으며, 현재 포괄적으로 복원되었습니다. - **이유:** 아키텍처 업그레이드를 통해 시스템 안정성과 사용자 경험을 향상시키기 위함입니다. +```
## 2025년 07월 02일 --- -**캠페인 시작: Codatta 부스터 캠페인 시즌 1 2주차** +**캠페인 시작: Codatta Booster 캠페인 시즌 1 2주차**
@@ -489,7 +491,7 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 채식, 비채식 및 혼합 카테고리 전반에 걸쳐 세밀한 이미지 라벨링을 통해 AI의 글로벌 음식 문화 및 선호도 이해를 확장하기 위함입니다. -- **접근:** Binance Wallet 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (알파 포인트 ≥ 61). +- **접근:** Binance Wallet Booster 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha Points ≥ 61). - **보상:** 총 50,000,000 $XNY의 보상 풀, 작업 완료 및 검증 후 분배됩니다. - **일정:** 2025년 07월 02일 13:00 UTC – 2025년 07월 09일 13:00 UTC. @@ -499,7 +501,7 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 ## 2025년 06월 25일 --- -**캠페인 시작: Codatta 부스터 캠페인 시즌 1 1주차** +**캠페인 시작: Codatta Booster 캠페인 시즌 1 1주차**
@@ -507,7 +509,7 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 주석이 달린 음식 데이터를 수집하고, 퀴즈를 통해 커뮤니티 지식을 활용하며, 다단계 인센티브 구조를 통해 참여를 보상함으로써 첫 번째 시즌을 시작하기 위함입니다. -- **접근:** Binance Wallet 부스터 탭 또는 홈페이지 배너를 통해 접근 가능 (알파 포인트 ≥ 61). +- **접근:** Binance Wallet Booster 탭 또는 홈페이지 배너를 통해 접근 가능 (Alpha Points ≥ 61). - **보상:** 총 50,000,000 $XNY의 보상 풀, 작업 완료 및 검증 후 분배됩니다. - **일정:** 2025년 06월 25일 13:00 UTC – 2025년 07월 02일 13:00 UTC. @@ -537,11 +539,11 @@ export const ChangelogFilter = () => { }, [activeFilter]); const filterTypes = [ - { id: 'all', label: '전체', color: '#6b7280', count: 24 }, - { id: 'core-feature', label: '핵심 기능 출시', color: '#16A34A', count: 4 }, - { id: 'optimization', label: '조정 및 최적화', color: '#F59E0B', count: 3 }, - { id: 'fixes', label: '수정 및 기능 종료', color: '#EF4444', count: 3 }, - { id: 'campaign', label: '캠페인 시작', color: '#A855F7', count: 14 } + { id: 'all', label: 'All', color: '#6b7280', count: 24 }, + { id: 'core-feature', label: 'Core Feature Release', color: '#16A34A', count: 4 }, + { id: 'optimization', label: 'Adjustments & Optimization', color: '#F59E0B', count: 3 }, + { id: 'fixes', label: 'Fixes & Feature Sunset', color: '#EF4444', count: 3 }, + { id: 'campaign', label: 'Campaign Launch', color: '#A855F7', count: 14 } ]; const activeType = filterTypes.find(type => type.id === activeFilter) || filterTypes[0]; @@ -713,14 +715,14 @@ export const MonthFilter = () => { }, [activeMonth]); const months = [ - { id: 'all', label: '전체', count: 24 }, - { id: 'dec', label: '12월', count: 1 }, - { id: 'nov', label: '11월', count: 3 }, - { id: 'oct', label: '10월', count: 6 }, - { id: 'sep', label: '9월', count: 3 }, - { id: 'aug', label: '8월', count: 5 }, - { id: 'jul', label: '7월', count: 5 }, - { id: 'jun', label: '6월', count: 1 } + { id: 'all', label: 'All Months', count: 24 }, + { id: 'dec', label: 'December', count: 1 }, + { id: 'nov', label: 'November', count: 3 }, + { id: 'oct', label: 'October', count: 6 }, + { id: 'sep', label: 'September', count: 3 }, + { id: 'aug', label: 'August', count: 5 }, + { id: 'jul', label: 'July', count: 5 }, + { id: 'jun', label: 'June', count: 1 } ]; const activeMonthData = months.find(month => month.id === activeMonth) || months[0]; From f931502d731deff364b06cd51585b7191afc21d6 Mon Sep 17 00:00:00 2001 From: Joel Date: Sun, 4 Jan 2026 20:58:15 +0800 Subject: [PATCH 25/26] Fix: Correct front matter, result text, filter labels, and remove code block errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fixed Chinese front matter: title to '变更日志', description in Chinese - Fixed Korean front matter: title to '변경 로그', description in Korean - Fixed result text: '条结果' for Chinese, '개 결과' for Korean - Fixed filter labels: translated all filter types and month names for both languages - Removed erroneous code block markers in Korean changelog () that caused parsing errors --- cn/changelog/2025.mdx | 32 ++++++++++++++++---------------- ko/changelog/2025.mdx | 34 ++++++++++++++++------------------ 2 files changed, 32 insertions(+), 34 deletions(-) diff --git a/cn/changelog/2025.mdx b/cn/changelog/2025.mdx index 54882a3..a226888 100644 --- a/cn/changelog/2025.mdx +++ b/cn/changelog/2025.mdx @@ -1,6 +1,6 @@ --- -title: "Changelog" -description: "This changelog documents all updates, fixes, and new features for Codatta in 2025." +title: "变更日志" +description: "本文档记录了 Codatta 在 2025 年的所有更新、修复和新功能。" --- import { useState, useEffect } from 'react'; @@ -67,7 +67,7 @@ import { useState, useEffect } from 'react'; flexShrink: 0 }}> {num} - result{num !== 1 ? 's' : ''} + 条结果
); }; @@ -537,11 +537,11 @@ export const ChangelogFilter = () => { }, [activeFilter]); const filterTypes = [ - { id: 'all', label: 'All', color: '#6b7280', count: 24 }, - { id: 'core-feature', label: 'Core Feature Release', color: '#16A34A', count: 4 }, - { id: 'optimization', label: 'Adjustments & Optimization', color: '#F59E0B', count: 3 }, - { id: 'fixes', label: 'Fixes & Feature Sunset', color: '#EF4444', count: 3 }, - { id: 'campaign', label: 'Campaign Launch', color: '#A855F7', count: 14 } + { id: 'all', label: '全部', color: '#6b7280', count: 24 }, + { id: 'core-feature', label: '核心功能发布', color: '#16A34A', count: 4 }, + { id: 'optimization', label: '调整与优化', color: '#F59E0B', count: 3 }, + { id: 'fixes', label: '修复与功能下线', color: '#EF4444', count: 3 }, + { id: 'campaign', label: '活动启动', color: '#A855F7', count: 14 } ]; const activeType = filterTypes.find(type => type.id === activeFilter) || filterTypes[0]; @@ -713,14 +713,14 @@ export const MonthFilter = () => { }, [activeMonth]); const months = [ - { id: 'all', label: 'All Months', count: 24 }, - { id: 'dec', label: 'December', count: 1 }, - { id: 'nov', label: 'November', count: 3 }, - { id: 'oct', label: 'October', count: 6 }, - { id: 'sep', label: 'September', count: 3 }, - { id: 'aug', label: 'August', count: 5 }, - { id: 'jul', label: 'July', count: 5 }, - { id: 'jun', label: 'June', count: 1 } + { id: 'all', label: '全部月份', count: 24 }, + { id: 'dec', label: '十二月', count: 1 }, + { id: 'nov', label: '十一月', count: 3 }, + { id: 'oct', label: '十月', count: 6 }, + { id: 'sep', label: '九月', count: 3 }, + { id: 'aug', label: '八月', count: 5 }, + { id: 'jul', label: '七月', count: 5 }, + { id: 'jun', label: '六月', count: 1 } ]; const activeMonthData = months.find(month => month.id === activeMonth) || months[0]; diff --git a/ko/changelog/2025.mdx b/ko/changelog/2025.mdx index 1c9c51c..154a7d1 100644 --- a/ko/changelog/2025.mdx +++ b/ko/changelog/2025.mdx @@ -1,6 +1,6 @@ --- -title: "Changelog" -description: "This changelog documents all updates, fixes, and new features for Codatta in 2025." +title: "변경 로그" +description: "이 변경 로그는 2025년 Codatta의 모든 업데이트, 수정 및 새로운 기능을 문서화합니다." --- import { useState, useEffect } from 'react'; @@ -67,7 +67,7 @@ import { useState, useEffect } from 'react'; flexShrink: 0 }}> {num} - result{num !== 1 ? 's' : ''} + 개 결과 ); }; @@ -258,7 +258,6 @@ Crypto Frontier가 공식적으로 서비스 종료되었습니다. 이 조치 Frontier를 위한 구성 가능한 보상 활동이 이제 제공되어 추가적인 고부가가치 인센티브를 제공합니다. -```html - **방법:** 선택된 Frontier 작업은 기본 포인트와는 독립적으로 $XNY 또는 USDT로 추가 보상을 제공합니다. 활동 매개변수(보상 금액, 기간, 목표)는 각 Frontier에 따라 설정되며 해당 홈페이지에 표시됩니다. - **이유:** 목표 지향적인 인센티브를 통해 고부가가치 데이터 작업에 대한 참여를 촉진하고, 데이터 품질과 생태계 참여를 개선하기 위함입니다. @@ -477,7 +476,6 @@ AI 음식 모델 비교, 로봇 상호작용 주석 및 CEX 핫 월렛 데이터 - **이유:** 아키텍처 업그레이드를 통해 시스템 안정성과 사용자 경험을 향상시키기 위함입니다. -```
@@ -539,11 +537,11 @@ export const ChangelogFilter = () => { }, [activeFilter]); const filterTypes = [ - { id: 'all', label: 'All', color: '#6b7280', count: 24 }, - { id: 'core-feature', label: 'Core Feature Release', color: '#16A34A', count: 4 }, - { id: 'optimization', label: 'Adjustments & Optimization', color: '#F59E0B', count: 3 }, - { id: 'fixes', label: 'Fixes & Feature Sunset', color: '#EF4444', count: 3 }, - { id: 'campaign', label: 'Campaign Launch', color: '#A855F7', count: 14 } + { id: 'all', label: '전체', color: '#6b7280', count: 24 }, + { id: 'core-feature', label: '핵심 기능 출시', color: '#16A34A', count: 4 }, + { id: 'optimization', label: '조정 및 최적화', color: '#F59E0B', count: 3 }, + { id: 'fixes', label: '수정 및 기능 종료', color: '#EF4444', count: 3 }, + { id: 'campaign', label: '캠페인 시작', color: '#A855F7', count: 14 } ]; const activeType = filterTypes.find(type => type.id === activeFilter) || filterTypes[0]; @@ -715,14 +713,14 @@ export const MonthFilter = () => { }, [activeMonth]); const months = [ - { id: 'all', label: 'All Months', count: 24 }, - { id: 'dec', label: 'December', count: 1 }, - { id: 'nov', label: 'November', count: 3 }, - { id: 'oct', label: 'October', count: 6 }, - { id: 'sep', label: 'September', count: 3 }, - { id: 'aug', label: 'August', count: 5 }, - { id: 'jul', label: 'July', count: 5 }, - { id: 'jun', label: 'June', count: 1 } + { id: 'all', label: '전체', count: 24 }, + { id: 'dec', label: '12월', count: 1 }, + { id: 'nov', label: '11월', count: 3 }, + { id: 'oct', label: '10월', count: 6 }, + { id: 'sep', label: '9월', count: 3 }, + { id: 'aug', label: '8월', count: 5 }, + { id: 'jul', label: '7월', count: 5 }, + { id: 'jun', label: '6월', count: 1 } ]; const activeMonthData = months.find(month => month.id === activeMonth) || months[0]; From fe762500cc701abeb3eb675e0a8b79f4552d24c7 Mon Sep 17 00:00:00 2001 From: Joel Date: Sun, 4 Jan 2026 21:13:22 +0800 Subject: [PATCH 26/26] refactor: Translate code comments and log messages to English - Convert all Chinese comments in translate.js to English - Convert all Chinese log messages and error messages to English - Convert all Chinese comments in GitHub Actions workflow to English - Keep systemPrompt in Chinese/Korean as they are translation instructions for AI - Add PR description document --- .github/workflows/auto-translate.yml | 22 +++--- PR_DESCRIPTION.md | 109 +++++++++++++++++++++++++++ translate.js | 92 +++++++++++----------- 3 files changed, 166 insertions(+), 57 deletions(-) create mode 100644 PR_DESCRIPTION.md diff --git a/.github/workflows/auto-translate.yml b/.github/workflows/auto-translate.yml index f5c1351..f9d537e 100644 --- a/.github/workflows/auto-translate.yml +++ b/.github/workflows/auto-translate.yml @@ -14,35 +14,35 @@ jobs: contents: write steps: - # 1️⃣ 检出触发的源分支 + # 1️⃣ Checkout source branch - name: Checkout source branch uses: actions/checkout@v4 with: ref: ${{ github.ref_name }} - # 2️⃣ Node 环境 + # 2️⃣ Setup Node environment - name: Setup Node uses: actions/setup-node@v4 with: node-version: 20 - # 3️⃣ 安装依赖 + # 3️⃣ Install dependencies - name: Install deps run: | npm init -y npm install openai fs-extra - # 4️⃣ 执行翻译(生成 cn/ ko/ 文件) + # 4️⃣ Run translation (generate cn/ ko/ files) - name: Run translation env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: node translate.js timeout-minutes: 60 - # 5️⃣ 创建【带时间戳】的翻译分支并 push + # 5️⃣ Create translation branch with timestamp and push - name: Push translated files run: | - # 时间戳(UTC,保证稳定) + # Timestamp (UTC, for stability) TS=$(date -u '+%Y%m%d-%H%M%S') SRC_BRANCH="${GITHUB_REF_NAME}" @@ -51,18 +51,18 @@ jobs: git config user.name "github-actions" git config user.email "github-actions@github.com" - # 新建翻译分支(每次都是新的) + # Create new translation branch (new each time) git checkout -b "$TRANS_BRANCH" - # 确保目录存在(防止 glob 报错) + # Ensure directories exist (prevent glob errors) mkdir -p cn/changelog mkdir -p ko/changelog - # 只 add 翻译文件 + # Only add translated files git add cn/** ko/** - # 没变化就不提交 + # Skip commit if no changes git diff --cached --quiet || git commit -m "chore: auto translate (${TS})" - # 推送新分支 + # Push new branch git push origin "$TRANS_BRANCH" \ No newline at end of file diff --git a/PR_DESCRIPTION.md b/PR_DESCRIPTION.md new file mode 100644 index 0000000..4a0d734 --- /dev/null +++ b/PR_DESCRIPTION.md @@ -0,0 +1,109 @@ +# 添加自动翻译系统并完善多语言 Changelog 支持 + +## 📋 概述 + +本次 PR 引入了自动翻译工作流系统,为文档添加了韩文支持,并全面改进了中文和韩文 changelog 的翻译质量和本地化体验。 + +## ✨ 主要功能 + +### 1. 自动翻译系统 +- **新增 GitHub Actions 工作流** (`.github/workflows/auto-translate.yml`) + - 当推送到非 main 分支时自动触发翻译 + - 自动创建翻译分支并提交翻译结果 +- **新增翻译脚本** (`translate.js`) + - 使用 OpenAI API 进行智能翻译 + - 支持中文和韩文翻译 + - 包含重试机制和分块处理 + +### 2. 翻译质量改进 +- **专有名词智能识别** + - 自动识别首字母大写的专有名词(产品名、模块名等) + - 固定术语规则:`Frontier`、`Crypto Frontier`、`Robotics Frontier`、`Model Comparison` 等保持英文 + - 特定术语统一翻译:`Lineage` → `血缘`,`How` → `运作方式`,`Timeline` → `活动时间`,`Access` → `参与方式`,`Lock` → `锁仓` +- **自然语言表达** + - 避免直译,根据上下文用符合语言习惯的方式表达 + - 例如:`action` 根据上下文翻译为 `操作`、`动作` 等,而非直译为 `行动` +- **日期格式统一** + - 中文:`2025 年 12 月 04 日`(汉字和数字之间保留空格,月份和日期补零) + - 韩文:`2025년 12월 04일`(月份和日期补零) + +### 3. 多语言 Changelog 支持 +- **新增韩文 changelog** (`ko/changelog/2025.mdx`) + - 完整的 2025 年 changelog 韩文翻译 + - 包含所有 UI 元素的本地化 +- **更新中文 changelog** (`cn/changelog/2025.mdx`) + - 改进翻译质量 + - 统一日期格式 + - 修复专有名词翻译 +- **更新英文 changelog** (`en/changelog/2025.mdx`) + - 添加 React hooks 导入以支持交互功能 + +### 4. UI 元素本地化 +- **Front matter(元数据)** + - 中文:`title: "变更日志"`,`description: "本文档记录了 Codatta 在 2025 年的所有更新、修复和新功能。"` + - 韩文:`title: "변경 로그"`,`description: "이 변경 로그는 2025년 Codatta의 모든 업데이트, 수정 및 새로운 기능을 문서화합니다."` +- **结果文本** + - 中文:`条结果` + - 韩文:`개 결과` +- **过滤器标签** + - 中文:全部、核心功能发布、调整与优化、修复与功能下线、活动启动 + - 韩文:전체、핵심 기능 출시、조정 및 최적화、수정 및 기능 종료、캠페인 시작 +- **月份标签** + - 中文:全部月份、十二月、十一月、十月等 + - 韩文:전체、12월、11월、10월等 + +### 5. 配置更新 +- **更新 `docs.json`** + - 添加韩文 changelog 导航配置 + +## 🐛 修复的问题 + +1. **解析错误修复** + - 修复韩文 changelog 中的代码块标记错误(` ```html` 和多余的 ` ````) + - 修复 JSX 解析错误 + +2. **翻译一致性** + - 统一专有名词处理规则 + - 统一日期格式 + - 统一术语翻译 + +3. **UI 元素翻译** + - 修复过滤器标签未翻译的问题 + - 修复结果文本未翻译的问题 + - 修复 front matter 未翻译的问题 + +## 📁 文件变更 + +- **新增文件:** + - `.github/workflows/auto-translate.yml` - 自动翻译工作流 + - `translate.js` - 翻译脚本 + - `ko/changelog/2025.mdx` - 韩文 changelog + +- **修改文件:** + - `cn/changelog/2025.mdx` - 中文 changelog 更新 + - `en/changelog/2025.mdx` - 英文 changelog 更新 + - `docs.json` - 导航配置更新 + +## 🔄 工作流程 + +1. 开发者推送代码到非 main 分支 +2. GitHub Actions 自动触发翻译工作流 +3. 工作流运行 `translate.js` 脚本 +4. 脚本读取英文 changelog,使用 OpenAI API 翻译为中文和韩文 +5. 自动创建翻译分支(格式:`{原分支名}-auto-translate-{时间戳}`) +6. 提交翻译结果到新分支 + +## 📝 注意事项 + +- 翻译脚本需要 `OPENAI_API_KEY` 环境变量 +- 工作流会自动跳过已包含 `auto-translate` 的分支,避免循环触发 +- 翻译提示词已优化,确保专有名词和术语的一致性 + +## ✅ 测试 + +- [x] 中文 changelog 显示正常 +- [x] 韩文 changelog 显示正常,无解析错误 +- [x] 所有 UI 元素已正确本地化 +- [x] 日期格式统一 +- [x] 专有名词处理正确 +- [x] 自动翻译工作流正常运行 diff --git a/translate.js b/translate.js index d803f3f..091c9b2 100644 --- a/translate.js +++ b/translate.js @@ -3,7 +3,7 @@ import fs from "fs-extra"; import path from "path"; /** - * 配置区 + * Configuration */ const SRC_DIR = "en/changelog"; const TARGET_LANGS = [ @@ -21,7 +21,7 @@ const TARGET_LANGS = [ }, ]; -// 初始化客户端 +// Initialize OpenAI client const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY, timeout: 120000, @@ -29,7 +29,7 @@ const client = new OpenAI({ }); /** - * 重试策略 + * Retry strategy */ async function withRetry(fn, maxRetries = 5) { let retries = 0; @@ -39,17 +39,17 @@ async function withRetry(fn, maxRetries = 5) { } catch (err) { retries++; if (retries >= maxRetries) { - throw new Error(`重试${maxRetries}次后仍失败:${err.message}`); + throw new Error(`Failed after ${maxRetries} retries: ${err.message}`); } const delay = 1000 * Math.pow(2, retries); - console.log(`请求失败,${delay}ms 后重试(第 ${retries}/${maxRetries} 次):`, err.message); + console.log(`Request failed, retrying after ${delay}ms (attempt ${retries}/${maxRetries}):`, err.message); await new Promise(resolve => setTimeout(resolve, delay)); } } } /** - * 分块函数(仅处理待翻译部分) + * Split text into chunks (only for the part to be translated) */ function splitTextByParagraphs(text, maxChars = 8000) { const paragraphs = text.split("\n\n"); @@ -82,32 +82,32 @@ function splitTextByParagraphs(text, maxChars = 8000) { if (currentChunk.trim()) { chunks.push(currentChunk.trim()); } - console.log(`✅ 待翻译部分拆分为 ${chunks.length} 块,单块最大${maxChars}字符`); + console.log(`✅ Split translation part into ${chunks.length} chunks, max ${maxChars} chars per chunk`); return chunks; } /** - * 🔥 双标记截断逻辑(核心修改) - * 规则: - * 1. 前标记(markerBefore)及之前 → 不翻译,保留 - * 2. 前标记后 ~ 后标记前 → 翻译 - * 3. 后标记(markerAfter)及之后 → 不翻译,保留 + * Two-marker truncation logic (core modification) + * Rules: + * 1. Before markerBefore (inclusive) → keep as-is, no translation + * 2. Between markerBefore and markerAfter → translate + * 3. After markerAfter (inclusive) → keep as-is, no translation */ function truncateWithTwoMarkers(text, markerBefore, markerAfter) { - // 1. 定位前标记(兼容跨多行) + // 1. Locate markerBefore (supports multi-line) const markerBeforeIndex = text.indexOf(markerBefore); - // 2. 定位后标记(从前往后找,且在前标记之后) + // 2. Locate markerAfter (search forward, must be after markerBefore) const markerAfterIndex = markerBeforeIndex === -1 ? -1 : text.indexOf(markerAfter, markerBeforeIndex + markerBefore.length); - // 边界情况1:没找到前标记 → 只处理后标记(后标记及之后不翻译) + // Edge case 1: markerBefore not found → only handle markerAfter (keep after markerAfter as-is) if (markerBeforeIndex === -1) { if (markerAfterIndex === -1) { - console.log("⚠️ 未找到任何标记,将翻译全部内容"); + console.log("⚠️ No markers found, will translate entire content"); return { translatePart: text, keepBefore: "", keepAfter: "" }; } - console.log("⚠️ 未找到前标记,仅保留后标记及之后不翻译"); + console.log("⚠️ markerBefore not found, keeping content after markerAfter as-is"); return { translatePart: text.slice(0, markerAfterIndex).trim(), keepBefore: "", @@ -115,9 +115,9 @@ function truncateWithTwoMarkers(text, markerBefore, markerAfter) { }; } - // 边界情况2:找到前标记,但没找到后标记 → 仅前标记及之前不翻译,之后全翻译 + // Edge case 2: markerBefore found but markerAfter not found → keep before markerBefore as-is, translate the rest if (markerAfterIndex === -1) { - console.log("⚠️ 未找到后标记,仅保留前标记及之前不翻译"); + console.log("⚠️ markerAfter not found, keeping content before markerBefore as-is"); return { translatePart: text.slice(markerBeforeIndex + markerBefore.length).trim(), keepBefore: text.slice(0, markerBeforeIndex + markerBefore.length), @@ -125,56 +125,56 @@ function truncateWithTwoMarkers(text, markerBefore, markerAfter) { }; } - // 正常情况:前后标记都找到 → 中间部分翻译 - console.log(`✅ 双标记定位成功: - - 前标记位置:${markerBeforeIndex} - - 后标记位置:${markerAfterIndex}`); + // Normal case: both markers found → translate the middle part + console.log(`✅ Both markers located: + - markerBefore position: ${markerBeforeIndex} + - markerAfter position: ${markerAfterIndex}`); return { - // 待翻译:前标记后 ~ 后标记前 + // To translate: between markerBefore and markerAfter translatePart: text.slice(markerBeforeIndex + markerBefore.length, markerAfterIndex).trim(), - // 保留:前标记及之前 + // Keep: before markerBefore (inclusive) keepBefore: text.slice(0, markerBeforeIndex + markerBefore.length), - // 保留:后标记及之后 + // Keep: after markerAfter (inclusive) keepAfter: text.slice(markerAfterIndex) }; } /** - * 翻译函数(整合双标记+分块+翻译+拼接) + * Translation function (integrates two-marker + chunking + translation + concatenation) */ async function translate(text, systemPrompt) { - console.log("\n📝 原始文本总长度:", text.length, "字符"); + console.log("\n📝 Original text total length:", text.length, "characters"); - // 🔥 配置两个标记(原样复制,含换行/缩进/特殊字符) - // 前标记:}; return ; })()}
+ // Configure two markers (exact copy, including newlines/indentation/special characters) + // markerBefore: }; return ; })()} const markerBefore = `}; return ; })()} `; - // 后标记:{/* Component definitions - moved to end of file for cleaner code organization */} + // markerAfter: {/* Component definitions - moved to end of file for cleaner code organization */} const markerAfter = `{/* Component definitions - moved to end of file for cleaner code organization */}`; - // 执行双标记截断 + // Execute two-marker truncation const { translatePart, keepBefore, keepAfter } = truncateWithTwoMarkers(text, markerBefore, markerAfter); - // 无待翻译内容 → 直接返回保留的前后部分 + // No content to translate → return kept parts directly if (!translatePart) { return keepBefore + keepAfter; } - // 分块翻译中间内容 + // Chunk and translate the middle content const chunks = splitTextByParagraphs(translatePart); const translatedChunks = []; for (let i = 0; i < chunks.length; i++) { - console.log(`🔄 翻译第 ${i+1}/${chunks.length} 块(字符数:${chunks[i].length})`); + console.log(`🔄 Translating chunk ${i+1}/${chunks.length} (${chunks[i].length} characters)`); const res = await withRetry(async () => { return await client.chat.completions.create({ model: "gpt-4o-mini", messages: [ { role: "system", content: systemPrompt }, - { role: "user", content: `请翻译以下文本,严格遵循系统指令:\n${chunks[i]}` }, + { role: "user", content: `Please translate the following text, strictly following the system instructions:\n${chunks[i]}` }, ], temperature: 0.0, max_tokens: 4096, @@ -183,12 +183,12 @@ async function translate(text, systemPrompt) { }); if (!res || !res.choices || res.choices.length === 0) { - throw new Error(`第${i+1}块翻译失败:API返回异常`); + throw new Error(`Translation failed for chunk ${i+1}: API returned abnormal response`); } translatedChunks.push(res.choices[0].message.content.trim()); } - // 拼接最终结果:前保留 + 翻译后的中间内容 + 后保留 + // Concatenate final result: keepBefore + translated middle content + keepAfter const translatedPart = translatedChunks.join("\n\n"); const finalResult = keepBefore + (translatedPart ? "\n" + translatedPart : "") + keepAfter; @@ -196,11 +196,11 @@ async function translate(text, systemPrompt) { } /** - * 主流程 + * Main process */ async function run() { if (!(await fs.pathExists(SRC_DIR))) { - console.log("❌ 未找到 changelog 目录,跳过翻译"); + console.log("❌ changelog directory not found, skipping translation"); return; } @@ -211,7 +211,7 @@ async function run() { const srcPath = path.join(SRC_DIR, file); const content = await fs.readFile(srcPath, "utf-8"); - console.log(`\n========== 开始处理 ${srcPath} ==========`); + console.log(`\n========== Processing ${srcPath} ==========`); for (const lang of TARGET_LANGS) { const outDir = path.join(lang.code, "changelog"); @@ -221,19 +221,19 @@ async function run() { try { const translated = await translate(content, lang.systemPrompt); await fs.writeFile(outPath, translated, "utf-8"); - console.log(`✅ 成功:${file} → ${lang.code}/changelog/${file}`); + console.log(`✅ Success: ${file} → ${lang.code}/changelog/${file}`); } catch (err) { - console.error(`❌ 失败:${file} → ${lang.code}`, err.stack); + console.error(`❌ Failed: ${file} → ${lang.code}`, err.stack); continue; } } } - console.log("\n🎉 所有文件处理完成!"); + console.log("\n🎉 All files processed!"); } -// 执行主流程 +// Execute main process run().catch((err) => { - console.error("💥 全局执行失败:", err.stack); + console.error("💥 Global execution failed:", err.stack); process.exit(1); }); \ No newline at end of file