0.0.4 • Published 9 years ago

jpu v0.0.4

Weekly downloads
2
License
MIT
Repository
github
Last release
9 years ago

##Infra 学门联合产品部基础设施项目

###需求概况 Infra为共同体部署者提供统一的软件模块,由所有共同体的成员共享,包括以下需求:

####协作网络CO 共同体部署者定义一系列的event lisetener,根据事件创建工单、日志等文件,驱动协作。

  1. 创建共同体:

    1. createCOD(url,author,name,callback)
      • url: 部署代码的存放地址
      • author:作者(部署者)的简称。
      • name:COD的名称
      • callback:创建结束后的回调函数。参数是COD文件前缀。
    2. 部署代码中导出事件listener时,导出名称应与事件名称一致。
  2. 查询共同体的角色清单,这些共同体是部署者注册成功的;

    1. getCODlist()
      • 无参数
      • 返回一个字符串数组,内容是COD名称
  3. 选择角色查看协议,调整参数并签署;
    1. getCODObj(CODName)
      • CODName:COD的名称
      • 返回COD对象,读取其中的角色清单,和对应的用户协议。
      • 根据用户操作产生数字签名的契约。
    2. 读取COM对象的角色清单,选取对象
  4. 根据角色接收工单;
  5. 根据工单提交工作结果;
  6. 根据工作结果获得利益。
  7. 发布预售计划;
  8. 申请预购,同时确定提货|兑现;
  9. 申请贷款;
  10. 针对贷款、预购的投资回报提交意见。
  11. 针对投资回报意见获得回报。

####信任网络 DTT:Distributed Trust Table 1. 发布一个产品; 2. 发布针对对象(产品、成员)的属性; 3. 针对对象属性提交评价,这些评价信息沿着信任关系传递; 4. 促成交易的评价者可以获得回报; 5. 发布广告; 6. 针对有影响力的评价者提供优惠价格。

####联合提货权 JT:Joint Token 联合提货权是共同体内部记账单位。模型

  1. 创建账号;
    1. createNor(name,id,email,passphrase,callback)(普通账号:主要由成员使用,2048位openpgp密钥对)
      • name:户名
      • id:账号ID
      • email:联系email
      • passphrase:私钥口令
      • callback:回调函数
    2. createAuto(url,listener,author,name,callback)(自动帐号:根据事件触发对外转账)
      • url:自动账户代码地址
      • listener:事件处理函数对象,key=事件名称,value=处理函数名称。
      • author:作者(部署者)签名。
      • name:户名
      • callback:回调函数
    3. 根账号:创建一种新的提货权,根据事件触发发行、销毁;
  2. 建立账号列表
    1. readKey()返回key对象
      • keyfingerprint | id = obj
      • owner: userid | cod
      • keyprefix :可选
      • norfilename
      • balance
  3. 导入密钥对,从本路径下的sec、pub文件导入nor账号并提交。
    1. importNor()
  4. 更新余额,包括各种账号类别。
    1. updatebalance(callback)
      • callback:回调函数
  5. 发行,仅供测试使用。
    1. Issue()
  6. 普通账号转账;
    1. transfer(payerid,payeeid,amount,passphrase,callback){
      • payerid:付款人
      • payeeid:收款人
      • amount:金额
      • passphrase:付款人私钥口令
      • callback:回调函数
  7. 自动账户转账,记录在local文件夹
    1. CODtransfer(payerid,payeeid,amount,callback)
      • payerid:付款COD ID
      • payeeid:收款人
      • amount:金额
      • callback:回调函数
  8. 兑换成外部货币。
  9. 申请外部货币直接支付网关。

以上三套基础设施,共享下面的分布式底层功能: ####分布式存储 1. 提交工作记录,使它自动同步到其他成员的本地文件系统; 1. sent(item,method,callback) item:提交的对象 method:http方法 callback:回调函数 2. 提交工作记录到本地 1. sentlocal(item,callback) 3. 同步工作计划,即把其他人提交的工作记录同步到本地文件系统; 1. postsync(finish) finish:回调函数 2. localsync(item) item:本地文件中解析得到的对象。 只在sentlocal结尾时调用,更新数据。 4. 在重启软件(或操作系统)后仍然能恢复已有的事件:处理函数映射关系。 1. localindexinit()读取或建立post、put、local的index 2. init()重启后重建数据和事件,读取各账户并计算余额。

####分布式事件驱动机制 1. 提交事件处理函数; 1. eventloop() 处理"eventloop"事件。 从eventqueue对象中取出最小key(时间in unix time),按照nor、deploy、auto、transfer、newday的顺序处理,同类事件不排序。每处理一个事件,通过eventcallback()计数器收集足够的回调后,激发一个新的eventloop事件,计数器初始化为事件listener数量。因此,意味着这个事件所有listener回调后才处理下一个。 2. 原生提供以下事件激发: 1. newday:每天凌晨(北京时间8:00)发出。 2. nor:创建普通账户时发出。 3. auto:创建自动账户时发出。 4. deploy:部署共同体时发出。 5. transfer:转账时发出。 3. 在重启软件(或操作系统)后仍然能恢复已有的事件:处理函数映射关系。 1. eventinit()遍历post文件夹,建立auto文件对应的事件处理函数。 2.

为了确保分布式底层功能有效运行,需要一套机制:
1. 能够从零成员启动; 2. 任何阶段劫持成本高于收益; 3. 根据上一点原则,逐步升级分布式机制。

###去中心化 Infra项目从有中心方案启动,每当新方案的去中心化程度更高、且劫持成本高于收益时,由学门联合产品部(JPU)实施升级。具体步骤如下:

  1. 任何成员可以对commit提交comment;
  2. JPU汇总思路,整理为各种新方案并公布在本git库,具体路径:(第一个方案公布时确定)。
  3. 针对具体去中心方案的劫持方案,任何成员可以在本git库提交issue。
  4. 针对具体劫持方案的成本和收益,任何成员可以在issue下发表comment。
  5. 由JPU判定:某个去中心方案的所有劫持方案,均符合“劫持成本高于收益”。

###各阶段方案 1. 有中心:中心服务器供各方共享数据,尽量不处理业务逻辑。 2. 弱中心: qiniu:数据保存在专业数据服务器上,中心服务器只管理访问权限。 3. git 4. 无中心 dht * blockchina

###文件夹结构

  1. 文件格式:
    1. cod:共同体部署标识。
    2. author:提交者标识。
    3. tag:种类标识。
    4. id:put下任意自取,post下是自动取cod.tagtag.author范围内唯一的自增数。
    5. xxx:文件后缀,通常时yaml。
  2. put文件夹:可以增、改。暂时不能删,可以设置失效标志。失效后不可重启。
    1. 只能由原author修改。
  3. post文件夹:只增不删不改。
  4. listener文件夹:处理事件的代码。

###http API 1. POST | PUT : 1. 入口:http://url:port/xxx 2. 其中xxx是文件后缀 2. GET: 1. 入口:http://url:port/post/cod.tag.author.xxx 2. 其中xxx是文件后缀

###文件内容.yaml

  • cod
  • tag
  • author
  • id:PUT时可以指定
  • data: 数据(含数字签名)
  • signtype: 数字签名类型
  • createat:创建时间unixtime
  • remark: 备注

###提交规则 1. 全局部署者的公钥与部署包一同发布,存放在根目录下\deployer.pubkey。 2. 接受全局部署者签名的全局成员memberid.person.yaml。 3. 接受全局部署者签名的cod部署者cod.deployer.person.yaml。 4. 接受cod部署者签名的cod成员cod.memberid.person.yaml。 5. 接受testnet中表现良好的成员,具体规则待定。 6. 其它数据,由合法author签名即可接受。

###type

  • hashtype: 哈希算法类型 -1: default, SHA1 hex for now. 1:MD5 hex 2:MD5 b64 3:SHA1 hex 4:SHA1 b64 5:SHA256 hex 6:SHA256 b64 7:SHA512 hex 8:SHA512 b64 9:RIPEMD-160 hex * 10:RIPEMD-160 b64

  • signtype: 数字签名类型 缺省:没有签名 0: no sign | 没有签名 1: openpgp detach 2: openpgp clear

  • keytype: 密钥类型。 - 1:rsa - 2:openpgp
  • codetype: 源代码类型。 - 1:js - 2:lua
0.0.4

9 years ago

0.0.3

9 years ago

0.0.2

9 years ago

0.0.1

9 years ago