【最火热中国开源项目社区】奖项评选说明 & 全新极客玩法

>> 算法讨论区

※ 所有参选的开源项目需使用通过 OSI 认证的协议、或木兰许可证。若在最终榜单发现不符合要求的项目,会将其从榜单移除。

本次年度评选将根据 “热度值” 高低选出排名前 15 的开源项目,并为其颁发「最火热中国开源项目社区」奖项。

已被 OSCHINA 收录的开源项目(开源协议需使用 OSI 认证的协议、或木兰许可证)都默认参与评选在评选期间,每个开源项目的主页都会添加 “热度” 挂件,如下图所示:

我们提供了两种方式让用户为开源项目贡献热度。

一、常规方式

用户只需点击右侧的蓝色按钮即可为想要支持的开源项目贡献 “热度”。

每点击一次「贡献热度」按钮,随机给该项目的热度值加 1 或 10。该按钮支持连击,并且每位用户贡献 “热度” 的次数不受限制。请注意:进度圈加载过程中,不要关闭页面,否则会导致丢失 “热度值”。

二、极客玩法(类似 “挖矿”)

相比常规方式的手动 “点击按钮”,极客玩法让程序员能够用自己擅长的方式来贡献 “热度”,效率更高,更具可玩性。

上文提到,用户每次点击按钮所贡献的热度并不是固定的,因为我们采用 工作量证明 (Proof-of-Work,PoW) 设计了计算热度的规则,所以用户完成计算的工作量越大能贡献的热度更高

工作量证明是一种用来证明某项计算是困难,并且不能被快速完成的方法。它的基本思想是,为了完成一项特定的工作,必须要进行大量的计算。

工作量证明通常由两类主要参与方协作完成:提出者和验证者。提出者负责提交一个解决问题的证明,而验证者负责验证提交的证明是否正确。如果验证者发现证明是正确的,他们就会批准这个证明,并将其广播到网络中。

因此除了通过常规的点击按钮贡献热度,在 PoW 机制下,我们设计了另一种能贡献热度的玩法:

  • 用户自行编写算法函数在本地完成 “计算”
  • 将 “计算” 的证明提交给 OSCHINA
  • 如果该 “计算” 的证明通过验证,则为对应开源项目添加相应的热度值

具体来说就是:用户将 开源项目 ID浏览器控制台输入 page.objId 获取、用户 ID浏览器控制台输入 page.g_user_id 获取和 token (自定义随机字符串,不能重复,长度上限 255) 作为变量,然后自行编写算法函数,并根据上述变量生成哈希值,如果生成的哈希值满足以下条件,并通过服务器端的验证,即可成功为开源项目贡献热度。

热度计算规则如下:

  • 生成的哈希值前五位是 0,通过服务器端验证后,开源项目获得的热度值为 1

  • 生成的哈希值前六位是 0,通过服务器端验证后,开源项目获得的热度值为 10

  • 生成的哈希值包含 oschina 字符(不区分大小写),无论位置在哪,通过服务器端验证后,开源项目获得的热度值为 10000

下面是使用 JavaScript 实现的示例算法函数:

/**
 *
 * oscid:用户id
 * projectid:开源项目id
 *
 *
 * return genkey 用来生成最终结果hash的字符串格式如下
 * 软件id:osc用户id:计算总数:种子字符串
 * res 最后生成的hash 根据前缀的0或者内含oschina字符串为一个合法hash
 *
 */
function find(oscid,projectid){
    let IsOk = true
    let counter = 0
    while (IsOk) {
        let token = Math.random().toString(36).slice(-8)
        for (i = 0; i < 999999; i++) {
            let genkey = projectid+":"+oscid+":" + counter + ":" + token
            let testres = sha1(genkey)
            if (testres.startsWith("00000")) {
                return { "user": oscid, "project": projectid, "token": token, "counter": counter }
            }
            if(testres.toLowerCase().indexOf("oschina")!==-1){
                return { "user": oscid, "project": projectid, "token": token, "counter": counter }
            }
            counter=counter+1
        }
    }
}

完成本地计算后,用户需要将获得的 “计算” 证明提交到 OSCHINA 进行验证。

提交接口:http://www.oschina.net/action/api/pow

格式如下:

[
        {
                "user":998789,    //用户id
                "project":12,    //开源项目id
                "token":"6q1lczlk",    //用于验证的token
                "counter":529689    //计算总数
        }
]

提交 “计算” 证明示例(为了降低服务器压力,请尽量批量提交)。另外,由于存在缓存,如果发现成功提交后热度值没有更新,请过两分钟再刷新页面查看。

  • 通过 curl
curl --request POST \
  --url 'https://www.oschina.net/action/api/pow?filter=(created%3E'\''2022-10-14%2010%3A26%3A21.322'\'')' \
  --header 'Content-Type: application/json' \
  --cookie _user_behavior_=3002f72d-c0a3-438a-a30d-f5a9075c6d14 \
  --data '[
        {
                "user":12,
                "project":49376,
                "token":"kuhdgazm",
                "counter":1343290
        }
]'

成功提交会返回如下信息:

重复提交返回如下信息:

注意,请勿重复提交或攻击服务器,否则会被取消相应的热度值和参与资格

如有问题,请添加工作人员微信进群:564728101。(备注:oschina)

同时,我们创建了讨论帖让大家分享各自编写的算法函数,欢迎一起来玩!

>> 算法讨论区

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

>>>>>> 《2022 年度 OSC 中国开源项目评选》

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>