infraserver v0.0.1
##Infra 学门联合产品部基础设施项目
###需求概况 Infra为共同体部署者提供统一的软件模块,由所有共同体的成员共享,包括以下需求:
####协作网络CO 共同体部署者定义一系列的event lisetener,根据事件创建工单、日志等文件,驱动协作。
创建共同体:
- createCOD(url,author,name,callback)
- url: 部署代码的存放地址
- author:作者(部署者)的简称。
- name:COD的名称
- callback:创建结束后的回调函数。参数是COD文件前缀。
- 部署代码中导出事件listener时,导出名称应与事件名称一致。
- createCOD(url,author,name,callback)
查询共同体的角色清单,这些共同体是部署者注册成功的;
- getCODlist()
- 无参数
- 返回一个字符串数组,内容是COD名称
- getCODlist()
- 选择角色查看协议,调整参数并签署;
- getCODObj(CODName)
- CODName:COD的名称
- 返回COD对象,读取其中的角色清单,和对应的用户协议。
- 根据用户操作产生数字签名的契约。
- 读取COM对象的角色清单,选取对象
- getCODObj(CODName)
- 根据角色接收工单;
- 根据工单提交工作结果;
- 根据工作结果获得利益。
- 发布预售计划;
- 申请预购,同时确定提货|兑现;
- 申请贷款;
- 针对贷款、预购的投资回报提交意见。
- 针对投资回报意见获得回报。
####信任网络 DTT:Distributed Trust Table 1. 发布一个产品; 2. 发布针对对象(产品、成员)的属性; 3. 针对对象属性提交评价,这些评价信息沿着信任关系传递; 4. 促成交易的评价者可以获得回报; 5. 发布广告; 6. 针对有影响力的评价者提供优惠价格。
####联合提货权 JT:Joint Token 联合提货权是共同体内部记账单位。模型
- 创建账号;
- createNor(name,id,email,passphrase,callback)(普通账号:主要由成员使用,2048位openpgp密钥对)
- name:户名
- id:账号ID
- email:联系email
- passphrase:私钥口令
- callback:回调函数
- createAuto(url,listener,author,name,callback)(自动帐号:根据事件触发对外转账)
- url:自动账户代码地址
- listener:事件处理函数对象,key=事件名称,value=处理函数名称。
- author:作者(部署者)签名。
- name:户名
- callback:回调函数
- 根账号:创建一种新的提货权,根据事件触发发行、销毁;
- createNor(name,id,email,passphrase,callback)(普通账号:主要由成员使用,2048位openpgp密钥对)
- 建立账号列表
- readKey()返回key对象
- keyfingerprint | id = obj
- owner: userid | cod
- keyprefix :可选
- norfilename
- balance
- readKey()返回key对象
- 导入密钥对,从本路径下的sec、pub文件导入nor账号并提交。
- importNor()
- 更新余额,包括各种账号类别。
- updatebalance(callback)
- callback:回调函数
- updatebalance(callback)
- 发行,仅供测试使用。
- Issue()
- 普通账号转账;
- transfer(payerid,payeeid,amount,passphrase,callback){
- payerid:付款人
- payeeid:收款人
- amount:金额
- passphrase:付款人私钥口令
- callback:回调函数
- transfer(payerid,payeeid,amount,passphrase,callback){
- 自动账户转账,记录在local文件夹
- CODtransfer(payerid,payeeid,amount,callback)
- payerid:付款COD ID
- payeeid:收款人
- amount:金额
- callback:回调函数
- CODtransfer(payerid,payeeid,amount,callback)
- 兑换成外部货币。
- 申请外部货币直接支付网关。
以上三套基础设施,共享下面的分布式底层功能: ####分布式存储 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)实施升级。具体步骤如下:
- 任何成员可以对commit提交comment;
- JPU汇总思路,整理为各种新方案并公布在本git库,具体路径:(第一个方案公布时确定)。
- 针对具体去中心方案的劫持方案,任何成员可以在本git库提交issue。
- 针对具体劫持方案的成本和收益,任何成员可以在issue下发表comment。
- 由JPU判定:某个去中心方案的所有劫持方案,均符合“劫持成本高于收益”。
###各阶段方案 1. 有中心:中心服务器供各方共享数据,尽量不处理业务逻辑。 2. 弱中心: qiniu:数据保存在专业数据服务器上,中心服务器只管理访问权限。 3. git 4. 无中心 dht * blockchina
###文件夹结构
- 文件格式:
- cod:共同体部署标识。
- author:提交者标识。
- tag:种类标识。
- id:put下任意自取,post下是自动取cod.tag或tag.author范围内唯一的自增数。
- xxx:文件后缀,通常时yaml。
- put文件夹:可以增、改。暂时不能删,可以设置失效标志。失效后不可重启。
- 只能由原author修改。
- post文件夹:只增不删不改。
- 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
9 years ago