• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

worknation/work.nation: Decentralized skill attestations using uPort, Ethereum a ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

worknation/work.nation

开源软件地址:

https://github.com/worknation/work.nation

开源编程语言:


开源软件介绍:

Work.nation

This is a proof of concept demo which allows the creation of contribution claims and confirmations as signed claims, using uPort + IPFS + Ethereum.

Live demo

https://demo.worknation.io

Architecture

A visual overview of the components and dataflows between them:

architecture

Login

Users log in with uPort, which means that they log in with true decentralized authentication: an identity that is entirely owned and controlled by them, on their devices, with no username or password ever stored in the Work.nation system.

Projects

Users create projects by entering project attributes, expected contribuitons and confirming with uPort. They can then search for contributors based on past contributions to invite to the project.

Technically, the creation of a project is broken into two steps:

  1. Create a project "permanode" (inspired by Camlistore's permanodes) -- an immutable anchor containing data that will never change:
    • the creator's uPort ID
    • a timestamp
    • a random string to ensure a unique ID (hash)
  2. Create a project profile which references that permanode ID -- this is where all mutable data is stored; and a new profile will be created when any update is required

Project Permanodes

Creating a project permanode has the following steps:

  1. Create permanode JSON as described above
  2. The JSON is canonicalized (sorted by keys)
  3. The canonical JSON is stored in IPFS
  4. The resulting IPFS ID (hash) is added to an Ethereum contract by the Ethereum address of the uPort user

Example permanode:

{
  creator: "0xfdab345e368120a5ba99549c1f74371cd73cdb93",
  random: "LHfpaCvFMgyxTKCawtmn1qdbc91UhM6n1cL2aQRki9a",
  timestamp: "2017-05-05T20:54:55.337Z",
  type: "permanode"
}

This permanode has the ID /ipfs/QmUbGAEJk7HZXTSWV7dFyrbNecRuhGnbPvYCbgB6UtBHBr.

Project Profiles

We can then create a profile which references the above project permanode. The process is largely identical to the permanode creation steps in IPFS and Ethereum.

Example project profile:

{
  address: "https://chicken-robot.example.com",
  contact: "0x57fab088be2f8bfd5d4cbf849c2568672e4f3db3",                // uport id of project contact
  imageUrl: "https://s-media-cache-ak0.pinimg.com/736x/2b/22/f8/2b22f82e7843d732c5def05055529c55.jpg",
  name: "Chicken Robot",
  permanodeId: "/ipfs/QmUbGAEJk7HZXTSWV7dFyrbNecRuhGnbPvYCbgB6UtBHBr",  // project permanode
  skills: "Chicken Wrangling, Robot Design",
  timestamp: "2017-05-05T20:54:55.918Z",
  type: "project"
}

Contribution Claims and Confirmations

Users can self-claim contributions provided to a given project, and confirm contribution claims made by other users.

Contribution Claim

Technically, the process of creating each claim is identical in the IPFS and Ethereum steps described in project creation above. The differences are only in the content of the JSON:

  1. Each contribution claim is represented in IETF Reputon format
  2. rater and rated are both set to the contribution claimant
  3. The extra field project is added, containing the project permanode ID

For example, Alice claims that she has contributed Ruby on Rails code on the project Chicken Robot created above:

{
    "application": "skills",
    "reputons": [{
        "rater": "0x57fab088be2f8bfd5d4cbf849c2568672e4f3db3",  // Alice
        "rated": "0x57fab088be2f8bfd5d4cbf849c2568672e4f3db3",  // Alice
        "assertion": "Ruby on Rails",
        "project": "/ipfs/QmUbGAEJk7HZXTSWV7dFyrbNecRuhGnbPvYCbgB6UtBHBr"
        "rating": 1,
        "sample-size": 1,
        "generated": 1492205001                                 // unix timestamp
    }]
}

This claim has the IPFS address QmX3eFcpPL3bN3EBzcPnUH4fTiJyWi3G8NxEZjfKCGqrnd.

Example Contribution Confirmation

The IPFS and Ethereum steps are identical to those described above. The differences are in the content:

  1. Like contribution claims, each confirmation claim is represented in IETF Reputon format
  2. rater is the uPort address of the confirmer
  3. rated is the IPFS ID of the original contribution claim

For example, Bob confirms that Alice has provided Ruby on Rails contributions on project Chicken Robot:

{
    "application": "skills",
    "reputons": [{
        "rater": "0x9df6d7f675d119228eae858213587c0687d0a498",     // Bob
        "assertion": "confirm",
        "rated": "QmX3eFcpPL3bN3EBzcPnUH4fTiJyWi3G8NxEZjfKCGqrnd", // Alice's signed claim of ROR skills
        "rating": 1,                                               // 1 = master, 0.5 = confirm
        "normal-rating": 0.5,
        "sample-size": 1,
        "generated": 1492205002
    }]
}

Code Bases

Work.nation is fully open source under an Apache 2 license. The code is available in these locations:

Reputation Index Schema

The Rails server acts as a "reputation index". Below is a snapshot of the database schema.

architecture

Contributing

Contributions and pull requests are most welcome. If you have a big idea, we encourage you to open an issue in one of the repos above to discuss it. Small ideas or fixes just go for it!




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap